diff options
Diffstat (limited to 'Build')
481 files changed, 39702 insertions, 41531 deletions
diff --git a/Build/source/texk/README b/Build/source/texk/README index 4a36ce7b345..1a28d9620f1 100644 --- a/Build/source/texk/README +++ b/Build/source/texk/README @@ -58,7 +58,7 @@ dvipos - ? dvipsk - maintained here, by us -dvisvgm 2.1.3 - checked 21feb17 +dvisvgm 2.3.1 - checked 13jan18 http://dvisvgm.bplaced.net/Downloads gregorio 5.0.1 - checked 16apr17 diff --git a/Build/source/texk/dvisvgm/ChangeLog b/Build/source/texk/dvisvgm/ChangeLog index 3eca3f8134f..f0af46e4ea4 100644 --- a/Build/source/texk/dvisvgm/ChangeLog +++ b/Build/source/texk/dvisvgm/ChangeLog @@ -1,3 +1,7 @@ +2018-01-15 Karl Berry <karl@freefriends.org> + + * Import 2.3.1 with Ghostscript.cpp patch from Martin. + 2018-01-08 Karl Berry <karl@freefriends.org> * m4/ax_cxx_compile_stdcxx.m4: move to top-level source/m4/. diff --git a/Build/source/texk/dvisvgm/TLpatches/ChangeLog b/Build/source/texk/dvisvgm/TLpatches/ChangeLog index f4c01eceb5d..21c01cbdaba 100644 --- a/Build/source/texk/dvisvgm/TLpatches/ChangeLog +++ b/Build/source/texk/dvisvgm/TLpatches/ChangeLog @@ -1,3 +1,9 @@ +2018-01-15 Karl Berry <karl@freefriends.org> + + * Import 2.3.1. + * patch-08-makefiles: adapt. + * patch-16-gserrornames: new patch from Martin. + 2017-01-29 Karl Berry <karl@freefriends.org> * Import 2.1. diff --git a/Build/source/texk/dvisvgm/TLpatches/TL-Changes b/Build/source/texk/dvisvgm/TLpatches/TL-Changes index 19bac3ae763..ce481d6e4f3 100644 --- a/Build/source/texk/dvisvgm/TLpatches/TL-Changes +++ b/Build/source/texk/dvisvgm/TLpatches/TL-Changes @@ -5,13 +5,28 @@ Changes applied to the original dvisvgm source as obtained from: Update version in ./version.ac. -Removed common and generated files: +mv dvisvgm-src dvisvm-prev +tar xf dvisvgm-VER.tar.gz +mv dvisvgm-VER dvisvgm-src +cd dvisvgm-src + +# remove common and generated files: rm ar-lib compile config.guess config.sub depcomp install-sh rm ltmain.sh missing test-driver rm aclocal.m4 configure # reduce chance of confusion? +# +# files to add: +svn status | sed -n 's/^\?//p' +svn add `!!` +svn status | sed -n 's/^\?//p' # rerun, should be empty now +# +# files to remove: +svn status | sed -n 's/^\!//p' +svn rm `!!` +svn status | sed -n 's/^\!//p' # rerun, should be empty now +cd .. # patch to integrate into TL build: patch -d dvisvgm-src -p1 <TLpatches/patch-08-makefiles -# use same automake macro as upstream: -cp dvisvgm-src/m4/ax_cxx_compile_stdcxx.m4 m4 +autoreconf diff --git a/Build/source/texk/dvisvgm/TLpatches/patch-08-makefiles b/Build/source/texk/dvisvgm/TLpatches/patch-08-makefiles index 38123785f03..b9d0894fbdc 100644 --- a/Build/source/texk/dvisvgm/TLpatches/patch-08-makefiles +++ b/Build/source/texk/dvisvgm/TLpatches/patch-08-makefiles @@ -1,17 +1,17 @@ -diff -u2r '--exclude=config.h.in' '--exclude=aclocal.m4' '--exclude=Makefile.in' dvisvgm-2.1/Makefile.am new/Makefile.am ---- dvisvgm-2.1/Makefile.am 2017-01-06 09:21:42.000000000 -0800 -+++ new/Makefile.am 2017-01-30 10:54:21.383122973 -0800 +diff -u2r dvisvgm-2.3.1/Makefile.am dvisvgm-src/Makefile.am +--- dvisvgm-2.3.1/Makefile.am 2018-01-02 01:09:10.000000000 -0800 ++++ dvisvgm-src/Makefile.am 2018-01-15 15:21:16.671504747 -0800 @@ -6,5 +6,5 @@ AUTOMAKE_OPTIONS = foreign EXTRA_DIST = COPYING -SUBDIRS = libs src tests doc -+SUBDIRS = libs src #TL: tests doc ++SUBDIRS = libs src #not for TL: tests doc + ACLOCAL_AMFLAGS = -I m4 - if CODE_COVERAGE_ENABLED -diff -u2r '--exclude=config.h.in' '--exclude=aclocal.m4' '--exclude=Makefile.in' dvisvgm-2.1/src/Makefile.am new/src/Makefile.am ---- dvisvgm-2.1/src/Makefile.am 2017-01-19 07:10:14.000000000 -0800 -+++ new/src/Makefile.am 2017-01-31 09:30:46.062748355 -0800 -@@ -12,8 +12,5 @@ +diff -u2r dvisvgm-2.3.1/src/Makefile.am dvisvgm-src/src/Makefile.am +--- dvisvgm-2.3.1/src/Makefile.am 2018-01-02 01:09:11.000000000 -0800 ++++ dvisvgm-src/src/Makefile.am 2018-01-15 15:28:34.370204007 -0800 +@@ -14,8 +14,5 @@ $(noinst_LIBRARIES) \ ../libs/clipper/libclipper.a \ - ../libs/xxHash/libxxhash.a \ @@ -21,7 +21,7 @@ diff -u2r '--exclude=config.h.in' '--exclude=aclocal.m4' '--exclude=Makefile.in' + ../libs/xxHash/libxxhash.a if ENABLE_WOFF -@@ -24,5 +21,14 @@ +@@ -26,5 +23,14 @@ endif +dvisvgm_LDADD += \ @@ -36,7 +36,7 @@ diff -u2r '--exclude=config.h.in' '--exclude=aclocal.m4' '--exclude=Makefile.in' +dvisvgm_DEPENDENCIES += $(KPATHSEA_DEPEND) $(ZLIB_DEPEND) $(FREETYPE2_DEPEND) libdvisvgm_a_SOURCES = \ -@@ -232,27 +238,40 @@ +@@ -242,35 +248,45 @@ EXTRA_DIST = options.xml options.dtd iapi.h ierrors.h MiKTeXCom.hpp MiKTeXCom.cpp -AM_CFLAGS = -Wall \ @@ -44,9 +44,11 @@ diff -u2r '--exclude=config.h.in' '--exclude=aclocal.m4' '--exclude=Makefile.in' - $(CODE_COVERAGE_CFLAGS) +dvisvgm_srcdir = $(top_srcdir)/dvisvgm-src --AM_CXXFLAGS = -Wall -Wnon-virtual-dtor \ +-AM_CXXFLAGS = -Wall -Wnon-virtual-dtor -Wno-mismatched-tags \ - -I$(top_srcdir)/libs/clipper \ +- -I$(top_srcdir)/libs/variant/include \ - -I$(top_srcdir)/libs/xxHash \ +- $(KPSE_CFLAGS) \ - $(FREETYPE_CFLAGS) \ - $(ZLIB_CFLAGS) \ +AM_CFLAGS = $(WARNING_CFLAGS) \ @@ -55,8 +57,13 @@ diff -u2r '--exclude=config.h.in' '--exclude=aclocal.m4' '--exclude=Makefile.in' +AM_CXXFLAGS = $(WARNING_CFLAGS) -Wnon-virtual-dtor \ + -I$(dvisvgm_srcdir)/libs/clipper \ ++ -I$(dvisvgm_srcdir)/libs/variant/include \ + -I$(dvisvgm_srcdir)/libs/xxHash + + AM_LDFLAGS = \ +- $(KPSE_LIBS) \ + $(CODE_COVERAGE_LDFLAGS) + if ENABLE_WOFF AM_CFLAGS += \ - -I$(top_srcdir)/libs/ff-woff/fontforge \ @@ -65,10 +72,13 @@ diff -u2r '--exclude=config.h.in' '--exclude=aclocal.m4' '--exclude=Makefile.in' + -I$(dvisvgm_srcdir)/libs/ff-woff/inc AM_CXXFLAGS += \ -- -I$(top_srcdir)/libs/woff2/brotli/enc \ -- -I$(top_srcdir)/libs/woff2/src -+ -I$(dvisvgm_srcdir)/libs/woff2/brotli/enc \ -+ -I$(dvisvgm_srcdir)/libs/woff2/src + $(TTFAUTOHINT_CFLAGS) \ +- -I$(top_srcdir)/libs/brotli/include \ +- -I$(top_srcdir)/libs/woff2/include ++ -I$(dvisvgm_srcdir)/libs/brotli/include \ ++ -I$(dvisvgm_srcdir)/libs/woff2/include + + AM_LDFLAGS += $(TTFAUTOHINT_LIBS) endif +AM_CXXFLAGS += \ @@ -82,14 +92,12 @@ diff -u2r '--exclude=config.h.in' '--exclude=aclocal.m4' '--exclude=Makefile.in' +if WIN32 +AM_CXXFLAGS += -DTEXLIVEWIN32 +endif WIN32 -+ - AM_LDFLAGS = $(CODE_COVERAGE_LDFLAGS) +if ! TEXLIVE_BUILD +# TL: do not try to rebuild these source files. # the command-line parser class is generated from options.xml by opt2cpp $(srcdir)/CommandLine.hpp: options.xml -@@ -267,6 +286,16 @@ +@@ -285,6 +301,16 @@ psdefs.ps: ; +endif ! TEXLIVE_BUILD diff --git a/Build/source/texk/dvisvgm/TLpatches/patch-16-gserrornames b/Build/source/texk/dvisvgm/TLpatches/patch-16-gserrornames new file mode 100644 index 00000000000..acdeaddddcf --- /dev/null +++ b/Build/source/texk/dvisvgm/TLpatches/patch-16-gserrornames @@ -0,0 +1,10 @@ +diff -u2r dvisvgm-2.3.1/src/Ghostscript.cpp dvisvgm-src/src/Ghostscript.cpp +--- dvisvgm-2.3.1/src/Ghostscript.cpp 2018-01-02 01:09:11.000000000 -0800 ++++ dvisvgm-src/src/Ghostscript.cpp 2018-01-15 15:57:09.114619987 -0800 +@@ -347,5 +347,5 @@ + return error_names[code-1]; + #else +- if (auto error_names = LOAD_SYMBOL(gs_error_names)) ++ if (auto error_names = loadSymbol<const char**>("gs_error_names")) + return error_names[code-1]; + return nullptr; diff --git a/Build/source/texk/dvisvgm/configure b/Build/source/texk/dvisvgm/configure index 713d99dfa32..19eb0816eff 100755 --- a/Build/source/texk/dvisvgm/configure +++ b/Build/source/texk/dvisvgm/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for dvisvgm (TeX Live) 2.1.3. +# Generated by GNU Autoconf 2.69 for dvisvgm (TeX Live) 2.3.1. # # Report bugs to <tex-k@tug.org>. # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='dvisvgm (TeX Live)' PACKAGE_TARNAME='dvisvgm--tex-live-' -PACKAGE_VERSION='2.1.3' -PACKAGE_STRING='dvisvgm (TeX Live) 2.1.3' +PACKAGE_VERSION='2.3.1' +PACKAGE_STRING='dvisvgm (TeX Live) 2.3.1' PACKAGE_BUGREPORT='tex-k@tug.org' PACKAGE_URL='' @@ -1375,7 +1375,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures dvisvgm (TeX Live) 2.1.3 to adapt to many kinds of systems. +\`configure' configures dvisvgm (TeX Live) 2.3.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1446,7 +1446,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of dvisvgm (TeX Live) 2.1.3:";; + short | recursive ) echo "Configuration of dvisvgm (TeX Live) 2.3.1:";; esac cat <<\_ACEOF @@ -1581,7 +1581,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -dvisvgm (TeX Live) configure 2.1.3 +dvisvgm (TeX Live) configure 2.3.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2449,7 +2449,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by dvisvgm (TeX Live) $as_me 2.1.3, which was +It was created by dvisvgm (TeX Live) $as_me 2.3.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -8188,7 +8188,7 @@ fi # Define the identity of the package. PACKAGE='dvisvgm--tex-live-' - VERSION='2.1.3' + VERSION='2.3.1' cat >>confdefs.h <<_ACEOF @@ -20189,7 +20189,7 @@ Usage: $0 [OPTIONS] Report bugs to <bug-libtool@gnu.org>." lt_cl_version="\ -dvisvgm (TeX Live) config.lt 2.1.3 +dvisvgm (TeX Live) config.lt 2.3.1 configured by $0, generated by GNU Autoconf 2.69. Copyright (C) 2011 Free Software Foundation, Inc. @@ -22971,7 +22971,7 @@ CODE_COVERAGE_RULES= DVISVGM_TREE=dvisvgm-src -ac_config_files="$ac_config_files Makefile dvisvgm-src/Makefile dvisvgm-src/libs/Makefile dvisvgm-src/libs/clipper/Makefile dvisvgm-src/libs/ff-woff/Makefile dvisvgm-src/libs/woff2/Makefile dvisvgm-src/libs/woff2/brotli/Makefile dvisvgm-src/libs/xxHash/Makefile dvisvgm-src/src/Makefile dvisvgm-src/src/version.hpp" +ac_config_files="$ac_config_files Makefile dvisvgm-src/Makefile dvisvgm-src/libs/Makefile dvisvgm-src/libs/brotli/Makefile dvisvgm-src/libs/clipper/Makefile dvisvgm-src/libs/ff-woff/Makefile dvisvgm-src/libs/variant/Makefile dvisvgm-src/libs/woff2/Makefile dvisvgm-src/libs/xxHash/Makefile dvisvgm-src/src/Makefile dvisvgm-src/src/version.hpp" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -23526,7 +23526,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by dvisvgm (TeX Live) $as_me 2.1.3, which was +This file was extended by dvisvgm (TeX Live) $as_me 2.3.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23592,7 +23592,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -dvisvgm (TeX Live) config.status 2.1.3 +dvisvgm (TeX Live) config.status 2.3.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -24113,10 +24113,11 @@ do "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "dvisvgm-src/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/Makefile" ;; "dvisvgm-src/libs/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/Makefile" ;; + "dvisvgm-src/libs/brotli/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/brotli/Makefile" ;; "dvisvgm-src/libs/clipper/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/clipper/Makefile" ;; "dvisvgm-src/libs/ff-woff/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/ff-woff/Makefile" ;; + "dvisvgm-src/libs/variant/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/variant/Makefile" ;; "dvisvgm-src/libs/woff2/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/woff2/Makefile" ;; - "dvisvgm-src/libs/woff2/brotli/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/woff2/brotli/Makefile" ;; "dvisvgm-src/libs/xxHash/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/xxHash/Makefile" ;; "dvisvgm-src/src/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/src/Makefile" ;; "dvisvgm-src/src/version.hpp") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/src/version.hpp" ;; diff --git a/Build/source/texk/dvisvgm/configure.ac b/Build/source/texk/dvisvgm/configure.ac index 1d3d786d021..ae3bd9b1ce8 100644 --- a/Build/source/texk/dvisvgm/configure.ac +++ b/Build/source/texk/dvisvgm/configure.ac @@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script dnl for dvisvgm in TeX Live. dnl -dnl Copyright 2015-2017 Karl Berry <tex-live@tug.org> +dnl Copyright 2015-2018 Karl Berry <tex-live@tug.org> dnl Copyright 2009-2014 Peter Breitenlohner <tex-live@tug.org> dnl dnl This file is free software; the copyright holder @@ -10,14 +10,14 @@ dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl Adapted for TeX Live from original dvisvgm configure.ac -dnl Copyright 2005-2017 Martin Gieseking +dnl Copyright 2005-2018 Martin Gieseking dnl m4_include([version.ac])[] dnl define dvisvgm_version AC_INIT([dvisvgm (TeX Live)], dvisvgm_version, [tex-k@tug.org]) AC_PREREQ([2.65]) AC_CONFIG_SRCDIR([dvisvgm-src/src/dvisvgm.cpp]) AC_CONFIG_AUX_DIR([../../build-aux]) -AC_CONFIG_MACRO_DIRS([../../m4 m4]) +AC_CONFIG_MACRO_DIRS([../../m4]) AM_CONDITIONAL([TEXLIVE_BUILD], [test "x$enable_texlive_build" = xyes]) @@ -59,9 +59,15 @@ if test "x$enable_native_texlive_build" = xyes; then # TL: always dlload libgs, must avoid shared lib ref in binary. HAVE_LIBGS=0 else -HAVE_LIBGS=1 +have_libgs=yes AC_CHECK_HEADER([ghostscript/iapi.h], - AC_CHECK_LIB(gs, gsapi_new_instance, , HAVE_LIBGS=0), HAVE_LIBGS=0) + [AC_CHECK_LIB(gs, gsapi_revision,, [have_libgs=no])], + [have_libgs=no]) +AS_IF([test "x$have_libgs" = "xno"], + # Ghostscript not found, check for dlopen + [AC_CHECK_LIB(dl, dlopen,, + [AC_DEFINE(DISABLE_GS, 1, [Set to 1 if PostScript support should be disabled])] + [AC_MSG_WARN(PostScript support disabled)])]) fi if test "$HAVE_LIBGS" -eq 0; then @@ -189,10 +195,11 @@ AC_SUBST([DVISVGM_TREE], [dvisvgm-src]) AC_CONFIG_FILES([Makefile dvisvgm-src/Makefile dvisvgm-src/libs/Makefile + dvisvgm-src/libs/brotli/Makefile dvisvgm-src/libs/clipper/Makefile dvisvgm-src/libs/ff-woff/Makefile + dvisvgm-src/libs/variant/Makefile dvisvgm-src/libs/woff2/Makefile - dvisvgm-src/libs/woff2/brotli/Makefile dvisvgm-src/libs/xxHash/Makefile dvisvgm-src/src/Makefile dvisvgm-src/src/version.hpp diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/AUTHORS b/Build/source/texk/dvisvgm/dvisvgm-src/AUTHORS index 28871240af7..6fe5ecc9245 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/AUTHORS +++ b/Build/source/texk/dvisvgm/dvisvgm-src/AUTHORS @@ -1,3 +1,26 @@ Martin Gieseking <martin.gieseking@uos.de> author of dvisvgm +Yann Collet + libs/xxHash/xxhash.* + https://github.com/Cyan4973/xxHash + +Google Inc. + libs/woff2/brotli/* + libs/woff2/include/* + libs/woff2/src/* + https://github.com/google/brotli + https://github.com/google/woff2 + +Angus Johnson + libs/clipper/clipper.* + https://sourceforge.net/projects/polyclipping/ + +Michael Park + libs/variant/include/mpark/* + https://github.com/mpark/variant + +George Williams + libs/ff-woff/* + https://github.com/fontforge/fontforge + diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/ChangeLog b/Build/source/texk/dvisvgm/dvisvgm-src/ChangeLog index 1e75a4a5892..e87fb4b7185 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/ChangeLog +++ b/Build/source/texk/dvisvgm/dvisvgm-src/ChangeLog @@ -1,3 +1,1161 @@ +2018-01-12 Martin Gieseking <martin.gieseking@uos.de> + + * NEWS: + updated NEWS + + * .appveyor.yml: + AppVeyor: fixed download link of ttfautohint-dll + +2018-01-11 Martin Gieseking <martin.gieseking@uos.de> + + * doc/dvisvgm.txt.in: + manpage: reworded info about option --bbox=preview (closes #83) + +2018-01-09 Martin Gieseking <martin.gieseking@uos.de> + + * .appveyor.yml, .travis.yml, CMakeLists.txt, configure.ac, src/Doxyfile, + src/version.hpp: + set version to 2.3.1 + +2018-01-08 Martin Gieseking <martin.gieseking@uos.de> + + * .appveyor.yml: + updated FreeType to version 2.9 + +2018-01-03 Martin Gieseking <martin.gieseking@uos.de> + + * src/CMapReader.cpp, src/Directory.cpp, src/Directory.hpp, + src/DvisvgmSpecialHandler.cpp, src/FileFinder.cpp, src/FileFinder.hpp, + src/FilePath.cpp, src/FilePath.hpp, src/FileSystem.cpp, + src/FileSystem.hpp, src/Font.cpp, src/FontCache.cpp, src/FontCache.hpp, + src/FontMap.cpp, src/FontMetrics.cpp, src/FontMetrics.hpp, + src/MetafontWrapper.cpp: + replaced some C string parameters with C++ strings + +2018-01-02 Martin Gieseking <martin.gieseking@uos.de> + + * src/Font.cpp: + fixed char width of fonts slanted by style option (closes #82) + + * src/dvisvgm.cpp: + avoid potential dangling string pointer to --fontmap argument + + * Makefile.am, README, README.md, configure.ac, doc/Makefile.am, + doc/conf-dblatex-man.xsl, doc/conf-dblatex-pdf.xsl, doc/db2html.xsl, + doc/dvisvgm.txt.in, doc/tweak-db-article.xsl, doc/tweak-db-refentry.xsl, + doc/tweak-dblatex-pdf.xsl, libs/Makefile.am, + libs/ff-woff/fontforge/tmpfile2.cpp, src/AGLTable.hpp, + src/BasicDVIReader.cpp, src/BasicDVIReader.hpp, src/Bezier.cpp, + src/Bezier.hpp, src/BgColorSpecialHandler.cpp, + src/BgColorSpecialHandler.hpp, src/Bitmap.cpp, src/Bitmap.hpp, + src/BoundingBox.cpp, src/BoundingBox.hpp, src/CLCommandLine.cpp, + src/CLCommandLine.hpp, src/CLOption.hpp, src/CMap.cpp, src/CMap.hpp, + src/CMapManager.cpp, src/CMapManager.hpp, src/CMapReader.cpp, + src/CMapReader.hpp, src/CRC32.cpp, src/CRC32.hpp, src/Calculator.cpp, + src/Calculator.hpp, src/CharMapID.cpp, src/CharMapID.hpp, + src/Character.hpp, src/Color.cpp, src/Color.hpp, + src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.hpp, + src/CommandLine.hpp, src/DLLoader.cpp, src/DLLoader.hpp, + src/DVIActions.hpp, src/DVIReader.cpp, src/DVIReader.hpp, + src/DVIToSVG.cpp, src/DVIToSVG.hpp, src/DVIToSVGActions.cpp, + src/DVIToSVGActions.hpp, src/DependencyGraph.hpp, src/Directory.cpp, + src/Directory.hpp, src/DvisvgmSpecialHandler.cpp, + src/DvisvgmSpecialHandler.hpp, src/EPSFile.cpp, src/EPSFile.hpp, + src/EPSToSVG.cpp, src/EPSToSVG.hpp, src/EmSpecialHandler.cpp, + src/EmSpecialHandler.hpp, src/EncFile.cpp, src/EncFile.hpp, + src/FileFinder.cpp, src/FileFinder.hpp, src/FilePath.cpp, + src/FilePath.hpp, src/FileSystem.cpp, src/FileSystem.hpp, + src/FixWord.hpp, src/Font.cpp, src/Font.hpp, src/FontCache.cpp, + src/FontCache.hpp, src/FontEncoding.cpp, src/FontEncoding.hpp, + src/FontEngine.cpp, src/FontEngine.hpp, src/FontManager.cpp, + src/FontManager.hpp, src/FontMap.cpp, src/FontMap.hpp, + src/FontMetrics.cpp, src/FontMetrics.hpp, src/FontStyle.hpp, + src/FontWriter.cpp, src/FontWriter.hpp, src/GFGlyphTracer.cpp, + src/GFGlyphTracer.hpp, src/GFReader.cpp, src/GFReader.hpp, + src/GFTracer.cpp, src/GFTracer.hpp, src/Ghostscript.cpp, + src/Ghostscript.hpp, src/Glyph.hpp, src/GlyphTracerMessages.hpp, + src/GraphicsPath.hpp, src/HtmlSpecialHandler.cpp, + src/HtmlSpecialHandler.hpp, src/HyperlinkManager.cpp, + src/HyperlinkManager.hpp, src/InputBuffer.cpp, src/InputBuffer.hpp, + src/InputReader.cpp, src/InputReader.hpp, src/JFM.cpp, src/JFM.hpp, + src/Length.cpp, src/Length.hpp, src/Makefile.am, src/Makefile.old, + src/MapLine.cpp, src/MapLine.hpp, src/Matrix.cpp, src/Matrix.hpp, + src/Message.cpp, src/Message.hpp, src/MessageException.hpp, + src/MetafontWrapper.cpp, src/MetafontWrapper.hpp, src/MiKTeXCom.cpp, + src/MiKTeXCom.hpp, src/NoPsSpecialHandler.cpp, + src/NoPsSpecialHandler.hpp, src/NumericRanges.hpp, src/PDFParser.cpp, + src/PDFParser.hpp, src/PSFilter.hpp, src/PSInterpreter.cpp, + src/PSInterpreter.hpp, src/PSPattern.cpp, src/PSPattern.hpp, + src/PSPreviewFilter.cpp, src/PSPreviewFilter.hpp, src/PageRanges.cpp, + src/PageRanges.hpp, src/PageSize.cpp, src/PageSize.hpp, src/Pair.hpp, + src/PapersizeSpecialHandler.cpp, src/PapersizeSpecialHandler.hpp, + src/PathClipper.cpp, src/PathClipper.hpp, src/PdfSpecialHandler.cpp, + src/PdfSpecialHandler.hpp, src/PreScanDVIReader.cpp, + src/PreScanDVIReader.hpp, src/Process.cpp, src/Process.hpp, + src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/RangeMap.cpp, + src/RangeMap.hpp, src/SVGCharHandler.cpp, src/SVGCharHandler.hpp, + src/SVGCharHandlerFactory.cpp, src/SVGCharHandlerFactory.hpp, + src/SVGCharPathHandler.cpp, src/SVGCharPathHandler.hpp, + src/SVGCharTspanTextHandler.cpp, src/SVGCharTspanTextHandler.hpp, + src/SVGOutput.cpp, src/SVGOutput.hpp, src/SVGSingleCharTextHandler.cpp, + src/SVGSingleCharTextHandler.hpp, src/SVGTree.cpp, src/SVGTree.hpp, + src/SWFWriter.cpp, src/SWFWriter.hpp, src/ShadingPatch.cpp, + src/ShadingPatch.hpp, src/SignalHandler.cpp, src/SignalHandler.hpp, + src/SpecialActions.hpp, src/SpecialHandler.hpp, src/SpecialManager.cpp, + src/SpecialManager.hpp, src/StreamReader.cpp, src/StreamReader.hpp, + src/StreamWriter.cpp, src/StreamWriter.hpp, src/Subfont.cpp, + src/Subfont.hpp, src/System.cpp, src/System.hpp, src/TFM.cpp, + src/TFM.hpp, src/TTFAutohint.cpp, src/TTFAutohint.hpp, + src/TensorProductPatch.cpp, src/TensorProductPatch.hpp, src/Terminal.cpp, + src/Terminal.hpp, src/ToUnicodeMap.cpp, src/ToUnicodeMap.hpp, + src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.hpp, + src/TriangularPatch.cpp, src/TriangularPatch.hpp, src/TrueTypeFont.cpp, + src/TrueTypeFont.hpp, src/Unicode.cpp, src/Unicode.hpp, + src/VFActions.hpp, src/VFReader.cpp, src/VFReader.hpp, + src/VectorIterator.hpp, src/VectorStream.hpp, src/XMLDocument.cpp, + src/XMLDocument.hpp, src/XMLNode.cpp, src/XMLNode.hpp, src/XMLString.cpp, + src/XMLString.hpp, src/ZLibOutputStream.hpp, src/dvisvgm.cpp, + src/ffwrapper.c, src/ffwrapper.h, src/genhashmap.py, src/gf2xml.cpp, + src/macros.hpp, src/options.dtd, src/options.xml, src/psdefs.cpp, + src/psdefs.ps, src/utility.cpp, src/utility.hpp, src/version.hpp, + src/version.hpp.in, src/windows.hpp, tests/BezierTest.cpp, + tests/BitmapTest.cpp, tests/BoundingBoxTest.cpp, + tests/CMapManagerTest.cpp, tests/CMapReaderTest.cpp, tests/CMapTest.cpp, + tests/CRC32Test.cpp, tests/CalculatorTest.cpp, + tests/ColorSpecialTest.cpp, tests/ColorTest.cpp, + tests/CommandLineTest.cpp, tests/DVIReaderTest.cpp, + tests/DependencyGraphTest.cpp, tests/DirectoryTest.cpp, + tests/DvisvgmSpecialTest.cpp, tests/EmSpecialTest.cpp, + tests/FileFinderTest.cpp, tests/FilePathTest.cpp, + tests/FileSystemTest.cpp, tests/FontCacheTest.cpp, + tests/FontManagerTest.cpp, tests/FontMapTest.cpp, + tests/GFGlyphTracerTest.cpp, tests/GFReaderTest.cpp, + tests/GhostscriptTest.cpp, tests/GraphicsPathTest.cpp, + tests/JFMReaderTest.cpp, tests/LengthTest.cpp, tests/Makefile.am, + tests/MapLineTest.cpp, tests/MatrixTest.cpp, + tests/MessageExceptionTest.cpp, tests/PDFParserTest.cpp, + tests/PSInterpreterTest.cpp, tests/PageRagesTest.cpp, + tests/PageSizeTest.cpp, tests/PairTest.cpp, + tests/PapersizeSpecialTest.cpp, tests/RangeMapTest.cpp, + tests/SVGOutputTest.cpp, tests/ShadingPatchTest.cpp, + tests/SpecialManagerTest.cpp, tests/SplittedCharInputBufferTest.cpp, + tests/StreamInputBufferTest.cpp, tests/StreamReaderTest.cpp, + tests/StreamWriterTest.cpp, tests/StringMatcherTest.cpp, + tests/SubfontTest.cpp, tests/TFMReaderTest.cpp, + tests/TensorProductPatchTest.cpp, tests/ToUnicodeMapTest.cpp, + tests/TpicSpecialTest.cpp, tests/TriangularPatchTest.cpp, + tests/UnicodeTest.cpp, tests/UtilityTest.cpp, + tests/VectorIteratorTest.cpp, tests/VectorStreamTest.cpp, + tests/XMLNodeTest.cpp, tests/XMLStringTest.cpp, tests/check-conv, + tests/create-makefile, tests/data/Makefile.am, tests/genhashcheck.py, + tests/normalize.xsl, tests/testmain.cpp, update-copyright-year.sh: + updated year in copyright statements to 2018 + +2017-12-31 Martin Gieseking <martin.gieseking@uos.de> + + * src/FontWriter.cpp: + keep unhinted TTF if autohinting failed + + * src/TTFAutohint.hpp: + don't declare member variables of TTFAutohint if ttfautohint is not + available + +2017-12-28 Martin Gieseking <martin.gieseking@uos.de> + + * NEWS, README, README.md: + updated README and NEWS + + * .appveyor.yml, .travis.yml, CMakeLists.txt, configure.ac, src/Doxyfile, + src/version.hpp: + set version to 2.3 + + * .appveyor.yml: + AppVeyor: download and install ttfautohint headers + +2017-12-27 Martin Gieseking <martin.gieseking@uos.de> + + * src/DLLoader.cpp, src/DLLoader.hpp, src/Ghostscript.cpp, + src/TTFAutohint.cpp: + simplify function to load a symbol from a dynamic library + +2017-12-23 Martin Gieseking <martin.gieseking@uos.de> + + * cmake-config.h, cmake/FindTTFAutohint.cmake, configure.ac, + src/CMakeLists.txt, src/DLLoader.cpp, src/DLLoader.hpp, + src/FontWriter.cpp, src/Makefile.am, src/TTFAutohint.cpp, + src/TTFAutohint.hpp, src/dvisvgm.cpp: + added code to load libttfautohint dynamically at runtime + +2017-12-22 Martin Gieseking <martin.gieseking@uos.de> + + * libs/xxHash/xxhash.c, libs/xxHash/xxhash.h, libs/xxHash/xxhsum.c: + updated xxHash to version 0.6.4 + +2017-12-21 Martin Gieseking <martin.gieseking@uos.de> + + * tests/gtest/include/gtest/gtest-param-test.h, + tests/gtest/include/gtest/gtest-printers.h, + tests/gtest/include/gtest/gtest-spi.h, + tests/gtest/include/gtest/gtest-typed-test.h, + tests/gtest/include/gtest/gtest.h, + tests/gtest/include/gtest/internal/custom/gtest-port.h, + tests/gtest/include/gtest/internal/custom/gtest.h, + tests/gtest/include/gtest/internal/gtest-internal.h, + tests/gtest/include/gtest/internal/gtest-param-util-generated.h, + tests/gtest/include/gtest/internal/gtest-param-util.h, + tests/gtest/include/gtest/internal/gtest-port-arch.h, + tests/gtest/include/gtest/internal/gtest-port.h, + tests/gtest/src/gtest-death-test.cc, + tests/gtest/src/gtest-internal-inl.h, tests/gtest/src/gtest-port.cc, + tests/gtest/src/gtest-printers.cc, tests/gtest/src/gtest.cc: + updated gtest + +2017-12-19 Martin Gieseking <martin.gieseking@uos.de> + + * configure.ac, src/Makefile.am: + configure: added --with-kpathsea to set the path of the kpathsea devel + files +closes #71 + + * configure.ac: + configure: dropped check of outdated Ghostscript version + +2017-12-18 Martin Gieseking <martin.gieseking@uos.de> + + * src/psdefs.cpp: + psdefs: replaced '6 array' with 'matrix' + +2017-12-17 Martin Gieseking <martin.gieseking@uos.de> + + * CMakeLists.txt, cmake-config.h, cmake/FindTTFAutohint.cmake, + configure.ac, src/CMakeLists.txt, src/FontWriter.cpp, src/Makefile.am, + src/dvisvgm.cpp, tests/CMakeLists.txt: + added optional support for ttfautohint + + * libs/woff2/Makefile.am, libs/woff2/include/woff2/file.h, + src/CMakeLists.txt, src/FontWriter.cpp, src/FontWriter.hpp, + src/Makefile.am, src/StreamReader.hpp, src/StreamWriter.cpp, + src/StreamWriter.hpp, src/TrueTypeFont.cpp, src/TrueTypeFont.hpp, + src/ffwrapper.c, src/ffwrapper.h, src/utility.cpp, src/utility.hpp: + replaced ff_sfd_to_woff() with TrueTypeFont::writeWOFF() + +2017-12-14 Martin Gieseking <martin.gieseking@uos.de> + + * configure.ac, libs/CMakeLists.txt, libs/Makefile.am, + libs/brotli/CMakeLists.txt, libs/brotli/LICENSE, libs/brotli/Makefile.am, + libs/brotli/common/constants.h, libs/brotli/common/dictionary.c, + libs/brotli/common/dictionary.h, libs/brotli/common/version.h, + libs/brotli/enc/backward_references.c, + libs/brotli/enc/backward_references.h, + libs/brotli/enc/backward_references_hq.c, + libs/brotli/enc/backward_references_hq.h, + libs/brotli/enc/backward_references_inc.h, libs/brotli/enc/bit_cost.c, + libs/brotli/enc/bit_cost.h, libs/brotli/enc/bit_cost_inc.h, + libs/brotli/enc/block_encoder_inc.h, libs/brotli/enc/block_splitter.c, + libs/brotli/enc/block_splitter.h, libs/brotli/enc/block_splitter_inc.h, + libs/brotli/enc/brotli_bit_stream.c, libs/brotli/enc/brotli_bit_stream.h, + libs/brotli/enc/cluster.c, libs/brotli/enc/cluster.h, + libs/brotli/enc/cluster_inc.h, libs/brotli/enc/command.h, + libs/brotli/enc/compress_fragment.c, libs/brotli/enc/compress_fragment.h, + libs/brotli/enc/compress_fragment_two_pass.c, + libs/brotli/enc/compress_fragment_two_pass.h, libs/brotli/enc/context.h, + libs/brotli/enc/dictionary_hash.c, libs/brotli/enc/dictionary_hash.h, + libs/brotli/enc/encode.c, libs/brotli/enc/entropy_encode.c, + libs/brotli/enc/entropy_encode.h, + libs/brotli/enc/entropy_encode_static.h, libs/brotli/enc/fast_log.h, + libs/brotli/enc/find_match_length.h, libs/brotli/enc/hash.h, + libs/brotli/enc/hash_forgetful_chain_inc.h, + libs/brotli/enc/hash_longest_match64_inc.h, + libs/brotli/enc/hash_longest_match_inc.h, + libs/brotli/enc/hash_longest_match_quickly_inc.h, + libs/brotli/enc/hash_to_binary_tree_inc.h, libs/brotli/enc/histogram.c, + libs/brotli/enc/histogram.h, libs/brotli/enc/histogram_inc.h, + libs/brotli/enc/literal_cost.c, libs/brotli/enc/literal_cost.h, + libs/brotli/enc/memory.c, libs/brotli/enc/memory.h, + libs/brotli/enc/metablock.c, libs/brotli/enc/metablock.h, + libs/brotli/enc/metablock_inc.h, libs/brotli/enc/port.h, + libs/brotli/enc/prefix.h, libs/brotli/enc/quality.h, + libs/brotli/enc/ringbuffer.h, libs/brotli/enc/static_dict.c, + libs/brotli/enc/static_dict.h, libs/brotli/enc/static_dict_lut.h, + libs/brotli/enc/utf8_util.c, libs/brotli/enc/utf8_util.h, + libs/brotli/enc/write_bits.h, libs/brotli/include/brotli/decode.h, + libs/brotli/include/brotli/encode.h, libs/brotli/include/brotli/port.h, + libs/brotli/include/brotli/types.h, libs/woff2/CMakeLists.txt, + libs/woff2/Makefile.am, libs/woff2/brotli/LICENSE, + libs/woff2/brotli/Makefile.am, libs/woff2/brotli/common/constants.h, + libs/woff2/brotli/common/dictionary.c, + libs/woff2/brotli/common/dictionary.h, + libs/woff2/brotli/common/version.h, + libs/woff2/brotli/enc/backward_references.c, + libs/woff2/brotli/enc/backward_references.h, + libs/woff2/brotli/enc/backward_references_hq.c, + libs/woff2/brotli/enc/backward_references_hq.h, + libs/woff2/brotli/enc/backward_references_inc.h, + libs/woff2/brotli/enc/bit_cost.c, libs/woff2/brotli/enc/bit_cost.h, + libs/woff2/brotli/enc/bit_cost_inc.h, + libs/woff2/brotli/enc/block_encoder_inc.h, + libs/woff2/brotli/enc/block_splitter.c, + libs/woff2/brotli/enc/block_splitter.h, + libs/woff2/brotli/enc/block_splitter_inc.h, + libs/woff2/brotli/enc/brotli_bit_stream.c, + libs/woff2/brotli/enc/brotli_bit_stream.h, + libs/woff2/brotli/enc/cluster.c, libs/woff2/brotli/enc/cluster.h, + libs/woff2/brotli/enc/cluster_inc.h, libs/woff2/brotli/enc/command.h, + libs/woff2/brotli/enc/compress_fragment.c, + libs/woff2/brotli/enc/compress_fragment.h, + libs/woff2/brotli/enc/compress_fragment_two_pass.c, + libs/woff2/brotli/enc/compress_fragment_two_pass.h, + libs/woff2/brotli/enc/context.h, libs/woff2/brotli/enc/dictionary_hash.c, + libs/woff2/brotli/enc/dictionary_hash.h, libs/woff2/brotli/enc/encode.c, + libs/woff2/brotli/enc/entropy_encode.c, + libs/woff2/brotli/enc/entropy_encode.h, + libs/woff2/brotli/enc/entropy_encode_static.h, + libs/woff2/brotli/enc/fast_log.h, + libs/woff2/brotli/enc/find_match_length.h, libs/woff2/brotli/enc/hash.h, + libs/woff2/brotli/enc/hash_forgetful_chain_inc.h, + libs/woff2/brotli/enc/hash_longest_match64_inc.h, + libs/woff2/brotli/enc/hash_longest_match_inc.h, + libs/woff2/brotli/enc/hash_longest_match_quickly_inc.h, + libs/woff2/brotli/enc/hash_to_binary_tree_inc.h, + libs/woff2/brotli/enc/histogram.c, libs/woff2/brotli/enc/histogram.h, + libs/woff2/brotli/enc/histogram_inc.h, + libs/woff2/brotli/enc/literal_cost.c, + libs/woff2/brotli/enc/literal_cost.h, libs/woff2/brotli/enc/memory.c, + libs/woff2/brotli/enc/memory.h, libs/woff2/brotli/enc/metablock.c, + libs/woff2/brotli/enc/metablock.h, libs/woff2/brotli/enc/metablock_inc.h, + libs/woff2/brotli/enc/port.h, libs/woff2/brotli/enc/prefix.h, + libs/woff2/brotli/enc/quality.h, libs/woff2/brotli/enc/ringbuffer.h, + libs/woff2/brotli/enc/static_dict.c, libs/woff2/brotli/enc/static_dict.h, + libs/woff2/brotli/enc/static_dict_lut.h, + libs/woff2/brotli/enc/utf8_util.c, libs/woff2/brotli/enc/utf8_util.h, + libs/woff2/brotli/enc/write_bits.h, + libs/woff2/brotli/include/brotli/decode.h, + libs/woff2/brotli/include/brotli/encode.h, + libs/woff2/brotli/include/brotli/port.h, + libs/woff2/brotli/include/brotli/types.h, src/CMakeLists.txt, + src/Makefile.am, tests/Makefile.am, tests/create-makefile: + moved brotli from woff2 to libs folder + +2017-12-12 Martin Gieseking <martin.gieseking@uos.de> + + * tests/CMakeLists.txt: + ctest: colorize test results and keep gtest colors + + * libs/variant/include/mpark/config.hpp, + libs/variant/include/mpark/lib.hpp, + libs/variant/include/mpark/variant.hpp: + updated mpark::variant to + https://github.com/mpark/variant/commit/382014b +fixes a build error + introduced with MSVC 19.12 + +2017-12-11 Martin Gieseking <martin.gieseking@uos.de> + + * NEWS: + updated NEWS + + * .appveyor.yml, .travis.yml, CMakeLists.txt, configure.ac, src/Doxyfile, + src/version.hpp: + set version to 2.2.3 + +2017-11-29 Martin Gieseking <martin.gieseking@uos.de> + + * libs/woff2/brotli/common/dictionary.h, + libs/woff2/brotli/common/version.h, + libs/woff2/brotli/enc/backward_references_hq.c, + libs/woff2/brotli/enc/backward_references_hq.h, + libs/woff2/brotli/enc/port.h, libs/woff2/brotli/enc/quality.h, + libs/woff2/brotli/include/brotli/decode.h, + libs/woff2/brotli/include/brotli/encode.h: + updated brotli to version 1.0.2 + +2017-11-24 Martin Gieseking <martin.gieseking@uos.de> + + * src/DependencyGraph.hpp: + simplified DependencyGraph::GraphNode + + * src/BgColorSpecialHandler.cpp, src/BoundingBox.cpp, src/BoundingBox.hpp, + src/Color.cpp, src/PathClipper.cpp, src/SVGTree.cpp, + tests/BoundingBoxTest.cpp: + minor code cleanup and improvements + +2017-11-23 Martin Gieseking <martin.gieseking@uos.de> + + * src/Makefile.am, tests/Makefile.am, tests/create-makefile: + suppress warnings regarding 'mismatched tags' + (class/struct) +https://gcc.gnu.org/wiki/FAQ#Why_GCC_does_not_warn_for_mismatch_between_struct_and_class_.28-Wmismatched-tags.29_.3F + + * src/DependencyGraph.hpp: + fixed dangling pointer issue in DependencyGraph + + * tests/EmSpecialTest.cpp: + added missing initializers in EmSpecialTest + + * tests/TpicSpecialTest.cpp: + added missing initializers in TpicSpecialTest + +2017-11-22 Martin Gieseking <martin.gieseking@uos.de> + + * src/DVIReader.hpp, tests/CMakeLists.txt, tests/DVIReaderTest.cpp, + tests/Makefile.am, tests/data/Makefile.am, tests/data/cmr10.pfb, + tests/data/sample_v2.dvi, tests/data/sample_v3.dvi: + added test for DVIReader + + * src/Subfont.cpp, src/Subfont.hpp, tests/CMakeLists.txt, + tests/CMapManagerTest.cpp, tests/FileFinderTest.cpp, + tests/FontManagerTest.cpp, tests/Makefile.am, tests/MapLineTest.cpp, + tests/SubfontTest.cpp, tests/create-makefile, tests/testmain.cpp, + tests/testutil.hpp: + tests: moved common initializations to testmain.cpp + + * src/PSPattern.cpp, src/SVGCharHandler.cpp, src/SVGTree.cpp, + src/TpicSpecialHandler.cpp: + removed redundant calls of std::move() + +2017-11-21 Martin Gieseking <martin.gieseking@uos.de> + + * Makefile.am: + removed redundant lcov statement from Makefile + +2017-11-20 Martin Gieseking <martin.gieseking@uos.de> + + * README.md: + added donation badge to readme + + * tests/CMapTest.cpp, tests/GFReaderTest.cpp, tests/JFMReaderTest.cpp, + tests/RangeMapTest.cpp, tests/TFMReaderTest.cpp, + tests/TensorProductPatchTest.cpp, tests/ToUnicodeMapTest.cpp, + tests/VectorStreamTest.cpp: + tests: few code improvements + +2017-11-17 Martin Gieseking <martin.gieseking@uos.de> + + * NEWS: + updated NEWS + + * .appveyor.yml, .travis.yml, CMakeLists.txt, configure.ac, src/Doxyfile, + src/version.hpp: + set version to 2.2.2 + + * src/XMLString.cpp, tests/TensorProductPatchTest.cpp, + tests/XMLStringTest.cpp: + avoid scientific notation when printing floats/doubles + + * src/CMapManager.cpp, src/FileFinder.cpp, src/Font.cpp, src/Font.hpp, + src/FontEngine.cpp, src/FontManager.cpp, src/FontMap.cpp, + src/FontMap.hpp, src/Ghostscript.cpp, src/MiKTeXCom.cpp, src/XMLNode.cpp: + replaced null pointer constants with 'nullptr' + + * src/Font.cpp, src/Font.hpp: + prevent dangling pointers to font map entries (closes #79) + +2017-11-16 Martin Gieseking <martin.gieseking@uos.de> + + * CMakeLists.txt: + cmake: generate compile_commands.json by default + +2017-11-13 Martin Gieseking <martin.gieseking@uos.de> + + * libs/variant/include/mpark/lib.hpp, + libs/variant/include/mpark/variant.hpp: + updated mpark::variant to commit + ea542a0 +https://github.com/mpark/variant/commit/ea542a0fef86fb8c1696238b95bdaddb8ff2337c + + * NEWS, README.md: + updated NEWS and README + + * .appveyor.yml, .travis.yml, CMakeLists.txt, configure.ac, src/Doxyfile, + src/version.hpp: + set version to 2.2.1 + +2017-11-10 Martin Gieseking <martin.gieseking@uos.de> + + * README, README.md, doc/dvisvgm.txt.in: + minor additions/fixes of manpage and README + +2017-11-02 Martin Gieseking <martin.gieseking@uos.de> + + * doc/Makefile.am, doc/db2html.xsl, doc/tweak-db-refentry.xsl: + manpage: avoid using 'stats' to improve portability (closes #72) + +2017-10-31 Martin Gieseking <martin.gieseking@uos.de> + + * src/InputReader.cpp, src/InputReader.hpp, src/PSInterpreter.cpp: + simplified code to lookup PS operators + +2017-10-30 Martin Gieseking <martin.gieseking@uos.de> + + * src/PsSpecialHandler.hpp, src/psdefs.cpp, src/psdefs.ps, + tests/PSInterpreterTest.cpp: + call applyscalevals on every change of the CTM + + * src/CMakeLists.txt, src/PsSpecialHandler.hpp, src/psdefs.cpp, + src/psdefs.ps, tests/PSInterpreterTest.cpp: + properly apply CTM to linewidth (closes #77) + +2017-10-27 Martin Gieseking <martin.gieseking@uos.de> + + * src/DependencyGraph.hpp, src/SVGTree.cpp, tests/DependencyGraphTest.cpp: + manage heap memory in DependencyGraph with unique_ptrs + + * src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, src/DVIToSVGActions.hpp, + src/DvisvgmSpecialHandler.cpp, src/EPSToSVG.cpp, src/EPSToSVG.hpp, + src/EmSpecialHandler.cpp, src/HyperlinkManager.cpp, src/PSPattern.cpp, + src/PSPattern.hpp, src/PsSpecialHandler.cpp, src/SVGCharHandler.cpp, + src/SVGCharHandler.hpp, src/SVGCharPathHandler.cpp, + src/SVGCharTspanTextHandler.cpp, src/SVGSingleCharTextHandler.cpp, + src/SVGTree.cpp, src/SVGTree.hpp, src/ShadingPatch.hpp, + src/SpecialActions.hpp, src/TpicSpecialHandler.cpp, src/XMLDocument.cpp, + src/XMLDocument.hpp, src/XMLNode.cpp, src/XMLNode.hpp, src/utility.hpp, + tests/DvisvgmSpecialTest.cpp, tests/EmSpecialTest.cpp, + tests/TpicSpecialTest.cpp, tests/XMLNodeTest.cpp: + replaced raw XMLNode pointers with unique_ptrs +which helps to ensure + proper ownership and simplifies deleting the corresponding objects + +2017-10-21 Martin Gieseking <martin.gieseking@uos.de> + + * libs/ff-woff/fontforge/macbinary.c: + updated link to CTAN:/tools/macutils/crc + +2017-10-20 Martin Gieseking <martin.gieseking@uos.de> + + * libs/woff2/include/woff2/version.h: + replaced CRLF line endings + +2017-10-17 Martin Gieseking <martin.gieseking@uos.de> + + * NEWS, README, README.md: + updated NEWS and README + + * .appveyor.yml, .travis.yml, CMakeLists.txt, configure.ac, src/Doxyfile, + src/version.hpp: + set version to 2.2 + + * src/Length.hpp, src/PageSize.cpp: + added user-defined literals for some length units + + * src/dvisvgm.cpp: + fixed output of option --version + + * src/CMapManager.cpp, src/CMapReader.cpp, src/CMapReader.hpp, + src/DVIActions.hpp, src/DVIToSVG.cpp, src/DVIToSVG.hpp, + src/DVIToSVGActions.hpp, src/FileFinder.cpp, src/Font.cpp, src/Font.hpp, + src/FontEncoding.cpp, src/FontEncoding.hpp, src/FontEngine.cpp, + src/FontEngine.hpp, src/FontManager.cpp, src/FontMetrics.cpp, + src/FontMetrics.hpp, src/PSPattern.hpp, src/PsSpecialHandler.cpp, + src/PsSpecialHandler.hpp, src/SVGCharHandlerFactory.cpp, + src/SVGCharHandlerFactory.hpp, src/SVGOutput.cpp, + src/SVGSingleCharTextHandler.hpp, src/SVGTree.cpp, src/ShadingPatch.cpp, + src/ShadingPatch.hpp, src/SignalHandler.cpp, src/Subfont.cpp, + src/Subfont.hpp, src/XMLNode.cpp, tests/CMapReaderTest.cpp, + tests/ShadingPatchTest.cpp: + replaced several bare new/delete statements with unique pointers + +2017-10-16 Martin Gieseking <martin.gieseking@uos.de> + + * src/Subfont.cpp: + don't access unique_ptr after it has been moved + + * src/Message.cpp: + check for '\0' at end of DVISVGM_COLORS + + * src/FontWriter.cpp: + added missing #include of config.h + +2017-10-15 Martin Gieseking <martin.gieseking@uos.de> + + * src/PDFParser.cpp, src/PDFParser.hpp: + replaced shared_ptr with unique_ptr in PDFParser + +2017-10-13 Martin Gieseking <martin.gieseking@uos.de> + + * .travis.yml: + Travis: use gcc 4.9 rather than 4.8 to compile mpark::variant correctly + + * AUTHORS, configure.ac, doc/dvisvgm.txt.in, libs/CMakeLists.txt, + libs/Makefile.am, libs/variant/CMakeLists.txt, libs/variant/LICENSE.md, + libs/variant/Makefile.am, libs/variant/include/mpark/config.hpp, + libs/variant/include/mpark/in_place.hpp, + libs/variant/include/mpark/lib.hpp, + libs/variant/include/mpark/variant.hpp, src/CMakeLists.txt, + src/HyperlinkManager.cpp, src/HyperlinkManager.hpp, src/InputReader.hpp, + src/Makefile.am, src/PDFParser.cpp, src/PDFParser.hpp, + src/PdfSpecialHandler.cpp, src/PdfSpecialHandler.hpp, + tests/CMakeLists.txt, tests/Makefile.am, tests/PDFParserTest.cpp, + tests/SpecialManagerTest.cpp, tests/create-makefile: + added evaluation of PDF hyperlink specials (closes #74) + +2017-10-11 Martin Gieseking <martin.gieseking@uos.de> + + * src/CMakeLists.txt, src/HtmlSpecialHandler.cpp, + src/HtmlSpecialHandler.hpp, src/HyperlinkManager.cpp, + src/HyperlinkManager.hpp, src/Makefile.am, src/dvisvgm.cpp: + separated hyperlink functionality from HtmlSpecialHandler to + HyperlinkManager + +2017-10-09 Martin Gieseking <martin.gieseking@uos.de> + + * libs/woff2/src/font.cc, libs/woff2/src/normalize.cc, + libs/woff2/src/woff2_enc.cc: + woff2: removed unused variables to prevent compiler warnings + +2017-10-08 Martin Gieseking <martin.gieseking@uos.de> + + * libs/woff2/CMakeLists.txt, libs/woff2/Makefile.am, + libs/woff2/include/woff2/decode.h, libs/woff2/include/woff2/encode.h, + libs/woff2/include/woff2/file.h, libs/woff2/include/woff2/output.h, + libs/woff2/include/woff2/version.h, libs/woff2/src/buffer.h, + libs/woff2/src/file.h, libs/woff2/src/font.cc, libs/woff2/src/font.h, + libs/woff2/src/glyph.cc, libs/woff2/src/glyph.h, + libs/woff2/src/normalize.cc, libs/woff2/src/normalize.h, + libs/woff2/src/port.h, libs/woff2/src/round.h, + libs/woff2/src/store_bytes.h, libs/woff2/src/table_tags.cc, + libs/woff2/src/table_tags.h, libs/woff2/src/transform.cc, + libs/woff2/src/transform.h, libs/woff2/src/variable_length.cc, + libs/woff2/src/variable_length.h, libs/woff2/src/woff2_common.cc, + libs/woff2/src/woff2_common.h, libs/woff2/src/woff2_dec.h, + libs/woff2/src/woff2_enc.cc, libs/woff2/src/woff2_enc.h, + libs/woff2/src/woff2_out.cc, libs/woff2/src/woff2_out.h, + src/FontWriter.cpp, src/Makefile.am, src/dvisvgm.cpp: + updated woff2 to version 1.0.1 + +2017-10-06 Martin Gieseking <martin.gieseking@uos.de> + + * src/Subfont.cpp, src/Subfont.hpp, src/utility.hpp: + removed stream-based constructor of SubfontException + + * src/XMLNode.cpp, src/XMLNode.hpp: + added move constructor to XMLElementNode + + * src/CRC32.hpp, src/SpecialManager.hpp, src/Subfont.hpp, src/XMLNode.hpp: + use delete/default to remove/implement constructors + +2017-09-29 Martin Gieseking <martin.gieseking@uos.de> + + * doc/dvisvgm.txt.in, src/PapersizeSpecialHandler.cpp, + src/PapersizeSpecialHandler.hpp, src/PdfSpecialHandler.cpp, + src/PdfSpecialHandler.hpp, src/SpecialManager.cpp, + src/SpecialManager.hpp, tests/PapersizeSpecialTest.cpp: + added evaluation of pdf:pagesize specials + +2017-09-28 Martin Gieseking <martin.gieseking@uos.de> + + * src/BoundingBox.cpp, src/BoundingBox.hpp, src/DVIToSVG.cpp, + src/utility.cpp, src/utility.hpp, tests/BoundingBoxTest.cpp, + tests/UtilityTest.cpp: + rewrite of BoundingBox::extractLengths() + + * src/DVIToSVG.cpp, src/Length.hpp, src/PageSize.cpp, src/PageSize.hpp, + src/utility.hpp, tests/PageSizeTest.cpp: + use class Length in PageSize rather than plain numbers + +2017-09-21 Martin Gieseking <martin.gieseking@uos.de> + + * libs/woff2/brotli/common/constants.h, + libs/woff2/brotli/common/dictionary.c, + libs/woff2/brotli/common/dictionary.h, + libs/woff2/brotli/common/version.h, + libs/woff2/brotli/enc/backward_references.c, + libs/woff2/brotli/enc/backward_references_hq.c, + libs/woff2/brotli/enc/backward_references_hq.h, + libs/woff2/brotli/enc/backward_references_inc.h, + libs/woff2/brotli/enc/block_splitter.c, + libs/woff2/brotli/enc/block_splitter_inc.h, + libs/woff2/brotli/enc/brotli_bit_stream.c, + libs/woff2/brotli/enc/brotli_bit_stream.h, + libs/woff2/brotli/enc/cluster_inc.h, libs/woff2/brotli/enc/command.h, + libs/woff2/brotli/enc/compress_fragment.c, + libs/woff2/brotli/enc/compress_fragment_two_pass.c, + libs/woff2/brotli/enc/encode.c, + libs/woff2/brotli/enc/find_match_length.h, libs/woff2/brotli/enc/hash.h, + libs/woff2/brotli/enc/hash_forgetful_chain_inc.h, + libs/woff2/brotli/enc/hash_longest_match64_inc.h, + libs/woff2/brotli/enc/hash_longest_match_inc.h, + libs/woff2/brotli/enc/hash_longest_match_quickly_inc.h, + libs/woff2/brotli/enc/hash_to_binary_tree_inc.h, + libs/woff2/brotli/enc/memory.h, libs/woff2/brotli/enc/port.h, + libs/woff2/brotli/enc/write_bits.h, + libs/woff2/brotli/include/brotli/decode.h, + libs/woff2/brotli/include/brotli/encode.h: + updated Brotli to version 1.0.1 + + * src/InputReader.cpp, src/InputReader.hpp, tests/CMakeLists.txt, + tests/Makefile.am, tests/SplittedCharInputBufferTest.cpp, + tests/StreamInputBufferTest.cpp, tests/StringMatcherTest.cpp: + use Knuth-Morris-Pratt algorithm to find a string in a stream + + * src/TpicSpecialHandler.cpp: + use isxdigit() to check hex digits + +2017-09-19 Martin Gieseking <martin.gieseking@uos.de> + + * transfer-cs: + updated makeskel and transfer-cs + +2017-09-17 Martin Gieseking <martin.gieseking@uos.de> + + * .appveyor.yml: + updated FreeType to version 2.8.1 + +2017-09-15 Martin Gieseking <martin.gieseking@uos.de> + + * src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.hpp, + src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.hpp, + src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, + src/EmSpecialHandler.cpp, src/EmSpecialHandler.hpp, + src/HtmlSpecialHandler.cpp, src/HtmlSpecialHandler.hpp, + src/NoPsSpecialHandler.cpp, src/NoPsSpecialHandler.hpp, + src/PapersizeSpecialHandler.cpp, src/PapersizeSpecialHandler.hpp, + src/PdfSpecialHandler.cpp, src/PdfSpecialHandler.hpp, + src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, + src/SpecialHandler.hpp, src/SpecialManager.cpp, + src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.hpp, + tests/ColorSpecialTest.cpp, tests/PapersizeSpecialTest.cpp: + changed return value of SpecialHandler::prefixes() to std::vector + + * src/DVIToSVG.cpp, src/SpecialManager.cpp, src/SpecialManager.hpp, + src/utility.hpp, tests/CMakeLists.txt, tests/Makefile.am, + tests/SpecialManagerTest.cpp: + use smart pointers to allocate/deallocate SpecialHandlers + +2017-09-13 Martin Gieseking <martin.gieseking@uos.de> + + * tests/CMakeLists.txt: + make name of Python script part of custom command + + * tests/FileSystemTest.cpp: + close streams before removing crresponding files + +2017-09-12 Martin Gieseking <martin.gieseking@uos.de> + + * tests/CMakeLists.txt: + made testmain a library to prevent separate builds for each test + +2017-09-09 Martin Gieseking <martin.gieseking@uos.de> + + * src/dvisvgm.cpp: + fixed number of dashes printed by option -V1 + +2017-09-08 Martin Gieseking <martin.gieseking@uos.de> + + * libs/xxHash/xxhash.c, libs/xxHash/xxhash.h, libs/xxHash/xxhsum.c: + updated xxhash to version 0.6.3 + + * src/FileFinder.cpp, src/FileFinder.hpp, tests/CMapManagerTest.cpp, + tests/FileFinderTest.cpp, tests/FontManagerTest.cpp, + tests/MapLineTest.cpp, tests/SubfontTest.cpp: + init libkpathsea correctly in tests to prevent assertion failures + + * tests/CMakeLists.txt, tests/Makefile.am, tests/create-makefile, + tests/gtest/CMakeLists.txt, tests/testmain.cpp: + define variable TEST_ARGV0 to make argv[0] of main() available in + tests +this is required to initialize kpathsea properly, for example + + * src/FileFinder.cpp, src/Makefile.am: + added missing #include; added windows.hpp to Makefile.am + + * src/DependencyGraph.hpp, src/SVGTree.cpp, tests/DependencyGraphTest.cpp: + DependencyGraph::getKeys(): return result, don't use reference parameter + +2017-09-07 Martin Gieseking <martin.gieseking@uos.de> + + * doc/dvisvgm.txt.in, src/dvisvgm.cpp: + added pdftex.map to default mapfiles + + * src/MapLine.cpp, tests/MapLineTest.cpp: + treat prefix "<<" in a mapline as "<[" (skip second char) + + * src/GFReader.cpp: + fixed incorrect integer type in GFReader; insert CharInfos with emplace + + * tests/CMakeLists.txt, tests/FontCacheTest.cpp, tests/Makefile.am, + tests/create-makefile: + fixed path issue in FontCacheTest + +2017-09-06 Martin Gieseking <martin.gieseking@uos.de> + + * src/CLCommandLine.cpp, src/CMapManager.cpp, src/CMapManager.hpp, + src/Calculator.cpp, src/Calculator.hpp, src/DVIToSVG.cpp, + src/DVIToSVGActions.hpp, src/DependencyGraph.hpp, + src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, + src/EmSpecialHandler.cpp, src/EmSpecialHandler.hpp, src/FileFinder.cpp, + src/Font.cpp, src/Font.hpp, src/FontCache.hpp, src/FontEncoding.cpp, + src/FontManager.cpp, src/FontManager.hpp, src/FontMap.hpp, + src/GFReader.hpp, src/HtmlSpecialHandler.cpp, src/HtmlSpecialHandler.hpp, + src/InputReader.cpp, src/InputReader.hpp, src/Message.cpp, + src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/SVGTree.cpp, + src/SVGTree.hpp, src/SpecialManager.hpp, src/Subfont.cpp, + src/Subfont.hpp, tests/StreamInputBufferTest.cpp: + replaced std::map with std::unordered_map where possible to increase + performance + + * src/DLLoader.hpp, src/Directory.cpp, src/Directory.hpp, + src/FileSystem.cpp, src/MiKTeXCom.hpp, src/Process.cpp, src/Terminal.cpp, + src/windows.hpp: + disable macros min/max defined in windows.h + + * src/BasicDVIReader.cpp, src/BgColorSpecialHandler.cpp, src/Bitmap.cpp, + src/BoundingBox.cpp, src/CMap.cpp, src/CMapReader.cpp, src/CRC32.cpp, + src/Calculator.cpp, src/ColorSpecialHandler.cpp, src/DLLoader.cpp, + src/DVIReader.cpp, src/Directory.cpp, src/EPSFile.cpp, src/EPSToSVG.cpp, + src/EmSpecialHandler.cpp, src/EncFile.cpp, src/FileFinder.cpp, + src/FilePath.cpp, src/Font.cpp, src/FontCache.cpp, src/FontEncoding.cpp, + src/FontEngine.cpp, src/FontManager.cpp, src/FontMap.cpp, + src/FontMap.hpp, src/FontMetrics.cpp, src/FontWriter.cpp, + src/GFGlyphTracer.cpp, src/GFTracer.cpp, src/HtmlSpecialHandler.cpp, + src/InputBuffer.cpp, src/InputReader.cpp, src/JFM.cpp, src/MapLine.cpp, + src/Message.cpp, src/MetafontWrapper.cpp, src/MiKTeXCom.cpp, + src/NoPsSpecialHandler.cpp, src/PSInterpreter.cpp, src/PSPattern.cpp, + src/PSPreviewFilter.cpp, src/PageRanges.cpp, src/PageSize.cpp, + src/PathClipper.cpp, src/PdfSpecialHandler.cpp, src/SVGTree.cpp, + src/SpecialManager.cpp, src/StreamWriter.cpp, src/TFM.cpp, + src/VFReader.cpp, src/XMLDocument.cpp, src/XMLNode.cpp, + src/XMLString.cpp, src/dvisvgm.cpp: + removed redundant #includes of config.h + +2017-09-05 Martin Gieseking <martin.gieseking@uos.de> + + * doc/dvisvgm.txt.in, src/DvisvgmSpecialHandler.cpp, + tests/DvisvgmSpecialTest.cpp: + allow all common length units in dvisvgm specials + + * tests/DvisvgmSpecialTest.cpp: + replaced constexpr with const to make clang happy + +2017-08-27 Martin Gieseking <martin.gieseking@uos.de> + + * tests/MapLineTest.cpp: + added braces to prevent compiler warnings + + * src/AGLTable.hpp, src/CMakeLists.txt, src/CMapReader.cpp, src/Color.cpp, + src/CommandLine.hpp, src/FontWriter.cpp, src/genhashmap.py, + tests/genhashcheck.py: + use list initialization on constant std::arrays + +2017-08-25 Martin Gieseking <martin.gieseking@uos.de> + + * src/CMapManager.cpp, src/DvisvgmSpecialHandler.cpp, src/Font.cpp, + src/Ghostscript.cpp, src/PsSpecialHandler.cpp, src/dvisvgm.cpp, + tests/DvisvgmSpecialTest.cpp: + use range-based for to iterate over a fixed sequence of items + +2017-08-17 Martin Gieseking <martin.gieseking@uos.de> + + * m4/ax_code_coverage.m4: + updated ax_code_coverage.m4 to version 25 + +2017-08-06 Martin Gieseking <martin.gieseking@uos.de> + + * .appveyor.yml: + updated potrace to version 1.15 + +2017-08-01 Martin Gieseking <martin.gieseking@uos.de> + + * libs/woff2/src/font.cc, libs/woff2/src/normalize.cc, + libs/woff2/src/port.h, libs/woff2/src/store_bytes.h, + libs/woff2/src/woff2_common.cc, libs/woff2/src/woff2_enc.cc: + updated woff2 to https://github.com/google/woff2/commits/2e09253 + +2017-06-30 Martin Gieseking <martin.gieseking@uos.de> + + * src/gf2xml.cpp, src/gf2xml.mak: + added scripts to generate SVG files from GF glyphs + +2017-06-29 Martin Gieseking <martin.gieseking@uos.de> + + * src/gfprint.mak: + updated gfprint utility + +2017-06-26 Martin Gieseking <martin.gieseking@uos.de> + + * .appveyor.yml: + AppVeyor: changed build image to VS 2017 + +2017-06-20 Martin Gieseking <martin.gieseking@uos.de> + + * src/PsSpecialHandler.cpp: + psfile: fixed sign of y coordinates + +2017-06-12 Martin Gieseking <martin.gieseking@uos.de> + + * src/PsSpecialHandler.hpp: + use bp units for line width and miter limit + +2017-06-09 Martin Gieseking <martin.gieseking@uos.de> + + * src/EPSToSVG.cpp: + remove redundant clipPath elements also when converting EPS files + +2017-05-30 Martin Gieseking <martin.gieseking@uos.de> + + * src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp: + manage memory of ClippingStack with shared pointers +- automatically + deletes unreferenced path objects +- avoids keeping popped (and no longer + required) paths in the pool vector + + * src/GraphicsPath.hpp: + replaced vector with deque in class GraphicsPath +due to cheaper front + insertions/deletions + +2017-05-26 Martin Gieseking <martin.gieseking@uos.de> + + * src/FileFinder.cpp, src/PsSpecialHandler.cpp: + lookup psfile in texmf tree if it's not present in cwd (fixes #69) + + * src/Matrix.hpp, src/PsSpecialHandler.cpp: + respect transformation of PS state in computation of psfile position + (fixes #70) + + * src/Pair.hpp, tests/PairTest.cpp: + added abs() and negation operator to class Pair + +2017-05-16 Martin Gieseking <martin.gieseking@uos.de> + + * tests/FontCacheTest.cpp, tests/Makefile.am, tests/create-makefile: + FontCacheTest: write test output to $builddir/data +$srcdir/data may be + read-only so that the tests fail unintentionally + +2017-05-15 Martin Gieseking <martin.gieseking@uos.de> + + * .appveyor.yml: + updated FreeType to version 2.8 + + * libs/woff2/CMakeLists.txt, libs/woff2/brotli/LICENSE, + libs/woff2/brotli/Makefile.am, libs/woff2/brotli/common/constants.h, + libs/woff2/brotli/common/dictionary.c, + libs/woff2/brotli/common/dictionary.h, + libs/woff2/brotli/common/version.h, + libs/woff2/brotli/enc/backward_references.c, + libs/woff2/brotli/enc/backward_references.h, + libs/woff2/brotli/enc/backward_references_hq.c, + libs/woff2/brotli/enc/backward_references_hq.h, + libs/woff2/brotli/enc/backward_references_inc.h, + libs/woff2/brotli/enc/block_splitter_inc.h, + libs/woff2/brotli/enc/command.h, + libs/woff2/brotli/enc/compress_fragment.c, + libs/woff2/brotli/enc/compress_fragment.h, + libs/woff2/brotli/enc/compress_fragment_two_pass.c, + libs/woff2/brotli/enc/compress_fragment_two_pass.h, + libs/woff2/brotli/enc/context.h, libs/woff2/brotli/enc/dictionary_hash.c, + libs/woff2/brotli/enc/dictionary_hash.h, libs/woff2/brotli/enc/encode.c, + libs/woff2/brotli/enc/fast_log.h, libs/woff2/brotli/enc/hash.h, + libs/woff2/brotli/enc/hash_forgetful_chain_inc.h, + libs/woff2/brotli/enc/hash_longest_match64_inc.h, + libs/woff2/brotli/enc/hash_longest_match_inc.h, + libs/woff2/brotli/enc/hash_longest_match_quickly_inc.h, + libs/woff2/brotli/enc/hash_to_binary_tree_inc.h, + libs/woff2/brotli/enc/histogram.c, libs/woff2/brotli/enc/literal_cost.c, + libs/woff2/brotli/enc/memory.h, libs/woff2/brotli/enc/metablock.c, + libs/woff2/brotli/enc/metablock.h, libs/woff2/brotli/enc/quality.h, + libs/woff2/brotli/enc/static_dict.c, libs/woff2/brotli/enc/static_dict.h, + libs/woff2/brotli/include/brotli/decode.h, + libs/woff2/brotli/include/brotli/encode.h, + libs/woff2/brotli/include/brotli/port.h, + libs/woff2/brotli/include/brotli/types.h: + updated brotli to version 0.6.0 + +2017-05-11 Martin Gieseking <martin.gieseking@uos.de> + + * src/Process.cpp: + close pipe if fork() fails + +2017-05-08 Martin Gieseking <martin.gieseking@uos.de> + + * src/Process.cpp, src/Process.hpp: + refactored Process class +- use separate class to encapsulate + system-dependent stuff and to ensure + proper termination in case of + signals or errors +- prevent blocking if subprocess doesn't write anything + to stdout/stderr + + * CMakeLists.txt, cmake-config.h, configure.ac, src/SignalHandler.cpp, + src/SignalHandler.hpp: + use sigaction() rather than signal() if possible + +2017-04-28 Martin Gieseking <martin.gieseking@uos.de> + + * src/Process.cpp: + quit Process::run() if child process terminated unexpectedly (fixes #68) + +2017-04-27 Martin Gieseking <martin.gieseking@uos.de> + + * tests/Makefile.am, tests/create-makefile: + added the FontWriter dependencies to the tests + +2017-04-24 Martin Gieseking <martin.gieseking@uos.de> + + * src/TpicSpecialHandler.cpp, tests/TpicSpecialTest.cpp: + added evaluation of TPIC's 'tx' special command + + * src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.hpp, + tests/CMakeLists.txt, tests/Makefile.am, tests/TpicSpecialTest.cpp: + improved the TPIC special handler and added tests for it + + * src/Color.cpp, src/Color.hpp, src/PSPattern.cpp, + tests/ColorSpecialTest.cpp: + avoid implicit conversion of Color object to RGB integer + +2017-04-18 Martin Gieseking <martin.gieseking@uos.de> + + * .gitignore: + updated .hgignore + +2017-04-14 Martin Gieseking <martin.gieseking@uos.de> + + * src/Ghostscript.cpp: + try to load libgs.X.dylib on Mac systems (closes #66) + + * src/DLLoader.cpp, src/DLLoader.hpp, src/Ghostscript.cpp: + replaced c-string parameter of DLLoader() and loadLibrary() with string + + * src/DLLoader.cpp, src/DLLoader.hpp: + added DLLoader::loadLibrary() to assign a different library + +2017-03-22 Martin Gieseking <martin.gieseking@uos.de> + + * m4/ax_code_coverage.m4, m4/ax_cxx_compile_stdcxx.m4: + updated m4 scripts + +2017-03-03 Martin Gieseking <martin.gieseking@uos.de> + + * tests/FilePathTest.cpp, tests/FontCacheTest.cpp, + tests/SVGOutputTest.cpp: + tests: minor path improvements + + * .gitignore, CMakeLists.txt, libs/ff-woff/CMakeLists.txt, + src/CMakeLists.txt, tests/CMakeLists.txt: + cmake: fixed build issues when using a separate build directory + + * src/FileFinder.cpp, tests/FileFinderTest.cpp: + fixed handling of absolute additional directories in FileFinder + +2017-03-02 Martin Gieseking <martin.gieseking@uos.de> + + * src/Color.cpp, src/FilePath.cpp, src/FontWriter.cpp, src/PageSize.cpp, + src/dvisvgm.cpp, src/utility.cpp, src/utility.hpp, tests/UtilityTest.cpp: + util::tolower() no longer modifies its string parameter + + * libs/woff2/CMakeLists.txt, src/Makefile.am, src/dvisvgm.cpp: + improved generation of list showing the library versions + + * libs/woff2/src/normalize.cc, libs/woff2/src/woff2_enc.cc: + woff2: removed unused variables + +2017-03-01 Martin Gieseking <martin.gieseking@uos.de> + + * libs/woff2/CMakeLists.txt: + adapted Makefiles to updated libwoff2 + + * libs/woff2/Makefile.am, libs/woff2/brotli/Makefile.am, + libs/woff2/brotli/common/constants.h, + libs/woff2/brotli/common/dictionary.c, + libs/woff2/brotli/common/dictionary.h, + libs/woff2/brotli/common/version.h, + libs/woff2/brotli/enc/backward_references.c, + libs/woff2/brotli/enc/backward_references.cc, + libs/woff2/brotli/enc/backward_references.h, + libs/woff2/brotli/enc/backward_references_inc.h, + libs/woff2/brotli/enc/bit_cost.c, libs/woff2/brotli/enc/bit_cost.h, + libs/woff2/brotli/enc/bit_cost_inc.h, + libs/woff2/brotli/enc/block_encoder_inc.h, + libs/woff2/brotli/enc/block_splitter.c, + libs/woff2/brotli/enc/block_splitter.cc, + libs/woff2/brotli/enc/block_splitter.h, + libs/woff2/brotli/enc/block_splitter_inc.h, + libs/woff2/brotli/enc/brotli_bit_stream.c, + libs/woff2/brotli/enc/brotli_bit_stream.cc, + libs/woff2/brotli/enc/brotli_bit_stream.h, + libs/woff2/brotli/enc/cluster.c, libs/woff2/brotli/enc/cluster.h, + libs/woff2/brotli/enc/cluster_inc.h, libs/woff2/brotli/enc/command.h, + libs/woff2/brotli/enc/compress_fragment.c, + libs/woff2/brotli/enc/compress_fragment.cc, + libs/woff2/brotli/enc/compress_fragment.h, + libs/woff2/brotli/enc/compress_fragment_two_pass.c, + libs/woff2/brotli/enc/compress_fragment_two_pass.cc, + libs/woff2/brotli/enc/compress_fragment_two_pass.h, + libs/woff2/brotli/enc/compressor.h, libs/woff2/brotli/enc/context.h, + libs/woff2/brotli/enc/dictionary.cc, libs/woff2/brotli/enc/dictionary.h, + libs/woff2/brotli/enc/dictionary_hash.h, libs/woff2/brotli/enc/encode.c, + libs/woff2/brotli/enc/encode.cc, libs/woff2/brotli/enc/encode.h, + libs/woff2/brotli/enc/encode_parallel.cc, + libs/woff2/brotli/enc/encode_parallel.h, + libs/woff2/brotli/enc/entropy_encode.c, + libs/woff2/brotli/enc/entropy_encode.cc, + libs/woff2/brotli/enc/entropy_encode.h, + libs/woff2/brotli/enc/entropy_encode_static.h, + libs/woff2/brotli/enc/fast_log.h, + libs/woff2/brotli/enc/find_match_length.h, libs/woff2/brotli/enc/hash.h, + libs/woff2/brotli/enc/hash_forgetful_chain_inc.h, + libs/woff2/brotli/enc/hash_longest_match_inc.h, + libs/woff2/brotli/enc/hash_longest_match_quickly_inc.h, + libs/woff2/brotli/enc/histogram.c, libs/woff2/brotli/enc/histogram.cc, + libs/woff2/brotli/enc/histogram.h, libs/woff2/brotli/enc/histogram_inc.h, + libs/woff2/brotli/enc/literal_cost.c, + libs/woff2/brotli/enc/literal_cost.cc, + libs/woff2/brotli/enc/literal_cost.h, libs/woff2/brotli/enc/memory.c, + libs/woff2/brotli/enc/memory.h, libs/woff2/brotli/enc/metablock.c, + libs/woff2/brotli/enc/metablock.cc, libs/woff2/brotli/enc/metablock.h, + libs/woff2/brotli/enc/metablock_inc.h, libs/woff2/brotli/enc/port.h, + libs/woff2/brotli/enc/prefix.h, libs/woff2/brotli/enc/quality.h, + libs/woff2/brotli/enc/ringbuffer.h, libs/woff2/brotli/enc/static_dict.c, + libs/woff2/brotli/enc/static_dict.cc, + libs/woff2/brotli/enc/static_dict.h, + libs/woff2/brotli/enc/static_dict_lut.h, + libs/woff2/brotli/enc/streams.cc, libs/woff2/brotli/enc/streams.h, + libs/woff2/brotli/enc/transform.h, libs/woff2/brotli/enc/types.h, + libs/woff2/brotli/enc/utf8_util.c, libs/woff2/brotli/enc/utf8_util.cc, + libs/woff2/brotli/enc/utf8_util.h, libs/woff2/brotli/enc/write_bits.h, + libs/woff2/brotli/include/brotli/decode.h, + libs/woff2/brotli/include/brotli/encode.h, + libs/woff2/brotli/include/brotli/port.h, + libs/woff2/brotli/include/brotli/types.h, libs/woff2/src/buffer.h, + libs/woff2/src/font.cc, libs/woff2/src/glyph.cc, + libs/woff2/src/variable_length.cc, libs/woff2/src/woff2_dec.h, + libs/woff2/src/woff2_enc.cc, src/Makefile.am: + updated woff2 to https://github.com/google/woff2/commit/68e9ab5 + + * libs/ff-woff/fontforge/nowakowskittfinstr.c: + ff-woff: removed redundant variables + +2017-02-23 Martin Gieseking <martin.gieseking@uos.de> + + * tests/BezierTest.cpp, tests/BitmapTest.cpp, tests/BoundingBoxTest.cpp, + tests/CMapManagerTest.cpp, tests/CMapReaderTest.cpp, tests/CMapTest.cpp, + tests/CRC32Test.cpp, tests/ColorTest.cpp, tests/CommandLineTest.cpp, + tests/DirectoryTest.cpp, tests/FileSystemTest.cpp, + tests/GraphicsPathTest.cpp, tests/JFMReaderTest.cpp, + tests/MatrixTest.cpp, tests/PageRagesTest.cpp, tests/RangeMapTest.cpp, + tests/SVGOutputTest.cpp, tests/SplittedCharInputBufferTest.cpp, + tests/StreamInputBufferTest.cpp, tests/StreamReaderTest.cpp, + tests/StreamWriterTest.cpp, tests/SubfontTest.cpp, + tests/TFMReaderTest.cpp, tests/ToUnicodeMapTest.cpp, + tests/UnicodeTest.cpp, tests/VectorIteratorTest.cpp, + tests/XMLNodeTest.cpp: + fixed signed/unsigned warnings in tests + +2017-02-22 Martin Gieseking <martin.gieseking@uos.de> + + * CMakeLists.txt, cmake-config.h, cmake/CodeCoverage.cmake, + cmake/GetTriple.cmake, libs/CMakeLists.txt, libs/clipper/CMakeLists.txt, + libs/ff-woff/CMakeLists.txt, libs/woff2/CMakeLists.txt, + libs/xxHash/CMakeLists.txt, prepare-cmake.sh, src/CMakeLists.txt, + tests/CMakeLists.txt, tests/gtest/CMakeLists.txt: + improved cmake build environment (works with ninja) + + * libs/woff2/brotli/tools/bro.cc, libs/woff2/brotli/tools/rfc-format.py, + libs/woff2/brotli/tools/version.h: + removed redundant files + 2017-02-20 Martin Gieseking <martin.gieseking@uos.de> * NEWS: @@ -45,10 +1203,8 @@ src/utility.hpp: replaced non-standard constant M_PI with own definition -2017-02-12 Martin Gieseking <martin.gieseking@uos.de> - - * .appveyor.yml, .travis.yml, appveyor.yml: - exclude branch 'tmp' from CI builds + * src/MapLine.hpp: + removed 'expicit' keyword from default constructor to make gcc 4.8 happy 2017-02-11 Martin Gieseking <martin.gieseking@uos.de> @@ -138,10 +1294,10 @@ * src/XMLString.cpp, tests/EmSpecialTest.cpp, tests/GFGlyphTracerTest.cpp: avoid negative zeros (-0) in SVG output -2017-02-07 Martin Gieseking <martin.gieseking@uos.de> + * tests/CommandLineTest.cpp: + removed redundant function - * libs/clipper/License.txt: - fixed line endings of clipper/License.txt +2017-02-07 Martin Gieseking <martin.gieseking@uos.de> * NEWS: updated NEWS @@ -1234,8 +2390,13 @@ exit() 2016-05-26 Martin Gieseking <martin.gieseking@uos.de> * README.md, doc/dvisvgm.txt.in, src/BasicDVIReader.cpp, - src/BasicDVIReader.h, src/DVIReader.cpp, src/DVIToSVG.cpp: - reworded 'DVI format' to 'DVI (format) version' + src/BasicDVIReader.h, src/DVIReader.cpp: + added support for XDV version 7 introduced by XeTeX 0.99995 + +2016-05-25 Martin Gieseking <martin.gieseking@uos.de> + + * src/TFM.cpp: + prevent reading more than 7 TFM param values (fixes #58) 2016-05-24 Martin Gieseking <martin.gieseking@uos.de> diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.am index cc5f4d7ef85..e428c70ea9a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.am +++ b/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.am @@ -1,5 +1,5 @@ ## This file is part of dvisvgm -## Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> +## Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ## ## Process this file with automake. @@ -15,7 +15,6 @@ lcov_file=$(lcov_dir)/lcov.info lcov-report: @mkdir -p $(lcov_dir) lcov --capture --directory . --no-external -o $(lcov_file) - lcov --remove $(lcov_file) "gzstream.*" -o $(lcov_file) genhtml --title "dvisvgm" --num-spaces 2 --legend -o $(lcov_dir) $(lcov_file) lcov-clean: diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.in index cf43821b0b4..7a65cd6148c 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.in @@ -659,7 +659,6 @@ uninstall-am: @CODE_COVERAGE_ENABLED_TRUE@lcov-report: @CODE_COVERAGE_ENABLED_TRUE@ @mkdir -p $(lcov_dir) @CODE_COVERAGE_ENABLED_TRUE@ lcov --capture --directory . --no-external -o $(lcov_file) -@CODE_COVERAGE_ENABLED_TRUE@ lcov --remove $(lcov_file) "gzstream.*" -o $(lcov_file) @CODE_COVERAGE_ENABLED_TRUE@ genhtml --title "dvisvgm" --num-spaces 2 --legend -o $(lcov_dir) $(lcov_file) @CODE_COVERAGE_ENABLED_TRUE@lcov-clean: diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/NEWS b/Build/source/texk/dvisvgm/dvisvgm-src/NEWS index 06c1b02dfd8..8840de7f6f4 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/NEWS +++ b/Build/source/texk/dvisvgm/dvisvgm-src/NEWS @@ -1,3 +1,44 @@ +dvisvgm-2.3.1 (2018-01-12) +- fixed the width of characters slanted by a mapfile entry (GH bug #82) +- if ttfautohint fails for a font, dvisvgm now uses the unhinted font and + prints a corresponding warning message +- some code cleanup + +dvisvgm-2.3 (2017-12-28) +- added experimental support for ttfautohint +- updated xxHash to version 0.6.4 +- added configuration option to set location of libkpathsea (GH bug #71) +- some improvements of the build system + +dvisvgm-2.2.3 (2017-12-12) +- updated the bundled brotli library to version 1.0.2 +- fixed a potential memory issue +- some code and test improvements + +dvisvgm-2.2.2 (2017-11-17) +- fixed memory issue regarding font maps (GH bug #79) +- avoid scientific notation of floating point numbers +- minor code improvements + +dvisvgm-2.2.1 (2017-11-13) +- fixed portability issue when building the manpage (GH bug #72) +- fixed incomplete computation of PS line width (GH bug #77) +- further code refactorings + +dvisvgm-2.2 (2017-10-19) +- added evaluation of pdf:pagesize specials +- added evaluation of PDF hyperlink specials +- try to load Ghostscript dylib on Mac systems (patch by Toby Fleming, GH bug #66) +- improved TPIC special handler, added evaluation of 'tx' special +- length values in dvisvgm specials now accept unit specifiers +- added pdftex.map to default mapfiles +- fixed potential infinite loop after starting subprocesses (GH bug #68) +- files included with psfile are now also searched in the texmf tree if not + present in the current working directory (GH bug #69) +- fixed transformation issue in computation of psfile position (GH bug #70) +- updated bundled brotli, woff2, and xxhash libraries +- several code refactorings and improvements + dvisvgm-2.1.3 (2017-02-20) - fixed build failures of libfontforge on Solaris 10 - increased code portablity diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/README b/Build/source/texk/dvisvgm/dvisvgm-src/README index ea4b24eb16d..6ef9454bbdf 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/README +++ b/Build/source/texk/dvisvgm/dvisvgm-src/README @@ -19,7 +19,7 @@ DEPENDENCIES font data in WOFF or TrueType format rather than as SVG. The FontForge library provides the required functions to create font files in these formats. A reduced version of the library is bundled with the dvisvgm - sources. It's also available at https://github.com/mgieseki/ff-woff. + sources. * FreeType 2 (http://www.freetype.org) This library is used to extract the glyph outlines from vector fonts @@ -45,6 +45,13 @@ DEPENDENCIES Peter Selinger's bitmap tracing library is utilized to vectorize Metafont's bitmap output. + * ttfautohint (https://www.freetype.org/ttfautohint) + dvisvgm can optionally be built with ttfautohint support to replace the + autohinting functionality of FontForge. Since it's still an experimental + feature, ttfautohint support is disabled by default. + The development files required for Windows can be found at + https://github.com/mgieseki/ttfautohint-dll. + * woff2 and brotli (https://github.com/google/woff2) These Google libraries are bundled with the dvisvgm sources. They are used to create WOFF2 from TrueType fonts. @@ -56,10 +63,7 @@ DEPENDENCIES version of xxHash is bundled with the dvisvgm sources. * zlib (http://www.zlib.org) - Compressed SVG files are produced by using functions of this library and the - Gzstream wrapper classes (http://www.cs.unc.edu/Research/compgeom/gzstream) - which are licensed under LGPL version 2.1 (or optionally any later version) - and should be included with this package. + This library is required to create compressed SVGZ files. If you want to build and run the test suite located in the tests subdirectory, you also need the Google Test libraries (https://github.com/google/googletest). @@ -68,7 +72,7 @@ DEPENDENCIES BUILDING DVISVGM FROM SOURCE dvisvgm is written in C++11 (ISO C++ standard 2011) and requires an appropriate - compiler, like GCC 4.8.1, Clang 3.3, or any later version. The configure script + compiler, like GCC 4.9, Clang 3.3, or any later version. The configure script checks for the availability of C++11 support and adds the proper compiler options if necessary. @@ -116,7 +120,7 @@ ADDITIONAL INFORMATION COPYRIGHT - Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> + Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/config.h.in b/Build/source/texk/dvisvgm/dvisvgm-src/config.h.in index 805efbbdbf5..f847b92cb0b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/config.h.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/config.h.in @@ -1,8 +1,5 @@ /* config.h.in. Generated from configure.ac by autoheader. */ -/* Define to 1 if the `closedir' function returns void instead of `int'. */ -#undef CLOSEDIR_VOID - /* Set to 1 if PostScript support should be disabled */ #undef DISABLE_GS @@ -22,9 +19,6 @@ /* Define to 1 if you have the <dlfcn.h> header file. */ #undef HAVE_DLFCN_H -/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ -#undef HAVE_DOPRNT - /* Define to 1 if you have the `ftime' function. */ #undef HAVE_FTIME @@ -52,22 +46,21 @@ /* Define to 1 if you have the `potrace' library (-lpotrace). */ #undef HAVE_LIBPOTRACE +/* Define to 1 if you have the `ttfautohint' library (-lttfautohint). */ +#undef HAVE_LIBTTFAUTOHINT + /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ -/* Define to 1 if your system has a GNU libc compatible `malloc' function, and - to 0 otherwise. */ -#undef HAVE_MALLOC - /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H -/* Define to 1 if you have the `memset' function. */ -#undef HAVE_MEMSET - /* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ #undef HAVE_NDIR_H +/* Define to 1 if you have the `sigaction' function. */ +#undef HAVE_SIGACTION + /* Define to 1 if `stat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_STAT_EMPTY_STRING_BUG @@ -81,18 +74,12 @@ /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H -/* Define to 1 if you have the `strcasecmp' function. */ -#undef HAVE_STRCASECMP - /* Define to 1 if you have the <strings.h> header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H -/* Define to 1 if you have the `strtol' function. */ -#undef HAVE_STRTOL - /* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H @@ -113,15 +100,15 @@ /* Define to 1 if you have the <sys/types.h> header file. */ #undef HAVE_SYS_TYPES_H +/* Define to 1 if you have the <ttfautohint.h> header file. */ +#undef HAVE_TTFAUTOHINT_H + /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `uselocale' function. */ #undef HAVE_USELOCALE -/* Define to 1 if you have the `vprintf' function. */ -#undef HAVE_VPRINTF - /* Define to 1 if you have the <xlocale.h> header file. */ #undef HAVE_XLOCALE_H @@ -171,17 +158,5 @@ /* Version number of package */ #undef VERSION -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -#undef inline -#endif - -/* Define to rpl_malloc if the replacement function should be used. */ -#undef malloc - /* Define to `unsigned int' if <sys/types.h> does not define. */ #undef size_t diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/configure.ac b/Build/source/texk/dvisvgm/dvisvgm-src/configure.ac index 63d18dc6d34..8c52510ca24 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/configure.ac +++ b/Build/source/texk/dvisvgm/dvisvgm-src/configure.ac @@ -1,11 +1,11 @@ # This file is part of dvisvgm -# Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> +# Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> # # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT([dvisvgm],[2.1.3],[martin.gieseking@uos.de]) -DATE="February 2017" +AC_INIT([dvisvgm],[2.3.1],[martin.gieseking@uos.de]) +DATE="January 2018" AC_CONFIG_SRCDIR(src) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) @@ -30,9 +30,26 @@ AC_LANG(C) AC_CHECK_HEADERS([sys/time.h sys/timeb.h xlocale.h]) AC_HEADER_TIOCGWINSZ -AC_CHECK_HEADER([kpathsea/kpathsea.h], , +CPPFLAGS_SAVE="$CPPFLAGS" +CFLAGS_SAVE="$CFLAGS" +LDFLAGS_SAVE="$LDFLAGS" + +# Check availability and usability of the kpathsea library +AC_ARG_VAR(KPSE_CFLAGS, [C/C++ compiler flags for the kpathsea library]) +AC_ARG_VAR(KPSE_LIBS, [linker flags for the kpathsea library]) +AC_ARG_VAR(KPSE_LIBS, []) +AC_ARG_WITH([kpathsea], + [AS_HELP_STRING([--with-kpathsea=prefix], [set location of kpathsea library])], + [with_kpathsea="$withval"], + [with_kpathsea=yes]) + +AS_IF([test "x$with_kpathsea" != "xyes"], + [KPSE_CFLAGS="-I$with_kpathsea/include" KPSE_LIBS="-L$with_kpathsea/lib"] + [CPPFLAGS="$CPPFLAGS $KPSE_CFLAGS" CFLAGS="$CFLAGS $KPSE_CFLAGS" LDFLAGS="$LDFLAGS $KPSE_LIBS"]) + +AC_CHECK_HEADER([kpathsea/kpathsea.h],, [AC_MSG_ERROR([please install the kpathsea development package])]) -AC_CHECK_LIB(kpathsea, kpse_find_file, , +AC_CHECK_LIB([kpathsea], [kpse_find_file],, [AC_MSG_ERROR([libkpathsea not found, please install the corresponding package first])]) AC_MSG_CHECKING([kpathsea version]) @@ -49,58 +66,27 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([#include <stdio.h> [kpseversion=`cat kpseversion|sed 's/kpathsea version //'`], [kpseversion=], [kpseversion=unknown]) AC_MSG_RESULT("$kpseversion") rm -f kpseversion -if test -z "$kpseversion"; then - AC_MSG_ERROR([Could not compile a simple kpathsea program -- check your installation]) -fi +AS_IF([test -z "$kpseversion"], + [AC_MSG_ERROR([Could not compile a simple kpathsea program -- check your installation])]) +AC_SUBST(KPSE_CFLAGS) +AC_SUBST(KPSE_LIBS) - -# Check how to link potracelib -HAVE_LIBPOTRACE=1 +# Check how to link potrace library AC_CHECK_HEADER([potracelib.h], - [AC_CHECK_LIB(m, sqrt) # required to pass potrace check - AC_CHECK_LIB(potrace, potrace_trace, , HAVE_LIBPOTRACE=0)], HAVE_LIBPOTRACE=0) - -if test "$HAVE_LIBPOTRACE" -eq 0; then - AC_MSG_ERROR([potrace library not found]) -fi - + [AC_CHECK_LIB(m, sqrt)] # required to pass potrace check + [AC_CHECK_LIB(potrace, potrace_trace,, + [AC_MSG_ERROR([potrace library not found])])]) # Check how to link Ghostscript -HAVE_LIBGS=1 +have_libgs=yes AC_CHECK_HEADER([ghostscript/iapi.h], - AC_CHECK_LIB(gs, gsapi_new_instance, , HAVE_LIBGS=0), HAVE_LIBGS=0) - -if test "$HAVE_LIBGS" -eq 0; then - AC_CHECK_LIB(dl, dlopen, , - [AC_DEFINE(DISABLE_GS, 1, [Set to 1 if PostScript support is to be disabled]) - AC_MSG_WARN(PostScript support disabled)]) -else - # query Ghostscript version - AC_MSG_CHECKING([Ghostscript version]) - AC_RUN_IFELSE([AC_LANG_SOURCE([#include <stdio.h> - #include <ghostscript/iapi.h> - int main () { - gsapi_revision_t r; - if (gsapi_revision(&r, sizeof(gsapi_revision_t)) == 0) { - FILE *f; - f = fopen("gsversion", "w"); - if (!f) exit(1); - fprintf(f, "%ld\n", r.revision); - fclose(f); - exit(0); - } - }])], - [gsversion=`cat gsversion`], [gsversion=], [gsversion=unknown]) - AC_MSG_RESULT("$gsversion") - rm -f gsversion - if test "$gsversion" -lt 831; then - # current Ghostscript API was introduced in version 8.31 - # older versions are not supported - LIBS=`echo $LIBS | sed "s/-lgs //" $LIBS` - AC_DEFINE(DISABLE_GS, 1, [Set to 1 if PostScript support should be disabled]) - AC_MSG_WARN([Ghostscript version < 8.31 found; PostScript support disabled]) - fi -fi + [AC_CHECK_LIB(gs, gsapi_revision,, [have_libgs=no])], + [have_libgs=no]) +AS_IF([test "x$have_libgs" = "xno"], + # Ghostscript not found, check for dlopen + [AC_CHECK_LIB(dl, dlopen,, + [AC_DEFINE(DISABLE_GS, 1, [Set to 1 if PostScript support should be disabled])] + [AC_MSG_WARN(PostScript support disabled)])]) # Check for pkg-config PKG_PROG_PKG_CONFIG @@ -109,14 +95,34 @@ PKG_PROG_PKG_CONFIG PKG_CHECK_MODULES([FREETYPE], [freetype2]) AC_ARG_ENABLE([woff], - [AS_HELP_STRING([--disable-woff], [Disable WOFF support @<:@no@:>@])], + [AS_HELP_STRING([--disable-woff], [Disable WOFF support @<:@default=no@:>@])], [], [enable_woff=yes]) +AC_ARG_WITH([ttfautohint], + [AS_HELP_STRING([--with-ttfautohint@<:@=prefix@:>@], [enable ttfautohint support (disabled by default)])], + [with_ttfautohint="$withval"], + [with_ttfautohint=no]) + AM_CONDITIONAL([ENABLE_WOFF], [test "x$enable_woff" = "xyes"]) -if test "x$enable_woff" != "xyes" ; then - AC_DEFINE([DISABLE_WOFF], 1, [Define if WOFF support is disabled]) -fi +AS_IF([test "x$enable_woff" != "xyes"], + [AC_DEFINE([DISABLE_WOFF], 1, [Define if WOFF support is disabled])], + [AS_IF([test "x$with_ttfautohint" != "xno"], + [AS_IF([test "x$with_ttfautohint" = "xyes"], + # --with-ttfautohint without path => check via pkg-config + [PKG_CHECK_MODULES([TTFAUTOHINT], [ttfautohint],, + [AC_MSG_ERROR([can't locate ttfautohint, use "--with-ttfautohint=path" to specify its location])])], + # --with-ttfautohint=/path/ttfautohint given + [TTFAUTOHINT_CFLAGS="-I$with_ttfautohint/include"] + [TTFAUTOHINT_LIBS="-L$with_ttfautohint/lib"])] + [CPPFLAGS="$CPPFLAGS $TTFAUTOHINT_CFLAGS" CFLAGS="$CFLAGS $TTFAUTOHINT_CFLAGS" LDFLAGS="$LDFLAGS $TTFAUTOHINT_LIBS"] + [AC_CHECK_HEADERS([ttfautohint.h],, [AC_MSG_WARN([ttfautohint.h not found])])] + [AC_CHECK_LIB([ttfautohint], [TTF_autohint],, + [AC_MSG_WARN([no working ttfautohint library found])] + [AC_CHECK_LIB(dl, dlopen, + [AC_MSG_NOTICE([enabled dynamic loading of ttfautohint])], + [AC_MSG_WARN([disabled ttfautohint support])])])] + [AC_SUBST(TTFAUTOHINT_CFLAGS) AC_SUBST(TTFAUTOHINT_LIBS)])]) AC_CHECK_LIB(z, gzopen) @@ -127,36 +133,24 @@ AC_CHECK_HEADERS([libintl.h stdlib.h string.h strings.h unistd.h]) # Check for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL -AC_C_CONST -AC_C_INLINE AC_TYPE_SIZE_T AC_STRUCT_TM # Check for library functions. -AC_FUNC_CLOSEDIR_VOID -AC_FUNC_ERROR_AT_LINE -AC_FUNC_MALLOC AC_FUNC_STAT -AC_FUNC_VPRINTF -AC_CHECK_FUNCS([ftime gettimeofday memset strcasecmp strtol uselocale]) +AC_CHECK_FUNCS([ftime gettimeofday sigaction uselocale]) # add options for selection of "optional" library locations # currently these libraries are mandatory; the --with-foo options # are used to specify the locations explicitely -AC_ARG_WITH(zlib,[ --with-zlib=DIR location of the zlib library], - [if test "$withval" != no; then - if test "$withval" != yes; then - ZLIB_DIR=$withval - fi - fi]) - -if test "$withval" != no; then - if test -n "$ZLIB_DIR"; then - ZLIB_CFLAGS="-I$ZLIB_DIR -I$ZLIB_DIR/include" - ZLIB_LIBS="-L$ZLIB_DIR/lib" - fi -fi +AC_ARG_WITH(zlib, + [AS_HELP_STRING([--with-zlib=DIR], [set location of the zlib library])], + [AS_IF([test "x$withval" != "xno"], + [AS_IF([test "x$withval" != "xyes"], [ZLIB_DIR=$withval])] + [AS_IF([test -n "$ZLIB_DIR"], + [ZLIB_CFLAGS="-I$ZLIB_DIR -I$ZLIB_DIR/include"] + [ZLIB_LIBS="-L$ZLIB_DIR/lib" -lz])])]) AC_SUBST([ZLIB_CFLAGS]) AC_SUBST([ZLIB_LIBS]) @@ -172,6 +166,10 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <kpathsea/kpathsea.h>]], [Define to 1 if the kpathsea headers are not C++ safe.])]) AC_LANG_POP([C++]) +CPPFLAGS="$CPPFLAGS_SAVE" +CFLAGS="$CFLAGS_SAVE" +LDFLAGS="$LDFLAGS_SAVE" + AX_CODE_COVERAGE AS_IF([ test "$enable_code_coverage" = "yes" ], [ # disable optimization @@ -187,10 +185,11 @@ AC_SUBST(AM_LDFLAGS) AC_CONFIG_FILES([ Makefile libs/Makefile + libs/brotli/Makefile libs/clipper/Makefile libs/ff-woff/Makefile + libs/variant/Makefile libs/woff2/Makefile - libs/woff2/brotli/Makefile libs/xxHash/Makefile src/Makefile src/version.hpp diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.am index 7a9fc6dbfef..d88d776d1e4 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.am +++ b/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.am @@ -1,15 +1,16 @@ ## This file is part of dvisvgm -## Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> +## Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ## ## Process this file with automake. man_MANS = dvisvgm.1 -EXTRA_DIST = $(man_MANS) conf-dblatex-man.xsl conf-dblatex-pdf.xsl tweak-dblatex-pdf.xsl +EXTRA_DIST = $(man_MANS) conf-dblatex-man.xsl conf-dblatex-pdf.xsl tweak-dblatex-pdf.xsl tweak-db-refentry.xsl CONF_DBLATEX_MAN = $(top_srcdir)/doc/conf-dblatex-man.xsl CONF_DBLATEX_PDF = $(top_srcdir)/doc/conf-dblatex-pdf.xsl TWEAK_DBLATEX_PDF = $(top_srcdir)/doc/tweak-dblatex-pdf.xsl TWEAK_DB_ARTICLE = $(top_srcdir)/doc/tweak-db-article.xsl +TWEAK_DB_REFENTRY = $(top_srcdir)/doc/tweak-db-refentry.xsl DB_VARS = man.endnotes.list.enabled=0 man.endnotes.are.numbered=0 man.authors.section.enabled=0 @@ -32,17 +33,18 @@ dvi-pdf: dvisvgm.dvi dvisvgm.dvi: dvisvgm.1 groff -Tdvi -mandoc ./$< >$@ -dvisvgm.html: dvisvgm-man.xml +dvisvgm.html: dvisvgm-man.xml db2html.xsl xsltproc -o $@ db2html.xsl $< dvisvgm.epub: dvisvgm-article.xml a2x -darticle -fepub -L --icons --icons-dir=. $< mv $(basename $<).epub $@ -dvisvgm-man.xml: dvisvgm.txt +dvisvgm-man.xml: dvisvgm.txt $(TWEAK_DB_REFENTRY) if [ `type -p asciidoc` ]; then \ - asciidoc -a icons -a 'iconsdir=.' -a badges -a 'revnumber=@VERSION@' --unsafe -bdocbook -dmanpage -o $@ $<; \ - sed -i "s#\(</refmeta>\)#<refmiscinfo class='date'>$(shell stat -c %y $<)</refmiscinfo>\n\1#" $@; \ + asciidoc -a icons -a 'iconsdir=.' -a badges -a 'revnumber=@VERSION@' --unsafe -bdocbook -dmanpage -o $@.tmp $<; \ + xsltproc -o $@ $(TWEAK_DB_REFENTRY) $@.tmp; \ + rm $@.tmp; \ fi dvisvgm-article.xml: dvisvgm.txt diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.in index b1f65e8d16f..7314d0bb709 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -204,6 +204,8 @@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KPSE_CFLAGS = @KPSE_CFLAGS@ +KPSE_LIBS = @KPSE_LIBS@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ @@ -239,6 +241,8 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +TTFAUTOHINT_CFLAGS = @TTFAUTOHINT_CFLAGS@ +TTFAUTOHINT_LIBS = @TTFAUTOHINT_LIBS@ VERSION = @VERSION@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ @@ -287,7 +291,6 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ -runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -301,11 +304,12 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ man_MANS = dvisvgm.1 -EXTRA_DIST = $(man_MANS) conf-dblatex-man.xsl conf-dblatex-pdf.xsl tweak-dblatex-pdf.xsl +EXTRA_DIST = $(man_MANS) conf-dblatex-man.xsl conf-dblatex-pdf.xsl tweak-dblatex-pdf.xsl tweak-db-refentry.xsl CONF_DBLATEX_MAN = $(top_srcdir)/doc/conf-dblatex-man.xsl CONF_DBLATEX_PDF = $(top_srcdir)/doc/conf-dblatex-pdf.xsl TWEAK_DBLATEX_PDF = $(top_srcdir)/doc/tweak-dblatex-pdf.xsl TWEAK_DB_ARTICLE = $(top_srcdir)/doc/tweak-db-article.xsl +TWEAK_DB_REFENTRY = $(top_srcdir)/doc/tweak-db-refentry.xsl DB_VARS = man.endnotes.list.enabled=0 man.endnotes.are.numbered=0 man.authors.section.enabled=0 all: all-am @@ -563,17 +567,18 @@ dvi-pdf: dvisvgm.dvi dvisvgm.dvi: dvisvgm.1 groff -Tdvi -mandoc ./$< >$@ -dvisvgm.html: dvisvgm-man.xml +dvisvgm.html: dvisvgm-man.xml db2html.xsl xsltproc -o $@ db2html.xsl $< dvisvgm.epub: dvisvgm-article.xml a2x -darticle -fepub -L --icons --icons-dir=. $< mv $(basename $<).epub $@ -dvisvgm-man.xml: dvisvgm.txt +dvisvgm-man.xml: dvisvgm.txt $(TWEAK_DB_REFENTRY) if [ `type -p asciidoc` ]; then \ - asciidoc -a icons -a 'iconsdir=.' -a badges -a 'revnumber=@VERSION@' --unsafe -bdocbook -dmanpage -o $@ $<; \ - sed -i "s#\(</refmeta>\)#<refmiscinfo class='date'>$(shell stat -c %y $<)</refmiscinfo>\n\1#" $@; \ + asciidoc -a icons -a 'iconsdir=.' -a badges -a 'revnumber=@VERSION@' --unsafe -bdocbook -dmanpage -o $@.tmp $<; \ + xsltproc -o $@ $(TWEAK_DB_REFENTRY) $@.tmp; \ + rm $@.tmp; \ fi dvisvgm-article.xml: dvisvgm.txt diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-man.xsl b/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-man.xsl index bddaf5eee2d..be9d6ec0819 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-man.xsl +++ b/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-man.xsl @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- This file is part of dvisvgm --> -<!-- Copyright (C) 2015-2017 Martin Gieseking <martin.gieseking@uos.de> --> +<!-- Copyright (C) 2015-2018 Martin Gieseking <martin.gieseking@uos.de> --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <!-- output monospaced text in bold --> <xsl:template match="literal"> diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-pdf.xsl b/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-pdf.xsl index d8d881e1150..07e75b2e88e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-pdf.xsl +++ b/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-pdf.xsl @@ -1,6 +1,6 @@ <?xml version='1.0' encoding="iso-8859-1"?> <!-- This file is part of dvisvgm --> -<!-- Copyright (C) 2015-2017 Martin Gieseking <martin.gieseking@uos.de> --> +<!-- Copyright (C) 2015-2018 Martin Gieseking <martin.gieseking@uos.de> --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="xetex.font"> <xsl:text>\setmainfont{Source Sans Pro} </xsl:text> diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.1 b/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.1 index 9e2ec6b5a4f..875b32cf4dc 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.1 +++ b/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.1 @@ -1,13 +1,13 @@ '\" t .\" Title: dvisvgm .\" Author: Martin Gieseking <martin.gieseking@uos.de> -.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/> -.\" Date: 02/20/2017 +.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> +.\" Date: 01/12/2018 .\" Manual: dvisvgm Manual -.\" Source: dvisvgm 2.1.3 +.\" Source: dvisvgm 2.3.1 .\" Language: English .\" -.TH "DVISVGM" "1" "02/20/2017" "dvisvgm 2\&.1\&.3" "dvisvgm Manual" +.TH "DVISVGM" "1" "01/12/2018" "dvisvgm 2\&.3\&.1" "dvisvgm Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -44,10 +44,10 @@ SVG is a vector\-based graphics format and therefore dvisvgm tries to convert th .sp However, TeX\(cqs main source for font descriptions is Metafont, which produces bitmap output (GF files)\&. That\(cqs why not all obtainable TeX fonts are available in a scalable format\&. In these cases, dvisvgm tries to vectorize Metafont\(cqs output by tracing the glyph bitmaps\&. The results are not as perfect as most (manually optimized) PFB or OTF counterparts, but are nonetheless really nice in most cases\&. .sp -When running dvisvgm without option \fB\-\-no\-fonts\fR, it creates \fIfont\fR elements (\fB<font>\fR\&...\fB</font>\fR) to embed the font data into the SVG files\&. Unfortunately, only few SVG renderes support these elements yet\&. Most web browsers and vector graphics applications don\(cqt evaluate them properly so that the text components of the resulting graphics might look strange\&. In order to create more compatible SVG files, command\-line option \fB\-\-no\-fonts\fR can be given to replace the font elements by plain graphics paths\&. +When running dvisvgm without option \fB\-\-no\-fonts\fR, it creates \fIfont\fR elements (\fB<font>\fR\&...\fB</font>\fR) to embed the font data into the SVG files\&. Unfortunately, only few SVG renderers support these elements yet\&. Most web browsers and vector graphics applications don\(cqt evaluate them properly so that the text components of the resulting graphics might look strange\&. In order to create more compatible SVG files, command\-line option \fB\-\-no\-fonts\fR can be given to replace the font elements by plain graphics paths\&. .SH "OPTIONS" .sp -dvisvgm provides a POSIX\-compliant command\-line interface with short and long option names\&. They may be given before and/or after the name of the file to be converted\&. Also, the order of specifying the options is not significant, i\&.e\&. you can add them in any order without changing dvisvgm\(cqs behavior\&. Certain options accept or require additional parameters which are directly appended to or separated by whitespace from a short option (e\&.g\&. \fB\-v0\fR or \fB\-v 0\fR)\&. Long options require an additional equals sign (\fB=\fR) between option name and argument but without any surrounding whitespace (e\&.g\&. \fB\-\-verbosity=0\fR)\&. +dvisvgm provides a POSIX\-compliant command\-line interface with short and long option names\&. They may be given before and/or after the name of the file to be converted\&. Also, the order of specifying the options is not significant, i\&.e\&. you can add them in any order without changing dvisvgm\(cqs behavior\&. Certain options accept or require additional parameters which are directly appended to or separated by whitespace from a short option (e\&.g\&. \fB\-v0\fR or \fB\-v 0\fR)\&. Long options require an additional equals sign (\fB=\fR) between option name and argument but without any surrounding whitespace (e\&.g\&. \fB\-\-verbosity=0\fR)\&. Multiple short options that don\(cqt expect a further parameter can be combined after a single dash (e\&.g\&. \fB\-ejs\fR rather than \fB\-e \-j \-s\fR)\&. .PP \fB\-a, \-\-trace\-all\fR=[\fIretrace\fR] .RS 4 @@ -279,6 +279,7 @@ Loads and evaluates a single font map file or a sequence of font map files\&. Th \fB\-\-fontmap\fR is omitted, dvisvgm looks for the default map files \fIps2pk\&.map\fR, +\fIpdftex\&.map\fR, \fIdvipdfm\&.map\fR, and \fIpsfonts\&.map\fR (in this order)\&. Otherwise, the files as option arguments are evaluated in the given order\&. Multiple filenames must be separated by commas without leading and/or trailing whitespace\&. By default, redefined mappings do not replace previous ones\&. However, each filename can be preceded by an optional mode specifier (\fB+\fR, @@ -557,7 +558,7 @@ converts all pages starting with page 10\&. Please consider that the page values .RS 4 Specifies the maximal number of decimal places applied to floating\-point attribute values\&. All attribute values written to the generated SVG file(s) are rounded accordingly\&. The parameter \fIdigits\fR -allows integer values from 0 to 6, where 0 enables the automatic selection of significant decimal places\&. This is also the default value if dvisvgm is called without option +accepts integer values from 0 to 6, where 0 enables the automatic selection of significant decimal places\&. This is also the default value if dvisvgm is called without option \fB\-\-precision\fR\&. .RE .PP @@ -961,7 +962,8 @@ Creates an image element at the current graphic position referencing the given f \fIwidth\fR and \fIheight\fR -must be given as plain floating point numbers in TeX point units (1in = 72\&.27pt)\&. +can be given together with a unit specifier (see option +\fB\-\-bbox\fR) or as plain floating point numbers\&. In the latter case, TeX point units are assumed (1in = 72\&.27pt)\&. .RE .PP \fBdvisvgm:bbox\fR n[ew] \fIname\fR @@ -992,22 +994,22 @@ is specified, dvisvgm embeds a second rectangle (\fIx\fR, \fIy\fR, \fIwidth\fR, \-\fIdepth\fR)\&. The lengths \fIwidth\fR, -\fIheight\fR -and +\fIheight\fR, and \fIdepth\fR -must be given as plain floating point numbers in TeX point units (1in = 72\&.27pt)\&. Depending on size and position of the virtual rectangle, this command either enlarges the overall bounding box or leaves it as is\&. It\(cqs not possible to reduce its extent\&. This special should be used in conjunction with +can be given together with a unit specifier (see option +\fB\-\-bbox\fR) or as plain floating point numbers\&. In the latter case, TeX point units are assumed (1in = 72\&.27pt)\&. Depending on size and position of the virtual rectangle, this command either enlarges the overall bounding box or leaves it as is\&. It\(cqs not possible to reduce its extent\&. This special should be used together with \fBdvisvgm:raw\fR in order to update the viewport of the page properly\&. .RE .PP \fBdvisvgm:bbox\fR a[bs] \fIx1\fR \fIy1\fR \fIx2\fR \fIy2\fR .RS 4 -This variant of the bbox special updates the bounding box by embedding a virtual rectangle (\fIx1\fR,\fIy1\fR,\fIx2\fR,\fIy2\fR)\&. The points (\fIx1\fR,\fIy1\fR) and (\fIx2\fR,\fIy2\fR) denote two diagonal corners of the rectangle given in TeX point units\&. +This variant of the bbox special updates the bounding box by embedding a virtual rectangle (\fIx1\fR,\fIy1\fR,\fIx2\fR,\fIy2\fR)\&. The points (\fIx1\fR,\fIy1\fR) and (\fIx2\fR,\fIy2\fR) denote the absolute coordinates of two diagonal corners of the rectangle\&. .RE .PP \fBdvisvgm:bbox\fR f[ix] \fIx1\fR \fIy1\fR \fIx2\fR \fIy2\fR .RS 4 -This variant of the bbox special assigns an absolute (final) bounding box to the resulting SVG\&. After executing this command, dvisvgm doesn\(cqt further alter the bounding box coordinates, except this special is called again later\&. The points (\fIx1\fR,\fIy1\fR) and (\fIx2\fR,\fIy2\fR) denote two diagonal corners of the rectangle given in TeX point units\&. +This variant of the bbox special assigns an absolute (final) bounding box to the resulting SVG\&. After executing this command, dvisvgm doesn\(cqt further alter the bounding box coordinates, except this special is called again later\&. The points (\fIx1\fR,\fIy1\fR) and (\fIx2\fR,\fIy2\fR) denote the absolute coordinates of two diagonal corners of the rectangle\&. .sp The following TeX snippet adds two raw SVG elements to the output and updates the bounding box accordingly: .sp @@ -1015,11 +1017,12 @@ The following TeX snippet adds two raw SVG elements to the output and updates th .RS 4 .\} .nf -\especial{dvisvgm:raw <circle cx=\*(Aq{?x}\*(Aq cy=\*(Aq{?y}\*(Aq r=\*(Aq10\*(Aq stroke=\*(Aqblack\*(Aq fill=\*(Aqred\*(Aq/>} -\especial{dvisvgm:bbox 20 10 10} +\especial{dvisvgm:raw <circle cx=\*(Aq{?x}\*(Aq cy=\*(Aq{?y}\*(Aq r=\*(Aq10\*(Aq stroke=\*(Aqblack\*(Aq fill=\*(Aqred\*(Aq/>}% +\especial{dvisvgm:bbox 10bp 10bp 10bp}% +\especial{dvisvgm:bbox \-10bp 10bp 10bp} \especial{dvisvgm:raw <path d=\*(AqM50 200 L10 250 H100 Z\*(Aq stroke=\*(Aqblack\*(Aq fill=\*(Aqblue\*(Aq/>} -\especial{dvisvgm:bbox abs 10 200 100 250} +\especial{dvisvgm:bbox abs 10bp 200bp 100bp 250bp} .fi .if n \{\ .RE @@ -1055,11 +1058,22 @@ on the command\-line\&. Otherwise, dvisvgm ignores them and computes tight bound .PP \fBpdf\fR .RS 4 -pdfTeX and dvipdfmx introduced several special commands related to the generation of PDF files\&. Currently, only two of them, +pdfTeX and dvipdfmx introduced several special commands related to the generation of PDF files\&. Currently, only +\fIpdf:mapfile\fR, +\fIpdf:mapline\fR, +\fIpdf:pagesize\fR, and PDF hyperlink specials are supported by dvisvgm\&. The latter are the PDF pendants to the HTML HyperTeX specials generated by the hyperref package in PDF mode\&. +.sp +\fIpdf:pagesize\fR +is similar to the +\fIpapersize\fR +special (see above) which specifies the size of the current and all folowing pages\&. In order to actually apply the extents to the generated SVG files, option +\fB\-\-bbox=papersize\fR +must be given\&. +.sp \fIpdf:mapfile\fR and \fIpdf:mapline\fR -are supported by dvisvgm\&. These specials allow modifying the font map tree during the processing of DVI files\&. They are used by CTeX, for example\&. dvisvgm supports both, the dvips and dvipdfm font map format\&. For further information on the command syntax and semantics, see the documentation of +allow modifying the font map tree while processing the DVI file\&. They are used by CTeX, for example\&. dvisvgm supports both, the dvips and dvipdfm font map format\&. For further information on the command syntax and semantics, see the documentation of \fB\epdfmapfile\fR in the pdfTeX user manual (\m[blue]http://www.ctan.org/pkg/pdftex\m[])\&. @@ -1075,7 +1089,9 @@ Since PostScript is a rather complex language, dvisvgm does not implement its ow Ghostscript (\m[blue]http://ghostscript.com\m[]) instead\&. If the Ghostscript library was not linked to the dvisvgm binary, it is looked up and loaded dynamically during runtime\&. In this case, dvisvgm looks for \fIlibgs\&.so\&.X\fR -on Unix\-like systems (supported ABI versions: 7,8,9), and for +on Unix\-like systems (supported ABI versions: 7,8,9), for +\fIlibgs\&.X\&.dylib\fR +on macOS, and for \fIgsdll32\&.dll\fR or \fIgsdll64\&.dll\fR @@ -1092,9 +1108,11 @@ The PostScript handler also recognizes and evaluates bounding box data generated preview package (\m[blue]http://www.ctan.org/pkg/preview\m[]) with option \fItightpage\fR\&. If such data is present in the DVI file and if dvisvgm is called with option -\fB\-\-bbox=preview\fR, dvisvgm adapts the bounding box of the generated SVG file accordingly, and prints a message showing the width, height, and depth of the box in TeX point units\&. Especially, the depth value can be used to vertically align the SVG graphics with the baseline of surrounding text in HTML or XSL\-FO documents, for example\&. If you call dvisvgm with option +\fB\-\-bbox=preview\fR, dvisvgm sets the width and total height of the SVG file to the values derived from the preview data\&. Additionally, it prints a message showing the width, height, and depth of the box in TeX point units to the console\&. Especially, the depth value can be read by a post\-processor to vertically align the SVG graphics with the baseline of surrounding text in HTML or XSL\-FO documents, for example\&. Please note that SVG bounding boxes are defined by a width and (total) height\&. In contrast to TeX, SVG provides no means to differentiate between height and depth, i\&.e\&. the vertical extents above and below the baseline, respectively\&. Therefore, it is generally not possible to retrieve the depth value from the SVG file itself\&. +.sp +If you call dvisvgm with option \fB\-\-bbox=min\fR -(the default), the tight bounding box computed while processing the page is applied and not the one provided by the preview package\&. Thus, the height, depth and width values written to the console are adapted accordingly\&. +(the default) and preview data is present in the DVI file, dvisvgm doesn\(cqt apply the preview extents but computes a bounding box that tightly encloses the page contents\&. The height, depth and width values written to console are adapted accordingly\&. .RE .PP \fBtpic\fR @@ -1332,4 +1350,4 @@ Please report bugs using the bug tracker at GitHub (\m[blue]https://github.com/m Written by Martin Gieseking <\m[blue]\fBmartin\&.gieseking@uos\&.de\fR\m[]> .SH "COPYING" .sp -Copyright \(co 2005\-2017 Martin Gieseking\&. Free use of this software is granted under the terms of the GNU General Public License (GPL) version 3 or, (at your option) any later version\&. +Copyright \(co 2005\-2018 Martin Gieseking\&. Free use of this software is granted under the terms of the GNU General Public License (GPL) version 3 or, (at your option) any later version\&. diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.txt.in b/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.txt.in index b0e3cb6d8b8..bb7e4b60412 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.txt.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.txt.in @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////// // This file is part of dvisvgm -- a fast DVI to SVG converter // -// Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> // +// Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> // // // // This program is free software; you can redistribute it and/or // // modify it under the terms of the GNU General Public License as // @@ -62,7 +62,7 @@ The results are not as perfect as most (manually optimized) PFB or OTF counterpa nonetheless really nice in most cases. When running dvisvgm without option *--no-fonts*, it creates 'font' elements (+<font>+...+</font>+) -to embed the font data into the SVG files. Unfortunately, only few SVG renderes support these +to embed the font data into the SVG files. Unfortunately, only few SVG renderers support these elements yet. Most web browsers and vector graphics applications don't evaluate them properly so that the text components of the resulting graphics might look strange. In order to create more compatible SVG files, command-line option *--no-fonts* can be given to replace the font elements @@ -77,7 +77,8 @@ specifying the options is not significant, i.e. you can add them in any order wi dvisvgm's behavior. Certain options accept or require additional parameters which are directly appended to or separated by whitespace from a short option (e.g. +-v0+ or +-v 0+). Long options require an additional equals sign (+=+) between option name and argument but without any surrounding -whitespace (e.g. +--verbosity=0+). +whitespace (e.g. +--verbosity=0+). Multiple short options that don't expect a further parameter can +be combined after a single dash (e.g. +-ejs+ rather than +-e -j -s+). *-a, --trace-all*=['retrace']:: This option forces dvisvgm to vectorize not only the glyphs actually required to render the @@ -202,9 +203,9 @@ Option *--font-format* is only available if dvisvgm was built with WOFF support Loads and evaluates a single font map file or a sequence of font map files. These files are required to resolve font file names and encodings. dvisvgm does not provide its own map files but tries to read available ones coming with dvips or dvipdfm. If option *--fontmap* is omitted, dvisvgm looks for the -default map files 'ps2pk.map', 'dvipdfm.map', and 'psfonts.map' (in this order). Otherwise, the -files as option arguments are evaluated in the given order. Multiple filenames must be separated by -commas without leading and/or trailing whitespace. +default map files 'ps2pk.map', 'pdftex.map', 'dvipdfm.map', and 'psfonts.map' (in this order). +Otherwise, the files as option arguments are evaluated in the given order. Multiple filenames must be +separated by commas without leading and/or trailing whitespace. By default, redefined mappings do not replace previous ones. However, each filename can be preceded by an optional mode specifier (*+*, *-*, or *=*) to change this behavior: @@ -372,7 +373,7 @@ For example, +--output="%f-%(p-1)"+ creates filenames where the numbering starts than 1. + The default pattern is +%f-%p.svg+ if the DVI file consists of more than one page, and -*%f.svg* otherwise. That means, a DVI file 'foo.dvi' is converted to 'foo.svg' if 'foo.dvi' ++%f.svg+ otherwise. That means, a DVI file 'foo.dvi' is converted to 'foo.svg' if 'foo.dvi' is a single-page document. Otherwise, multiple SVG files 'foo-01.svg', 'foo-02.svg', etc. are produced. In Windows environments, the percent sign indicates dereferenced environment variables, and must therefore be protected by a second percent sign, e.g. +--output=%%f-%%p+. @@ -396,7 +397,7 @@ gets number 1. *-d, --precision*='digits':: Specifies the maximal number of decimal places applied to floating-point attribute values. All attribute values written to the generated SVG file(s) are rounded accordingly. The -parameter 'digits' allows integer values from 0 to 6, where 0 enables the automatic selection +parameter 'digits' accepts integer values from 0 to 6, where 0 enables the automatic selection of significant decimal places. This is also the default value if dvisvgm is called without option *--precision*. @@ -425,7 +426,7 @@ the system's temporary folder by default, e.g. +/tmp+ on Linux systems. Option * allows to specify a different location if necessary for some reason. Please note that dvisvgm does not create this folder, so you must ensure that it actually exists before running dvisvgm. + -If the optional parameter 'path' is omitted, dvisvgm prints the location of the system's +If the optional parameter 'path' is omitted, dvisvgm prints the location of the system's temp folder and exits. *-T, --transform*='commands':: @@ -587,7 +588,8 @@ dvisvgm offers its own small set of specials. The following list gives a brief o *dvisvgm:img* 'width' 'height' 'file';; Creates an image element at the current graphic position referencing the given file. JPEG, PNG, and SVG images can be used here. However, dvisvgm does not check the file format or the file name suffix. The lengths 'width' - and 'height' must be given as plain floating point numbers in TeX point units (1in = 72.27pt). + and 'height' can be given together with a unit specifier (see option *--bbox*) or as plain floating point numbers. + In the latter case, TeX point units are assumed (1in = 72.27pt). *dvisvgm:bbox* n[ew] 'name';; Defines or resets a local bounding box called 'name'. The name may consist of letters and digits. @@ -604,31 +606,32 @@ dvisvgm offers its own small set of specials. The following list gives a brief o *dvisvgm:bbox* 'width' 'height' ['depth'];; Updates the bounding box of the current page by embedding a virtual rectangle ('x', 'y', 'width', 'height') where the lower left corner is located at the current DVI drawing position ('x','y'). If the optional parameter 'depth' - is specified, dvisvgm embeds a second rectangle ('x', 'y', 'width', -__depth__). The lengths 'width', 'height' and - 'depth' must be given as plain floating point numbers in TeX point units (1in = 72.27pt). Depending on size and position - of the virtual rectangle, this command either enlarges the overall bounding box or leaves it as is. It's not possible - to reduce its extent. This special should be used in conjunction with *dvisvgm:raw* in order to update the viewport - of the page properly. + is specified, dvisvgm embeds a second rectangle ('x', 'y', 'width', -__depth__). The lengths 'width', 'height', and + 'depth' can be given together with a unit specifier (see option *--bbox*) or as plain floating point numbers. + In the latter case, TeX point units are assumed (1in = 72.27pt). Depending on size and position of the virtual rectangle, + this command either enlarges the overall bounding box or leaves it as is. It's not possible to reduce its extent. This + special should be used together with *dvisvgm:raw* in order to update the viewport of the page properly. *dvisvgm:bbox* a[bs] 'x1' 'y1' 'x2' 'y2';; This variant of the bbox special updates the bounding box by embedding a virtual rectangle ('x1','y1','x2','y2'). - The points ('x1','y1') and ('x2','y2') denote two diagonal corners of the rectangle given in TeX point units. + The points ('x1','y1') and ('x2','y2') denote the absolute coordinates of two diagonal corners of the rectangle. *dvisvgm:bbox* f[ix] 'x1' 'y1' 'x2' 'y2';; This variant of the bbox special assigns an absolute (final) bounding box to the resulting SVG. After executing this command, dvisvgm doesn't further alter the bounding box coordinates, except this special is called again later. - The points ('x1','y1') and ('x2','y2') denote two diagonal corners of the rectangle given in TeX point units. + The points ('x1','y1') and ('x2','y2') denote the absolute coordinates of two diagonal corners of the rectangle. + The following TeX snippet adds two raw SVG elements to the output and updates the bounding box accordingly: + [source,tex] ------------------------------------------------------------------------------------- -\special{dvisvgm:raw <circle cx='{?x}' cy='{?y}' r='10' stroke='black' fill='red'/>} -\special{dvisvgm:bbox 20 10 10} +------------------------------------------------------------------------------------- +\special{dvisvgm:raw <circle cx='{?x}' cy='{?y}' r='10' stroke='black' fill='red'/>}% +\special{dvisvgm:bbox 10bp 10bp 10bp}% +\special{dvisvgm:bbox -10bp 10bp 10bp} \special{dvisvgm:raw <path d='M50 200 L10 250 H100 Z' stroke='black' fill='blue'/>} -\special{dvisvgm:bbox abs 10 200 100 250} ------------------------------------------------------------------------------------- +\special{dvisvgm:bbox abs 10bp 200bp 100bp 250bp} +------------------------------------------------------------------------------------- + *em*:: @@ -654,11 +657,18 @@ evaluate these specials, their processing must be explicitly enabled by adding o the command-line. Otherwise, dvisvgm ignores them and computes tight bounding boxes. *pdf*:: -pdfTeX and dvipdfmx introduced several special commands related to the generation of PDF files. Currently, only -two of them, 'pdf:mapfile' and 'pdf:mapline' are supported by dvisvgm. These specials allow modifying the font map -tree during the processing of DVI files. They are used by CTeX, for example. dvisvgm supports both, the dvips and -dvipdfm font map format. For further information on the command syntax and semantics, see the documentation of -+\pdfmapfile+ in the http://www.ctan.org/pkg/pdftex[pdfTeX user manual]. +pdfTeX and dvipdfmx introduced several special commands related to the generation of PDF files. Currently, +only 'pdf:mapfile', 'pdf:mapline', 'pdf:pagesize', and PDF hyperlink specials are supported by dvisvgm. +The latter are the PDF pendants to the HTML HyperTeX specials generated by the hyperref package in PDF mode. ++ +'pdf:pagesize' is similar to the 'papersize' special (see above) which specifies the size of the current +and all folowing pages. In order to actually apply the extents to the generated SVG files, +option *--bbox=papersize* must be given. ++ +'pdf:mapfile' and 'pdf:mapline' allow modifying the font map tree while processing the DVI file. +They are used by CTeX, for example. dvisvgm supports both, the dvips and dvipdfm font map format. For further +information on the command syntax and semantics, see the documentation of +\pdfmapfile+ in the +http://www.ctan.org/pkg/pdftex[pdfTeX user manual]. *ps*:: The famous DVI driver 'dvips' introduced its own set of specials in order to embed PostScript code into DVI files, @@ -671,21 +681,26 @@ by dvips. Since PostScript is a rather complex language, dvisvgm does not implement its own PostScript interpreter but relies on http://ghostscript.com[Ghostscript] instead. If the Ghostscript library was not linked to the dvisvgm binary, it is looked up and loaded dynamically during runtime. In this case, dvisvgm looks for -'libgs.so.X' on Unix-like systems (supported ABI versions: 7,8,9), and for 'gsdll32.dll' or 'gsdll64.dll' on -Windows. You can override the default file names with environment variable *LIBGS* or the command-line -option *--libgs*. The library must be reachable through the ld search path (\*nix) or the PATH environment -variable (Windows). Alternatively, the absolute file path can be specified. If the library cannot be found, -dvisvgm disables the processing of PostScript specials and prints a warning message. +'libgs.so.X' on Unix-like systems (supported ABI versions: 7,8,9), for 'libgs.X.dylib' on macOS, and for +'gsdll32.dll' or 'gsdll64.dll' on Windows. You can override the default file names with environment variable +*LIBGS* or the command-line option *--libgs*. The library must be reachable through the ld search path (\*nix) +or the PATH environment variable (Windows). Alternatively, the absolute file path can be specified. If the library +cannot be found, dvisvgm disables the processing of PostScript specials and prints a warning message. Use option *--list-specials* to check whether PostScript support is available, i.e. entry 'ps' is present. + The PostScript handler also recognizes and evaluates bounding box data generated by the http://www.ctan.org/pkg/preview[preview package] with option 'tightpage'. If such data is present in the DVI file -and if dvisvgm is called with option *--bbox=preview*, dvisvgm adapts the bounding box of the generated SVG file -accordingly, and prints a message showing the width, height, and depth of the box in TeX point units. Especially, -the depth value can be used to vertically align the SVG graphics with the baseline of surrounding text in HTML or -XSL-FO documents, for example. If you call dvisvgm with option *--bbox=min* (the default), the tight bounding box -computed while processing the page is applied and not the one provided by the preview package. Thus, the height, -depth and width values written to the console are adapted accordingly. +and if dvisvgm is called with option *--bbox=preview*, dvisvgm sets the width and total height of the SVG file to +the values derived from the preview data. Additionally, it prints a message showing the width, height, +and depth of the box in TeX point units to the console. Especially, the depth value can be read by a post-processor +to vertically align the SVG graphics with the baseline of surrounding text in HTML or XSL-FO documents, for example. +Please note that SVG bounding boxes are defined by a width and (total) height. In contrast to TeX, SVG provides +no means to differentiate between height and depth, i.e. the vertical extents above and below the baseline, +respectively. Therefore, it is generally not possible to retrieve the depth value from the SVG file itself. ++ +If you call dvisvgm with option *--bbox=min* (the default) and preview data is present in the DVI file, dvisvgm +doesn't apply the preview extents but computes a bounding box that tightly encloses the page contents. The height, +depth and width values written to console are adapted accordingly. *tpic*:: The TPIC special set defines instructions for drawing simple geometric objects. Some LaTeX packages, like @@ -792,7 +807,7 @@ Written by {author} <{email}> Copying ------- -Copyright (C) 2005-2017 Martin Gieseking. Free use of this software is +Copyright (C) 2005-2018 Martin Gieseking. Free use of this software is granted under the terms of the GNU General Public License (GPL) version 3 or, (at your option) any later version. diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-db-refentry.xsl b/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-db-refentry.xsl new file mode 100644 index 00000000000..33090c0d74f --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-db-refentry.xsl @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<!-- This file is part of dvisvgm --> +<!-- Copyright (C) 2015-2018 Martin Gieseking <martin.gieseking@uos.de> --> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:date="http://exslt.org/dates-and-times" + extension-element-prefixes="date"> + + <xsl:output doctype-public="-//OASIS//DTD DocBook XML V4.5//EN" doctype-system="http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"/> + + <!-- add date to refmeta element --> + <xsl:template match="refmeta"> + <xsl:copy> + <xsl:copy-of select="*"/> + <xsl:variable name="date" select="date:date()"/> + <xsl:if test="$date"> + <refmiscinfo class="date"> + <xsl:value-of select="substring($date, 1, 10)"/> + </refmiscinfo> + </xsl:if> + </xsl:copy> + </xsl:template> + + <!-- copy everything else unchanged --> + <xsl:template match="@*|node()"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + </xsl:copy> + </xsl:template> +</xsl:stylesheet> diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-dblatex-pdf.xsl b/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-dblatex-pdf.xsl index 33010feae6c..2e85b2c94f3 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-dblatex-pdf.xsl +++ b/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-dblatex-pdf.xsl @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- This file is part of dvisvgm --> -<!-- Copyright (C) 2015-2017 Martin Gieseking <martin.gieseking@uos.de> --> +<!-- Copyright (C) 2015-2018 Martin Gieseking <martin.gieseking@uos.de> --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output doctype-public="-//OASIS//DTD DocBook XML V4.5//EN" doctype-system="http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"/> diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.am index 52d81d8b1cc..4a83b99a890 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.am +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.am @@ -1,10 +1,10 @@ ## This file is part of dvisvgm -## Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> +## Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ## ## Process this file with automake. -SUBDIRS = clipper xxHash +SUBDIRS = clipper variant xxHash if ENABLE_WOFF -SUBDIRS += ff-woff woff2 +SUBDIRS += brotli ff-woff woff2 endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.in index c4a40ef40a5..1074d8a0eb7 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.in @@ -87,7 +87,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -@ENABLE_WOFF_TRUE@am__append_1 = ff-woff woff2 +@ENABLE_WOFF_TRUE@am__append_1 = brotli ff-woff woff2 subdir = dvisvgm-src/libs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \ @@ -166,7 +166,7 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags -DIST_SUBDIRS = clipper xxHash ff-woff woff2 +DIST_SUBDIRS = clipper variant xxHash brotli ff-woff woff2 am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ @@ -338,7 +338,7 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -SUBDIRS = clipper xxHash $(am__append_1) +SUBDIRS = clipper variant xxHash $(am__append_1) all: all-recursive .SUFFIXES: diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/LICENSE b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/LICENSE index 6298a5dc97b..33b7cdd2dba 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/LICENSE +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009, 2010, 2013-2015 by the Brotli Authors. +Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.am new file mode 100644 index 00000000000..92f337d7edf --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.am @@ -0,0 +1,75 @@ +noinst_LIBRARIES = libbrotli.a +libbrotli_a_SOURCES = \ + common/constants.h \ + common/dictionary.c \ + common/dictionary.h \ + common/version.h \ + enc/backward_references.c \ + enc/backward_references.h \ + enc/backward_references_hq.c \ + enc/backward_references_hq.h \ + enc/backward_references_inc.h \ + enc/bit_cost.c \ + enc/bit_cost.h \ + enc/bit_cost_inc.h \ + enc/block_encoder_inc.h \ + enc/block_splitter.c \ + enc/block_splitter.h \ + enc/block_splitter_inc.h \ + enc/brotli_bit_stream.c \ + enc/brotli_bit_stream.h \ + enc/cluster.c \ + enc/cluster.h \ + enc/cluster_inc.h \ + enc/command.h \ + enc/compress_fragment.c \ + enc/compress_fragment.h \ + enc/compress_fragment_two_pass.c \ + enc/compress_fragment_two_pass.h \ + enc/context.h \ + enc/dictionary_hash.c \ + enc/dictionary_hash.h \ + enc/encode.c \ + enc/entropy_encode.c \ + enc/entropy_encode.h \ + enc/entropy_encode_static.h \ + enc/fast_log.h \ + enc/find_match_length.h \ + enc/hash_forgetful_chain_inc.h \ + enc/hash.h \ + enc/hash_longest_match64_inc.h \ + enc/hash_longest_match_inc.h \ + enc/hash_longest_match_quickly_inc.h \ + enc/hash_to_binary_tree_inc.h \ + enc/histogram.c \ + enc/histogram.h \ + enc/histogram_inc.h \ + enc/literal_cost.c \ + enc/literal_cost.h \ + enc/memory.c \ + enc/memory.h \ + enc/metablock.c \ + enc/metablock.h \ + enc/metablock_inc.h \ + enc/port.h \ + enc/prefix.h \ + enc/quality.h \ + enc/ringbuffer.h \ + enc/static_dict.c \ + enc/static_dict.h \ + enc/static_dict_lut.h \ + enc/utf8_util.c \ + enc/utf8_util.h \ + enc/write_bits.h \ + include/brotli/decode.h \ + include/brotli/encode.h \ + include/brotli/port.h \ + include/brotli/types.h + +EXTRA_DIST = LICENSE + +AM_CFLAGS = -Wall -I$(srcdir)/include + +@CODE_COVERAGE_RULES@ + +CLEANFILES = *.gcda *.gcno diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.in index 8315a5af294..14ac6274d5e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.in @@ -88,7 +88,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -subdir = dvisvgm-src/libs/woff2/brotli +subdir = dvisvgm-src/libs/brotli ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/../../m4/kpse-common.m4 \ @@ -121,15 +121,17 @@ am__v_AR_1 = libbrotli_a_AR = $(AR) $(ARFLAGS) libbrotli_a_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp -am_libbrotli_a_OBJECTS = enc/backward_references.$(OBJEXT) \ +am_libbrotli_a_OBJECTS = common/dictionary.$(OBJEXT) \ + enc/backward_references.$(OBJEXT) \ + enc/backward_references_hq.$(OBJEXT) enc/bit_cost.$(OBJEXT) \ enc/block_splitter.$(OBJEXT) enc/brotli_bit_stream.$(OBJEXT) \ - enc/compress_fragment.$(OBJEXT) \ + enc/cluster.$(OBJEXT) enc/compress_fragment.$(OBJEXT) \ enc/compress_fragment_two_pass.$(OBJEXT) \ - enc/dictionary.$(OBJEXT) enc/encode.$(OBJEXT) \ - enc/encode_parallel.$(OBJEXT) enc/entropy_encode.$(OBJEXT) \ - enc/histogram.$(OBJEXT) enc/literal_cost.$(OBJEXT) \ + enc/dictionary_hash.$(OBJEXT) enc/encode.$(OBJEXT) \ + enc/entropy_encode.$(OBJEXT) enc/histogram.$(OBJEXT) \ + enc/literal_cost.$(OBJEXT) enc/memory.$(OBJEXT) \ enc/metablock.$(OBJEXT) enc/static_dict.$(OBJEXT) \ - enc/streams.$(OBJEXT) enc/utf8_util.$(OBJEXT) + enc/utf8_util.$(OBJEXT) libbrotli_a_OBJECTS = $(am_libbrotli_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) @@ -147,29 +149,12 @@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/../../build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = -LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -AM_V_CXX = $(am__v_CXX_@AM_V@) -am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) -am__v_CXX_0 = @echo " CXX " $@; -am__v_CXX_1 = -CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) -am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) -am__v_CXXLD_0 = @echo " CXXLD " $@; -am__v_CXXLD_1 = -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ @@ -361,61 +346,79 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libbrotli.a libbrotli_a_SOURCES = \ - enc/backward_references.cc \ + common/constants.h \ + common/dictionary.c \ + common/dictionary.h \ + common/version.h \ + enc/backward_references.c \ enc/backward_references.h \ + enc/backward_references_hq.c \ + enc/backward_references_hq.h \ + enc/backward_references_inc.h \ + enc/bit_cost.c \ enc/bit_cost.h \ - enc/block_splitter.cc \ + enc/bit_cost_inc.h \ + enc/block_encoder_inc.h \ + enc/block_splitter.c \ enc/block_splitter.h \ - enc/brotli_bit_stream.cc \ + enc/block_splitter_inc.h \ + enc/brotli_bit_stream.c \ enc/brotli_bit_stream.h \ + enc/cluster.c \ enc/cluster.h \ + enc/cluster_inc.h \ enc/command.h \ - enc/compress_fragment.cc \ + enc/compress_fragment.c \ enc/compress_fragment.h \ - enc/compress_fragment_two_pass.cc \ + enc/compress_fragment_two_pass.c \ enc/compress_fragment_two_pass.h \ - enc/compressor.h \ enc/context.h \ - enc/dictionary.cc \ - enc/dictionary.h \ + enc/dictionary_hash.c \ enc/dictionary_hash.h \ - enc/encode.cc \ - enc/encode.h \ - enc/encode_parallel.cc \ - enc/encode_parallel.h \ - enc/entropy_encode.cc \ + enc/encode.c \ + enc/entropy_encode.c \ enc/entropy_encode.h \ enc/entropy_encode_static.h \ enc/fast_log.h \ enc/find_match_length.h \ + enc/hash_forgetful_chain_inc.h \ enc/hash.h \ - enc/histogram.cc \ + enc/hash_longest_match64_inc.h \ + enc/hash_longest_match_inc.h \ + enc/hash_longest_match_quickly_inc.h \ + enc/hash_to_binary_tree_inc.h \ + enc/histogram.c \ enc/histogram.h \ - enc/literal_cost.cc \ + enc/histogram_inc.h \ + enc/literal_cost.c \ enc/literal_cost.h \ - enc/metablock.cc \ + enc/memory.c \ + enc/memory.h \ + enc/metablock.c \ enc/metablock.h \ + enc/metablock_inc.h \ enc/port.h \ enc/prefix.h \ + enc/quality.h \ enc/ringbuffer.h \ - enc/static_dict.cc \ + enc/static_dict.c \ enc/static_dict.h \ enc/static_dict_lut.h \ - enc/streams.cc \ - enc/streams.h \ - enc/transform.h \ - enc/types.h \ - enc/utf8_util.cc \ + enc/utf8_util.c \ enc/utf8_util.h \ - enc/write_bits.h + enc/write_bits.h \ + include/brotli/decode.h \ + include/brotli/encode.h \ + include/brotli/port.h \ + include/brotli/types.h EXTRA_DIST = LICENSE -AM_CXXFLAGS = -Wall +AM_CFLAGS = -Wall -I$(srcdir)/include CLEANFILES = *.gcda *.gcno all: all-am .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj +.SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -425,9 +428,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign dvisvgm-src/libs/woff2/brotli/Makefile'; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign dvisvgm-src/libs/brotli/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign dvisvgm-src/libs/woff2/brotli/Makefile + $(AUTOMAKE) --foreign dvisvgm-src/libs/brotli/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -448,6 +451,14 @@ $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +common/$(am__dirstamp): + @$(MKDIR_P) common + @: > common/$(am__dirstamp) +common/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) common/$(DEPDIR) + @: > common/$(DEPDIR)/$(am__dirstamp) +common/dictionary.$(OBJEXT): common/$(am__dirstamp) \ + common/$(DEPDIR)/$(am__dirstamp) enc/$(am__dirstamp): @$(MKDIR_P) enc @: > enc/$(am__dirstamp) @@ -456,32 +467,36 @@ enc/$(DEPDIR)/$(am__dirstamp): @: > enc/$(DEPDIR)/$(am__dirstamp) enc/backward_references.$(OBJEXT): enc/$(am__dirstamp) \ enc/$(DEPDIR)/$(am__dirstamp) +enc/backward_references_hq.$(OBJEXT): enc/$(am__dirstamp) \ + enc/$(DEPDIR)/$(am__dirstamp) +enc/bit_cost.$(OBJEXT): enc/$(am__dirstamp) \ + enc/$(DEPDIR)/$(am__dirstamp) enc/block_splitter.$(OBJEXT): enc/$(am__dirstamp) \ enc/$(DEPDIR)/$(am__dirstamp) enc/brotli_bit_stream.$(OBJEXT): enc/$(am__dirstamp) \ enc/$(DEPDIR)/$(am__dirstamp) +enc/cluster.$(OBJEXT): enc/$(am__dirstamp) \ + enc/$(DEPDIR)/$(am__dirstamp) enc/compress_fragment.$(OBJEXT): enc/$(am__dirstamp) \ enc/$(DEPDIR)/$(am__dirstamp) enc/compress_fragment_two_pass.$(OBJEXT): enc/$(am__dirstamp) \ enc/$(DEPDIR)/$(am__dirstamp) -enc/dictionary.$(OBJEXT): enc/$(am__dirstamp) \ +enc/dictionary_hash.$(OBJEXT): enc/$(am__dirstamp) \ enc/$(DEPDIR)/$(am__dirstamp) enc/encode.$(OBJEXT): enc/$(am__dirstamp) \ enc/$(DEPDIR)/$(am__dirstamp) -enc/encode_parallel.$(OBJEXT): enc/$(am__dirstamp) \ - enc/$(DEPDIR)/$(am__dirstamp) enc/entropy_encode.$(OBJEXT): enc/$(am__dirstamp) \ enc/$(DEPDIR)/$(am__dirstamp) enc/histogram.$(OBJEXT): enc/$(am__dirstamp) \ enc/$(DEPDIR)/$(am__dirstamp) enc/literal_cost.$(OBJEXT): enc/$(am__dirstamp) \ enc/$(DEPDIR)/$(am__dirstamp) +enc/memory.$(OBJEXT): enc/$(am__dirstamp) \ + enc/$(DEPDIR)/$(am__dirstamp) enc/metablock.$(OBJEXT): enc/$(am__dirstamp) \ enc/$(DEPDIR)/$(am__dirstamp) enc/static_dict.$(OBJEXT): enc/$(am__dirstamp) \ enc/$(DEPDIR)/$(am__dirstamp) -enc/streams.$(OBJEXT): enc/$(am__dirstamp) \ - enc/$(DEPDIR)/$(am__dirstamp) enc/utf8_util.$(OBJEXT): enc/$(am__dirstamp) \ enc/$(DEPDIR)/$(am__dirstamp) @@ -492,50 +507,54 @@ libbrotli.a: $(libbrotli_a_OBJECTS) $(libbrotli_a_DEPENDENCIES) $(EXTRA_libbrotl mostlyclean-compile: -rm -f *.$(OBJEXT) + -rm -f common/*.$(OBJEXT) -rm -f enc/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/dictionary.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/backward_references.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/backward_references_hq.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/bit_cost.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/block_splitter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/brotli_bit_stream.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/cluster.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/compress_fragment.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/compress_fragment_two_pass.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/dictionary.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/dictionary_hash.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/encode.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/encode_parallel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/entropy_encode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/histogram.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/literal_cost.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/memory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/metablock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/static_dict.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/streams.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/utf8_util.Po@am__quote@ -.cc.o: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo @@ -656,6 +675,8 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f common/$(DEPDIR)/$(am__dirstamp) + -rm -f common/$(am__dirstamp) -rm -f enc/$(DEPDIR)/$(am__dirstamp) -rm -f enc/$(am__dirstamp) @@ -668,7 +689,7 @@ clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ mostlyclean-am distclean: distclean-am - -rm -rf enc/$(DEPDIR) + -rm -rf common/$(DEPDIR) enc/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -714,7 +735,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf enc/$(DEPDIR) + -rm -rf common/$(DEPDIR) enc/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/common/constants.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/common/constants.h new file mode 100644 index 00000000000..416ec5596ee --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/common/constants.h @@ -0,0 +1,57 @@ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +#ifndef BROTLI_COMMON_CONSTANTS_H_ +#define BROTLI_COMMON_CONSTANTS_H_ + +/* Specification: 7.3. Encoding of the context map */ +#define BROTLI_CONTEXT_MAP_MAX_RLE 16 + +/* Specification: 2. Compressed representation overview */ +#define BROTLI_MAX_NUMBER_OF_BLOCK_TYPES 256 + +/* Specification: 3.3. Alphabet sizes: insert-and-copy length */ +#define BROTLI_NUM_LITERAL_SYMBOLS 256 +#define BROTLI_NUM_COMMAND_SYMBOLS 704 +#define BROTLI_NUM_BLOCK_LEN_SYMBOLS 26 +#define BROTLI_MAX_CONTEXT_MAP_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + \ + BROTLI_CONTEXT_MAP_MAX_RLE) +#define BROTLI_MAX_BLOCK_TYPE_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 2) + +/* Specification: 3.5. Complex prefix codes */ +#define BROTLI_REPEAT_PREVIOUS_CODE_LENGTH 16 +#define BROTLI_REPEAT_ZERO_CODE_LENGTH 17 +#define BROTLI_CODE_LENGTH_CODES (BROTLI_REPEAT_ZERO_CODE_LENGTH + 1) +/* "code length of 8 is repeated" */ +#define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8 + +/* Specification: 4. Encoding of distances */ +#define BROTLI_NUM_DISTANCE_SHORT_CODES 16 +#define BROTLI_MAX_NPOSTFIX 3 +#define BROTLI_MAX_NDIRECT 120 +#define BROTLI_MAX_DISTANCE_BITS 24U +/* BROTLI_NUM_DISTANCE_SYMBOLS == 520 */ +#define BROTLI_NUM_DISTANCE_SYMBOLS (BROTLI_NUM_DISTANCE_SHORT_CODES + \ + BROTLI_MAX_NDIRECT + \ + (BROTLI_MAX_DISTANCE_BITS << \ + (BROTLI_MAX_NPOSTFIX + 1))) +/* Distance that is guaranteed to be representable in any stream. */ +#define BROTLI_MAX_DISTANCE 0x3FFFFFC + +/* 7.1. Context modes and context ID lookup for literals */ +/* "context IDs for literals are in the range of 0..63" */ +#define BROTLI_LITERAL_CONTEXT_BITS 6 + +/* 7.2. Context ID for distances */ +#define BROTLI_DISTANCE_CONTEXT_BITS 2 + +/* 9.1. Format of the Stream Header */ +/* Number of slack bytes for window size. Don't confuse + with BROTLI_NUM_DISTANCE_SHORT_CODES. */ +#define BROTLI_WINDOW_GAP 16 +#define BROTLI_MAX_BACKWARD_LIMIT(W) (((size_t)1 << (W)) - BROTLI_WINDOW_GAP) + +#endif /* BROTLI_COMMON_CONSTANTS_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/common/dictionary.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/common/dictionary.c new file mode 100644 index 00000000000..d0872bdd8c9 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/common/dictionary.c @@ -0,0 +1,5905 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +#include "./dictionary.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#ifndef BROTLI_EXTERNAL_DICTIONARY_DATA +static const uint8_t kBrotliDictionaryData[] = +{ +116,105,109,101,100,111,119,110,108,105,102,101,108,101,102,116,98,97,99,107,99, +111,100,101,100,97,116,97,115,104,111,119,111,110,108,121,115,105,116,101,99,105 +,116,121,111,112,101,110,106,117,115,116,108,105,107,101,102,114,101,101,119,111 +,114,107,116,101,120,116,121,101,97,114,111,118,101,114,98,111,100,121,108,111, +118,101,102,111,114,109,98,111,111,107,112,108,97,121,108,105,118,101,108,105, +110,101,104,101,108,112,104,111,109,101,115,105,100,101,109,111,114,101,119,111, +114,100,108,111,110,103,116,104,101,109,118,105,101,119,102,105,110,100,112,97, +103,101,100,97,121,115,102,117,108,108,104,101,97,100,116,101,114,109,101,97,99, +104,97,114,101,97,102,114,111,109,116,114,117,101,109,97,114,107,97,98,108,101, +117,112,111,110,104,105,103,104,100,97,116,101,108,97,110,100,110,101,119,115, +101,118,101,110,110,101,120,116,99,97,115,101,98,111,116,104,112,111,115,116,117 +,115,101,100,109,97,100,101,104,97,110,100,104,101,114,101,119,104,97,116,110,97 +,109,101,76,105,110,107,98,108,111,103,115,105,122,101,98,97,115,101,104,101,108 +,100,109,97,107,101,109,97,105,110,117,115,101,114,39,41,32,43,104,111,108,100, +101,110,100,115,119,105,116,104,78,101,119,115,114,101,97,100,119,101,114,101, +115,105,103,110,116,97,107,101,104,97,118,101,103,97,109,101,115,101,101,110,99, +97,108,108,112,97,116,104,119,101,108,108,112,108,117,115,109,101,110,117,102, +105,108,109,112,97,114,116,106,111,105,110,116,104,105,115,108,105,115,116,103, +111,111,100,110,101,101,100,119,97,121,115,119,101,115,116,106,111,98,115,109, +105,110,100,97,108,115,111,108,111,103,111,114,105,99,104,117,115,101,115,108,97 +,115,116,116,101,97,109,97,114,109,121,102,111,111,100,107,105,110,103,119,105, +108,108,101,97,115,116,119,97,114,100,98,101,115,116,102,105,114,101,80,97,103, +101,107,110,111,119,97,119,97,121,46,112,110,103,109,111,118,101,116,104,97,110, +108,111,97,100,103,105,118,101,115,101,108,102,110,111,116,101,109,117,99,104, +102,101,101,100,109,97,110,121,114,111,99,107,105,99,111,110,111,110,99,101,108, +111,111,107,104,105,100,101,100,105,101,100,72,111,109,101,114,117,108,101,104, +111,115,116,97,106,97,120,105,110,102,111,99,108,117,98,108,97,119,115,108,101, +115,115,104,97,108,102,115,111,109,101,115,117,99,104,122,111,110,101,49,48,48, +37,111,110,101,115,99,97,114,101,84,105,109,101,114,97,99,101,98,108,117,101,102 +,111,117,114,119,101,101,107,102,97,99,101,104,111,112,101,103,97,118,101,104,97 +,114,100,108,111,115,116,119,104,101,110,112,97,114,107,107,101,112,116,112,97, +115,115,115,104,105,112,114,111,111,109,72,84,77,76,112,108,97,110,84,121,112, +101,100,111,110,101,115,97,118,101,107,101,101,112,102,108,97,103,108,105,110, +107,115,111,108,100,102,105,118,101,116,111,111,107,114,97,116,101,116,111,119, +110,106,117,109,112,116,104,117,115,100,97,114,107,99,97,114,100,102,105,108,101 +,102,101,97,114,115,116,97,121,107,105,108,108,116,104,97,116,102,97,108,108,97, +117,116,111,101,118,101,114,46,99,111,109,116,97,108,107,115,104,111,112,118,111 +,116,101,100,101,101,112,109,111,100,101,114,101,115,116,116,117,114,110,98,111, +114,110,98,97,110,100,102,101,108,108,114,111,115,101,117,114,108,40,115,107,105 +,110,114,111,108,101,99,111,109,101,97,99,116,115,97,103,101,115,109,101,101,116 +,103,111,108,100,46,106,112,103,105,116,101,109,118,97,114,121,102,101,108,116, +116,104,101,110,115,101,110,100,100,114,111,112,86,105,101,119,99,111,112,121,49 +,46,48,34,60,47,97,62,115,116,111,112,101,108,115,101,108,105,101,115,116,111, +117,114,112,97,99,107,46,103,105,102,112,97,115,116,99,115,115,63,103,114,97,121 +,109,101,97,110,38,103,116,59,114,105,100,101,115,104,111,116,108,97,116,101,115 +,97,105,100,114,111,97,100,118,97,114,32,102,101,101,108,106,111,104,110,114,105 +,99,107,112,111,114,116,102,97,115,116,39,85,65,45,100,101,97,100,60,47,98,62, +112,111,111,114,98,105,108,108,116,121,112,101,85,46,83,46,119,111,111,100,109, +117,115,116,50,112,120,59,73,110,102,111,114,97,110,107,119,105,100,101,119,97, +110,116,119,97,108,108,108,101,97,100,91,48,93,59,112,97,117,108,119,97,118,101, +115,117,114,101,36,40,39,35,119,97,105,116,109,97,115,115,97,114,109,115,103,111 +,101,115,103,97,105,110,108,97,110,103,112,97,105,100,33,45,45,32,108,111,99,107 +,117,110,105,116,114,111,111,116,119,97,108,107,102,105,114,109,119,105,102,101, +120,109,108,34,115,111,110,103,116,101,115,116,50,48,112,120,107,105,110,100,114 +,111,119,115,116,111,111,108,102,111,110,116,109,97,105,108,115,97,102,101,115, +116,97,114,109,97,112,115,99,111,114,101,114,97,105,110,102,108,111,119,98,97,98 +,121,115,112,97,110,115,97,121,115,52,112,120,59,54,112,120,59,97,114,116,115, +102,111,111,116,114,101,97,108,119,105,107,105,104,101,97,116,115,116,101,112, +116,114,105,112,111,114,103,47,108,97,107,101,119,101,97,107,116,111,108,100,70, +111,114,109,99,97,115,116,102,97,110,115,98,97,110,107,118,101,114,121,114,117, +110,115,106,117,108,121,116,97,115,107,49,112,120,59,103,111,97,108,103,114,101, +119,115,108,111,119,101,100,103,101,105,100,61,34,115,101,116,115,53,112,120,59, +46,106,115,63,52,48,112,120,105,102,32,40,115,111,111,110,115,101,97,116,110,111 +,110,101,116,117,98,101,122,101,114,111,115,101,110,116,114,101,101,100,102,97, +99,116,105,110,116,111,103,105,102,116,104,97,114,109,49,56,112,120,99,97,109, +101,104,105,108,108,98,111,108,100,122,111,111,109,118,111,105,100,101,97,115, +121,114,105,110,103,102,105,108,108,112,101,97,107,105,110,105,116,99,111,115, +116,51,112,120,59,106,97,99,107,116,97,103,115,98,105,116,115,114,111,108,108, +101,100,105,116,107,110,101,119,110,101,97,114,60,33,45,45,103,114,111,119,74,83 +,79,78,100,117,116,121,78,97,109,101,115,97,108,101,121,111,117,32,108,111,116, +115,112,97,105,110,106,97,122,122,99,111,108,100,101,121,101,115,102,105,115,104 +,119,119,119,46,114,105,115,107,116,97,98,115,112,114,101,118,49,48,112,120,114, +105,115,101,50,53,112,120,66,108,117,101,100,105,110,103,51,48,48,44,98,97,108, +108,102,111,114,100,101,97,114,110,119,105,108,100,98,111,120,46,102,97,105,114, +108,97,99,107,118,101,114,115,112,97,105,114,106,117,110,101,116,101,99,104,105, +102,40,33,112,105,99,107,101,118,105,108,36,40,34,35,119,97,114,109,108,111,114, +100,100,111,101,115,112,117,108,108,44,48,48,48,105,100,101,97,100,114,97,119, +104,117,103,101,115,112,111,116,102,117,110,100,98,117,114,110,104,114,101,102, +99,101,108,108,107,101,121,115,116,105,99,107,104,111,117,114,108,111,115,115, +102,117,101,108,49,50,112,120,115,117,105,116,100,101,97,108,82,83,83,34,97,103, +101,100,103,114,101,121,71,69,84,34,101,97,115,101,97,105,109,115,103,105,114, +108,97,105,100,115,56,112,120,59,110,97,118,121,103,114,105,100,116,105,112,115, +35,57,57,57,119,97,114,115,108,97,100,121,99,97,114,115,41,59,32,125,112,104,112 +,63,104,101,108,108,116,97,108,108,119,104,111,109,122,104,58,229,42,47,13,10,32 +,49,48,48,104,97,108,108,46,10,10,65,55,112,120,59,112,117,115,104,99,104,97,116 +,48,112,120,59,99,114,101,119,42,47,60,47,104,97,115,104,55,53,112,120,102,108, +97,116,114,97,114,101,32,38,38,32,116,101,108,108,99,97,109,112,111,110,116,111, +108,97,105,100,109,105,115,115,115,107,105,112,116,101,110,116,102,105,110,101, +109,97,108,101,103,101,116,115,112,108,111,116,52,48,48,44,13,10,13,10,99,111, +111,108,102,101,101,116,46,112,104,112,60,98,114,62,101,114,105,99,109,111,115, +116,103,117,105,100,98,101,108,108,100,101,115,99,104,97,105,114,109,97,116,104, +97,116,111,109,47,105,109,103,38,35,56,50,108,117,99,107,99,101,110,116,48,48,48 +,59,116,105,110,121,103,111,110,101,104,116,109,108,115,101,108,108,100,114,117, +103,70,82,69,69,110,111,100,101,110,105,99,107,63,105,100,61,108,111,115,101,110 +,117,108,108,118,97,115,116,119,105,110,100,82,83,83,32,119,101,97,114,114,101, +108,121,98,101,101,110,115,97,109,101,100,117,107,101,110,97,115,97,99,97,112, +101,119,105,115,104,103,117,108,102,84,50,51,58,104,105,116,115,115,108,111,116, +103,97,116,101,107,105,99,107,98,108,117,114,116,104,101,121,49,53,112,120,39,39 +,41,59,41,59,34,62,109,115,105,101,119,105,110,115,98,105,114,100,115,111,114, +116,98,101,116,97,115,101,101,107,84,49,56,58,111,114,100,115,116,114,101,101, +109,97,108,108,54,48,112,120,102,97,114,109,226,128,153,115,98,111,121,115,91,48 +,93,46,39,41,59,34,80,79,83,84,98,101,97,114,107,105,100,115,41,59,125,125,109, +97,114,121,116,101,110,100,40,85,75,41,113,117,97,100,122,104,58,230,45,115,105, +122,45,45,45,45,112,114,111,112,39,41,59,13,108,105,102,116,84,49,57,58,118,105, +99,101,97,110,100,121,100,101,98,116,62,82,83,83,112,111,111,108,110,101,99,107, +98,108,111,119,84,49,54,58,100,111,111,114,101,118,97,108,84,49,55,58,108,101, +116,115,102,97,105,108,111,114,97,108,112,111,108,108,110,111,118,97,99,111,108, +115,103,101,110,101,32,226,128,148,115,111,102,116,114,111,109,101,116,105,108, +108,114,111,115,115,60,104,51,62,112,111,117,114,102,97,100,101,112,105,110,107, +60,116,114,62,109,105,110,105,41,124,33,40,109,105,110,101,122,104,58,232,98,97, +114,115,104,101,97,114,48,48,41,59,109,105,108,107,32,45,45,62,105,114,111,110, +102,114,101,100,100,105,115,107,119,101,110,116,115,111,105,108,112,117,116,115, +47,106,115,47,104,111,108,121,84,50,50,58,73,83,66,78,84,50,48,58,97,100,97,109, +115,101,101,115,60,104,50,62,106,115,111,110,39,44,32,39,99,111,110,116,84,50,49 +,58,32,82,83,83,108,111,111,112,97,115,105,97,109,111,111,110,60,47,112,62,115, +111,117,108,76,73,78,69,102,111,114,116,99,97,114,116,84,49,52,58,60,104,49,62, +56,48,112,120,33,45,45,60,57,112,120,59,84,48,52,58,109,105,107,101,58,52,54,90, +110,105,99,101,105,110,99,104,89,111,114,107,114,105,99,101,122,104,58,228,39,41 +,41,59,112,117,114,101,109,97,103,101,112,97,114,97,116,111,110,101,98,111,110, +100,58,51,55,90,95,111,102,95,39,93,41,59,48,48,48,44,122,104,58,231,116,97,110, +107,121,97,114,100,98,111,119,108,98,117,115,104,58,53,54,90,74,97,118,97,51,48, +112,120,10,124,125,10,37,67,51,37,58,51,52,90,106,101,102,102,69,88,80,73,99,97, +115,104,118,105,115,97,103,111,108,102,115,110,111,119,122,104,58,233,113,117, +101,114,46,99,115,115,115,105,99,107,109,101,97,116,109,105,110,46,98,105,110, +100,100,101,108,108,104,105,114,101,112,105,99,115,114,101,110,116,58,51,54,90, +72,84,84,80,45,50,48,49,102,111,116,111,119,111,108,102,69,78,68,32,120,98,111, +120,58,53,52,90,66,79,68,89,100,105,99,107,59,10,125,10,101,120,105,116,58,51,53 +,90,118,97,114,115,98,101,97,116,39,125,41,59,100,105,101,116,57,57,57,59,97,110 +,110,101,125,125,60,47,91,105,93,46,76,97,110,103,107,109,194,178,119,105,114, +101,116,111,121,115,97,100,100,115,115,101,97,108,97,108,101,120,59,10,9,125,101 +,99,104,111,110,105,110,101,46,111,114,103,48,48,53,41,116,111,110,121,106,101, +119,115,115,97,110,100,108,101,103,115,114,111,111,102,48,48,48,41,32,50,48,48, +119,105,110,101,103,101,97,114,100,111,103,115,98,111,111,116,103,97,114,121,99, +117,116,115,116,121,108,101,116,101,109,112,116,105,111,110,46,120,109,108,99, +111,99,107,103,97,110,103,36,40,39,46,53,48,112,120,80,104,46,68,109,105,115,99, +97,108,97,110,108,111,97,110,100,101,115,107,109,105,108,101,114,121,97,110,117, +110,105,120,100,105,115,99,41,59,125,10,100,117,115,116,99,108,105,112,41,46,10, +10,55,48,112,120,45,50,48,48,68,86,68,115,55,93,62,60,116,97,112,101,100,101,109 +,111,105,43,43,41,119,97,103,101,101,117,114,111,112,104,105,108,111,112,116,115 +,104,111,108,101,70,65,81,115,97,115,105,110,45,50,54,84,108,97,98,115,112,101, +116,115,85,82,76,32,98,117,108,107,99,111,111,107,59,125,13,10,72,69,65,68,91,48 +,93,41,97,98,98,114,106,117,97,110,40,49,57,56,108,101,115,104,116,119,105,110, +60,47,105,62,115,111,110,121,103,117,121,115,102,117,99,107,112,105,112,101,124, +45,10,33,48,48,50,41,110,100,111,119,91,49,93,59,91,93,59,10,76,111,103,32,115, +97,108,116,13,10,9,9,98,97,110,103,116,114,105,109,98,97,116,104,41,123,13,10,48 +,48,112,120,10,125,41,59,107,111,58,236,102,101,101,115,97,100,62,13,115,58,47, +47,32,91,93,59,116,111,108,108,112,108,117,103,40,41,123,10,123,13,10,32,46,106, +115,39,50,48,48,112,100,117,97,108,98,111,97,116,46,74,80,71,41,59,10,125,113, +117,111,116,41,59,10,10,39,41,59,10,13,10,125,13,50,48,49,52,50,48,49,53,50,48, +49,54,50,48,49,55,50,48,49,56,50,48,49,57,50,48,50,48,50,48,50,49,50,48,50,50,50 +,48,50,51,50,48,50,52,50,48,50,53,50,48,50,54,50,48,50,55,50,48,50,56,50,48,50, +57,50,48,51,48,50,48,51,49,50,48,51,50,50,48,51,51,50,48,51,52,50,48,51,53,50,48 +,51,54,50,48,51,55,50,48,49,51,50,48,49,50,50,48,49,49,50,48,49,48,50,48,48,57, +50,48,48,56,50,48,48,55,50,48,48,54,50,48,48,53,50,48,48,52,50,48,48,51,50,48,48 +,50,50,48,48,49,50,48,48,48,49,57,57,57,49,57,57,56,49,57,57,55,49,57,57,54,49, +57,57,53,49,57,57,52,49,57,57,51,49,57,57,50,49,57,57,49,49,57,57,48,49,57,56,57 +,49,57,56,56,49,57,56,55,49,57,56,54,49,57,56,53,49,57,56,52,49,57,56,51,49,57, +56,50,49,57,56,49,49,57,56,48,49,57,55,57,49,57,55,56,49,57,55,55,49,57,55,54,49 +,57,55,53,49,57,55,52,49,57,55,51,49,57,55,50,49,57,55,49,49,57,55,48,49,57,54, +57,49,57,54,56,49,57,54,55,49,57,54,54,49,57,54,53,49,57,54,52,49,57,54,51,49,57 +,54,50,49,57,54,49,49,57,54,48,49,57,53,57,49,57,53,56,49,57,53,55,49,57,53,54, +49,57,53,53,49,57,53,52,49,57,53,51,49,57,53,50,49,57,53,49,49,57,53,48,49,48,48 +,48,49,48,50,52,49,51,57,52,48,48,48,48,57,57,57,57,99,111,109,111,109,195,161, +115,101,115,116,101,101,115,116,97,112,101,114,111,116,111,100,111,104,97,99,101 +,99,97,100,97,97,195,177,111,98,105,101,110,100,195,173,97,97,115,195,173,118, +105,100,97,99,97,115,111,111,116,114,111,102,111,114,111,115,111,108,111,111,116 +,114,97,99,117,97,108,100,105,106,111,115,105,100,111,103,114,97,110,116,105,112 +,111,116,101,109,97,100,101,98,101,97,108,103,111,113,117,195,169,101,115,116, +111,110,97,100,97,116,114,101,115,112,111,99,111,99,97,115,97,98,97,106,111,116, +111,100,97,115,105,110,111,97,103,117,97,112,117,101,115,117,110,111,115,97,110, +116,101,100,105,99,101,108,117,105,115,101,108,108,97,109,97,121,111,122,111,110 +,97,97,109,111,114,112,105,115,111,111,98,114,97,99,108,105,99,101,108,108,111, +100,105,111,115,104,111,114,97,99,97,115,105,208,183,208,176,208,189,208,176,208 +,190,208,188,209,128,208,176,209,128,209,131,209,130,208,176,208,189,208,181,208 +,191,208,190,208,190,209,130,208,184,208,183,208,189,208,190,208,180,208,190,209 +,130,208,190,208,182,208,181,208,190,208,189,208,184,209,133,208,157,208,176,208 +,181,208,181,208,177,209,139,208,188,209,139,208,146,209,139,209,129,208,190,208 +,178,209,139,208,178,208,190,208,157,208,190,208,190,208,177,208,159,208,190,208 +,187,208,184,208,189,208,184,208,160,208,164,208,157,208,181,208,156,209,139,209 +,130,209,139,208,158,208,189,208,184,208,188,208,180,208,176,208,151,208,176,208 +,148,208,176,208,157,209,131,208,158,208,177,209,130,208,181,208,152,208,183,208 +,181,208,185,208,189,209,131,208,188,208,188,208,162,209,139,209,131,208,182,217 +,129,217,138,216,163,217,134,217,133,216,167,217,133,216,185,217,131,217,132,216 +,163,217,136,216,177,216,175,217,138,216,167,217,129,217,137,217,135,217,136,217 +,132,217,133,217,132,217,131,216,167,217,136,217,132,217,135,216,168,216,179,216 +,167,217,132,216,165,217,134,217,135,217,138,216,163,217,138,217,130,216,175,217 +,135,217,132,216,171,217,133,216,168,217,135,217,132,217,136,217,132,217,138,216 +,168,217,132,216,167,217,138,216,168,217,131,216,180,217,138,216,167,217,133,216 +,163,217,133,217,134,216,170,216,168,217,138,217,132,217,134,216,173,216,168,217 +,135,217,133,217,133,216,180,217,136,216,180,102,105,114,115,116,118,105,100,101 +,111,108,105,103,104,116,119,111,114,108,100,109,101,100,105,97,119,104,105,116, +101,99,108,111,115,101,98,108,97,99,107,114,105,103,104,116,115,109,97,108,108, +98,111,111,107,115,112,108,97,99,101,109,117,115,105,99,102,105,101,108,100,111, +114,100,101,114,112,111,105,110,116,118,97,108,117,101,108,101,118,101,108,116, +97,98,108,101,98,111,97,114,100,104,111,117,115,101,103,114,111,117,112,119,111, +114,107,115,121,101,97,114,115,115,116,97,116,101,116,111,100,97,121,119,97,116, +101,114,115,116,97,114,116,115,116,121,108,101,100,101,97,116,104,112,111,119, +101,114,112,104,111,110,101,110,105,103,104,116,101,114,114,111,114,105,110,112, +117,116,97,98,111,117,116,116,101,114,109,115,116,105,116,108,101,116,111,111, +108,115,101,118,101,110,116,108,111,99,97,108,116,105,109,101,115,108,97,114,103 +,101,119,111,114,100,115,103,97,109,101,115,115,104,111,114,116,115,112,97,99, +101,102,111,99,117,115,99,108,101,97,114,109,111,100,101,108,98,108,111,99,107, +103,117,105,100,101,114,97,100,105,111,115,104,97,114,101,119,111,109,101,110,97 +,103,97,105,110,109,111,110,101,121,105,109,97,103,101,110,97,109,101,115,121, +111,117,110,103,108,105,110,101,115,108,97,116,101,114,99,111,108,111,114,103, +114,101,101,110,102,114,111,110,116,38,97,109,112,59,119,97,116,99,104,102,111, +114,99,101,112,114,105,99,101,114,117,108,101,115,98,101,103,105,110,97,102,116, +101,114,118,105,115,105,116,105,115,115,117,101,97,114,101,97,115,98,101,108,111 +,119,105,110,100,101,120,116,111,116,97,108,104,111,117,114,115,108,97,98,101, +108,112,114,105,110,116,112,114,101,115,115,98,117,105,108,116,108,105,110,107, +115,115,112,101,101,100,115,116,117,100,121,116,114,97,100,101,102,111,117,110, +100,115,101,110,115,101,117,110,100,101,114,115,104,111,119,110,102,111,114,109, +115,114,97,110,103,101,97,100,100,101,100,115,116,105,108,108,109,111,118,101, +100,116,97,107,101,110,97,98,111,118,101,102,108,97,115,104,102,105,120,101,100, +111,102,116,101,110,111,116,104,101,114,118,105,101,119,115,99,104,101,99,107, +108,101,103,97,108,114,105,118,101,114,105,116,101,109,115,113,117,105,99,107, +115,104,97,112,101,104,117,109,97,110,101,120,105,115,116,103,111,105,110,103, +109,111,118,105,101,116,104,105,114,100,98,97,115,105,99,112,101,97,99,101,115, +116,97,103,101,119,105,100,116,104,108,111,103,105,110,105,100,101,97,115,119, +114,111,116,101,112,97,103,101,115,117,115,101,114,115,100,114,105,118,101,115, +116,111,114,101,98,114,101,97,107,115,111,117,116,104,118,111,105,99,101,115,105 +,116,101,115,109,111,110,116,104,119,104,101,114,101,98,117,105,108,100,119,104, +105,99,104,101,97,114,116,104,102,111,114,117,109,116,104,114,101,101,115,112, +111,114,116,112,97,114,116,121,67,108,105,99,107,108,111,119,101,114,108,105,118 +,101,115,99,108,97,115,115,108,97,121,101,114,101,110,116,114,121,115,116,111, +114,121,117,115,97,103,101,115,111,117,110,100,99,111,117,114,116,121,111,117, +114,32,98,105,114,116,104,112,111,112,117,112,116,121,112,101,115,97,112,112,108 +,121,73,109,97,103,101,98,101,105,110,103,117,112,112,101,114,110,111,116,101, +115,101,118,101,114,121,115,104,111,119,115,109,101,97,110,115,101,120,116,114, +97,109,97,116,99,104,116,114,97,99,107,107,110,111,119,110,101,97,114,108,121,98 +,101,103,97,110,115,117,112,101,114,112,97,112,101,114,110,111,114,116,104,108, +101,97,114,110,103,105,118,101,110,110,97,109,101,100,101,110,100,101,100,84,101 +,114,109,115,112,97,114,116,115,71,114,111,117,112,98,114,97,110,100,117,115,105 +,110,103,119,111,109,97,110,102,97,108,115,101,114,101,97,100,121,97,117,100,105 +,111,116,97,107,101,115,119,104,105,108,101,46,99,111,109,47,108,105,118,101,100 +,99,97,115,101,115,100,97,105,108,121,99,104,105,108,100,103,114,101,97,116,106, +117,100,103,101,116,104,111,115,101,117,110,105,116,115,110,101,118,101,114,98, +114,111,97,100,99,111,97,115,116,99,111,118,101,114,97,112,112,108,101,102,105, +108,101,115,99,121,99,108,101,115,99,101,110,101,112,108,97,110,115,99,108,105, +99,107,119,114,105,116,101,113,117,101,101,110,112,105,101,99,101,101,109,97,105 +,108,102,114,97,109,101,111,108,100,101,114,112,104,111,116,111,108,105,109,105, +116,99,97,99,104,101,99,105,118,105,108,115,99,97,108,101,101,110,116,101,114, +116,104,101,109,101,116,104,101,114,101,116,111,117,99,104,98,111,117,110,100, +114,111,121,97,108,97,115,107,101,100,119,104,111,108,101,115,105,110,99,101,115 +,116,111,99,107,32,110,97,109,101,102,97,105,116,104,104,101,97,114,116,101,109, +112,116,121,111,102,102,101,114,115,99,111,112,101,111,119,110,101,100,109,105, +103,104,116,97,108,98,117,109,116,104,105,110,107,98,108,111,111,100,97,114,114, +97,121,109,97,106,111,114,116,114,117,115,116,99,97,110,111,110,117,110,105,111, +110,99,111,117,110,116,118,97,108,105,100,115,116,111,110,101,83,116,121,108,101 +,76,111,103,105,110,104,97,112,112,121,111,99,99,117,114,108,101,102,116,58,102, +114,101,115,104,113,117,105,116,101,102,105,108,109,115,103,114,97,100,101,110, +101,101,100,115,117,114,98,97,110,102,105,103,104,116,98,97,115,105,115,104,111, +118,101,114,97,117,116,111,59,114,111,117,116,101,46,104,116,109,108,109,105,120 +,101,100,102,105,110,97,108,89,111,117,114,32,115,108,105,100,101,116,111,112, +105,99,98,114,111,119,110,97,108,111,110,101,100,114,97,119,110,115,112,108,105, +116,114,101,97,99,104,82,105,103,104,116,100,97,116,101,115,109,97,114,99,104, +113,117,111,116,101,103,111,111,100,115,76,105,110,107,115,100,111,117,98,116,97 +,115,121,110,99,116,104,117,109,98,97,108,108,111,119,99,104,105,101,102,121,111 +,117,116,104,110,111,118,101,108,49,48,112,120,59,115,101,114,118,101,117,110, +116,105,108,104,97,110,100,115,67,104,101,99,107,83,112,97,99,101,113,117,101, +114,121,106,97,109,101,115,101,113,117,97,108,116,119,105,99,101,48,44,48,48,48, +83,116,97,114,116,112,97,110,101,108,115,111,110,103,115,114,111,117,110,100,101 +,105,103,104,116,115,104,105,102,116,119,111,114,116,104,112,111,115,116,115,108 +,101,97,100,115,119,101,101,107,115,97,118,111,105,100,116,104,101,115,101,109, +105,108,101,115,112,108,97,110,101,115,109,97,114,116,97,108,112,104,97,112,108, +97,110,116,109,97,114,107,115,114,97,116,101,115,112,108,97,121,115,99,108,97, +105,109,115,97,108,101,115,116,101,120,116,115,115,116,97,114,115,119,114,111, +110,103,60,47,104,51,62,116,104,105,110,103,46,111,114,103,47,109,117,108,116, +105,104,101,97,114,100,80,111,119,101,114,115,116,97,110,100,116,111,107,101,110 +,115,111,108,105,100,40,116,104,105,115,98,114,105,110,103,115,104,105,112,115, +115,116,97,102,102,116,114,105,101,100,99,97,108,108,115,102,117,108,108,121,102 +,97,99,116,115,97,103,101,110,116,84,104,105,115,32,47,47,45,45,62,97,100,109, +105,110,101,103,121,112,116,69,118,101,110,116,49,53,112,120,59,69,109,97,105, +108,116,114,117,101,34,99,114,111,115,115,115,112,101,110,116,98,108,111,103,115 +,98,111,120,34,62,110,111,116,101,100,108,101,97,118,101,99,104,105,110,97,115, +105,122,101,115,103,117,101,115,116,60,47,104,52,62,114,111,98,111,116,104,101, +97,118,121,116,114,117,101,44,115,101,118,101,110,103,114,97,110,100,99,114,105, +109,101,115,105,103,110,115,97,119,97,114,101,100,97,110,99,101,112,104,97,115, +101,62,60,33,45,45,101,110,95,85,83,38,35,51,57,59,50,48,48,112,120,95,110,97, +109,101,108,97,116,105,110,101,110,106,111,121,97,106,97,120,46,97,116,105,111, +110,115,109,105,116,104,85,46,83,46,32,104,111,108,100,115,112,101,116,101,114, +105,110,100,105,97,110,97,118,34,62,99,104,97,105,110,115,99,111,114,101,99,111, +109,101,115,100,111,105,110,103,112,114,105,111,114,83,104,97,114,101,49,57,57, +48,115,114,111,109,97,110,108,105,115,116,115,106,97,112,97,110,102,97,108,108, +115,116,114,105,97,108,111,119,110,101,114,97,103,114,101,101,60,47,104,50,62,97 +,98,117,115,101,97,108,101,114,116,111,112,101,114,97,34,45,47,47,87,99,97,114, +100,115,104,105,108,108,115,116,101,97,109,115,80,104,111,116,111,116,114,117, +116,104,99,108,101,97,110,46,112,104,112,63,115,97,105,110,116,109,101,116,97, +108,108,111,117,105,115,109,101,97,110,116,112,114,111,111,102,98,114,105,101, +102,114,111,119,34,62,103,101,110,114,101,116,114,117,99,107,108,111,111,107,115 +,86,97,108,117,101,70,114,97,109,101,46,110,101,116,47,45,45,62,10,60,116,114, +121,32,123,10,118,97,114,32,109,97,107,101,115,99,111,115,116,115,112,108,97,105 +,110,97,100,117,108,116,113,117,101,115,116,116,114,97,105,110,108,97,98,111,114 +,104,101,108,112,115,99,97,117,115,101,109,97,103,105,99,109,111,116,111,114,116 +,104,101,105,114,50,53,48,112,120,108,101,97,115,116,115,116,101,112,115,67,111, +117,110,116,99,111,117,108,100,103,108,97,115,115,115,105,100,101,115,102,117, +110,100,115,104,111,116,101,108,97,119,97,114,100,109,111,117,116,104,109,111, +118,101,115,112,97,114,105,115,103,105,118,101,115,100,117,116,99,104,116,101, +120,97,115,102,114,117,105,116,110,117,108,108,44,124,124,91,93,59,116,111,112, +34,62,10,60,33,45,45,80,79,83,84,34,111,99,101,97,110,60,98,114,47,62,102,108, +111,111,114,115,112,101,97,107,100,101,112,116,104,32,115,105,122,101,98,97,110, +107,115,99,97,116,99,104,99,104,97,114,116,50,48,112,120,59,97,108,105,103,110, +100,101,97,108,115,119,111,117,108,100,53,48,112,120,59,117,114,108,61,34,112,97 +,114,107,115,109,111,117,115,101,77,111,115,116,32,46,46,46,60,47,97,109,111,110 +,103,98,114,97,105,110,98,111,100,121,32,110,111,110,101,59,98,97,115,101,100,99 +,97,114,114,121,100,114,97,102,116,114,101,102,101,114,112,97,103,101,95,104,111 +,109,101,46,109,101,116,101,114,100,101,108,97,121,100,114,101,97,109,112,114, +111,118,101,106,111,105,110,116,60,47,116,114,62,100,114,117,103,115,60,33,45,45 +,32,97,112,114,105,108,105,100,101,97,108,97,108,108,101,110,101,120,97,99,116, +102,111,114,116,104,99,111,100,101,115,108,111,103,105,99,86,105,101,119,32,115, +101,101,109,115,98,108,97,110,107,112,111,114,116,115,32,40,50,48,48,115,97,118, +101,100,95,108,105,110,107,103,111,97,108,115,103,114,97,110,116,103,114,101,101 +,107,104,111,109,101,115,114,105,110,103,115,114,97,116,101,100,51,48,112,120,59 +,119,104,111,115,101,112,97,114,115,101,40,41,59,34,32,66,108,111,99,107,108,105 +,110,117,120,106,111,110,101,115,112,105,120,101,108,39,41,59,34,62,41,59,105, +102,40,45,108,101,102,116,100,97,118,105,100,104,111,114,115,101,70,111,99,117, +115,114,97,105,115,101,98,111,120,101,115,84,114,97,99,107,101,109,101,110,116, +60,47,101,109,62,98,97,114,34,62,46,115,114,99,61,116,111,119,101,114,97,108,116 +,61,34,99,97,98,108,101,104,101,110,114,121,50,52,112,120,59,115,101,116,117,112 +,105,116,97,108,121,115,104,97,114,112,109,105,110,111,114,116,97,115,116,101, +119,97,110,116,115,116,104,105,115,46,114,101,115,101,116,119,104,101,101,108, +103,105,114,108,115,47,99,115,115,47,49,48,48,37,59,99,108,117,98,115,115,116, +117,102,102,98,105,98,108,101,118,111,116,101,115,32,49,48,48,48,107,111,114,101 +,97,125,41,59,13,10,98,97,110,100,115,113,117,101,117,101,61,32,123,125,59,56,48 +,112,120,59,99,107,105,110,103,123,13,10,9,9,97,104,101,97,100,99,108,111,99,107 +,105,114,105,115,104,108,105,107,101,32,114,97,116,105,111,115,116,97,116,115,70 +,111,114,109,34,121,97,104,111,111,41,91,48,93,59,65,98,111,117,116,102,105,110, +100,115,60,47,104,49,62,100,101,98,117,103,116,97,115,107,115,85,82,76,32,61,99, +101,108,108,115,125,41,40,41,59,49,50,112,120,59,112,114,105,109,101,116,101,108 +,108,115,116,117,114,110,115,48,120,54,48,48,46,106,112,103,34,115,112,97,105, +110,98,101,97,99,104,116,97,120,101,115,109,105,99,114,111,97,110,103,101,108,45 +,45,62,60,47,103,105,102,116,115,115,116,101,118,101,45,108,105,110,107,98,111, +100,121,46,125,41,59,10,9,109,111,117,110,116,32,40,49,57,57,70,65,81,60,47,114, +111,103,101,114,102,114,97,110,107,67,108,97,115,115,50,56,112,120,59,102,101, +101,100,115,60,104,49,62,60,115,99,111,116,116,116,101,115,116,115,50,50,112,120 +,59,100,114,105,110,107,41,32,124,124,32,108,101,119,105,115,115,104,97,108,108, +35,48,51,57,59,32,102,111,114,32,108,111,118,101,100,119,97,115,116,101,48,48, +112,120,59,106,97,58,227,130,115,105,109,111,110,60,102,111,110,116,114,101,112, +108,121,109,101,101,116,115,117,110,116,101,114,99,104,101,97,112,116,105,103, +104,116,66,114,97,110,100,41,32,33,61,32,100,114,101,115,115,99,108,105,112,115, +114,111,111,109,115,111,110,107,101,121,109,111,98,105,108,109,97,105,110,46,78, +97,109,101,32,112,108,97,116,101,102,117,110,110,121,116,114,101,101,115,99,111, +109,47,34,49,46,106,112,103,119,109,111,100,101,112,97,114,97,109,83,84,65,82,84 +,108,101,102,116,32,105,100,100,101,110,44,32,50,48,49,41,59,10,125,10,102,111, +114,109,46,118,105,114,117,115,99,104,97,105,114,116,114,97,110,115,119,111,114, +115,116,80,97,103,101,115,105,116,105,111,110,112,97,116,99,104,60,33,45,45,10, +111,45,99,97,99,102,105,114,109,115,116,111,117,114,115,44,48,48,48,32,97,115, +105,97,110,105,43,43,41,123,97,100,111,98,101,39,41,91,48,93,105,100,61,49,48,98 +,111,116,104,59,109,101,110,117,32,46,50,46,109,105,46,112,110,103,34,107,101, +118,105,110,99,111,97,99,104,67,104,105,108,100,98,114,117,99,101,50,46,106,112, +103,85,82,76,41,43,46,106,112,103,124,115,117,105,116,101,115,108,105,99,101,104 +,97,114,114,121,49,50,48,34,32,115,119,101,101,116,116,114,62,13,10,110,97,109, +101,61,100,105,101,103,111,112,97,103,101,32,115,119,105,115,115,45,45,62,10,10, +35,102,102,102,59,34,62,76,111,103,46,99,111,109,34,116,114,101,97,116,115,104, +101,101,116,41,32,38,38,32,49,52,112,120,59,115,108,101,101,112,110,116,101,110, +116,102,105,108,101,100,106,97,58,227,131,105,100,61,34,99,78,97,109,101,34,119, +111,114,115,101,115,104,111,116,115,45,98,111,120,45,100,101,108,116,97,10,38, +108,116,59,98,101,97,114,115,58,52,56,90,60,100,97,116,97,45,114,117,114,97,108, +60,47,97,62,32,115,112,101,110,100,98,97,107,101,114,115,104,111,112,115,61,32, +34,34,59,112,104,112,34,62,99,116,105,111,110,49,51,112,120,59,98,114,105,97,110 +,104,101,108,108,111,115,105,122,101,61,111,61,37,50,70,32,106,111,105,110,109, +97,121,98,101,60,105,109,103,32,105,109,103,34,62,44,32,102,106,115,105,109,103, +34,32,34,41,91,48,93,77,84,111,112,66,84,121,112,101,34,110,101,119,108,121,68, +97,110,115,107,99,122,101,99,104,116,114,97,105,108,107,110,111,119,115,60,47, +104,53,62,102,97,113,34,62,122,104,45,99,110,49,48,41,59,10,45,49,34,41,59,116, +121,112,101,61,98,108,117,101,115,116,114,117,108,121,100,97,118,105,115,46,106, +115,39,59,62,13,10,60,33,115,116,101,101,108,32,121,111,117,32,104,50,62,13,10, +102,111,114,109,32,106,101,115,117,115,49,48,48,37,32,109,101,110,117,46,13,10,9 +,13,10,119,97,108,101,115,114,105,115,107,115,117,109,101,110,116,100,100,105, +110,103,98,45,108,105,107,116,101,97,99,104,103,105,102,34,32,118,101,103,97,115 +,100,97,110,115,107,101,101,115,116,105,115,104,113,105,112,115,117,111,109,105, +115,111,98,114,101,100,101,115,100,101,101,110,116,114,101,116,111,100,111,115, +112,117,101,100,101,97,195,177,111,115,101,115,116,195,161,116,105,101,110,101, +104,97,115,116,97,111,116,114,111,115,112,97,114,116,101,100,111,110,100,101,110 +,117,101,118,111,104,97,99,101,114,102,111,114,109,97,109,105,115,109,111,109, +101,106,111,114,109,117,110,100,111,97,113,117,195,173,100,195,173,97,115,115, +195,179,108,111,97,121,117,100,97,102,101,99,104,97,116,111,100,97,115,116,97, +110,116,111,109,101,110,111,115,100,97,116,111,115,111,116,114,97,115,115,105, +116,105,111,109,117,99,104,111,97,104,111,114,97,108,117,103,97,114,109,97,121, +111,114,101,115,116,111,115,104,111,114,97,115,116,101,110,101,114,97,110,116, +101,115,102,111,116,111,115,101,115,116,97,115,112,97,195,173,115,110,117,101, +118,97,115,97,108,117,100,102,111,114,111,115,109,101,100,105,111,113,117,105, +101,110,109,101,115,101,115,112,111,100,101,114,99,104,105,108,101,115,101,114, +195,161,118,101,99,101,115,100,101,99,105,114,106,111,115,195,169,101,115,116,97 +,114,118,101,110,116,97,103,114,117,112,111,104,101,99,104,111,101,108,108,111, +115,116,101,110,103,111,97,109,105,103,111,99,111,115,97,115,110,105,118,101,108 +,103,101,110,116,101,109,105,115,109,97,97,105,114,101,115,106,117,108,105,111, +116,101,109,97,115,104,97,99,105,97,102,97,118,111,114,106,117,110,105,111,108, +105,98,114,101,112,117,110,116,111,98,117,101,110,111,97,117,116,111,114,97,98, +114,105,108,98,117,101,110,97,116,101,120,116,111,109,97,114,122,111,115,97,98, +101,114,108,105,115,116,97,108,117,101,103,111,99,195,179,109,111,101,110,101, +114,111,106,117,101,103,111,112,101,114,195,186,104,97,98,101,114,101,115,116, +111,121,110,117,110,99,97,109,117,106,101,114,118,97,108,111,114,102,117,101,114 +,97,108,105,98,114,111,103,117,115,116,97,105,103,117,97,108,118,111,116,111,115 +,99,97,115,111,115,103,117,195,173,97,112,117,101,100,111,115,111,109,111,115,97 +,118,105,115,111,117,115,116,101,100,100,101,98,101,110,110,111,99,104,101,98, +117,115,99,97,102,97,108,116,97,101,117,114,111,115,115,101,114,105,101,100,105, +99,104,111,99,117,114,115,111,99,108,97,118,101,99,97,115,97,115,108,101,195,179 +,110,112,108,97,122,111,108,97,114,103,111,111,98,114,97,115,118,105,115,116,97, +97,112,111,121,111,106,117,110,116,111,116,114,97,116,97,118,105,115,116,111,99, +114,101,97,114,99,97,109,112,111,104,101,109,111,115,99,105,110,99,111,99,97,114 +,103,111,112,105,115,111,115,111,114,100,101,110,104,97,99,101,110,195,161,114, +101,97,100,105,115,99,111,112,101,100,114,111,99,101,114,99,97,112,117,101,100, +97,112,97,112,101,108,109,101,110,111,114,195,186,116,105,108,99,108,97,114,111, +106,111,114,103,101,99,97,108,108,101,112,111,110,101,114,116,97,114,100,101,110 +,97,100,105,101,109,97,114,99,97,115,105,103,117,101,101,108,108,97,115,115,105, +103,108,111,99,111,99,104,101,109,111,116,111,115,109,97,100,114,101,99,108,97, +115,101,114,101,115,116,111,110,105,195,177,111,113,117,101,100,97,112,97,115,97 +,114,98,97,110,99,111,104,105,106,111,115,118,105,97,106,101,112,97,98,108,111, +195,169,115,116,101,118,105,101,110,101,114,101,105,110,111,100,101,106,97,114, +102,111,110,100,111,99,97,110,97,108,110,111,114,116,101,108,101,116,114,97,99, +97,117,115,97,116,111,109,97,114,109,97,110,111,115,108,117,110,101,115,97,117, +116,111,115,118,105,108,108,97,118,101,110,100,111,112,101,115,97,114,116,105, +112,111,115,116,101,110,103,97,109,97,114,99,111,108,108,101,118,97,112,97,100, +114,101,117,110,105,100,111,118,97,109,111,115,122,111,110,97,115,97,109,98,111, +115,98,97,110,100,97,109,97,114,105,97,97,98,117,115,111,109,117,99,104,97,115, +117,98,105,114,114,105,111,106,97,118,105,118,105,114,103,114,97,100,111,99,104, +105,99,97,97,108,108,195,173,106,111,118,101,110,100,105,99,104,97,101,115,116, +97,110,116,97,108,101,115,115,97,108,105,114,115,117,101,108,111,112,101,115,111 +,115,102,105,110,101,115,108,108,97,109,97,98,117,115,99,111,195,169,115,116,97, +108,108,101,103,97,110,101,103,114,111,112,108,97,122,97,104,117,109,111,114,112 +,97,103,97,114,106,117,110,116,97,100,111,98,108,101,105,115,108,97,115,98,111, +108,115,97,98,97,195,177,111,104,97,98,108,97,108,117,99,104,97,195,129,114,101, +97,100,105,99,101,110,106,117,103,97,114,110,111,116,97,115,118,97,108,108,101, +97,108,108,195,161,99,97,114,103,97,100,111,108,111,114,97,98,97,106,111,101,115 +,116,195,169,103,117,115,116,111,109,101,110,116,101,109,97,114,105,111,102,105, +114,109,97,99,111,115,116,111,102,105,99,104,97,112,108,97,116,97,104,111,103,97 +,114,97,114,116,101,115,108,101,121,101,115,97,113,117,101,108,109,117,115,101, +111,98,97,115,101,115,112,111,99,111,115,109,105,116,97,100,99,105,101,108,111, +99,104,105,99,111,109,105,101,100,111,103,97,110,97,114,115,97,110,116,111,101, +116,97,112,97,100,101,98,101,115,112,108,97,121,97,114,101,100,101,115,115,105, +101,116,101,99,111,114,116,101,99,111,114,101,97,100,117,100,97,115,100,101,115, +101,111,118,105,101,106,111,100,101,115,101,97,97,103,117,97,115,38,113,117,111, +116,59,100,111,109,97,105,110,99,111,109,109,111,110,115,116,97,116,117,115,101, +118,101,110,116,115,109,97,115,116,101,114,115,121,115,116,101,109,97,99,116,105 +,111,110,98,97,110,110,101,114,114,101,109,111,118,101,115,99,114,111,108,108, +117,112,100,97,116,101,103,108,111,98,97,108,109,101,100,105,117,109,102,105,108 +,116,101,114,110,117,109,98,101,114,99,104,97,110,103,101,114,101,115,117,108, +116,112,117,98,108,105,99,115,99,114,101,101,110,99,104,111,111,115,101,110,111, +114,109,97,108,116,114,97,118,101,108,105,115,115,117,101,115,115,111,117,114,99 +,101,116,97,114,103,101,116,115,112,114,105,110,103,109,111,100,117,108,101,109, +111,98,105,108,101,115,119,105,116,99,104,112,104,111,116,111,115,98,111,114,100 +,101,114,114,101,103,105,111,110,105,116,115,101,108,102,115,111,99,105,97,108, +97,99,116,105,118,101,99,111,108,117,109,110,114,101,99,111,114,100,102,111,108, +108,111,119,116,105,116,108,101,62,101,105,116,104,101,114,108,101,110,103,116, +104,102,97,109,105,108,121,102,114,105,101,110,100,108,97,121,111,117,116,97,117 +,116,104,111,114,99,114,101,97,116,101,114,101,118,105,101,119,115,117,109,109, +101,114,115,101,114,118,101,114,112,108,97,121,101,100,112,108,97,121,101,114, +101,120,112,97,110,100,112,111,108,105,99,121,102,111,114,109,97,116,100,111,117 +,98,108,101,112,111,105,110,116,115,115,101,114,105,101,115,112,101,114,115,111, +110,108,105,118,105,110,103,100,101,115,105,103,110,109,111,110,116,104,115,102, +111,114,99,101,115,117,110,105,113,117,101,119,101,105,103,104,116,112,101,111, +112,108,101,101,110,101,114,103,121,110,97,116,117,114,101,115,101,97,114,99,104 +,102,105,103,117,114,101,104,97,118,105,110,103,99,117,115,116,111,109,111,102, +102,115,101,116,108,101,116,116,101,114,119,105,110,100,111,119,115,117,98,109, +105,116,114,101,110,100,101,114,103,114,111,117,112,115,117,112,108,111,97,100, +104,101,97,108,116,104,109,101,116,104,111,100,118,105,100,101,111,115,115,99, +104,111,111,108,102,117,116,117,114,101,115,104,97,100,111,119,100,101,98,97,116 +,101,118,97,108,117,101,115,79,98,106,101,99,116,111,116,104,101,114,115,114,105 +,103,104,116,115,108,101,97,103,117,101,99,104,114,111,109,101,115,105,109,112, +108,101,110,111,116,105,99,101,115,104,97,114,101,100,101,110,100,105,110,103, +115,101,97,115,111,110,114,101,112,111,114,116,111,110,108,105,110,101,115,113, +117,97,114,101,98,117,116,116,111,110,105,109,97,103,101,115,101,110,97,98,108, +101,109,111,118,105,110,103,108,97,116,101,115,116,119,105,110,116,101,114,70, +114,97,110,99,101,112,101,114,105,111,100,115,116,114,111,110,103,114,101,112, +101,97,116,76,111,110,100,111,110,100,101,116,97,105,108,102,111,114,109,101,100 +,100,101,109,97,110,100,115,101,99,117,114,101,112,97,115,115,101,100,116,111, +103,103,108,101,112,108,97,99,101,115,100,101,118,105,99,101,115,116,97,116,105, +99,99,105,116,105,101,115,115,116,114,101,97,109,121,101,108,108,111,119,97,116, +116,97,99,107,115,116,114,101,101,116,102,108,105,103,104,116,104,105,100,100, +101,110,105,110,102,111,34,62,111,112,101,110,101,100,117,115,101,102,117,108, +118,97,108,108,101,121,99,97,117,115,101,115,108,101,97,100,101,114,115,101,99, +114,101,116,115,101,99,111,110,100,100,97,109,97,103,101,115,112,111,114,116,115 +,101,120,99,101,112,116,114,97,116,105,110,103,115,105,103,110,101,100,116,104, +105,110,103,115,101,102,102,101,99,116,102,105,101,108,100,115,115,116,97,116, +101,115,111,102,102,105,99,101,118,105,115,117,97,108,101,100,105,116,111,114, +118,111,108,117,109,101,82,101,112,111,114,116,109,117,115,101,117,109,109,111, +118,105,101,115,112,97,114,101,110,116,97,99,99,101,115,115,109,111,115,116,108, +121,109,111,116,104,101,114,34,32,105,100,61,34,109,97,114,107,101,116,103,114, +111,117,110,100,99,104,97,110,99,101,115,117,114,118,101,121,98,101,102,111,114, +101,115,121,109,98,111,108,109,111,109,101,110,116,115,112,101,101,99,104,109, +111,116,105,111,110,105,110,115,105,100,101,109,97,116,116,101,114,67,101,110, +116,101,114,111,98,106,101,99,116,101,120,105,115,116,115,109,105,100,100,108, +101,69,117,114,111,112,101,103,114,111,119,116,104,108,101,103,97,99,121,109,97, +110,110,101,114,101,110,111,117,103,104,99,97,114,101,101,114,97,110,115,119,101 +,114,111,114,105,103,105,110,112,111,114,116,97,108,99,108,105,101,110,116,115, +101,108,101,99,116,114,97,110,100,111,109,99,108,111,115,101,100,116,111,112,105 +,99,115,99,111,109,105,110,103,102,97,116,104,101,114,111,112,116,105,111,110, +115,105,109,112,108,121,114,97,105,115,101,100,101,115,99,97,112,101,99,104,111, +115,101,110,99,104,117,114,99,104,100,101,102,105,110,101,114,101,97,115,111,110 +,99,111,114,110,101,114,111,117,116,112,117,116,109,101,109,111,114,121,105,102, +114,97,109,101,112,111,108,105,99,101,109,111,100,101,108,115,78,117,109,98,101, +114,100,117,114,105,110,103,111,102,102,101,114,115,115,116,121,108,101,115,107, +105,108,108,101,100,108,105,115,116,101,100,99,97,108,108,101,100,115,105,108, +118,101,114,109,97,114,103,105,110,100,101,108,101,116,101,98,101,116,116,101, +114,98,114,111,119,115,101,108,105,109,105,116,115,71,108,111,98,97,108,115,105, +110,103,108,101,119,105,100,103,101,116,99,101,110,116,101,114,98,117,100,103, +101,116,110,111,119,114,97,112,99,114,101,100,105,116,99,108,97,105,109,115,101, +110,103,105,110,101,115,97,102,101,116,121,99,104,111,105,99,101,115,112,105,114 +,105,116,45,115,116,121,108,101,115,112,114,101,97,100,109,97,107,105,110,103, +110,101,101,100,101,100,114,117,115,115,105,97,112,108,101,97,115,101,101,120, +116,101,110,116,83,99,114,105,112,116,98,114,111,107,101,110,97,108,108,111,119, +115,99,104,97,114,103,101,100,105,118,105,100,101,102,97,99,116,111,114,109,101, +109,98,101,114,45,98,97,115,101,100,116,104,101,111,114,121,99,111,110,102,105, +103,97,114,111,117,110,100,119,111,114,107,101,100,104,101,108,112,101,100,67, +104,117,114,99,104,105,109,112,97,99,116,115,104,111,117,108,100,97,108,119,97, +121,115,108,111,103,111,34,32,98,111,116,116,111,109,108,105,115,116,34,62,41, +123,118,97,114,32,112,114,101,102,105,120,111,114,97,110,103,101,72,101,97,100, +101,114,46,112,117,115,104,40,99,111,117,112,108,101,103,97,114,100,101,110,98, +114,105,100,103,101,108,97,117,110,99,104,82,101,118,105,101,119,116,97,107,105, +110,103,118,105,115,105,111,110,108,105,116,116,108,101,100,97,116,105,110,103, +66,117,116,116,111,110,98,101,97,117,116,121,116,104,101,109,101,115,102,111,114 +,103,111,116,83,101,97,114,99,104,97,110,99,104,111,114,97,108,109,111,115,116, +108,111,97,100,101,100,67,104,97,110,103,101,114,101,116,117,114,110,115,116,114 +,105,110,103,114,101,108,111,97,100,77,111,98,105,108,101,105,110,99,111,109,101 +,115,117,112,112,108,121,83,111,117,114,99,101,111,114,100,101,114,115,118,105, +101,119,101,100,38,110,98,115,112,59,99,111,117,114,115,101,65,98,111,117,116,32 +,105,115,108,97,110,100,60,104,116,109,108,32,99,111,111,107,105,101,110,97,109, +101,61,34,97,109,97,122,111,110,109,111,100,101,114,110,97,100,118,105,99,101, +105,110,60,47,97,62,58,32,84,104,101,32,100,105,97,108,111,103,104,111,117,115, +101,115,66,69,71,73,78,32,77,101,120,105,99,111,115,116,97,114,116,115,99,101, +110,116,114,101,104,101,105,103,104,116,97,100,100,105,110,103,73,115,108,97,110 +,100,97,115,115,101,116,115,69,109,112,105,114,101,83,99,104,111,111,108,101,102 +,102,111,114,116,100,105,114,101,99,116,110,101,97,114,108,121,109,97,110,117,97 +,108,83,101,108,101,99,116,46,10,10,79,110,101,106,111,105,110,101,100,109,101, +110,117,34,62,80,104,105,108,105,112,97,119,97,114,100,115,104,97,110,100,108, +101,105,109,112,111,114,116,79,102,102,105,99,101,114,101,103,97,114,100,115,107 +,105,108,108,115,110,97,116,105,111,110,83,112,111,114,116,115,100,101,103,114, +101,101,119,101,101,107,108,121,32,40,101,46,103,46,98,101,104,105,110,100,100, +111,99,116,111,114,108,111,103,103,101,100,117,110,105,116,101,100,60,47,98,62, +60,47,98,101,103,105,110,115,112,108,97,110,116,115,97,115,115,105,115,116,97, +114,116,105,115,116,105,115,115,117,101,100,51,48,48,112,120,124,99,97,110,97, +100,97,97,103,101,110,99,121,115,99,104,101,109,101,114,101,109,97,105,110,66, +114,97,122,105,108,115,97,109,112,108,101,108,111,103,111,34,62,98,101,121,111, +110,100,45,115,99,97,108,101,97,99,99,101,112,116,115,101,114,118,101,100,109,97 +,114,105,110,101,70,111,111,116,101,114,99,97,109,101,114,97,60,47,104,49,62,10, +95,102,111,114,109,34,108,101,97,118,101,115,115,116,114,101,115,115,34,32,47,62 +,13,10,46,103,105,102,34,32,111,110,108,111,97,100,108,111,97,100,101,114,79,120 +,102,111,114,100,115,105,115,116,101,114,115,117,114,118,105,118,108,105,115,116 +,101,110,102,101,109,97,108,101,68,101,115,105,103,110,115,105,122,101,61,34,97, +112,112,101,97,108,116,101,120,116,34,62,108,101,118,101,108,115,116,104,97,110, +107,115,104,105,103,104,101,114,102,111,114,99,101,100,97,110,105,109,97,108,97, +110,121,111,110,101,65,102,114,105,99,97,97,103,114,101,101,100,114,101,99,101, +110,116,80,101,111,112,108,101,60,98,114,32,47,62,119,111,110,100,101,114,112, +114,105,99,101,115,116,117,114,110,101,100,124,124,32,123,125,59,109,97,105,110, +34,62,105,110,108,105,110,101,115,117,110,100,97,121,119,114,97,112,34,62,102,97 +,105,108,101,100,99,101,110,115,117,115,109,105,110,117,116,101,98,101,97,99,111 +,110,113,117,111,116,101,115,49,53,48,112,120,124,101,115,116,97,116,101,114,101 +,109,111,116,101,101,109,97,105,108,34,108,105,110,107,101,100,114,105,103,104, +116,59,115,105,103,110,97,108,102,111,114,109,97,108,49,46,104,116,109,108,115, +105,103,110,117,112,112,114,105,110,99,101,102,108,111,97,116,58,46,112,110,103, +34,32,102,111,114,117,109,46,65,99,99,101,115,115,112,97,112,101,114,115,115,111 +,117,110,100,115,101,120,116,101,110,100,72,101,105,103,104,116,115,108,105,100, +101,114,85,84,70,45,56,34,38,97,109,112,59,32,66,101,102,111,114,101,46,32,87, +105,116,104,115,116,117,100,105,111,111,119,110,101,114,115,109,97,110,97,103, +101,112,114,111,102,105,116,106,81,117,101,114,121,97,110,110,117,97,108,112,97, +114,97,109,115,98,111,117,103,104,116,102,97,109,111,117,115,103,111,111,103,108 +,101,108,111,110,103,101,114,105,43,43,41,32,123,105,115,114,97,101,108,115,97, +121,105,110,103,100,101,99,105,100,101,104,111,109,101,34,62,104,101,97,100,101, +114,101,110,115,117,114,101,98,114,97,110,99,104,112,105,101,99,101,115,98,108, +111,99,107,59,115,116,97,116,101,100,116,111,112,34,62,60,114,97,99,105,110,103, +114,101,115,105,122,101,45,45,38,103,116,59,112,97,99,105,116,121,115,101,120, +117,97,108,98,117,114,101,97,117,46,106,112,103,34,32,49,48,44,48,48,48,111,98, +116,97,105,110,116,105,116,108,101,115,97,109,111,117,110,116,44,32,73,110,99,46 +,99,111,109,101,100,121,109,101,110,117,34,32,108,121,114,105,99,115,116,111,100 +,97,121,46,105,110,100,101,101,100,99,111,117,110,116,121,95,108,111,103,111,46, +70,97,109,105,108,121,108,111,111,107,101,100,77,97,114,107,101,116,108,115,101, +32,105,102,80,108,97,121,101,114,116,117,114,107,101,121,41,59,118,97,114,32,102 +,111,114,101,115,116,103,105,118,105,110,103,101,114,114,111,114,115,68,111,109, +97,105,110,125,101,108,115,101,123,105,110,115,101,114,116,66,108,111,103,60,47, +102,111,111,116,101,114,108,111,103,105,110,46,102,97,115,116,101,114,97,103,101 +,110,116,115,60,98,111,100,121,32,49,48,112,120,32,48,112,114,97,103,109,97,102, +114,105,100,97,121,106,117,110,105,111,114,100,111,108,108,97,114,112,108,97,99, +101,100,99,111,118,101,114,115,112,108,117,103,105,110,53,44,48,48,48,32,112,97, +103,101,34,62,98,111,115,116,111,110,46,116,101,115,116,40,97,118,97,116,97,114, +116,101,115,116,101,100,95,99,111,117,110,116,102,111,114,117,109,115,115,99,104 +,101,109,97,105,110,100,101,120,44,102,105,108,108,101,100,115,104,97,114,101, +115,114,101,97,100,101,114,97,108,101,114,116,40,97,112,112,101,97,114,83,117,98 +,109,105,116,108,105,110,101,34,62,98,111,100,121,34,62,10,42,32,84,104,101,84, +104,111,117,103,104,115,101,101,105,110,103,106,101,114,115,101,121,78,101,119, +115,60,47,118,101,114,105,102,121,101,120,112,101,114,116,105,110,106,117,114, +121,119,105,100,116,104,61,67,111,111,107,105,101,83,84,65,82,84,32,97,99,114, +111,115,115,95,105,109,97,103,101,116,104,114,101,97,100,110,97,116,105,118,101, +112,111,99,107,101,116,98,111,120,34,62,10,83,121,115,116,101,109,32,68,97,118, +105,100,99,97,110,99,101,114,116,97,98,108,101,115,112,114,111,118,101,100,65, +112,114,105,108,32,114,101,97,108,108,121,100,114,105,118,101,114,105,116,101, +109,34,62,109,111,114,101,34,62,98,111,97,114,100,115,99,111,108,111,114,115,99, +97,109,112,117,115,102,105,114,115,116,32,124,124,32,91,93,59,109,101,100,105,97 +,46,103,117,105,116,97,114,102,105,110,105,115,104,119,105,100,116,104,58,115, +104,111,119,101,100,79,116,104,101,114,32,46,112,104,112,34,32,97,115,115,117, +109,101,108,97,121,101,114,115,119,105,108,115,111,110,115,116,111,114,101,115, +114,101,108,105,101,102,115,119,101,100,101,110,67,117,115,116,111,109,101,97, +115,105,108,121,32,121,111,117,114,32,83,116,114,105,110,103,10,10,87,104,105, +108,116,97,121,108,111,114,99,108,101,97,114,58,114,101,115,111,114,116,102,114, +101,110,99,104,116,104,111,117,103,104,34,41,32,43,32,34,60,98,111,100,121,62,98 +,117,121,105,110,103,98,114,97,110,100,115,77,101,109,98,101,114,110,97,109,101, +34,62,111,112,112,105,110,103,115,101,99,116,111,114,53,112,120,59,34,62,118,115 +,112,97,99,101,112,111,115,116,101,114,109,97,106,111,114,32,99,111,102,102,101, +101,109,97,114,116,105,110,109,97,116,117,114,101,104,97,112,112,101,110,60,47, +110,97,118,62,107,97,110,115,97,115,108,105,110,107,34,62,73,109,97,103,101,115, +61,102,97,108,115,101,119,104,105,108,101,32,104,115,112,97,99,101,48,38,97,109, +112,59,32,10,10,73,110,32,32,112,111,119,101,114,80,111,108,115,107,105,45,99, +111,108,111,114,106,111,114,100,97,110,66,111,116,116,111,109,83,116,97,114,116, +32,45,99,111,117,110,116,50,46,104,116,109,108,110,101,119,115,34,62,48,49,46, +106,112,103,79,110,108,105,110,101,45,114,105,103,104,116,109,105,108,108,101, +114,115,101,110,105,111,114,73,83,66,78,32,48,48,44,48,48,48,32,103,117,105,100, +101,115,118,97,108,117,101,41,101,99,116,105,111,110,114,101,112,97,105,114,46, +120,109,108,34,32,32,114,105,103,104,116,115,46,104,116,109,108,45,98,108,111,99 +,107,114,101,103,69,120,112,58,104,111,118,101,114,119,105,116,104,105,110,118, +105,114,103,105,110,112,104,111,110,101,115,60,47,116,114,62,13,117,115,105,110, +103,32,10,9,118,97,114,32,62,39,41,59,10,9,60,47,116,100,62,10,60,47,116,114,62, +10,98,97,104,97,115,97,98,114,97,115,105,108,103,97,108,101,103,111,109,97,103, +121,97,114,112,111,108,115,107,105,115,114,112,115,107,105,216,177,216,175,217, +136,228,184,173,230,150,135,231,174,128,228,189,147,231,185,129,233,171,148,228, +191,161,230,129,175,228,184,173,229,155,189,230,136,145,228,187,172,228,184,128, +228,184,170,229,133,172,229,143,184,231,174,161,231,144,134,232,174,186,229,157, +155,229,143,175,228,187,165,230,156,141,229,138,161,230,151,182,233,151,180,228, +184,170,228,186,186,228,186,167,229,147,129,232,135,170,229,183,177,228,188,129, +228,184,154,230,159,165,231,156,139,229,183,165,228,189,156,232,129,148,231,179, +187,230,178,161,230,156,137,231,189,145,231,171,153,230,137,128,230,156,137,232, +175,132,232,174,186,228,184,173,229,191,131,230,150,135,231,171,160,231,148,168, +230,136,183,233,166,150,233,161,181,228,189,156,232,128,133,230,138,128,230,156, +175,233,151,174,233,162,152,231,155,184,229,133,179,228,184,139,232,189,189,230, +144,156,231,180,162,228,189,191,231,148,168,232,189,175,228,187,182,229,156,168, +231,186,191,228,184,187,233,162,152,232,181,132,230,150,153,232,167,134,233,162, +145,229,155,158,229,164,141,230,179,168,229,134,140,231,189,145,231,187,156,230, +148,182,232,151,143,229,134,133,229,174,185,230,142,168,232,141,144,229,184,130, +229,156,186,230,182,136,230,129,175,231,169,186,233,151,180,229,143,145,229,184, +131,228,187,128,228,185,136,229,165,189,229,143,139,231,148,159,230,180,187,229, +155,190,231,137,135,229,143,145,229,177,149,229,166,130,230,158,156,230,137,139, +230,156,186,230,150,176,233,151,187,230,156,128,230,150,176,230,150,185,229,188, +143,229,140,151,228,186,172,230,143,144,228,190,155,229,133,179,228,186,142,230, +155,180,229,164,154,232,191,153,228,184,170,231,179,187,231,187,159,231,159,165, +233,129,147,230,184,184,230,136,143,229,185,191,229,145,138,229,133,182,228,187, +150,229,143,145,232,161,168,229,174,137,229,133,168,231,172,172,228,184,128,228, +188,154,229,145,152,232,191,155,232,161,140,231,130,185,229,135,187,231,137,136, +230,157,131,231,148,181,229,173,144,228,184,150,231,149,140,232,174,190,232,174, +161,229,133,141,232,180,185,230,149,153,232,130,178,229,138,160,229,133,165,230, +180,187,229,138,168,228,187,150,228,187,172,229,149,134,229,147,129,229,141,154, +229,174,162,231,142,176,229,156,168,228,184,138,230,181,183,229,166,130,228,189, +149,229,183,178,231,187,143,231,149,153,232,168,128,232,175,166,231,187,134,231, +164,190,229,140,186,231,153,187,229,189,149,230,156,172,231,171,153,233,156,128, +232,166,129,228,187,183,230,160,188,230,148,175,230,140,129,229,155,189,233,153, +133,233,147,190,230,142,165,229,155,189,229,174,182,229,187,186,232,174,190,230, +156,139,229,143,139,233,152,133,232,175,187,230,179,149,229,190,139,228,189,141, +231,189,174,231,187,143,230,181,142,233,128,137,230,139,169,232,191,153,230,160, +183,229,189,147,229,137,141,229,136,134,231,177,187,230,142,146,232,161,140,229, +155,160,228,184,186,228,186,164,230,152,147,230,156,128,229,144,142,233,159,179, +228,185,144,228,184,141,232,131,189,233,128,154,232,191,135,232,161,140,228,184, +154,231,167,145,230,138,128,229,143,175,232,131,189,232,174,190,229,164,135,229, +144,136,228,189,156,229,164,167,229,174,182,231,164,190,228,188,154,231,160,148, +231,169,182,228,184,147,228,184,154,229,133,168,233,131,168,233,161,185,231,155, +174,232,191,153,233,135,140,232,191,152,230,152,175,229,188,128,229,167,139,230, +131,133,229,134,181,231,148,181,232,132,145,230,150,135,228,187,182,229,147,129, +231,137,140,229,184,174,229,138,169,230,150,135,229,140,150,232,181,132,230,186, +144,229,164,167,229,173,166,229,173,166,228,185,160,229,156,176,229,157,128,230, +181,143,232,167,136,230,138,149,232,181,132,229,183,165,231,168,139,232,166,129, +230,177,130,230,128,142,228,185,136,230,151,182,229,128,153,229,138,159,232,131, +189,228,184,187,232,166,129,231,155,174,229,137,141,232,181,132,232,174,175,229, +159,142,229,184,130,230,150,185,230,179,149,231,148,181,229,189,177,230,139,155, +232,129,152,229,163,176,230,152,142,228,187,187,228,189,149,229,129,165,229,186, +183,230,149,176,230,141,174,231,190,142,229,155,189,230,177,189,232,189,166,228, +187,139,231,187,141,228,189,134,230,152,175,228,186,164,230,181,129,231,148,159, +228,186,167,230,137,128,228,187,165,231,148,181,232,175,157,230,152,190,231,164, +186,228,184,128,228,186,155,229,141,149,228,189,141,228,186,186,229,145,152,229, +136,134,230,158,144,229,156,176,229,155,190,230,151,133,230,184,184,229,183,165, +229,133,183,229,173,166,231,148,159,231,179,187,229,136,151,231,189,145,229,143, +139,229,184,150,229,173,144,229,175,134,231,160,129,233,162,145,233,129,147,230, +142,167,229,136,182,229,156,176,229,140,186,229,159,186,230,156,172,229,133,168, +229,155,189,231,189,145,228,184,138,233,135,141,232,166,129,231,172,172,228,186, +140,229,150,156,230,172,162,232,191,155,229,133,165,229,143,139,230,131,133,232, +191,153,228,186,155,232,128,131,232,175,149,229,143,145,231,142,176,229,159,185, +232,174,173,228,187,165,228,184,138,230,148,191,229,186,156,230,136,144,228,184, +186,231,142,175,229,162,131,233,166,153,230,184,175,229,144,140,230,151,182,229, +168,177,228,185,144,229,143,145,233,128,129,228,184,128,229,174,154,229,188,128, +229,143,145,228,189,156,229,147,129,230,160,135,229,135,134,230,172,162,232,191, +142,232,167,163,229,134,179,229,156,176,230,150,185,228,184,128,228,184,139,228, +187,165,229,143,138,232,180,163,228,187,187,230,136,150,232,128,133,229,174,162, +230,136,183,228,187,163,232,161,168,231,167,175,229,136,134,229,165,179,228,186, +186,230,149,176,231,160,129,233,148,128,229,148,174,229,135,186,231,142,176,231, +166,187,231,186,191,229,186,148,231,148,168,229,136,151,232,161,168,228,184,141, +229,144,140,231,188,150,232,190,145,231,187,159,232,174,161,230,159,165,232,175, +162,228,184,141,232,166,129,230,156,137,229,133,179,230,156,186,230,158,132,229, +190,136,229,164,154,230,146,173,230,148,190,231,187,132,231,187,135,230,148,191, +231,173,150,231,155,180,230,142,165,232,131,189,229,138,155,230,157,165,230,186, +144,230,153,130,233,150,147,231,156,139,229,136,176,231,131,173,233,151,168,229, +133,179,233,148,174,228,184,147,229,140,186,233,157,158,229,184,184,232,139,177, +232,175,173,231,153,190,229,186,166,229,184,140,230,156,155,231,190,142,229,165, +179,230,175,148,232,190,131,231,159,165,232,175,134,232,167,132,229,174,154,229, +187,186,232,174,174,233,131,168,233,151,168,230,132,143,232,167,129,231,178,190, +229,189,169,230,151,165,230,156,172,230,143,144,233,171,152,229,143,145,232,168, +128,230,150,185,233,157,162,229,159,186,233,135,145,229,164,132,231,144,134,230, +157,131,233,153,144,229,189,177,231,137,135,233,147,182,232,161,140,232,191,152, +230,156,137,229,136,134,228,186,171,231,137,169,229,147,129,231,187,143,232,144, +165,230,183,187,229,138,160,228,184,147,229,174,182,232,191,153,231,167,141,232, +175,157,233,162,152,232,181,183,230,157,165,228,184,154,229,138,161,229,133,172, +229,145,138,232,174,176,229,189,149,231,174,128,228,187,139,232,180,168,233,135, +143,231,148,183,228,186,186,229,189,177,229,147,141,229,188,149,231,148,168,230, +138,165,229,145,138,233,131,168,229,136,134,229,191,171,233,128,159,229,146,168, +232,175,162,230,151,182,229,176,154,230,179,168,230,132,143,231,148,179,232,175, +183,229,173,166,230,160,161,229,186,148,232,175,165,229,142,134,229,143,178,229, +143,170,230,152,175,232,191,148,229,155,158,232,180,173,228,185,176,229,144,141, +231,167,176,228,184,186,228,186,134,230,136,144,229,138,159,232,175,180,230,152, +142,228,190,155,229,186,148,229,173,169,229,173,144,228,184,147,233,162,152,231, +168,139,229,186,143,228,184,128,232,136,172,230,156,131,229,147,161,229,143,170, +230,156,137,229,133,182,229,174,131,228,191,157,230,138,164,232,128,140,228,184, +148,228,187,138,229,164,169,231,170,151,229,143,163,229,138,168,230,128,129,231, +138,182,230,128,129,231,137,185,229,136,171,232,174,164,228,184,186,229,191,133, +233,161,187,230,155,180,230,150,176,229,176,143,232,175,180,230,136,145,229,128, +145,228,189,156,228,184,186,229,170,146,228,189,147,229,140,133,230,139,172,233, +130,163,228,185,136,228,184,128,230,160,183,229,155,189,229,134,133,230,152,175, +229,144,166,230,160,185,230,141,174,231,148,181,232,167,134,229,173,166,233,153, +162,229,133,183,230,156,137,232,191,135,231,168,139,231,148,177,228,186,142,228, +186,186,230,137,141,229,135,186,230,157,165,228,184,141,232,191,135,230,173,163, +229,156,168,230,152,142,230,152,159,230,149,133,228,186,139,229,133,179,231,179, +187,230,160,135,233,162,152,229,149,134,229,138,161,232,190,147,229,133,165,228, +184,128,231,155,180,229,159,186,231,161,128,230,149,153,229,173,166,228,186,134, +232,167,163,229,187,186,231,173,145,231,187,147,230,158,156,229,133,168,231,144, +131,233,128,154,231,159,165,232,174,161,229,136,146,229,175,185,228,186,142,232, +137,186,230,156,175,231,155,184,229,134,140,229,143,145,231,148,159,231,156,159, +231,154,132,229,187,186,231,171,139,231,173,137,231,186,167,231,177,187,229,158, +139,231,187,143,233,170,140,229,174,158,231,142,176,229,136,182,228,189,156,230, +157,165,232,135,170,230,160,135,231,173,190,228,187,165,228,184,139,229,142,159, +229,136,155,230,151,160,230,179,149,229,133,182,228,184,173,229,128,139,228,186, +186,228,184,128,229,136,135,230,140,135,229,141,151,229,133,179,233,151,173,233, +155,134,229,155,162,231,172,172,228,184,137,229,133,179,230,179,168,229,155,160, +230,173,164,231,133,167,231,137,135,230,183,177,229,156,179,229,149,134,228,184, +154,229,185,191,229,183,158,230,151,165,230,156,159,233,171,152,231,186,167,230, +156,128,232,191,145,231,187,188,229,144,136,232,161,168,231,164,186,228,184,147, +232,190,145,232,161,140,228,184,186,228,186,164,233,128,154,232,175,132,228,187, +183,232,167,137,229,190,151,231,178,190,229,141,142,229,174,182,229,186,173,229, +174,140,230,136,144,230,132,159,232,167,137,229,174,137,232,163,133,229,190,151, +229,136,176,233,130,174,228,187,182,229,136,182,229,186,166,233,163,159,229,147, +129,232,153,189,231,132,182,232,189,172,232,189,189,230,138,165,228,187,183,232, +174,176,232,128,133,230,150,185,230,161,136,232,161,140,230,148,191,228,186,186, +230,176,145,231,148,168,229,147,129,228,184,156,232,165,191,230,143,144,229,135, +186,233,133,146,229,186,151,231,132,182,229,144,142,228,187,152,230,172,190,231, +131,173,231,130,185,228,187,165,229,137,141,229,174,140,229,133,168,229,143,145, +229,184,150,232,174,190,231,189,174,233,162,134,229,175,188,229,183,165,228,184, +154,229,140,187,233,153,162,231,156,139,231,156,139,231,187,143,229,133,184,229, +142,159,229,155,160,229,185,179,229,143,176,229,144,132,231,167,141,229,162,158, +229,138,160,230,157,144,230,150,153,230,150,176,229,162,158,228,185,139,229,144, +142,232,129,140,228,184,154,230,149,136,230,158,156,228,187,138,229,185,180,232, +174,186,230,150,135,230,136,145,229,155,189,229,145,138,232,175,137,231,137,136, +228,184,187,228,191,174,230,148,185,229,143,130,228,184,142,230,137,147,229,141, +176,229,191,171,228,185,144,230,156,186,230,162,176,232,167,130,231,130,185,229, +173,152,229,156,168,231,178,190,231,165,158,232,142,183,229,190,151,229,136,169, +231,148,168,231,187,167,231,187,173,228,189,160,228,187,172,232,191,153,228,185, +136,230,168,161,229,188,143,232,175,173,232,168,128,232,131,189,229,164,159,233, +155,133,232,153,142,230,147,141,228,189,156,233,163,142,230,160,188,228,184,128, +232,181,183,231,167,145,229,173,166,228,189,147,232,130,178,231,159,173,228,191, +161,230,157,161,228,187,182,230,178,187,231,150,151,232,191,144,229,138,168,228, +186,167,228,184,154,228,188,154,232,174,174,229,175,188,232,136,170,229,133,136, +231,148,159,232,129,148,231,155,159,229,143,175,230,152,175,229,149,143,233,161, +140,231,187,147,230,158,132,228,189,156,231,148,168,232,176,131,230,159,165,232, +179,135,230,150,153,232,135,170,229,138,168,232,180,159,232,180,163,229,134,156, +228,184,154,232,174,191,233,151,174,229,174,158,230,150,189,230,142,165,229,143, +151,232,174,168,232,174,186,233,130,163,228,184,170,229,143,141,233,166,136,229, +138,160,229,188,186,229,165,179,230,128,167,232,140,131,229,155,180,230,156,141, +229,139,153,228,188,145,233,151,178,228,187,138,230,151,165,229,174,162,230,156, +141,232,167,128,231,156,139,229,143,130,229,138,160,231,154,132,232,175,157,228, +184,128,231,130,185,228,191,157,232,175,129,229,155,190,228,185,166,230,156,137, +230,149,136,230,181,139,232,175,149,231,167,187,229,138,168,230,137,141,232,131, +189,229,134,179,229,174,154,232,130,161,231,165,168,228,184,141,230,150,173,233, +156,128,230,177,130,228,184,141,229,190,151,229,138,158,230,179,149,228,185,139, +233,151,180,233,135,135,231,148,168,232,144,165,233,148,128,230,138,149,232,175, +137,231,155,174,230,160,135,231,136,177,230,131,133,230,145,132,229,189,177,230, +156,137,228,186,155,232,164,135,232,163,189,230,150,135,229,173,166,230,156,186, +228,188,154,230,149,176,229,173,151,232,163,133,228,191,174,232,180,173,231,137, +169,229,134,156,230,157,145,229,133,168,233,157,162,231,178,190,229,147,129,229, +133,182,229,174,158,228,186,139,230,131,133,230,176,180,229,185,179,230,143,144, +231,164,186,228,184,138,229,184,130,232,176,162,232,176,162,230,153,174,233,128, +154,230,149,153,229,184,136,228,184,138,228,188,160,231,177,187,229,136,171,230, +173,140,230,155,178,230,139,165,230,156,137,229,136,155,230,150,176,233,133,141, +228,187,182,229,143,170,232,166,129,230,151,182,228,187,163,232,179,135,232,168, +138,232,190,190,229,136,176,228,186,186,231,148,159,232,174,162,233,152,133,232, +128,129,229,184,136,229,177,149,231,164,186,229,191,131,231,144,134,232,180,180, +229,173,144,231,182,178,231,171,153,228,184,187,233,161,140,232,135,170,231,132, +182,231,186,167,229,136,171,231,174,128,229,141,149,230,148,185,233,157,169,233, +130,163,228,186,155,230,157,165,232,175,180,230,137,147,229,188,128,228,187,163, +231,160,129,229,136,160,233,153,164,232,175,129,229,136,184,232,138,130,231,155, +174,233,135,141,231,130,185,230,172,161,230,149,184,229,164,154,229,176,145,232, +167,132,229,136,146,232,181,132,233,135,145,230,137,190,229,136,176,228,187,165, +229,144,142,229,164,167,229,133,168,228,184,187,233,161,181,230,156,128,228,189, +179,229,155,158,231,173,148,229,164,169,228,184,139,228,191,157,233,154,156,231, +142,176,228,187,163,230,163,128,230,159,165,230,138,149,231,165,168,229,176,143, +230,151,182,230,178,146,230,156,137,230,173,163,229,184,184,231,148,154,232,135, +179,228,187,163,231,144,134,231,155,174,229,189,149,229,133,172,229,188,128,229, +164,141,229,136,182,233,135,145,232,158,141,229,185,184,231,166,143,231,137,136, +230,156,172,229,189,162,230,136,144,229,135,134,229,164,135,232,161,140,230,131, +133,229,155,158,229,136,176,230,128,157,230,131,179,230,128,142,230,160,183,229, +141,143,232,174,174,232,174,164,232,175,129,230,156,128,229,165,189,228,186,167, +231,148,159,230,140,137,231,133,167,230,156,141,232,163,133,229,185,191,228,184, +156,229,138,168,230,188,171,233,135,135,232,180,173,230,150,176,230,137,139,231, +187,132,229,155,190,233,157,162,230,157,191,229,143,130,232,128,131,230,148,191, +230,178,187,229,174,185,230,152,147,229,164,169,229,156,176,229,138,170,229,138, +155,228,186,186,228,187,172,229,141,135,231,186,167,233,128,159,229,186,166,228, +186,186,231,137,169,232,176,131,230,149,180,230,181,129,232,161,140,233,128,160, +230,136,144,230,150,135,229,173,151,233,159,169,229,155,189,232,180,184,230,152, +147,229,188,128,229,177,149,231,155,184,233,151,156,232,161,168,231,142,176,229, +189,177,232,167,134,229,166,130,230,173,164,231,190,142,229,174,185,229,164,167, +229,176,143,230,138,165,233,129,147,230,157,161,230,172,190,229,191,131,230,131, +133,232,174,184,229,164,154,230,179,149,232,167,132,229,174,182,229,177,133,228, +185,166,229,186,151,232,191,158,230,142,165,231,171,139,229,141,179,228,184,190, +230,138,165,230,138,128,229,183,167,229,165,165,232,191,144,231,153,187,229,133, +165,228,187,165,230,157,165,231,144,134,232,174,186,228,186,139,228,187,182,232, +135,170,231,148,177,228,184,173,229,141,142,229,138,158,229,133,172,229,166,136, +229,166,136,231,156,159,230,173,163,228,184,141,233,148,153,229,133,168,230,150, +135,229,144,136,229,144,140,228,187,183,229,128,188,229,136,171,228,186,186,231, +155,145,231,157,163,229,133,183,228,189,147,228,184,150,231,186,170,229,155,162, +233,152,159,229,136,155,228,184,154,230,137,191,230,139,133,229,162,158,233,149, +191,230,156,137,228,186,186,228,191,157,230,140,129,229,149,134,229,174,182,231, +187,180,228,191,174,229,143,176,230,185,190,229,183,166,229,143,179,232,130,161, +228,187,189,231,173,148,230,161,136,229,174,158,233,153,133,231,148,181,228,191, +161,231,187,143,231,144,134,231,148,159,229,145,189,229,174,163,228,188,160,228, +187,187,229,138,161,230,173,163,229,188,143,231,137,185,232,137,178,228,184,139, +230,157,165,229,141,143,228,188,154,229,143,170,232,131,189,229,189,147,231,132, +182,233,135,141,230,150,176,229,133,167,229,174,185,230,140,135,229,175,188,232, +191,144,232,161,140,230,151,165,229,191,151,232,179,163,229,174,182,232,182,133, +232,191,135,229,156,159,229,156,176,230,181,153,230,177,159,230,148,175,228,187, +152,230,142,168,229,135,186,231,171,153,233,149,191,230,157,173,229,183,158,230, +137,167,232,161,140,229,136,182,233,128,160,228,185,139,228,184,128,230,142,168, +229,185,191,231,142,176,229,156,186,230,143,143,232,191,176,229,143,152,229,140, +150,228,188,160,231,187,159,230,173,140,230,137,139,228,191,157,233,153,169,232, +175,190,231,168,139,229,140,187,231,150,151,231,187,143,232,191,135,232,191,135, +229,142,187,228,185,139,229,137,141,230,148,182,229,133,165,229,185,180,229,186, +166,230,157,130,229,191,151,231,190,142,228,184,189,230,156,128,233,171,152,231, +153,187,233,153,134,230,156,170,230,157,165,229,138,160,229,183,165,229,133,141, +232,180,163,230,149,153,231,168,139,231,137,136,229,157,151,232,186,171,228,189, +147,233,135,141,229,186,134,229,135,186,229,148,174,230,136,144,230,156,172,229, +189,162,229,188,143,229,156,159,232,177,134,229,135,186,229,131,185,228,184,156, +230,150,185,233,130,174,231,174,177,229,141,151,228,186,172,230,177,130,232,129, +140,229,143,150,229,190,151,232,129,140,228,189,141,231,155,184,228,191,161,233, +161,181,233,157,162,229,136,134,233,146,159,231,189,145,233,161,181,231,161,174, +229,174,154,229,155,190,228,190,139,231,189,145,229,157,128,231,167,175,230,158, +129,233,148,153,232,175,175,231,155,174,231,154,132,229,174,157,232,180,157,230, +156,186,229,133,179,233,163,142,233,153,169,230,142,136,230,157,131,231,151,133, +230,175,146,229,174,160,231,137,169,233,153,164,228,186,134,232,169,149,232,171, +150,231,150,190,231,151,133,229,143,138,230,151,182,230,177,130,232,180,173,231, +171,153,231,130,185,229,132,191,231,171,165,230,175,143,229,164,169,228,184,173, +229,164,174,232,174,164,232,175,134,230,175,143,228,184,170,229,164,169,230,180, +165,229,173,151,228,189,147,229,143,176,231,129,163,231,187,180,230,138,164,230, +156,172,233,161,181,228,184,170,230,128,167,229,174,152,230,150,185,229,184,184, +232,167,129,231,155,184,230,156,186,230,136,152,231,149,165,229,186,148,229,189, +147,229,190,139,229,184,136,230,150,185,228,190,191,230,160,161,229,155,173,232, +130,161,229,184,130,230,136,191,229,177,139,230,160,143,231,155,174,229,145,152, +229,183,165,229,175,188,232,135,180,231,170,129,231,132,182,233,129,147,229,133, +183,230,156,172,231,189,145,231,187,147,229,144,136,230,161,163,230,161,136,229, +138,179,229,138,168,229,143,166,229,164,150,231,190,142,229,133,131,229,188,149, +232,181,183,230,148,185,229,143,152,231,172,172,229,155,155,228,188,154,232,174, +161,232,170,170,230,152,142,233,154,144,231,167,129,229,174,157,229,174,157,232, +167,132,232,140,131,230,182,136,232,180,185,229,133,177,229,144,140,229,191,152, +232,174,176,228,189,147,231,179,187,229,184,166,230,157,165,229,144,141,229,173, +151,231,153,188,232,161,168,229,188,128,230,148,190,229,138,160,231,155,159,229, +143,151,229,136,176,228,186,140,230,137,139,229,164,167,233,135,143,230,136,144, +228,186,186,230,149,176,233,135,143,229,133,177,228,186,171,229,140,186,229,159, +159,229,165,179,229,173,169,229,142,159,229,136,153,230,137,128,229,156,168,231, +187,147,230,157,159,233,128,154,228,191,161,232,182,133,231,186,167,233,133,141, +231,189,174,229,189,147,230,151,182,228,188,152,231,167,128,230,128,167,230,132, +159,230,136,191,228,186,167,233,129,138,230,136,178,229,135,186,229,143,163,230, +143,144,228,186,164,229,176,177,228,184,154,228,191,157,229,129,165,231,168,139, +229,186,166,229,143,130,230,149,176,228,186,139,228,184,154,230,149,180,228,184, +170,229,177,177,228,184,156,230,131,133,230,132,159,231,137,185,230,174,138,229, +136,134,233,161,158,230,144,156,229,176,139,229,177,158,228,186,142,233,151,168, +230,136,183,232,180,162,229,138,161,229,163,176,233,159,179,229,143,138,229,133, +182,232,180,162,231,187,143,229,157,154,230,140,129,229,185,178,233,131,168,230, +136,144,231,171,139,229,136,169,231,155,138,232,128,131,232,153,145,230,136,144, +233,131,189,229,140,133,232,163,133,231,148,168,230,136,182,230,175,148,232,181, +155,230,150,135,230,152,142,230,139,155,229,149,134,229,174,140,230,149,180,231, +156,159,230,152,175,231,156,188,231,157,155,228,188,153,228,188,180,229,168,129, +230,156,155,233,162,134,229,159,159,229,141,171,231,148,159,228,188,152,230,131, +160,232,171,150,229,163,135,229,133,172,229,133,177,232,137,175,229,165,189,229, +133,133,229,136,134,231,172,166,229,144,136,233,153,132,228,187,182,231,137,185, +231,130,185,228,184,141,229,143,175,232,139,177,230,150,135,232,181,132,228,186, +167,230,160,185,230,156,172,230,152,142,230,152,190,229,175,134,231,162,188,229, +133,172,228,188,151,230,176,145,230,151,143,230,155,180,229,138,160,228,186,171, +229,143,151,229,144,140,229,173,166,229,144,175,229,138,168,233,128,130,229,144, +136,229,142,159,230,157,165,233,151,174,231,173,148,230,156,172,230,150,135,231, +190,142,233,163,159,231,187,191,232,137,178,231,168,179,229,174,154,231,187,136, +228,186,142,231,148,159,231,137,169,228,190,155,230,177,130,230,144,156,231,139, +144,229,138,155,233,135,143,228,184,165,233,135,141,230,176,184,232,191,156,229, +134,153,231,156,159,230,156,137,233,153,144,231,171,158,228,186,137,229,175,185, +232,177,161,232,180,185,231,148,168,228,184,141,229,165,189,231,187,157,229,175, +185,229,141,129,229,136,134,228,191,131,232,191,155,231,130,185,232,175,132,229, +189,177,233,159,179,228,188,152,229,138,191,228,184,141,229,176,145,230,172,163, +232,181,143,229,185,182,228,184,148,230,156,137,231,130,185,230,150,185,229,144, +145,229,133,168,230,150,176,228,191,161,231,148,168,232,174,190,230,150,189,229, +189,162,232,177,161,232,181,132,230,160,188,231,170,129,231,160,180,233,154,143, +231,157,128,233,135,141,229,164,167,228,186,142,230,152,175,230,175,149,228,184, +154,230,153,186,232,131,189,229,140,150,229,183,165,229,174,140,231,190,142,229, +149,134,229,159,142,231,187,159,228,184,128,229,135,186,231,137,136,230,137,147, +233,128,160,231,148,162,229,147,129,230,166,130,229,134,181,231,148,168,228,186, +142,228,191,157,231,149,153,229,155,160,231,180,160,228,184,173,229,156,139,229, +173,152,229,130,168,232,180,180,229,155,190,230,156,128,230,132,155,233,149,191, +230,156,159,229,143,163,228,187,183,231,144,134,232,180,162,229,159,186,229,156, +176,229,174,137,230,142,146,230,173,166,230,177,137,233,135,140,233,157,162,229, +136,155,229,187,186,229,164,169,231,169,186,233,166,150,229,133,136,229,174,140, +229,150,132,233,169,177,229,138,168,228,184,139,233,157,162,228,184,141,229,134, +141,232,175,154,228,191,161,230,132,143,228,185,137,233,152,179,229,133,137,232, +139,177,229,155,189,230,188,130,228,186,174,229,134,155,228,186,139,231,142,169, +229,174,182,231,190,164,228,188,151,229,134,156,230,176,145,229,141,179,229,143, +175,229,144,141,231,168,177,229,174,182,229,133,183,229,138,168,231,148,187,230, +131,179,229,136,176,230,179,168,230,152,142,229,176,143,229,173,166,230,128,167, +232,131,189,232,128,131,231,160,148,231,161,172,228,187,182,232,167,130,231,156, +139,230,184,133,230,165,154,230,144,158,231,172,145,233,166,150,233,160,129,233, +187,132,233,135,145,233,128,130,231,148,168,230,177,159,232,139,143,231,156,159, +229,174,158,228,184,187,231,174,161,233,152,182,230,174,181,232,168,187,229,134, +138,231,191,187,232,175,145,230,157,131,229,136,169,229,129,154,229,165,189,228, +188,188,228,185,142,233,128,154,232,174,175,230,150,189,229,183,165,231,139,128, +230,133,139,228,185,159,232,174,184,231,142,175,228,191,157,229,159,185,229,133, +187,230,166,130,229,191,181,229,164,167,229,158,139,230,156,186,231,165,168,231, +144,134,232,167,163,229,140,191,229,144,141,99,117,97,110,100,111,101,110,118, +105,97,114,109,97,100,114,105,100,98,117,115,99,97,114,105,110,105,99,105,111, +116,105,101,109,112,111,112,111,114,113,117,101,99,117,101,110,116,97,101,115, +116,97,100,111,112,117,101,100,101,110,106,117,101,103,111,115,99,111,110,116, +114,97,101,115,116,195,161,110,110,111,109,98,114,101,116,105,101,110,101,110, +112,101,114,102,105,108,109,97,110,101,114,97,97,109,105,103,111,115,99,105,117, +100,97,100,99,101,110,116,114,111,97,117,110,113,117,101,112,117,101,100,101,115 +,100,101,110,116,114,111,112,114,105,109,101,114,112,114,101,99,105,111,115,101, +103,195,186,110,98,117,101,110,111,115,118,111,108,118,101,114,112,117,110,116, +111,115,115,101,109,97,110,97,104,97,98,195,173,97,97,103,111,115,116,111,110, +117,101,118,111,115,117,110,105,100,111,115,99,97,114,108,111,115,101,113,117, +105,112,111,110,105,195,177,111,115,109,117,99,104,111,115,97,108,103,117,110,97 +,99,111,114,114,101,111,105,109,97,103,101,110,112,97,114,116,105,114,97,114,114 +,105,98,97,109,97,114,195,173,97,104,111,109,98,114,101,101,109,112,108,101,111, +118,101,114,100,97,100,99,97,109,98,105,111,109,117,99,104,97,115,102,117,101, +114,111,110,112,97,115,97,100,111,108,195,173,110,101,97,112,97,114,101,99,101, +110,117,101,118,97,115,99,117,114,115,111,115,101,115,116,97,98,97,113,117,105, +101,114,111,108,105,98,114,111,115,99,117,97,110,116,111,97,99,99,101,115,111, +109,105,103,117,101,108,118,97,114,105,111,115,99,117,97,116,114,111,116,105,101 +,110,101,115,103,114,117,112,111,115,115,101,114,195,161,110,101,117,114,111,112 +,97,109,101,100,105,111,115,102,114,101,110,116,101,97,99,101,114,99,97,100,101, +109,195,161,115,111,102,101,114,116,97,99,111,99,104,101,115,109,111,100,101,108 +,111,105,116,97,108,105,97,108,101,116,114,97,115,97,108,103,195,186,110,99,111, +109,112,114,97,99,117,97,108,101,115,101,120,105,115,116,101,99,117,101,114,112, +111,115,105,101,110,100,111,112,114,101,110,115,97,108,108,101,103,97,114,118, +105,97,106,101,115,100,105,110,101,114,111,109,117,114,99,105,97,112,111,100,114 +,195,161,112,117,101,115,116,111,100,105,97,114,105,111,112,117,101,98,108,111, +113,117,105,101,114,101,109,97,110,117,101,108,112,114,111,112,105,111,99,114, +105,115,105,115,99,105,101,114,116,111,115,101,103,117,114,111,109,117,101,114, +116,101,102,117,101,110,116,101,99,101,114,114,97,114,103,114,97,110,100,101,101 +,102,101,99,116,111,112,97,114,116,101,115,109,101,100,105,100,97,112,114,111, +112,105,97,111,102,114,101,99,101,116,105,101,114,114,97,101,45,109,97,105,108, +118,97,114,105,97,115,102,111,114,109,97,115,102,117,116,117,114,111,111,98,106, +101,116,111,115,101,103,117,105,114,114,105,101,115,103,111,110,111,114,109,97, +115,109,105,115,109,111,115,195,186,110,105,99,111,99,97,109,105,110,111,115,105 +,116,105,111,115,114,97,122,195,179,110,100,101,98,105,100,111,112,114,117,101, +98,97,116,111,108,101,100,111,116,101,110,195,173,97,106,101,115,195,186,115,101 +,115,112,101,114,111,99,111,99,105,110,97,111,114,105,103,101,110,116,105,101, +110,100,97,99,105,101,110,116,111,99,195,161,100,105,122,104,97,98,108,97,114, +115,101,114,195,173,97,108,97,116,105,110,97,102,117,101,114,122,97,101,115,116, +105,108,111,103,117,101,114,114,97,101,110,116,114,97,114,195,169,120,105,116, +111,108,195,179,112,101,122,97,103,101,110,100,97,118,195,173,100,101,111,101, +118,105,116,97,114,112,97,103,105,110,97,109,101,116,114,111,115,106,97,118,105, +101,114,112,97,100,114,101,115,102,195,161,99,105,108,99,97,98,101,122,97,195, +161,114,101,97,115,115,97,108,105,100,97,101,110,118,195,173,111,106,97,112,195, +179,110,97,98,117,115,111,115,98,105,101,110,101,115,116,101,120,116,111,115,108 +,108,101,118,97,114,112,117,101,100,97,110,102,117,101,114,116,101,99,111,109, +195,186,110,99,108,97,115,101,115,104,117,109,97,110,111,116,101,110,105,100,111 +,98,105,108,98,97,111,117,110,105,100,97,100,101,115,116,195,161,115,101,100,105 +,116,97,114,99,114,101,97,100,111,208,180,208,187,209,143,209,135,209,130,208, +190,208,186,208,176,208,186,208,184,208,187,208,184,209,141,209,130,208,190,208, +178,209,129,208,181,208,181,208,179,208,190,208,191,209,128,208,184,209,130,208, +176,208,186,208,181,209,137,208,181,209,131,208,182,208,181,208,154,208,176,208, +186,208,177,208,181,208,183,208,177,209,139,208,187,208,190,208,189,208,184,208, +146,209,129,208,181,208,191,208,190,208,180,208,173,209,130,208,190,209,130,208, +190,208,188,209,135,208,181,208,188,208,189,208,181,209,130,208,187,208,181,209, +130,209,128,208,176,208,183,208,190,208,189,208,176,208,179,208,180,208,181,208, +188,208,189,208,181,208,148,208,187,209,143,208,159,209,128,208,184,208,189,208, +176,209,129,208,189,208,184,209,133,209,130,208,181,208,188,208,186,209,130,208, +190,208,179,208,190,208,180,208,178,208,190,209,130,209,130,208,176,208,188,208, +161,208,168,208,144,208,188,208,176,209,143,208,167,209,130,208,190,208,178,208, +176,209,129,208,178,208,176,208,188,208,181,208,188,209,131,208,162,208,176,208, +186,208,180,208,178,208,176,208,189,208,176,208,188,209,141,209,130,208,184,209, +141,209,130,209,131,208,146,208,176,208,188,209,130,208,181,209,133,208,191,209, +128,208,190,209,130,209,131,209,130,208,189,208,176,208,180,208,180,208,189,209, +143,208,146,208,190,209,130,209,130,209,128,208,184,208,189,208,181,208,185,208, +146,208,176,209,129,208,189,208,184,208,188,209,129,208,176,208,188,209,130,208, +190,209,130,209,128,209,131,208,177,208,158,208,189,208,184,208,188,208,184,209, +128,208,189,208,181,208,181,208,158,208,158,208,158,208,187,208,184,209,134,209, +141,209,130,208,176,208,158,208,189,208,176,208,189,208,181,208,188,208,180,208, +190,208,188,208,188,208,190,208,185,208,180,208,178,208,181,208,190,208,189,208, +190,209,129,209,131,208,180,224,164,149,224,165,135,224,164,185,224,165,136,224, +164,149,224,165,128,224,164,184,224,165,135,224,164,149,224,164,190,224,164,149, +224,165,139,224,164,148,224,164,176,224,164,170,224,164,176,224,164,168,224,165, +135,224,164,143,224,164,149,224,164,149,224,164,191,224,164,173,224,165,128,224, +164,135,224,164,184,224,164,149,224,164,176,224,164,164,224,165,139,224,164,185, +224,165,139,224,164,134,224,164,170,224,164,185,224,165,128,224,164,175,224,164, +185,224,164,175,224,164,190,224,164,164,224,164,149,224,164,165,224,164,190,106, +97,103,114,97,110,224,164,134,224,164,156,224,164,156,224,165,139,224,164,133, +224,164,172,224,164,166,224,165,139,224,164,151,224,164,136,224,164,156,224,164, +190,224,164,151,224,164,143,224,164,185,224,164,174,224,164,135,224,164,168,224, +164,181,224,164,185,224,164,175,224,165,135,224,164,165,224,165,135,224,164,165, +224,165,128,224,164,152,224,164,176,224,164,156,224,164,172,224,164,166,224,165, +128,224,164,149,224,164,136,224,164,156,224,165,128,224,164,181,224,165,135,224, +164,168,224,164,136,224,164,168,224,164,143,224,164,185,224,164,176,224,164,137, +224,164,184,224,164,174,224,165,135,224,164,149,224,164,174,224,164,181,224,165, +139,224,164,178,224,165,135,224,164,184,224,164,172,224,164,174,224,164,136,224, +164,166,224,165,135,224,164,147,224,164,176,224,164,134,224,164,174,224,164,172, +224,164,184,224,164,173,224,164,176,224,164,172,224,164,168,224,164,154,224,164, +178,224,164,174,224,164,168,224,164,134,224,164,151,224,164,184,224,165,128,224, +164,178,224,165,128,216,185,217,132,217,137,216,165,217,132,217,137,217,135,216, +176,216,167,216,162,216,174,216,177,216,185,216,175,216,175,216,167,217,132,217, +137,217,135,216,176,217,135,216,181,217,136,216,177,216,186,217,138,216,177,217, +131,216,167,217,134,217,136,217,132,216,167,216,168,217,138,217,134,216,185,216, +177,216,182,216,176,217,132,217,131,217,135,217,134,216,167,217,138,217,136,217, +133,217,130,216,167,217,132,216,185,217,132,217,138,216,167,217,134,216,167,217, +132,217,131,217,134,216,173,216,170,217,137,217,130,216,168,217,132,217,136,216, +173,216,169,216,167,216,174,216,177,217,129,217,130,216,183,216,185,216,168,216, +175,216,177,217,131,217,134,216,165,216,176,216,167,217,131,217,133,216,167,216, +167,216,173,216,175,216,165,217,132,216,167,217,129,217,138,217,135,216,168,216, +185,216,182,217,131,217,138,217,129,216,168,216,173,216,171,217,136,217,133,217, +134,217,136,217,135,217,136,216,163,217,134,216,167,216,172,216,175,216,167,217, +132,217,135,216,167,216,179,217,132,217,133,216,185,217,134,216,175,217,132,217, +138,216,179,216,185,216,168,216,177,216,181,217,132,217,137,217,133,217,134,216, +176,216,168,217,135,216,167,216,163,217,134,217,135,217,133,216,171,217,132,217, +131,217,134,216,170,216,167,217,132,216,167,216,173,217,138,216,171,217,133,216, +181,216,177,216,180,216,177,216,173,216,173,217,136,217,132,217,136,217,129,217, +138,216,167,216,176,216,167,217,132,217,131,217,132,217,133,216,177,216,169,216, +167,217,134,216,170,216,167,217,132,217,129,216,163,216,168,217,136,216,174,216, +167,216,181,216,163,217,134,216,170,216,167,217,134,217,135,216,167,217,132,217, +138,216,185,216,182,217,136,217,136,217,130,216,175,216,167,216,168,217,134,216, +174,217,138,216,177,216,168,217,134,216,170,217,132,217,131,217,133,216,180,216, +167,216,161,217,136,217,135,217,138,216,167,216,168,217,136,217,130,216,181,216, +181,217,136,217,133,216,167,216,177,217,130,217,133,216,163,216,173,216,175,217, +134,216,173,217,134,216,185,216,175,217,133,216,177,216,163,217,138,216,167,216, +173,216,169,217,131,216,170,216,168,216,175,217,136,217,134,217,138,216,172,216, +168,217,133,217,134,217,135,216,170,216,173,216,170,216,172,217,135,216,169,216, +179,217,134,216,169,217,138,216,170,217,133,217,131,216,177,216,169,216,186,216, +178,216,169,217,134,217,129,216,179,216,168,217,138,216,170,217,132,217,132,217, +135,217,132,217,134,216,167,216,170,217,132,217,131,217,130,217,132,216,168,217, +132,217,133,216,167,216,185,217,134,217,135,216,163,217,136,217,132,216,180,217, +138,216,161,217,134,217,136,216,177,216,163,217,133,216,167,217,129,217,138,217, +131,216,168,217,131,217,132,216,176,216,167,216,170,216,177,216,170,216,168,216, +168,216,163,217,134,217,135,217,133,216,179,216,167,217,134,217,131,216,168,217, +138,216,185,217,129,217,130,216,175,216,173,216,179,217,134,217,132,217,135,217, +133,216,180,216,185,216,177,216,163,217,135,217,132,216,180,217,135,216,177,217, +130,216,183,216,177,216,183,217,132,216,168,112,114,111,102,105,108,101,115,101, +114,118,105,99,101,100,101,102,97,117,108,116,104,105,109,115,101,108,102,100, +101,116,97,105,108,115,99,111,110,116,101,110,116,115,117,112,112,111,114,116, +115,116,97,114,116,101,100,109,101,115,115,97,103,101,115,117,99,99,101,115,115, +102,97,115,104,105,111,110,60,116,105,116,108,101,62,99,111,117,110,116,114,121, +97,99,99,111,117,110,116,99,114,101,97,116,101,100,115,116,111,114,105,101,115, +114,101,115,117,108,116,115,114,117,110,110,105,110,103,112,114,111,99,101,115, +115,119,114,105,116,105,110,103,111,98,106,101,99,116,115,118,105,115,105,98,108 +,101,119,101,108,99,111,109,101,97,114,116,105,99,108,101,117,110,107,110,111, +119,110,110,101,116,119,111,114,107,99,111,109,112,97,110,121,100,121,110,97,109 +,105,99,98,114,111,119,115,101,114,112,114,105,118,97,99,121,112,114,111,98,108, +101,109,83,101,114,118,105,99,101,114,101,115,112,101,99,116,100,105,115,112,108 +,97,121,114,101,113,117,101,115,116,114,101,115,101,114,118,101,119,101,98,115, +105,116,101,104,105,115,116,111,114,121,102,114,105,101,110,100,115,111,112,116, +105,111,110,115,119,111,114,107,105,110,103,118,101,114,115,105,111,110,109,105, +108,108,105,111,110,99,104,97,110,110,101,108,119,105,110,100,111,119,46,97,100, +100,114,101,115,115,118,105,115,105,116,101,100,119,101,97,116,104,101,114,99, +111,114,114,101,99,116,112,114,111,100,117,99,116,101,100,105,114,101,99,116,102 +,111,114,119,97,114,100,121,111,117,32,99,97,110,114,101,109,111,118,101,100,115 +,117,98,106,101,99,116,99,111,110,116,114,111,108,97,114,99,104,105,118,101,99, +117,114,114,101,110,116,114,101,97,100,105,110,103,108,105,98,114,97,114,121,108 +,105,109,105,116,101,100,109,97,110,97,103,101,114,102,117,114,116,104,101,114, +115,117,109,109,97,114,121,109,97,99,104,105,110,101,109,105,110,117,116,101,115 +,112,114,105,118,97,116,101,99,111,110,116,101,120,116,112,114,111,103,114,97, +109,115,111,99,105,101,116,121,110,117,109,98,101,114,115,119,114,105,116,116, +101,110,101,110,97,98,108,101,100,116,114,105,103,103,101,114,115,111,117,114,99 +,101,115,108,111,97,100,105,110,103,101,108,101,109,101,110,116,112,97,114,116, +110,101,114,102,105,110,97,108,108,121,112,101,114,102,101,99,116,109,101,97,110 +,105,110,103,115,121,115,116,101,109,115,107,101,101,112,105,110,103,99,117,108, +116,117,114,101,38,113,117,111,116,59,44,106,111,117,114,110,97,108,112,114,111, +106,101,99,116,115,117,114,102,97,99,101,115,38,113,117,111,116,59,101,120,112, +105,114,101,115,114,101,118,105,101,119,115,98,97,108,97,110,99,101,69,110,103, +108,105,115,104,67,111,110,116,101,110,116,116,104,114,111,117,103,104,80,108, +101,97,115,101,32,111,112,105,110,105,111,110,99,111,110,116,97,99,116,97,118, +101,114,97,103,101,112,114,105,109,97,114,121,118,105,108,108,97,103,101,83,112, +97,110,105,115,104,103,97,108,108,101,114,121,100,101,99,108,105,110,101,109,101 +,101,116,105,110,103,109,105,115,115,105,111,110,112,111,112,117,108,97,114,113, +117,97,108,105,116,121,109,101,97,115,117,114,101,103,101,110,101,114,97,108,115 +,112,101,99,105,101,115,115,101,115,115,105,111,110,115,101,99,116,105,111,110, +119,114,105,116,101,114,115,99,111,117,110,116,101,114,105,110,105,116,105,97, +108,114,101,112,111,114,116,115,102,105,103,117,114,101,115,109,101,109,98,101, +114,115,104,111,108,100,105,110,103,100,105,115,112,117,116,101,101,97,114,108, +105,101,114,101,120,112,114,101,115,115,100,105,103,105,116,97,108,112,105,99, +116,117,114,101,65,110,111,116,104,101,114,109,97,114,114,105,101,100,116,114,97 +,102,102,105,99,108,101,97,100,105,110,103,99,104,97,110,103,101,100,99,101,110, +116,114,97,108,118,105,99,116,111,114,121,105,109,97,103,101,115,47,114,101,97, +115,111,110,115,115,116,117,100,105,101,115,102,101,97,116,117,114,101,108,105, +115,116,105,110,103,109,117,115,116,32,98,101,115,99,104,111,111,108,115,86,101, +114,115,105,111,110,117,115,117,97,108,108,121,101,112,105,115,111,100,101,112, +108,97,121,105,110,103,103,114,111,119,105,110,103,111,98,118,105,111,117,115, +111,118,101,114,108,97,121,112,114,101,115,101,110,116,97,99,116,105,111,110,115 +,60,47,117,108,62,13,10,119,114,97,112,112,101,114,97,108,114,101,97,100,121,99, +101,114,116,97,105,110,114,101,97,108,105,116,121,115,116,111,114,97,103,101,97, +110,111,116,104,101,114,100,101,115,107,116,111,112,111,102,102,101,114,101,100, +112,97,116,116,101,114,110,117,110,117,115,117,97,108,68,105,103,105,116,97,108, +99,97,112,105,116,97,108,87,101,98,115,105,116,101,102,97,105,108,117,114,101,99 +,111,110,110,101,99,116,114,101,100,117,99,101,100,65,110,100,114,111,105,100, +100,101,99,97,100,101,115,114,101,103,117,108,97,114,32,38,97,109,112,59,32,97, +110,105,109,97,108,115,114,101,108,101,97,115,101,65,117,116,111,109,97,116,103, +101,116,116,105,110,103,109,101,116,104,111,100,115,110,111,116,104,105,110,103, +80,111,112,117,108,97,114,99,97,112,116,105,111,110,108,101,116,116,101,114,115, +99,97,112,116,117,114,101,115,99,105,101,110,99,101,108,105,99,101,110,115,101, +99,104,97,110,103,101,115,69,110,103,108,97,110,100,61,49,38,97,109,112,59,72, +105,115,116,111,114,121,32,61,32,110,101,119,32,67,101,110,116,114,97,108,117, +112,100,97,116,101,100,83,112,101,99,105,97,108,78,101,116,119,111,114,107,114, +101,113,117,105,114,101,99,111,109,109,101,110,116,119,97,114,110,105,110,103,67 +,111,108,108,101,103,101,116,111,111,108,98,97,114,114,101,109,97,105,110,115,98 +,101,99,97,117,115,101,101,108,101,99,116,101,100,68,101,117,116,115,99,104,102, +105,110,97,110,99,101,119,111,114,107,101,114,115,113,117,105,99,107,108,121,98, +101,116,119,101,101,110,101,120,97,99,116,108,121,115,101,116,116,105,110,103, +100,105,115,101,97,115,101,83,111,99,105,101,116,121,119,101,97,112,111,110,115, +101,120,104,105,98,105,116,38,108,116,59,33,45,45,67,111,110,116,114,111,108,99, +108,97,115,115,101,115,99,111,118,101,114,101,100,111,117,116,108,105,110,101,97 +,116,116,97,99,107,115,100,101,118,105,99,101,115,40,119,105,110,100,111,119,112 +,117,114,112,111,115,101,116,105,116,108,101,61,34,77,111,98,105,108,101,32,107, +105,108,108,105,110,103,115,104,111,119,105,110,103,73,116,97,108,105,97,110,100 +,114,111,112,112,101,100,104,101,97,118,105,108,121,101,102,102,101,99,116,115, +45,49,39,93,41,59,10,99,111,110,102,105,114,109,67,117,114,114,101,110,116,97, +100,118,97,110,99,101,115,104,97,114,105,110,103,111,112,101,110,105,110,103,100 +,114,97,119,105,110,103,98,105,108,108,105,111,110,111,114,100,101,114,101,100, +71,101,114,109,97,110,121,114,101,108,97,116,101,100,60,47,102,111,114,109,62, +105,110,99,108,117,100,101,119,104,101,116,104,101,114,100,101,102,105,110,101, +100,83,99,105,101,110,99,101,99,97,116,97,108,111,103,65,114,116,105,99,108,101, +98,117,116,116,111,110,115,108,97,114,103,101,115,116,117,110,105,102,111,114, +109,106,111,117,114,110,101,121,115,105,100,101,98,97,114,67,104,105,99,97,103, +111,104,111,108,105,100,97,121,71,101,110,101,114,97,108,112,97,115,115,97,103, +101,44,38,113,117,111,116,59,97,110,105,109,97,116,101,102,101,101,108,105,110, +103,97,114,114,105,118,101,100,112,97,115,115,105,110,103,110,97,116,117,114,97, +108,114,111,117,103,104,108,121,46,10,10,84,104,101,32,98,117,116,32,110,111,116 +,100,101,110,115,105,116,121,66,114,105,116,97,105,110,67,104,105,110,101,115, +101,108,97,99,107,32,111,102,116,114,105,98,117,116,101,73,114,101,108,97,110, +100,34,32,100,97,116,97,45,102,97,99,116,111,114,115,114,101,99,101,105,118,101, +116,104,97,116,32,105,115,76,105,98,114,97,114,121,104,117,115,98,97,110,100,105 +,110,32,102,97,99,116,97,102,102,97,105,114,115,67,104,97,114,108,101,115,114,97 +,100,105,99,97,108,98,114,111,117,103,104,116,102,105,110,100,105,110,103,108,97 +,110,100,105,110,103,58,108,97,110,103,61,34,114,101,116,117,114,110,32,108,101, +97,100,101,114,115,112,108,97,110,110,101,100,112,114,101,109,105,117,109,112,97 +,99,107,97,103,101,65,109,101,114,105,99,97,69,100,105,116,105,111,110,93,38,113 +,117,111,116,59,77,101,115,115,97,103,101,110,101,101,100,32,116,111,118,97,108, +117,101,61,34,99,111,109,112,108,101,120,108,111,111,107,105,110,103,115,116,97, +116,105,111,110,98,101,108,105,101,118,101,115,109,97,108,108,101,114,45,109,111 +,98,105,108,101,114,101,99,111,114,100,115,119,97,110,116,32,116,111,107,105,110 +,100,32,111,102,70,105,114,101,102,111,120,121,111,117,32,97,114,101,115,105,109 +,105,108,97,114,115,116,117,100,105,101,100,109,97,120,105,109,117,109,104,101, +97,100,105,110,103,114,97,112,105,100,108,121,99,108,105,109,97,116,101,107,105, +110,103,100,111,109,101,109,101,114,103,101,100,97,109,111,117,110,116,115,102, +111,117,110,100,101,100,112,105,111,110,101,101,114,102,111,114,109,117,108,97, +100,121,110,97,115,116,121,104,111,119,32,116,111,32,83,117,112,112,111,114,116, +114,101,118,101,110,117,101,101,99,111,110,111,109,121,82,101,115,117,108,116, +115,98,114,111,116,104,101,114,115,111,108,100,105,101,114,108,97,114,103,101, +108,121,99,97,108,108,105,110,103,46,38,113,117,111,116,59,65,99,99,111,117,110, +116,69,100,119,97,114,100,32,115,101,103,109,101,110,116,82,111,98,101,114,116, +32,101,102,102,111,114,116,115,80,97,99,105,102,105,99,108,101,97,114,110,101, +100,117,112,32,119,105,116,104,104,101,105,103,104,116,58,119,101,32,104,97,118, +101,65,110,103,101,108,101,115,110,97,116,105,111,110,115,95,115,101,97,114,99, +104,97,112,112,108,105,101,100,97,99,113,117,105,114,101,109,97,115,115,105,118, +101,103,114,97,110,116,101,100,58,32,102,97,108,115,101,116,114,101,97,116,101, +100,98,105,103,103,101,115,116,98,101,110,101,102,105,116,100,114,105,118,105, +110,103,83,116,117,100,105,101,115,109,105,110,105,109,117,109,112,101,114,104, +97,112,115,109,111,114,110,105,110,103,115,101,108,108,105,110,103,105,115,32, +117,115,101,100,114,101,118,101,114,115,101,118,97,114,105,97,110,116,32,114,111 +,108,101,61,34,109,105,115,115,105,110,103,97,99,104,105,101,118,101,112,114,111 +,109,111,116,101,115,116,117,100,101,110,116,115,111,109,101,111,110,101,101,120 +,116,114,101,109,101,114,101,115,116,111,114,101,98,111,116,116,111,109,58,101, +118,111,108,118,101,100,97,108,108,32,116,104,101,115,105,116,101,109,97,112,101 +,110,103,108,105,115,104,119,97,121,32,116,111,32,32,65,117,103,117,115,116,115, +121,109,98,111,108,115,67,111,109,112,97,110,121,109,97,116,116,101,114,115,109, +117,115,105,99,97,108,97,103,97,105,110,115,116,115,101,114,118,105,110,103,125, +41,40,41,59,13,10,112,97,121,109,101,110,116,116,114,111,117,98,108,101,99,111, +110,99,101,112,116,99,111,109,112,97,114,101,112,97,114,101,110,116,115,112,108, +97,121,101,114,115,114,101,103,105,111,110,115,109,111,110,105,116,111,114,32,39 +,39,84,104,101,32,119,105,110,110,105,110,103,101,120,112,108,111,114,101,97,100 +,97,112,116,101,100,71,97,108,108,101,114,121,112,114,111,100,117,99,101,97,98, +105,108,105,116,121,101,110,104,97,110,99,101,99,97,114,101,101,114,115,41,46,32 +,84,104,101,32,99,111,108,108,101,99,116,83,101,97,114,99,104,32,97,110,99,105, +101,110,116,101,120,105,115,116,101,100,102,111,111,116,101,114,32,104,97,110, +100,108,101,114,112,114,105,110,116,101,100,99,111,110,115,111,108,101,69,97,115 +,116,101,114,110,101,120,112,111,114,116,115,119,105,110,100,111,119,115,67,104, +97,110,110,101,108,105,108,108,101,103,97,108,110,101,117,116,114,97,108,115,117 +,103,103,101,115,116,95,104,101,97,100,101,114,115,105,103,110,105,110,103,46, +104,116,109,108,34,62,115,101,116,116,108,101,100,119,101,115,116,101,114,110,99 +,97,117,115,105,110,103,45,119,101,98,107,105,116,99,108,97,105,109,101,100,74, +117,115,116,105,99,101,99,104,97,112,116,101,114,118,105,99,116,105,109,115,84, +104,111,109,97,115,32,109,111,122,105,108,108,97,112,114,111,109,105,115,101,112 +,97,114,116,105,101,115,101,100,105,116,105,111,110,111,117,116,115,105,100,101, +58,102,97,108,115,101,44,104,117,110,100,114,101,100,79,108,121,109,112,105,99, +95,98,117,116,116,111,110,97,117,116,104,111,114,115,114,101,97,99,104,101,100, +99,104,114,111,110,105,99,100,101,109,97,110,100,115,115,101,99,111,110,100,115, +112,114,111,116,101,99,116,97,100,111,112,116,101,100,112,114,101,112,97,114,101 +,110,101,105,116,104,101,114,103,114,101,97,116,108,121,103,114,101,97,116,101, +114,111,118,101,114,97,108,108,105,109,112,114,111,118,101,99,111,109,109,97,110 +,100,115,112,101,99,105,97,108,115,101,97,114,99,104,46,119,111,114,115,104,105, +112,102,117,110,100,105,110,103,116,104,111,117,103,104,116,104,105,103,104,101, +115,116,105,110,115,116,101,97,100,117,116,105,108,105,116,121,113,117,97,114, +116,101,114,67,117,108,116,117,114,101,116,101,115,116,105,110,103,99,108,101,97 +,114,108,121,101,120,112,111,115,101,100,66,114,111,119,115,101,114,108,105,98, +101,114,97,108,125,32,99,97,116,99,104,80,114,111,106,101,99,116,101,120,97,109, +112,108,101,104,105,100,101,40,41,59,70,108,111,114,105,100,97,97,110,115,119, +101,114,115,97,108,108,111,119,101,100,69,109,112,101,114,111,114,100,101,102, +101,110,115,101,115,101,114,105,111,117,115,102,114,101,101,100,111,109,83,101, +118,101,114,97,108,45,98,117,116,116,111,110,70,117,114,116,104,101,114,111,117, +116,32,111,102,32,33,61,32,110,117,108,108,116,114,97,105,110,101,100,68,101,110 +,109,97,114,107,118,111,105,100,40,48,41,47,97,108,108,46,106,115,112,114,101, +118,101,110,116,82,101,113,117,101,115,116,83,116,101,112,104,101,110,10,10,87, +104,101,110,32,111,98,115,101,114,118,101,60,47,104,50,62,13,10,77,111,100,101, +114,110,32,112,114,111,118,105,100,101,34,32,97,108,116,61,34,98,111,114,100,101 +,114,115,46,10,10,70,111,114,32,10,10,77,97,110,121,32,97,114,116,105,115,116, +115,112,111,119,101,114,101,100,112,101,114,102,111,114,109,102,105,99,116,105, +111,110,116,121,112,101,32,111,102,109,101,100,105,99,97,108,116,105,99,107,101, +116,115,111,112,112,111,115,101,100,67,111,117,110,99,105,108,119,105,116,110, +101,115,115,106,117,115,116,105,99,101,71,101,111,114,103,101,32,66,101,108,103, +105,117,109,46,46,46,60,47,97,62,116,119,105,116,116,101,114,110,111,116,97,98, +108,121,119,97,105,116,105,110,103,119,97,114,102,97,114,101,32,79,116,104,101, +114,32,114,97,110,107,105,110,103,112,104,114,97,115,101,115,109,101,110,116,105 +,111,110,115,117,114,118,105,118,101,115,99,104,111,108,97,114,60,47,112,62,13, +10,32,67,111,117,110,116,114,121,105,103,110,111,114,101,100,108,111,115,115,32, +111,102,106,117,115,116,32,97,115,71,101,111,114,103,105,97,115,116,114,97,110, +103,101,60,104,101,97,100,62,60,115,116,111,112,112,101,100,49,39,93,41,59,13,10 +,105,115,108,97,110,100,115,110,111,116,97,98,108,101,98,111,114,100,101,114,58, +108,105,115,116,32,111,102,99,97,114,114,105,101,100,49,48,48,44,48,48,48,60,47, +104,51,62,10,32,115,101,118,101,114,97,108,98,101,99,111,109,101,115,115,101,108 +,101,99,116,32,119,101,100,100,105,110,103,48,48,46,104,116,109,108,109,111,110, +97,114,99,104,111,102,102,32,116,104,101,116,101,97,99,104,101,114,104,105,103, +104,108,121,32,98,105,111,108,111,103,121,108,105,102,101,32,111,102,111,114,32, +101,118,101,110,114,105,115,101,32,111,102,38,114,97,113,117,111,59,112,108,117, +115,111,110,101,104,117,110,116,105,110,103,40,116,104,111,117,103,104,68,111, +117,103,108,97,115,106,111,105,110,105,110,103,99,105,114,99,108,101,115,70,111, +114,32,116,104,101,65,110,99,105,101,110,116,86,105,101,116,110,97,109,118,101, +104,105,99,108,101,115,117,99,104,32,97,115,99,114,121,115,116,97,108,118,97,108 +,117,101,32,61,87,105,110,100,111,119,115,101,110,106,111,121,101,100,97,32,115, +109,97,108,108,97,115,115,117,109,101,100,60,97,32,105,100,61,34,102,111,114,101 +,105,103,110,32,65,108,108,32,114,105,104,111,119,32,116,104,101,68,105,115,112, +108,97,121,114,101,116,105,114,101,100,104,111,119,101,118,101,114,104,105,100, +100,101,110,59,98,97,116,116,108,101,115,115,101,101,107,105,110,103,99,97,98, +105,110,101,116,119,97,115,32,110,111,116,108,111,111,107,32,97,116,99,111,110, +100,117,99,116,103,101,116,32,116,104,101,74,97,110,117,97,114,121,104,97,112, +112,101,110,115,116,117,114,110,105,110,103,97,58,104,111,118,101,114,79,110,108 +,105,110,101,32,70,114,101,110,99,104,32,108,97,99,107,105,110,103,116,121,112, +105,99,97,108,101,120,116,114,97,99,116,101,110,101,109,105,101,115,101,118,101, +110,32,105,102,103,101,110,101,114,97,116,100,101,99,105,100,101,100,97,114,101, +32,110,111,116,47,115,101,97,114,99,104,98,101,108,105,101,102,115,45,105,109,97 +,103,101,58,108,111,99,97,116,101,100,115,116,97,116,105,99,46,108,111,103,105, +110,34,62,99,111,110,118,101,114,116,118,105,111,108,101,110,116,101,110,116,101 +,114,101,100,102,105,114,115,116,34,62,99,105,114,99,117,105,116,70,105,110,108, +97,110,100,99,104,101,109,105,115,116,115,104,101,32,119,97,115,49,48,112,120,59 +,34,62,97,115,32,115,117,99,104,100,105,118,105,100,101,100,60,47,115,112,97,110 +,62,119,105,108,108,32,98,101,108,105,110,101,32,111,102,97,32,103,114,101,97, +116,109,121,115,116,101,114,121,47,105,110,100,101,120,46,102,97,108,108,105,110 +,103,100,117,101,32,116,111,32,114,97,105,108,119,97,121,99,111,108,108,101,103, +101,109,111,110,115,116,101,114,100,101,115,99,101,110,116,105,116,32,119,105, +116,104,110,117,99,108,101,97,114,74,101,119,105,115,104,32,112,114,111,116,101, +115,116,66,114,105,116,105,115,104,102,108,111,119,101,114,115,112,114,101,100, +105,99,116,114,101,102,111,114,109,115,98,117,116,116,111,110,32,119,104,111,32, +119,97,115,108,101,99,116,117,114,101,105,110,115,116,97,110,116,115,117,105,99, +105,100,101,103,101,110,101,114,105,99,112,101,114,105,111,100,115,109,97,114, +107,101,116,115,83,111,99,105,97,108,32,102,105,115,104,105,110,103,99,111,109, +98,105,110,101,103,114,97,112,104,105,99,119,105,110,110,101,114,115,60,98,114, +32,47,62,60,98,121,32,116,104,101,32,78,97,116,117,114,97,108,80,114,105,118,97, +99,121,99,111,111,107,105,101,115,111,117,116,99,111,109,101,114,101,115,111,108 +,118,101,83,119,101,100,105,115,104,98,114,105,101,102,108,121,80,101,114,115, +105,97,110,115,111,32,109,117,99,104,67,101,110,116,117,114,121,100,101,112,105, +99,116,115,99,111,108,117,109,110,115,104,111,117,115,105,110,103,115,99,114,105 +,112,116,115,110,101,120,116,32,116,111,98,101,97,114,105,110,103,109,97,112,112 +,105,110,103,114,101,118,105,115,101,100,106,81,117,101,114,121,40,45,119,105, +100,116,104,58,116,105,116,108,101,34,62,116,111,111,108,116,105,112,83,101,99, +116,105,111,110,100,101,115,105,103,110,115,84,117,114,107,105,115,104,121,111, +117,110,103,101,114,46,109,97,116,99,104,40,125,41,40,41,59,10,10,98,117,114,110 +,105,110,103,111,112,101,114,97,116,101,100,101,103,114,101,101,115,115,111,117, +114,99,101,61,82,105,99,104,97,114,100,99,108,111,115,101,108,121,112,108,97,115 +,116,105,99,101,110,116,114,105,101,115,60,47,116,114,62,13,10,99,111,108,111, +114,58,35,117,108,32,105,100,61,34,112,111,115,115,101,115,115,114,111,108,108, +105,110,103,112,104,121,115,105,99,115,102,97,105,108,105,110,103,101,120,101,99 +,117,116,101,99,111,110,116,101,115,116,108,105,110,107,32,116,111,68,101,102,97 +,117,108,116,60,98,114,32,47,62,10,58,32,116,114,117,101,44,99,104,97,114,116, +101,114,116,111,117,114,105,115,109,99,108,97,115,115,105,99,112,114,111,99,101, +101,100,101,120,112,108,97,105,110,60,47,104,49,62,13,10,111,110,108,105,110,101 +,46,63,120,109,108,32,118,101,104,101,108,112,105,110,103,100,105,97,109,111,110 +,100,117,115,101,32,116,104,101,97,105,114,108,105,110,101,101,110,100,32,45,45, +62,41,46,97,116,116,114,40,114,101,97,100,101,114,115,104,111,115,116,105,110, +103,35,102,102,102,102,102,102,114,101,97,108,105,122,101,86,105,110,99,101,110, +116,115,105,103,110,97,108,115,32,115,114,99,61,34,47,80,114,111,100,117,99,116, +100,101,115,112,105,116,101,100,105,118,101,114,115,101,116,101,108,108,105,110, +103,80,117,98,108,105,99,32,104,101,108,100,32,105,110,74,111,115,101,112,104,32 +,116,104,101,97,116,114,101,97,102,102,101,99,116,115,60,115,116,121,108,101,62, +97,32,108,97,114,103,101,100,111,101,115,110,39,116,108,97,116,101,114,44,32,69, +108,101,109,101,110,116,102,97,118,105,99,111,110,99,114,101,97,116,111,114,72, +117,110,103,97,114,121,65,105,114,112,111,114,116,115,101,101,32,116,104,101,115 +,111,32,116,104,97,116,77,105,99,104,97,101,108,83,121,115,116,101,109,115,80, +114,111,103,114,97,109,115,44,32,97,110,100,32,32,119,105,100,116,104,61,101,38, +113,117,111,116,59,116,114,97,100,105,110,103,108,101,102,116,34,62,10,112,101, +114,115,111,110,115,71,111,108,100,101,110,32,65,102,102,97,105,114,115,103,114, +97,109,109,97,114,102,111,114,109,105,110,103,100,101,115,116,114,111,121,105, +100,101,97,32,111,102,99,97,115,101,32,111,102,111,108,100,101,115,116,32,116, +104,105,115,32,105,115,46,115,114,99,32,61,32,99,97,114,116,111,111,110,114,101, +103,105,115,116,114,67,111,109,109,111,110,115,77,117,115,108,105,109,115,87,104 +,97,116,32,105,115,105,110,32,109,97,110,121,109,97,114,107,105,110,103,114,101, +118,101,97,108,115,73,110,100,101,101,100,44,101,113,117,97,108,108,121,47,115, +104,111,119,95,97,111,117,116,100,111,111,114,101,115,99,97,112,101,40,65,117, +115,116,114,105,97,103,101,110,101,116,105,99,115,121,115,116,101,109,44,73,110, +32,116,104,101,32,115,105,116,116,105,110,103,72,101,32,97,108,115,111,73,115, +108,97,110,100,115,65,99,97,100,101,109,121,10,9,9,60,33,45,45,68,97,110,105,101 +,108,32,98,105,110,100,105,110,103,98,108,111,99,107,34,62,105,109,112,111,115, +101,100,117,116,105,108,105,122,101,65,98,114,97,104,97,109,40,101,120,99,101, +112,116,123,119,105,100,116,104,58,112,117,116,116,105,110,103,41,46,104,116,109 +,108,40,124,124,32,91,93,59,10,68,65,84,65,91,32,42,107,105,116,99,104,101,110, +109,111,117,110,116,101,100,97,99,116,117,97,108,32,100,105,97,108,101,99,116, +109,97,105,110,108,121,32,95,98,108,97,110,107,39,105,110,115,116,97,108,108,101 +,120,112,101,114,116,115,105,102,40,116,121,112,101,73,116,32,97,108,115,111,38, +99,111,112,121,59,32,34,62,84,101,114,109,115,98,111,114,110,32,105,110,79,112, +116,105,111,110,115,101,97,115,116,101,114,110,116,97,108,107,105,110,103,99,111 +,110,99,101,114,110,103,97,105,110,101,100,32,111,110,103,111,105,110,103,106, +117,115,116,105,102,121,99,114,105,116,105,99,115,102,97,99,116,111,114,121,105, +116,115,32,111,119,110,97,115,115,97,117,108,116,105,110,118,105,116,101,100,108 +,97,115,116,105,110,103,104,105,115,32,111,119,110,104,114,101,102,61,34,47,34, +32,114,101,108,61,34,100,101,118,101,108,111,112,99,111,110,99,101,114,116,100, +105,97,103,114,97,109,100,111,108,108,97,114,115,99,108,117,115,116,101,114,112, +104,112,63,105,100,61,97,108,99,111,104,111,108,41,59,125,41,40,41,59,117,115, +105,110,103,32,97,62,60,115,112,97,110,62,118,101,115,115,101,108,115,114,101, +118,105,118,97,108,65,100,100,114,101,115,115,97,109,97,116,101,117,114,97,110, +100,114,111,105,100,97,108,108,101,103,101,100,105,108,108,110,101,115,115,119, +97,108,107,105,110,103,99,101,110,116,101,114,115,113,117,97,108,105,102,121,109 +,97,116,99,104,101,115,117,110,105,102,105,101,100,101,120,116,105,110,99,116,68 +,101,102,101,110,115,101,100,105,101,100,32,105,110,10,9,60,33,45,45,32,99,117, +115,116,111,109,115,108,105,110,107,105,110,103,76,105,116,116,108,101,32,66,111 +,111,107,32,111,102,101,118,101,110,105,110,103,109,105,110,46,106,115,63,97,114 +,101,32,116,104,101,107,111,110,116,97,107,116,116,111,100,97,121,39,115,46,104, +116,109,108,34,32,116,97,114,103,101,116,61,119,101,97,114,105,110,103,65,108, +108,32,82,105,103,59,10,125,41,40,41,59,114,97,105,115,105,110,103,32,65,108,115 +,111,44,32,99,114,117,99,105,97,108,97,98,111,117,116,34,62,100,101,99,108,97, +114,101,45,45,62,10,60,115,99,102,105,114,101,102,111,120,97,115,32,109,117,99, +104,97,112,112,108,105,101,115,105,110,100,101,120,44,32,115,44,32,98,117,116,32 +,116,121,112,101,32,61,32,10,13,10,60,33,45,45,116,111,119,97,114,100,115,82,101 +,99,111,114,100,115,80,114,105,118,97,116,101,70,111,114,101,105,103,110,80,114, +101,109,105,101,114,99,104,111,105,99,101,115,86,105,114,116,117,97,108,114,101, +116,117,114,110,115,67,111,109,109,101,110,116,80,111,119,101,114,101,100,105, +110,108,105,110,101,59,112,111,118,101,114,116,121,99,104,97,109,98,101,114,76, +105,118,105,110,103,32,118,111,108,117,109,101,115,65,110,116,104,111,110,121, +108,111,103,105,110,34,32,82,101,108,97,116,101,100,69,99,111,110,111,109,121, +114,101,97,99,104,101,115,99,117,116,116,105,110,103,103,114,97,118,105,116,121, +108,105,102,101,32,105,110,67,104,97,112,116,101,114,45,115,104,97,100,111,119, +78,111,116,97,98,108,101,60,47,116,100,62,13,10,32,114,101,116,117,114,110,115, +116,97,100,105,117,109,119,105,100,103,101,116,115,118,97,114,121,105,110,103, +116,114,97,118,101,108,115,104,101,108,100,32,98,121,119,104,111,32,97,114,101, +119,111,114,107,32,105,110,102,97,99,117,108,116,121,97,110,103,117,108,97,114, +119,104,111,32,104,97,100,97,105,114,112,111,114,116,116,111,119,110,32,111,102, +10,10,83,111,109,101,32,39,99,108,105,99,107,39,99,104,97,114,103,101,115,107, +101,121,119,111,114,100,105,116,32,119,105,108,108,99,105,116,121,32,111,102,40, +116,104,105,115,41,59,65,110,100,114,101,119,32,117,110,105,113,117,101,32,99, +104,101,99,107,101,100,111,114,32,109,111,114,101,51,48,48,112,120,59,32,114,101 +,116,117,114,110,59,114,115,105,111,110,61,34,112,108,117,103,105,110,115,119, +105,116,104,105,110,32,104,101,114,115,101,108,102,83,116,97,116,105,111,110,70, +101,100,101,114,97,108,118,101,110,116,117,114,101,112,117,98,108,105,115,104, +115,101,110,116,32,116,111,116,101,110,115,105,111,110,97,99,116,114,101,115,115 +,99,111,109,101,32,116,111,102,105,110,103,101,114,115,68,117,107,101,32,111,102 +,112,101,111,112,108,101,44,101,120,112,108,111,105,116,119,104,97,116,32,105, +115,104,97,114,109,111,110,121,97,32,109,97,106,111,114,34,58,34,104,116,116,112 +,105,110,32,104,105,115,32,109,101,110,117,34,62,10,109,111,110,116,104,108,121, +111,102,102,105,99,101,114,99,111,117,110,99,105,108,103,97,105,110,105,110,103, +101,118,101,110,32,105,110,83,117,109,109,97,114,121,100,97,116,101,32,111,102, +108,111,121,97,108,116,121,102,105,116,110,101,115,115,97,110,100,32,119,97,115, +101,109,112,101,114,111,114,115,117,112,114,101,109,101,83,101,99,111,110,100,32 +,104,101,97,114,105,110,103,82,117,115,115,105,97,110,108,111,110,103,101,115, +116,65,108,98,101,114,116,97,108,97,116,101,114,97,108,115,101,116,32,111,102,32 +,115,109,97,108,108,34,62,46,97,112,112,101,110,100,100,111,32,119,105,116,104, +102,101,100,101,114,97,108,98,97,110,107,32,111,102,98,101,110,101,97,116,104,68 +,101,115,112,105,116,101,67,97,112,105,116,97,108,103,114,111,117,110,100,115,41 +,44,32,97,110,100,32,112,101,114,99,101,110,116,105,116,32,102,114,111,109,99, +108,111,115,105,110,103,99,111,110,116,97,105,110,73,110,115,116,101,97,100,102, +105,102,116,101,101,110,97,115,32,119,101,108,108,46,121,97,104,111,111,46,114, +101,115,112,111,110,100,102,105,103,104,116,101,114,111,98,115,99,117,114,101, +114,101,102,108,101,99,116,111,114,103,97,110,105,99,61,32,77,97,116,104,46,101, +100,105,116,105,110,103,111,110,108,105,110,101,32,112,97,100,100,105,110,103,97 +,32,119,104,111,108,101,111,110,101,114,114,111,114,121,101,97,114,32,111,102, +101,110,100,32,111,102,32,98,97,114,114,105,101,114,119,104,101,110,32,105,116, +104,101,97,100,101,114,32,104,111,109,101,32,111,102,114,101,115,117,109,101,100 +,114,101,110,97,109,101,100,115,116,114,111,110,103,62,104,101,97,116,105,110, +103,114,101,116,97,105,110,115,99,108,111,117,100,102,114,119,97,121,32,111,102, +32,77,97,114,99,104,32,49,107,110,111,119,105,110,103,105,110,32,112,97,114,116, +66,101,116,119,101,101,110,108,101,115,115,111,110,115,99,108,111,115,101,115, +116,118,105,114,116,117,97,108,108,105,110,107,115,34,62,99,114,111,115,115,101, +100,69,78,68,32,45,45,62,102,97,109,111,117,115,32,97,119,97,114,100,101,100,76, +105,99,101,110,115,101,72,101,97,108,116,104,32,102,97,105,114,108,121,32,119, +101,97,108,116,104,121,109,105,110,105,109,97,108,65,102,114,105,99,97,110,99, +111,109,112,101,116,101,108,97,98,101,108,34,62,115,105,110,103,105,110,103,102, +97,114,109,101,114,115,66,114,97,115,105,108,41,100,105,115,99,117,115,115,114, +101,112,108,97,99,101,71,114,101,103,111,114,121,102,111,110,116,32,99,111,112, +117,114,115,117,101,100,97,112,112,101,97,114,115,109,97,107,101,32,117,112,114, +111,117,110,100,101,100,98,111,116,104,32,111,102,98,108,111,99,107,101,100,115, +97,119,32,116,104,101,111,102,102,105,99,101,115,99,111,108,111,117,114,115,105, +102,40,100,111,99,117,119,104,101,110,32,104,101,101,110,102,111,114,99,101,112, +117,115,104,40,102,117,65,117,103,117,115,116,32,85,84,70,45,56,34,62,70,97,110, +116,97,115,121,105,110,32,109,111,115,116,105,110,106,117,114,101,100,85,115,117 +,97,108,108,121,102,97,114,109,105,110,103,99,108,111,115,117,114,101,111,98,106 +,101,99,116,32,100,101,102,101,110,99,101,117,115,101,32,111,102,32,77,101,100, +105,99,97,108,60,98,111,100,121,62,10,101,118,105,100,101,110,116,98,101,32,117, +115,101,100,107,101,121,67,111,100,101,115,105,120,116,101,101,110,73,115,108,97 +,109,105,99,35,48,48,48,48,48,48,101,110,116,105,114,101,32,119,105,100,101,108, +121,32,97,99,116,105,118,101,32,40,116,121,112,101,111,102,111,110,101,32,99,97, +110,99,111,108,111,114,32,61,115,112,101,97,107,101,114,101,120,116,101,110,100, +115,80,104,121,115,105,99,115,116,101,114,114,97,105,110,60,116,98,111,100,121, +62,102,117,110,101,114,97,108,118,105,101,119,105,110,103,109,105,100,100,108, +101,32,99,114,105,99,107,101,116,112,114,111,112,104,101,116,115,104,105,102,116 +,101,100,100,111,99,116,111,114,115,82,117,115,115,101,108,108,32,116,97,114,103 +,101,116,99,111,109,112,97,99,116,97,108,103,101,98,114,97,115,111,99,105,97,108 +,45,98,117,108,107,32,111,102,109,97,110,32,97,110,100,60,47,116,100,62,10,32, +104,101,32,108,101,102,116,41,46,118,97,108,40,41,102,97,108,115,101,41,59,108, +111,103,105,99,97,108,98,97,110,107,105,110,103,104,111,109,101,32,116,111,110, +97,109,105,110,103,32,65,114,105,122,111,110,97,99,114,101,100,105,116,115,41,59 +,10,125,41,59,10,102,111,117,110,100,101,114,105,110,32,116,117,114,110,67,111, +108,108,105,110,115,98,101,102,111,114,101,32,66,117,116,32,116,104,101,99,104, +97,114,103,101,100,84,105,116,108,101,34,62,67,97,112,116,97,105,110,115,112,101 +,108,108,101,100,103,111,100,100,101,115,115,84,97,103,32,45,45,62,65,100,100, +105,110,103,58,98,117,116,32,119,97,115,82,101,99,101,110,116,32,112,97,116,105, +101,110,116,98,97,99,107,32,105,110,61,102,97,108,115,101,38,76,105,110,99,111, +108,110,119,101,32,107,110,111,119,67,111,117,110,116,101,114,74,117,100,97,105, +115,109,115,99,114,105,112,116,32,97,108,116,101,114,101,100,39,93,41,59,10,32, +32,104,97,115,32,116,104,101,117,110,99,108,101,97,114,69,118,101,110,116,39,44, +98,111,116,104,32,105,110,110,111,116,32,97,108,108,10,10,60,33,45,45,32,112,108 +,97,99,105,110,103,104,97,114,100,32,116,111,32,99,101,110,116,101,114,115,111, +114,116,32,111,102,99,108,105,101,110,116,115,115,116,114,101,101,116,115,66,101 +,114,110,97,114,100,97,115,115,101,114,116,115,116,101,110,100,32,116,111,102,97 +,110,116,97,115,121,100,111,119,110,32,105,110,104,97,114,98,111,117,114,70,114, +101,101,100,111,109,106,101,119,101,108,114,121,47,97,98,111,117,116,46,46,115, +101,97,114,99,104,108,101,103,101,110,100,115,105,115,32,109,97,100,101,109,111, +100,101,114,110,32,111,110,108,121,32,111,110,111,110,108,121,32,116,111,105,109 +,97,103,101,34,32,108,105,110,101,97,114,32,112,97,105,110,116,101,114,97,110, +100,32,110,111,116,114,97,114,101,108,121,32,97,99,114,111,110,121,109,100,101, +108,105,118,101,114,115,104,111,114,116,101,114,48,48,38,97,109,112,59,97,115,32 +,109,97,110,121,119,105,100,116,104,61,34,47,42,32,60,33,91,67,116,105,116,108, +101,32,61,111,102,32,116,104,101,32,108,111,119,101,115,116,32,112,105,99,107, +101,100,32,101,115,99,97,112,101,100,117,115,101,115,32,111,102,112,101,111,112, +108,101,115,32,80,117,98,108,105,99,77,97,116,116,104,101,119,116,97,99,116,105, +99,115,100,97,109,97,103,101,100,119,97,121,32,102,111,114,108,97,119,115,32,111 +,102,101,97,115,121,32,116,111,32,119,105,110,100,111,119,115,116,114,111,110, +103,32,32,115,105,109,112,108,101,125,99,97,116,99,104,40,115,101,118,101,110, +116,104,105,110,102,111,98,111,120,119,101,110,116,32,116,111,112,97,105,110,116 +,101,100,99,105,116,105,122,101,110,73,32,100,111,110,39,116,114,101,116,114,101 +,97,116,46,32,83,111,109,101,32,119,119,46,34,41,59,10,98,111,109,98,105,110,103 +,109,97,105,108,116,111,58,109,97,100,101,32,105,110,46,32,77,97,110,121,32,99, +97,114,114,105,101,115,124,124,123,125,59,119,105,119,111,114,107,32,111,102,115 +,121,110,111,110,121,109,100,101,102,101,97,116,115,102,97,118,111,114,101,100, +111,112,116,105,99,97,108,112,97,103,101,84,114,97,117,110,108,101,115,115,32, +115,101,110,100,105,110,103,108,101,102,116,34,62,60,99,111,109,83,99,111,114,65 +,108,108,32,116,104,101,106,81,117,101,114,121,46,116,111,117,114,105,115,116,67 +,108,97,115,115,105,99,102,97,108,115,101,34,32,87,105,108,104,101,108,109,115, +117,98,117,114,98,115,103,101,110,117,105,110,101,98,105,115,104,111,112,115,46, +115,112,108,105,116,40,103,108,111,98,97,108,32,102,111,108,108,111,119,115,98, +111,100,121,32,111,102,110,111,109,105,110,97,108,67,111,110,116,97,99,116,115, +101,99,117,108,97,114,108,101,102,116,32,116,111,99,104,105,101,102,108,121,45, +104,105,100,100,101,110,45,98,97,110,110,101,114,60,47,108,105,62,10,10,46,32,87 +,104,101,110,32,105,110,32,98,111,116,104,100,105,115,109,105,115,115,69,120,112 +,108,111,114,101,97,108,119,97,121,115,32,118,105,97,32,116,104,101,115,112,97, +195,177,111,108,119,101,108,102,97,114,101,114,117,108,105,110,103,32,97,114,114 +,97,110,103,101,99,97,112,116,97,105,110,104,105,115,32,115,111,110,114,117,108, +101,32,111,102,104,101,32,116,111,111,107,105,116,115,101,108,102,44,61,48,38,97 +,109,112,59,40,99,97,108,108,101,100,115,97,109,112,108,101,115,116,111,32,109, +97,107,101,99,111,109,47,112,97,103,77,97,114,116,105,110,32,75,101,110,110,101, +100,121,97,99,99,101,112,116,115,102,117,108,108,32,111,102,104,97,110,100,108, +101,100,66,101,115,105,100,101,115,47,47,45,45,62,60,47,97,98,108,101,32,116,111 +,116,97,114,103,101,116,115,101,115,115,101,110,99,101,104,105,109,32,116,111,32 +,105,116,115,32,98,121,32,99,111,109,109,111,110,46,109,105,110,101,114,97,108, +116,111,32,116,97,107,101,119,97,121,115,32,116,111,115,46,111,114,103,47,108,97 +,100,118,105,115,101,100,112,101,110,97,108,116,121,115,105,109,112,108,101,58, +105,102,32,116,104,101,121,76,101,116,116,101,114,115,97,32,115,104,111,114,116, +72,101,114,98,101,114,116,115,116,114,105,107,101,115,32,103,114,111,117,112,115 +,46,108,101,110,103,116,104,102,108,105,103,104,116,115,111,118,101,114,108,97, +112,115,108,111,119,108,121,32,108,101,115,115,101,114,32,115,111,99,105,97,108, +32,60,47,112,62,10,9,9,105,116,32,105,110,116,111,114,97,110,107,101,100,32,114, +97,116,101,32,111,102,117,108,62,13,10,32,32,97,116,116,101,109,112,116,112,97, +105,114,32,111,102,109,97,107,101,32,105,116,75,111,110,116,97,107,116,65,110, +116,111,110,105,111,104,97,118,105,110,103,32,114,97,116,105,110,103,115,32,97, +99,116,105,118,101,115,116,114,101,97,109,115,116,114,97,112,112,101,100,34,41, +46,99,115,115,40,104,111,115,116,105,108,101,108,101,97,100,32,116,111,108,105, +116,116,108,101,32,103,114,111,117,112,115,44,80,105,99,116,117,114,101,45,45,62 +,13,10,13,10,32,114,111,119,115,61,34,32,111,98,106,101,99,116,105,110,118,101, +114,115,101,60,102,111,111,116,101,114,67,117,115,116,111,109,86,62,60,92,47,115 +,99,114,115,111,108,118,105,110,103,67,104,97,109,98,101,114,115,108,97,118,101, +114,121,119,111,117,110,100,101,100,119,104,101,114,101,97,115,33,61,32,39,117, +110,100,102,111,114,32,97,108,108,112,97,114,116,108,121,32,45,114,105,103,104, +116,58,65,114,97,98,105,97,110,98,97,99,107,101,100,32,99,101,110,116,117,114, +121,117,110,105,116,32,111,102,109,111,98,105,108,101,45,69,117,114,111,112,101, +44,105,115,32,104,111,109,101,114,105,115,107,32,111,102,100,101,115,105,114,101 +,100,67,108,105,110,116,111,110,99,111,115,116,32,111,102,97,103,101,32,111,102, +32,98,101,99,111,109,101,32,110,111,110,101,32,111,102,112,38,113,117,111,116,59 +,77,105,100,100,108,101,32,101,97,100,39,41,91,48,67,114,105,116,105,99,115,115, +116,117,100,105,111,115,62,38,99,111,112,121,59,103,114,111,117,112,34,62,97,115 +,115,101,109,98,108,109,97,107,105,110,103,32,112,114,101,115,115,101,100,119, +105,100,103,101,116,46,112,115,58,34,32,63,32,114,101,98,117,105,108,116,98,121, +32,115,111,109,101,70,111,114,109,101,114,32,101,100,105,116,111,114,115,100,101 +,108,97,121,101,100,67,97,110,111,110,105,99,104,97,100,32,116,104,101,112,117, +115,104,105,110,103,99,108,97,115,115,61,34,98,117,116,32,97,114,101,112,97,114, +116,105,97,108,66,97,98,121,108,111,110,98,111,116,116,111,109,32,99,97,114,114, +105,101,114,67,111,109,109,97,110,100,105,116,115,32,117,115,101,65,115,32,119, +105,116,104,99,111,117,114,115,101,115,97,32,116,104,105,114,100,100,101,110,111 +,116,101,115,97,108,115,111,32,105,110,72,111,117,115,116,111,110,50,48,112,120, +59,34,62,97,99,99,117,115,101,100,100,111,117,98,108,101,32,103,111,97,108,32, +111,102,70,97,109,111,117,115,32,41,46,98,105,110,100,40,112,114,105,101,115,116 +,115,32,79,110,108,105,110,101,105,110,32,74,117,108,121,115,116,32,43,32,34,103 +,99,111,110,115,117,108,116,100,101,99,105,109,97,108,104,101,108,112,102,117, +108,114,101,118,105,118,101,100,105,115,32,118,101,114,121,114,39,43,39,105,112, +116,108,111,115,105,110,103,32,102,101,109,97,108,101,115,105,115,32,97,108,115, +111,115,116,114,105,110,103,115,100,97,121,115,32,111,102,97,114,114,105,118,97, +108,102,117,116,117,114,101,32,60,111,98,106,101,99,116,102,111,114,99,105,110, +103,83,116,114,105,110,103,40,34,32,47,62,10,9,9,104,101,114,101,32,105,115,101, +110,99,111,100,101,100,46,32,32,84,104,101,32,98,97,108,108,111,111,110,100,111, +110,101,32,98,121,47,99,111,109,109,111,110,98,103,99,111,108,111,114,108,97,119 +,32,111,102,32,73,110,100,105,97,110,97,97,118,111,105,100,101,100,98,117,116,32 +,116,104,101,50,112,120,32,51,112,120,106,113,117,101,114,121,46,97,102,116,101, +114,32,97,112,111,108,105,99,121,46,109,101,110,32,97,110,100,102,111,111,116, +101,114,45,61,32,116,114,117,101,59,102,111,114,32,117,115,101,115,99,114,101, +101,110,46,73,110,100,105,97,110,32,105,109,97,103,101,32,61,102,97,109,105,108, +121,44,104,116,116,112,58,47,47,32,38,110,98,115,112,59,100,114,105,118,101,114, +115,101,116,101,114,110,97,108,115,97,109,101,32,97,115,110,111,116,105,99,101, +100,118,105,101,119,101,114,115,125,41,40,41,59,10,32,105,115,32,109,111,114,101 +,115,101,97,115,111,110,115,102,111,114,109,101,114,32,116,104,101,32,110,101, +119,105,115,32,106,117,115,116,99,111,110,115,101,110,116,32,83,101,97,114,99, +104,119,97,115,32,116,104,101,119,104,121,32,116,104,101,115,104,105,112,112,101 +,100,98,114,62,60,98,114,62,119,105,100,116,104,58,32,104,101,105,103,104,116,61 +,109,97,100,101,32,111,102,99,117,105,115,105,110,101,105,115,32,116,104,97,116, +97,32,118,101,114,121,32,65,100,109,105,114,97,108,32,102,105,120,101,100,59,110 +,111,114,109,97,108,32,77,105,115,115,105,111,110,80,114,101,115,115,44,32,111, +110,116,97,114,105,111,99,104,97,114,115,101,116,116,114,121,32,116,111,32,105, +110,118,97,100,101,100,61,34,116,114,117,101,34,115,112,97,99,105,110,103,105, +115,32,109,111,115,116,97,32,109,111,114,101,32,116,111,116,97,108,108,121,102, +97,108,108,32,111,102,125,41,59,13,10,32,32,105,109,109,101,110,115,101,116,105, +109,101,32,105,110,115,101,116,32,111,117,116,115,97,116,105,115,102,121,116,111 +,32,102,105,110,100,100,111,119,110,32,116,111,108,111,116,32,111,102,32,80,108, +97,121,101,114,115,105,110,32,74,117,110,101,113,117,97,110,116,117,109,110,111, +116,32,116,104,101,116,105,109,101,32,116,111,100,105,115,116,97,110,116,70,105, +110,110,105,115,104,115,114,99,32,61,32,40,115,105,110,103,108,101,32,104,101, +108,112,32,111,102,71,101,114,109,97,110,32,108,97,119,32,97,110,100,108,97,98, +101,108,101,100,102,111,114,101,115,116,115,99,111,111,107,105,110,103,115,112, +97,99,101,34,62,104,101,97,100,101,114,45,119,101,108,108,32,97,115,83,116,97, +110,108,101,121,98,114,105,100,103,101,115,47,103,108,111,98,97,108,67,114,111, +97,116,105,97,32,65,98,111,117,116,32,91,48,93,59,10,32,32,105,116,44,32,97,110, +100,103,114,111,117,112,101,100,98,101,105,110,103,32,97,41,123,116,104,114,111, +119,104,101,32,109,97,100,101,108,105,103,104,116,101,114,101,116,104,105,99,97, +108,70,70,70,70,70,70,34,98,111,116,116,111,109,34,108,105,107,101,32,97,32,101, +109,112,108,111,121,115,108,105,118,101,32,105,110,97,115,32,115,101,101,110,112 +,114,105,110,116,101,114,109,111,115,116,32,111,102,117,98,45,108,105,110,107, +114,101,106,101,99,116,115,97,110,100,32,117,115,101,105,109,97,103,101,34,62, +115,117,99,99,101,101,100,102,101,101,100,105,110,103,78,117,99,108,101,97,114, +105,110,102,111,114,109,97,116,111,32,104,101,108,112,87,111,109,101,110,39,115, +78,101,105,116,104,101,114,77,101,120,105,99,97,110,112,114,111,116,101,105,110, +60,116,97,98,108,101,32,98,121,32,109,97,110,121,104,101,97,108,116,104,121,108, +97,119,115,117,105,116,100,101,118,105,115,101,100,46,112,117,115,104,40,123,115 +,101,108,108,101,114,115,115,105,109,112,108,121,32,84,104,114,111,117,103,104, +46,99,111,111,107,105,101,32,73,109,97,103,101,40,111,108,100,101,114,34,62,117, +115,46,106,115,34,62,32,83,105,110,99,101,32,117,110,105,118,101,114,115,108,97, +114,103,101,114,32,111,112,101,110,32,116,111,33,45,45,32,101,110,100,108,105, +101,115,32,105,110,39,93,41,59,13,10,32,32,109,97,114,107,101,116,119,104,111,32 +,105,115,32,40,34,68,79,77,67,111,109,97,110,97,103,101,100,111,110,101,32,102, +111,114,116,121,112,101,111,102,32,75,105,110,103,100,111,109,112,114,111,102, +105,116,115,112,114,111,112,111,115,101,116,111,32,115,104,111,119,99,101,110, +116,101,114,59,109,97,100,101,32,105,116,100,114,101,115,115,101,100,119,101,114 +,101,32,105,110,109,105,120,116,117,114,101,112,114,101,99,105,115,101,97,114, +105,115,105,110,103,115,114,99,32,61,32,39,109,97,107,101,32,97,32,115,101,99, +117,114,101,100,66,97,112,116,105,115,116,118,111,116,105,110,103,32,10,9,9,118, +97,114,32,77,97,114,99,104,32,50,103,114,101,119,32,117,112,67,108,105,109,97, +116,101,46,114,101,109,111,118,101,115,107,105,108,108,101,100,119,97,121,32,116 +,104,101,60,47,104,101,97,100,62,102,97,99,101,32,111,102,97,99,116,105,110,103, +32,114,105,103,104,116,34,62,116,111,32,119,111,114,107,114,101,100,117,99,101, +115,104,97,115,32,104,97,100,101,114,101,99,116,101,100,115,104,111,119,40,41,59 +,97,99,116,105,111,110,61,98,111,111,107,32,111,102,97,110,32,97,114,101,97,61, +61,32,34,104,116,116,60,104,101,97,100,101,114,10,60,104,116,109,108,62,99,111, +110,102,111,114,109,102,97,99,105,110,103,32,99,111,111,107,105,101,46,114,101, +108,121,32,111,110,104,111,115,116,101,100,32,46,99,117,115,116,111,109,104,101, +32,119,101,110,116,98,117,116,32,102,111,114,115,112,114,101,97,100,32,70,97,109 +,105,108,121,32,97,32,109,101,97,110,115,111,117,116,32,116,104,101,102,111,114, +117,109,115,46,102,111,111,116,97,103,101,34,62,77,111,98,105,108,67,108,101,109 +,101,110,116,115,34,32,105,100,61,34,97,115,32,104,105,103,104,105,110,116,101, +110,115,101,45,45,62,60,33,45,45,102,101,109,97,108,101,32,105,115,32,115,101, +101,110,105,109,112,108,105,101,100,115,101,116,32,116,104,101,97,32,115,116,97, +116,101,97,110,100,32,104,105,115,102,97,115,116,101,115,116,98,101,115,105,100, +101,115,98,117,116,116,111,110,95,98,111,117,110,100,101,100,34,62,60,105,109, +103,32,73,110,102,111,98,111,120,101,118,101,110,116,115,44,97,32,121,111,117, +110,103,97,110,100,32,97,114,101,78,97,116,105,118,101,32,99,104,101,97,112,101, +114,84,105,109,101,111,117,116,97,110,100,32,104,97,115,101,110,103,105,110,101, +115,119,111,110,32,116,104,101,40,109,111,115,116,108,121,114,105,103,104,116,58 +,32,102,105,110,100,32,97,32,45,98,111,116,116,111,109,80,114,105,110,99,101,32, +97,114,101,97,32,111,102,109,111,114,101,32,111,102,115,101,97,114,99,104,95,110 +,97,116,117,114,101,44,108,101,103,97,108,108,121,112,101,114,105,111,100,44,108 +,97,110,100,32,111,102,111,114,32,119,105,116,104,105,110,100,117,99,101,100,112 +,114,111,118,105,110,103,109,105,115,115,105,108,101,108,111,99,97,108,108,121, +65,103,97,105,110,115,116,116,104,101,32,119,97,121,107,38,113,117,111,116,59, +112,120,59,34,62,13,10,112,117,115,104,101,100,32,97,98,97,110,100,111,110,110, +117,109,101,114,97,108,67,101,114,116,97,105,110,73,110,32,116,104,105,115,109, +111,114,101,32,105,110,111,114,32,115,111,109,101,110,97,109,101,32,105,115,97, +110,100,44,32,105,110,99,114,111,119,110,101,100,73,83,66,78,32,48,45,99,114,101 +,97,116,101,115,79,99,116,111,98,101,114,109,97,121,32,110,111,116,99,101,110, +116,101,114,32,108,97,116,101,32,105,110,68,101,102,101,110,99,101,101,110,97,99 +,116,101,100,119,105,115,104,32,116,111,98,114,111,97,100,108,121,99,111,111,108 +,105,110,103,111,110,108,111,97,100,61,105,116,46,32,84,104,101,114,101,99,111, +118,101,114,77,101,109,98,101,114,115,104,101,105,103,104,116,32,97,115,115,117, +109,101,115,60,104,116,109,108,62,10,112,101,111,112,108,101,46,105,110,32,111, +110,101,32,61,119,105,110,100,111,119,102,111,111,116,101,114,95,97,32,103,111, +111,100,32,114,101,107,108,97,109,97,111,116,104,101,114,115,44,116,111,32,116, +104,105,115,95,99,111,111,107,105,101,112,97,110,101,108,34,62,76,111,110,100, +111,110,44,100,101,102,105,110,101,115,99,114,117,115,104,101,100,98,97,112,116, +105,115,109,99,111,97,115,116,97,108,115,116,97,116,117,115,32,116,105,116,108, +101,34,32,109,111,118,101,32,116,111,108,111,115,116,32,105,110,98,101,116,116, +101,114,32,105,109,112,108,105,101,115,114,105,118,97,108,114,121,115,101,114, +118,101,114,115,32,83,121,115,116,101,109,80,101,114,104,97,112,115,101,115,32, +97,110,100,32,99,111,110,116,101,110,100,102,108,111,119,105,110,103,108,97,115, +116,101,100,32,114,105,115,101,32,105,110,71,101,110,101,115,105,115,118,105,101 +,119,32,111,102,114,105,115,105,110,103,32,115,101,101,109,32,116,111,98,117,116 +,32,105,110,32,98,97,99,107,105,110,103,104,101,32,119,105,108,108,103,105,118, +101,110,32,97,103,105,118,105,110,103,32,99,105,116,105,101,115,46,102,108,111, +119,32,111,102,32,76,97,116,101,114,32,97,108,108,32,98,117,116,72,105,103,104, +119,97,121,111,110,108,121,32,98,121,115,105,103,110,32,111,102,104,101,32,100, +111,101,115,100,105,102,102,101,114,115,98,97,116,116,101,114,121,38,97,109,112, +59,108,97,115,105,110,103,108,101,115,116,104,114,101,97,116,115,105,110,116,101 +,103,101,114,116,97,107,101,32,111,110,114,101,102,117,115,101,100,99,97,108,108 +,101,100,32,61,85,83,38,97,109,112,83,101,101,32,116,104,101,110,97,116,105,118, +101,115,98,121,32,116,104,105,115,115,121,115,116,101,109,46,104,101,97,100,32, +111,102,58,104,111,118,101,114,44,108,101,115,98,105,97,110,115,117,114,110,97, +109,101,97,110,100,32,97,108,108,99,111,109,109,111,110,47,104,101,97,100,101, +114,95,95,112,97,114,97,109,115,72,97,114,118,97,114,100,47,112,105,120,101,108, +46,114,101,109,111,118,97,108,115,111,32,108,111,110,103,114,111,108,101,32,111, +102,106,111,105,110,116,108,121,115,107,121,115,99,114,97,85,110,105,99,111,100, +101,98,114,32,47,62,13,10,65,116,108,97,110,116,97,110,117,99,108,101,117,115,67 +,111,117,110,116,121,44,112,117,114,101,108,121,32,99,111,117,110,116,34,62,101, +97,115,105,108,121,32,98,117,105,108,100,32,97,111,110,99,108,105,99,107,97,32, +103,105,118,101,110,112,111,105,110,116,101,114,104,38,113,117,111,116,59,101, +118,101,110,116,115,32,101,108,115,101,32,123,10,100,105,116,105,111,110,115,110 +,111,119,32,116,104,101,44,32,119,105,116,104,32,109,97,110,32,119,104,111,111, +114,103,47,87,101,98,111,110,101,32,97,110,100,99,97,118,97,108,114,121,72,101, +32,100,105,101,100,115,101,97,116,116,108,101,48,48,44,48,48,48,32,123,119,105, +110,100,111,119,104,97,118,101,32,116,111,105,102,40,119,105,110,100,97,110,100, +32,105,116,115,115,111,108,101,108,121,32,109,38,113,117,111,116,59,114,101,110, +101,119,101,100,68,101,116,114,111,105,116,97,109,111,110,103,115,116,101,105, +116,104,101,114,32,116,104,101,109,32,105,110,83,101,110,97,116,111,114,85,115, +60,47,97,62,60,75,105,110,103,32,111,102,70,114,97,110,99,105,115,45,112,114,111 +,100,117,99,104,101,32,117,115,101,100,97,114,116,32,97,110,100,104,105,109,32, +97,110,100,117,115,101,100,32,98,121,115,99,111,114,105,110,103,97,116,32,104, +111,109,101,116,111,32,104,97,118,101,114,101,108,97,116,101,115,105,98,105,108, +105,116,121,102,97,99,116,105,111,110,66,117,102,102,97,108,111,108,105,110,107, +34,62,60,119,104,97,116,32,104,101,102,114,101,101,32,116,111,67,105,116,121,32, +111,102,99,111,109,101,32,105,110,115,101,99,116,111,114,115,99,111,117,110,116, +101,100,111,110,101,32,100,97,121,110,101,114,118,111,117,115,115,113,117,97,114 +,101,32,125,59,105,102,40,103,111,105,110,32,119,104,97,116,105,109,103,34,32,97 +,108,105,115,32,111,110,108,121,115,101,97,114,99,104,47,116,117,101,115,100,97, +121,108,111,111,115,101,108,121,83,111,108,111,109,111,110,115,101,120,117,97, +108,32,45,32,60,97,32,104,114,109,101,100,105,117,109,34,68,79,32,78,79,84,32,70 +,114,97,110,99,101,44,119,105,116,104,32,97,32,119,97,114,32,97,110,100,115,101, +99,111,110,100,32,116,97,107,101,32,97,32,62,13,10,13,10,13,10,109,97,114,107, +101,116,46,104,105,103,104,119,97,121,100,111,110,101,32,105,110,99,116,105,118, +105,116,121,34,108,97,115,116,34,62,111,98,108,105,103,101,100,114,105,115,101, +32,116,111,34,117,110,100,101,102,105,109,97,100,101,32,116,111,32,69,97,114,108 +,121,32,112,114,97,105,115,101,100,105,110,32,105,116,115,32,102,111,114,32,104, +105,115,97,116,104,108,101,116,101,74,117,112,105,116,101,114,89,97,104,111,111, +33,32,116,101,114,109,101,100,32,115,111,32,109,97,110,121,114,101,97,108,108, +121,32,115,46,32,84,104,101,32,97,32,119,111,109,97,110,63,118,97,108,117,101,61 +,100,105,114,101,99,116,32,114,105,103,104,116,34,32,98,105,99,121,99,108,101,97 +,99,105,110,103,61,34,100,97,121,32,97,110,100,115,116,97,116,105,110,103,82,97, +116,104,101,114,44,104,105,103,104,101,114,32,79,102,102,105,99,101,32,97,114, +101,32,110,111,119,116,105,109,101,115,44,32,119,104,101,110,32,97,32,112,97,121 +,32,102,111,114,111,110,32,116,104,105,115,45,108,105,110,107,34,62,59,98,111, +114,100,101,114,97,114,111,117,110,100,32,97,110,110,117,97,108,32,116,104,101, +32,78,101,119,112,117,116,32,116,104,101,46,99,111,109,34,32,116,97,107,105,110, +32,116,111,97,32,98,114,105,101,102,40,105,110,32,116,104,101,103,114,111,117, +112,115,46,59,32,119,105,100,116,104,101,110,122,121,109,101,115,115,105,109,112 +,108,101,32,105,110,32,108,97,116,101,123,114,101,116,117,114,110,116,104,101, +114,97,112,121,97,32,112,111,105,110,116,98,97,110,110,105,110,103,105,110,107, +115,34,62,10,40,41,59,34,32,114,101,97,32,112,108,97,99,101,92,117,48,48,51,67, +97,97,98,111,117,116,32,97,116,114,62,13,10,9,9,99,99,111,117,110,116,32,103,105 +,118,101,115,32,97,60,83,67,82,73,80,84,82,97,105,108,119,97,121,116,104,101,109 +,101,115,47,116,111,111,108,98,111,120,66,121,73,100,40,34,120,104,117,109,97, +110,115,44,119,97,116,99,104,101,115,105,110,32,115,111,109,101,32,105,102,32,40 +,119,105,99,111,109,105,110,103,32,102,111,114,109,97,116,115,32,85,110,100,101, +114,32,98,117,116,32,104,97,115,104,97,110,100,101,100,32,109,97,100,101,32,98, +121,116,104,97,110,32,105,110,102,101,97,114,32,111,102,100,101,110,111,116,101, +100,47,105,102,114,97,109,101,108,101,102,116,32,105,110,118,111,108,116,97,103, +101,105,110,32,101,97,99,104,97,38,113,117,111,116,59,98,97,115,101,32,111,102, +73,110,32,109,97,110,121,117,110,100,101,114,103,111,114,101,103,105,109,101,115 +,97,99,116,105,111,110,32,60,47,112,62,13,10,60,117,115,116,111,109,86,97,59,38, +103,116,59,60,47,105,109,112,111,114,116,115,111,114,32,116,104,97,116,109,111, +115,116,108,121,32,38,97,109,112,59,114,101,32,115,105,122,101,61,34,60,47,97,62 +,60,47,104,97,32,99,108,97,115,115,112,97,115,115,105,118,101,72,111,115,116,32, +61,32,87,104,101,116,104,101,114,102,101,114,116,105,108,101,86,97,114,105,111, +117,115,61,91,93,59,40,102,117,99,97,109,101,114,97,115,47,62,60,47,116,100,62, +97,99,116,115,32,97,115,73,110,32,115,111,109,101,62,13,10,13,10,60,33,111,114, +103,97,110,105,115,32,60,98,114,32,47,62,66,101,105,106,105,110,103,99,97,116,97 +,108,195,160,100,101,117,116,115,99,104,101,117,114,111,112,101,117,101,117,115, +107,97,114,97,103,97,101,105,108,103,101,115,118,101,110,115,107,97,101,115,112, +97,195,177,97,109,101,110,115,97,106,101,117,115,117,97,114,105,111,116,114,97, +98,97,106,111,109,195,169,120,105,99,111,112,195,161,103,105,110,97,115,105,101, +109,112,114,101,115,105,115,116,101,109,97,111,99,116,117,98,114,101,100,117,114 +,97,110,116,101,97,195,177,97,100,105,114,101,109,112,114,101,115,97,109,111,109 +,101,110,116,111,110,117,101,115,116,114,111,112,114,105,109,101,114,97,116,114, +97,118,195,169,115,103,114,97,99,105,97,115,110,117,101,115,116,114,97,112,114, +111,99,101,115,111,101,115,116,97,100,111,115,99,97,108,105,100,97,100,112,101, +114,115,111,110,97,110,195,186,109,101,114,111,97,99,117,101,114,100,111,109,195 +,186,115,105,99,97,109,105,101,109,98,114,111,111,102,101,114,116,97,115,97,108, +103,117,110,111,115,112,97,195,173,115,101,115,101,106,101,109,112,108,111,100, +101,114,101,99,104,111,97,100,101,109,195,161,115,112,114,105,118,97,100,111,97, +103,114,101,103,97,114,101,110,108,97,99,101,115,112,111,115,105,98,108,101,104, +111,116,101,108,101,115,115,101,118,105,108,108,97,112,114,105,109,101,114,111, +195,186,108,116,105,109,111,101,118,101,110,116,111,115,97,114,99,104,105,118, +111,99,117,108,116,117,114,97,109,117,106,101,114,101,115,101,110,116,114,97,100 +,97,97,110,117,110,99,105,111,101,109,98,97,114,103,111,109,101,114,99,97,100, +111,103,114,97,110,100,101,115,101,115,116,117,100,105,111,109,101,106,111,114, +101,115,102,101,98,114,101,114,111,100,105,115,101,195,177,111,116,117,114,105, +115,109,111,99,195,179,100,105,103,111,112,111,114,116,97,100,97,101,115,112,97, +99,105,111,102,97,109,105,108,105,97,97,110,116,111,110,105,111,112,101,114,109, +105,116,101,103,117,97,114,100,97,114,97,108,103,117,110,97,115,112,114,101,99, +105,111,115,97,108,103,117,105,101,110,115,101,110,116,105,100,111,118,105,115, +105,116,97,115,116,195,173,116,117,108,111,99,111,110,111,99,101,114,115,101,103 +,117,110,100,111,99,111,110,115,101,106,111,102,114,97,110,99,105,97,109,105,110 +,117,116,111,115,115,101,103,117,110,100,97,116,101,110,101,109,111,115,101,102, +101,99,116,111,115,109,195,161,108,97,103,97,115,101,115,105,195,179,110,114,101 +,118,105,115,116,97,103,114,97,110,97,100,97,99,111,109,112,114,97,114,105,110, +103,114,101,115,111,103,97,114,99,195,173,97,97,99,99,105,195,179,110,101,99,117 +,97,100,111,114,113,117,105,101,110,101,115,105,110,99,108,117,115,111,100,101, +98,101,114,195,161,109,97,116,101,114,105,97,104,111,109,98,114,101,115,109,117, +101,115,116,114,97,112,111,100,114,195,173,97,109,97,195,177,97,110,97,195,186, +108,116,105,109,97,101,115,116,97,109,111,115,111,102,105,99,105,97,108,116,97, +109,98,105,101,110,110,105,110,103,195,186,110,115,97,108,117,100,111,115,112, +111,100,101,109,111,115,109,101,106,111,114,97,114,112,111,115,105,116,105,111, +110,98,117,115,105,110,101,115,115,104,111,109,101,112,97,103,101,115,101,99,117 +,114,105,116,121,108,97,110,103,117,97,103,101,115,116,97,110,100,97,114,100,99, +97,109,112,97,105,103,110,102,101,97,116,117,114,101,115,99,97,116,101,103,111, +114,121,101,120,116,101,114,110,97,108,99,104,105,108,100,114,101,110,114,101, +115,101,114,118,101,100,114,101,115,101,97,114,99,104,101,120,99,104,97,110,103, +101,102,97,118,111,114,105,116,101,116,101,109,112,108,97,116,101,109,105,108, +105,116,97,114,121,105,110,100,117,115,116,114,121,115,101,114,118,105,99,101, +115,109,97,116,101,114,105,97,108,112,114,111,100,117,99,116,115,122,45,105,110, +100,101,120,58,99,111,109,109,101,110,116,115,115,111,102,116,119,97,114,101,99, +111,109,112,108,101,116,101,99,97,108,101,110,100,97,114,112,108,97,116,102,111, +114,109,97,114,116,105,99,108,101,115,114,101,113,117,105,114,101,100,109,111, +118,101,109,101,110,116,113,117,101,115,116,105,111,110,98,117,105,108,100,105, +110,103,112,111,108,105,116,105,99,115,112,111,115,115,105,98,108,101,114,101, +108,105,103,105,111,110,112,104,121,115,105,99,97,108,102,101,101,100,98,97,99, +107,114,101,103,105,115,116,101,114,112,105,99,116,117,114,101,115,100,105,115, +97,98,108,101,100,112,114,111,116,111,99,111,108,97,117,100,105,101,110,99,101, +115,101,116,116,105,110,103,115,97,99,116,105,118,105,116,121,101,108,101,109, +101,110,116,115,108,101,97,114,110,105,110,103,97,110,121,116,104,105,110,103,97 +,98,115,116,114,97,99,116,112,114,111,103,114,101,115,115,111,118,101,114,118, +105,101,119,109,97,103,97,122,105,110,101,101,99,111,110,111,109,105,99,116,114, +97,105,110,105,110,103,112,114,101,115,115,117,114,101,118,97,114,105,111,117, +115,32,60,115,116,114,111,110,103,62,112,114,111,112,101,114,116,121,115,104,111 +,112,112,105,110,103,116,111,103,101,116,104,101,114,97,100,118,97,110,99,101, +100,98,101,104,97,118,105,111,114,100,111,119,110,108,111,97,100,102,101,97,116, +117,114,101,100,102,111,111,116,98,97,108,108,115,101,108,101,99,116,101,100,76, +97,110,103,117,97,103,101,100,105,115,116,97,110,99,101,114,101,109,101,109,98, +101,114,116,114,97,99,107,105,110,103,112,97,115,115,119,111,114,100,109,111,100 +,105,102,105,101,100,115,116,117,100,101,110,116,115,100,105,114,101,99,116,108, +121,102,105,103,104,116,105,110,103,110,111,114,116,104,101,114,110,100,97,116, +97,98,97,115,101,102,101,115,116,105,118,97,108,98,114,101,97,107,105,110,103, +108,111,99,97,116,105,111,110,105,110,116,101,114,110,101,116,100,114,111,112, +100,111,119,110,112,114,97,99,116,105,99,101,101,118,105,100,101,110,99,101,102, +117,110,99,116,105,111,110,109,97,114,114,105,97,103,101,114,101,115,112,111,110 +,115,101,112,114,111,98,108,101,109,115,110,101,103,97,116,105,118,101,112,114, +111,103,114,97,109,115,97,110,97,108,121,115,105,115,114,101,108,101,97,115,101, +100,98,97,110,110,101,114,34,62,112,117,114,99,104,97,115,101,112,111,108,105,99 +,105,101,115,114,101,103,105,111,110,97,108,99,114,101,97,116,105,118,101,97,114 +,103,117,109,101,110,116,98,111,111,107,109,97,114,107,114,101,102,101,114,114, +101,114,99,104,101,109,105,99,97,108,100,105,118,105,115,105,111,110,99,97,108, +108,98,97,99,107,115,101,112,97,114,97,116,101,112,114,111,106,101,99,116,115,99 +,111,110,102,108,105,99,116,104,97,114,100,119,97,114,101,105,110,116,101,114, +101,115,116,100,101,108,105,118,101,114,121,109,111,117,110,116,97,105,110,111, +98,116,97,105,110,101,100,61,32,102,97,108,115,101,59,102,111,114,40,118,97,114, +32,97,99,99,101,112,116,101,100,99,97,112,97,99,105,116,121,99,111,109,112,117, +116,101,114,105,100,101,110,116,105,116,121,97,105,114,99,114,97,102,116,101,109 +,112,108,111,121,101,100,112,114,111,112,111,115,101,100,100,111,109,101,115,116 +,105,99,105,110,99,108,117,100,101,115,112,114,111,118,105,100,101,100,104,111, +115,112,105,116,97,108,118,101,114,116,105,99,97,108,99,111,108,108,97,112,115, +101,97,112,112,114,111,97,99,104,112,97,114,116,110,101,114,115,108,111,103,111, +34,62,60,97,100,97,117,103,104,116,101,114,97,117,116,104,111,114,34,32,99,117, +108,116,117,114,97,108,102,97,109,105,108,105,101,115,47,105,109,97,103,101,115, +47,97,115,115,101,109,98,108,121,112,111,119,101,114,102,117,108,116,101,97,99, +104,105,110,103,102,105,110,105,115,104,101,100,100,105,115,116,114,105,99,116, +99,114,105,116,105,99,97,108,99,103,105,45,98,105,110,47,112,117,114,112,111,115 +,101,115,114,101,113,117,105,114,101,115,101,108,101,99,116,105,111,110,98,101, +99,111,109,105,110,103,112,114,111,118,105,100,101,115,97,99,97,100,101,109,105, +99,101,120,101,114,99,105,115,101,97,99,116,117,97,108,108,121,109,101,100,105, +99,105,110,101,99,111,110,115,116,97,110,116,97,99,99,105,100,101,110,116,77,97, +103,97,122,105,110,101,100,111,99,117,109,101,110,116,115,116,97,114,116,105,110 +,103,98,111,116,116,111,109,34,62,111,98,115,101,114,118,101,100,58,32,38,113, +117,111,116,59,101,120,116,101,110,100,101,100,112,114,101,118,105,111,117,115, +83,111,102,116,119,97,114,101,99,117,115,116,111,109,101,114,100,101,99,105,115, +105,111,110,115,116,114,101,110,103,116,104,100,101,116,97,105,108,101,100,115, +108,105,103,104,116,108,121,112,108,97,110,110,105,110,103,116,101,120,116,97, +114,101,97,99,117,114,114,101,110,99,121,101,118,101,114,121,111,110,101,115,116 +,114,97,105,103,104,116,116,114,97,110,115,102,101,114,112,111,115,105,116,105, +118,101,112,114,111,100,117,99,101,100,104,101,114,105,116,97,103,101,115,104, +105,112,112,105,110,103,97,98,115,111,108,117,116,101,114,101,99,101,105,118,101 +,100,114,101,108,101,118,97,110,116,98,117,116,116,111,110,34,32,118,105,111,108 +,101,110,99,101,97,110,121,119,104,101,114,101,98,101,110,101,102,105,116,115, +108,97,117,110,99,104,101,100,114,101,99,101,110,116,108,121,97,108,108,105,97, +110,99,101,102,111,108,108,111,119,101,100,109,117,108,116,105,112,108,101,98, +117,108,108,101,116,105,110,105,110,99,108,117,100,101,100,111,99,99,117,114,114 +,101,100,105,110,116,101,114,110,97,108,36,40,116,104,105,115,41,46,114,101,112, +117,98,108,105,99,62,60,116,114,62,60,116,100,99,111,110,103,114,101,115,115,114 +,101,99,111,114,100,101,100,117,108,116,105,109,97,116,101,115,111,108,117,116, +105,111,110,60,117,108,32,105,100,61,34,100,105,115,99,111,118,101,114,72,111, +109,101,60,47,97,62,119,101,98,115,105,116,101,115,110,101,116,119,111,114,107, +115,97,108,116,104,111,117,103,104,101,110,116,105,114,101,108,121,109,101,109, +111,114,105,97,108,109,101,115,115,97,103,101,115,99,111,110,116,105,110,117,101 +,97,99,116,105,118,101,34,62,115,111,109,101,119,104,97,116,118,105,99,116,111, +114,105,97,87,101,115,116,101,114,110,32,32,116,105,116,108,101,61,34,76,111,99, +97,116,105,111,110,99,111,110,116,114,97,99,116,118,105,115,105,116,111,114,115, +68,111,119,110,108,111,97,100,119,105,116,104,111,117,116,32,114,105,103,104,116 +,34,62,10,109,101,97,115,117,114,101,115,119,105,100,116,104,32,61,32,118,97,114 +,105,97,98,108,101,105,110,118,111,108,118,101,100,118,105,114,103,105,110,105, +97,110,111,114,109,97,108,108,121,104,97,112,112,101,110,101,100,97,99,99,111, +117,110,116,115,115,116,97,110,100,105,110,103,110,97,116,105,111,110,97,108,82, +101,103,105,115,116,101,114,112,114,101,112,97,114,101,100,99,111,110,116,114, +111,108,115,97,99,99,117,114,97,116,101,98,105,114,116,104,100,97,121,115,116, +114,97,116,101,103,121,111,102,102,105,99,105,97,108,103,114,97,112,104,105,99, +115,99,114,105,109,105,110,97,108,112,111,115,115,105,98,108,121,99,111,110,115, +117,109,101,114,80,101,114,115,111,110,97,108,115,112,101,97,107,105,110,103,118 +,97,108,105,100,97,116,101,97,99,104,105,101,118,101,100,46,106,112,103,34,32,47 +,62,109,97,99,104,105,110,101,115,60,47,104,50,62,10,32,32,107,101,121,119,111, +114,100,115,102,114,105,101,110,100,108,121,98,114,111,116,104,101,114,115,99, +111,109,98,105,110,101,100,111,114,105,103,105,110,97,108,99,111,109,112,111,115 +,101,100,101,120,112,101,99,116,101,100,97,100,101,113,117,97,116,101,112,97,107 +,105,115,116,97,110,102,111,108,108,111,119,34,32,118,97,108,117,97,98,108,101, +60,47,108,97,98,101,108,62,114,101,108,97,116,105,118,101,98,114,105,110,103,105 +,110,103,105,110,99,114,101,97,115,101,103,111,118,101,114,110,111,114,112,108, +117,103,105,110,115,47,76,105,115,116,32,111,102,32,72,101,97,100,101,114,34,62, +34,32,110,97,109,101,61,34,32,40,38,113,117,111,116,59,103,114,97,100,117,97,116 +,101,60,47,104,101,97,100,62,10,99,111,109,109,101,114,99,101,109,97,108,97,121, +115,105,97,100,105,114,101,99,116,111,114,109,97,105,110,116,97,105,110,59,104, +101,105,103,104,116,58,115,99,104,101,100,117,108,101,99,104,97,110,103,105,110, +103,98,97,99,107,32,116,111,32,99,97,116,104,111,108,105,99,112,97,116,116,101, +114,110,115,99,111,108,111,114,58,32,35,103,114,101,97,116,101,115,116,115,117, +112,112,108,105,101,115,114,101,108,105,97,98,108,101,60,47,117,108,62,10,9,9,60 +,115,101,108,101,99,116,32,99,105,116,105,122,101,110,115,99,108,111,116,104,105 +,110,103,119,97,116,99,104,105,110,103,60,108,105,32,105,100,61,34,115,112,101, +99,105,102,105,99,99,97,114,114,121,105,110,103,115,101,110,116,101,110,99,101, +60,99,101,110,116,101,114,62,99,111,110,116,114,97,115,116,116,104,105,110,107, +105,110,103,99,97,116,99,104,40,101,41,115,111,117,116,104,101,114,110,77,105,99 +,104,97,101,108,32,109,101,114,99,104,97,110,116,99,97,114,111,117,115,101,108, +112,97,100,100,105,110,103,58,105,110,116,101,114,105,111,114,46,115,112,108,105 +,116,40,34,108,105,122,97,116,105,111,110,79,99,116,111,98,101,114,32,41,123,114 +,101,116,117,114,110,105,109,112,114,111,118,101,100,45,45,38,103,116,59,10,10, +99,111,118,101,114,97,103,101,99,104,97,105,114,109,97,110,46,112,110,103,34,32, +47,62,115,117,98,106,101,99,116,115,82,105,99,104,97,114,100,32,119,104,97,116, +101,118,101,114,112,114,111,98,97,98,108,121,114,101,99,111,118,101,114,121,98, +97,115,101,98,97,108,108,106,117,100,103,109,101,110,116,99,111,110,110,101,99, +116,46,46,99,115,115,34,32,47,62,32,119,101,98,115,105,116,101,114,101,112,111, +114,116,101,100,100,101,102,97,117,108,116,34,47,62,60,47,97,62,13,10,101,108, +101,99,116,114,105,99,115,99,111,116,108,97,110,100,99,114,101,97,116,105,111, +110,113,117,97,110,116,105,116,121,46,32,73,83,66,78,32,48,100,105,100,32,110, +111,116,32,105,110,115,116,97,110,99,101,45,115,101,97,114,99,104,45,34,32,108, +97,110,103,61,34,115,112,101,97,107,101,114,115,67,111,109,112,117,116,101,114, +99,111,110,116,97,105,110,115,97,114,99,104,105,118,101,115,109,105,110,105,115, +116,101,114,114,101,97,99,116,105,111,110,100,105,115,99,111,117,110,116,73,116, +97,108,105,97,110,111,99,114,105,116,101,114,105,97,115,116,114,111,110,103,108, +121,58,32,39,104,116,116,112,58,39,115,99,114,105,112,116,39,99,111,118,101,114, +105,110,103,111,102,102,101,114,105,110,103,97,112,112,101,97,114,101,100,66,114 +,105,116,105,115,104,32,105,100,101,110,116,105,102,121,70,97,99,101,98,111,111, +107,110,117,109,101,114,111,117,115,118,101,104,105,99,108,101,115,99,111,110,99 +,101,114,110,115,65,109,101,114,105,99,97,110,104,97,110,100,108,105,110,103,100 +,105,118,32,105,100,61,34,87,105,108,108,105,97,109,32,112,114,111,118,105,100, +101,114,95,99,111,110,116,101,110,116,97,99,99,117,114,97,99,121,115,101,99,116, +105,111,110,32,97,110,100,101,114,115,111,110,102,108,101,120,105,98,108,101,67, +97,116,101,103,111,114,121,108,97,119,114,101,110,99,101,60,115,99,114,105,112, +116,62,108,97,121,111,117,116,61,34,97,112,112,114,111,118,101,100,32,109,97,120 +,105,109,117,109,104,101,97,100,101,114,34,62,60,47,116,97,98,108,101,62,83,101, +114,118,105,99,101,115,104,97,109,105,108,116,111,110,99,117,114,114,101,110,116 +,32,99,97,110,97,100,105,97,110,99,104,97,110,110,101,108,115,47,116,104,101,109 +,101,115,47,47,97,114,116,105,99,108,101,111,112,116,105,111,110,97,108,112,111, +114,116,117,103,97,108,118,97,108,117,101,61,34,34,105,110,116,101,114,118,97, +108,119,105,114,101,108,101,115,115,101,110,116,105,116,108,101,100,97,103,101, +110,99,105,101,115,83,101,97,114,99,104,34,32,109,101,97,115,117,114,101,100,116 +,104,111,117,115,97,110,100,115,112,101,110,100,105,110,103,38,104,101,108,108, +105,112,59,110,101,119,32,68,97,116,101,34,32,115,105,122,101,61,34,112,97,103, +101,78,97,109,101,109,105,100,100,108,101,34,32,34,32,47,62,60,47,97,62,104,105, +100,100,101,110,34,62,115,101,113,117,101,110,99,101,112,101,114,115,111,110,97, +108,111,118,101,114,102,108,111,119,111,112,105,110,105,111,110,115,105,108,108, +105,110,111,105,115,108,105,110,107,115,34,62,10,9,60,116,105,116,108,101,62,118 +,101,114,115,105,111,110,115,115,97,116,117,114,100,97,121,116,101,114,109,105, +110,97,108,105,116,101,109,112,114,111,112,101,110,103,105,110,101,101,114,115, +101,99,116,105,111,110,115,100,101,115,105,103,110,101,114,112,114,111,112,111, +115,97,108,61,34,102,97,108,115,101,34,69,115,112,97,195,177,111,108,114,101,108 +,101,97,115,101,115,115,117,98,109,105,116,34,32,101,114,38,113,117,111,116,59, +97,100,100,105,116,105,111,110,115,121,109,112,116,111,109,115,111,114,105,101, +110,116,101,100,114,101,115,111,117,114,99,101,114,105,103,104,116,34,62,60,112, +108,101,97,115,117,114,101,115,116,97,116,105,111,110,115,104,105,115,116,111, +114,121,46,108,101,97,118,105,110,103,32,32,98,111,114,100,101,114,61,99,111,110 +,116,101,110,116,115,99,101,110,116,101,114,34,62,46,10,10,83,111,109,101,32,100 +,105,114,101,99,116,101,100,115,117,105,116,97,98,108,101,98,117,108,103,97,114, +105,97,46,115,104,111,119,40,41,59,100,101,115,105,103,110,101,100,71,101,110, +101,114,97,108,32,99,111,110,99,101,112,116,115,69,120,97,109,112,108,101,115, +119,105,108,108,105,97,109,115,79,114,105,103,105,110,97,108,34,62,60,115,112,97 +,110,62,115,101,97,114,99,104,34,62,111,112,101,114,97,116,111,114,114,101,113, +117,101,115,116,115,97,32,38,113,117,111,116,59,97,108,108,111,119,105,110,103, +68,111,99,117,109,101,110,116,114,101,118,105,115,105,111,110,46,32,10,10,84,104 +,101,32,121,111,117,114,115,101,108,102,67,111,110,116,97,99,116,32,109,105,99, +104,105,103,97,110,69,110,103,108,105,115,104,32,99,111,108,117,109,98,105,97, +112,114,105,111,114,105,116,121,112,114,105,110,116,105,110,103,100,114,105,110, +107,105,110,103,102,97,99,105,108,105,116,121,114,101,116,117,114,110,101,100,67 +,111,110,116,101,110,116,32,111,102,102,105,99,101,114,115,82,117,115,115,105,97 +,110,32,103,101,110,101,114,97,116,101,45,56,56,53,57,45,49,34,105,110,100,105, +99,97,116,101,102,97,109,105,108,105,97,114,32,113,117,97,108,105,116,121,109,97 +,114,103,105,110,58,48,32,99,111,110,116,101,110,116,118,105,101,119,112,111,114 +,116,99,111,110,116,97,99,116,115,45,116,105,116,108,101,34,62,112,111,114,116, +97,98,108,101,46,108,101,110,103,116,104,32,101,108,105,103,105,98,108,101,105, +110,118,111,108,118,101,115,97,116,108,97,110,116,105,99,111,110,108,111,97,100, +61,34,100,101,102,97,117,108,116,46,115,117,112,112,108,105,101,100,112,97,121, +109,101,110,116,115,103,108,111,115,115,97,114,121,10,10,65,102,116,101,114,32, +103,117,105,100,97,110,99,101,60,47,116,100,62,60,116,100,101,110,99,111,100,105 +,110,103,109,105,100,100,108,101,34,62,99,97,109,101,32,116,111,32,100,105,115, +112,108,97,121,115,115,99,111,116,116,105,115,104,106,111,110,97,116,104,97,110, +109,97,106,111,114,105,116,121,119,105,100,103,101,116,115,46,99,108,105,110,105 +,99,97,108,116,104,97,105,108,97,110,100,116,101,97,99,104,101,114,115,60,104, +101,97,100,62,10,9,97,102,102,101,99,116,101,100,115,117,112,112,111,114,116,115 +,112,111,105,110,116,101,114,59,116,111,83,116,114,105,110,103,60,47,115,109,97, +108,108,62,111,107,108,97,104,111,109,97,119,105,108,108,32,98,101,32,105,110, +118,101,115,116,111,114,48,34,32,97,108,116,61,34,104,111,108,105,100,97,121,115 +,82,101,115,111,117,114,99,101,108,105,99,101,110,115,101,100,32,40,119,104,105, +99,104,32,46,32,65,102,116,101,114,32,99,111,110,115,105,100,101,114,118,105,115 +,105,116,105,110,103,101,120,112,108,111,114,101,114,112,114,105,109,97,114,121, +32,115,101,97,114,99,104,34,32,97,110,100,114,111,105,100,34,113,117,105,99,107, +108,121,32,109,101,101,116,105,110,103,115,101,115,116,105,109,97,116,101,59,114 +,101,116,117,114,110,32,59,99,111,108,111,114,58,35,32,104,101,105,103,104,116, +61,97,112,112,114,111,118,97,108,44,32,38,113,117,111,116,59,32,99,104,101,99, +107,101,100,46,109,105,110,46,106,115,34,109,97,103,110,101,116,105,99,62,60,47, +97,62,60,47,104,102,111,114,101,99,97,115,116,46,32,87,104,105,108,101,32,116, +104,117,114,115,100,97,121,100,118,101,114,116,105,115,101,38,101,97,99,117,116, +101,59,104,97,115,67,108,97,115,115,101,118,97,108,117,97,116,101,111,114,100, +101,114,105,110,103,101,120,105,115,116,105,110,103,112,97,116,105,101,110,116, +115,32,79,110,108,105,110,101,32,99,111,108,111,114,97,100,111,79,112,116,105, +111,110,115,34,99,97,109,112,98,101,108,108,60,33,45,45,32,101,110,100,60,47,115 +,112,97,110,62,60,60,98,114,32,47,62,13,10,95,112,111,112,117,112,115,124,115,99 +,105,101,110,99,101,115,44,38,113,117,111,116,59,32,113,117,97,108,105,116,121, +32,87,105,110,100,111,119,115,32,97,115,115,105,103,110,101,100,104,101,105,103, +104,116,58,32,60,98,32,99,108,97,115,115,108,101,38,113,117,111,116,59,32,118,97 +,108,117,101,61,34,32,67,111,109,112,97,110,121,101,120,97,109,112,108,101,115, +60,105,102,114,97,109,101,32,98,101,108,105,101,118,101,115,112,114,101,115,101, +110,116,115,109,97,114,115,104,97,108,108,112,97,114,116,32,111,102,32,112,114, +111,112,101,114,108,121,41,46,10,10,84,104,101,32,116,97,120,111,110,111,109,121 +,109,117,99,104,32,111,102,32,60,47,115,112,97,110,62,10,34,32,100,97,116,97,45, +115,114,116,117,103,117,195,170,115,115,99,114,111,108,108,84,111,32,112,114,111 +,106,101,99,116,60,104,101,97,100,62,13,10,97,116,116,111,114,110,101,121,101, +109,112,104,97,115,105,115,115,112,111,110,115,111,114,115,102,97,110,99,121,98, +111,120,119,111,114,108,100,39,115,32,119,105,108,100,108,105,102,101,99,104,101 +,99,107,101,100,61,115,101,115,115,105,111,110,115,112,114,111,103,114,97,109, +109,112,120,59,102,111,110,116,45,32,80,114,111,106,101,99,116,106,111,117,114, +110,97,108,115,98,101,108,105,101,118,101,100,118,97,99,97,116,105,111,110,116, +104,111,109,112,115,111,110,108,105,103,104,116,105,110,103,97,110,100,32,116, +104,101,32,115,112,101,99,105,97,108,32,98,111,114,100,101,114,61,48,99,104,101, +99,107,105,110,103,60,47,116,98,111,100,121,62,60,98,117,116,116,111,110,32,67, +111,109,112,108,101,116,101,99,108,101,97,114,102,105,120,10,60,104,101,97,100, +62,10,97,114,116,105,99,108,101,32,60,115,101,99,116,105,111,110,102,105,110,100 +,105,110,103,115,114,111,108,101,32,105,110,32,112,111,112,117,108,97,114,32,32, +79,99,116,111,98,101,114,119,101,98,115,105,116,101,32,101,120,112,111,115,117, +114,101,117,115,101,100,32,116,111,32,32,99,104,97,110,103,101,115,111,112,101, +114,97,116,101,100,99,108,105,99,107,105,110,103,101,110,116,101,114,105,110,103 +,99,111,109,109,97,110,100,115,105,110,102,111,114,109,101,100,32,110,117,109,98 +,101,114,115,32,32,60,47,100,105,118,62,99,114,101,97,116,105,110,103,111,110,83 +,117,98,109,105,116,109,97,114,121,108,97,110,100,99,111,108,108,101,103,101,115 +,97,110,97,108,121,116,105,99,108,105,115,116,105,110,103,115,99,111,110,116,97, +99,116,46,108,111,103,103,101,100,73,110,97,100,118,105,115,111,114,121,115,105, +98,108,105,110,103,115,99,111,110,116,101,110,116,34,115,38,113,117,111,116,59, +41,115,46,32,84,104,105,115,32,112,97,99,107,97,103,101,115,99,104,101,99,107,98 +,111,120,115,117,103,103,101,115,116,115,112,114,101,103,110,97,110,116,116,111, +109,111,114,114,111,119,115,112,97,99,105,110,103,61,105,99,111,110,46,112,110, +103,106,97,112,97,110,101,115,101,99,111,100,101,98,97,115,101,98,117,116,116, +111,110,34,62,103,97,109,98,108,105,110,103,115,117,99,104,32,97,115,32,44,32, +119,104,105,108,101,32,60,47,115,112,97,110,62,32,109,105,115,115,111,117,114, +105,115,112,111,114,116,105,110,103,116,111,112,58,49,112,120,32,46,60,47,115, +112,97,110,62,116,101,110,115,105,111,110,115,119,105,100,116,104,61,34,50,108, +97,122,121,108,111,97,100,110,111,118,101,109,98,101,114,117,115,101,100,32,105, +110,32,104,101,105,103,104,116,61,34,99,114,105,112,116,34,62,10,38,110,98,115, +112,59,60,47,60,116,114,62,60,116,100,32,104,101,105,103,104,116,58,50,47,112, +114,111,100,117,99,116,99,111,117,110,116,114,121,32,105,110,99,108,117,100,101, +32,102,111,111,116,101,114,34,32,38,108,116,59,33,45,45,32,116,105,116,108,101, +34,62,60,47,106,113,117,101,114,121,46,60,47,102,111,114,109,62,10,40,231,174, +128,228,189,147,41,40,231,185,129,233,171,148,41,104,114,118,97,116,115,107,105, +105,116,97,108,105,97,110,111,114,111,109,195,162,110,196,131,116,195,188,114, +107,195,167,101,216,167,216,177,216,175,217,136,116,97,109,98,105,195,169,110, +110,111,116,105,99,105,97,115,109,101,110,115,97,106,101,115,112,101,114,115,111 +,110,97,115,100,101,114,101,99,104,111,115,110,97,99,105,111,110,97,108,115,101, +114,118,105,99,105,111,99,111,110,116,97,99,116,111,117,115,117,97,114,105,111, +115,112,114,111,103,114,97,109,97,103,111,98,105,101,114,110,111,101,109,112,114 +,101,115,97,115,97,110,117,110,99,105,111,115,118,97,108,101,110,99,105,97,99, +111,108,111,109,98,105,97,100,101,115,112,117,195,169,115,100,101,112,111,114, +116,101,115,112,114,111,121,101,99,116,111,112,114,111,100,117,99,116,111,112, +195,186,98,108,105,99,111,110,111,115,111,116,114,111,115,104,105,115,116,111, +114,105,97,112,114,101,115,101,110,116,101,109,105,108,108,111,110,101,115,109, +101,100,105,97,110,116,101,112,114,101,103,117,110,116,97,97,110,116,101,114,105 +,111,114,114,101,99,117,114,115,111,115,112,114,111,98,108,101,109,97,115,97,110 +,116,105,97,103,111,110,117,101,115,116,114,111,115,111,112,105,110,105,195,179, +110,105,109,112,114,105,109,105,114,109,105,101,110,116,114,97,115,97,109,195, +169,114,105,99,97,118,101,110,100,101,100,111,114,115,111,99,105,101,100,97,100, +114,101,115,112,101,99,116,111,114,101,97,108,105,122,97,114,114,101,103,105,115 +,116,114,111,112,97,108,97,98,114,97,115,105,110,116,101,114,195,169,115,101,110 +,116,111,110,99,101,115,101,115,112,101,99,105,97,108,109,105,101,109,98,114,111 +,115,114,101,97,108,105,100,97,100,99,195,179,114,100,111,98,97,122,97,114,97, +103,111,122,97,112,195,161,103,105,110,97,115,115,111,99,105,97,108,101,115,98, +108,111,113,117,101,97,114,103,101,115,116,105,195,179,110,97,108,113,117,105, +108,101,114,115,105,115,116,101,109,97,115,99,105,101,110,99,105,97,115,99,111, +109,112,108,101,116,111,118,101,114,115,105,195,179,110,99,111,109,112,108,101, +116,97,101,115,116,117,100,105,111,115,112,195,186,98,108,105,99,97,111,98,106, +101,116,105,118,111,97,108,105,99,97,110,116,101,98,117,115,99,97,100,111,114,99 +,97,110,116,105,100,97,100,101,110,116,114,97,100,97,115,97,99,99,105,111,110, +101,115,97,114,99,104,105,118,111,115,115,117,112,101,114,105,111,114,109,97,121 +,111,114,195,173,97,97,108,101,109,97,110,105,97,102,117,110,99,105,195,179,110, +195,186,108,116,105,109,111,115,104,97,99,105,101,110,100,111,97,113,117,101,108 +,108,111,115,101,100,105,99,105,195,179,110,102,101,114,110,97,110,100,111,97, +109,98,105,101,110,116,101,102,97,99,101,98,111,111,107,110,117,101,115,116,114, +97,115,99,108,105,101,110,116,101,115,112,114,111,99,101,115,111,115,98,97,115, +116,97,110,116,101,112,114,101,115,101,110,116,97,114,101,112,111,114,116,97,114 +,99,111,110,103,114,101,115,111,112,117,98,108,105,99,97,114,99,111,109,101,114, +99,105,111,99,111,110,116,114,97,116,111,106,195,179,118,101,110,101,115,100,105 +,115,116,114,105,116,111,116,195,169,99,110,105,99,97,99,111,110,106,117,110,116 +,111,101,110,101,114,103,195,173,97,116,114,97,98,97,106,97,114,97,115,116,117, +114,105,97,115,114,101,99,105,101,110,116,101,117,116,105,108,105,122,97,114,98, +111,108,101,116,195,173,110,115,97,108,118,97,100,111,114,99,111,114,114,101,99, +116,97,116,114,97,98,97,106,111,115,112,114,105,109,101,114,111,115,110,101,103, +111,99,105,111,115,108,105,98,101,114,116,97,100,100,101,116,97,108,108,101,115, +112,97,110,116,97,108,108,97,112,114,195,179,120,105,109,111,97,108,109,101,114, +195,173,97,97,110,105,109,97,108,101,115,113,117,105,195,169,110,101,115,99,111, +114,97,122,195,179,110,115,101,99,99,105,195,179,110,98,117,115,99,97,110,100, +111,111,112,99,105,111,110,101,115,101,120,116,101,114,105,111,114,99,111,110,99 +,101,112,116,111,116,111,100,97,118,195,173,97,103,97,108,101,114,195,173,97,101 +,115,99,114,105,98,105,114,109,101,100,105,99,105,110,97,108,105,99,101,110,99, +105,97,99,111,110,115,117,108,116,97,97,115,112,101,99,116,111,115,99,114,195, +173,116,105,99,97,100,195,179,108,97,114,101,115,106,117,115,116,105,99,105,97, +100,101,98,101,114,195,161,110,112,101,114,195,173,111,100,111,110,101,99,101, +115,105,116,97,109,97,110,116,101,110,101,114,112,101,113,117,101,195,177,111, +114,101,99,105,98,105,100,97,116,114,105,98,117,110,97,108,116,101,110,101,114, +105,102,101,99,97,110,99,105,195,179,110,99,97,110,97,114,105,97,115,100,101,115 +,99,97,114,103,97,100,105,118,101,114,115,111,115,109,97,108,108,111,114,99,97, +114,101,113,117,105,101,114,101,116,195,169,99,110,105,99,111,100,101,98,101,114 +,195,173,97,118,105,118,105,101,110,100,97,102,105,110,97,110,122,97,115,97,100, +101,108,97,110,116,101,102,117,110,99,105,111,110,97,99,111,110,115,101,106,111, +115,100,105,102,195,173,99,105,108,99,105,117,100,97,100,101,115,97,110,116,105, +103,117,97,115,97,118,97,110,122,97,100,97,116,195,169,114,109,105,110,111,117, +110,105,100,97,100,101,115,115,195,161,110,99,104,101,122,99,97,109,112,97,195, +177,97,115,111,102,116,111,110,105,99,114,101,118,105,115,116,97,115,99,111,110, +116,105,101,110,101,115,101,99,116,111,114,101,115,109,111,109,101,110,116,111, +115,102,97,99,117,108,116,97,100,99,114,195,169,100,105,116,111,100,105,118,101, +114,115,97,115,115,117,112,117,101,115,116,111,102,97,99,116,111,114,101,115,115 +,101,103,117,110,100,111,115,112,101,113,117,101,195,177,97,208,179,208,190,208, +180,208,176,208,181,209,129,208,187,208,184,208,181,209,129,209,130,209,140,208, +177,209,139,208,187,208,190,208,177,209,139,209,130,209,140,209,141,209,130,208, +190,208,188,208,149,209,129,208,187,208,184,209,130,208,190,208,179,208,190,208, +188,208,181,208,189,209,143,208,178,209,129,208,181,209,133,209,141,209,130,208, +190,208,185,208,180,208,176,208,182,208,181,208,177,209,139,208,187,208,184,208, +179,208,190,208,180,209,131,208,180,208,181,208,189,209,140,209,141,209,130,208, +190,209,130,208,177,209,139,208,187,208,176,209,129,208,181,208,177,209,143,208, +190,208,180,208,184,208,189,209,129,208,181,208,177,208,181,208,189,208,176,208, +180,208,190,209,129,208,176,208,185,209,130,209,132,208,190,209,130,208,190,208, +189,208,181,208,179,208,190,209,129,208,178,208,190,208,184,209,129,208,178,208, +190,208,185,208,184,208,179,209,128,209,139,209,130,208,190,208,182,208,181,208, +178,209,129,208,181,208,188,209,129,208,178,208,190,209,142,208,187,208,184,209, +136,209,140,209,141,209,130,208,184,209,133,208,191,208,190,208,186,208,176,208, +180,208,189,208,181,208,185,208,180,208,190,208,188,208,176,208,188,208,184,209, +128,208,176,208,187,208,184,208,177,208,190,209,130,208,181,208,188,209,131,209, +133,208,190,209,130,209,143,208,180,208,178,209,131,209,133,209,129,208,181,209, +130,208,184,208,187,209,142,208,180,208,184,208,180,208,181,208,187,208,190,208, +188,208,184,209,128,208,181,209,130,208,181,208,177,209,143,209,129,208,178,208, +190,208,181,208,178,208,184,208,180,208,181,209,135,208,181,208,179,208,190,209, +141,209,130,208,184,208,188,209,129,209,135,208,181,209,130,209,130,208,181,208, +188,209,139,209,134,208,181,208,189,209,139,209,129,209,130,208,176,208,187,208, +178,208,181,208,180,209,140,209,130,208,181,208,188,208,181,208,178,208,190,208, +180,209,139,209,130,208,181,208,177,208,181,208,178,209,139,209,136,208,181,208, +189,208,176,208,188,208,184,209,130,208,184,208,191,208,176,209,130,208,190,208, +188,209,131,208,191,209,128,208,176,208,178,208,187,208,184,209,134,208,176,208, +190,208,180,208,189,208,176,208,179,208,190,208,180,209,139,208,183,208,189,208, +176,209,142,208,188,208,190,208,179,209,131,208,180,209,128,209,131,208,179,208, +178,209,129,208,181,208,185,208,184,208,180,208,181,209,130,208,186,208,184,208, +189,208,190,208,190,208,180,208,189,208,190,208,180,208,181,208,187,208,176,208, +180,208,181,208,187,208,181,209,129,209,128,208,190,208,186,208,184,209,142,208, +189,209,143,208,178,208,181,209,129,209,140,208,149,209,129,209,130,209,140,209, +128,208,176,208,183,208,176,208,189,208,176,209,136,208,184,216,167,217,132,217, +132,217,135,216,167,217,132,216,170,217,138,216,172,217,133,217,138,216,185,216, +174,216,167,216,181,216,169,216,167,217,132,216,176,217,138,216,185,217,132,217, +138,217,135,216,172,216,175,217,138,216,175,216,167,217,132,216,162,217,134,216, +167,217,132,216,177,216,175,216,170,216,173,217,131,217,133,216,181,217,129,216, +173,216,169,217,131,216,167,217,134,216,170,216,167,217,132,217,132,217,138,217, +138,217,131,217,136,217,134,216,180,216,168,217,131,216,169,217,129,217,138,217, +135,216,167,216,168,217,134,216,167,216,170,216,173,217,136,216,167,216,161,216, +163,217,131,216,171,216,177,216,174,217,132,216,167,217,132,216,167,217,132,216, +173,216,168,216,175,217,132,217,138,217,132,216,175,216,177,217,136,216,179,216, +167,216,182,216,186,216,183,216,170,217,131,217,136,217,134,217,135,217,134,216, +167,217,131,216,179,216,167,216,173,216,169,217,134,216,167,216,175,217,138,216, +167,217,132,216,183,216,168,216,185,217,132,217,138,217,131,216,180,217,131,216, +177,216,167,217,138,217,133,217,131,217,134,217,133,217,134,217,135,216,167,216, +180,216,177,217,131,216,169,216,177,216,166,217,138,216,179,217,134,216,180,217, +138,216,183,217,133,216,167,216,176,216,167,216,167,217,132,217,129,217,134,216, +180,216,168,216,167,216,168,216,170,216,185,216,168,216,177,216,177,216,173,217, +133,216,169,217,131,216,167,217,129,216,169,217,138,217,130,217,136,217,132,217, +133,216,177,217,131,216,178,217,131,217,132,217,133,216,169,216,163,216,173,217, +133,216,175,217,130,217,132,216,168,217,138,217,138,216,185,217,134,217,138,216, +181,217,136,216,177,216,169,216,183,216,177,217,138,217,130,216,180,216,167,216, +177,217,131,216,172,217,136,216,167,217,132,216,163,216,174,216,177,217,137,217, +133,216,185,217,134,216,167,216,167,216,168,216,173,216,171,216,185,216,177,217, +136,216,182,216,168,216,180,217,131,217,132,217,133,216,179,216,172,217,132,216, +168,217,134,216,167,217,134,216,174,216,167,217,132,216,175,217,131,216,170,216, +167,216,168,217,131,217,132,217,138,216,169,216,168,216,175,217,136,217,134,216, +163,217,138,216,182,216,167,217,138,217,136,216,172,216,175,217,129,216,177,217, +138,217,130,217,131,216,170,216,168,216,170,216,163,217,129,216,182,217,132,217, +133,216,183,216,168,216,174,216,167,217,131,216,171,216,177,216,168,216,167,216, +177,217,131,216,167,217,129,216,182,217,132,216,167,216,173,217,132,217,137,217, +134,217,129,216,179,217,135,216,163,217,138,216,167,217,133,216,177,216,175,217, +136,216,175,216,163,217,134,217,135,216,167,216,175,217,138,217,134,216,167,216, +167,217,132,216,167,217,134,217,133,216,185,216,177,216,182,216,170,216,185,217, +132,217,133,216,175,216,167,216,174,217,132,217,133,217,133,217,131,217,134,0,0, +0,0,0,0,0,0,1,0,1,0,1,0,1,0,2,0,2,0,2,0,2,0,4,0,4,0,4,0,4,0,0,1,2,3,4,5,6,7,7,6, +5,4,3,2,1,0,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,16,17,18,19,20,21,22,23, +23,22,21,20,19,18,17,16,24,25,26,27,28,29,30,31,31,30,29,28,27,26,25,24,255,255, +255,255,0,0,0,0,0,0,0,0,255,255,255,255,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0, +3,0,0,0,255,255,0,1,0,0,0,1,0,0,255,255,0,1,0,0,0,8,0,8,0,8,0,8,0,0,0,1,0,2,0,3, +0,4,0,5,0,6,0,7,114,101,115,111,117,114,99,101,115,99,111,117,110,116,114,105, +101,115,113,117,101,115,116,105,111,110,115,101,113,117,105,112,109,101,110,116, +99,111,109,109,117,110,105,116,121,97,118,97,105,108,97,98,108,101,104,105,103, +104,108,105,103,104,116,68,84,68,47,120,104,116,109,108,109,97,114,107,101,116, +105,110,103,107,110,111,119,108,101,100,103,101,115,111,109,101,116,104,105,110, +103,99,111,110,116,97,105,110,101,114,100,105,114,101,99,116,105,111,110,115,117 +,98,115,99,114,105,98,101,97,100,118,101,114,116,105,115,101,99,104,97,114,97,99 +,116,101,114,34,32,118,97,108,117,101,61,34,60,47,115,101,108,101,99,116,62,65, +117,115,116,114,97,108,105,97,34,32,99,108,97,115,115,61,34,115,105,116,117,97, +116,105,111,110,97,117,116,104,111,114,105,116,121,102,111,108,108,111,119,105, +110,103,112,114,105,109,97,114,105,108,121,111,112,101,114,97,116,105,111,110,99 +,104,97,108,108,101,110,103,101,100,101,118,101,108,111,112,101,100,97,110,111, +110,121,109,111,117,115,102,117,110,99,116,105,111,110,32,102,117,110,99,116,105 +,111,110,115,99,111,109,112,97,110,105,101,115,115,116,114,117,99,116,117,114, +101,97,103,114,101,101,109,101,110,116,34,32,116,105,116,108,101,61,34,112,111, +116,101,110,116,105,97,108,101,100,117,99,97,116,105,111,110,97,114,103,117,109, +101,110,116,115,115,101,99,111,110,100,97,114,121,99,111,112,121,114,105,103,104 +,116,108,97,110,103,117,97,103,101,115,101,120,99,108,117,115,105,118,101,99,111 +,110,100,105,116,105,111,110,60,47,102,111,114,109,62,13,10,115,116,97,116,101, +109,101,110,116,97,116,116,101,110,116,105,111,110,66,105,111,103,114,97,112,104 +,121,125,32,101,108,115,101,32,123,10,115,111,108,117,116,105,111,110,115,119, +104,101,110,32,116,104,101,32,65,110,97,108,121,116,105,99,115,116,101,109,112, +108,97,116,101,115,100,97,110,103,101,114,111,117,115,115,97,116,101,108,108,105 +,116,101,100,111,99,117,109,101,110,116,115,112,117,98,108,105,115,104,101,114, +105,109,112,111,114,116,97,110,116,112,114,111,116,111,116,121,112,101,105,110, +102,108,117,101,110,99,101,38,114,97,113,117,111,59,60,47,101,102,102,101,99,116 +,105,118,101,103,101,110,101,114,97,108,108,121,116,114,97,110,115,102,111,114, +109,98,101,97,117,116,105,102,117,108,116,114,97,110,115,112,111,114,116,111,114 +,103,97,110,105,122,101,100,112,117,98,108,105,115,104,101,100,112,114,111,109, +105,110,101,110,116,117,110,116,105,108,32,116,104,101,116,104,117,109,98,110,97 +,105,108,78,97,116,105,111,110,97,108,32,46,102,111,99,117,115,40,41,59,111,118, +101,114,32,116,104,101,32,109,105,103,114,97,116,105,111,110,97,110,110,111,117, +110,99,101,100,102,111,111,116,101,114,34,62,10,101,120,99,101,112,116,105,111, +110,108,101,115,115,32,116,104,97,110,101,120,112,101,110,115,105,118,101,102, +111,114,109,97,116,105,111,110,102,114,97,109,101,119,111,114,107,116,101,114, +114,105,116,111,114,121,110,100,105,99,97,116,105,111,110,99,117,114,114,101,110 +,116,108,121,99,108,97,115,115,78,97,109,101,99,114,105,116,105,99,105,115,109, +116,114,97,100,105,116,105,111,110,101,108,115,101,119,104,101,114,101,65,108, +101,120,97,110,100,101,114,97,112,112,111,105,110,116,101,100,109,97,116,101,114 +,105,97,108,115,98,114,111,97,100,99,97,115,116,109,101,110,116,105,111,110,101, +100,97,102,102,105,108,105,97,116,101,60,47,111,112,116,105,111,110,62,116,114, +101,97,116,109,101,110,116,100,105,102,102,101,114,101,110,116,47,100,101,102,97 +,117,108,116,46,80,114,101,115,105,100,101,110,116,111,110,99,108,105,99,107,61, +34,98,105,111,103,114,97,112,104,121,111,116,104,101,114,119,105,115,101,112,101 +,114,109,97,110,101,110,116,70,114,97,110,195,167,97,105,115,72,111,108,108,121, +119,111,111,100,101,120,112,97,110,115,105,111,110,115,116,97,110,100,97,114,100 +,115,60,47,115,116,121,108,101,62,10,114,101,100,117,99,116,105,111,110,68,101, +99,101,109,98,101,114,32,112,114,101,102,101,114,114,101,100,67,97,109,98,114, +105,100,103,101,111,112,112,111,110,101,110,116,115,66,117,115,105,110,101,115, +115,32,99,111,110,102,117,115,105,111,110,62,10,60,116,105,116,108,101,62,112, +114,101,115,101,110,116,101,100,101,120,112,108,97,105,110,101,100,100,111,101, +115,32,110,111,116,32,119,111,114,108,100,119,105,100,101,105,110,116,101,114, +102,97,99,101,112,111,115,105,116,105,111,110,115,110,101,119,115,112,97,112,101 +,114,60,47,116,97,98,108,101,62,10,109,111,117,110,116,97,105,110,115,108,105, +107,101,32,116,104,101,32,101,115,115,101,110,116,105,97,108,102,105,110,97,110, +99,105,97,108,115,101,108,101,99,116,105,111,110,97,99,116,105,111,110,61,34,47, +97,98,97,110,100,111,110,101,100,69,100,117,99,97,116,105,111,110,112,97,114,115 +,101,73,110,116,40,115,116,97,98,105,108,105,116,121,117,110,97,98,108,101,32, +116,111,60,47,116,105,116,108,101,62,10,114,101,108,97,116,105,111,110,115,78, +111,116,101,32,116,104,97,116,101,102,102,105,99,105,101,110,116,112,101,114,102 +,111,114,109,101,100,116,119,111,32,121,101,97,114,115,83,105,110,99,101,32,116, +104,101,116,104,101,114,101,102,111,114,101,119,114,97,112,112,101,114,34,62,97, +108,116,101,114,110,97,116,101,105,110,99,114,101,97,115,101,100,66,97,116,116, +108,101,32,111,102,112,101,114,99,101,105,118,101,100,116,114,121,105,110,103,32 +,116,111,110,101,99,101,115,115,97,114,121,112,111,114,116,114,97,121,101,100, +101,108,101,99,116,105,111,110,115,69,108,105,122,97,98,101,116,104,60,47,105, +102,114,97,109,101,62,100,105,115,99,111,118,101,114,121,105,110,115,117,114,97, +110,99,101,115,46,108,101,110,103,116,104,59,108,101,103,101,110,100,97,114,121, +71,101,111,103,114,97,112,104,121,99,97,110,100,105,100,97,116,101,99,111,114, +112,111,114,97,116,101,115,111,109,101,116,105,109,101,115,115,101,114,118,105, +99,101,115,46,105,110,104,101,114,105,116,101,100,60,47,115,116,114,111,110,103, +62,67,111,109,109,117,110,105,116,121,114,101,108,105,103,105,111,117,115,108, +111,99,97,116,105,111,110,115,67,111,109,109,105,116,116,101,101,98,117,105,108, +100,105,110,103,115,116,104,101,32,119,111,114,108,100,110,111,32,108,111,110, +103,101,114,98,101,103,105,110,110,105,110,103,114,101,102,101,114,101,110,99, +101,99,97,110,110,111,116,32,98,101,102,114,101,113,117,101,110,99,121,116,121, +112,105,99,97,108,108,121,105,110,116,111,32,116,104,101,32,114,101,108,97,116, +105,118,101,59,114,101,99,111,114,100,105,110,103,112,114,101,115,105,100,101, +110,116,105,110,105,116,105,97,108,108,121,116,101,99,104,110,105,113,117,101, +116,104,101,32,111,116,104,101,114,105,116,32,99,97,110,32,98,101,101,120,105, +115,116,101,110,99,101,117,110,100,101,114,108,105,110,101,116,104,105,115,32, +116,105,109,101,116,101,108,101,112,104,111,110,101,105,116,101,109,115,99,111, +112,101,112,114,97,99,116,105,99,101,115,97,100,118,97,110,116,97,103,101,41,59, +114,101,116,117,114,110,32,70,111,114,32,111,116,104,101,114,112,114,111,118,105 +,100,105,110,103,100,101,109,111,99,114,97,99,121,98,111,116,104,32,116,104,101, +32,101,120,116,101,110,115,105,118,101,115,117,102,102,101,114,105,110,103,115, +117,112,112,111,114,116,101,100,99,111,109,112,117,116,101,114,115,32,102,117, +110,99,116,105,111,110,112,114,97,99,116,105,99,97,108,115,97,105,100,32,116,104 +,97,116,105,116,32,109,97,121,32,98,101,69,110,103,108,105,115,104,60,47,102,114 +,111,109,32,116,104,101,32,115,99,104,101,100,117,108,101,100,100,111,119,110, +108,111,97,100,115,60,47,108,97,98,101,108,62,10,115,117,115,112,101,99,116,101, +100,109,97,114,103,105,110,58,32,48,115,112,105,114,105,116,117,97,108,60,47,104 +,101,97,100,62,10,10,109,105,99,114,111,115,111,102,116,103,114,97,100,117,97, +108,108,121,100,105,115,99,117,115,115,101,100,104,101,32,98,101,99,97,109,101, +101,120,101,99,117,116,105,118,101,106,113,117,101,114,121,46,106,115,104,111, +117,115,101,104,111,108,100,99,111,110,102,105,114,109,101,100,112,117,114,99, +104,97,115,101,100,108,105,116,101,114,97,108,108,121,100,101,115,116,114,111, +121,101,100,117,112,32,116,111,32,116,104,101,118,97,114,105,97,116,105,111,110, +114,101,109,97,105,110,105,110,103,105,116,32,105,115,32,110,111,116,99,101,110, +116,117,114,105,101,115,74,97,112,97,110,101,115,101,32,97,109,111,110,103,32, +116,104,101,99,111,109,112,108,101,116,101,100,97,108,103,111,114,105,116,104, +109,105,110,116,101,114,101,115,116,115,114,101,98,101,108,108,105,111,110,117, +110,100,101,102,105,110,101,100,101,110,99,111,117,114,97,103,101,114,101,115, +105,122,97,98,108,101,105,110,118,111,108,118,105,110,103,115,101,110,115,105, +116,105,118,101,117,110,105,118,101,114,115,97,108,112,114,111,118,105,115,105, +111,110,40,97,108,116,104,111,117,103,104,102,101,97,116,117,114,105,110,103,99, +111,110,100,117,99,116,101,100,41,44,32,119,104,105,99,104,32,99,111,110,116,105 +,110,117,101,100,45,104,101,97,100,101,114,34,62,70,101,98,114,117,97,114,121,32 +,110,117,109,101,114,111,117,115,32,111,118,101,114,102,108,111,119,58,99,111, +109,112,111,110,101,110,116,102,114,97,103,109,101,110,116,115,101,120,99,101, +108,108,101,110,116,99,111,108,115,112,97,110,61,34,116,101,99,104,110,105,99,97 +,108,110,101,97,114,32,116,104,101,32,65,100,118,97,110,99,101,100,32,115,111, +117,114,99,101,32,111,102,101,120,112,114,101,115,115,101,100,72,111,110,103,32, +75,111,110,103,32,70,97,99,101,98,111,111,107,109,117,108,116,105,112,108,101,32 +,109,101,99,104,97,110,105,115,109,101,108,101,118,97,116,105,111,110,111,102, +102,101,110,115,105,118,101,60,47,102,111,114,109,62,10,9,115,112,111,110,115, +111,114,101,100,100,111,99,117,109,101,110,116,46,111,114,32,38,113,117,111,116, +59,116,104,101,114,101,32,97,114,101,116,104,111,115,101,32,119,104,111,109,111, +118,101,109,101,110,116,115,112,114,111,99,101,115,115,101,115,100,105,102,102, +105,99,117,108,116,115,117,98,109,105,116,116,101,100,114,101,99,111,109,109,101 +,110,100,99,111,110,118,105,110,99,101,100,112,114,111,109,111,116,105,110,103, +34,32,119,105,100,116,104,61,34,46,114,101,112,108,97,99,101,40,99,108,97,115, +115,105,99,97,108,99,111,97,108,105,116,105,111,110,104,105,115,32,102,105,114, +115,116,100,101,99,105,115,105,111,110,115,97,115,115,105,115,116,97,110,116,105 +,110,100,105,99,97,116,101,100,101,118,111,108,117,116,105,111,110,45,119,114,97 +,112,112,101,114,34,101,110,111,117,103,104,32,116,111,97,108,111,110,103,32,116 +,104,101,100,101,108,105,118,101,114,101,100,45,45,62,13,10,60,33,45,45,65,109, +101,114,105,99,97,110,32,112,114,111,116,101,99,116,101,100,78,111,118,101,109, +98,101,114,32,60,47,115,116,121,108,101,62,60,102,117,114,110,105,116,117,114, +101,73,110,116,101,114,110,101,116,32,32,111,110,98,108,117,114,61,34,115,117, +115,112,101,110,100,101,100,114,101,99,105,112,105,101,110,116,98,97,115,101,100 +,32,111,110,32,77,111,114,101,111,118,101,114,44,97,98,111,108,105,115,104,101, +100,99,111,108,108,101,99,116,101,100,119,101,114,101,32,109,97,100,101,101,109, +111,116,105,111,110,97,108,101,109,101,114,103,101,110,99,121,110,97,114,114,97, +116,105,118,101,97,100,118,111,99,97,116,101,115,112,120,59,98,111,114,100,101, +114,99,111,109,109,105,116,116,101,100,100,105,114,61,34,108,116,114,34,101,109, +112,108,111,121,101,101,115,114,101,115,101,97,114,99,104,46,32,115,101,108,101, +99,116,101,100,115,117,99,99,101,115,115,111,114,99,117,115,116,111,109,101,114, +115,100,105,115,112,108,97,121,101,100,83,101,112,116,101,109,98,101,114,97,100, +100,67,108,97,115,115,40,70,97,99,101,98,111,111,107,32,115,117,103,103,101,115, +116,101,100,97,110,100,32,108,97,116,101,114,111,112,101,114,97,116,105,110,103, +101,108,97,98,111,114,97,116,101,83,111,109,101,116,105,109,101,115,73,110,115, +116,105,116,117,116,101,99,101,114,116,97,105,110,108,121,105,110,115,116,97,108 +,108,101,100,102,111,108,108,111,119,101,114,115,74,101,114,117,115,97,108,101, +109,116,104,101,121,32,104,97,118,101,99,111,109,112,117,116,105,110,103,103,101 +,110,101,114,97,116,101,100,112,114,111,118,105,110,99,101,115,103,117,97,114,97 +,110,116,101,101,97,114,98,105,116,114,97,114,121,114,101,99,111,103,110,105,122 +,101,119,97,110,116,101,100,32,116,111,112,120,59,119,105,100,116,104,58,116,104 +,101,111,114,121,32,111,102,98,101,104,97,118,105,111,117,114,87,104,105,108,101 +,32,116,104,101,101,115,116,105,109,97,116,101,100,98,101,103,97,110,32,116,111, +32,105,116,32,98,101,99,97,109,101,109,97,103,110,105,116,117,100,101,109,117, +115,116,32,104,97,118,101,109,111,114,101,32,116,104,97,110,68,105,114,101,99, +116,111,114,121,101,120,116,101,110,115,105,111,110,115,101,99,114,101,116,97, +114,121,110,97,116,117,114,97,108,108,121,111,99,99,117,114,114,105,110,103,118, +97,114,105,97,98,108,101,115,103,105,118,101,110,32,116,104,101,112,108,97,116, +102,111,114,109,46,60,47,108,97,98,101,108,62,60,102,97,105,108,101,100,32,116, +111,99,111,109,112,111,117,110,100,115,107,105,110,100,115,32,111,102,32,115,111 +,99,105,101,116,105,101,115,97,108,111,110,103,115,105,100,101,32,45,45,38,103, +116,59,10,10,115,111,117,116,104,119,101,115,116,116,104,101,32,114,105,103,104, +116,114,97,100,105,97,116,105,111,110,109,97,121,32,104,97,118,101,32,117,110, +101,115,99,97,112,101,40,115,112,111,107,101,110,32,105,110,34,32,104,114,101, +102,61,34,47,112,114,111,103,114,97,109,109,101,111,110,108,121,32,116,104,101, +32,99,111,109,101,32,102,114,111,109,100,105,114,101,99,116,111,114,121,98,117, +114,105,101,100,32,105,110,97,32,115,105,109,105,108,97,114,116,104,101,121,32, +119,101,114,101,60,47,102,111,110,116,62,60,47,78,111,114,119,101,103,105,97,110 +,115,112,101,99,105,102,105,101,100,112,114,111,100,117,99,105,110,103,112,97, +115,115,101,110,103,101,114,40,110,101,119,32,68,97,116,101,116,101,109,112,111, +114,97,114,121,102,105,99,116,105,111,110,97,108,65,102,116,101,114,32,116,104, +101,101,113,117,97,116,105,111,110,115,100,111,119,110,108,111,97,100,46,114,101 +,103,117,108,97,114,108,121,100,101,118,101,108,111,112,101,114,97,98,111,118, +101,32,116,104,101,108,105,110,107,101,100,32,116,111,112,104,101,110,111,109, +101,110,97,112,101,114,105,111,100,32,111,102,116,111,111,108,116,105,112,34,62, +115,117,98,115,116,97,110,99,101,97,117,116,111,109,97,116,105,99,97,115,112,101 +,99,116,32,111,102,65,109,111,110,103,32,116,104,101,99,111,110,110,101,99,116, +101,100,101,115,116,105,109,97,116,101,115,65,105,114,32,70,111,114,99,101,115, +121,115,116,101,109,32,111,102,111,98,106,101,99,116,105,118,101,105,109,109,101 +,100,105,97,116,101,109,97,107,105,110,103,32,105,116,112,97,105,110,116,105,110 +,103,115,99,111,110,113,117,101,114,101,100,97,114,101,32,115,116,105,108,108, +112,114,111,99,101,100,117,114,101,103,114,111,119,116,104,32,111,102,104,101,97 +,100,101,100,32,98,121,69,117,114,111,112,101,97,110,32,100,105,118,105,115,105, +111,110,115,109,111,108,101,99,117,108,101,115,102,114,97,110,99,104,105,115,101 +,105,110,116,101,110,116,105,111,110,97,116,116,114,97,99,116,101,100,99,104,105 +,108,100,104,111,111,100,97,108,115,111,32,117,115,101,100,100,101,100,105,99,97 +,116,101,100,115,105,110,103,97,112,111,114,101,100,101,103,114,101,101,32,111, +102,102,97,116,104,101,114,32,111,102,99,111,110,102,108,105,99,116,115,60,47,97 +,62,60,47,112,62,10,99,97,109,101,32,102,114,111,109,119,101,114,101,32,117,115, +101,100,110,111,116,101,32,116,104,97,116,114,101,99,101,105,118,105,110,103,69, +120,101,99,117,116,105,118,101,101,118,101,110,32,109,111,114,101,97,99,99,101, +115,115,32,116,111,99,111,109,109,97,110,100,101,114,80,111,108,105,116,105,99, +97,108,109,117,115,105,99,105,97,110,115,100,101,108,105,99,105,111,117,115,112, +114,105,115,111,110,101,114,115,97,100,118,101,110,116,32,111,102,85,84,70,45,56 +,34,32,47,62,60,33,91,67,68,65,84,65,91,34,62,67,111,110,116,97,99,116,83,111, +117,116,104,101,114,110,32,98,103,99,111,108,111,114,61,34,115,101,114,105,101, +115,32,111,102,46,32,73,116,32,119,97,115,32,105,110,32,69,117,114,111,112,101, +112,101,114,109,105,116,116,101,100,118,97,108,105,100,97,116,101,46,97,112,112, +101,97,114,105,110,103,111,102,102,105,99,105,97,108,115,115,101,114,105,111,117 +,115,108,121,45,108,97,110,103,117,97,103,101,105,110,105,116,105,97,116,101,100 +,101,120,116,101,110,100,105,110,103,108,111,110,103,45,116,101,114,109,105,110, +102,108,97,116,105,111,110,115,117,99,104,32,116,104,97,116,103,101,116,67,111, +111,107,105,101,109,97,114,107,101,100,32,98,121,60,47,98,117,116,116,111,110,62 +,105,109,112,108,101,109,101,110,116,98,117,116,32,105,116,32,105,115,105,110,99 +,114,101,97,115,101,115,100,111,119,110,32,116,104,101,32,114,101,113,117,105, +114,105,110,103,100,101,112,101,110,100,101,110,116,45,45,62,10,60,33,45,45,32, +105,110,116,101,114,118,105,101,119,87,105,116,104,32,116,104,101,32,99,111,112, +105,101,115,32,111,102,99,111,110,115,101,110,115,117,115,119,97,115,32,98,117, +105,108,116,86,101,110,101,122,117,101,108,97,40,102,111,114,109,101,114,108,121 +,116,104,101,32,115,116,97,116,101,112,101,114,115,111,110,110,101,108,115,116, +114,97,116,101,103,105,99,102,97,118,111,117,114,32,111,102,105,110,118,101,110, +116,105,111,110,87,105,107,105,112,101,100,105,97,99,111,110,116,105,110,101,110 +,116,118,105,114,116,117,97,108,108,121,119,104,105,99,104,32,119,97,115,112,114 +,105,110,99,105,112,108,101,67,111,109,112,108,101,116,101,32,105,100,101,110, +116,105,99,97,108,115,104,111,119,32,116,104,97,116,112,114,105,109,105,116,105, +118,101,97,119,97,121,32,102,114,111,109,109,111,108,101,99,117,108,97,114,112, +114,101,99,105,115,101,108,121,100,105,115,115,111,108,118,101,100,85,110,100, +101,114,32,116,104,101,118,101,114,115,105,111,110,61,34,62,38,110,98,115,112,59 +,60,47,73,116,32,105,115,32,116,104,101,32,84,104,105,115,32,105,115,32,119,105, +108,108,32,104,97,118,101,111,114,103,97,110,105,115,109,115,115,111,109,101,32, +116,105,109,101,70,114,105,101,100,114,105,99,104,119,97,115,32,102,105,114,115, +116,116,104,101,32,111,110,108,121,32,102,97,99,116,32,116,104,97,116,102,111, +114,109,32,105,100,61,34,112,114,101,99,101,100,105,110,103,84,101,99,104,110, +105,99,97,108,112,104,121,115,105,99,105,115,116,111,99,99,117,114,115,32,105, +110,110,97,118,105,103,97,116,111,114,115,101,99,116,105,111,110,34,62,115,112, +97,110,32,105,100,61,34,115,111,117,103,104,116,32,116,111,98,101,108,111,119,32 +,116,104,101,115,117,114,118,105,118,105,110,103,125,60,47,115,116,121,108,101, +62,104,105,115,32,100,101,97,116,104,97,115,32,105,110,32,116,104,101,99,97,117, +115,101,100,32,98,121,112,97,114,116,105,97,108,108,121,101,120,105,115,116,105, +110,103,32,117,115,105,110,103,32,116,104,101,119,97,115,32,103,105,118,101,110, +97,32,108,105,115,116,32,111,102,108,101,118,101,108,115,32,111,102,110,111,116, +105,111,110,32,111,102,79,102,102,105,99,105,97,108,32,100,105,115,109,105,115, +115,101,100,115,99,105,101,110,116,105,115,116,114,101,115,101,109,98,108,101, +115,100,117,112,108,105,99,97,116,101,101,120,112,108,111,115,105,118,101,114, +101,99,111,118,101,114,101,100,97,108,108,32,111,116,104,101,114,103,97,108,108, +101,114,105,101,115,123,112,97,100,100,105,110,103,58,112,101,111,112,108,101,32 +,111,102,114,101,103,105,111,110,32,111,102,97,100,100,114,101,115,115,101,115, +97,115,115,111,99,105,97,116,101,105,109,103,32,97,108,116,61,34,105,110,32,109, +111,100,101,114,110,115,104,111,117,108,100,32,98,101,109,101,116,104,111,100,32 +,111,102,114,101,112,111,114,116,105,110,103,116,105,109,101,115,116,97,109,112, +110,101,101,100,101,100,32,116,111,116,104,101,32,71,114,101,97,116,114,101,103, +97,114,100,105,110,103,115,101,101,109,101,100,32,116,111,118,105,101,119,101, +100,32,97,115,105,109,112,97,99,116,32,111,110,105,100,101,97,32,116,104,97,116, +116,104,101,32,87,111,114,108,100,104,101,105,103,104,116,32,111,102,101,120,112 +,97,110,100,105,110,103,84,104,101,115,101,32,97,114,101,99,117,114,114,101,110, +116,34,62,99,97,114,101,102,117,108,108,121,109,97,105,110,116,97,105,110,115,99 +,104,97,114,103,101,32,111,102,67,108,97,115,115,105,99,97,108,97,100,100,114, +101,115,115,101,100,112,114,101,100,105,99,116,101,100,111,119,110,101,114,115, +104,105,112,60,100,105,118,32,105,100,61,34,114,105,103,104,116,34,62,13,10,114, +101,115,105,100,101,110,99,101,108,101,97,118,101,32,116,104,101,99,111,110,116, +101,110,116,34,62,97,114,101,32,111,102,116,101,110,32,32,125,41,40,41,59,13,10, +112,114,111,98,97,98,108,121,32,80,114,111,102,101,115,115,111,114,45,98,117,116 +,116,111,110,34,32,114,101,115,112,111,110,100,101,100,115,97,121,115,32,116,104 +,97,116,104,97,100,32,116,111,32,98,101,112,108,97,99,101,100,32,105,110,72,117, +110,103,97,114,105,97,110,115,116,97,116,117,115,32,111,102,115,101,114,118,101, +115,32,97,115,85,110,105,118,101,114,115,97,108,101,120,101,99,117,116,105,111, +110,97,103,103,114,101,103,97,116,101,102,111,114,32,119,104,105,99,104,105,110, +102,101,99,116,105,111,110,97,103,114,101,101,100,32,116,111,104,111,119,101,118 +,101,114,44,32,112,111,112,117,108,97,114,34,62,112,108,97,99,101,100,32,111,110 +,99,111,110,115,116,114,117,99,116,101,108,101,99,116,111,114,97,108,115,121,109 +,98,111,108,32,111,102,105,110,99,108,117,100,105,110,103,114,101,116,117,114, +110,32,116,111,97,114,99,104,105,116,101,99,116,67,104,114,105,115,116,105,97, +110,112,114,101,118,105,111,117,115,32,108,105,118,105,110,103,32,105,110,101,97 +,115,105,101,114,32,116,111,112,114,111,102,101,115,115,111,114,10,38,108,116,59 +,33,45,45,32,101,102,102,101,99,116,32,111,102,97,110,97,108,121,116,105,99,115, +119,97,115,32,116,97,107,101,110,119,104,101,114,101,32,116,104,101,116,111,111, +107,32,111,118,101,114,98,101,108,105,101,102,32,105,110,65,102,114,105,107,97, +97,110,115,97,115,32,102,97,114,32,97,115,112,114,101,118,101,110,116,101,100, +119,111,114,107,32,119,105,116,104,97,32,115,112,101,99,105,97,108,60,102,105, +101,108,100,115,101,116,67,104,114,105,115,116,109,97,115,82,101,116,114,105,101 +,118,101,100,10,10,73,110,32,116,104,101,32,98,97,99,107,32,105,110,116,111,110, +111,114,116,104,101,97,115,116,109,97,103,97,122,105,110,101,115,62,60,115,116, +114,111,110,103,62,99,111,109,109,105,116,116,101,101,103,111,118,101,114,110, +105,110,103,103,114,111,117,112,115,32,111,102,115,116,111,114,101,100,32,105, +110,101,115,116,97,98,108,105,115,104,97,32,103,101,110,101,114,97,108,105,116, +115,32,102,105,114,115,116,116,104,101,105,114,32,111,119,110,112,111,112,117, +108,97,116,101,100,97,110,32,111,98,106,101,99,116,67,97,114,105,98,98,101,97, +110,97,108,108,111,119,32,116,104,101,100,105,115,116,114,105,99,116,115,119,105 +,115,99,111,110,115,105,110,108,111,99,97,116,105,111,110,46,59,32,119,105,100, +116,104,58,32,105,110,104,97,98,105,116,101,100,83,111,99,105,97,108,105,115,116 +,74,97,110,117,97,114,121,32,49,60,47,102,111,111,116,101,114,62,115,105,109,105 +,108,97,114,108,121,99,104,111,105,99,101,32,111,102,116,104,101,32,115,97,109, +101,32,115,112,101,99,105,102,105,99,32,98,117,115,105,110,101,115,115,32,84,104 +,101,32,102,105,114,115,116,46,108,101,110,103,116,104,59,32,100,101,115,105,114 +,101,32,116,111,100,101,97,108,32,119,105,116,104,115,105,110,99,101,32,116,104, +101,117,115,101,114,65,103,101,110,116,99,111,110,99,101,105,118,101,100,105,110 +,100,101,120,46,112,104,112,97,115,32,38,113,117,111,116,59,101,110,103,97,103, +101,32,105,110,114,101,99,101,110,116,108,121,44,102,101,119,32,121,101,97,114, +115,119,101,114,101,32,97,108,115,111,10,60,104,101,97,100,62,10,60,101,100,105, +116,101,100,32,98,121,97,114,101,32,107,110,111,119,110,99,105,116,105,101,115, +32,105,110,97,99,99,101,115,115,107,101,121,99,111,110,100,101,109,110,101,100, +97,108,115,111,32,104,97,118,101,115,101,114,118,105,99,101,115,44,102,97,109, +105,108,121,32,111,102,83,99,104,111,111,108,32,111,102,99,111,110,118,101,114, +116,101,100,110,97,116,117,114,101,32,111,102,32,108,97,110,103,117,97,103,101, +109,105,110,105,115,116,101,114,115,60,47,111,98,106,101,99,116,62,116,104,101, +114,101,32,105,115,32,97,32,112,111,112,117,108,97,114,115,101,113,117,101,110, +99,101,115,97,100,118,111,99,97,116,101,100,84,104,101,121,32,119,101,114,101,97 +,110,121,32,111,116,104,101,114,108,111,99,97,116,105,111,110,61,101,110,116,101 +,114,32,116,104,101,109,117,99,104,32,109,111,114,101,114,101,102,108,101,99,116 +,101,100,119,97,115,32,110,97,109,101,100,111,114,105,103,105,110,97,108,32,97, +32,116,121,112,105,99,97,108,119,104,101,110,32,116,104,101,121,101,110,103,105, +110,101,101,114,115,99,111,117,108,100,32,110,111,116,114,101,115,105,100,101, +110,116,115,119,101,100,110,101,115,100,97,121,116,104,101,32,116,104,105,114, +100,32,112,114,111,100,117,99,116,115,74,97,110,117,97,114,121,32,50,119,104,97, +116,32,116,104,101,121,97,32,99,101,114,116,97,105,110,114,101,97,99,116,105,111 +,110,115,112,114,111,99,101,115,115,111,114,97,102,116,101,114,32,104,105,115, +116,104,101,32,108,97,115,116,32,99,111,110,116,97,105,110,101,100,34,62,60,47, +100,105,118,62,10,60,47,97,62,60,47,116,100,62,100,101,112,101,110,100,32,111, +110,115,101,97,114,99,104,34,62,10,112,105,101,99,101,115,32,111,102,99,111,109, +112,101,116,105,110,103,82,101,102,101,114,101,110,99,101,116,101,110,110,101, +115,115,101,101,119,104,105,99,104,32,104,97,115,32,118,101,114,115,105,111,110, +61,60,47,115,112,97,110,62,32,60,60,47,104,101,97,100,101,114,62,103,105,118,101 +,115,32,116,104,101,104,105,115,116,111,114,105,97,110,118,97,108,117,101,61,34, +34,62,112,97,100,100,105,110,103,58,48,118,105,101,119,32,116,104,97,116,116,111 +,103,101,116,104,101,114,44,116,104,101,32,109,111,115,116,32,119,97,115,32,102, +111,117,110,100,115,117,98,115,101,116,32,111,102,97,116,116,97,99,107,32,111, +110,99,104,105,108,100,114,101,110,44,112,111,105,110,116,115,32,111,102,112,101 +,114,115,111,110,97,108,32,112,111,115,105,116,105,111,110,58,97,108,108,101,103 +,101,100,108,121,67,108,101,118,101,108,97,110,100,119,97,115,32,108,97,116,101, +114,97,110,100,32,97,102,116,101,114,97,114,101,32,103,105,118,101,110,119,97, +115,32,115,116,105,108,108,115,99,114,111,108,108,105,110,103,100,101,115,105, +103,110,32,111,102,109,97,107,101,115,32,116,104,101,109,117,99,104,32,108,101, +115,115,65,109,101,114,105,99,97,110,115,46,10,10,65,102,116,101,114,32,44,32,98 +,117,116,32,116,104,101,77,117,115,101,117,109,32,111,102,108,111,117,105,115, +105,97,110,97,40,102,114,111,109,32,116,104,101,109,105,110,110,101,115,111,116, +97,112,97,114,116,105,99,108,101,115,97,32,112,114,111,99,101,115,115,68,111,109 +,105,110,105,99,97,110,118,111,108,117,109,101,32,111,102,114,101,116,117,114, +110,105,110,103,100,101,102,101,110,115,105,118,101,48,48,112,120,124,114,105, +103,104,109,97,100,101,32,102,114,111,109,109,111,117,115,101,111,118,101,114,34 +,32,115,116,121,108,101,61,34,115,116,97,116,101,115,32,111,102,40,119,104,105, +99,104,32,105,115,99,111,110,116,105,110,117,101,115,70,114,97,110,99,105,115,99 +,111,98,117,105,108,100,105,110,103,32,119,105,116,104,111,117,116,32,97,119,105 +,116,104,32,115,111,109,101,119,104,111,32,119,111,117,108,100,97,32,102,111,114 +,109,32,111,102,97,32,112,97,114,116,32,111,102,98,101,102,111,114,101,32,105, +116,107,110,111,119,110,32,97,115,32,32,83,101,114,118,105,99,101,115,108,111,99 +,97,116,105,111,110,32,97,110,100,32,111,102,116,101,110,109,101,97,115,117,114, +105,110,103,97,110,100,32,105,116,32,105,115,112,97,112,101,114,98,97,99,107,118 +,97,108,117,101,115,32,111,102,13,10,60,116,105,116,108,101,62,61,32,119,105,110 +,100,111,119,46,100,101,116,101,114,109,105,110,101,101,114,38,113,117,111,116, +59,32,112,108,97,121,101,100,32,98,121,97,110,100,32,101,97,114,108,121,60,47,99 +,101,110,116,101,114,62,102,114,111,109,32,116,104,105,115,116,104,101,32,116, +104,114,101,101,112,111,119,101,114,32,97,110,100,111,102,32,38,113,117,111,116, +59,105,110,110,101,114,72,84,77,76,60,97,32,104,114,101,102,61,34,121,58,105,110 +,108,105,110,101,59,67,104,117,114,99,104,32,111,102,116,104,101,32,101,118,101, +110,116,118,101,114,121,32,104,105,103,104,111,102,102,105,99,105,97,108,32,45, +104,101,105,103,104,116,58,32,99,111,110,116,101,110,116,61,34,47,99,103,105,45, +98,105,110,47,116,111,32,99,114,101,97,116,101,97,102,114,105,107,97,97,110,115, +101,115,112,101,114,97,110,116,111,102,114,97,110,195,167,97,105,115,108,97,116, +118,105,101,197,161,117,108,105,101,116,117,118,105,197,179,196,140,101,197,161, +116,105,110,97,196,141,101,197,161,116,105,110,97,224,185,132,224,184,151,224, +184,162,230,151,165,230,156,172,232,170,158,231,174,128,228,189,147,229,173,151, +231,185,129,233,171,148,229,173,151,237,149,156,234,181,173,236,150,180,228,184, +186,228,187,128,228,185,136,232,174,161,231,174,151,230,156,186,231,172,148,232, +174,176,230,156,172,232,168,142,232,171,150,229,141,128,230,156,141,229,138,161, +229,153,168,228,186,146,232,129,148,231,189,145,230,136,191,229,156,176,228,186, +167,228,191,177,228,185,144,233,131,168,229,135,186,231,137,136,231,164,190,230, +142,146,232,161,140,230,166,156,233,131,168,232,144,189,230,160,188,232,191,155, +228,184,128,230,173,165,230,148,175,228,187,152,229,174,157,233,170,140,232,175, +129,231,160,129,229,167,148,229,145,152,228,188,154,230,149,176,230,141,174,229, +186,147,230,182,136,232,180,185,232,128,133,229,138,158,229,133,172,229,174,164, +232,174,168,232,174,186,229,140,186,230,183,177,229,156,179,229,184,130,230,146, +173,230,148,190,229,153,168,229,140,151,228,186,172,229,184,130,229,164,167,229, +173,166,231,148,159,232,182,138,230,157,165,232,182,138,231,174,161,231,144,134, +229,145,152,228,191,161,230,129,175,231,189,145,115,101,114,118,105,99,105,111, +115,97,114,116,195,173,99,117,108,111,97,114,103,101,110,116,105,110,97,98,97, +114,99,101,108,111,110,97,99,117,97,108,113,117,105,101,114,112,117,98,108,105, +99,97,100,111,112,114,111,100,117,99,116,111,115,112,111,108,195,173,116,105,99, +97,114,101,115,112,117,101,115,116,97,119,105,107,105,112,101,100,105,97,115,105 +,103,117,105,101,110,116,101,98,195,186,115,113,117,101,100,97,99,111,109,117, +110,105,100,97,100,115,101,103,117,114,105,100,97,100,112,114,105,110,99,105,112 +,97,108,112,114,101,103,117,110,116,97,115,99,111,110,116,101,110,105,100,111, +114,101,115,112,111,110,100,101,114,118,101,110,101,122,117,101,108,97,112,114, +111,98,108,101,109,97,115,100,105,99,105,101,109,98,114,101,114,101,108,97,99, +105,195,179,110,110,111,118,105,101,109,98,114,101,115,105,109,105,108,97,114, +101,115,112,114,111,121,101,99,116,111,115,112,114,111,103,114,97,109,97,115,105 +,110,115,116,105,116,117,116,111,97,99,116,105,118,105,100,97,100,101,110,99,117 +,101,110,116,114,97,101,99,111,110,111,109,195,173,97,105,109,195,161,103,101, +110,101,115,99,111,110,116,97,99,116,97,114,100,101,115,99,97,114,103,97,114,110 +,101,99,101,115,97,114,105,111,97,116,101,110,99,105,195,179,110,116,101,108,195 +,169,102,111,110,111,99,111,109,105,115,105,195,179,110,99,97,110,99,105,111,110 +,101,115,99,97,112,97,99,105,100,97,100,101,110,99,111,110,116,114,97,114,97,110 +,195,161,108,105,115,105,115,102,97,118,111,114,105,116,111,115,116,195,169,114, +109,105,110,111,115,112,114,111,118,105,110,99,105,97,101,116,105,113,117,101, +116,97,115,101,108,101,109,101,110,116,111,115,102,117,110,99,105,111,110,101, +115,114,101,115,117,108,116,97,100,111,99,97,114,195,161,99,116,101,114,112,114, +111,112,105,101,100,97,100,112,114,105,110,99,105,112,105,111,110,101,99,101,115 +,105,100,97,100,109,117,110,105,99,105,112,97,108,99,114,101,97,99,105,195,179, +110,100,101,115,99,97,114,103,97,115,112,114,101,115,101,110,99,105,97,99,111, +109,101,114,99,105,97,108,111,112,105,110,105,111,110,101,115,101,106,101,114,99 +,105,99,105,111,101,100,105,116,111,114,105,97,108,115,97,108,97,109,97,110,99, +97,103,111,110,122,195,161,108,101,122,100,111,99,117,109,101,110,116,111,112, +101,108,195,173,99,117,108,97,114,101,99,105,101,110,116,101,115,103,101,110,101 +,114,97,108,101,115,116,97,114,114,97,103,111,110,97,112,114,195,161,99,116,105, +99,97,110,111,118,101,100,97,100,101,115,112,114,111,112,117,101,115,116,97,112, +97,99,105,101,110,116,101,115,116,195,169,99,110,105,99,97,115,111,98,106,101, +116,105,118,111,115,99,111,110,116,97,99,116,111,115,224,164,174,224,165,135,224 +,164,130,224,164,178,224,164,191,224,164,143,224,164,185,224,165,136,224,164,130 +,224,164,151,224,164,175,224,164,190,224,164,184,224,164,190,224,164,165,224,164 +,143,224,164,181,224,164,130,224,164,176,224,164,185,224,165,135,224,164,149,224 +,165,139,224,164,136,224,164,149,224,165,129,224,164,155,224,164,176,224,164,185 +,224,164,190,224,164,172,224,164,190,224,164,166,224,164,149,224,164,185,224,164 +,190,224,164,184,224,164,173,224,165,128,224,164,185,224,165,129,224,164,143,224 +,164,176,224,164,185,224,165,128,224,164,174,224,165,136,224,164,130,224,164,166 +,224,164,191,224,164,168,224,164,172,224,164,190,224,164,164,100,105,112,108,111 +,100,111,99,115,224,164,184,224,164,174,224,164,175,224,164,176,224,165,130,224, +164,170,224,164,168,224,164,190,224,164,174,224,164,170,224,164,164,224,164,190, +224,164,171,224,164,191,224,164,176,224,164,148,224,164,184,224,164,164,224,164, +164,224,164,176,224,164,185,224,164,178,224,165,139,224,164,151,224,164,185,224, +165,129,224,164,134,224,164,172,224,164,190,224,164,176,224,164,166,224,165,135, +224,164,182,224,164,185,224,165,129,224,164,136,224,164,150,224,165,135,224,164, +178,224,164,175,224,164,166,224,164,191,224,164,149,224,164,190,224,164,174,224, +164,181,224,165,135,224,164,172,224,164,164,224,165,128,224,164,168,224,164,172, +224,165,128,224,164,154,224,164,174,224,165,140,224,164,164,224,164,184,224,164, +190,224,164,178,224,164,178,224,165,135,224,164,150,224,164,156,224,165,137,224, +164,172,224,164,174,224,164,166,224,164,166,224,164,164,224,164,165,224,164,190, +224,164,168,224,164,185,224,165,128,224,164,182,224,164,185,224,164,176,224,164, +133,224,164,178,224,164,151,224,164,149,224,164,173,224,165,128,224,164,168,224, +164,151,224,164,176,224,164,170,224,164,190,224,164,184,224,164,176,224,164,190, +224,164,164,224,164,149,224,164,191,224,164,143,224,164,137,224,164,184,224,165, +135,224,164,151,224,164,175,224,165,128,224,164,185,224,165,130,224,164,129,224, +164,134,224,164,151,224,165,135,224,164,159,224,165,128,224,164,174,224,164,150, +224,165,139,224,164,156,224,164,149,224,164,190,224,164,176,224,164,133,224,164, +173,224,165,128,224,164,151,224,164,175,224,165,135,224,164,164,224,165,129,224, +164,174,224,164,181,224,165,139,224,164,159,224,164,166,224,165,135,224,164,130, +224,164,133,224,164,151,224,164,176,224,164,144,224,164,184,224,165,135,224,164, +174,224,165,135,224,164,178,224,164,178,224,164,151,224,164,190,224,164,185,224, +164,190,224,164,178,224,164,138,224,164,170,224,164,176,224,164,154,224,164,190, +224,164,176,224,164,144,224,164,184,224,164,190,224,164,166,224,165,135,224,164, +176,224,164,156,224,164,191,224,164,184,224,164,166,224,164,191,224,164,178,224, +164,172,224,164,130,224,164,166,224,164,172,224,164,168,224,164,190,224,164,185, +224,165,130,224,164,130,224,164,178,224,164,190,224,164,150,224,164,156,224,165, +128,224,164,164,224,164,172,224,164,159,224,164,168,224,164,174,224,164,191,224, +164,178,224,164,135,224,164,184,224,165,135,224,164,134,224,164,168,224,165,135, +224,164,168,224,164,175,224,164,190,224,164,149,224,165,129,224,164,178,224,164, +178,224,165,137,224,164,151,224,164,173,224,164,190,224,164,151,224,164,176,224, +165,135,224,164,178,224,164,156,224,164,151,224,164,185,224,164,176,224,164,190, +224,164,174,224,164,178,224,164,151,224,165,135,224,164,170,224,165,135,224,164, +156,224,164,185,224,164,190,224,164,165,224,164,135,224,164,184,224,165,128,224, +164,184,224,164,185,224,165,128,224,164,149,224,164,178,224,164,190,224,164,160, +224,165,128,224,164,149,224,164,185,224,164,190,224,164,129,224,164,166,224,165, +130,224,164,176,224,164,164,224,164,185,224,164,164,224,164,184,224,164,190,224, +164,164,224,164,175,224,164,190,224,164,166,224,164,134,224,164,175,224,164,190, +224,164,170,224,164,190,224,164,149,224,164,149,224,165,140,224,164,168,224,164, +182,224,164,190,224,164,174,224,164,166,224,165,135,224,164,150,224,164,175,224, +164,185,224,165,128,224,164,176,224,164,190,224,164,175,224,164,150,224,165,129, +224,164,166,224,164,178,224,164,151,224,165,128,99,97,116,101,103,111,114,105, +101,115,101,120,112,101,114,105,101,110,99,101,60,47,116,105,116,108,101,62,13, +10,67,111,112,121,114,105,103,104,116,32,106,97,118,97,115,99,114,105,112,116,99 +,111,110,100,105,116,105,111,110,115,101,118,101,114,121,116,104,105,110,103,60, +112,32,99,108,97,115,115,61,34,116,101,99,104,110,111,108,111,103,121,98,97,99, +107,103,114,111,117,110,100,60,97,32,99,108,97,115,115,61,34,109,97,110,97,103, +101,109,101,110,116,38,99,111,112,121,59,32,50,48,49,106,97,118,97,83,99,114,105 +,112,116,99,104,97,114,97,99,116,101,114,115,98,114,101,97,100,99,114,117,109,98 +,116,104,101,109,115,101,108,118,101,115,104,111,114,105,122,111,110,116,97,108, +103,111,118,101,114,110,109,101,110,116,67,97,108,105,102,111,114,110,105,97,97, +99,116,105,118,105,116,105,101,115,100,105,115,99,111,118,101,114,101,100,78,97, +118,105,103,97,116,105,111,110,116,114,97,110,115,105,116,105,111,110,99,111,110 +,110,101,99,116,105,111,110,110,97,118,105,103,97,116,105,111,110,97,112,112,101 +,97,114,97,110,99,101,60,47,116,105,116,108,101,62,60,109,99,104,101,99,107,98, +111,120,34,32,116,101,99,104,110,105,113,117,101,115,112,114,111,116,101,99,116, +105,111,110,97,112,112,97,114,101,110,116,108,121,97,115,32,119,101,108,108,32, +97,115,117,110,116,39,44,32,39,85,65,45,114,101,115,111,108,117,116,105,111,110, +111,112,101,114,97,116,105,111,110,115,116,101,108,101,118,105,115,105,111,110, +116,114,97,110,115,108,97,116,101,100,87,97,115,104,105,110,103,116,111,110,110, +97,118,105,103,97,116,111,114,46,32,61,32,119,105,110,100,111,119,46,105,109,112 +,114,101,115,115,105,111,110,38,108,116,59,98,114,38,103,116,59,108,105,116,101, +114,97,116,117,114,101,112,111,112,117,108,97,116,105,111,110,98,103,99,111,108, +111,114,61,34,35,101,115,112,101,99,105,97,108,108,121,32,99,111,110,116,101,110 +,116,61,34,112,114,111,100,117,99,116,105,111,110,110,101,119,115,108,101,116, +116,101,114,112,114,111,112,101,114,116,105,101,115,100,101,102,105,110,105,116, +105,111,110,108,101,97,100,101,114,115,104,105,112,84,101,99,104,110,111,108,111 +,103,121,80,97,114,108,105,97,109,101,110,116,99,111,109,112,97,114,105,115,111, +110,117,108,32,99,108,97,115,115,61,34,46,105,110,100,101,120,79,102,40,34,99, +111,110,99,108,117,115,105,111,110,100,105,115,99,117,115,115,105,111,110,99,111 +,109,112,111,110,101,110,116,115,98,105,111,108,111,103,105,99,97,108,82,101,118 +,111,108,117,116,105,111,110,95,99,111,110,116,97,105,110,101,114,117,110,100, +101,114,115,116,111,111,100,110,111,115,99,114,105,112,116,62,60,112,101,114,109 +,105,115,115,105,111,110,101,97,99,104,32,111,116,104,101,114,97,116,109,111,115 +,112,104,101,114,101,32,111,110,102,111,99,117,115,61,34,60,102,111,114,109,32, +105,100,61,34,112,114,111,99,101,115,115,105,110,103,116,104,105,115,46,118,97, +108,117,101,103,101,110,101,114,97,116,105,111,110,67,111,110,102,101,114,101, +110,99,101,115,117,98,115,101,113,117,101,110,116,119,101,108,108,45,107,110,111 +,119,110,118,97,114,105,97,116,105,111,110,115,114,101,112,117,116,97,116,105, +111,110,112,104,101,110,111,109,101,110,111,110,100,105,115,99,105,112,108,105, +110,101,108,111,103,111,46,112,110,103,34,32,40,100,111,99,117,109,101,110,116, +44,98,111,117,110,100,97,114,105,101,115,101,120,112,114,101,115,115,105,111,110 +,115,101,116,116,108,101,109,101,110,116,66,97,99,107,103,114,111,117,110,100, +111,117,116,32,111,102,32,116,104,101,101,110,116,101,114,112,114,105,115,101,40 +,34,104,116,116,112,115,58,34,32,117,110,101,115,99,97,112,101,40,34,112,97,115, +115,119,111,114,100,34,32,100,101,109,111,99,114,97,116,105,99,60,97,32,104,114, +101,102,61,34,47,119,114,97,112,112,101,114,34,62,10,109,101,109,98,101,114,115, +104,105,112,108,105,110,103,117,105,115,116,105,99,112,120,59,112,97,100,100,105 +,110,103,112,104,105,108,111,115,111,112,104,121,97,115,115,105,115,116,97,110, +99,101,117,110,105,118,101,114,115,105,116,121,102,97,99,105,108,105,116,105,101 +,115,114,101,99,111,103,110,105,122,101,100,112,114,101,102,101,114,101,110,99, +101,105,102,32,40,116,121,112,101,111,102,109,97,105,110,116,97,105,110,101,100, +118,111,99,97,98,117,108,97,114,121,104,121,112,111,116,104,101,115,105,115,46, +115,117,98,109,105,116,40,41,59,38,97,109,112,59,110,98,115,112,59,97,110,110, +111,116,97,116,105,111,110,98,101,104,105,110,100,32,116,104,101,70,111,117,110, +100,97,116,105,111,110,112,117,98,108,105,115,104,101,114,34,97,115,115,117,109, +112,116,105,111,110,105,110,116,114,111,100,117,99,101,100,99,111,114,114,117, +112,116,105,111,110,115,99,105,101,110,116,105,115,116,115,101,120,112,108,105, +99,105,116,108,121,105,110,115,116,101,97,100,32,111,102,100,105,109,101,110,115 +,105,111,110,115,32,111,110,67,108,105,99,107,61,34,99,111,110,115,105,100,101, +114,101,100,100,101,112,97,114,116,109,101,110,116,111,99,99,117,112,97,116,105, +111,110,115,111,111,110,32,97,102,116,101,114,105,110,118,101,115,116,109,101, +110,116,112,114,111,110,111,117,110,99,101,100,105,100,101,110,116,105,102,105, +101,100,101,120,112,101,114,105,109,101,110,116,77,97,110,97,103,101,109,101,110 +,116,103,101,111,103,114,97,112,104,105,99,34,32,104,101,105,103,104,116,61,34, +108,105,110,107,32,114,101,108,61,34,46,114,101,112,108,97,99,101,40,47,100,101, +112,114,101,115,115,105,111,110,99,111,110,102,101,114,101,110,99,101,112,117, +110,105,115,104,109,101,110,116,101,108,105,109,105,110,97,116,101,100,114,101, +115,105,115,116,97,110,99,101,97,100,97,112,116,97,116,105,111,110,111,112,112, +111,115,105,116,105,111,110,119,101,108,108,32,107,110,111,119,110,115,117,112, +112,108,101,109,101,110,116,100,101,116,101,114,109,105,110,101,100,104,49,32,99 +,108,97,115,115,61,34,48,112,120,59,109,97,114,103,105,110,109,101,99,104,97,110 +,105,99,97,108,115,116,97,116,105,115,116,105,99,115,99,101,108,101,98,114,97, +116,101,100,71,111,118,101,114,110,109,101,110,116,10,10,68,117,114,105,110,103, +32,116,100,101,118,101,108,111,112,101,114,115,97,114,116,105,102,105,99,105,97, +108,101,113,117,105,118,97,108,101,110,116,111,114,105,103,105,110,97,116,101, +100,67,111,109,109,105,115,115,105,111,110,97,116,116,97,99,104,109,101,110,116, +60,115,112,97,110,32,105,100,61,34,116,104,101,114,101,32,119,101,114,101,78,101 +,100,101,114,108,97,110,100,115,98,101,121,111,110,100,32,116,104,101,114,101, +103,105,115,116,101,114,101,100,106,111,117,114,110,97,108,105,115,116,102,114, +101,113,117,101,110,116,108,121,97,108,108,32,111,102,32,116,104,101,108,97,110, +103,61,34,101,110,34,32,60,47,115,116,121,108,101,62,13,10,97,98,115,111,108,117 +,116,101,59,32,115,117,112,112,111,114,116,105,110,103,101,120,116,114,101,109, +101,108,121,32,109,97,105,110,115,116,114,101,97,109,60,47,115,116,114,111,110, +103,62,32,112,111,112,117,108,97,114,105,116,121,101,109,112,108,111,121,109,101 +,110,116,60,47,116,97,98,108,101,62,13,10,32,99,111,108,115,112,97,110,61,34,60, +47,102,111,114,109,62,10,32,32,99,111,110,118,101,114,115,105,111,110,97,98,111, +117,116,32,116,104,101,32,60,47,112,62,60,47,100,105,118,62,105,110,116,101,103, +114,97,116,101,100,34,32,108,97,110,103,61,34,101,110,80,111,114,116,117,103,117 +,101,115,101,115,117,98,115,116,105,116,117,116,101,105,110,100,105,118,105,100, +117,97,108,105,109,112,111,115,115,105,98,108,101,109,117,108,116,105,109,101, +100,105,97,97,108,109,111,115,116,32,97,108,108,112,120,32,115,111,108,105,100, +32,35,97,112,97,114,116,32,102,114,111,109,115,117,98,106,101,99,116,32,116,111, +105,110,32,69,110,103,108,105,115,104,99,114,105,116,105,99,105,122,101,100,101, +120,99,101,112,116,32,102,111,114,103,117,105,100,101,108,105,110,101,115,111, +114,105,103,105,110,97,108,108,121,114,101,109,97,114,107,97,98,108,101,116,104, +101,32,115,101,99,111,110,100,104,50,32,99,108,97,115,115,61,34,60,97,32,116,105 +,116,108,101,61,34,40,105,110,99,108,117,100,105,110,103,112,97,114,97,109,101, +116,101,114,115,112,114,111,104,105,98,105,116,101,100,61,32,34,104,116,116,112, +58,47,47,100,105,99,116,105,111,110,97,114,121,112,101,114,99,101,112,116,105, +111,110,114,101,118,111,108,117,116,105,111,110,102,111,117,110,100,97,116,105, +111,110,112,120,59,104,101,105,103,104,116,58,115,117,99,99,101,115,115,102,117, +108,115,117,112,112,111,114,116,101,114,115,109,105,108,108,101,110,110,105,117, +109,104,105,115,32,102,97,116,104,101,114,116,104,101,32,38,113,117,111,116,59, +110,111,45,114,101,112,101,97,116,59,99,111,109,109,101,114,99,105,97,108,105, +110,100,117,115,116,114,105,97,108,101,110,99,111,117,114,97,103,101,100,97,109, +111,117,110,116,32,111,102,32,117,110,111,102,102,105,99,105,97,108,101,102,102, +105,99,105,101,110,99,121,82,101,102,101,114,101,110,99,101,115,99,111,111,114, +100,105,110,97,116,101,100,105,115,99,108,97,105,109,101,114,101,120,112,101,100 +,105,116,105,111,110,100,101,118,101,108,111,112,105,110,103,99,97,108,99,117, +108,97,116,101,100,115,105,109,112,108,105,102,105,101,100,108,101,103,105,116, +105,109,97,116,101,115,117,98,115,116,114,105,110,103,40,48,34,32,99,108,97,115, +115,61,34,99,111,109,112,108,101,116,101,108,121,105,108,108,117,115,116,114,97, +116,101,102,105,118,101,32,121,101,97,114,115,105,110,115,116,114,117,109,101, +110,116,80,117,98,108,105,115,104,105,110,103,49,34,32,99,108,97,115,115,61,34, +112,115,121,99,104,111,108,111,103,121,99,111,110,102,105,100,101,110,99,101,110 +,117,109,98,101,114,32,111,102,32,97,98,115,101,110,99,101,32,111,102,102,111,99 +,117,115,101,100,32,111,110,106,111,105,110,101,100,32,116,104,101,115,116,114, +117,99,116,117,114,101,115,112,114,101,118,105,111,117,115,108,121,62,60,47,105, +102,114,97,109,101,62,111,110,99,101,32,97,103,97,105,110,98,117,116,32,114,97, +116,104,101,114,105,109,109,105,103,114,97,110,116,115,111,102,32,99,111,117,114 +,115,101,44,97,32,103,114,111,117,112,32,111,102,76,105,116,101,114,97,116,117, +114,101,85,110,108,105,107,101,32,116,104,101,60,47,97,62,38,110,98,115,112,59, +10,102,117,110,99,116,105,111,110,32,105,116,32,119,97,115,32,116,104,101,67,111 +,110,118,101,110,116,105,111,110,97,117,116,111,109,111,98,105,108,101,80,114, +111,116,101,115,116,97,110,116,97,103,103,114,101,115,115,105,118,101,97,102,116 +,101,114,32,116,104,101,32,83,105,109,105,108,97,114,108,121,44,34,32,47,62,60, +47,100,105,118,62,99,111,108,108,101,99,116,105,111,110,13,10,102,117,110,99,116 +,105,111,110,118,105,115,105,98,105,108,105,116,121,116,104,101,32,117,115,101, +32,111,102,118,111,108,117,110,116,101,101,114,115,97,116,116,114,97,99,116,105, +111,110,117,110,100,101,114,32,116,104,101,32,116,104,114,101,97,116,101,110,101 +,100,42,60,33,91,67,68,65,84,65,91,105,109,112,111,114,116,97,110,99,101,105,110 +,32,103,101,110,101,114,97,108,116,104,101,32,108,97,116,116,101,114,60,47,102, +111,114,109,62,10,60,47,46,105,110,100,101,120,79,102,40,39,105,32,61,32,48,59, +32,105,32,60,100,105,102,102,101,114,101,110,99,101,100,101,118,111,116,101,100, +32,116,111,116,114,97,100,105,116,105,111,110,115,115,101,97,114,99,104,32,102, +111,114,117,108,116,105,109,97,116,101,108,121,116,111,117,114,110,97,109,101, +110,116,97,116,116,114,105,98,117,116,101,115,115,111,45,99,97,108,108,101,100, +32,125,10,60,47,115,116,121,108,101,62,101,118,97,108,117,97,116,105,111,110,101 +,109,112,104,97,115,105,122,101,100,97,99,99,101,115,115,105,98,108,101,60,47, +115,101,99,116,105,111,110,62,115,117,99,99,101,115,115,105,111,110,97,108,111, +110,103,32,119,105,116,104,77,101,97,110,119,104,105,108,101,44,105,110,100,117, +115,116,114,105,101,115,60,47,97,62,60,98,114,32,47,62,104,97,115,32,98,101,99, +111,109,101,97,115,112,101,99,116,115,32,111,102,84,101,108,101,118,105,115,105, +111,110,115,117,102,102,105,99,105,101,110,116,98,97,115,107,101,116,98,97,108, +108,98,111,116,104,32,115,105,100,101,115,99,111,110,116,105,110,117,105,110,103 +,97,110,32,97,114,116,105,99,108,101,60,105,109,103,32,97,108,116,61,34,97,100, +118,101,110,116,117,114,101,115,104,105,115,32,109,111,116,104,101,114,109,97, +110,99,104,101,115,116,101,114,112,114,105,110,99,105,112,108,101,115,112,97,114 +,116,105,99,117,108,97,114,99,111,109,109,101,110,116,97,114,121,101,102,102,101 +,99,116,115,32,111,102,100,101,99,105,100,101,100,32,116,111,34,62,60,115,116, +114,111,110,103,62,112,117,98,108,105,115,104,101,114,115,74,111,117,114,110,97, +108,32,111,102,100,105,102,102,105,99,117,108,116,121,102,97,99,105,108,105,116, +97,116,101,97,99,99,101,112,116,97,98,108,101,115,116,121,108,101,46,99,115,115, +34,9,102,117,110,99,116,105,111,110,32,105,110,110,111,118,97,116,105,111,110,62 +,67,111,112,121,114,105,103,104,116,115,105,116,117,97,116,105,111,110,115,119, +111,117,108,100,32,104,97,118,101,98,117,115,105,110,101,115,115,101,115,68,105, +99,116,105,111,110,97,114,121,115,116,97,116,101,109,101,110,116,115,111,102,116 +,101,110,32,117,115,101,100,112,101,114,115,105,115,116,101,110,116,105,110,32, +74,97,110,117,97,114,121,99,111,109,112,114,105,115,105,110,103,60,47,116,105, +116,108,101,62,10,9,100,105,112,108,111,109,97,116,105,99,99,111,110,116,97,105, +110,105,110,103,112,101,114,102,111,114,109,105,110,103,101,120,116,101,110,115, +105,111,110,115,109,97,121,32,110,111,116,32,98,101,99,111,110,99,101,112,116,32 +,111,102,32,111,110,99,108,105,99,107,61,34,73,116,32,105,115,32,97,108,115,111, +102,105,110,97,110,99,105,97,108,32,109,97,107,105,110,103,32,116,104,101,76,117 +,120,101,109,98,111,117,114,103,97,100,100,105,116,105,111,110,97,108,97,114,101 +,32,99,97,108,108,101,100,101,110,103,97,103,101,100,32,105,110,34,115,99,114, +105,112,116,34,41,59,98,117,116,32,105,116,32,119,97,115,101,108,101,99,116,114, +111,110,105,99,111,110,115,117,98,109,105,116,61,34,10,60,33,45,45,32,69,110,100 +,32,101,108,101,99,116,114,105,99,97,108,111,102,102,105,99,105,97,108,108,121, +115,117,103,103,101,115,116,105,111,110,116,111,112,32,111,102,32,116,104,101, +117,110,108,105,107,101,32,116,104,101,65,117,115,116,114,97,108,105,97,110,79, +114,105,103,105,110,97,108,108,121,114,101,102,101,114,101,110,99,101,115,10,60, +47,104,101,97,100,62,13,10,114,101,99,111,103,110,105,115,101,100,105,110,105, +116,105,97,108,105,122,101,108,105,109,105,116,101,100,32,116,111,65,108,101,120 +,97,110,100,114,105,97,114,101,116,105,114,101,109,101,110,116,65,100,118,101, +110,116,117,114,101,115,102,111,117,114,32,121,101,97,114,115,10,10,38,108,116, +59,33,45,45,32,105,110,99,114,101,97,115,105,110,103,100,101,99,111,114,97,116, +105,111,110,104,51,32,99,108,97,115,115,61,34,111,114,105,103,105,110,115,32,111 +,102,111,98,108,105,103,97,116,105,111,110,114,101,103,117,108,97,116,105,111, +110,99,108,97,115,115,105,102,105,101,100,40,102,117,110,99,116,105,111,110,40, +97,100,118,97,110,116,97,103,101,115,98,101,105,110,103,32,116,104,101,32,104, +105,115,116,111,114,105,97,110,115,60,98,97,115,101,32,104,114,101,102,114,101, +112,101,97,116,101,100,108,121,119,105,108,108,105,110,103,32,116,111,99,111,109 +,112,97,114,97,98,108,101,100,101,115,105,103,110,97,116,101,100,110,111,109,105 +,110,97,116,105,111,110,102,117,110,99,116,105,111,110,97,108,105,110,115,105, +100,101,32,116,104,101,114,101,118,101,108,97,116,105,111,110,101,110,100,32,111 +,102,32,116,104,101,115,32,102,111,114,32,116,104,101,32,97,117,116,104,111,114, +105,122,101,100,114,101,102,117,115,101,100,32,116,111,116,97,107,101,32,112,108 +,97,99,101,97,117,116,111,110,111,109,111,117,115,99,111,109,112,114,111,109,105 +,115,101,112,111,108,105,116,105,99,97,108,32,114,101,115,116,97,117,114,97,110, +116,116,119,111,32,111,102,32,116,104,101,70,101,98,114,117,97,114,121,32,50,113 +,117,97,108,105,116,121,32,111,102,115,119,102,111,98,106,101,99,116,46,117,110, +100,101,114,115,116,97,110,100,110,101,97,114,108,121,32,97,108,108,119,114,105, +116,116,101,110,32,98,121,105,110,116,101,114,118,105,101,119,115,34,32,119,105, +100,116,104,61,34,49,119,105,116,104,100,114,97,119,97,108,102,108,111,97,116,58 +,108,101,102,116,105,115,32,117,115,117,97,108,108,121,99,97,110,100,105,100,97, +116,101,115,110,101,119,115,112,97,112,101,114,115,109,121,115,116,101,114,105, +111,117,115,68,101,112,97,114,116,109,101,110,116,98,101,115,116,32,107,110,111, +119,110,112,97,114,108,105,97,109,101,110,116,115,117,112,112,114,101,115,115, +101,100,99,111,110,118,101,110,105,101,110,116,114,101,109,101,109,98,101,114, +101,100,100,105,102,102,101,114,101,110,116,32,115,121,115,116,101,109,97,116, +105,99,104,97,115,32,108,101,100,32,116,111,112,114,111,112,97,103,97,110,100,97 +,99,111,110,116,114,111,108,108,101,100,105,110,102,108,117,101,110,99,101,115, +99,101,114,101,109,111,110,105,97,108,112,114,111,99,108,97,105,109,101,100,80, +114,111,116,101,99,116,105,111,110,108,105,32,99,108,97,115,115,61,34,83,99,105, +101,110,116,105,102,105,99,99,108,97,115,115,61,34,110,111,45,116,114,97,100,101 +,109,97,114,107,115,109,111,114,101,32,116,104,97,110,32,119,105,100,101,115,112 +,114,101,97,100,76,105,98,101,114,97,116,105,111,110,116,111,111,107,32,112,108, +97,99,101,100,97,121,32,111,102,32,116,104,101,97,115,32,108,111,110,103,32,97, +115,105,109,112,114,105,115,111,110,101,100,65,100,100,105,116,105,111,110,97, +108,10,60,104,101,97,100,62,10,60,109,76,97,98,111,114,97,116,111,114,121,78,111 +,118,101,109,98,101,114,32,50,101,120,99,101,112,116,105,111,110,115,73,110,100, +117,115,116,114,105,97,108,118,97,114,105,101,116,121,32,111,102,102,108,111,97, +116,58,32,108,101,102,68,117,114,105,110,103,32,116,104,101,97,115,115,101,115, +115,109,101,110,116,104,97,118,101,32,98,101,101,110,32,100,101,97,108,115,32, +119,105,116,104,83,116,97,116,105,115,116,105,99,115,111,99,99,117,114,114,101, +110,99,101,47,117,108,62,60,47,100,105,118,62,99,108,101,97,114,102,105,120,34, +62,116,104,101,32,112,117,98,108,105,99,109,97,110,121,32,121,101,97,114,115,119 +,104,105,99,104,32,119,101,114,101,111,118,101,114,32,116,105,109,101,44,115,121 +,110,111,110,121,109,111,117,115,99,111,110,116,101,110,116,34,62,10,112,114,101 +,115,117,109,97,98,108,121,104,105,115,32,102,97,109,105,108,121,117,115,101,114 +,65,103,101,110,116,46,117,110,101,120,112,101,99,116,101,100,105,110,99,108,117 +,100,105,110,103,32,99,104,97,108,108,101,110,103,101,100,97,32,109,105,110,111, +114,105,116,121,117,110,100,101,102,105,110,101,100,34,98,101,108,111,110,103, +115,32,116,111,116,97,107,101,110,32,102,114,111,109,105,110,32,79,99,116,111,98 +,101,114,112,111,115,105,116,105,111,110,58,32,115,97,105,100,32,116,111,32,98, +101,114,101,108,105,103,105,111,117,115,32,70,101,100,101,114,97,116,105,111,110 +,32,114,111,119,115,112,97,110,61,34,111,110,108,121,32,97,32,102,101,119,109, +101,97,110,116,32,116,104,97,116,108,101,100,32,116,111,32,116,104,101,45,45,62, +13,10,60,100,105,118,32,60,102,105,101,108,100,115,101,116,62,65,114,99,104,98, +105,115,104,111,112,32,99,108,97,115,115,61,34,110,111,98,101,105,110,103,32,117 +,115,101,100,97,112,112,114,111,97,99,104,101,115,112,114,105,118,105,108,101, +103,101,115,110,111,115,99,114,105,112,116,62,10,114,101,115,117,108,116,115,32, +105,110,109,97,121,32,98,101,32,116,104,101,69,97,115,116,101,114,32,101,103,103 +,109,101,99,104,97,110,105,115,109,115,114,101,97,115,111,110,97,98,108,101,80, +111,112,117,108,97,116,105,111,110,67,111,108,108,101,99,116,105,111,110,115,101 +,108,101,99,116,101,100,34,62,110,111,115,99,114,105,112,116,62,13,47,105,110, +100,101,120,46,112,104,112,97,114,114,105,118,97,108,32,111,102,45,106,115,115, +100,107,39,41,41,59,109,97,110,97,103,101,100,32,116,111,105,110,99,111,109,112, +108,101,116,101,99,97,115,117,97,108,116,105,101,115,99,111,109,112,108,101,116, +105,111,110,67,104,114,105,115,116,105,97,110,115,83,101,112,116,101,109,98,101, +114,32,97,114,105,116,104,109,101,116,105,99,112,114,111,99,101,100,117,114,101, +115,109,105,103,104,116,32,104,97,118,101,80,114,111,100,117,99,116,105,111,110, +105,116,32,97,112,112,101,97,114,115,80,104,105,108,111,115,111,112,104,121,102, +114,105,101,110,100,115,104,105,112,108,101,97,100,105,110,103,32,116,111,103, +105,118,105,110,103,32,116,104,101,116,111,119,97,114,100,32,116,104,101,103,117 +,97,114,97,110,116,101,101,100,100,111,99,117,109,101,110,116,101,100,99,111,108 +,111,114,58,35,48,48,48,118,105,100,101,111,32,103,97,109,101,99,111,109,109,105 +,115,115,105,111,110,114,101,102,108,101,99,116,105,110,103,99,104,97,110,103, +101,32,116,104,101,97,115,115,111,99,105,97,116,101,100,115,97,110,115,45,115, +101,114,105,102,111,110,107,101,121,112,114,101,115,115,59,32,112,97,100,100,105 +,110,103,58,72,101,32,119,97,115,32,116,104,101,117,110,100,101,114,108,121,105, +110,103,116,121,112,105,99,97,108,108,121,32,44,32,97,110,100,32,116,104,101,32, +115,114,99,69,108,101,109,101,110,116,115,117,99,99,101,115,115,105,118,101,115, +105,110,99,101,32,116,104,101,32,115,104,111,117,108,100,32,98,101,32,110,101, +116,119,111,114,107,105,110,103,97,99,99,111,117,110,116,105,110,103,117,115,101 +,32,111,102,32,116,104,101,108,111,119,101,114,32,116,104,97,110,115,104,111,119 +,115,32,116,104,97,116,60,47,115,112,97,110,62,10,9,9,99,111,109,112,108,97,105, +110,116,115,99,111,110,116,105,110,117,111,117,115,113,117,97,110,116,105,116, +105,101,115,97,115,116,114,111,110,111,109,101,114,104,101,32,100,105,100,32,110 +,111,116,100,117,101,32,116,111,32,105,116,115,97,112,112,108,105,101,100,32,116 +,111,97,110,32,97,118,101,114,97,103,101,101,102,102,111,114,116,115,32,116,111, +116,104,101,32,102,117,116,117,114,101,97,116,116,101,109,112,116,32,116,111,84, +104,101,114,101,102,111,114,101,44,99,97,112,97,98,105,108,105,116,121,82,101, +112,117,98,108,105,99,97,110,119,97,115,32,102,111,114,109,101,100,69,108,101,99 +,116,114,111,110,105,99,107,105,108,111,109,101,116,101,114,115,99,104,97,108, +108,101,110,103,101,115,112,117,98,108,105,115,104,105,110,103,116,104,101,32, +102,111,114,109,101,114,105,110,100,105,103,101,110,111,117,115,100,105,114,101, +99,116,105,111,110,115,115,117,98,115,105,100,105,97,114,121,99,111,110,115,112, +105,114,97,99,121,100,101,116,97,105,108,115,32,111,102,97,110,100,32,105,110,32 +,116,104,101,97,102,102,111,114,100,97,98,108,101,115,117,98,115,116,97,110,99, +101,115,114,101,97,115,111,110,32,102,111,114,99,111,110,118,101,110,116,105,111 +,110,105,116,101,109,116,121,112,101,61,34,97,98,115,111,108,117,116,101,108,121 +,115,117,112,112,111,115,101,100,108,121,114,101,109,97,105,110,101,100,32,97,97 +,116,116,114,97,99,116,105,118,101,116,114,97,118,101,108,108,105,110,103,115, +101,112,97,114,97,116,101,108,121,102,111,99,117,115,101,115,32,111,110,101,108, +101,109,101,110,116,97,114,121,97,112,112,108,105,99,97,98,108,101,102,111,117, +110,100,32,116,104,97,116,115,116,121,108,101,115,104,101,101,116,109,97,110,117 +,115,99,114,105,112,116,115,116,97,110,100,115,32,102,111,114,32,110,111,45,114, +101,112,101,97,116,40,115,111,109,101,116,105,109,101,115,67,111,109,109,101,114 +,99,105,97,108,105,110,32,65,109,101,114,105,99,97,117,110,100,101,114,116,97, +107,101,110,113,117,97,114,116,101,114,32,111,102,97,110,32,101,120,97,109,112, +108,101,112,101,114,115,111,110,97,108,108,121,105,110,100,101,120,46,112,104, +112,63,60,47,98,117,116,116,111,110,62,10,112,101,114,99,101,110,116,97,103,101, +98,101,115,116,45,107,110,111,119,110,99,114,101,97,116,105,110,103,32,97,34,32, +100,105,114,61,34,108,116,114,76,105,101,117,116,101,110,97,110,116,10,60,100, +105,118,32,105,100,61,34,116,104,101,121,32,119,111,117,108,100,97,98,105,108, +105,116,121,32,111,102,109,97,100,101,32,117,112,32,111,102,110,111,116,101,100, +32,116,104,97,116,99,108,101,97,114,32,116,104,97,116,97,114,103,117,101,32,116, +104,97,116,116,111,32,97,110,111,116,104,101,114,99,104,105,108,100,114,101,110, +39,115,112,117,114,112,111,115,101,32,111,102,102,111,114,109,117,108,97,116,101 +,100,98,97,115,101,100,32,117,112,111,110,116,104,101,32,114,101,103,105,111,110 +,115,117,98,106,101,99,116,32,111,102,112,97,115,115,101,110,103,101,114,115,112 +,111,115,115,101,115,115,105,111,110,46,10,10,73,110,32,116,104,101,32,66,101, +102,111,114,101,32,116,104,101,97,102,116,101,114,119,97,114,100,115,99,117,114, +114,101,110,116,108,121,32,97,99,114,111,115,115,32,116,104,101,115,99,105,101, +110,116,105,102,105,99,99,111,109,109,117,110,105,116,121,46,99,97,112,105,116, +97,108,105,115,109,105,110,32,71,101,114,109,97,110,121,114,105,103,104,116,45, +119,105,110,103,116,104,101,32,115,121,115,116,101,109,83,111,99,105,101,116,121 +,32,111,102,112,111,108,105,116,105,99,105,97,110,100,105,114,101,99,116,105,111 +,110,58,119,101,110,116,32,111,110,32,116,111,114,101,109,111,118,97,108,32,111, +102,32,78,101,119,32,89,111,114,107,32,97,112,97,114,116,109,101,110,116,115,105 +,110,100,105,99,97,116,105,111,110,100,117,114,105,110,103,32,116,104,101,117, +110,108,101,115,115,32,116,104,101,104,105,115,116,111,114,105,99,97,108,104,97, +100,32,98,101,101,110,32,97,100,101,102,105,110,105,116,105,118,101,105,110,103, +114,101,100,105,101,110,116,97,116,116,101,110,100,97,110,99,101,67,101,110,116, +101,114,32,102,111,114,112,114,111,109,105,110,101,110,99,101,114,101,97,100,121 +,83,116,97,116,101,115,116,114,97,116,101,103,105,101,115,98,117,116,32,105,110, +32,116,104,101,97,115,32,112,97,114,116,32,111,102,99,111,110,115,116,105,116, +117,116,101,99,108,97,105,109,32,116,104,97,116,108,97,98,111,114,97,116,111,114 +,121,99,111,109,112,97,116,105,98,108,101,102,97,105,108,117,114,101,32,111,102, +44,32,115,117,99,104,32,97,115,32,98,101,103,97,110,32,119,105,116,104,117,115, +105,110,103,32,116,104,101,32,116,111,32,112,114,111,118,105,100,101,102,101,97, +116,117,114,101,32,111,102,102,114,111,109,32,119,104,105,99,104,47,34,32,99,108 +,97,115,115,61,34,103,101,111,108,111,103,105,99,97,108,115,101,118,101,114,97, +108,32,111,102,100,101,108,105,98,101,114,97,116,101,105,109,112,111,114,116,97, +110,116,32,104,111,108,100,115,32,116,104,97,116,105,110,103,38,113,117,111,116, +59,32,118,97,108,105,103,110,61,116,111,112,116,104,101,32,71,101,114,109,97,110 +,111,117,116,115,105,100,101,32,111,102,110,101,103,111,116,105,97,116,101,100, +104,105,115,32,99,97,114,101,101,114,115,101,112,97,114,97,116,105,111,110,105, +100,61,34,115,101,97,114,99,104,119,97,115,32,99,97,108,108,101,100,116,104,101, +32,102,111,117,114,116,104,114,101,99,114,101,97,116,105,111,110,111,116,104,101 +,114,32,116,104,97,110,112,114,101,118,101,110,116,105,111,110,119,104,105,108, +101,32,116,104,101,32,101,100,117,99,97,116,105,111,110,44,99,111,110,110,101,99 +,116,105,110,103,97,99,99,117,114,97,116,101,108,121,119,101,114,101,32,98,117, +105,108,116,119,97,115,32,107,105,108,108,101,100,97,103,114,101,101,109,101,110 +,116,115,109,117,99,104,32,109,111,114,101,32,68,117,101,32,116,111,32,116,104, +101,119,105,100,116,104,58,32,49,48,48,115,111,109,101,32,111,116,104,101,114,75 +,105,110,103,100,111,109,32,111,102,116,104,101,32,101,110,116,105,114,101,102, +97,109,111,117,115,32,102,111,114,116,111,32,99,111,110,110,101,99,116,111,98, +106,101,99,116,105,118,101,115,116,104,101,32,70,114,101,110,99,104,112,101,111, +112,108,101,32,97,110,100,102,101,97,116,117,114,101,100,34,62,105,115,32,115,97 +,105,100,32,116,111,115,116,114,117,99,116,117,114,97,108,114,101,102,101,114, +101,110,100,117,109,109,111,115,116,32,111,102,116,101,110,97,32,115,101,112,97, +114,97,116,101,45,62,10,60,100,105,118,32,105,100,32,79,102,102,105,99,105,97, +108,32,119,111,114,108,100,119,105,100,101,46,97,114,105,97,45,108,97,98,101,108 +,116,104,101,32,112,108,97,110,101,116,97,110,100,32,105,116,32,119,97,115,100, +34,32,118,97,108,117,101,61,34,108,111,111,107,105,110,103,32,97,116,98,101,110, +101,102,105,99,105,97,108,97,114,101,32,105,110,32,116,104,101,109,111,110,105, +116,111,114,105,110,103,114,101,112,111,114,116,101,100,108,121,116,104,101,32, +109,111,100,101,114,110,119,111,114,107,105,110,103,32,111,110,97,108,108,111, +119,101,100,32,116,111,119,104,101,114,101,32,116,104,101,32,105,110,110,111,118 +,97,116,105,118,101,60,47,97,62,60,47,100,105,118,62,115,111,117,110,100,116,114 +,97,99,107,115,101,97,114,99,104,70,111,114,109,116,101,110,100,32,116,111,32,98 +,101,105,110,112,117,116,32,105,100,61,34,111,112,101,110,105,110,103,32,111,102 +,114,101,115,116,114,105,99,116,101,100,97,100,111,112,116,101,100,32,98,121,97, +100,100,114,101,115,115,105,110,103,116,104,101,111,108,111,103,105,97,110,109, +101,116,104,111,100,115,32,111,102,118,97,114,105,97,110,116,32,111,102,67,104, +114,105,115,116,105,97,110,32,118,101,114,121,32,108,97,114,103,101,97,117,116, +111,109,111,116,105,118,101,98,121,32,102,97,114,32,116,104,101,114,97,110,103, +101,32,102,114,111,109,112,117,114,115,117,105,116,32,111,102,102,111,108,108, +111,119,32,116,104,101,98,114,111,117,103,104,116,32,116,111,105,110,32,69,110, +103,108,97,110,100,97,103,114,101,101,32,116,104,97,116,97,99,99,117,115,101,100 +,32,111,102,99,111,109,101,115,32,102,114,111,109,112,114,101,118,101,110,116, +105,110,103,100,105,118,32,115,116,121,108,101,61,104,105,115,32,111,114,32,104, +101,114,116,114,101,109,101,110,100,111,117,115,102,114,101,101,100,111,109,32, +111,102,99,111,110,99,101,114,110,105,110,103,48,32,49,101,109,32,49,101,109,59, +66,97,115,107,101,116,98,97,108,108,47,115,116,121,108,101,46,99,115,115,97,110, +32,101,97,114,108,105,101,114,101,118,101,110,32,97,102,116,101,114,47,34,32,116 +,105,116,108,101,61,34,46,99,111,109,47,105,110,100,101,120,116,97,107,105,110, +103,32,116,104,101,112,105,116,116,115,98,117,114,103,104,99,111,110,116,101,110 +,116,34,62,13,60,115,99,114,105,112,116,62,40,102,116,117,114,110,101,100,32,111 +,117,116,104,97,118,105,110,103,32,116,104,101,60,47,115,112,97,110,62,13,10,32, +111,99,99,97,115,105,111,110,97,108,98,101,99,97,117,115,101,32,105,116,115,116, +97,114,116,101,100,32,116,111,112,104,121,115,105,99,97,108,108,121,62,60,47,100 +,105,118,62,10,32,32,99,114,101,97,116,101,100,32,98,121,67,117,114,114,101,110, +116,108,121,44,32,98,103,99,111,108,111,114,61,34,116,97,98,105,110,100,101,120, +61,34,100,105,115,97,115,116,114,111,117,115,65,110,97,108,121,116,105,99,115,32 +,97,108,115,111,32,104,97,115,32,97,62,60,100,105,118,32,105,100,61,34,60,47,115 +,116,121,108,101,62,10,60,99,97,108,108,101,100,32,102,111,114,115,105,110,103, +101,114,32,97,110,100,46,115,114,99,32,61,32,34,47,47,118,105,111,108,97,116,105 +,111,110,115,116,104,105,115,32,112,111,105,110,116,99,111,110,115,116,97,110, +116,108,121,105,115,32,108,111,99,97,116,101,100,114,101,99,111,114,100,105,110, +103,115,100,32,102,114,111,109,32,116,104,101,110,101,100,101,114,108,97,110,100 +,115,112,111,114,116,117,103,117,195,170,115,215,162,215,145,215,168,215,153,215 +,170,217,129,216,167,216,177,216,179,219,140,100,101,115,97,114,114,111,108,108, +111,99,111,109,101,110,116,97,114,105,111,101,100,117,99,97,99,105,195,179,110, +115,101,112,116,105,101,109,98,114,101,114,101,103,105,115,116,114,97,100,111, +100,105,114,101,99,99,105,195,179,110,117,98,105,99,97,99,105,195,179,110,112, +117,98,108,105,99,105,100,97,100,114,101,115,112,117,101,115,116,97,115,114,101, +115,117,108,116,97,100,111,115,105,109,112,111,114,116,97,110,116,101,114,101, +115,101,114,118,97,100,111,115,97,114,116,195,173,99,117,108,111,115,100,105,102 +,101,114,101,110,116,101,115,115,105,103,117,105,101,110,116,101,115,114,101,112 +,195,186,98,108,105,99,97,115,105,116,117,97,99,105,195,179,110,109,105,110,105, +115,116,101,114,105,111,112,114,105,118,97,99,105,100,97,100,100,105,114,101,99, +116,111,114,105,111,102,111,114,109,97,99,105,195,179,110,112,111,98,108,97,99, +105,195,179,110,112,114,101,115,105,100,101,110,116,101,99,111,110,116,101,110, +105,100,111,115,97,99,99,101,115,111,114,105,111,115,116,101,99,104,110,111,114, +97,116,105,112,101,114,115,111,110,97,108,101,115,99,97,116,101,103,111,114,195, +173,97,101,115,112,101,99,105,97,108,101,115,100,105,115,112,111,110,105,98,108, +101,97,99,116,117,97,108,105,100,97,100,114,101,102,101,114,101,110,99,105,97, +118,97,108,108,97,100,111,108,105,100,98,105,98,108,105,111,116,101,99,97,114, +101,108,97,99,105,111,110,101,115,99,97,108,101,110,100,97,114,105,111,112,111, +108,195,173,116,105,99,97,115,97,110,116,101,114,105,111,114,101,115,100,111,99, +117,109,101,110,116,111,115,110,97,116,117,114,97,108,101,122,97,109,97,116,101, +114,105,97,108,101,115,100,105,102,101,114,101,110,99,105,97,101,99,111,110,195, +179,109,105,99,97,116,114,97,110,115,112,111,114,116,101,114,111,100,114,195,173 +,103,117,101,122,112,97,114,116,105,99,105,112,97,114,101,110,99,117,101,110,116 +,114,97,110,100,105,115,99,117,115,105,195,179,110,101,115,116,114,117,99,116, +117,114,97,102,117,110,100,97,99,105,195,179,110,102,114,101,99,117,101,110,116, +101,115,112,101,114,109,97,110,101,110,116,101,116,111,116,97,108,109,101,110, +116,101,208,188,208,190,208,182,208,189,208,190,208,177,209,131,208,180,208,181, +209,130,208,188,208,190,208,182,208,181,209,130,208,178,209,128,208,181,208,188, +209,143,209,130,208,176,208,186,208,182,208,181,209,135,209,130,208,190,208,177, +209,139,208,177,208,190,208,187,208,181,208,181,208,190,209,135,208,181,208,189, +209,140,209,141,209,130,208,190,208,179,208,190,208,186,208,190,208,179,208,180, +208,176,208,191,208,190,209,129,208,187,208,181,208,178,209,129,208,181,208,179, +208,190,209,129,208,176,208,185,209,130,208,181,209,135,208,181,209,128,208,181, +208,183,208,188,208,190,208,179,209,131,209,130,209,129,208,176,208,185,209,130, +208,176,208,182,208,184,208,183,208,189,208,184,208,188,208,181,208,182,208,180, +209,131,208,177,209,131,208,180,209,131,209,130,208,159,208,190,208,184,209,129, +208,186,208,183,208,180,208,181,209,129,209,140,208,178,208,184,208,180,208,181, +208,190,209,129,208,178,209,143,208,183,208,184,208,189,209,131,208,182,208,189, +208,190,209,129,208,178,208,190,208,181,208,185,208,187,209,142,208,180,208,181, +208,185,208,191,208,190,209,128,208,189,208,190,208,188,208,189,208,190,208,179, +208,190,208,180,208,181,209,130,208,181,208,185,209,129,208,178,208,190,208,184, +209,133,208,191,209,128,208,176,208,178,208,176,209,130,208,176,208,186,208,190, +208,185,208,188,208,181,209,129,209,130,208,190,208,184,208,188,208,181,208,181, +209,130,208,182,208,184,208,183,208,189,209,140,208,190,208,180,208,189,208,190, +208,185,208,187,209,131,209,135,209,136,208,181,208,191,208,181,209,128,208,181, +208,180,209,135,208,176,209,129,209,130,208,184,209,135,208,176,209,129,209,130, +209,140,209,128,208,176,208,177,208,190,209,130,208,189,208,190,208,178,209,139, +209,133,208,191,209,128,208,176,208,178,208,190,209,129,208,190,208,177,208,190, +208,185,208,191,208,190,209,130,208,190,208,188,208,188,208,181,208,189,208,181, +208,181,209,135,208,184,209,129,208,187,208,181,208,189,208,190,208,178,209,139, +208,181,209,131,209,129,208,187,209,131,208,179,208,190,208,186,208,190,208,187, +208,190,208,189,208,176,208,183,208,176,208,180,209,130,208,176,208,186,208,190, +208,181,209,130,208,190,208,179,208,180,208,176,208,191,208,190,209,135,209,130, +208,184,208,159,208,190,209,129,208,187,208,181,209,130,208,176,208,186,208,184, +208,181,208,189,208,190,208,178,209,139,208,185,209,129,209,130,208,190,208,184, +209,130,209,130,208,176,208,186,208,184,209,133,209,129,209,128,208,176,208,183, +209,131,208,161,208,176,208,189,208,186,209,130,209,132,208,190,209,128,209,131, +208,188,208,154,208,190,208,179,208,180,208,176,208,186,208,189,208,184,208,179, +208,184,209,129,208,187,208,190,208,178,208,176,208,189,208,176,209,136,208,181, +208,185,208,189,208,176,208,185,209,130,208,184,209,129,208,178,208,190,208,184, +208,188,209,129,208,178,209,143,208,183,209,140,208,187,209,142,208,177,208,190, +208,185,209,135,208,176,209,129,209,130,208,190,209,129,209,128,208,181,208,180, +208,184,208,154,209,128,208,190,208,188,208,181,208,164,208,190,209,128,209,131, +208,188,209,128,209,139,208,189,208,186,208,181,209,129,209,130,208,176,208,187, +208,184,208,191,208,190,208,184,209,129,208,186,209,130,209,139,209,129,209,143, +209,135,208,188,208,181,209,129,209,143,209,134,209,134,208,181,208,189,209,130, +209,128,209,130,209,128,209,131,208,180,208,176,209,129,208,176,208,188,209,139, +209,133,209,128,209,139,208,189,208,186,208,176,208,157,208,190,208,178,209,139, +208,185,209,135,208,176,209,129,208,190,208,178,208,188,208,181,209,129,209,130, +208,176,209,132,208,184,208,187,209,140,208,188,208,188,208,176,209,128,209,130, +208,176,209,129,209,130,209,128,208,176,208,189,208,188,208,181,209,129,209,130, +208,181,209,130,208,181,208,186,209,129,209,130,208,189,208,176,209,136,208,184, +209,133,208,188,208,184,208,189,209,131,209,130,208,184,208,188,208,181,208,189, +208,184,208,184,208,188,208,181,209,142,209,130,208,189,208,190,208,188,208,181, +209,128,208,179,208,190,209,128,208,190,208,180,209,129,208,176,208,188,208,190, +208,188,209,141,209,130,208,190,208,188,209,131,208,186,208,190,208,189,209,134, +208,181,209,129,208,178,208,190,208,181,208,188,208,186,208,176,208,186,208,190, +208,185,208,144,209,128,209,133,208,184,208,178,217,133,217,134,216,170,216,175, +217,137,216,165,216,177,216,179,216,167,217,132,216,177,216,179,216,167,217,132, +216,169,216,167,217,132,216,185,216,167,217,133,217,131,216,170,216,168,217,135, +216,167,216,168,216,177,216,167,217,133,216,172,216,167,217,132,217,138,217,136, +217,133,216,167,217,132,216,181,217,136,216,177,216,172,216,175,217,138,216,175, +216,169,216,167,217,132,216,185,216,182,217,136,216,165,216,182,216,167,217,129, +216,169,216,167,217,132,217,130,216,179,217,133,216,167,217,132,216,185,216,167, +216,168,216,170,216,173,217,133,217,138,217,132,217,133,217,132,217,129,216,167, +216,170,217,133,217,132,216,170,217,130,217,137,216,170,216,185,216,175,217,138, +217,132,216,167,217,132,216,180,216,185,216,177,216,163,216,174,216,168,216,167, +216,177,216,170,216,183,217,136,217,138,216,177,216,185,217,132,217,138,217,131, +217,133,216,165,216,177,217,129,216,167,217,130,216,183,217,132,216,168,216,167, +216,170,216,167,217,132,217,132,216,186,216,169,216,170,216,177,216,170,217,138, +216,168,216,167,217,132,217,134,216,167,216,179,216,167,217,132,216,180,217,138, +216,174,217,133,217,134,216,170,216,175,217,138,216,167,217,132,216,185,216,177, +216,168,216,167,217,132,217,130,216,181,216,181,216,167,217,129,217,132,216,167, +217,133,216,185,217,132,217,138,217,135,216,167,216,170,216,173,216,175,217,138, +216,171,216,167,217,132,217,132,217,135,217,133,216,167,217,132,216,185,217,133, +217,132,217,133,217,131,216,170,216,168,216,169,217,138,217,133,217,131,217,134, +217,131,216,167,217,132,216,183,217,129,217,132,217,129,217,138,216,175,217,138, +217,136,216,165,216,175,216,167,216,177,216,169,216,170,216,167,216,177,217,138, +216,174,216,167,217,132,216,181,216,173,216,169,216,170,216,179,216,172,217,138, +217,132,216,167,217,132,217,136,217,130,216,170,216,185,217,134,216,175,217,133, +216,167,217,133,216,175,217,138,217,134,216,169,216,170,216,181,217,133,217,138, +217,133,216,163,216,177,216,180,217,138,217,129,216,167,217,132,216,176,217,138, +217,134,216,185,216,177,216,168,217,138,216,169,216,168,217,136,216,167,216,168, +216,169,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,179,217,129, +216,177,217,133,216,180,216,167,217,131,217,132,216,170,216,185,216,167,217,132, +217,137,216,167,217,132,216,163,217,136,217,132,216,167,217,132,216,179,217,134, +216,169,216,172,216,167,217,133,216,185,216,169,216,167,217,132,216,181,216,173, +217,129,216,167,217,132,216,175,217,138,217,134,217,131,217,132,217,133,216,167, +216,170,216,167,217,132,216,174,216,167,216,181,216,167,217,132,217,133,217,132, +217,129,216,163,216,185,216,182,216,167,216,161,217,131,216,170,216,167,216,168, +216,169,216,167,217,132,216,174,217,138,216,177,216,177,216,179,216,167,216,166, +217,132,216,167,217,132,217,130,217,132,216,168,216,167,217,132,216,163,216,175, +216,168,217,133,217,130,216,167,216,183,216,185,217,133,216,177,216,167,216,179, +217,132,217,133,217,134,216,183,217,130,216,169,216,167,217,132,217,131,216,170, +216,168,216,167,217,132,216,177,216,172,217,132,216,167,216,180,216,170,216,177, +217,131,216,167,217,132,217,130,216,175,217,133,217,138,216,185,216,183,217,138, +217,131,115,66,121,84,97,103,78,97,109,101,40,46,106,112,103,34,32,97,108,116,61 +,34,49,112,120,32,115,111,108,105,100,32,35,46,103,105,102,34,32,97,108,116,61, +34,116,114,97,110,115,112,97,114,101,110,116,105,110,102,111,114,109,97,116,105, +111,110,97,112,112,108,105,99,97,116,105,111,110,34,32,111,110,99,108,105,99,107 +,61,34,101,115,116,97,98,108,105,115,104,101,100,97,100,118,101,114,116,105,115, +105,110,103,46,112,110,103,34,32,97,108,116,61,34,101,110,118,105,114,111,110, +109,101,110,116,112,101,114,102,111,114,109,97,110,99,101,97,112,112,114,111,112 +,114,105,97,116,101,38,97,109,112,59,109,100,97,115,104,59,105,109,109,101,100, +105,97,116,101,108,121,60,47,115,116,114,111,110,103,62,60,47,114,97,116,104,101 +,114,32,116,104,97,110,116,101,109,112,101,114,97,116,117,114,101,100,101,118, +101,108,111,112,109,101,110,116,99,111,109,112,101,116,105,116,105,111,110,112, +108,97,99,101,104,111,108,100,101,114,118,105,115,105,98,105,108,105,116,121,58, +99,111,112,121,114,105,103,104,116,34,62,48,34,32,104,101,105,103,104,116,61,34, +101,118,101,110,32,116,104,111,117,103,104,114,101,112,108,97,99,101,109,101,110 +,116,100,101,115,116,105,110,97,116,105,111,110,67,111,114,112,111,114,97,116, +105,111,110,60,117,108,32,99,108,97,115,115,61,34,65,115,115,111,99,105,97,116, +105,111,110,105,110,100,105,118,105,100,117,97,108,115,112,101,114,115,112,101, +99,116,105,118,101,115,101,116,84,105,109,101,111,117,116,40,117,114,108,40,104, +116,116,112,58,47,47,109,97,116,104,101,109,97,116,105,99,115,109,97,114,103,105 +,110,45,116,111,112,58,101,118,101,110,116,117,97,108,108,121,32,100,101,115,99, +114,105,112,116,105,111,110,41,32,110,111,45,114,101,112,101,97,116,99,111,108, +108,101,99,116,105,111,110,115,46,74,80,71,124,116,104,117,109,98,124,112,97,114 +,116,105,99,105,112,97,116,101,47,104,101,97,100,62,60,98,111,100,121,102,108, +111,97,116,58,108,101,102,116,59,60,108,105,32,99,108,97,115,115,61,34,104,117, +110,100,114,101,100,115,32,111,102,10,10,72,111,119,101,118,101,114,44,32,99,111 +,109,112,111,115,105,116,105,111,110,99,108,101,97,114,58,98,111,116,104,59,99, +111,111,112,101,114,97,116,105,111,110,119,105,116,104,105,110,32,116,104,101,32 +,108,97,98,101,108,32,102,111,114,61,34,98,111,114,100,101,114,45,116,111,112,58 +,78,101,119,32,90,101,97,108,97,110,100,114,101,99,111,109,109,101,110,100,101, +100,112,104,111,116,111,103,114,97,112,104,121,105,110,116,101,114,101,115,116, +105,110,103,38,108,116,59,115,117,112,38,103,116,59,99,111,110,116,114,111,118, +101,114,115,121,78,101,116,104,101,114,108,97,110,100,115,97,108,116,101,114,110 +,97,116,105,118,101,109,97,120,108,101,110,103,116,104,61,34,115,119,105,116,122 +,101,114,108,97,110,100,68,101,118,101,108,111,112,109,101,110,116,101,115,115, +101,110,116,105,97,108,108,121,10,10,65,108,116,104,111,117,103,104,32,60,47,116 +,101,120,116,97,114,101,97,62,116,104,117,110,100,101,114,98,105,114,100,114,101 +,112,114,101,115,101,110,116,101,100,38,97,109,112,59,110,100,97,115,104,59,115, +112,101,99,117,108,97,116,105,111,110,99,111,109,109,117,110,105,116,105,101,115 +,108,101,103,105,115,108,97,116,105,111,110,101,108,101,99,116,114,111,110,105, +99,115,10,9,60,100,105,118,32,105,100,61,34,105,108,108,117,115,116,114,97,116, +101,100,101,110,103,105,110,101,101,114,105,110,103,116,101,114,114,105,116,111, +114,105,101,115,97,117,116,104,111,114,105,116,105,101,115,100,105,115,116,114, +105,98,117,116,101,100,54,34,32,104,101,105,103,104,116,61,34,115,97,110,115,45, +115,101,114,105,102,59,99,97,112,97,98,108,101,32,111,102,32,100,105,115,97,112, +112,101,97,114,101,100,105,110,116,101,114,97,99,116,105,118,101,108,111,111,107 +,105,110,103,32,102,111,114,105,116,32,119,111,117,108,100,32,98,101,65,102,103, +104,97,110,105,115,116,97,110,119,97,115,32,99,114,101,97,116,101,100,77,97,116, +104,46,102,108,111,111,114,40,115,117,114,114,111,117,110,100,105,110,103,99,97, +110,32,97,108,115,111,32,98,101,111,98,115,101,114,118,97,116,105,111,110,109,97 +,105,110,116,101,110,97,110,99,101,101,110,99,111,117,110,116,101,114,101,100,60 +,104,50,32,99,108,97,115,115,61,34,109,111,114,101,32,114,101,99,101,110,116,105 +,116,32,104,97,115,32,98,101,101,110,105,110,118,97,115,105,111,110,32,111,102, +41,46,103,101,116,84,105,109,101,40,41,102,117,110,100,97,109,101,110,116,97,108 +,68,101,115,112,105,116,101,32,116,104,101,34,62,60,100,105,118,32,105,100,61,34 +,105,110,115,112,105,114,97,116,105,111,110,101,120,97,109,105,110,97,116,105, +111,110,112,114,101,112,97,114,97,116,105,111,110,101,120,112,108,97,110,97,116, +105,111,110,60,105,110,112,117,116,32,105,100,61,34,60,47,97,62,60,47,115,112,97 +,110,62,118,101,114,115,105,111,110,115,32,111,102,105,110,115,116,114,117,109, +101,110,116,115,98,101,102,111,114,101,32,116,104,101,32,32,61,32,39,104,116,116 +,112,58,47,47,68,101,115,99,114,105,112,116,105,111,110,114,101,108,97,116,105, +118,101,108,121,32,46,115,117,98,115,116,114,105,110,103,40,101,97,99,104,32,111 +,102,32,116,104,101,101,120,112,101,114,105,109,101,110,116,115,105,110,102,108, +117,101,110,116,105,97,108,105,110,116,101,103,114,97,116,105,111,110,109,97,110 +,121,32,112,101,111,112,108,101,100,117,101,32,116,111,32,116,104,101,32,99,111, +109,98,105,110,97,116,105,111,110,100,111,32,110,111,116,32,104,97,118,101,77, +105,100,100,108,101,32,69,97,115,116,60,110,111,115,99,114,105,112,116,62,60,99, +111,112,121,114,105,103,104,116,34,32,112,101,114,104,97,112,115,32,116,104,101, +105,110,115,116,105,116,117,116,105,111,110,105,110,32,68,101,99,101,109,98,101, +114,97,114,114,97,110,103,101,109,101,110,116,109,111,115,116,32,102,97,109,111, +117,115,112,101,114,115,111,110,97,108,105,116,121,99,114,101,97,116,105,111,110 +,32,111,102,108,105,109,105,116,97,116,105,111,110,115,101,120,99,108,117,115, +105,118,101,108,121,115,111,118,101,114,101,105,103,110,116,121,45,99,111,110, +116,101,110,116,34,62,10,60,116,100,32,99,108,97,115,115,61,34,117,110,100,101, +114,103,114,111,117,110,100,112,97,114,97,108,108,101,108,32,116,111,100,111,99, +116,114,105,110,101,32,111,102,111,99,99,117,112,105,101,100,32,98,121,116,101, +114,109,105,110,111,108,111,103,121,82,101,110,97,105,115,115,97,110,99,101,97, +32,110,117,109,98,101,114,32,111,102,115,117,112,112,111,114,116,32,102,111,114, +101,120,112,108,111,114,97,116,105,111,110,114,101,99,111,103,110,105,116,105, +111,110,112,114,101,100,101,99,101,115,115,111,114,60,105,109,103,32,115,114,99, +61,34,47,60,104,49,32,99,108,97,115,115,61,34,112,117,98,108,105,99,97,116,105, +111,110,109,97,121,32,97,108,115,111,32,98,101,115,112,101,99,105,97,108,105,122 +,101,100,60,47,102,105,101,108,100,115,101,116,62,112,114,111,103,114,101,115, +115,105,118,101,109,105,108,108,105,111,110,115,32,111,102,115,116,97,116,101, +115,32,116,104,97,116,101,110,102,111,114,99,101,109,101,110,116,97,114,111,117, +110,100,32,116,104,101,32,111,110,101,32,97,110,111,116,104,101,114,46,112,97, +114,101,110,116,78,111,100,101,97,103,114,105,99,117,108,116,117,114,101,65,108, +116,101,114,110,97,116,105,118,101,114,101,115,101,97,114,99,104,101,114,115,116 +,111,119,97,114,100,115,32,116,104,101,77,111,115,116,32,111,102,32,116,104,101, +109,97,110,121,32,111,116,104,101,114,32,40,101,115,112,101,99,105,97,108,108, +121,60,116,100,32,119,105,100,116,104,61,34,59,119,105,100,116,104,58,49,48,48, +37,105,110,100,101,112,101,110,100,101,110,116,60,104,51,32,99,108,97,115,115,61 +,34,32,111,110,99,104,97,110,103,101,61,34,41,46,97,100,100,67,108,97,115,115,40 +,105,110,116,101,114,97,99,116,105,111,110,79,110,101,32,111,102,32,116,104,101, +32,100,97,117,103,104,116,101,114,32,111,102,97,99,99,101,115,115,111,114,105, +101,115,98,114,97,110,99,104,101,115,32,111,102,13,10,60,100,105,118,32,105,100, +61,34,116,104,101,32,108,97,114,103,101,115,116,100,101,99,108,97,114,97,116,105 +,111,110,114,101,103,117,108,97,116,105,111,110,115,73,110,102,111,114,109,97, +116,105,111,110,116,114,97,110,115,108,97,116,105,111,110,100,111,99,117,109,101 +,110,116,97,114,121,105,110,32,111,114,100,101,114,32,116,111,34,62,10,60,104, +101,97,100,62,10,60,34,32,104,101,105,103,104,116,61,34,49,97,99,114,111,115,115 +,32,116,104,101,32,111,114,105,101,110,116,97,116,105,111,110,41,59,60,47,115,99 +,114,105,112,116,62,105,109,112,108,101,109,101,110,116,101,100,99,97,110,32,98, +101,32,115,101,101,110,116,104,101,114,101,32,119,97,115,32,97,100,101,109,111, +110,115,116,114,97,116,101,99,111,110,116,97,105,110,101,114,34,62,99,111,110, +110,101,99,116,105,111,110,115,116,104,101,32,66,114,105,116,105,115,104,119,97, +115,32,119,114,105,116,116,101,110,33,105,109,112,111,114,116,97,110,116,59,112, +120,59,32,109,97,114,103,105,110,45,102,111,108,108,111,119,101,100,32,98,121,97 +,98,105,108,105,116,121,32,116,111,32,99,111,109,112,108,105,99,97,116,101,100, +100,117,114,105,110,103,32,116,104,101,32,105,109,109,105,103,114,97,116,105,111 +,110,97,108,115,111,32,99,97,108,108,101,100,60,104,52,32,99,108,97,115,115,61, +34,100,105,115,116,105,110,99,116,105,111,110,114,101,112,108,97,99,101,100,32, +98,121,103,111,118,101,114,110,109,101,110,116,115,108,111,99,97,116,105,111,110 +,32,111,102,105,110,32,78,111,118,101,109,98,101,114,119,104,101,116,104,101,114 +,32,116,104,101,60,47,112,62,10,60,47,100,105,118,62,97,99,113,117,105,115,105, +116,105,111,110,99,97,108,108,101,100,32,116,104,101,32,112,101,114,115,101,99, +117,116,105,111,110,100,101,115,105,103,110,97,116,105,111,110,123,102,111,110, +116,45,115,105,122,101,58,97,112,112,101,97,114,101,100,32,105,110,105,110,118, +101,115,116,105,103,97,116,101,101,120,112,101,114,105,101,110,99,101,100,109, +111,115,116,32,108,105,107,101,108,121,119,105,100,101,108,121,32,117,115,101, +100,100,105,115,99,117,115,115,105,111,110,115,112,114,101,115,101,110,99,101,32 +,111,102,32,40,100,111,99,117,109,101,110,116,46,101,120,116,101,110,115,105,118 +,101,108,121,73,116,32,104,97,115,32,98,101,101,110,105,116,32,100,111,101,115, +32,110,111,116,99,111,110,116,114,97,114,121,32,116,111,105,110,104,97,98,105, +116,97,110,116,115,105,109,112,114,111,118,101,109,101,110,116,115,99,104,111, +108,97,114,115,104,105,112,99,111,110,115,117,109,112,116,105,111,110,105,110, +115,116,114,117,99,116,105,111,110,102,111,114,32,101,120,97,109,112,108,101,111 +,110,101,32,111,114,32,109,111,114,101,112,120,59,32,112,97,100,100,105,110,103, +116,104,101,32,99,117,114,114,101,110,116,97,32,115,101,114,105,101,115,32,111, +102,97,114,101,32,117,115,117,97,108,108,121,114,111,108,101,32,105,110,32,116, +104,101,112,114,101,118,105,111,117,115,108,121,32,100,101,114,105,118,97,116, +105,118,101,115,101,118,105,100,101,110,99,101,32,111,102,101,120,112,101,114, +105,101,110,99,101,115,99,111,108,111,114,115,99,104,101,109,101,115,116,97,116, +101,100,32,116,104,97,116,99,101,114,116,105,102,105,99,97,116,101,60,47,97,62, +60,47,100,105,118,62,10,32,115,101,108,101,99,116,101,100,61,34,104,105,103,104, +32,115,99,104,111,111,108,114,101,115,112,111,110,115,101,32,116,111,99,111,109, +102,111,114,116,97,98,108,101,97,100,111,112,116,105,111,110,32,111,102,116,104, +114,101,101,32,121,101,97,114,115,116,104,101,32,99,111,117,110,116,114,121,105, +110,32,70,101,98,114,117,97,114,121,115,111,32,116,104,97,116,32,116,104,101,112 +,101,111,112,108,101,32,119,104,111,32,112,114,111,118,105,100,101,100,32,98,121 +,60,112,97,114,97,109,32,110,97,109,101,97,102,102,101,99,116,101,100,32,98,121, +105,110,32,116,101,114,109,115,32,111,102,97,112,112,111,105,110,116,109,101,110 +,116,73,83,79,45,56,56,53,57,45,49,34,119,97,115,32,98,111,114,110,32,105,110, +104,105,115,116,111,114,105,99,97,108,32,114,101,103,97,114,100,101,100,32,97, +115,109,101,97,115,117,114,101,109,101,110,116,105,115,32,98,97,115,101,100,32, +111,110,32,97,110,100,32,111,116,104,101,114,32,58,32,102,117,110,99,116,105,111 +,110,40,115,105,103,110,105,102,105,99,97,110,116,99,101,108,101,98,114,97,116, +105,111,110,116,114,97,110,115,109,105,116,116,101,100,47,106,115,47,106,113,117 +,101,114,121,46,105,115,32,107,110,111,119,110,32,97,115,116,104,101,111,114,101 +,116,105,99,97,108,32,116,97,98,105,110,100,101,120,61,34,105,116,32,99,111,117, +108,100,32,98,101,60,110,111,115,99,114,105,112,116,62,10,104,97,118,105,110,103 +,32,98,101,101,110,13,10,60,104,101,97,100,62,13,10,60,32,38,113,117,111,116,59, +84,104,101,32,99,111,109,112,105,108,97,116,105,111,110,104,101,32,104,97,100,32 +,98,101,101,110,112,114,111,100,117,99,101,100,32,98,121,112,104,105,108,111,115 +,111,112,104,101,114,99,111,110,115,116,114,117,99,116,101,100,105,110,116,101, +110,100,101,100,32,116,111,97,109,111,110,103,32,111,116,104,101,114,99,111,109, +112,97,114,101,100,32,116,111,116,111,32,115,97,121,32,116,104,97,116,69,110,103 +,105,110,101,101,114,105,110,103,97,32,100,105,102,102,101,114,101,110,116,114, +101,102,101,114,114,101,100,32,116,111,100,105,102,102,101,114,101,110,99,101, +115,98,101,108,105,101,102,32,116,104,97,116,112,104,111,116,111,103,114,97,112, +104,115,105,100,101,110,116,105,102,121,105,110,103,72,105,115,116,111,114,121, +32,111,102,32,82,101,112,117,98,108,105,99,32,111,102,110,101,99,101,115,115,97, +114,105,108,121,112,114,111,98,97,98,105,108,105,116,121,116,101,99,104,110,105, +99,97,108,108,121,108,101,97,118,105,110,103,32,116,104,101,115,112,101,99,116, +97,99,117,108,97,114,102,114,97,99,116,105,111,110,32,111,102,101,108,101,99,116 +,114,105,99,105,116,121,104,101,97,100,32,111,102,32,116,104,101,114,101,115,116 +,97,117,114,97,110,116,115,112,97,114,116,110,101,114,115,104,105,112,101,109, +112,104,97,115,105,115,32,111,110,109,111,115,116,32,114,101,99,101,110,116,115, +104,97,114,101,32,119,105,116,104,32,115,97,121,105,110,103,32,116,104,97,116, +102,105,108,108,101,100,32,119,105,116,104,100,101,115,105,103,110,101,100,32, +116,111,105,116,32,105,115,32,111,102,116,101,110,34,62,60,47,105,102,114,97,109 +,101,62,97,115,32,102,111,108,108,111,119,115,58,109,101,114,103,101,100,32,119, +105,116,104,116,104,114,111,117,103,104,32,116,104,101,99,111,109,109,101,114,99 +,105,97,108,32,112,111,105,110,116,101,100,32,111,117,116,111,112,112,111,114, +116,117,110,105,116,121,118,105,101,119,32,111,102,32,116,104,101,114,101,113, +117,105,114,101,109,101,110,116,100,105,118,105,115,105,111,110,32,111,102,112, +114,111,103,114,97,109,109,105,110,103,104,101,32,114,101,99,101,105,118,101,100 +,115,101,116,73,110,116,101,114,118,97,108,34,62,60,47,115,112,97,110,62,60,47, +105,110,32,78,101,119,32,89,111,114,107,97,100,100,105,116,105,111,110,97,108,32 +,99,111,109,112,114,101,115,115,105,111,110,10,10,60,100,105,118,32,105,100,61, +34,105,110,99,111,114,112,111,114,97,116,101,59,60,47,115,99,114,105,112,116,62, +60,97,116,116,97,99,104,69,118,101,110,116,98,101,99,97,109,101,32,116,104,101, +32,34,32,116,97,114,103,101,116,61,34,95,99,97,114,114,105,101,100,32,111,117, +116,83,111,109,101,32,111,102,32,116,104,101,115,99,105,101,110,99,101,32,97,110 +,100,116,104,101,32,116,105,109,101,32,111,102,67,111,110,116,97,105,110,101,114 +,34,62,109,97,105,110,116,97,105,110,105,110,103,67,104,114,105,115,116,111,112, +104,101,114,77,117,99,104,32,111,102,32,116,104,101,119,114,105,116,105,110,103, +115,32,111,102,34,32,104,101,105,103,104,116,61,34,50,115,105,122,101,32,111,102 +,32,116,104,101,118,101,114,115,105,111,110,32,111,102,32,109,105,120,116,117, +114,101,32,111,102,32,98,101,116,119,101,101,110,32,116,104,101,69,120,97,109, +112,108,101,115,32,111,102,101,100,117,99,97,116,105,111,110,97,108,99,111,109, +112,101,116,105,116,105,118,101,32,111,110,115,117,98,109,105,116,61,34,100,105, +114,101,99,116,111,114,32,111,102,100,105,115,116,105,110,99,116,105,118,101,47, +68,84,68,32,88,72,84,77,76,32,114,101,108,97,116,105,110,103,32,116,111,116,101, +110,100,101,110,99,121,32,116,111,112,114,111,118,105,110,99,101,32,111,102,119, +104,105,99,104,32,119,111,117,108,100,100,101,115,112,105,116,101,32,116,104,101 +,115,99,105,101,110,116,105,102,105,99,32,108,101,103,105,115,108,97,116,117,114 +,101,46,105,110,110,101,114,72,84,77,76,32,97,108,108,101,103,97,116,105,111,110 +,115,65,103,114,105,99,117,108,116,117,114,101,119,97,115,32,117,115,101,100,32, +105,110,97,112,112,114,111,97,99,104,32,116,111,105,110,116,101,108,108,105,103, +101,110,116,121,101,97,114,115,32,108,97,116,101,114,44,115,97,110,115,45,115, +101,114,105,102,100,101,116,101,114,109,105,110,105,110,103,80,101,114,102,111, +114,109,97,110,99,101,97,112,112,101,97,114,97,110,99,101,115,44,32,119,104,105, +99,104,32,105,115,32,102,111,117,110,100,97,116,105,111,110,115,97,98,98,114,101 +,118,105,97,116,101,100,104,105,103,104,101,114,32,116,104,97,110,115,32,102,114 +,111,109,32,116,104,101,32,105,110,100,105,118,105,100,117,97,108,32,99,111,109, +112,111,115,101,100,32,111,102,115,117,112,112,111,115,101,100,32,116,111,99,108 +,97,105,109,115,32,116,104,97,116,97,116,116,114,105,98,117,116,105,111,110,102, +111,110,116,45,115,105,122,101,58,49,101,108,101,109,101,110,116,115,32,111,102, +72,105,115,116,111,114,105,99,97,108,32,104,105,115,32,98,114,111,116,104,101, +114,97,116,32,116,104,101,32,116,105,109,101,97,110,110,105,118,101,114,115,97, +114,121,103,111,118,101,114,110,101,100,32,98,121,114,101,108,97,116,101,100,32, +116,111,32,117,108,116,105,109,97,116,101,108,121,32,105,110,110,111,118,97,116, +105,111,110,115,105,116,32,105,115,32,115,116,105,108,108,99,97,110,32,111,110, +108,121,32,98,101,100,101,102,105,110,105,116,105,111,110,115,116,111,71,77,84, +83,116,114,105,110,103,65,32,110,117,109,98,101,114,32,111,102,105,109,103,32,99 +,108,97,115,115,61,34,69,118,101,110,116,117,97,108,108,121,44,119,97,115,32,99, +104,97,110,103,101,100,111,99,99,117,114,114,101,100,32,105,110,110,101,105,103, +104,98,111,114,105,110,103,100,105,115,116,105,110,103,117,105,115,104,119,104, +101,110,32,104,101,32,119,97,115,105,110,116,114,111,100,117,99,105,110,103,116, +101,114,114,101,115,116,114,105,97,108,77,97,110,121,32,111,102,32,116,104,101, +97,114,103,117,101,115,32,116,104,97,116,97,110,32,65,109,101,114,105,99,97,110, +99,111,110,113,117,101,115,116,32,111,102,119,105,100,101,115,112,114,101,97,100 +,32,119,101,114,101,32,107,105,108,108,101,100,115,99,114,101,101,110,32,97,110, +100,32,73,110,32,111,114,100,101,114,32,116,111,101,120,112,101,99,116,101,100, +32,116,111,100,101,115,99,101,110,100,97,110,116,115,97,114,101,32,108,111,99,97 +,116,101,100,108,101,103,105,115,108,97,116,105,118,101,103,101,110,101,114,97, +116,105,111,110,115,32,98,97,99,107,103,114,111,117,110,100,109,111,115,116,32, +112,101,111,112,108,101,121,101,97,114,115,32,97,102,116,101,114,116,104,101,114 +,101,32,105,115,32,110,111,116,104,101,32,104,105,103,104,101,115,116,102,114, +101,113,117,101,110,116,108,121,32,116,104,101,121,32,100,111,32,110,111,116,97, +114,103,117,101,100,32,116,104,97,116,115,104,111,119,101,100,32,116,104,97,116, +112,114,101,100,111,109,105,110,97,110,116,116,104,101,111,108,111,103,105,99,97 +,108,98,121,32,116,104,101,32,116,105,109,101,99,111,110,115,105,100,101,114,105 +,110,103,115,104,111,114,116,45,108,105,118,101,100,60,47,115,112,97,110,62,60, +47,97,62,99,97,110,32,98,101,32,117,115,101,100,118,101,114,121,32,108,105,116, +116,108,101,111,110,101,32,111,102,32,116,104,101,32,104,97,100,32,97,108,114, +101,97,100,121,105,110,116,101,114,112,114,101,116,101,100,99,111,109,109,117, +110,105,99,97,116,101,102,101,97,116,117,114,101,115,32,111,102,103,111,118,101, +114,110,109,101,110,116,44,60,47,110,111,115,99,114,105,112,116,62,101,110,116, +101,114,101,100,32,116,104,101,34,32,104,101,105,103,104,116,61,34,51,73,110,100 +,101,112,101,110,100,101,110,116,112,111,112,117,108,97,116,105,111,110,115,108, +97,114,103,101,45,115,99,97,108,101,46,32,65,108,116,104,111,117,103,104,32,117, +115,101,100,32,105,110,32,116,104,101,100,101,115,116,114,117,99,116,105,111,110 +,112,111,115,115,105,98,105,108,105,116,121,115,116,97,114,116,105,110,103,32, +105,110,116,119,111,32,111,114,32,109,111,114,101,101,120,112,114,101,115,115, +105,111,110,115,115,117,98,111,114,100,105,110,97,116,101,108,97,114,103,101,114 +,32,116,104,97,110,104,105,115,116,111,114,121,32,97,110,100,60,47,111,112,116, +105,111,110,62,13,10,67,111,110,116,105,110,101,110,116,97,108,101,108,105,109, +105,110,97,116,105,110,103,119,105,108,108,32,110,111,116,32,98,101,112,114,97, +99,116,105,99,101,32,111,102,105,110,32,102,114,111,110,116,32,111,102,115,105, +116,101,32,111,102,32,116,104,101,101,110,115,117,114,101,32,116,104,97,116,116, +111,32,99,114,101,97,116,101,32,97,109,105,115,115,105,115,115,105,112,112,105, +112,111,116,101,110,116,105,97,108,108,121,111,117,116,115,116,97,110,100,105, +110,103,98,101,116,116,101,114,32,116,104,97,110,119,104,97,116,32,105,115,32, +110,111,119,115,105,116,117,97,116,101,100,32,105,110,109,101,116,97,32,110,97, +109,101,61,34,84,114,97,100,105,116,105,111,110,97,108,115,117,103,103,101,115, +116,105,111,110,115,84,114,97,110,115,108,97,116,105,111,110,116,104,101,32,102, +111,114,109,32,111,102,97,116,109,111,115,112,104,101,114,105,99,105,100,101,111 +,108,111,103,105,99,97,108,101,110,116,101,114,112,114,105,115,101,115,99,97,108 +,99,117,108,97,116,105,110,103,101,97,115,116,32,111,102,32,116,104,101,114,101, +109,110,97,110,116,115,32,111,102,112,108,117,103,105,110,115,112,97,103,101,47, +105,110,100,101,120,46,112,104,112,63,114,101,109,97,105,110,101,100,32,105,110, +116,114,97,110,115,102,111,114,109,101,100,72,101,32,119,97,115,32,97,108,115, +111,119,97,115,32,97,108,114,101,97,100,121,115,116,97,116,105,115,116,105,99,97 +,108,105,110,32,102,97,118,111,114,32,111,102,77,105,110,105,115,116,114,121,32, +111,102,109,111,118,101,109,101,110,116,32,111,102,102,111,114,109,117,108,97, +116,105,111,110,105,115,32,114,101,113,117,105,114,101,100,60,108,105,110,107,32 +,114,101,108,61,34,84,104,105,115,32,105,115,32,116,104,101,32,60,97,32,104,114, +101,102,61,34,47,112,111,112,117,108,97,114,105,122,101,100,105,110,118,111,108, +118,101,100,32,105,110,97,114,101,32,117,115,101,100,32,116,111,97,110,100,32, +115,101,118,101,114,97,108,109,97,100,101,32,98,121,32,116,104,101,115,101,101, +109,115,32,116,111,32,98,101,108,105,107,101,108,121,32,116,104,97,116,80,97,108 +,101,115,116,105,110,105,97,110,110,97,109,101,100,32,97,102,116,101,114,105,116 +,32,104,97,100,32,98,101,101,110,109,111,115,116,32,99,111,109,109,111,110,116, +111,32,114,101,102,101,114,32,116,111,98,117,116,32,116,104,105,115,32,105,115, +99,111,110,115,101,99,117,116,105,118,101,116,101,109,112,111,114,97,114,105,108 +,121,73,110,32,103,101,110,101,114,97,108,44,99,111,110,118,101,110,116,105,111, +110,115,116,97,107,101,115,32,112,108,97,99,101,115,117,98,100,105,118,105,115, +105,111,110,116,101,114,114,105,116,111,114,105,97,108,111,112,101,114,97,116, +105,111,110,97,108,112,101,114,109,97,110,101,110,116,108,121,119,97,115,32,108, +97,114,103,101,108,121,111,117,116,98,114,101,97,107,32,111,102,105,110,32,116, +104,101,32,112,97,115,116,102,111,108,108,111,119,105,110,103,32,97,32,120,109, +108,110,115,58,111,103,61,34,62,60,97,32,99,108,97,115,115,61,34,99,108,97,115, +115,61,34,116,101,120,116,67,111,110,118,101,114,115,105,111,110,32,109,97,121, +32,98,101,32,117,115,101,100,109,97,110,117,102,97,99,116,117,114,101,97,102,116 +,101,114,32,98,101,105,110,103,99,108,101,97,114,102,105,120,34,62,10,113,117, +101,115,116,105,111,110,32,111,102,119,97,115,32,101,108,101,99,116,101,100,116, +111,32,98,101,99,111,109,101,32,97,98,101,99,97,117,115,101,32,111,102,32,115, +111,109,101,32,112,101,111,112,108,101,105,110,115,112,105,114,101,100,32,98,121 +,115,117,99,99,101,115,115,102,117,108,32,97,32,116,105,109,101,32,119,104,101, +110,109,111,114,101,32,99,111,109,109,111,110,97,109,111,110,103,115,116,32,116, +104,101,97,110,32,111,102,102,105,99,105,97,108,119,105,100,116,104,58,49,48,48, +37,59,116,101,99,104,110,111,108,111,103,121,44,119,97,115,32,97,100,111,112,116 +,101,100,116,111,32,107,101,101,112,32,116,104,101,115,101,116,116,108,101,109, +101,110,116,115,108,105,118,101,32,98,105,114,116,104,115,105,110,100,101,120,46 +,104,116,109,108,34,67,111,110,110,101,99,116,105,99,117,116,97,115,115,105,103, +110,101,100,32,116,111,38,97,109,112,59,116,105,109,101,115,59,97,99,99,111,117, +110,116,32,102,111,114,97,108,105,103,110,61,114,105,103,104,116,116,104,101,32, +99,111,109,112,97,110,121,97,108,119,97,121,115,32,98,101,101,110,114,101,116, +117,114,110,101,100,32,116,111,105,110,118,111,108,118,101,109,101,110,116,66, +101,99,97,117,115,101,32,116,104,101,116,104,105,115,32,112,101,114,105,111,100, +34,32,110,97,109,101,61,34,113,34,32,99,111,110,102,105,110,101,100,32,116,111, +97,32,114,101,115,117,108,116,32,111,102,118,97,108,117,101,61,34,34,32,47,62, +105,115,32,97,99,116,117,97,108,108,121,69,110,118,105,114,111,110,109,101,110, +116,13,10,60,47,104,101,97,100,62,13,10,67,111,110,118,101,114,115,101,108,121, +44,62,10,60,100,105,118,32,105,100,61,34,48,34,32,119,105,100,116,104,61,34,49, +105,115,32,112,114,111,98,97,98,108,121,104,97,118,101,32,98,101,99,111,109,101, +99,111,110,116,114,111,108,108,105,110,103,116,104,101,32,112,114,111,98,108,101 +,109,99,105,116,105,122,101,110,115,32,111,102,112,111,108,105,116,105,99,105,97 +,110,115,114,101,97,99,104,101,100,32,116,104,101,97,115,32,101,97,114,108,121, +32,97,115,58,110,111,110,101,59,32,111,118,101,114,60,116,97,98,108,101,32,99, +101,108,108,118,97,108,105,100,105,116,121,32,111,102,100,105,114,101,99,116,108 +,121,32,116,111,111,110,109,111,117,115,101,100,111,119,110,119,104,101,114,101, +32,105,116,32,105,115,119,104,101,110,32,105,116,32,119,97,115,109,101,109,98, +101,114,115,32,111,102,32,114,101,108,97,116,105,111,110,32,116,111,97,99,99,111 +,109,109,111,100,97,116,101,97,108,111,110,103,32,119,105,116,104,32,73,110,32, +116,104,101,32,108,97,116,101,116,104,101,32,69,110,103,108,105,115,104,100,101, +108,105,99,105,111,117,115,34,62,116,104,105,115,32,105,115,32,110,111,116,116, +104,101,32,112,114,101,115,101,110,116,105,102,32,116,104,101,121,32,97,114,101, +97,110,100,32,102,105,110,97,108,108,121,97,32,109,97,116,116,101,114,32,111,102 +,13,10,9,60,47,100,105,118,62,13,10,13,10,60,47,115,99,114,105,112,116,62,102,97 +,115,116,101,114,32,116,104,97,110,109,97,106,111,114,105,116,121,32,111,102,97, +102,116,101,114,32,119,104,105,99,104,99,111,109,112,97,114,97,116,105,118,101, +116,111,32,109,97,105,110,116,97,105,110,105,109,112,114,111,118,101,32,116,104, +101,97,119,97,114,100,101,100,32,116,104,101,101,114,34,32,99,108,97,115,115,61, +34,102,114,97,109,101,98,111,114,100,101,114,114,101,115,116,111,114,97,116,105, +111,110,105,110,32,116,104,101,32,115,97,109,101,97,110,97,108,121,115,105,115, +32,111,102,116,104,101,105,114,32,102,105,114,115,116,68,117,114,105,110,103,32, +116,104,101,32,99,111,110,116,105,110,101,110,116,97,108,115,101,113,117,101,110 +,99,101,32,111,102,102,117,110,99,116,105,111,110,40,41,123,102,111,110,116,45, +115,105,122,101,58,32,119,111,114,107,32,111,110,32,116,104,101,60,47,115,99,114 +,105,112,116,62,10,60,98,101,103,105,110,115,32,119,105,116,104,106,97,118,97, +115,99,114,105,112,116,58,99,111,110,115,116,105,116,117,101,110,116,119,97,115, +32,102,111,117,110,100,101,100,101,113,117,105,108,105,98,114,105,117,109,97,115 +,115,117,109,101,32,116,104,97,116,105,115,32,103,105,118,101,110,32,98,121,110, +101,101,100,115,32,116,111,32,98,101,99,111,111,114,100,105,110,97,116,101,115, +116,104,101,32,118,97,114,105,111,117,115,97,114,101,32,112,97,114,116,32,111, +102,111,110,108,121,32,105,110,32,116,104,101,115,101,99,116,105,111,110,115,32, +111,102,105,115,32,97,32,99,111,109,109,111,110,116,104,101,111,114,105,101,115, +32,111,102,100,105,115,99,111,118,101,114,105,101,115,97,115,115,111,99,105,97, +116,105,111,110,101,100,103,101,32,111,102,32,116,104,101,115,116,114,101,110, +103,116,104,32,111,102,112,111,115,105,116,105,111,110,32,105,110,112,114,101, +115,101,110,116,45,100,97,121,117,110,105,118,101,114,115,97,108,108,121,116,111 +,32,102,111,114,109,32,116,104,101,98,117,116,32,105,110,115,116,101,97,100,99, +111,114,112,111,114,97,116,105,111,110,97,116,116,97,99,104,101,100,32,116,111, +105,115,32,99,111,109,109,111,110,108,121,114,101,97,115,111,110,115,32,102,111, +114,32,38,113,117,111,116,59,116,104,101,32,99,97,110,32,98,101,32,109,97,100, +101,119,97,115,32,97,98,108,101,32,116,111,119,104,105,99,104,32,109,101,97,110, +115,98,117,116,32,100,105,100,32,110,111,116,111,110,77,111,117,115,101,79,118, +101,114,97,115,32,112,111,115,115,105,98,108,101,111,112,101,114,97,116,101,100, +32,98,121,99,111,109,105,110,103,32,102,114,111,109,116,104,101,32,112,114,105, +109,97,114,121,97,100,100,105,116,105,111,110,32,111,102,102,111,114,32,115,101, +118,101,114,97,108,116,114,97,110,115,102,101,114,114,101,100,97,32,112,101,114, +105,111,100,32,111,102,97,114,101,32,97,98,108,101,32,116,111,104,111,119,101, +118,101,114,44,32,105,116,115,104,111,117,108,100,32,104,97,118,101,109,117,99, +104,32,108,97,114,103,101,114,10,9,60,47,115,99,114,105,112,116,62,97,100,111, +112,116,101,100,32,116,104,101,112,114,111,112,101,114,116,121,32,111,102,100, +105,114,101,99,116,101,100,32,98,121,101,102,102,101,99,116,105,118,101,108,121, +119,97,115,32,98,114,111,117,103,104,116,99,104,105,108,100,114,101,110,32,111, +102,80,114,111,103,114,97,109,109,105,110,103,108,111,110,103,101,114,32,116,104 +,97,110,109,97,110,117,115,99,114,105,112,116,115,119,97,114,32,97,103,97,105, +110,115,116,98,121,32,109,101,97,110,115,32,111,102,97,110,100,32,109,111,115, +116,32,111,102,115,105,109,105,108,97,114,32,116,111,32,112,114,111,112,114,105, +101,116,97,114,121,111,114,105,103,105,110,97,116,105,110,103,112,114,101,115, +116,105,103,105,111,117,115,103,114,97,109,109,97,116,105,99,97,108,101,120,112, +101,114,105,101,110,99,101,46,116,111,32,109,97,107,101,32,116,104,101,73,116,32 +,119,97,115,32,97,108,115,111,105,115,32,102,111,117,110,100,32,105,110,99,111, +109,112,101,116,105,116,111,114,115,105,110,32,116,104,101,32,85,46,83,46,114, +101,112,108,97,99,101,32,116,104,101,98,114,111,117,103,104,116,32,116,104,101, +99,97,108,99,117,108,97,116,105,111,110,102,97,108,108,32,111,102,32,116,104,101 +,116,104,101,32,103,101,110,101,114,97,108,112,114,97,99,116,105,99,97,108,108, +121,105,110,32,104,111,110,111,114,32,111,102,114,101,108,101,97,115,101,100,32, +105,110,114,101,115,105,100,101,110,116,105,97,108,97,110,100,32,115,111,109,101 +,32,111,102,107,105,110,103,32,111,102,32,116,104,101,114,101,97,99,116,105,111, +110,32,116,111,49,115,116,32,69,97,114,108,32,111,102,99,117,108,116,117,114,101 +,32,97,110,100,112,114,105,110,99,105,112,97,108,108,121,60,47,116,105,116,108, +101,62,10,32,32,116,104,101,121,32,99,97,110,32,98,101,98,97,99,107,32,116,111, +32,116,104,101,115,111,109,101,32,111,102,32,104,105,115,101,120,112,111,115,117 +,114,101,32,116,111,97,114,101,32,115,105,109,105,108,97,114,102,111,114,109,32, +111,102,32,116,104,101,97,100,100,70,97,118,111,114,105,116,101,99,105,116,105, +122,101,110,115,104,105,112,112,97,114,116,32,105,110,32,116,104,101,112,101,111 +,112,108,101,32,119,105,116,104,105,110,32,112,114,97,99,116,105,99,101,116,111, +32,99,111,110,116,105,110,117,101,38,97,109,112,59,109,105,110,117,115,59,97,112 +,112,114,111,118,101,100,32,98,121,32,116,104,101,32,102,105,114,115,116,32,97, +108,108,111,119,101,100,32,116,104,101,97,110,100,32,102,111,114,32,116,104,101, +102,117,110,99,116,105,111,110,105,110,103,112,108,97,121,105,110,103,32,116,104 +,101,115,111,108,117,116,105,111,110,32,116,111,104,101,105,103,104,116,61,34,48 +,34,32,105,110,32,104,105,115,32,98,111,111,107,109,111,114,101,32,116,104,97, +110,32,97,102,111,108,108,111,119,115,32,116,104,101,99,114,101,97,116,101,100, +32,116,104,101,112,114,101,115,101,110,99,101,32,105,110,38,110,98,115,112,59,60 +,47,116,100,62,110,97,116,105,111,110,97,108,105,115,116,116,104,101,32,105,100, +101,97,32,111,102,97,32,99,104,97,114,97,99,116,101,114,119,101,114,101,32,102, +111,114,99,101,100,32,99,108,97,115,115,61,34,98,116,110,100,97,121,115,32,111, +102,32,116,104,101,102,101,97,116,117,114,101,100,32,105,110,115,104,111,119,105 +,110,103,32,116,104,101,105,110,116,101,114,101,115,116,32,105,110,105,110,32, +112,108,97,99,101,32,111,102,116,117,114,110,32,111,102,32,116,104,101,116,104, +101,32,104,101,97,100,32,111,102,76,111,114,100,32,111,102,32,116,104,101,112, +111,108,105,116,105,99,97,108,108,121,104,97,115,32,105,116,115,32,111,119,110, +69,100,117,99,97,116,105,111,110,97,108,97,112,112,114,111,118,97,108,32,111,102 +,115,111,109,101,32,111,102,32,116,104,101,101,97,99,104,32,111,116,104,101,114, +44,98,101,104,97,118,105,111,114,32,111,102,97,110,100,32,98,101,99,97,117,115, +101,97,110,100,32,97,110,111,116,104,101,114,97,112,112,101,97,114,101,100,32, +111,110,114,101,99,111,114,100,101,100,32,105,110,98,108,97,99,107,38,113,117, +111,116,59,109,97,121,32,105,110,99,108,117,100,101,116,104,101,32,119,111,114, +108,100,39,115,99,97,110,32,108,101,97,100,32,116,111,114,101,102,101,114,115,32 +,116,111,32,97,98,111,114,100,101,114,61,34,48,34,32,103,111,118,101,114,110,109 +,101,110,116,32,119,105,110,110,105,110,103,32,116,104,101,114,101,115,117,108, +116,101,100,32,105,110,32,119,104,105,108,101,32,116,104,101,32,87,97,115,104, +105,110,103,116,111,110,44,116,104,101,32,115,117,98,106,101,99,116,99,105,116, +121,32,105,110,32,116,104,101,62,60,47,100,105,118,62,13,10,9,9,114,101,102,108, +101,99,116,32,116,104,101,116,111,32,99,111,109,112,108,101,116,101,98,101,99,97 +,109,101,32,109,111,114,101,114,97,100,105,111,97,99,116,105,118,101,114,101,106 +,101,99,116,101,100,32,98,121,119,105,116,104,111,117,116,32,97,110,121,104,105, +115,32,102,97,116,104,101,114,44,119,104,105,99,104,32,99,111,117,108,100,99,111 +,112,121,32,111,102,32,116,104,101,116,111,32,105,110,100,105,99,97,116,101,97, +32,112,111,108,105,116,105,99,97,108,97,99,99,111,117,110,116,115,32,111,102,99, +111,110,115,116,105,116,117,116,101,115,119,111,114,107,101,100,32,119,105,116, +104,101,114,60,47,97,62,60,47,108,105,62,111,102,32,104,105,115,32,108,105,102, +101,97,99,99,111,109,112,97,110,105,101,100,99,108,105,101,110,116,87,105,100, +116,104,112,114,101,118,101,110,116,32,116,104,101,76,101,103,105,115,108,97,116 +,105,118,101,100,105,102,102,101,114,101,110,116,108,121,116,111,103,101,116,104 +,101,114,32,105,110,104,97,115,32,115,101,118,101,114,97,108,102,111,114,32,97, +110,111,116,104,101,114,116,101,120,116,32,111,102,32,116,104,101,102,111,117, +110,100,101,100,32,116,104,101,101,32,119,105,116,104,32,116,104,101,32,105,115, +32,117,115,101,100,32,102,111,114,99,104,97,110,103,101,100,32,116,104,101,117, +115,117,97,108,108,121,32,116,104,101,112,108,97,99,101,32,119,104,101,114,101, +119,104,101,114,101,97,115,32,116,104,101,62,32,60,97,32,104,114,101,102,61,34, +34,62,60,97,32,104,114,101,102,61,34,116,104,101,109,115,101,108,118,101,115,44, +97,108,116,104,111,117,103,104,32,104,101,116,104,97,116,32,99,97,110,32,98,101, +116,114,97,100,105,116,105,111,110,97,108,114,111,108,101,32,111,102,32,116,104, +101,97,115,32,97,32,114,101,115,117,108,116,114,101,109,111,118,101,67,104,105, +108,100,100,101,115,105,103,110,101,100,32,98,121,119,101,115,116,32,111,102,32, +116,104,101,83,111,109,101,32,112,101,111,112,108,101,112,114,111,100,117,99,116 +,105,111,110,44,115,105,100,101,32,111,102,32,116,104,101,110,101,119,115,108, +101,116,116,101,114,115,117,115,101,100,32,98,121,32,116,104,101,100,111,119,110 +,32,116,111,32,116,104,101,97,99,99,101,112,116,101,100,32,98,121,108,105,118, +101,32,105,110,32,116,104,101,97,116,116,101,109,112,116,115,32,116,111,111,117, +116,115,105,100,101,32,116,104,101,102,114,101,113,117,101,110,99,105,101,115,72 +,111,119,101,118,101,114,44,32,105,110,112,114,111,103,114,97,109,109,101,114, +115,97,116,32,108,101,97,115,116,32,105,110,97,112,112,114,111,120,105,109,97, +116,101,97,108,116,104,111,117,103,104,32,105,116,119,97,115,32,112,97,114,116, +32,111,102,97,110,100,32,118,97,114,105,111,117,115,71,111,118,101,114,110,111, +114,32,111,102,116,104,101,32,97,114,116,105,99,108,101,116,117,114,110,101,100, +32,105,110,116,111,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,101,99, +111,110,111,109,121,105,115,32,116,104,101,32,109,111,115,116,109,111,115,116,32 +,119,105,100,101,108,121,119,111,117,108,100,32,108,97,116,101,114,97,110,100,32 +,112,101,114,104,97,112,115,114,105,115,101,32,116,111,32,116,104,101,111,99,99, +117,114,115,32,119,104,101,110,117,110,100,101,114,32,119,104,105,99,104,99,111, +110,100,105,116,105,111,110,115,46,116,104,101,32,119,101,115,116,101,114,110, +116,104,101,111,114,121,32,116,104,97,116,105,115,32,112,114,111,100,117,99,101, +100,116,104,101,32,99,105,116,121,32,111,102,105,110,32,119,104,105,99,104,32, +104,101,115,101,101,110,32,105,110,32,116,104,101,116,104,101,32,99,101,110,116, +114,97,108,98,117,105,108,100,105,110,103,32,111,102,109,97,110,121,32,111,102, +32,104,105,115,97,114,101,97,32,111,102,32,116,104,101,105,115,32,116,104,101,32 +,111,110,108,121,109,111,115,116,32,111,102,32,116,104,101,109,97,110,121,32,111 +,102,32,116,104,101,116,104,101,32,87,101,115,116,101,114,110,84,104,101,114,101 +,32,105,115,32,110,111,101,120,116,101,110,100,101,100,32,116,111,83,116,97,116, +105,115,116,105,99,97,108,99,111,108,115,112,97,110,61,50,32,124,115,104,111,114 +,116,32,115,116,111,114,121,112,111,115,115,105,98,108,101,32,116,111,116,111, +112,111,108,111,103,105,99,97,108,99,114,105,116,105,99,97,108,32,111,102,114, +101,112,111,114,116,101,100,32,116,111,97,32,67,104,114,105,115,116,105,97,110, +100,101,99,105,115,105,111,110,32,116,111,105,115,32,101,113,117,97,108,32,116, +111,112,114,111,98,108,101,109,115,32,111,102,84,104,105,115,32,99,97,110,32,98, +101,109,101,114,99,104,97,110,100,105,115,101,102,111,114,32,109,111,115,116,32, +111,102,110,111,32,101,118,105,100,101,110,99,101,101,100,105,116,105,111,110, +115,32,111,102,101,108,101,109,101,110,116,115,32,105,110,38,113,117,111,116,59, +46,32,84,104,101,99,111,109,47,105,109,97,103,101,115,47,119,104,105,99,104,32, +109,97,107,101,115,116,104,101,32,112,114,111,99,101,115,115,114,101,109,97,105, +110,115,32,116,104,101,108,105,116,101,114,97,116,117,114,101,44,105,115,32,97, +32,109,101,109,98,101,114,116,104,101,32,112,111,112,117,108,97,114,116,104,101, +32,97,110,99,105,101,110,116,112,114,111,98,108,101,109,115,32,105,110,116,105, +109,101,32,111,102,32,116,104,101,100,101,102,101,97,116,101,100,32,98,121,98, +111,100,121,32,111,102,32,116,104,101,97,32,102,101,119,32,121,101,97,114,115, +109,117,99,104,32,111,102,32,116,104,101,116,104,101,32,119,111,114,107,32,111, +102,67,97,108,105,102,111,114,110,105,97,44,115,101,114,118,101,100,32,97,115,32 +,97,103,111,118,101,114,110,109,101,110,116,46,99,111,110,99,101,112,116,115,32, +111,102,109,111,118,101,109,101,110,116,32,105,110,9,9,60,100,105,118,32,105,100 +,61,34,105,116,34,32,118,97,108,117,101,61,34,108,97,110,103,117,97,103,101,32, +111,102,97,115,32,116,104,101,121,32,97,114,101,112,114,111,100,117,99,101,100, +32,105,110,105,115,32,116,104,97,116,32,116,104,101,101,120,112,108,97,105,110, +32,116,104,101,100,105,118,62,60,47,100,105,118,62,10,72,111,119,101,118,101,114 +,32,116,104,101,108,101,97,100,32,116,111,32,116,104,101,9,60,97,32,104,114,101, +102,61,34,47,119,97,115,32,103,114,97,110,116,101,100,112,101,111,112,108,101,32 +,104,97,118,101,99,111,110,116,105,110,117,97,108,108,121,119,97,115,32,115,101, +101,110,32,97,115,97,110,100,32,114,101,108,97,116,101,100,116,104,101,32,114, +111,108,101,32,111,102,112,114,111,112,111,115,101,100,32,98,121,111,102,32,116, +104,101,32,98,101,115,116,101,97,99,104,32,111,116,104,101,114,46,67,111,110,115 +,116,97,110,116,105,110,101,112,101,111,112,108,101,32,102,114,111,109,100,105, +97,108,101,99,116,115,32,111,102,116,111,32,114,101,118,105,115,105,111,110,119, +97,115,32,114,101,110,97,109,101,100,97,32,115,111,117,114,99,101,32,111,102,116 +,104,101,32,105,110,105,116,105,97,108,108,97,117,110,99,104,101,100,32,105,110, +112,114,111,118,105,100,101,32,116,104,101,116,111,32,116,104,101,32,119,101,115 +,116,119,104,101,114,101,32,116,104,101,114,101,97,110,100,32,115,105,109,105, +108,97,114,98,101,116,119,101,101,110,32,116,119,111,105,115,32,97,108,115,111, +32,116,104,101,69,110,103,108,105,115,104,32,97,110,100,99,111,110,100,105,116, +105,111,110,115,44,116,104,97,116,32,105,116,32,119,97,115,101,110,116,105,116, +108,101,100,32,116,111,116,104,101,109,115,101,108,118,101,115,46,113,117,97,110 +,116,105,116,121,32,111,102,114,97,110,115,112,97,114,101,110,99,121,116,104,101 +,32,115,97,109,101,32,97,115,116,111,32,106,111,105,110,32,116,104,101,99,111, +117,110,116,114,121,32,97,110,100,116,104,105,115,32,105,115,32,116,104,101,84, +104,105,115,32,108,101,100,32,116,111,97,32,115,116,97,116,101,109,101,110,116, +99,111,110,116,114,97,115,116,32,116,111,108,97,115,116,73,110,100,101,120,79, +102,116,104,114,111,117,103,104,32,104,105,115,105,115,32,100,101,115,105,103, +110,101,100,116,104,101,32,116,101,114,109,32,105,115,105,115,32,112,114,111,118 +,105,100,101,100,112,114,111,116,101,99,116,32,116,104,101,110,103,60,47,97,62, +60,47,108,105,62,84,104,101,32,99,117,114,114,101,110,116,116,104,101,32,115,105 +,116,101,32,111,102,115,117,98,115,116,97,110,116,105,97,108,101,120,112,101,114 +,105,101,110,99,101,44,105,110,32,116,104,101,32,87,101,115,116,116,104,101,121, +32,115,104,111,117,108,100,115,108,111,118,101,110,196,141,105,110,97,99,111,109 +,101,110,116,97,114,105,111,115,117,110,105,118,101,114,115,105,100,97,100,99, +111,110,100,105,99,105,111,110,101,115,97,99,116,105,118,105,100,97,100,101,115, +101,120,112,101,114,105,101,110,99,105,97,116,101,99,110,111,108,111,103,195,173 +,97,112,114,111,100,117,99,99,105,195,179,110,112,117,110,116,117,97,99,105,195, +179,110,97,112,108,105,99,97,99,105,195,179,110,99,111,110,116,114,97,115,101, +195,177,97,99,97,116,101,103,111,114,195,173,97,115,114,101,103,105,115,116,114, +97,114,115,101,112,114,111,102,101,115,105,111,110,97,108,116,114,97,116,97,109, +105,101,110,116,111,114,101,103,195,173,115,116,114,97,116,101,115,101,99,114, +101,116,97,114,195,173,97,112,114,105,110,99,105,112,97,108,101,115,112,114,111, +116,101,99,99,105,195,179,110,105,109,112,111,114,116,97,110,116,101,115,105,109 +,112,111,114,116,97,110,99,105,97,112,111,115,105,98,105,108,105,100,97,100,105, +110,116,101,114,101,115,97,110,116,101,99,114,101,99,105,109,105,101,110,116,111 +,110,101,99,101,115,105,100,97,100,101,115,115,117,115,99,114,105,98,105,114,115 +,101,97,115,111,99,105,97,99,105,195,179,110,100,105,115,112,111,110,105,98,108, +101,115,101,118,97,108,117,97,99,105,195,179,110,101,115,116,117,100,105,97,110, +116,101,115,114,101,115,112,111,110,115,97,98,108,101,114,101,115,111,108,117,99 +,105,195,179,110,103,117,97,100,97,108,97,106,97,114,97,114,101,103,105,115,116, +114,97,100,111,115,111,112,111,114,116,117,110,105,100,97,100,99,111,109,101,114 +,99,105,97,108,101,115,102,111,116,111,103,114,97,102,195,173,97,97,117,116,111, +114,105,100,97,100,101,115,105,110,103,101,110,105,101,114,195,173,97,116,101, +108,101,118,105,115,105,195,179,110,99,111,109,112,101,116,101,110,99,105,97,111 +,112,101,114,97,99,105,111,110,101,115,101,115,116,97,98,108,101,99,105,100,111, +115,105,109,112,108,101,109,101,110,116,101,97,99,116,117,97,108,109,101,110,116 +,101,110,97,118,101,103,97,99,105,195,179,110,99,111,110,102,111,114,109,105,100 +,97,100,108,105,110,101,45,104,101,105,103,104,116,58,102,111,110,116,45,102,97, +109,105,108,121,58,34,32,58,32,34,104,116,116,112,58,47,47,97,112,112,108,105,99 +,97,116,105,111,110,115,108,105,110,107,34,32,104,114,101,102,61,34,115,112,101, +99,105,102,105,99,97,108,108,121,47,47,60,33,91,67,68,65,84,65,91,10,79,114,103, +97,110,105,122,97,116,105,111,110,100,105,115,116,114,105,98,117,116,105,111,110 +,48,112,120,59,32,104,101,105,103,104,116,58,114,101,108,97,116,105,111,110,115, +104,105,112,100,101,118,105,99,101,45,119,105,100,116,104,60,100,105,118,32,99, +108,97,115,115,61,34,60,108,97,98,101,108,32,102,111,114,61,34,114,101,103,105, +115,116,114,97,116,105,111,110,60,47,110,111,115,99,114,105,112,116,62,10,47,105 +,110,100,101,120,46,104,116,109,108,34,119,105,110,100,111,119,46,111,112,101, +110,40,32,33,105,109,112,111,114,116,97,110,116,59,97,112,112,108,105,99,97,116, +105,111,110,47,105,110,100,101,112,101,110,100,101,110,99,101,47,47,119,119,119, +46,103,111,111,103,108,101,111,114,103,97,110,105,122,97,116,105,111,110,97,117, +116,111,99,111,109,112,108,101,116,101,114,101,113,117,105,114,101,109,101,110, +116,115,99,111,110,115,101,114,118,97,116,105,118,101,60,102,111,114,109,32,110, +97,109,101,61,34,105,110,116,101,108,108,101,99,116,117,97,108,109,97,114,103, +105,110,45,108,101,102,116,58,49,56,116,104,32,99,101,110,116,117,114,121,97,110 +,32,105,109,112,111,114,116,97,110,116,105,110,115,116,105,116,117,116,105,111, +110,115,97,98,98,114,101,118,105,97,116,105,111,110,60,105,109,103,32,99,108,97, +115,115,61,34,111,114,103,97,110,105,115,97,116,105,111,110,99,105,118,105,108, +105,122,97,116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,97,114,99 +,104,105,116,101,99,116,117,114,101,105,110,99,111,114,112,111,114,97,116,101, +100,50,48,116,104,32,99,101,110,116,117,114,121,45,99,111,110,116,97,105,110,101 +,114,34,62,109,111,115,116,32,110,111,116,97,98,108,121,47,62,60,47,97,62,60,47, +100,105,118,62,110,111,116,105,102,105,99,97,116,105,111,110,39,117,110,100,101, +102,105,110,101,100,39,41,70,117,114,116,104,101,114,109,111,114,101,44,98,101, +108,105,101,118,101,32,116,104,97,116,105,110,110,101,114,72,84,77,76,32,61,32, +112,114,105,111,114,32,116,111,32,116,104,101,100,114,97,109,97,116,105,99,97, +108,108,121,114,101,102,101,114,114,105,110,103,32,116,111,110,101,103,111,116, +105,97,116,105,111,110,115,104,101,97,100,113,117,97,114,116,101,114,115,83,111, +117,116,104,32,65,102,114,105,99,97,117,110,115,117,99,99,101,115,115,102,117, +108,80,101,110,110,115,121,108,118,97,110,105,97,65,115,32,97,32,114,101,115,117 +,108,116,44,60,104,116,109,108,32,108,97,110,103,61,34,38,108,116,59,47,115,117, +112,38,103,116,59,100,101,97,108,105,110,103,32,119,105,116,104,112,104,105,108, +97,100,101,108,112,104,105,97,104,105,115,116,111,114,105,99,97,108,108,121,41, +59,60,47,115,99,114,105,112,116,62,10,112,97,100,100,105,110,103,45,116,111,112, +58,101,120,112,101,114,105,109,101,110,116,97,108,103,101,116,65,116,116,114,105 +,98,117,116,101,105,110,115,116,114,117,99,116,105,111,110,115,116,101,99,104, +110,111,108,111,103,105,101,115,112,97,114,116,32,111,102,32,116,104,101,32,61, +102,117,110,99,116,105,111,110,40,41,123,115,117,98,115,99,114,105,112,116,105, +111,110,108,46,100,116,100,34,62,13,10,60,104,116,103,101,111,103,114,97,112,104 +,105,99,97,108,67,111,110,115,116,105,116,117,116,105,111,110,39,44,32,102,117, +110,99,116,105,111,110,40,115,117,112,112,111,114,116,101,100,32,98,121,97,103, +114,105,99,117,108,116,117,114,97,108,99,111,110,115,116,114,117,99,116,105,111, +110,112,117,98,108,105,99,97,116,105,111,110,115,102,111,110,116,45,115,105,122, +101,58,32,49,97,32,118,97,114,105,101,116,121,32,111,102,60,100,105,118,32,115, +116,121,108,101,61,34,69,110,99,121,99,108,111,112,101,100,105,97,105,102,114,97 +,109,101,32,115,114,99,61,34,100,101,109,111,110,115,116,114,97,116,101,100,97, +99,99,111,109,112,108,105,115,104,101,100,117,110,105,118,101,114,115,105,116, +105,101,115,68,101,109,111,103,114,97,112,104,105,99,115,41,59,60,47,115,99,114, +105,112,116,62,60,100,101,100,105,99,97,116,101,100,32,116,111,107,110,111,119, +108,101,100,103,101,32,111,102,115,97,116,105,115,102,97,99,116,105,111,110,112, +97,114,116,105,99,117,108,97,114,108,121,60,47,100,105,118,62,60,47,100,105,118, +62,69,110,103,108,105,115,104,32,40,85,83,41,97,112,112,101,110,100,67,104,105, +108,100,40,116,114,97,110,115,109,105,115,115,105,111,110,115,46,32,72,111,119, +101,118,101,114,44,32,105,110,116,101,108,108,105,103,101,110,99,101,34,32,116, +97,98,105,110,100,101,120,61,34,102,108,111,97,116,58,114,105,103,104,116,59,67, +111,109,109,111,110,119,101,97,108,116,104,114,97,110,103,105,110,103,32,102,114 +,111,109,105,110,32,119,104,105,99,104,32,116,104,101,97,116,32,108,101,97,115, +116,32,111,110,101,114,101,112,114,111,100,117,99,116,105,111,110,101,110,99,121 +,99,108,111,112,101,100,105,97,59,102,111,110,116,45,115,105,122,101,58,49,106, +117,114,105,115,100,105,99,116,105,111,110,97,116,32,116,104,97,116,32,116,105, +109,101,34,62,60,97,32,99,108,97,115,115,61,34,73,110,32,97,100,100,105,116,105, +111,110,44,100,101,115,99,114,105,112,116,105,111,110,43,99,111,110,118,101,114, +115,97,116,105,111,110,99,111,110,116,97,99,116,32,119,105,116,104,105,115,32, +103,101,110,101,114,97,108,108,121,114,34,32,99,111,110,116,101,110,116,61,34, +114,101,112,114,101,115,101,110,116,105,110,103,38,108,116,59,109,97,116,104,38, +103,116,59,112,114,101,115,101,110,116,97,116,105,111,110,111,99,99,97,115,105, +111,110,97,108,108,121,60,105,109,103,32,119,105,100,116,104,61,34,110,97,118, +105,103,97,116,105,111,110,34,62,99,111,109,112,101,110,115,97,116,105,111,110, +99,104,97,109,112,105,111,110,115,104,105,112,109,101,100,105,97,61,34,97,108, +108,34,32,118,105,111,108,97,116,105,111,110,32,111,102,114,101,102,101,114,101, +110,99,101,32,116,111,114,101,116,117,114,110,32,116,114,117,101,59,83,116,114, +105,99,116,47,47,69,78,34,32,116,114,97,110,115,97,99,116,105,111,110,115,105, +110,116,101,114,118,101,110,116,105,111,110,118,101,114,105,102,105,99,97,116, +105,111,110,73,110,102,111,114,109,97,116,105,111,110,32,100,105,102,102,105,99, +117,108,116,105,101,115,67,104,97,109,112,105,111,110,115,104,105,112,99,97,112, +97,98,105,108,105,116,105,101,115,60,33,91,101,110,100,105,102,93,45,45,62,125, +10,60,47,115,99,114,105,112,116,62,10,67,104,114,105,115,116,105,97,110,105,116, +121,102,111,114,32,101,120,97,109,112,108,101,44,80,114,111,102,101,115,115,105, +111,110,97,108,114,101,115,116,114,105,99,116,105,111,110,115,115,117,103,103, +101,115,116,32,116,104,97,116,119,97,115,32,114,101,108,101,97,115,101,100,40, +115,117,99,104,32,97,115,32,116,104,101,114,101,109,111,118,101,67,108,97,115, +115,40,117,110,101,109,112,108,111,121,109,101,110,116,116,104,101,32,65,109,101 +,114,105,99,97,110,115,116,114,117,99,116,117,114,101,32,111,102,47,105,110,100, +101,120,46,104,116,109,108,32,112,117,98,108,105,115,104,101,100,32,105,110,115, +112,97,110,32,99,108,97,115,115,61,34,34,62,60,97,32,104,114,101,102,61,34,47, +105,110,116,114,111,100,117,99,116,105,111,110,98,101,108,111,110,103,105,110, +103,32,116,111,99,108,97,105,109,101,100,32,116,104,97,116,99,111,110,115,101, +113,117,101,110,99,101,115,60,109,101,116,97,32,110,97,109,101,61,34,71,117,105, +100,101,32,116,111,32,116,104,101,111,118,101,114,119,104,101,108,109,105,110, +103,97,103,97,105,110,115,116,32,116,104,101,32,99,111,110,99,101,110,116,114,97 +,116,101,100,44,10,46,110,111,110,116,111,117,99,104,32,111,98,115,101,114,118, +97,116,105,111,110,115,60,47,97,62,10,60,47,100,105,118,62,10,102,32,40,100,111, +99,117,109,101,110,116,46,98,111,114,100,101,114,58,32,49,112,120,32,123,102,111 +,110,116,45,115,105,122,101,58,49,116,114,101,97,116,109,101,110,116,32,111,102, +48,34,32,104,101,105,103,104,116,61,34,49,109,111,100,105,102,105,99,97,116,105, +111,110,73,110,100,101,112,101,110,100,101,110,99,101,100,105,118,105,100,101, +100,32,105,110,116,111,103,114,101,97,116,101,114,32,116,104,97,110,97,99,104, +105,101,118,101,109,101,110,116,115,101,115,116,97,98,108,105,115,104,105,110, +103,74,97,118,97,83,99,114,105,112,116,34,32,110,101,118,101,114,116,104,101,108 +,101,115,115,115,105,103,110,105,102,105,99,97,110,99,101,66,114,111,97,100,99, +97,115,116,105,110,103,62,38,110,98,115,112,59,60,47,116,100,62,99,111,110,116, +97,105,110,101,114,34,62,10,115,117,99,104,32,97,115,32,116,104,101,32,105,110, +102,108,117,101,110,99,101,32,111,102,97,32,112,97,114,116,105,99,117,108,97,114 +,115,114,99,61,39,104,116,116,112,58,47,47,110,97,118,105,103,97,116,105,111,110 +,34,32,104,97,108,102,32,111,102,32,116,104,101,32,115,117,98,115,116,97,110,116 +,105,97,108,32,38,110,98,115,112,59,60,47,100,105,118,62,97,100,118,97,110,116, +97,103,101,32,111,102,100,105,115,99,111,118,101,114,121,32,111,102,102,117,110, +100,97,109,101,110,116,97,108,32,109,101,116,114,111,112,111,108,105,116,97,110, +116,104,101,32,111,112,112,111,115,105,116,101,34,32,120,109,108,58,108,97,110, +103,61,34,100,101,108,105,98,101,114,97,116,101,108,121,97,108,105,103,110,61,99 +,101,110,116,101,114,101,118,111,108,117,116,105,111,110,32,111,102,112,114,101, +115,101,114,118,97,116,105,111,110,105,109,112,114,111,118,101,109,101,110,116, +115,98,101,103,105,110,110,105,110,103,32,105,110,74,101,115,117,115,32,67,104, +114,105,115,116,80,117,98,108,105,99,97,116,105,111,110,115,100,105,115,97,103, +114,101,101,109,101,110,116,116,101,120,116,45,97,108,105,103,110,58,114,44,32, +102,117,110,99,116,105,111,110,40,41,115,105,109,105,108,97,114,105,116,105,101, +115,98,111,100,121,62,60,47,104,116,109,108,62,105,115,32,99,117,114,114,101,110 +,116,108,121,97,108,112,104,97,98,101,116,105,99,97,108,105,115,32,115,111,109, +101,116,105,109,101,115,116,121,112,101,61,34,105,109,97,103,101,47,109,97,110, +121,32,111,102,32,116,104,101,32,102,108,111,119,58,104,105,100,100,101,110,59, +97,118,97,105,108,97,98,108,101,32,105,110,100,101,115,99,114,105,98,101,32,116, +104,101,101,120,105,115,116,101,110,99,101,32,111,102,97,108,108,32,111,118,101, +114,32,116,104,101,116,104,101,32,73,110,116,101,114,110,101,116,9,60,117,108,32 +,99,108,97,115,115,61,34,105,110,115,116,97,108,108,97,116,105,111,110,110,101, +105,103,104,98,111,114,104,111,111,100,97,114,109,101,100,32,102,111,114,99,101, +115,114,101,100,117,99,105,110,103,32,116,104,101,99,111,110,116,105,110,117,101 +,115,32,116,111,78,111,110,101,116,104,101,108,101,115,115,44,116,101,109,112, +101,114,97,116,117,114,101,115,10,9,9,60,97,32,104,114,101,102,61,34,99,108,111, +115,101,32,116,111,32,116,104,101,101,120,97,109,112,108,101,115,32,111,102,32, +105,115,32,97,98,111,117,116,32,116,104,101,40,115,101,101,32,98,101,108,111,119 +,41,46,34,32,105,100,61,34,115,101,97,114,99,104,112,114,111,102,101,115,115,105 +,111,110,97,108,105,115,32,97,118,97,105,108,97,98,108,101,116,104,101,32,111, +102,102,105,99,105,97,108,9,9,60,47,115,99,114,105,112,116,62,10,10,9,9,60,100, +105,118,32,105,100,61,34,97,99,99,101,108,101,114,97,116,105,111,110,116,104,114 +,111,117,103,104,32,116,104,101,32,72,97,108,108,32,111,102,32,70,97,109,101,100 +,101,115,99,114,105,112,116,105,111,110,115,116,114,97,110,115,108,97,116,105, +111,110,115,105,110,116,101,114,102,101,114,101,110,99,101,32,116,121,112,101,61 +,39,116,101,120,116,47,114,101,99,101,110,116,32,121,101,97,114,115,105,110,32, +116,104,101,32,119,111,114,108,100,118,101,114,121,32,112,111,112,117,108,97,114 +,123,98,97,99,107,103,114,111,117,110,100,58,116,114,97,100,105,116,105,111,110, +97,108,32,115,111,109,101,32,111,102,32,116,104,101,32,99,111,110,110,101,99,116 +,101,100,32,116,111,101,120,112,108,111,105,116,97,116,105,111,110,101,109,101, +114,103,101,110,99,101,32,111,102,99,111,110,115,116,105,116,117,116,105,111,110 +,65,32,72,105,115,116,111,114,121,32,111,102,115,105,103,110,105,102,105,99,97, +110,116,32,109,97,110,117,102,97,99,116,117,114,101,100,101,120,112,101,99,116, +97,116,105,111,110,115,62,60,110,111,115,99,114,105,112,116,62,60,99,97,110,32, +98,101,32,102,111,117,110,100,98,101,99,97,117,115,101,32,116,104,101,32,104,97, +115,32,110,111,116,32,98,101,101,110,110,101,105,103,104,98,111,117,114,105,110, +103,119,105,116,104,111,117,116,32,116,104,101,32,97,100,100,101,100,32,116,111, +32,116,104,101,9,60,108,105,32,99,108,97,115,115,61,34,105,110,115,116,114,117, +109,101,110,116,97,108,83,111,118,105,101,116,32,85,110,105,111,110,97,99,107, +110,111,119,108,101,100,103,101,100,119,104,105,99,104,32,99,97,110,32,98,101, +110,97,109,101,32,102,111,114,32,116,104,101,97,116,116,101,110,116,105,111,110, +32,116,111,97,116,116,101,109,112,116,115,32,116,111,32,100,101,118,101,108,111, +112,109,101,110,116,115,73,110,32,102,97,99,116,44,32,116,104,101,60,108,105,32, +99,108,97,115,115,61,34,97,105,109,112,108,105,99,97,116,105,111,110,115,115,117 +,105,116,97,98,108,101,32,102,111,114,109,117,99,104,32,111,102,32,116,104,101, +32,99,111,108,111,110,105,122,97,116,105,111,110,112,114,101,115,105,100,101,110 +,116,105,97,108,99,97,110,99,101,108,66,117,98,98,108,101,32,73,110,102,111,114, +109,97,116,105,111,110,109,111,115,116,32,111,102,32,116,104,101,32,105,115,32, +100,101,115,99,114,105,98,101,100,114,101,115,116,32,111,102,32,116,104,101,32, +109,111,114,101,32,111,114,32,108,101,115,115,105,110,32,83,101,112,116,101,109, +98,101,114,73,110,116,101,108,108,105,103,101,110,99,101,115,114,99,61,34,104, +116,116,112,58,47,47,112,120,59,32,104,101,105,103,104,116,58,32,97,118,97,105, +108,97,98,108,101,32,116,111,109,97,110,117,102,97,99,116,117,114,101,114,104, +117,109,97,110,32,114,105,103,104,116,115,108,105,110,107,32,104,114,101,102,61, +34,47,97,118,97,105,108,97,98,105,108,105,116,121,112,114,111,112,111,114,116, +105,111,110,97,108,111,117,116,115,105,100,101,32,116,104,101,32,97,115,116,114, +111,110,111,109,105,99,97,108,104,117,109,97,110,32,98,101,105,110,103,115,110, +97,109,101,32,111,102,32,116,104,101,32,97,114,101,32,102,111,117,110,100,32,105 +,110,97,114,101,32,98,97,115,101,100,32,111,110,115,109,97,108,108,101,114,32, +116,104,97,110,97,32,112,101,114,115,111,110,32,119,104,111,101,120,112,97,110, +115,105,111,110,32,111,102,97,114,103,117,105,110,103,32,116,104,97,116,110,111, +119,32,107,110,111,119,110,32,97,115,73,110,32,116,104,101,32,101,97,114,108,121 +,105,110,116,101,114,109,101,100,105,97,116,101,100,101,114,105,118,101,100,32, +102,114,111,109,83,99,97,110,100,105,110,97,118,105,97,110,60,47,97,62,60,47,100 +,105,118,62,13,10,99,111,110,115,105,100,101,114,32,116,104,101,97,110,32,101, +115,116,105,109,97,116,101,100,116,104,101,32,78,97,116,105,111,110,97,108,60, +100,105,118,32,105,100,61,34,112,97,103,114,101,115,117,108,116,105,110,103,32, +105,110,99,111,109,109,105,115,115,105,111,110,101,100,97,110,97,108,111,103,111 +,117,115,32,116,111,97,114,101,32,114,101,113,117,105,114,101,100,47,117,108,62, +10,60,47,100,105,118,62,10,119,97,115,32,98,97,115,101,100,32,111,110,97,110,100 +,32,98,101,99,97,109,101,32,97,38,110,98,115,112,59,38,110,98,115,112,59,116,34, +32,118,97,108,117,101,61,34,34,32,119,97,115,32,99,97,112,116,117,114,101,100, +110,111,32,109,111,114,101,32,116,104,97,110,114,101,115,112,101,99,116,105,118, +101,108,121,99,111,110,116,105,110,117,101,32,116,111,32,62,13,10,60,104,101,97, +100,62,13,10,60,119,101,114,101,32,99,114,101,97,116,101,100,109,111,114,101,32, +103,101,110,101,114,97,108,105,110,102,111,114,109,97,116,105,111,110,32,117,115 +,101,100,32,102,111,114,32,116,104,101,105,110,100,101,112,101,110,100,101,110, +116,32,116,104,101,32,73,109,112,101,114,105,97,108,99,111,109,112,111,110,101, +110,116,32,111,102,116,111,32,116,104,101,32,110,111,114,116,104,105,110,99,108, +117,100,101,32,116,104,101,32,67,111,110,115,116,114,117,99,116,105,111,110,115, +105,100,101,32,111,102,32,116,104,101,32,119,111,117,108,100,32,110,111,116,32, +98,101,102,111,114,32,105,110,115,116,97,110,99,101,105,110,118,101,110,116,105, +111,110,32,111,102,109,111,114,101,32,99,111,109,112,108,101,120,99,111,108,108, +101,99,116,105,118,101,108,121,98,97,99,107,103,114,111,117,110,100,58,32,116, +101,120,116,45,97,108,105,103,110,58,32,105,116,115,32,111,114,105,103,105,110, +97,108,105,110,116,111,32,97,99,99,111,117,110,116,116,104,105,115,32,112,114, +111,99,101,115,115,97,110,32,101,120,116,101,110,115,105,118,101,104,111,119,101 +,118,101,114,44,32,116,104,101,116,104,101,121,32,97,114,101,32,110,111,116,114, +101,106,101,99,116,101,100,32,116,104,101,99,114,105,116,105,99,105,115,109,32, +111,102,100,117,114,105,110,103,32,119,104,105,99,104,112,114,111,98,97,98,108, +121,32,116,104,101,116,104,105,115,32,97,114,116,105,99,108,101,40,102,117,110, +99,116,105,111,110,40,41,123,73,116,32,115,104,111,117,108,100,32,98,101,97,110, +32,97,103,114,101,101,109,101,110,116,97,99,99,105,100,101,110,116,97,108,108, +121,100,105,102,102,101,114,115,32,102,114,111,109,65,114,99,104,105,116,101,99, +116,117,114,101,98,101,116,116,101,114,32,107,110,111,119,110,97,114,114,97,110, +103,101,109,101,110,116,115,105,110,102,108,117,101,110,99,101,32,111,110,97,116 +,116,101,110,100,101,100,32,116,104,101,105,100,101,110,116,105,99,97,108,32,116 +,111,115,111,117,116,104,32,111,102,32,116,104,101,112,97,115,115,32,116,104,114 +,111,117,103,104,120,109,108,34,32,116,105,116,108,101,61,34,119,101,105,103,104 +,116,58,98,111,108,100,59,99,114,101,97,116,105,110,103,32,116,104,101,100,105, +115,112,108,97,121,58,110,111,110,101,114,101,112,108,97,99,101,100,32,116,104, +101,60,105,109,103,32,115,114,99,61,34,47,105,104,116,116,112,115,58,47,47,119, +119,119,46,87,111,114,108,100,32,87,97,114,32,73,73,116,101,115,116,105,109,111, +110,105,97,108,115,102,111,117,110,100,32,105,110,32,116,104,101,114,101,113,117 +,105,114,101,100,32,116,111,32,97,110,100,32,116,104,97,116,32,116,104,101,98, +101,116,119,101,101,110,32,116,104,101,32,119,97,115,32,100,101,115,105,103,110, +101,100,99,111,110,115,105,115,116,115,32,111,102,32,99,111,110,115,105,100,101, +114,97,98,108,121,112,117,98,108,105,115,104,101,100,32,98,121,116,104,101,32, +108,97,110,103,117,97,103,101,67,111,110,115,101,114,118,97,116,105,111,110,99, +111,110,115,105,115,116,101,100,32,111,102,114,101,102,101,114,32,116,111,32,116 +,104,101,98,97,99,107,32,116,111,32,116,104,101,32,99,115,115,34,32,109,101,100, +105,97,61,34,80,101,111,112,108,101,32,102,114,111,109,32,97,118,97,105,108,97, +98,108,101,32,111,110,112,114,111,118,101,100,32,116,111,32,98,101,115,117,103, +103,101,115,116,105,111,110,115,34,119,97,115,32,107,110,111,119,110,32,97,115, +118,97,114,105,101,116,105,101,115,32,111,102,108,105,107,101,108,121,32,116,111 +,32,98,101,99,111,109,112,114,105,115,101,100,32,111,102,115,117,112,112,111,114 +,116,32,116,104,101,32,104,97,110,100,115,32,111,102,32,116,104,101,99,111,117, +112,108,101,100,32,119,105,116,104,99,111,110,110,101,99,116,32,97,110,100,32,98 +,111,114,100,101,114,58,110,111,110,101,59,112,101,114,102,111,114,109,97,110,99 +,101,115,98,101,102,111,114,101,32,98,101,105,110,103,108,97,116,101,114,32,98, +101,99,97,109,101,99,97,108,99,117,108,97,116,105,111,110,115,111,102,116,101, +110,32,99,97,108,108,101,100,114,101,115,105,100,101,110,116,115,32,111,102,109, +101,97,110,105,110,103,32,116,104,97,116,62,60,108,105,32,99,108,97,115,115,61, +34,101,118,105,100,101,110,99,101,32,102,111,114,101,120,112,108,97,110,97,116, +105,111,110,115,101,110,118,105,114,111,110,109,101,110,116,115,34,62,60,47,97, +62,60,47,100,105,118,62,119,104,105,99,104,32,97,108,108,111,119,115,73,110,116, +114,111,100,117,99,116,105,111,110,100,101,118,101,108,111,112,101,100,32,98,121 +,97,32,119,105,100,101,32,114,97,110,103,101,111,110,32,98,101,104,97,108,102,32 +,111,102,118,97,108,105,103,110,61,34,116,111,112,34,112,114,105,110,99,105,112, +108,101,32,111,102,97,116,32,116,104,101,32,116,105,109,101,44,60,47,110,111,115 +,99,114,105,112,116,62,13,115,97,105,100,32,116,111,32,104,97,118,101,105,110,32 +,116,104,101,32,102,105,114,115,116,119,104,105,108,101,32,111,116,104,101,114, +115,104,121,112,111,116,104,101,116,105,99,97,108,112,104,105,108,111,115,111, +112,104,101,114,115,112,111,119,101,114,32,111,102,32,116,104,101,99,111,110,116 +,97,105,110,101,100,32,105,110,112,101,114,102,111,114,109,101,100,32,98,121,105 +,110,97,98,105,108,105,116,121,32,116,111,119,101,114,101,32,119,114,105,116,116 +,101,110,115,112,97,110,32,115,116,121,108,101,61,34,105,110,112,117,116,32,110, +97,109,101,61,34,116,104,101,32,113,117,101,115,116,105,111,110,105,110,116,101, +110,100,101,100,32,102,111,114,114,101,106,101,99,116,105,111,110,32,111,102,105 +,109,112,108,105,101,115,32,116,104,97,116,105,110,118,101,110,116,101,100,32, +116,104,101,116,104,101,32,115,116,97,110,100,97,114,100,119,97,115,32,112,114, +111,98,97,98,108,121,108,105,110,107,32,98,101,116,119,101,101,110,112,114,111, +102,101,115,115,111,114,32,111,102,105,110,116,101,114,97,99,116,105,111,110,115 +,99,104,97,110,103,105,110,103,32,116,104,101,73,110,100,105,97,110,32,79,99,101 +,97,110,32,99,108,97,115,115,61,34,108,97,115,116,119,111,114,107,105,110,103,32 +,119,105,116,104,39,104,116,116,112,58,47,47,119,119,119,46,121,101,97,114,115, +32,98,101,102,111,114,101,84,104,105,115,32,119,97,115,32,116,104,101,114,101,99 +,114,101,97,116,105,111,110,97,108,101,110,116,101,114,105,110,103,32,116,104, +101,109,101,97,115,117,114,101,109,101,110,116,115,97,110,32,101,120,116,114,101 +,109,101,108,121,118,97,108,117,101,32,111,102,32,116,104,101,115,116,97,114,116 +,32,111,102,32,116,104,101,10,60,47,115,99,114,105,112,116,62,10,10,97,110,32, +101,102,102,111,114,116,32,116,111,105,110,99,114,101,97,115,101,32,116,104,101, +116,111,32,116,104,101,32,115,111,117,116,104,115,112,97,99,105,110,103,61,34,48 +,34,62,115,117,102,102,105,99,105,101,110,116,108,121,116,104,101,32,69,117,114, +111,112,101,97,110,99,111,110,118,101,114,116,101,100,32,116,111,99,108,101,97, +114,84,105,109,101,111,117,116,100,105,100,32,110,111,116,32,104,97,118,101,99, +111,110,115,101,113,117,101,110,116,108,121,102,111,114,32,116,104,101,32,110, +101,120,116,101,120,116,101,110,115,105,111,110,32,111,102,101,99,111,110,111, +109,105,99,32,97,110,100,97,108,116,104,111,117,103,104,32,116,104,101,97,114, +101,32,112,114,111,100,117,99,101,100,97,110,100,32,119,105,116,104,32,116,104, +101,105,110,115,117,102,102,105,99,105,101,110,116,103,105,118,101,110,32,98,121 +,32,116,104,101,115,116,97,116,105,110,103,32,116,104,97,116,101,120,112,101,110 +,100,105,116,117,114,101,115,60,47,115,112,97,110,62,60,47,97,62,10,116,104,111, +117,103,104,116,32,116,104,97,116,111,110,32,116,104,101,32,98,97,115,105,115,99 +,101,108,108,112,97,100,100,105,110,103,61,105,109,97,103,101,32,111,102,32,116, +104,101,114,101,116,117,114,110,105,110,103,32,116,111,105,110,102,111,114,109, +97,116,105,111,110,44,115,101,112,97,114,97,116,101,100,32,98,121,97,115,115,97, +115,115,105,110,97,116,101,100,115,34,32,99,111,110,116,101,110,116,61,34,97,117 +,116,104,111,114,105,116,121,32,111,102,110,111,114,116,104,119,101,115,116,101, +114,110,60,47,100,105,118,62,10,60,100,105,118,32,34,62,60,47,100,105,118,62,13, +10,32,32,99,111,110,115,117,108,116,97,116,105,111,110,99,111,109,109,117,110, +105,116,121,32,111,102,116,104,101,32,110,97,116,105,111,110,97,108,105,116,32, +115,104,111,117,108,100,32,98,101,112,97,114,116,105,99,105,112,97,110,116,115, +32,97,108,105,103,110,61,34,108,101,102,116,116,104,101,32,103,114,101,97,116, +101,115,116,115,101,108,101,99,116,105,111,110,32,111,102,115,117,112,101,114, +110,97,116,117,114,97,108,100,101,112,101,110,100,101,110,116,32,111,110,105,115 +,32,109,101,110,116,105,111,110,101,100,97,108,108,111,119,105,110,103,32,116, +104,101,119,97,115,32,105,110,118,101,110,116,101,100,97,99,99,111,109,112,97, +110,121,105,110,103,104,105,115,32,112,101,114,115,111,110,97,108,97,118,97,105, +108,97,98,108,101,32,97,116,115,116,117,100,121,32,111,102,32,116,104,101,111, +110,32,116,104,101,32,111,116,104,101,114,101,120,101,99,117,116,105,111,110,32, +111,102,72,117,109,97,110,32,82,105,103,104,116,115,116,101,114,109,115,32,111, +102,32,116,104,101,97,115,115,111,99,105,97,116,105,111,110,115,114,101,115,101, +97,114,99,104,32,97,110,100,115,117,99,99,101,101,100,101,100,32,98,121,100,101, +102,101,97,116,101,100,32,116,104,101,97,110,100,32,102,114,111,109,32,116,104, +101,98,117,116,32,116,104,101,121,32,97,114,101,99,111,109,109,97,110,100,101, +114,32,111,102,115,116,97,116,101,32,111,102,32,116,104,101,121,101,97,114,115, +32,111,102,32,97,103,101,116,104,101,32,115,116,117,100,121,32,111,102,60,117, +108,32,99,108,97,115,115,61,34,115,112,108,97,99,101,32,105,110,32,116,104,101, +119,104,101,114,101,32,104,101,32,119,97,115,60,108,105,32,99,108,97,115,115,61, +34,102,116,104,101,114,101,32,97,114,101,32,110,111,119,104,105,99,104,32,98,101 +,99,97,109,101,104,101,32,112,117,98,108,105,115,104,101,100,101,120,112,114,101 +,115,115,101,100,32,105,110,116,111,32,119,104,105,99,104,32,116,104,101,99,111, +109,109,105,115,115,105,111,110,101,114,102,111,110,116,45,119,101,105,103,104, +116,58,116,101,114,114,105,116,111,114,121,32,111,102,101,120,116,101,110,115, +105,111,110,115,34,62,82,111,109,97,110,32,69,109,112,105,114,101,101,113,117,97 +,108,32,116,111,32,116,104,101,73,110,32,99,111,110,116,114,97,115,116,44,104, +111,119,101,118,101,114,44,32,97,110,100,105,115,32,116,121,112,105,99,97,108, +108,121,97,110,100,32,104,105,115,32,119,105,102,101,40,97,108,115,111,32,99,97, +108,108,101,100,62,60,117,108,32,99,108,97,115,115,61,34,101,102,102,101,99,116, +105,118,101,108,121,32,101,118,111,108,118,101,100,32,105,110,116,111,115,101, +101,109,32,116,111,32,104,97,118,101,119,104,105,99,104,32,105,115,32,116,104, +101,116,104,101,114,101,32,119,97,115,32,110,111,97,110,32,101,120,99,101,108, +108,101,110,116,97,108,108,32,111,102,32,116,104,101,115,101,100,101,115,99,114, +105,98,101,100,32,98,121,73,110,32,112,114,97,99,116,105,99,101,44,98,114,111,97 +,100,99,97,115,116,105,110,103,99,104,97,114,103,101,100,32,119,105,116,104,114, +101,102,108,101,99,116,101,100,32,105,110,115,117,98,106,101,99,116,101,100,32, +116,111,109,105,108,105,116,97,114,121,32,97,110,100,116,111,32,116,104,101,32, +112,111,105,110,116,101,99,111,110,111,109,105,99,97,108,108,121,115,101,116,84, +97,114,103,101,116,105,110,103,97,114,101,32,97,99,116,117,97,108,108,121,118, +105,99,116,111,114,121,32,111,118,101,114,40,41,59,60,47,115,99,114,105,112,116, +62,99,111,110,116,105,110,117,111,117,115,108,121,114,101,113,117,105,114,101, +100,32,102,111,114,101,118,111,108,117,116,105,111,110,97,114,121,97,110,32,101, +102,102,101,99,116,105,118,101,110,111,114,116,104,32,111,102,32,116,104,101,44, +32,119,104,105,99,104,32,119,97,115,32,102,114,111,110,116,32,111,102,32,116,104 +,101,111,114,32,111,116,104,101,114,119,105,115,101,115,111,109,101,32,102,111, +114,109,32,111,102,104,97,100,32,110,111,116,32,98,101,101,110,103,101,110,101, +114,97,116,101,100,32,98,121,105,110,102,111,114,109,97,116,105,111,110,46,112, +101,114,109,105,116,116,101,100,32,116,111,105,110,99,108,117,100,101,115,32,116 +,104,101,100,101,118,101,108,111,112,109,101,110,116,44,101,110,116,101,114,101, +100,32,105,110,116,111,116,104,101,32,112,114,101,118,105,111,117,115,99,111,110 +,115,105,115,116,101,110,116,108,121,97,114,101,32,107,110,111,119,110,32,97,115 +,116,104,101,32,102,105,101,108,100,32,111,102,116,104,105,115,32,116,121,112, +101,32,111,102,103,105,118,101,110,32,116,111,32,116,104,101,116,104,101,32,116, +105,116,108,101,32,111,102,99,111,110,116,97,105,110,115,32,116,104,101,105,110, +115,116,97,110,99,101,115,32,111,102,105,110,32,116,104,101,32,110,111,114,116, +104,100,117,101,32,116,111,32,116,104,101,105,114,97,114,101,32,100,101,115,105, +103,110,101,100,99,111,114,112,111,114,97,116,105,111,110,115,119,97,115,32,116, +104,97,116,32,116,104,101,111,110,101,32,111,102,32,116,104,101,115,101,109,111, +114,101,32,112,111,112,117,108,97,114,115,117,99,99,101,101,100,101,100,32,105, +110,115,117,112,112,111,114,116,32,102,114,111,109,105,110,32,100,105,102,102, +101,114,101,110,116,100,111,109,105,110,97,116,101,100,32,98,121,100,101,115,105 +,103,110,101,100,32,102,111,114,111,119,110,101,114,115,104,105,112,32,111,102, +97,110,100,32,112,111,115,115,105,98,108,121,115,116,97,110,100,97,114,100,105, +122,101,100,114,101,115,112,111,110,115,101,84,101,120,116,119,97,115,32,105,110 +,116,101,110,100,101,100,114,101,99,101,105,118,101,100,32,116,104,101,97,115, +115,117,109,101,100,32,116,104,97,116,97,114,101,97,115,32,111,102,32,116,104, +101,112,114,105,109,97,114,105,108,121,32,105,110,116,104,101,32,98,97,115,105, +115,32,111,102,105,110,32,116,104,101,32,115,101,110,115,101,97,99,99,111,117, +110,116,115,32,102,111,114,100,101,115,116,114,111,121,101,100,32,98,121,97,116, +32,108,101,97,115,116,32,116,119,111,119,97,115,32,100,101,99,108,97,114,101,100 +,99,111,117,108,100,32,110,111,116,32,98,101,83,101,99,114,101,116,97,114,121,32 +,111,102,97,112,112,101,97,114,32,116,111,32,98,101,109,97,114,103,105,110,45, +116,111,112,58,49,47,94,92,115,43,124,92,115,43,36,47,103,101,41,123,116,104,114 +,111,119,32,101,125,59,116,104,101,32,115,116,97,114,116,32,111,102,116,119,111, +32,115,101,112,97,114,97,116,101,108,97,110,103,117,97,103,101,32,97,110,100,119 +,104,111,32,104,97,100,32,98,101,101,110,111,112,101,114,97,116,105,111,110,32, +111,102,100,101,97,116,104,32,111,102,32,116,104,101,114,101,97,108,32,110,117, +109,98,101,114,115,9,60,108,105,110,107,32,114,101,108,61,34,112,114,111,118,105 +,100,101,100,32,116,104,101,116,104,101,32,115,116,111,114,121,32,111,102,99,111 +,109,112,101,116,105,116,105,111,110,115,101,110,103,108,105,115,104,32,40,85,75 +,41,101,110,103,108,105,115,104,32,40,85,83,41,208,156,208,190,208,189,208,179, +208,190,208,187,208,161,209,128,208,191,209,129,208,186,208,184,209,129,209,128, +208,191,209,129,208,186,208,184,209,129,209,128,208,191,209,129,208,186,208,190, +217,132,216,185,216,177,216,168,217,138,216,169,230,173,163,233,171,148,228,184, +173,230,150,135,231,174,128,228,189,147,228,184,173,230,150,135,231,185,129,228, +189,147,228,184,173,230,150,135,230,156,137,233,153,144,229,133,172,229,143,184, +228,186,186,230,176,145,230,148,191,229,186,156,233,152,191,233,135,140,229,183, +180,229,183,180,231,164,190,228,188,154,228,184,187,228,185,137,230,147,141,228, +189,156,231,179,187,231,187,159,230,148,191,231,173,150,230,179,149,232,167,132, +105,110,102,111,114,109,97,99,105,195,179,110,104,101,114,114,97,109,105,101,110 +,116,97,115,101,108,101,99,116,114,195,179,110,105,99,111,100,101,115,99,114,105 +,112,99,105,195,179,110,99,108,97,115,105,102,105,99,97,100,111,115,99,111,110, +111,99,105,109,105,101,110,116,111,112,117,98,108,105,99,97,99,105,195,179,110, +114,101,108,97,99,105,111,110,97,100,97,115,105,110,102,111,114,109,195,161,116, +105,99,97,114,101,108,97,99,105,111,110,97,100,111,115,100,101,112,97,114,116,97 +,109,101,110,116,111,116,114,97,98,97,106,97,100,111,114,101,115,100,105,114,101 +,99,116,97,109,101,110,116,101,97,121,117,110,116,97,109,105,101,110,116,111,109 +,101,114,99,97,100,111,76,105,98,114,101,99,111,110,116,195,161,99,116,101,110, +111,115,104,97,98,105,116,97,99,105,111,110,101,115,99,117,109,112,108,105,109, +105,101,110,116,111,114,101,115,116,97,117,114,97,110,116,101,115,100,105,115, +112,111,115,105,99,105,195,179,110,99,111,110,115,101,99,117,101,110,99,105,97, +101,108,101,99,116,114,195,179,110,105,99,97,97,112,108,105,99,97,99,105,111,110 +,101,115,100,101,115,99,111,110,101,99,116,97,100,111,105,110,115,116,97,108,97, +99,105,195,179,110,114,101,97,108,105,122,97,99,105,195,179,110,117,116,105,108, +105,122,97,99,105,195,179,110,101,110,99,105,99,108,111,112,101,100,105,97,101, +110,102,101,114,109,101,100,97,100,101,115,105,110,115,116,114,117,109,101,110, +116,111,115,101,120,112,101,114,105,101,110,99,105,97,115,105,110,115,116,105, +116,117,99,105,195,179,110,112,97,114,116,105,99,117,108,97,114,101,115,115,117, +98,99,97,116,101,103,111,114,105,97,209,130,208,190,208,187,209,140,208,186,208, +190,208,160,208,190,209,129,209,129,208,184,208,184,209,128,208,176,208,177,208, +190,209,130,209,139,208,177,208,190,208,187,209,140,209,136,208,181,208,191,209, +128,208,190,209,129,209,130,208,190,208,188,208,190,208,182,208,181,209,130,208, +181,208,180,209,128,209,131,208,179,208,184,209,133,209,129,208,187,209,131,209, +135,208,176,208,181,209,129,208,181,208,185,209,135,208,176,209,129,208,178,209, +129,208,181,208,179,208,180,208,176,208,160,208,190,209,129,209,129,208,184,209, +143,208,156,208,190,209,129,208,186,208,178,208,181,208,180,209,128,209,131,208, +179,208,184,208,181,208,179,208,190,209,128,208,190,208,180,208,176,208,178,208, +190,208,191,209,128,208,190,209,129,208,180,208,176,208,189,208,189,209,139,209, +133,208,180,208,190,208,187,208,182,208,189,209,139,208,184,208,188,208,181,208, +189,208,189,208,190,208,156,208,190,209,129,208,186,208,178,209,139,209,128,209, +131,208,177,208,187,208,181,208,185,208,156,208,190,209,129,208,186,208,178,208, +176,209,129,209,130,209,128,208,176,208,189,209,139,208,189,208,184,209,135,208, +181,208,179,208,190,209,128,208,176,208,177,208,190,209,130,208,181,208,180,208, +190,208,187,208,182,208,181,208,189,209,131,209,129,208,187,209,131,208,179,208, +184,209,130,208,181,208,191,208,181,209,128,209,140,208,158,208,180,208,189,208, +176,208,186,208,190,208,191,208,190,209,130,208,190,208,188,209,131,209,128,208, +176,208,177,208,190,209,130,209,131,208,176,208,191,209,128,208,181,208,187,209, +143,208,178,208,190,208,190,208,177,209,137,208,181,208,190,208,180,208,189,208, +190,208,179,208,190,209,129,208,178,208,190,208,181,208,179,208,190,209,129,209, +130,208,176,209,130,209,140,208,184,208,180,209,128,209,131,208,179,208,190,208, +185,209,132,208,190,209,128,209,131,208,188,208,181,209,133,208,190,209,128,208, +190,209,136,208,190,208,191,209,128,208,190,209,130,208,184,208,178,209,129,209, +129,209,139,208,187,208,186,208,176,208,186,208,176,208,182,208,180,209,139,208, +185,208,178,208,187,208,176,209,129,209,130,208,184,208,179,209,128,209,131,208, +191,208,191,209,139,208,178,208,188,208,181,209,129,209,130,208,181,209,128,208, +176,208,177,208,190,209,130,208,176,209,129,208,186,208,176,208,183,208,176,208, +187,208,191,208,181,209,128,208,178,209,139,208,185,208,180,208,181,208,187,208, +176,209,130,209,140,208,180,208,181,208,189,209,140,208,179,208,184,208,191,208, +181,209,128,208,184,208,190,208,180,208,177,208,184,208,183,208,189,208,181,209, +129,208,190,209,129,208,189,208,190,208,178,208,181,208,188,208,190,208,188,208, +181,208,189,209,130,208,186,209,131,208,191,208,184,209,130,209,140,208,180,208, +190,208,187,208,182,208,189,208,176,209,128,208,176,208,188,208,186,208,176,209, +133,208,189,208,176,209,135,208,176,208,187,208,190,208,160,208,176,208,177,208, +190,209,130,208,176,208,162,208,190,208,187,209,140,208,186,208,190,209,129,208, +190,208,178,209,129,208,181,208,188,208,178,209,130,208,190,209,128,208,190,208, +185,208,189,208,176,209,135,208,176,208,187,208,176,209,129,208,191,208,184,209, +129,208,190,208,186,209,129,208,187,209,131,208,182,208,177,209,139,209,129,208, +184,209,129,209,130,208,181,208,188,208,191,208,181,209,135,208,176,209,130,208, +184,208,189,208,190,208,178,208,190,208,179,208,190,208,191,208,190,208,188,208, +190,209,137,208,184,209,129,208,176,208,185,209,130,208,190,208,178,208,191,208, +190,209,135,208,181,208,188,209,131,208,191,208,190,208,188,208,190,209,137,209, +140,208,180,208,190,208,187,208,182,208,189,208,190,209,129,209,129,209,139,208, +187,208,186,208,184,208,177,209,139,209,129,209,130,209,128,208,190,208,180,208, +176,208,189,208,189,209,139,208,181,208,188,208,189,208,190,208,179,208,184,208, +181,208,191,209,128,208,190,208,181,208,186,209,130,208,161,208,181,208,185,209, +135,208,176,209,129,208,188,208,190,208,180,208,181,208,187,208,184,209,130,208, +176,208,186,208,190,208,179,208,190,208,190,208,189,208,187,208,176,208,185,208, +189,208,179,208,190,209,128,208,190,208,180,208,181,208,178,208,181,209,128,209, +129,208,184,209,143,209,129,209,130,209,128,208,176,208,189,208,181,209,132,208, +184,208,187,209,140,208,188,209,139,209,131,209,128,208,190,208,178,208,189,209, +143,209,128,208,176,208,183,208,189,209,139,209,133,208,184,209,129,208,186,208, +176,209,130,209,140,208,189,208,181,208,180,208,181,208,187,209,142,209,143,208, +189,208,178,208,176,209,128,209,143,208,188,208,181,208,189,209,140,209,136,208, +181,208,188,208,189,208,190,208,179,208,184,209,133,208,180,208,176,208,189,208, +189,208,190,208,185,208,183,208,189,208,176,209,135,208,184,209,130,208,189,208, +181,208,187,209,140,208,183,209,143,209,132,208,190,209,128,209,131,208,188,208, +176,208,162,208,181,208,191,208,181,209,128,209,140,208,188,208,181,209,129,209, +143,209,134,208,176,208,183,208,176,209,137,208,184,209,130,209,139,208,155,209, +131,209,135,209,136,208,184,208,181,224,164,168,224,164,185,224,165,128,224,164, +130,224,164,149,224,164,176,224,164,168,224,165,135,224,164,133,224,164,170,224, +164,168,224,165,135,224,164,149,224,164,191,224,164,175,224,164,190,224,164,149, +224,164,176,224,165,135,224,164,130,224,164,133,224,164,168,224,165,141,224,164, +175,224,164,149,224,165,141,224,164,175,224,164,190,224,164,151,224,164,190,224, +164,135,224,164,161,224,164,172,224,164,190,224,164,176,224,165,135,224,164,149, +224,164,191,224,164,184,224,165,128,224,164,166,224,164,191,224,164,175,224,164, +190,224,164,170,224,164,185,224,164,178,224,165,135,224,164,184,224,164,191,224, +164,130,224,164,185,224,164,173,224,164,190,224,164,176,224,164,164,224,164,133, +224,164,170,224,164,168,224,165,128,224,164,181,224,164,190,224,164,178,224,165, +135,224,164,184,224,165,135,224,164,181,224,164,190,224,164,149,224,164,176,224, +164,164,224,165,135,224,164,174,224,165,135,224,164,176,224,165,135,224,164,185, +224,165,139,224,164,168,224,165,135,224,164,184,224,164,149,224,164,164,224,165, +135,224,164,172,224,164,185,224,165,129,224,164,164,224,164,184,224,164,190,224, +164,135,224,164,159,224,164,185,224,165,139,224,164,151,224,164,190,224,164,156, +224,164,190,224,164,168,224,165,135,224,164,174,224,164,191,224,164,168,224,164, +159,224,164,149,224,164,176,224,164,164,224,164,190,224,164,149,224,164,176,224, +164,168,224,164,190,224,164,137,224,164,168,224,164,149,224,165,135,224,164,175, +224,164,185,224,164,190,224,164,129,224,164,184,224,164,172,224,164,184,224,165, +135,224,164,173,224,164,190,224,164,183,224,164,190,224,164,134,224,164,170,224, +164,149,224,165,135,224,164,178,224,164,191,224,164,175,224,165,135,224,164,182, +224,165,129,224,164,176,224,165,130,224,164,135,224,164,184,224,164,149,224,165, +135,224,164,152,224,164,130,224,164,159,224,165,135,224,164,174,224,165,135,224, +164,176,224,165,128,224,164,184,224,164,149,224,164,164,224,164,190,224,164,174, +224,165,135,224,164,176,224,164,190,224,164,178,224,165,135,224,164,149,224,164, +176,224,164,133,224,164,167,224,164,191,224,164,149,224,164,133,224,164,170,224, +164,168,224,164,190,224,164,184,224,164,174,224,164,190,224,164,156,224,164,174, +224,165,129,224,164,157,224,165,135,224,164,149,224,164,190,224,164,176,224,164, +163,224,164,185,224,165,139,224,164,164,224,164,190,224,164,149,224,164,161,224, +164,188,224,165,128,224,164,175,224,164,185,224,164,190,224,164,130,224,164,185, +224,165,139,224,164,159,224,164,178,224,164,182,224,164,172,224,165,141,224,164, +166,224,164,178,224,164,191,224,164,175,224,164,190,224,164,156,224,165,128,224, +164,181,224,164,168,224,164,156,224,164,190,224,164,164,224,164,190,224,164,149, +224,165,136,224,164,184,224,165,135,224,164,134,224,164,170,224,164,149,224,164, +190,224,164,181,224,164,190,224,164,178,224,165,128,224,164,166,224,165,135,224, +164,168,224,165,135,224,164,170,224,165,130,224,164,176,224,165,128,224,164,170, +224,164,190,224,164,168,224,165,128,224,164,137,224,164,184,224,164,149,224,165, +135,224,164,185,224,165,139,224,164,151,224,165,128,224,164,172,224,165,136,224, +164,160,224,164,149,224,164,134,224,164,170,224,164,149,224,165,128,224,164,181, +224,164,176,224,165,141,224,164,183,224,164,151,224,164,190,224,164,130,224,164, +181,224,164,134,224,164,170,224,164,149,224,165,139,224,164,156,224,164,191,224, +164,178,224,164,190,224,164,156,224,164,190,224,164,168,224,164,190,224,164,184, +224,164,185,224,164,174,224,164,164,224,164,185,224,164,174,224,165,135,224,164, +130,224,164,137,224,164,168,224,164,149,224,165,128,224,164,175,224,164,190,224, +164,185,224,165,130,224,164,166,224,164,176,224,165,141,224,164,156,224,164,184, +224,165,130,224,164,154,224,165,128,224,164,170,224,164,184,224,164,130,224,164, +166,224,164,184,224,164,181,224,164,190,224,164,178,224,164,185,224,165,139,224, +164,168,224,164,190,224,164,185,224,165,139,224,164,164,224,165,128,224,164,156, +224,165,136,224,164,184,224,165,135,224,164,181,224,164,190,224,164,170,224,164, +184,224,164,156,224,164,168,224,164,164,224,164,190,224,164,168,224,165,135,224, +164,164,224,164,190,224,164,156,224,164,190,224,164,176,224,165,128,224,164,152, +224,164,190,224,164,175,224,164,178,224,164,156,224,164,191,224,164,178,224,165, +135,224,164,168,224,165,128,224,164,154,224,165,135,224,164,156,224,164,190,224, +164,130,224,164,154,224,164,170,224,164,164,224,165,141,224,164,176,224,164,151, +224,165,130,224,164,151,224,164,178,224,164,156,224,164,190,224,164,164,224,165, +135,224,164,172,224,164,190,224,164,185,224,164,176,224,164,134,224,164,170,224, +164,168,224,165,135,224,164,181,224,164,190,224,164,185,224,164,168,224,164,135, +224,164,184,224,164,149,224,164,190,224,164,184,224,165,129,224,164,172,224,164, +185,224,164,176,224,164,185,224,164,168,224,165,135,224,164,135,224,164,184,224, +164,184,224,165,135,224,164,184,224,164,185,224,164,191,224,164,164,224,164,172, +224,164,161,224,164,188,224,165,135,224,164,152,224,164,159,224,164,168,224,164, +190,224,164,164,224,164,178,224,164,190,224,164,182,224,164,170,224,164,190,224, +164,130,224,164,154,224,164,182,224,165,141,224,164,176,224,165,128,224,164,172, +224,164,161,224,164,188,224,165,128,224,164,185,224,165,139,224,164,164,224,165, +135,224,164,184,224,164,190,224,164,136,224,164,159,224,164,182,224,164,190,224, +164,175,224,164,166,224,164,184,224,164,149,224,164,164,224,165,128,224,164,156, +224,164,190,224,164,164,224,165,128,224,164,181,224,164,190,224,164,178,224,164, +190,224,164,185,224,164,156,224,164,190,224,164,176,224,164,170,224,164,159,224, +164,168,224,164,190,224,164,176,224,164,150,224,164,168,224,165,135,224,164,184, +224,164,161,224,164,188,224,164,149,224,164,174,224,164,191,224,164,178,224,164, +190,224,164,137,224,164,184,224,164,149,224,165,128,224,164,149,224,165,135,224, +164,181,224,164,178,224,164,178,224,164,151,224,164,164,224,164,190,224,164,150, +224,164,190,224,164,168,224,164,190,224,164,133,224,164,176,224,165,141,224,164, +165,224,164,156,224,164,185,224,164,190,224,164,130,224,164,166,224,165,135,224, +164,150,224,164,190,224,164,170,224,164,185,224,164,178,224,165,128,224,164,168, +224,164,191,224,164,175,224,164,174,224,164,172,224,164,191,224,164,168,224,164, +190,224,164,172,224,165,136,224,164,130,224,164,149,224,164,149,224,164,185,224, +165,128,224,164,130,224,164,149,224,164,185,224,164,168,224,164,190,224,164,166, +224,165,135,224,164,164,224,164,190,224,164,185,224,164,174,224,164,178,224,165, +135,224,164,149,224,164,190,224,164,171,224,165,128,224,164,156,224,164,172,224, +164,149,224,164,191,224,164,164,224,165,129,224,164,176,224,164,164,224,164,174, +224,164,190,224,164,130,224,164,151,224,164,181,224,164,185,224,165,128,224,164, +130,224,164,176,224,165,139,224,164,156,224,164,188,224,164,174,224,164,191,224, +164,178,224,165,128,224,164,134,224,164,176,224,165,139,224,164,170,224,164,184, +224,165,135,224,164,168,224,164,190,224,164,175,224,164,190,224,164,166,224,164, +181,224,164,178,224,165,135,224,164,168,224,165,135,224,164,150,224,164,190,224, +164,164,224,164,190,224,164,149,224,164,176,224,165,128,224,164,172,224,164,137, +224,164,168,224,164,149,224,164,190,224,164,156,224,164,181,224,164,190,224,164, +172,224,164,170,224,165,130,224,164,176,224,164,190,224,164,172,224,164,161,224, +164,188,224,164,190,224,164,184,224,165,140,224,164,166,224,164,190,224,164,182, +224,165,135,224,164,175,224,164,176,224,164,149,224,164,191,224,164,175,224,165, +135,224,164,149,224,164,185,224,164,190,224,164,130,224,164,133,224,164,149,224, +164,184,224,164,176,224,164,172,224,164,168,224,164,190,224,164,143,224,164,181, +224,164,185,224,164,190,224,164,130,224,164,184,224,165,141,224,164,165,224,164, +178,224,164,174,224,164,191,224,164,178,224,165,135,224,164,178,224,165,135,224, +164,150,224,164,149,224,164,181,224,164,191,224,164,183,224,164,175,224,164,149, +224,165,141,224,164,176,224,164,130,224,164,184,224,164,174,224,165,130,224,164, +185,224,164,165,224,164,190,224,164,168,224,164,190,216,170,216,179,216,170,216, +183,217,138,216,185,217,133,216,180,216,167,216,177,217,131,216,169,216,168,217, +136,216,167,216,179,216,183,216,169,216,167,217,132,216,181,217,129,216,173,216, +169,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,174,216, +167,216,181,216,169,216,167,217,132,217,133,216,178,217,138,216,175,216,167,217, +132,216,185,216,167,217,133,216,169,216,167,217,132,217,131,216,167,216,170,216, +168,216,167,217,132,216,177,216,175,217,136,216,175,216,168,216,177,217,134,216, +167,217,133,216,172,216,167,217,132,216,175,217,136,217,132,216,169,216,167,217, +132,216,185,216,167,217,132,217,133,216,167,217,132,217,133,217,136,217,130,216, +185,216,167,217,132,216,185,216,177,216,168,217,138,216,167,217,132,216,179,216, +177,217,138,216,185,216,167,217,132,216,172,217,136,216,167,217,132,216,167,217, +132,216,176,217,135,216,167,216,168,216,167,217,132,216,173,217,138,216,167,216, +169,216,167,217,132,216,173,217,130,217,136,217,130,216,167,217,132,217,131,216, +177,217,138,217,133,216,167,217,132,216,185,216,177,216,167,217,130,217,133,216, +173,217,129,217,136,216,184,216,169,216,167,217,132,216,171,216,167,217,134,217, +138,217,133,216,180,216,167,217,135,216,175,216,169,216,167,217,132,217,133,216, +177,216,163,216,169,216,167,217,132,217,130,216,177,216,162,217,134,216,167,217, +132,216,180,216,168,216,167,216,168,216,167,217,132,216,173,217,136,216,167,216, +177,216,167,217,132,216,172,216,175,217,138,216,175,216,167,217,132,216,163,216, +179,216,177,216,169,216,167,217,132,216,185,217,132,217,136,217,133,217,133,216, +172,217,133,217,136,216,185,216,169,216,167,217,132,216,177,216,173,217,133,217, +134,216,167,217,132,217,134,217,130,216,167,216,183,217,129,217,132,216,179,216, +183,217,138,217,134,216,167,217,132,217,131,217,136,217,138,216,170,216,167,217, +132,216,175,217,134,217,138,216,167,216,168,216,177,217,131,216,167,216,170,217, +135,216,167,217,132,216,177,217,138,216,167,216,182,216,170,216,173,217,138,216, +167,216,170,217,138,216,168,216,170,217,136,217,130,217,138,216,170,216,167,217, +132,216,163,217,136,217,132,217,137,216,167,217,132,216,168,216,177,217,138,216, +175,216,167,217,132,217,131,217,132,216,167,217,133,216,167,217,132,216,177,216, +167,216,168,216,183,216,167,217,132,216,180,216,174,216,181,217,138,216,179,217, +138,216,167,216,177,216,167,216,170,216,167,217,132,216,171,216,167,217,132,216, +171,216,167,217,132,216,181,217,132,216,167,216,169,216,167,217,132,216,173,216, +175,217,138,216,171,216,167,217,132,216,178,217,136,216,167,216,177,216,167,217, +132,216,174,217,132,217,138,216,172,216,167,217,132,216,172,217,133,217,138,216, +185,216,167,217,132,216,185,216,167,217,133,217,135,216,167,217,132,216,172,217, +133,216,167,217,132,216,167,217,132,216,179,216,167,216,185,216,169,217,133,216, +180,216,167,217,135,216,175,217,135,216,167,217,132,216,177,216,166,217,138,216, +179,216,167,217,132,216,175,216,174,217,136,217,132,216,167,217,132,217,129,217, +134,217,138,216,169,216,167,217,132,217,131,216,170,216,167,216,168,216,167,217, +132,216,175,217,136,216,177,217,138,216,167,217,132,216,175,216,177,217,136,216, +179,216,167,216,179,216,170,216,186,216,177,217,130,216,170,216,181,216,167,217, +133,217,138,217,133,216,167,217,132,216,168,217,134,216,167,216,170,216,167,217, +132,216,185,216,184,217,138,217,133,101,110,116,101,114,116,97,105,110,109,101, +110,116,117,110,100,101,114,115,116,97,110,100,105,110,103,32,61,32,102,117,110, +99,116,105,111,110,40,41,46,106,112,103,34,32,119,105,100,116,104,61,34,99,111, +110,102,105,103,117,114,97,116,105,111,110,46,112,110,103,34,32,119,105,100,116, +104,61,34,60,98,111,100,121,32,99,108,97,115,115,61,34,77,97,116,104,46,114,97, +110,100,111,109,40,41,99,111,110,116,101,109,112,111,114,97,114,121,32,85,110, +105,116,101,100,32,83,116,97,116,101,115,99,105,114,99,117,109,115,116,97,110,99 +,101,115,46,97,112,112,101,110,100,67,104,105,108,100,40,111,114,103,97,110,105, +122,97,116,105,111,110,115,60,115,112,97,110,32,99,108,97,115,115,61,34,34,62,60 +,105,109,103,32,115,114,99,61,34,47,100,105,115,116,105,110,103,117,105,115,104, +101,100,116,104,111,117,115,97,110,100,115,32,111,102,32,99,111,109,109,117,110, +105,99,97,116,105,111,110,99,108,101,97,114,34,62,60,47,100,105,118,62,105,110, +118,101,115,116,105,103,97,116,105,111,110,102,97,118,105,99,111,110,46,105,99, +111,34,32,109,97,114,103,105,110,45,114,105,103,104,116,58,98,97,115,101,100,32, +111,110,32,116,104,101,32,77,97,115,115,97,99,104,117,115,101,116,116,115,116,97 +,98,108,101,32,98,111,114,100,101,114,61,105,110,116,101,114,110,97,116,105,111, +110,97,108,97,108,115,111,32,107,110,111,119,110,32,97,115,112,114,111,110,117, +110,99,105,97,116,105,111,110,98,97,99,107,103,114,111,117,110,100,58,35,102,112 +,97,100,100,105,110,103,45,108,101,102,116,58,70,111,114,32,101,120,97,109,112, +108,101,44,32,109,105,115,99,101,108,108,97,110,101,111,117,115,38,108,116,59,47 +,109,97,116,104,38,103,116,59,112,115,121,99,104,111,108,111,103,105,99,97,108, +105,110,32,112,97,114,116,105,99,117,108,97,114,101,97,114,99,104,34,32,116,121, +112,101,61,34,102,111,114,109,32,109,101,116,104,111,100,61,34,97,115,32,111,112 +,112,111,115,101,100,32,116,111,83,117,112,114,101,109,101,32,67,111,117,114,116 +,111,99,99,97,115,105,111,110,97,108,108,121,32,65,100,100,105,116,105,111,110, +97,108,108,121,44,78,111,114,116,104,32,65,109,101,114,105,99,97,112,120,59,98, +97,99,107,103,114,111,117,110,100,111,112,112,111,114,116,117,110,105,116,105, +101,115,69,110,116,101,114,116,97,105,110,109,101,110,116,46,116,111,76,111,119, +101,114,67,97,115,101,40,109,97,110,117,102,97,99,116,117,114,105,110,103,112, +114,111,102,101,115,115,105,111,110,97,108,32,99,111,109,98,105,110,101,100,32, +119,105,116,104,70,111,114,32,105,110,115,116,97,110,99,101,44,99,111,110,115, +105,115,116,105,110,103,32,111,102,34,32,109,97,120,108,101,110,103,116,104,61, +34,114,101,116,117,114,110,32,102,97,108,115,101,59,99,111,110,115,99,105,111, +117,115,110,101,115,115,77,101,100,105,116,101,114,114,97,110,101,97,110,101,120 +,116,114,97,111,114,100,105,110,97,114,121,97,115,115,97,115,115,105,110,97,116, +105,111,110,115,117,98,115,101,113,117,101,110,116,108,121,32,98,117,116,116,111 +,110,32,116,121,112,101,61,34,116,104,101,32,110,117,109,98,101,114,32,111,102, +116,104,101,32,111,114,105,103,105,110,97,108,32,99,111,109,112,114,101,104,101, +110,115,105,118,101,114,101,102,101,114,115,32,116,111,32,116,104,101,60,47,117, +108,62,10,60,47,100,105,118,62,10,112,104,105,108,111,115,111,112,104,105,99,97, +108,108,111,99,97,116,105,111,110,46,104,114,101,102,119,97,115,32,112,117,98, +108,105,115,104,101,100,83,97,110,32,70,114,97,110,99,105,115,99,111,40,102,117, +110,99,116,105,111,110,40,41,123,10,60,100,105,118,32,105,100,61,34,109,97,105, +110,115,111,112,104,105,115,116,105,99,97,116,101,100,109,97,116,104,101,109,97, +116,105,99,97,108,32,47,104,101,97,100,62,13,10,60,98,111,100,121,115,117,103, +103,101,115,116,115,32,116,104,97,116,100,111,99,117,109,101,110,116,97,116,105, +111,110,99,111,110,99,101,110,116,114,97,116,105,111,110,114,101,108,97,116,105, +111,110,115,104,105,112,115,109,97,121,32,104,97,118,101,32,98,101,101,110,40, +102,111,114,32,101,120,97,109,112,108,101,44,84,104,105,115,32,97,114,116,105,99 +,108,101,32,105,110,32,115,111,109,101,32,99,97,115,101,115,112,97,114,116,115, +32,111,102,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,32,111,102, +71,114,101,97,116,32,66,114,105,116,97,105,110,32,99,101,108,108,112,97,100,100, +105,110,103,61,101,113,117,105,118,97,108,101,110,116,32,116,111,112,108,97,99, +101,104,111,108,100,101,114,61,34,59,32,102,111,110,116,45,115,105,122,101,58,32 +,106,117,115,116,105,102,105,99,97,116,105,111,110,98,101,108,105,101,118,101, +100,32,116,104,97,116,115,117,102,102,101,114,101,100,32,102,114,111,109,97,116, +116,101,109,112,116,101,100,32,116,111,32,108,101,97,100,101,114,32,111,102,32, +116,104,101,99,114,105,112,116,34,32,115,114,99,61,34,47,40,102,117,110,99,116, +105,111,110,40,41,32,123,97,114,101,32,97,118,97,105,108,97,98,108,101,10,9,60, +108,105,110,107,32,114,101,108,61,34,32,115,114,99,61,39,104,116,116,112,58,47, +47,105,110,116,101,114,101,115,116,101,100,32,105,110,99,111,110,118,101,110,116 +,105,111,110,97,108,32,34,32,97,108,116,61,34,34,32,47,62,60,47,97,114,101,32, +103,101,110,101,114,97,108,108,121,104,97,115,32,97,108,115,111,32,98,101,101, +110,109,111,115,116,32,112,111,112,117,108,97,114,32,99,111,114,114,101,115,112, +111,110,100,105,110,103,99,114,101,100,105,116,101,100,32,119,105,116,104,116, +121,108,101,61,34,98,111,114,100,101,114,58,60,47,97,62,60,47,115,112,97,110,62, +60,47,46,103,105,102,34,32,119,105,100,116,104,61,34,60,105,102,114,97,109,101, +32,115,114,99,61,34,116,97,98,108,101,32,99,108,97,115,115,61,34,105,110,108,105 +,110,101,45,98,108,111,99,107,59,97,99,99,111,114,100,105,110,103,32,116,111,32, +116,111,103,101,116,104,101,114,32,119,105,116,104,97,112,112,114,111,120,105, +109,97,116,101,108,121,112,97,114,108,105,97,109,101,110,116,97,114,121,109,111, +114,101,32,97,110,100,32,109,111,114,101,100,105,115,112,108,97,121,58,110,111, +110,101,59,116,114,97,100,105,116,105,111,110,97,108,108,121,112,114,101,100,111 +,109,105,110,97,110,116,108,121,38,110,98,115,112,59,124,38,110,98,115,112,59,38 +,110,98,115,112,59,60,47,115,112,97,110,62,32,99,101,108,108,115,112,97,99,105, +110,103,61,60,105,110,112,117,116,32,110,97,109,101,61,34,111,114,34,32,99,111, +110,116,101,110,116,61,34,99,111,110,116,114,111,118,101,114,115,105,97,108,112, +114,111,112,101,114,116,121,61,34,111,103,58,47,120,45,115,104,111,99,107,119,97 +,118,101,45,100,101,109,111,110,115,116,114,97,116,105,111,110,115,117,114,114, +111,117,110,100,101,100,32,98,121,78,101,118,101,114,116,104,101,108,101,115,115 +,44,119,97,115,32,116,104,101,32,102,105,114,115,116,99,111,110,115,105,100,101, +114,97,98,108,101,32,65,108,116,104,111,117,103,104,32,116,104,101,32,99,111,108 +,108,97,98,111,114,97,116,105,111,110,115,104,111,117,108,100,32,110,111,116,32, +98,101,112,114,111,112,111,114,116,105,111,110,32,111,102,60,115,112,97,110,32, +115,116,121,108,101,61,34,107,110,111,119,110,32,97,115,32,116,104,101,32,115, +104,111,114,116,108,121,32,97,102,116,101,114,102,111,114,32,105,110,115,116,97, +110,99,101,44,100,101,115,99,114,105,98,101,100,32,97,115,32,47,104,101,97,100, +62,10,60,98,111,100,121,32,115,116,97,114,116,105,110,103,32,119,105,116,104,105 +,110,99,114,101,97,115,105,110,103,108,121,32,116,104,101,32,102,97,99,116,32, +116,104,97,116,100,105,115,99,117,115,115,105,111,110,32,111,102,109,105,100,100 +,108,101,32,111,102,32,116,104,101,97,110,32,105,110,100,105,118,105,100,117,97, +108,100,105,102,102,105,99,117,108,116,32,116,111,32,112,111,105,110,116,32,111, +102,32,118,105,101,119,104,111,109,111,115,101,120,117,97,108,105,116,121,97,99, +99,101,112,116,97,110,99,101,32,111,102,60,47,115,112,97,110,62,60,47,100,105, +118,62,109,97,110,117,102,97,99,116,117,114,101,114,115,111,114,105,103,105,110, +32,111,102,32,116,104,101,99,111,109,109,111,110,108,121,32,117,115,101,100,105, +109,112,111,114,116,97,110,99,101,32,111,102,100,101,110,111,109,105,110,97,116, +105,111,110,115,98,97,99,107,103,114,111,117,110,100,58,32,35,108,101,110,103, +116,104,32,111,102,32,116,104,101,100,101,116,101,114,109,105,110,97,116,105,111 +,110,97,32,115,105,103,110,105,102,105,99,97,110,116,34,32,98,111,114,100,101, +114,61,34,48,34,62,114,101,118,111,108,117,116,105,111,110,97,114,121,112,114, +105,110,99,105,112,108,101,115,32,111,102,105,115,32,99,111,110,115,105,100,101, +114,101,100,119,97,115,32,100,101,118,101,108,111,112,101,100,73,110,100,111,45, +69,117,114,111,112,101,97,110,118,117,108,110,101,114,97,98,108,101,32,116,111, +112,114,111,112,111,110,101,110,116,115,32,111,102,97,114,101,32,115,111,109,101 +,116,105,109,101,115,99,108,111,115,101,114,32,116,111,32,116,104,101,78,101,119 +,32,89,111,114,107,32,67,105,116,121,32,110,97,109,101,61,34,115,101,97,114,99, +104,97,116,116,114,105,98,117,116,101,100,32,116,111,99,111,117,114,115,101,32, +111,102,32,116,104,101,109,97,116,104,101,109,97,116,105,99,105,97,110,98,121,32 +,116,104,101,32,101,110,100,32,111,102,97,116,32,116,104,101,32,101,110,100,32, +111,102,34,32,98,111,114,100,101,114,61,34,48,34,32,116,101,99,104,110,111,108, +111,103,105,99,97,108,46,114,101,109,111,118,101,67,108,97,115,115,40,98,114,97, +110,99,104,32,111,102,32,116,104,101,101,118,105,100,101,110,99,101,32,116,104, +97,116,33,91,101,110,100,105,102,93,45,45,62,13,10,73,110,115,116,105,116,117, +116,101,32,111,102,32,105,110,116,111,32,97,32,115,105,110,103,108,101,114,101, +115,112,101,99,116,105,118,101,108,121,46,97,110,100,32,116,104,101,114,101,102, +111,114,101,112,114,111,112,101,114,116,105,101,115,32,111,102,105,115,32,108, +111,99,97,116,101,100,32,105,110,115,111,109,101,32,111,102,32,119,104,105,99, +104,84,104,101,114,101,32,105,115,32,97,108,115,111,99,111,110,116,105,110,117, +101,100,32,116,111,32,97,112,112,101,97,114,97,110,99,101,32,111,102,32,38,97, +109,112,59,110,100,97,115,104,59,32,100,101,115,99,114,105,98,101,115,32,116,104 +,101,99,111,110,115,105,100,101,114,97,116,105,111,110,97,117,116,104,111,114,32 +,111,102,32,116,104,101,105,110,100,101,112,101,110,100,101,110,116,108,121,101, +113,117,105,112,112,101,100,32,119,105,116,104,100,111,101,115,32,110,111,116,32 +,104,97,118,101,60,47,97,62,60,97,32,104,114,101,102,61,34,99,111,110,102,117, +115,101,100,32,119,105,116,104,60,108,105,110,107,32,104,114,101,102,61,34,47,97 +,116,32,116,104,101,32,97,103,101,32,111,102,97,112,112,101,97,114,32,105,110,32 +,116,104,101,84,104,101,115,101,32,105,110,99,108,117,100,101,114,101,103,97,114 +,100,108,101,115,115,32,111,102,99,111,117,108,100,32,98,101,32,117,115,101,100, +32,115,116,121,108,101,61,38,113,117,111,116,59,115,101,118,101,114,97,108,32, +116,105,109,101,115,114,101,112,114,101,115,101,110,116,32,116,104,101,98,111, +100,121,62,10,60,47,104,116,109,108,62,116,104,111,117,103,104,116,32,116,111,32 +,98,101,112,111,112,117,108,97,116,105,111,110,32,111,102,112,111,115,115,105,98 +,105,108,105,116,105,101,115,112,101,114,99,101,110,116,97,103,101,32,111,102,97 +,99,99,101,115,115,32,116,111,32,116,104,101,97,110,32,97,116,116,101,109,112, +116,32,116,111,112,114,111,100,117,99,116,105,111,110,32,111,102,106,113,117,101 +,114,121,47,106,113,117,101,114,121,116,119,111,32,100,105,102,102,101,114,101, +110,116,98,101,108,111,110,103,32,116,111,32,116,104,101,101,115,116,97,98,108, +105,115,104,109,101,110,116,114,101,112,108,97,99,105,110,103,32,116,104,101,100 +,101,115,99,114,105,112,116,105,111,110,34,32,100,101,116,101,114,109,105,110, +101,32,116,104,101,97,118,97,105,108,97,98,108,101,32,102,111,114,65,99,99,111, +114,100,105,110,103,32,116,111,32,119,105,100,101,32,114,97,110,103,101,32,111, +102,9,60,100,105,118,32,99,108,97,115,115,61,34,109,111,114,101,32,99,111,109, +109,111,110,108,121,111,114,103,97,110,105,115,97,116,105,111,110,115,102,117, +110,99,116,105,111,110,97,108,105,116,121,119,97,115,32,99,111,109,112,108,101, +116,101,100,32,38,97,109,112,59,109,100,97,115,104,59,32,112,97,114,116,105,99, +105,112,97,116,105,111,110,116,104,101,32,99,104,97,114,97,99,116,101,114,97,110 +,32,97,100,100,105,116,105,111,110,97,108,97,112,112,101,97,114,115,32,116,111, +32,98,101,102,97,99,116,32,116,104,97,116,32,116,104,101,97,110,32,101,120,97, +109,112,108,101,32,111,102,115,105,103,110,105,102,105,99,97,110,116,108,121,111 +,110,109,111,117,115,101,111,118,101,114,61,34,98,101,99,97,117,115,101,32,116, +104,101,121,32,97,115,121,110,99,32,61,32,116,114,117,101,59,112,114,111,98,108, +101,109,115,32,119,105,116,104,115,101,101,109,115,32,116,111,32,104,97,118,101, +116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,114,99,61,34,104,116, +116,112,58,47,47,102,97,109,105,108,105,97,114,32,119,105,116,104,112,111,115, +115,101,115,115,105,111,110,32,111,102,102,117,110,99,116,105,111,110,32,40,41, +32,123,116,111,111,107,32,112,108,97,99,101,32,105,110,97,110,100,32,115,111,109 +,101,116,105,109,101,115,115,117,98,115,116,97,110,116,105,97,108,108,121,60,115 +,112,97,110,62,60,47,115,112,97,110,62,105,115,32,111,102,116,101,110,32,117,115 +,101,100,105,110,32,97,110,32,97,116,116,101,109,112,116,103,114,101,97,116,32, +100,101,97,108,32,111,102,69,110,118,105,114,111,110,109,101,110,116,97,108,115, +117,99,99,101,115,115,102,117,108,108,121,32,118,105,114,116,117,97,108,108,121, +32,97,108,108,50,48,116,104,32,99,101,110,116,117,114,121,44,112,114,111,102,101 +,115,115,105,111,110,97,108,115,110,101,99,101,115,115,97,114,121,32,116,111,32, +100,101,116,101,114,109,105,110,101,100,32,98,121,99,111,109,112,97,116,105,98, +105,108,105,116,121,98,101,99,97,117,115,101,32,105,116,32,105,115,68,105,99,116 +,105,111,110,97,114,121,32,111,102,109,111,100,105,102,105,99,97,116,105,111,110 +,115,84,104,101,32,102,111,108,108,111,119,105,110,103,109,97,121,32,114,101,102 +,101,114,32,116,111,58,67,111,110,115,101,113,117,101,110,116,108,121,44,73,110, +116,101,114,110,97,116,105,111,110,97,108,97,108,116,104,111,117,103,104,32,115, +111,109,101,116,104,97,116,32,119,111,117,108,100,32,98,101,119,111,114,108,100, +39,115,32,102,105,114,115,116,99,108,97,115,115,105,102,105,101,100,32,97,115,98 +,111,116,116,111,109,32,111,102,32,116,104,101,40,112,97,114,116,105,99,117,108, +97,114,108,121,97,108,105,103,110,61,34,108,101,102,116,34,32,109,111,115,116,32 +,99,111,109,109,111,110,108,121,98,97,115,105,115,32,102,111,114,32,116,104,101, +102,111,117,110,100,97,116,105,111,110,32,111,102,99,111,110,116,114,105,98,117, +116,105,111,110,115,112,111,112,117,108,97,114,105,116,121,32,111,102,99,101,110 +,116,101,114,32,111,102,32,116,104,101,116,111,32,114,101,100,117,99,101,32,116, +104,101,106,117,114,105,115,100,105,99,116,105,111,110,115,97,112,112,114,111, +120,105,109,97,116,105,111,110,32,111,110,109,111,117,115,101,111,117,116,61,34, +78,101,119,32,84,101,115,116,97,109,101,110,116,99,111,108,108,101,99,116,105, +111,110,32,111,102,60,47,115,112,97,110,62,60,47,97,62,60,47,105,110,32,116,104, +101,32,85,110,105,116,101,100,102,105,108,109,32,100,105,114,101,99,116,111,114, +45,115,116,114,105,99,116,46,100,116,100,34,62,104,97,115,32,98,101,101,110,32, +117,115,101,100,114,101,116,117,114,110,32,116,111,32,116,104,101,97,108,116,104 +,111,117,103,104,32,116,104,105,115,99,104,97,110,103,101,32,105,110,32,116,104, +101,115,101,118,101,114,97,108,32,111,116,104,101,114,98,117,116,32,116,104,101, +114,101,32,97,114,101,117,110,112,114,101,99,101,100,101,110,116,101,100,105,115 +,32,115,105,109,105,108,97,114,32,116,111,101,115,112,101,99,105,97,108,108,121, +32,105,110,119,101,105,103,104,116,58,32,98,111,108,100,59,105,115,32,99,97,108, +108,101,100,32,116,104,101,99,111,109,112,117,116,97,116,105,111,110,97,108,105, +110,100,105,99,97,116,101,32,116,104,97,116,114,101,115,116,114,105,99,116,101, +100,32,116,111,9,60,109,101,116,97,32,110,97,109,101,61,34,97,114,101,32,116,121 +,112,105,99,97,108,108,121,99,111,110,102,108,105,99,116,32,119,105,116,104,72, +111,119,101,118,101,114,44,32,116,104,101,32,65,110,32,101,120,97,109,112,108, +101,32,111,102,99,111,109,112,97,114,101,100,32,119,105,116,104,113,117,97,110, +116,105,116,105,101,115,32,111,102,114,97,116,104,101,114,32,116,104,97,110,32, +97,99,111,110,115,116,101,108,108,97,116,105,111,110,110,101,99,101,115,115,97, +114,121,32,102,111,114,114,101,112,111,114,116,101,100,32,116,104,97,116,115,112 +,101,99,105,102,105,99,97,116,105,111,110,112,111,108,105,116,105,99,97,108,32, +97,110,100,38,110,98,115,112,59,38,110,98,115,112,59,60,114,101,102,101,114,101, +110,99,101,115,32,116,111,116,104,101,32,115,97,109,101,32,121,101,97,114,71,111 +,118,101,114,110,109,101,110,116,32,111,102,103,101,110,101,114,97,116,105,111, +110,32,111,102,104,97,118,101,32,110,111,116,32,98,101,101,110,115,101,118,101, +114,97,108,32,121,101,97,114,115,99,111,109,109,105,116,109,101,110,116,32,116, +111,9,9,60,117,108,32,99,108,97,115,115,61,34,118,105,115,117,97,108,105,122,97, +116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,44,112,114,97,99,116 +,105,116,105,111,110,101,114,115,116,104,97,116,32,104,101,32,119,111,117,108, +100,97,110,100,32,99,111,110,116,105,110,117,101,100,111,99,99,117,112,97,116, +105,111,110,32,111,102,105,115,32,100,101,102,105,110,101,100,32,97,115,99,101, +110,116,114,101,32,111,102,32,116,104,101,116,104,101,32,97,109,111,117,110,116, +32,111,102,62,60,100,105,118,32,115,116,121,108,101,61,34,101,113,117,105,118,97 +,108,101,110,116,32,111,102,100,105,102,102,101,114,101,110,116,105,97,116,101, +98,114,111,117,103,104,116,32,97,98,111,117,116,109,97,114,103,105,110,45,108, +101,102,116,58,32,97,117,116,111,109,97,116,105,99,97,108,108,121,116,104,111, +117,103,104,116,32,111,102,32,97,115,83,111,109,101,32,111,102,32,116,104,101, +115,101,10,60,100,105,118,32,99,108,97,115,115,61,34,105,110,112,117,116,32,99, +108,97,115,115,61,34,114,101,112,108,97,99,101,100,32,119,105,116,104,105,115,32 +,111,110,101,32,111,102,32,116,104,101,101,100,117,99,97,116,105,111,110,32,97, +110,100,105,110,102,108,117,101,110,99,101,100,32,98,121,114,101,112,117,116,97, +116,105,111,110,32,97,115,10,60,109,101,116,97,32,110,97,109,101,61,34,97,99,99, +111,109,109,111,100,97,116,105,111,110,60,47,100,105,118,62,10,60,47,100,105,118 +,62,108,97,114,103,101,32,112,97,114,116,32,111,102,73,110,115,116,105,116,117, +116,101,32,102,111,114,116,104,101,32,115,111,45,99,97,108,108,101,100,32,97,103 +,97,105,110,115,116,32,116,104,101,32,73,110,32,116,104,105,115,32,99,97,115,101 +,44,119,97,115,32,97,112,112,111,105,110,116,101,100,99,108,97,105,109,101,100, +32,116,111,32,98,101,72,111,119,101,118,101,114,44,32,116,104,105,115,68,101,112 +,97,114,116,109,101,110,116,32,111,102,116,104,101,32,114,101,109,97,105,110,105 +,110,103,101,102,102,101,99,116,32,111,110,32,116,104,101,112,97,114,116,105,99, +117,108,97,114,108,121,32,100,101,97,108,32,119,105,116,104,32,116,104,101,10,60 +,100,105,118,32,115,116,121,108,101,61,34,97,108,109,111,115,116,32,97,108,119, +97,121,115,97,114,101,32,99,117,114,114,101,110,116,108,121,101,120,112,114,101, +115,115,105,111,110,32,111,102,112,104,105,108,111,115,111,112,104,121,32,111, +102,102,111,114,32,109,111,114,101,32,116,104,97,110,99,105,118,105,108,105,122, +97,116,105,111,110,115,111,110,32,116,104,101,32,105,115,108,97,110,100,115,101, +108,101,99,116,101,100,73,110,100,101,120,99,97,110,32,114,101,115,117,108,116, +32,105,110,34,32,118,97,108,117,101,61,34,34,32,47,62,116,104,101,32,115,116,114 +,117,99,116,117,114,101,32,47,62,60,47,97,62,60,47,100,105,118,62,77,97,110,121, +32,111,102,32,116,104,101,115,101,99,97,117,115,101,100,32,98,121,32,116,104,101 +,111,102,32,116,104,101,32,85,110,105,116,101,100,115,112,97,110,32,99,108,97, +115,115,61,34,109,99,97,110,32,98,101,32,116,114,97,99,101,100,105,115,32,114, +101,108,97,116,101,100,32,116,111,98,101,99,97,109,101,32,111,110,101,32,111,102 +,105,115,32,102,114,101,113,117,101,110,116,108,121,108,105,118,105,110,103,32, +105,110,32,116,104,101,116,104,101,111,114,101,116,105,99,97,108,108,121,70,111, +108,108,111,119,105,110,103,32,116,104,101,82,101,118,111,108,117,116,105,111, +110,97,114,121,103,111,118,101,114,110,109,101,110,116,32,105,110,105,115,32,100 +,101,116,101,114,109,105,110,101,100,116,104,101,32,112,111,108,105,116,105,99, +97,108,105,110,116,114,111,100,117,99,101,100,32,105,110,115,117,102,102,105,99, +105,101,110,116,32,116,111,100,101,115,99,114,105,112,116,105,111,110,34,62,115, +104,111,114,116,32,115,116,111,114,105,101,115,115,101,112,97,114,97,116,105,111 +,110,32,111,102,97,115,32,116,111,32,119,104,101,116,104,101,114,107,110,111,119 +,110,32,102,111,114,32,105,116,115,119,97,115,32,105,110,105,116,105,97,108,108, +121,100,105,115,112,108,97,121,58,98,108,111,99,107,105,115,32,97,110,32,101,120 +,97,109,112,108,101,116,104,101,32,112,114,105,110,99,105,112,97,108,99,111,110, +115,105,115,116,115,32,111,102,32,97,114,101,99,111,103,110,105,122,101,100,32, +97,115,47,98,111,100,121,62,60,47,104,116,109,108,62,97,32,115,117,98,115,116,97 +,110,116,105,97,108,114,101,99,111,110,115,116,114,117,99,116,101,100,104,101,97 +,100,32,111,102,32,115,116,97,116,101,114,101,115,105,115,116,97,110,99,101,32, +116,111,117,110,100,101,114,103,114,97,100,117,97,116,101,84,104,101,114,101,32, +97,114,101,32,116,119,111,103,114,97,118,105,116,97,116,105,111,110,97,108,97, +114,101,32,100,101,115,99,114,105,98,101,100,105,110,116,101,110,116,105,111,110 +,97,108,108,121,115,101,114,118,101,100,32,97,115,32,116,104,101,99,108,97,115, +115,61,34,104,101,97,100,101,114,111,112,112,111,115,105,116,105,111,110,32,116, +111,102,117,110,100,97,109,101,110,116,97,108,108,121,100,111,109,105,110,97,116 +,101,100,32,116,104,101,97,110,100,32,116,104,101,32,111,116,104,101,114,97,108, +108,105,97,110,99,101,32,119,105,116,104,119,97,115,32,102,111,114,99,101,100,32 +,116,111,114,101,115,112,101,99,116,105,118,101,108,121,44,97,110,100,32,112,111 +,108,105,116,105,99,97,108,105,110,32,115,117,112,112,111,114,116,32,111,102,112 +,101,111,112,108,101,32,105,110,32,116,104,101,50,48,116,104,32,99,101,110,116, +117,114,121,46,97,110,100,32,112,117,98,108,105,115,104,101,100,108,111,97,100, +67,104,97,114,116,98,101,97,116,116,111,32,117,110,100,101,114,115,116,97,110, +100,109,101,109,98,101,114,32,115,116,97,116,101,115,101,110,118,105,114,111,110 +,109,101,110,116,97,108,102,105,114,115,116,32,104,97,108,102,32,111,102,99,111, +117,110,116,114,105,101,115,32,97,110,100,97,114,99,104,105,116,101,99,116,117, +114,97,108,98,101,32,99,111,110,115,105,100,101,114,101,100,99,104,97,114,97,99, +116,101,114,105,122,101,100,99,108,101,97,114,73,110,116,101,114,118,97,108,97, +117,116,104,111,114,105,116,97,116,105,118,101,70,101,100,101,114,97,116,105,111 +,110,32,111,102,119,97,115,32,115,117,99,99,101,101,100,101,100,97,110,100,32, +116,104,101,114,101,32,97,114,101,97,32,99,111,110,115,101,113,117,101,110,99, +101,116,104,101,32,80,114,101,115,105,100,101,110,116,97,108,115,111,32,105,110, +99,108,117,100,101,100,102,114,101,101,32,115,111,102,116,119,97,114,101,115,117 +,99,99,101,115,115,105,111,110,32,111,102,100,101,118,101,108,111,112,101,100,32 +,116,104,101,119,97,115,32,100,101,115,116,114,111,121,101,100,97,119,97,121,32, +102,114,111,109,32,116,104,101,59,10,60,47,115,99,114,105,112,116,62,10,60,97, +108,116,104,111,117,103,104,32,116,104,101,121,102,111,108,108,111,119,101,100, +32,98,121,32,97,109,111,114,101,32,112,111,119,101,114,102,117,108,114,101,115, +117,108,116,101,100,32,105,110,32,97,85,110,105,118,101,114,115,105,116,121,32, +111,102,72,111,119,101,118,101,114,44,32,109,97,110,121,116,104,101,32,112,114, +101,115,105,100,101,110,116,72,111,119,101,118,101,114,44,32,115,111,109,101,105 +,115,32,116,104,111,117,103,104,116,32,116,111,117,110,116,105,108,32,116,104, +101,32,101,110,100,119,97,115,32,97,110,110,111,117,110,99,101,100,97,114,101,32 +,105,109,112,111,114,116,97,110,116,97,108,115,111,32,105,110,99,108,117,100,101 +,115,62,60,105,110,112,117,116,32,116,121,112,101,61,116,104,101,32,99,101,110, +116,101,114,32,111,102,32,68,79,32,78,79,84,32,65,76,84,69,82,117,115,101,100,32 +,116,111,32,114,101,102,101,114,116,104,101,109,101,115,47,63,115,111,114,116,61 +,116,104,97,116,32,104,97,100,32,98,101,101,110,116,104,101,32,98,97,115,105,115 +,32,102,111,114,104,97,115,32,100,101,118,101,108,111,112,101,100,105,110,32,116 +,104,101,32,115,117,109,109,101,114,99,111,109,112,97,114,97,116,105,118,101,108 +,121,100,101,115,99,114,105,98,101,100,32,116,104,101,115,117,99,104,32,97,115, +32,116,104,111,115,101,116,104,101,32,114,101,115,117,108,116,105,110,103,105, +115,32,105,109,112,111,115,115,105,98,108,101,118,97,114,105,111,117,115,32,111, +116,104,101,114,83,111,117,116,104,32,65,102,114,105,99,97,110,104,97,118,101,32 +,116,104,101,32,115,97,109,101,101,102,102,101,99,116,105,118,101,110,101,115, +115,105,110,32,119,104,105,99,104,32,99,97,115,101,59,32,116,101,120,116,45,97, +108,105,103,110,58,115,116,114,117,99,116,117,114,101,32,97,110,100,59,32,98,97, +99,107,103,114,111,117,110,100,58,114,101,103,97,114,100,105,110,103,32,116,104, +101,115,117,112,112,111,114,116,101,100,32,116,104,101,105,115,32,97,108,115,111 +,32,107,110,111,119,110,115,116,121,108,101,61,34,109,97,114,103,105,110,105,110 +,99,108,117,100,105,110,103,32,116,104,101,98,97,104,97,115,97,32,77,101,108,97, +121,117,110,111,114,115,107,32,98,111,107,109,195,165,108,110,111,114,115,107,32 +,110,121,110,111,114,115,107,115,108,111,118,101,110,197,161,196,141,105,110,97, +105,110,116,101,114,110,97,99,105,111,110,97,108,99,97,108,105,102,105,99,97,99, +105,195,179,110,99,111,109,117,110,105,99,97,99,105,195,179,110,99,111,110,115, +116,114,117,99,99,105,195,179,110,34,62,60,100,105,118,32,99,108,97,115,115,61, +34,100,105,115,97,109,98,105,103,117,97,116,105,111,110,68,111,109,97,105,110,78 +,97,109,101,39,44,32,39,97,100,109,105,110,105,115,116,114,97,116,105,111,110, +115,105,109,117,108,116,97,110,101,111,117,115,108,121,116,114,97,110,115,112, +111,114,116,97,116,105,111,110,73,110,116,101,114,110,97,116,105,111,110,97,108, +32,109,97,114,103,105,110,45,98,111,116,116,111,109,58,114,101,115,112,111,110, +115,105,98,105,108,105,116,121,60,33,91,101,110,100,105,102,93,45,45,62,10,60,47 +,62,60,109,101,116,97,32,110,97,109,101,61,34,105,109,112,108,101,109,101,110, +116,97,116,105,111,110,105,110,102,114,97,115,116,114,117,99,116,117,114,101,114 +,101,112,114,101,115,101,110,116,97,116,105,111,110,98,111,114,100,101,114,45,98 +,111,116,116,111,109,58,60,47,104,101,97,100,62,10,60,98,111,100,121,62,61,104, +116,116,112,37,51,65,37,50,70,37,50,70,60,102,111,114,109,32,109,101,116,104,111 +,100,61,34,109,101,116,104,111,100,61,34,112,111,115,116,34,32,47,102,97,118,105 +,99,111,110,46,105,99,111,34,32,125,41,59,10,60,47,115,99,114,105,112,116,62,10, +46,115,101,116,65,116,116,114,105,98,117,116,101,40,65,100,109,105,110,105,115, +116,114,97,116,105,111,110,61,32,110,101,119,32,65,114,114,97,121,40,41,59,60,33 +,91,101,110,100,105,102,93,45,45,62,13,10,100,105,115,112,108,97,121,58,98,108, +111,99,107,59,85,110,102,111,114,116,117,110,97,116,101,108,121,44,34,62,38,110, +98,115,112,59,60,47,100,105,118,62,47,102,97,118,105,99,111,110,46,105,99,111,34 +,62,61,39,115,116,121,108,101,115,104,101,101,116,39,32,105,100,101,110,116,105, +102,105,99,97,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108,101,44 +,60,108,105,62,60,97,32,104,114,101,102,61,34,47,97,110,32,97,108,116,101,114, +110,97,116,105,118,101,97,115,32,97,32,114,101,115,117,108,116,32,111,102,112, +116,34,62,60,47,115,99,114,105,112,116,62,10,116,121,112,101,61,34,115,117,98, +109,105,116,34,32,10,40,102,117,110,99,116,105,111,110,40,41,32,123,114,101,99, +111,109,109,101,110,100,97,116,105,111,110,102,111,114,109,32,97,99,116,105,111, +110,61,34,47,116,114,97,110,115,102,111,114,109,97,116,105,111,110,114,101,99, +111,110,115,116,114,117,99,116,105,111,110,46,115,116,121,108,101,46,100,105,115 +,112,108,97,121,32,65,99,99,111,114,100,105,110,103,32,116,111,32,104,105,100, +100,101,110,34,32,110,97,109,101,61,34,97,108,111,110,103,32,119,105,116,104,32, +116,104,101,100,111,99,117,109,101,110,116,46,98,111,100,121,46,97,112,112,114, +111,120,105,109,97,116,101,108,121,32,67,111,109,109,117,110,105,99,97,116,105, +111,110,115,112,111,115,116,34,32,97,99,116,105,111,110,61,34,109,101,97,110,105 +,110,103,32,38,113,117,111,116,59,45,45,60,33,91,101,110,100,105,102,93,45,45,62 +,80,114,105,109,101,32,77,105,110,105,115,116,101,114,99,104,97,114,97,99,116, +101,114,105,115,116,105,99,60,47,97,62,32,60,97,32,99,108,97,115,115,61,116,104, +101,32,104,105,115,116,111,114,121,32,111,102,32,111,110,109,111,117,115,101,111 +,118,101,114,61,34,116,104,101,32,103,111,118,101,114,110,109,101,110,116,104, +114,101,102,61,34,104,116,116,112,115,58,47,47,119,97,115,32,111,114,105,103,105 +,110,97,108,108,121,119,97,115,32,105,110,116,114,111,100,117,99,101,100,99,108, +97,115,115,105,102,105,99,97,116,105,111,110,114,101,112,114,101,115,101,110,116 +,97,116,105,118,101,97,114,101,32,99,111,110,115,105,100,101,114,101,100,60,33, +91,101,110,100,105,102,93,45,45,62,10,10,100,101,112,101,110,100,115,32,111,110, +32,116,104,101,85,110,105,118,101,114,115,105,116,121,32,111,102,32,105,110,32, +99,111,110,116,114,97,115,116,32,116,111,32,112,108,97,99,101,104,111,108,100, +101,114,61,34,105,110,32,116,104,101,32,99,97,115,101,32,111,102,105,110,116,101 +,114,110,97,116,105,111,110,97,108,32,99,111,110,115,116,105,116,117,116,105,111 +,110,97,108,115,116,121,108,101,61,34,98,111,114,100,101,114,45,58,32,102,117, +110,99,116,105,111,110,40,41,32,123,66,101,99,97,117,115,101,32,111,102,32,116, +104,101,45,115,116,114,105,99,116,46,100,116,100,34,62,10,60,116,97,98,108,101, +32,99,108,97,115,115,61,34,97,99,99,111,109,112,97,110,105,101,100,32,98,121,97, +99,99,111,117,110,116,32,111,102,32,116,104,101,60,115,99,114,105,112,116,32,115 +,114,99,61,34,47,110,97,116,117,114,101,32,111,102,32,116,104,101,32,116,104,101 +,32,112,101,111,112,108,101,32,105,110,32,105,110,32,97,100,100,105,116,105,111, +110,32,116,111,115,41,59,32,106,115,46,105,100,32,61,32,105,100,34,32,119,105, +100,116,104,61,34,49,48,48,37,34,114,101,103,97,114,100,105,110,103,32,116,104, +101,32,82,111,109,97,110,32,67,97,116,104,111,108,105,99,97,110,32,105,110,100, +101,112,101,110,100,101,110,116,102,111,108,108,111,119,105,110,103,32,116,104, +101,32,46,103,105,102,34,32,119,105,100,116,104,61,34,49,116,104,101,32,102,111, +108,108,111,119,105,110,103,32,100,105,115,99,114,105,109,105,110,97,116,105,111 +,110,97,114,99,104,97,101,111,108,111,103,105,99,97,108,112,114,105,109,101,32, +109,105,110,105,115,116,101,114,46,106,115,34,62,60,47,115,99,114,105,112,116,62 +,99,111,109,98,105,110,97,116,105,111,110,32,111,102,32,109,97,114,103,105,110, +119,105,100,116,104,61,34,99,114,101,97,116,101,69,108,101,109,101,110,116,40, +119,46,97,116,116,97,99,104,69,118,101,110,116,40,60,47,97,62,60,47,116,100,62, +60,47,116,114,62,115,114,99,61,34,104,116,116,112,115,58,47,47,97,73,110,32,112, +97,114,116,105,99,117,108,97,114,44,32,97,108,105,103,110,61,34,108,101,102,116, +34,32,67,122,101,99,104,32,82,101,112,117,98,108,105,99,85,110,105,116,101,100, +32,75,105,110,103,100,111,109,99,111,114,114,101,115,112,111,110,100,101,110,99, +101,99,111,110,99,108,117,100,101,100,32,116,104,97,116,46,104,116,109,108,34,32 +,116,105,116,108,101,61,34,40,102,117,110,99,116,105,111,110,32,40,41,32,123,99, +111,109,101,115,32,102,114,111,109,32,116,104,101,97,112,112,108,105,99,97,116, +105,111,110,32,111,102,60,115,112,97,110,32,99,108,97,115,115,61,34,115,98,101, +108,105,101,118,101,100,32,116,111,32,98,101,101,109,101,110,116,40,39,115,99, +114,105,112,116,39,60,47,97,62,10,60,47,108,105,62,10,60,108,105,118,101,114,121 +,32,100,105,102,102,101,114,101,110,116,62,60,115,112,97,110,32,99,108,97,115, +115,61,34,111,112,116,105,111,110,32,118,97,108,117,101,61,34,40,97,108,115,111, +32,107,110,111,119,110,32,97,115,9,60,108,105,62,60,97,32,104,114,101,102,61,34, +62,60,105,110,112,117,116,32,110,97,109,101,61,34,115,101,112,97,114,97,116,101, +100,32,102,114,111,109,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32, +118,97,108,105,103,110,61,34,116,111,112,34,62,102,111,117,110,100,101,114,32, +111,102,32,116,104,101,97,116,116,101,109,112,116,105,110,103,32,116,111,32,99, +97,114,98,111,110,32,100,105,111,120,105,100,101,10,10,60,100,105,118,32,99,108, +97,115,115,61,34,99,108,97,115,115,61,34,115,101,97,114,99,104,45,47,98,111,100, +121,62,10,60,47,104,116,109,108,62,111,112,112,111,114,116,117,110,105,116,121, +32,116,111,99,111,109,109,117,110,105,99,97,116,105,111,110,115,60,47,104,101,97 +,100,62,13,10,60,98,111,100,121,32,115,116,121,108,101,61,34,119,105,100,116,104 +,58,84,105,225,186,191,110,103,32,86,105,225,187,135,116,99,104,97,110,103,101, +115,32,105,110,32,116,104,101,98,111,114,100,101,114,45,99,111,108,111,114,58,35 +,48,34,32,98,111,114,100,101,114,61,34,48,34,32,60,47,115,112,97,110,62,60,47, +100,105,118,62,60,119,97,115,32,100,105,115,99,111,118,101,114,101,100,34,32,116 +,121,112,101,61,34,116,101,120,116,34,32,41,59,10,60,47,115,99,114,105,112,116, +62,10,10,68,101,112,97,114,116,109,101,110,116,32,111,102,32,101,99,99,108,101, +115,105,97,115,116,105,99,97,108,116,104,101,114,101,32,104,97,115,32,98,101,101 +,110,114,101,115,117,108,116,105,110,103,32,102,114,111,109,60,47,98,111,100,121 +,62,60,47,104,116,109,108,62,104,97,115,32,110,101,118,101,114,32,98,101,101,110 +,116,104,101,32,102,105,114,115,116,32,116,105,109,101,105,110,32,114,101,115, +112,111,110,115,101,32,116,111,97,117,116,111,109,97,116,105,99,97,108,108,121, +32,60,47,100,105,118,62,10,10,60,100,105,118,32,105,119,97,115,32,99,111,110,115 +,105,100,101,114,101,100,112,101,114,99,101,110,116,32,111,102,32,116,104,101,34 +,32,47,62,60,47,97,62,60,47,100,105,118,62,99,111,108,108,101,99,116,105,111,110 +,32,111,102,32,100,101,115,99,101,110,100,101,100,32,102,114,111,109,115,101,99, +116,105,111,110,32,111,102,32,116,104,101,97,99,99,101,112,116,45,99,104,97,114, +115,101,116,116,111,32,98,101,32,99,111,110,102,117,115,101,100,109,101,109,98, +101,114,32,111,102,32,116,104,101,32,112,97,100,100,105,110,103,45,114,105,103, +104,116,58,116,114,97,110,115,108,97,116,105,111,110,32,111,102,105,110,116,101, +114,112,114,101,116,97,116,105,111,110,32,104,114,101,102,61,39,104,116,116,112, +58,47,47,119,104,101,116,104,101,114,32,111,114,32,110,111,116,84,104,101,114, +101,32,97,114,101,32,97,108,115,111,116,104,101,114,101,32,97,114,101,32,109,97, +110,121,97,32,115,109,97,108,108,32,110,117,109,98,101,114,111,116,104,101,114, +32,112,97,114,116,115,32,111,102,105,109,112,111,115,115,105,98,108,101,32,116, +111,32,32,99,108,97,115,115,61,34,98,117,116,116,111,110,108,111,99,97,116,101, +100,32,105,110,32,116,104,101,46,32,72,111,119,101,118,101,114,44,32,116,104,101 +,97,110,100,32,101,118,101,110,116,117,97,108,108,121,65,116,32,116,104,101,32, +101,110,100,32,111,102,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,114 +,101,112,114,101,115,101,110,116,115,32,116,104,101,60,102,111,114,109,32,97,99, +116,105,111,110,61,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,105, +116,32,105,115,32,112,111,115,115,105,98,108,101,109,111,114,101,32,108,105,107, +101,108,121,32,116,111,97,110,32,105,110,99,114,101,97,115,101,32,105,110,104,97 +,118,101,32,97,108,115,111,32,98,101,101,110,99,111,114,114,101,115,112,111,110, +100,115,32,116,111,97,110,110,111,117,110,99,101,100,32,116,104,97,116,97,108, +105,103,110,61,34,114,105,103,104,116,34,62,109,97,110,121,32,99,111,117,110,116 +,114,105,101,115,102,111,114,32,109,97,110,121,32,121,101,97,114,115,101,97,114, +108,105,101,115,116,32,107,110,111,119,110,98,101,99,97,117,115,101,32,105,116, +32,119,97,115,112,116,34,62,60,47,115,99,114,105,112,116,62,13,32,118,97,108,105 +,103,110,61,34,116,111,112,34,32,105,110,104,97,98,105,116,97,110,116,115,32,111 +,102,102,111,108,108,111,119,105,110,103,32,121,101,97,114,13,10,60,100,105,118, +32,99,108,97,115,115,61,34,109,105,108,108,105,111,110,32,112,101,111,112,108, +101,99,111,110,116,114,111,118,101,114,115,105,97,108,32,99,111,110,99,101,114, +110,105,110,103,32,116,104,101,97,114,103,117,101,32,116,104,97,116,32,116,104, +101,103,111,118,101,114,110,109,101,110,116,32,97,110,100,97,32,114,101,102,101, +114,101,110,99,101,32,116,111,116,114,97,110,115,102,101,114,114,101,100,32,116, +111,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,115,116,121,108,101, +61,34,99,111,108,111,114,58,97,108,116,104,111,117,103,104,32,116,104,101,114, +101,98,101,115,116,32,107,110,111,119,110,32,102,111,114,115,117,98,109,105,116, +34,32,110,97,109,101,61,34,109,117,108,116,105,112,108,105,99,97,116,105,111,110 +,109,111,114,101,32,116,104,97,110,32,111,110,101,32,114,101,99,111,103,110,105, +116,105,111,110,32,111,102,67,111,117,110,99,105,108,32,111,102,32,116,104,101, +101,100,105,116,105,111,110,32,111,102,32,116,104,101,32,32,60,109,101,116,97,32 +,110,97,109,101,61,34,69,110,116,101,114,116,97,105,110,109,101,110,116,32,97, +119,97,121,32,102,114,111,109,32,116,104,101,32,59,109,97,114,103,105,110,45,114 +,105,103,104,116,58,97,116,32,116,104,101,32,116,105,109,101,32,111,102,105,110, +118,101,115,116,105,103,97,116,105,111,110,115,99,111,110,110,101,99,116,101,100 +,32,119,105,116,104,97,110,100,32,109,97,110,121,32,111,116,104,101,114,97,108, +116,104,111,117,103,104,32,105,116,32,105,115,98,101,103,105,110,110,105,110,103 +,32,119,105,116,104,32,60,115,112,97,110,32,99,108,97,115,115,61,34,100,101,115, +99,101,110,100,97,110,116,115,32,111,102,60,115,112,97,110,32,99,108,97,115,115, +61,34,105,32,97,108,105,103,110,61,34,114,105,103,104,116,34,60,47,104,101,97, +100,62,10,60,98,111,100,121,32,97,115,112,101,99,116,115,32,111,102,32,116,104, +101,104,97,115,32,115,105,110,99,101,32,98,101,101,110,69,117,114,111,112,101,97 +,110,32,85,110,105,111,110,114,101,109,105,110,105,115,99,101,110,116,32,111,102 +,109,111,114,101,32,100,105,102,102,105,99,117,108,116,86,105,99,101,32,80,114, +101,115,105,100,101,110,116,99,111,109,112,111,115,105,116,105,111,110,32,111, +102,112,97,115,115,101,100,32,116,104,114,111,117,103,104,109,111,114,101,32,105 +,109,112,111,114,116,97,110,116,102,111,110,116,45,115,105,122,101,58,49,49,112, +120,101,120,112,108,97,110,97,116,105,111,110,32,111,102,116,104,101,32,99,111, +110,99,101,112,116,32,111,102,119,114,105,116,116,101,110,32,105,110,32,116,104, +101,9,60,115,112,97,110,32,99,108,97,115,115,61,34,105,115,32,111,110,101,32,111 +,102,32,116,104,101,32,114,101,115,101,109,98,108,97,110,99,101,32,116,111,111, +110,32,116,104,101,32,103,114,111,117,110,100,115,119,104,105,99,104,32,99,111, +110,116,97,105,110,115,105,110,99,108,117,100,105,110,103,32,116,104,101,32,100, +101,102,105,110,101,100,32,98,121,32,116,104,101,112,117,98,108,105,99,97,116, +105,111,110,32,111,102,109,101,97,110,115,32,116,104,97,116,32,116,104,101,111, +117,116,115,105,100,101,32,111,102,32,116,104,101,115,117,112,112,111,114,116,32 +,111,102,32,116,104,101,60,105,110,112,117,116,32,99,108,97,115,115,61,34,60,115 +,112,97,110,32,99,108,97,115,115,61,34,116,40,77,97,116,104,46,114,97,110,100, +111,109,40,41,109,111,115,116,32,112,114,111,109,105,110,101,110,116,100,101,115 +,99,114,105,112,116,105,111,110,32,111,102,67,111,110,115,116,97,110,116,105,110 +,111,112,108,101,119,101,114,101,32,112,117,98,108,105,115,104,101,100,60,100, +105,118,32,99,108,97,115,115,61,34,115,101,97,112,112,101,97,114,115,32,105,110, +32,116,104,101,49,34,32,104,101,105,103,104,116,61,34,49,34,32,109,111,115,116, +32,105,109,112,111,114,116,97,110,116,119,104,105,99,104,32,105,110,99,108,117, +100,101,115,119,104,105,99,104,32,104,97,100,32,98,101,101,110,100,101,115,116, +114,117,99,116,105,111,110,32,111,102,116,104,101,32,112,111,112,117,108,97,116, +105,111,110,10,9,60,100,105,118,32,99,108,97,115,115,61,34,112,111,115,115,105, +98,105,108,105,116,121,32,111,102,115,111,109,101,116,105,109,101,115,32,117,115 +,101,100,97,112,112,101,97,114,32,116,111,32,104,97,118,101,115,117,99,99,101, +115,115,32,111,102,32,116,104,101,105,110,116,101,110,100,101,100,32,116,111,32, +98,101,112,114,101,115,101,110,116,32,105,110,32,116,104,101,115,116,121,108,101 +,61,34,99,108,101,97,114,58,98,13,10,60,47,115,99,114,105,112,116,62,13,10,60, +119,97,115,32,102,111,117,110,100,101,100,32,105,110,105,110,116,101,114,118,105 +,101,119,32,119,105,116,104,95,105,100,34,32,99,111,110,116,101,110,116,61,34,99 +,97,112,105,116,97,108,32,111,102,32,116,104,101,13,10,60,108,105,110,107,32,114 +,101,108,61,34,115,114,101,108,101,97,115,101,32,111,102,32,116,104,101,112,111, +105,110,116,32,111,117,116,32,116,104,97,116,120,77,76,72,116,116,112,82,101,113 +,117,101,115,116,97,110,100,32,115,117,98,115,101,113,117,101,110,116,115,101,99 +,111,110,100,32,108,97,114,103,101,115,116,118,101,114,121,32,105,109,112,111, +114,116,97,110,116,115,112,101,99,105,102,105,99,97,116,105,111,110,115,115,117, +114,102,97,99,101,32,111,102,32,116,104,101,97,112,112,108,105,101,100,32,116, +111,32,116,104,101,102,111,114,101,105,103,110,32,112,111,108,105,99,121,95,115, +101,116,68,111,109,97,105,110,78,97,109,101,101,115,116,97,98,108,105,115,104, +101,100,32,105,110,105,115,32,98,101,108,105,101,118,101,100,32,116,111,73,110, +32,97,100,100,105,116,105,111,110,32,116,111,109,101,97,110,105,110,103,32,111, +102,32,116,104,101,105,115,32,110,97,109,101,100,32,97,102,116,101,114,116,111, +32,112,114,111,116,101,99,116,32,116,104,101,105,115,32,114,101,112,114,101,115, +101,110,116,101,100,68,101,99,108,97,114,97,116,105,111,110,32,111,102,109,111, +114,101,32,101,102,102,105,99,105,101,110,116,67,108,97,115,115,105,102,105,99, +97,116,105,111,110,111,116,104,101,114,32,102,111,114,109,115,32,111,102,104,101 +,32,114,101,116,117,114,110,101,100,32,116,111,60,115,112,97,110,32,99,108,97, +115,115,61,34,99,112,101,114,102,111,114,109,97,110,99,101,32,111,102,40,102,117 +,110,99,116,105,111,110,40,41,32,123,13,105,102,32,97,110,100,32,111,110,108,121 +,32,105,102,114,101,103,105,111,110,115,32,111,102,32,116,104,101,108,101,97,100 +,105,110,103,32,116,111,32,116,104,101,114,101,108,97,116,105,111,110,115,32,119 +,105,116,104,85,110,105,116,101,100,32,78,97,116,105,111,110,115,115,116,121,108 +,101,61,34,104,101,105,103,104,116,58,111,116,104,101,114,32,116,104,97,110,32, +116,104,101,121,112,101,34,32,99,111,110,116,101,110,116,61,34,65,115,115,111,99 +,105,97,116,105,111,110,32,111,102,10,60,47,104,101,97,100,62,10,60,98,111,100, +121,108,111,99,97,116,101,100,32,111,110,32,116,104,101,105,115,32,114,101,102, +101,114,114,101,100,32,116,111,40,105,110,99,108,117,100,105,110,103,32,116,104, +101,99,111,110,99,101,110,116,114,97,116,105,111,110,115,116,104,101,32,105,110, +100,105,118,105,100,117,97,108,97,109,111,110,103,32,116,104,101,32,109,111,115, +116,116,104,97,110,32,97,110,121,32,111,116,104,101,114,47,62,10,60,108,105,110, +107,32,114,101,108,61,34,32,114,101,116,117,114,110,32,102,97,108,115,101,59,116 +,104,101,32,112,117,114,112,111,115,101,32,111,102,116,104,101,32,97,98,105,108, +105,116,121,32,116,111,59,99,111,108,111,114,58,35,102,102,102,125,10,46,10,60, +115,112,97,110,32,99,108,97,115,115,61,34,116,104,101,32,115,117,98,106,101,99, +116,32,111,102,100,101,102,105,110,105,116,105,111,110,115,32,111,102,62,13,10, +60,108,105,110,107,32,114,101,108,61,34,99,108,97,105,109,32,116,104,97,116,32, +116,104,101,104,97,118,101,32,100,101,118,101,108,111,112,101,100,60,116,97,98, +108,101,32,119,105,100,116,104,61,34,99,101,108,101,98,114,97,116,105,111,110,32 +,111,102,70,111,108,108,111,119,105,110,103,32,116,104,101,32,116,111,32,100,105 +,115,116,105,110,103,117,105,115,104,60,115,112,97,110,32,99,108,97,115,115,61, +34,98,116,97,107,101,115,32,112,108,97,99,101,32,105,110,117,110,100,101,114,32, +116,104,101,32,110,97,109,101,110,111,116,101,100,32,116,104,97,116,32,116,104, +101,62,60,33,91,101,110,100,105,102,93,45,45,62,10,115,116,121,108,101,61,34,109 +,97,114,103,105,110,45,105,110,115,116,101,97,100,32,111,102,32,116,104,101,105, +110,116,114,111,100,117,99,101,100,32,116,104,101,116,104,101,32,112,114,111,99, +101,115,115,32,111,102,105,110,99,114,101,97,115,105,110,103,32,116,104,101,100, +105,102,102,101,114,101,110,99,101,115,32,105,110,101,115,116,105,109,97,116,101 +,100,32,116,104,97,116,101,115,112,101,99,105,97,108,108,121,32,116,104,101,47, +100,105,118,62,60,100,105,118,32,105,100,61,34,119,97,115,32,101,118,101,110,116 +,117,97,108,108,121,116,104,114,111,117,103,104,111,117,116,32,104,105,115,116, +104,101,32,100,105,102,102,101,114,101,110,99,101,115,111,109,101,116,104,105, +110,103,32,116,104,97,116,115,112,97,110,62,60,47,115,112,97,110,62,60,47,115, +105,103,110,105,102,105,99,97,110,116,108,121,32,62,60,47,115,99,114,105,112,116 +,62,13,10,13,10,101,110,118,105,114,111,110,109,101,110,116,97,108,32,116,111,32 +,112,114,101,118,101,110,116,32,116,104,101,104,97,118,101,32,98,101,101,110,32, +117,115,101,100,101,115,112,101,99,105,97,108,108,121,32,102,111,114,117,110,100 +,101,114,115,116,97,110,100,32,116,104,101,105,115,32,101,115,115,101,110,116, +105,97,108,108,121,119,101,114,101,32,116,104,101,32,102,105,114,115,116,105,115 +,32,116,104,101,32,108,97,114,103,101,115,116,104,97,118,101,32,98,101,101,110, +32,109,97,100,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,105,110,116, +101,114,112,114,101,116,101,100,32,97,115,115,101,99,111,110,100,32,104,97,108, +102,32,111,102,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,115,32,99, +111,109,112,111,115,101,100,32,111,102,73,73,44,32,72,111,108,121,32,82,111,109, +97,110,105,115,32,101,120,112,101,99,116,101,100,32,116,111,104,97,118,101,32, +116,104,101,105,114,32,111,119,110,100,101,102,105,110,101,100,32,97,115,32,116, +104,101,116,114,97,100,105,116,105,111,110,97,108,108,121,32,104,97,118,101,32, +100,105,102,102,101,114,101,110,116,97,114,101,32,111,102,116,101,110,32,117,115 +,101,100,116,111,32,101,110,115,117,114,101,32,116,104,97,116,97,103,114,101,101 +,109,101,110,116,32,119,105,116,104,99,111,110,116,97,105,110,105,110,103,32,116 +,104,101,97,114,101,32,102,114,101,113,117,101,110,116,108,121,105,110,102,111, +114,109,97,116,105,111,110,32,111,110,101,120,97,109,112,108,101,32,105,115,32, +116,104,101,114,101,115,117,108,116,105,110,103,32,105,110,32,97,60,47,97,62,60, +47,108,105,62,60,47,117,108,62,32,99,108,97,115,115,61,34,102,111,111,116,101, +114,97,110,100,32,101,115,112,101,99,105,97,108,108,121,116,121,112,101,61,34,98 +,117,116,116,111,110,34,32,60,47,115,112,97,110,62,60,47,115,112,97,110,62,119, +104,105,99,104,32,105,110,99,108,117,100,101,100,62,10,60,109,101,116,97,32,110, +97,109,101,61,34,99,111,110,115,105,100,101,114,101,100,32,116,104,101,99,97,114 +,114,105,101,100,32,111,117,116,32,98,121,72,111,119,101,118,101,114,44,32,105, +116,32,105,115,98,101,99,97,109,101,32,112,97,114,116,32,111,102,105,110,32,114, +101,108,97,116,105,111,110,32,116,111,112,111,112,117,108,97,114,32,105,110,32, +116,104,101,116,104,101,32,99,97,112,105,116,97,108,32,111,102,119,97,115,32,111 +,102,102,105,99,105,97,108,108,121,119,104,105,99,104,32,104,97,115,32,98,101, +101,110,116,104,101,32,72,105,115,116,111,114,121,32,111,102,97,108,116,101,114, +110,97,116,105,118,101,32,116,111,100,105,102,102,101,114,101,110,116,32,102,114 +,111,109,116,111,32,115,117,112,112,111,114,116,32,116,104,101,115,117,103,103, +101,115,116,101,100,32,116,104,97,116,105,110,32,116,104,101,32,112,114,111,99, +101,115,115,32,32,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,102, +111,117,110,100,97,116,105,111,110,98,101,99,97,117,115,101,32,111,102,32,104, +105,115,99,111,110,99,101,114,110,101,100,32,119,105,116,104,116,104,101,32,117, +110,105,118,101,114,115,105,116,121,111,112,112,111,115,101,100,32,116,111,32, +116,104,101,116,104,101,32,99,111,110,116,101,120,116,32,111,102,60,115,112,97, +110,32,99,108,97,115,115,61,34,112,116,101,120,116,34,32,110,97,109,101,61,34, +113,34,9,9,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,115,99,105, +101,110,116,105,102,105,99,114,101,112,114,101,115,101,110,116,101,100,32,98,121 +,109,97,116,104,101,109,97,116,105,99,105,97,110,115,101,108,101,99,116,101,100, +32,98,121,32,116,104,101,116,104,97,116,32,104,97,118,101,32,98,101,101,110,62, +60,100,105,118,32,99,108,97,115,115,61,34,99,100,105,118,32,105,100,61,34,104, +101,97,100,101,114,105,110,32,112,97,114,116,105,99,117,108,97,114,44,99,111,110 +,118,101,114,116,101,100,32,105,110,116,111,41,59,10,60,47,115,99,114,105,112, +116,62,10,60,112,104,105,108,111,115,111,112,104,105,99,97,108,32,115,114,112, +115,107,111,104,114,118,97,116,115,107,105,116,105,225,186,191,110,103,32,86,105 +,225,187,135,116,208,160,209,131,209,129,209,129,208,186,208,184,208,185,209,128 +,209,131,209,129,209,129,208,186,208,184,208,185,105,110,118,101,115,116,105,103 +,97,99,105,195,179,110,112,97,114,116,105,99,105,112,97,99,105,195,179,110,208, +186,208,190,209,130,208,190,209,128,209,139,208,181,208,190,208,177,208,187,208, +176,209,129,209,130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,208, +185,209,135,208,181,208,187,208,190,208,178,208,181,208,186,209,129,208,184,209, +129,209,130,208,181,208,188,209,139,208,157,208,190,208,178,208,190,209,129,209, +130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,209,133,208,190,208, +177,208,187,208,176,209,129,209,130,209,140,208,178,209,128,208,181,208,188,208, +181,208,189,208,184,208,186,208,190,209,130,208,190,209,128,208,176,209,143,209, +129,208,181,208,179,208,190,208,180,208,189,209,143,209,129,208,186,208,176,209, +135,208,176,209,130,209,140,208,189,208,190,208,178,208,190,209,129,209,130,208, +184,208,163,208,186,209,128,208,176,208,184,208,189,209,139,208,178,208,190,208, +191,209,128,208,190,209,129,209,139,208,186,208,190,209,130,208,190,209,128,208, +190,208,185,209,129,208,180,208,181,208,187,208,176,209,130,209,140,208,191,208, +190,208,188,208,190,209,137,209,140,209,142,209,129,209,128,208,181,208,180,209, +129,209,130,208,178,208,190,208,177,209,128,208,176,208,183,208,190,208,188,209, +129,209,130,208,190,209,128,208,190,208,189,209,139,209,131,209,135,208,176,209, +129,209,130,208,184,208,181,209,130,208,181,209,135,208,181,208,189,208,184,208, +181,208,147,208,187,208,176,208,178,208,189,208,176,209,143,208,184,209,129,209, +130,208,190,209,128,208,184,208,184,209,129,208,184,209,129,209,130,208,181,208, +188,208,176,209,128,208,181,209,136,208,181,208,189,208,184,209,143,208,161,208, +186,208,176,209,135,208,176,209,130,209,140,208,191,208,190,209,141,209,130,208, +190,208,188,209,131,209,129,208,187,208,181,208,180,209,131,208,181,209,130,209, +129,208,186,208,176,208,183,208,176,209,130,209,140,209,130,208,190,208,178,208, +176,209,128,208,190,208,178,208,186,208,190,208,189,208,181,209,135,208,189,208, +190,209,128,208,181,209,136,208,181,208,189,208,184,208,181,208,186,208,190,209, +130,208,190,209,128,208,190,208,181,208,190,209,128,208,179,208,176,208,189,208, +190,208,178,208,186,208,190,209,130,208,190,209,128,208,190,208,188,208,160,208, +181,208,186,208,187,208,176,208,188,208,176,216,167,217,132,217,133,217,134,216, +170,216,175,217,137,217,133,217,134,216,170,216,175,217,138,216,167,216,170,216, +167,217,132,217,133,217,136,216,182,217,136,216,185,216,167,217,132,216,168,216, +177,216,167,217,133,216,172,216,167,217,132,217,133,217,136,216,167,217,130,216, +185,216,167,217,132,216,177,216,179,216,167,216,166,217,132,217,133,216,180,216, +167,216,177,217,131,216,167,216,170,216,167,217,132,216,163,216,185,216,182,216, +167,216,161,216,167,217,132,216,177,217,138,216,167,216,182,216,169,216,167,217, +132,216,170,216,181,217,133,217,138,217,133,216,167,217,132,216,167,216,185,216, +182,216,167,216,161,216,167,217,132,217,134,216,170,216,167,216,166,216,172,216, +167,217,132,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,170,216, +179,216,172,217,138,217,132,216,167,217,132,216,163,217,130,216,179,216,167,217, +133,216,167,217,132,216,182,216,186,216,183,216,167,216,170,216,167,217,132,217, +129,217,138,216,175,217,138,217,136,216,167,217,132,216,170,216,177,216,173,217, +138,216,168,216,167,217,132,216,172,216,175,217,138,216,175,216,169,216,167,217, +132,216,170,216,185,217,132,217,138,217,133,216,167,217,132,216,163,216,174,216, +168,216,167,216,177,216,167,217,132,216,167,217,129,217,132,216,167,217,133,216, +167,217,132,216,163,217,129,217,132,216,167,217,133,216,167,217,132,216,170,216, +167,216,177,217,138,216,174,216,167,217,132,216,170,217,130,217,134,217,138,216, +169,216,167,217,132,216,167,217,132,216,185,216,167,216,168,216,167,217,132,216, +174,217,136,216,167,216,183,216,177,216,167,217,132,217,133,216,172,216,170,217, +133,216,185,216,167,217,132,216,175,217,138,217,131,217,136,216,177,216,167,217, +132,216,179,217,138,216,167,216,173,216,169,216,185,216,168,216,175,216,167,217, +132,217,132,217,135,216,167,217,132,216,170,216,177,216,168,217,138,216,169,216, +167,217,132,216,177,217,136,216,167,216,168,216,183,216,167,217,132,216,163,216, +175,216,168,217,138,216,169,216,167,217,132,216,167,216,174,216,168,216,167,216, +177,216,167,217,132,217,133,216,170,216,173,216,175,216,169,216,167,217,132,216, +167,216,186,216,167,217,134,217,138,99,117,114,115,111,114,58,112,111,105,110, +116,101,114,59,60,47,116,105,116,108,101,62,10,60,109,101,116,97,32,34,32,104, +114,101,102,61,34,104,116,116,112,58,47,47,34,62,60,115,112,97,110,32,99,108,97, +115,115,61,34,109,101,109,98,101,114,115,32,111,102,32,116,104,101,32,119,105, +110,100,111,119,46,108,111,99,97,116,105,111,110,118,101,114,116,105,99,97,108, +45,97,108,105,103,110,58,47,97,62,32,124,32,60,97,32,104,114,101,102,61,34,60,33 +,100,111,99,116,121,112,101,32,104,116,109,108,62,109,101,100,105,97,61,34,115, +99,114,101,101,110,34,32,60,111,112,116,105,111,110,32,118,97,108,117,101,61,34, +102,97,118,105,99,111,110,46,105,99,111,34,32,47,62,10,9,9,60,100,105,118,32,99, +108,97,115,115,61,34,99,104,97,114,97,99,116,101,114,105,115,116,105,99,115,34, +32,109,101,116,104,111,100,61,34,103,101,116,34,32,47,98,111,100,121,62,10,60,47 +,104,116,109,108,62,10,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32, +100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,112,97,100,100,105,110, +103,45,98,111,116,116,111,109,58,114,101,112,114,101,115,101,110,116,97,116,105, +118,101,115,115,117,98,109,105,116,34,32,118,97,108,117,101,61,34,97,108,105,103 +,110,61,34,99,101,110,116,101,114,34,32,116,104,114,111,117,103,104,111,117,116, +32,116,104,101,32,115,99,105,101,110,99,101,32,102,105,99,116,105,111,110,10,32, +32,60,100,105,118,32,99,108,97,115,115,61,34,115,117,98,109,105,116,34,32,99,108 +,97,115,115,61,34,111,110,101,32,111,102,32,116,104,101,32,109,111,115,116,32, +118,97,108,105,103,110,61,34,116,111,112,34,62,60,119,97,115,32,101,115,116,97, +98,108,105,115,104,101,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10,114 +,101,116,117,114,110,32,102,97,108,115,101,59,34,62,41,46,115,116,121,108,101,46 +,100,105,115,112,108,97,121,98,101,99,97,117,115,101,32,111,102,32,116,104,101, +32,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,102,111,114,109, +32,97,99,116,105,111,110,61,34,47,125,98,111,100,121,123,109,97,114,103,105,110, +58,48,59,69,110,99,121,99,108,111,112,101,100,105,97,32,111,102,118,101,114,115, +105,111,110,32,111,102,32,116,104,101,32,46,99,114,101,97,116,101,69,108,101,109 +,101,110,116,40,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,60,47,100, +105,118,62,10,60,47,100,105,118,62,10,10,97,100,109,105,110,105,115,116,114,97, +116,105,118,101,32,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,104,105, +115,116,111,114,121,32,111,102,32,116,104,101,32,34,62,60,105,110,112,117,116,32 +,116,121,112,101,61,34,112,111,114,116,105,111,110,32,111,102,32,116,104,101,32, +97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,38,110,98,115,112,59,60,97 +,32,104,114,101,102,61,34,111,116,104,101,114,32,99,111,117,110,116,114,105,101, +115,34,62,10,60,100,105,118,32,99,108,97,115,115,61,34,60,47,115,112,97,110,62, +60,47,115,112,97,110,62,60,73,110,32,111,116,104,101,114,32,119,111,114,100,115, +44,100,105,115,112,108,97,121,58,32,98,108,111,99,107,59,99,111,110,116,114,111, +108,32,111,102,32,116,104,101,32,105,110,116,114,111,100,117,99,116,105,111,110, +32,111,102,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,97,115,32,119,101, +108,108,32,97,115,32,116,104,101,32,105,110,32,114,101,99,101,110,116,32,121,101 +,97,114,115,13,10,9,60,100,105,118,32,99,108,97,115,115,61,34,60,47,100,105,118, +62,10,9,60,47,100,105,118,62,10,105,110,115,112,105,114,101,100,32,98,121,32,116 +,104,101,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,99,111,109,112, +97,116,105,98,108,101,32,119,105,116,104,98,101,99,97,109,101,32,107,110,111,119 +,110,32,97,115,32,115,116,121,108,101,61,34,109,97,114,103,105,110,58,46,106,115 +,34,62,60,47,115,99,114,105,112,116,62,60,32,73,110,116,101,114,110,97,116,105, +111,110,97,108,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110,71,101 +,114,109,97,110,32,108,97,110,103,117,97,103,101,32,115,116,121,108,101,61,34,99 +,111,108,111,114,58,35,67,111,109,109,117,110,105,115,116,32,80,97,114,116,121, +99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,98,111,114,100,101,114 +,61,34,48,34,32,99,101,108,108,32,109,97,114,103,105,110,104,101,105,103,104,116 +,61,34,116,104,101,32,109,97,106,111,114,105,116,121,32,111,102,34,32,97,108,105 +,103,110,61,34,99,101,110,116,101,114,114,101,108,97,116,101,100,32,116,111,32, +116,104,101,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,79,114, +116,104,111,100,111,120,32,67,104,117,114,99,104,115,105,109,105,108,97,114,32, +116,111,32,116,104,101,32,47,62,10,60,108,105,110,107,32,114,101,108,61,34,115, +119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,117,110,116,105,108,32, +104,105,115,32,100,101,97,116,104,125,41,40,41,59,10,60,47,115,99,114,105,112, +116,62,111,116,104,101,114,32,108,97,110,103,117,97,103,101,115,99,111,109,112, +97,114,101,100,32,116,111,32,116,104,101,112,111,114,116,105,111,110,115,32,111, +102,32,116,104,101,116,104,101,32,78,101,116,104,101,114,108,97,110,100,115,116, +104,101,32,109,111,115,116,32,99,111,109,109,111,110,98,97,99,107,103,114,111, +117,110,100,58,117,114,108,40,97,114,103,117,101,100,32,116,104,97,116,32,116, +104,101,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,110,99,108, +117,100,101,100,32,105,110,32,116,104,101,78,111,114,116,104,32,65,109,101,114, +105,99,97,110,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,105,110 +,116,101,114,112,114,101,116,97,116,105,111,110,115,116,104,101,32,116,114,97, +100,105,116,105,111,110,97,108,100,101,118,101,108,111,112,109,101,110,116,32, +111,102,32,102,114,101,113,117,101,110,116,108,121,32,117,115,101,100,97,32,99, +111,108,108,101,99,116,105,111,110,32,111,102,118,101,114,121,32,115,105,109,105 +,108,97,114,32,116,111,115,117,114,114,111,117,110,100,105,110,103,32,116,104, +101,101,120,97,109,112,108,101,32,111,102,32,116,104,105,115,97,108,105,103,110, +61,34,99,101,110,116,101,114,34,62,119,111,117,108,100,32,104,97,118,101,32,98, +101,101,110,105,109,97,103,101,95,99,97,112,116,105,111,110,32,61,97,116,116,97, +99,104,101,100,32,116,111,32,116,104,101,115,117,103,103,101,115,116,105,110,103 +,32,116,104,97,116,105,110,32,116,104,101,32,102,111,114,109,32,111,102,32,105, +110,118,111,108,118,101,100,32,105,110,32,116,104,101,105,115,32,100,101,114,105 +,118,101,100,32,102,114,111,109,110,97,109,101,100,32,97,102,116,101,114,32,116, +104,101,73,110,116,114,111,100,117,99,116,105,111,110,32,116,111,114,101,115,116 +,114,105,99,116,105,111,110,115,32,111,110,32,115,116,121,108,101,61,34,119,105, +100,116,104,58,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,116,104, +101,32,99,114,101,97,116,105,111,110,32,111,102,109,111,115,116,32,105,109,112, +111,114,116,97,110,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,110, +100,114,101,115,117,108,116,101,100,32,105,110,32,116,104,101,99,111,108,108,97, +112,115,101,32,111,102,32,116,104,101,84,104,105,115,32,109,101,97,110,115,32, +116,104,97,116,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,119,97, +115,32,114,101,112,108,97,99,101,100,32,98,121,97,110,97,108,121,115,105,115,32, +111,102,32,116,104,101,105,110,115,112,105,114,97,116,105,111,110,32,102,111,114 +,114,101,103,97,114,100,101,100,32,97,115,32,116,104,101,109,111,115,116,32,115, +117,99,99,101,115,115,102,117,108,107,110,111,119,110,32,97,115,32,38,113,117, +111,116,59,97,32,99,111,109,112,114,101,104,101,110,115,105,118,101,72,105,115, +116,111,114,121,32,111,102,32,116,104,101,32,119,101,114,101,32,99,111,110,115, +105,100,101,114,101,100,114,101,116,117,114,110,101,100,32,116,111,32,116,104, +101,97,114,101,32,114,101,102,101,114,114,101,100,32,116,111,85,110,115,111,117, +114,99,101,100,32,105,109,97,103,101,62,10,9,60,100,105,118,32,99,108,97,115,115 +,61,34,99,111,110,115,105,115,116,115,32,111,102,32,116,104,101,115,116,111,112, +80,114,111,112,97,103,97,116,105,111,110,105,110,116,101,114,101,115,116,32,105, +110,32,116,104,101,97,118,97,105,108,97,98,105,108,105,116,121,32,111,102,97,112 +,112,101,97,114,115,32,116,111,32,104,97,118,101,101,108,101,99,116,114,111,109, +97,103,110,101,116,105,99,101,110,97,98,108,101,83,101,114,118,105,99,101,115,40 +,102,117,110,99,116,105,111,110,32,111,102,32,116,104,101,73,116,32,105,115,32, +105,109,112,111,114,116,97,110,116,60,47,115,99,114,105,112,116,62,60,47,100,105 +,118,62,102,117,110,99,116,105,111,110,40,41,123,118,97,114,32,114,101,108,97, +116,105,118,101,32,116,111,32,116,104,101,97,115,32,97,32,114,101,115,117,108, +116,32,111,102,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,102,70, +111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,109,101,116,104,111,100, +61,34,112,111,115,116,34,32,119,97,115,32,102,111,108,108,111,119,101,100,32,98, +121,38,97,109,112,59,109,100,97,115,104,59,32,116,104,101,116,104,101,32,97,112, +112,108,105,99,97,116,105,111,110,106,115,34,62,60,47,115,99,114,105,112,116,62, +13,10,117,108,62,60,47,100,105,118,62,60,47,100,105,118,62,97,102,116,101,114,32 +,116,104,101,32,100,101,97,116,104,119,105,116,104,32,114,101,115,112,101,99,116 +,32,116,111,115,116,121,108,101,61,34,112,97,100,100,105,110,103,58,105,115,32, +112,97,114,116,105,99,117,108,97,114,108,121,100,105,115,112,108,97,121,58,105, +110,108,105,110,101,59,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,105 +,115,32,100,105,118,105,100,101,100,32,105,110,116,111,228,184,173,230,150,135, +32,40,231,174,128,228,189,147,41,114,101,115,112,111,110,115,97,98,105,108,105, +100,97,100,97,100,109,105,110,105,115,116,114,97,99,105,195,179,110,105,110,116, +101,114,110,97,99,105,111,110,97,108,101,115,99,111,114,114,101,115,112,111,110, +100,105,101,110,116,101,224,164,137,224,164,170,224,164,175,224,165,139,224,164, +151,224,164,170,224,165,130,224,164,176,224,165,141,224,164,181,224,164,185,224, +164,174,224,164,190,224,164,176,224,165,135,224,164,178,224,165,139,224,164,151, +224,165,139,224,164,130,224,164,154,224,165,129,224,164,168,224,164,190,224,164, +181,224,164,178,224,165,135,224,164,149,224,164,191,224,164,168,224,164,184,224, +164,176,224,164,149,224,164,190,224,164,176,224,164,170,224,165,129,224,164,178, +224,164,191,224,164,184,224,164,150,224,165,139,224,164,156,224,165,135,224,164, +130,224,164,154,224,164,190,224,164,185,224,164,191,224,164,143,224,164,173,224, +165,135,224,164,156,224,165,135,224,164,130,224,164,182,224,164,190,224,164,174, +224,164,191,224,164,178,224,164,185,224,164,174,224,164,190,224,164,176,224,165, +128,224,164,156,224,164,190,224,164,151,224,164,176,224,164,163,224,164,172,224, +164,168,224,164,190,224,164,168,224,165,135,224,164,149,224,165,129,224,164,174, +224,164,190,224,164,176,224,164,172,224,165,141,224,164,178,224,165,137,224,164, +151,224,164,174,224,164,190,224,164,178,224,164,191,224,164,149,224,164,174,224, +164,185,224,164,191,224,164,178,224,164,190,224,164,170,224,165,131,224,164,183, +224,165,141,224,164,160,224,164,172,224,164,162,224,164,188,224,164,164,224,165, +135,224,164,173,224,164,190,224,164,156,224,164,170,224,164,190,224,164,149,224, +165,141,224,164,178,224,164,191,224,164,149,224,164,159,224,165,141,224,164,176, +224,165,135,224,164,168,224,164,150,224,164,191,224,164,178,224,164,190,224,164, +171,224,164,166,224,165,140,224,164,176,224,164,190,224,164,168,224,164,174,224, +164,190,224,164,174,224,164,178,224,165,135,224,164,174,224,164,164,224,164,166, +224,164,190,224,164,168,224,164,172,224,164,190,224,164,156,224,164,190,224,164, +176,224,164,181,224,164,191,224,164,149,224,164,190,224,164,184,224,164,149,224, +165,141,224,164,175,224,165,139,224,164,130,224,164,154,224,164,190,224,164,185, +224,164,164,224,165,135,224,164,170,224,164,185,224,165,129,224,164,129,224,164, +154,224,164,172,224,164,164,224,164,190,224,164,175,224,164,190,224,164,184,224, +164,130,224,164,181,224,164,190,224,164,166,224,164,166,224,165,135,224,164,150, +224,164,168,224,165,135,224,164,170,224,164,191,224,164,155,224,164,178,224,165, +135,224,164,181,224,164,191,224,164,182,224,165,135,224,164,183,224,164,176,224, +164,190,224,164,156,224,165,141,224,164,175,224,164,137,224,164,164,224,165,141, +224,164,164,224,164,176,224,164,174,224,165,129,224,164,130,224,164,172,224,164, +136,224,164,166,224,165,139,224,164,168,224,165,139,224,164,130,224,164,137,224, +164,170,224,164,149,224,164,176,224,164,163,224,164,170,224,164,162,224,164,188, +224,165,135,224,164,130,224,164,184,224,165,141,224,164,165,224,164,191,224,164, +164,224,164,171,224,164,191,224,164,178,224,165,141,224,164,174,224,164,174,224, +165,129,224,164,150,224,165,141,224,164,175,224,164,133,224,164,154,224,165,141, +224,164,155,224,164,190,224,164,155,224,165,130,224,164,159,224,164,164,224,165, +128,224,164,184,224,164,130,224,164,151,224,165,128,224,164,164,224,164,156,224, +164,190,224,164,143,224,164,151,224,164,190,224,164,181,224,164,191,224,164,173, +224,164,190,224,164,151,224,164,152,224,164,163,224,165,141,224,164,159,224,165, +135,224,164,166,224,165,130,224,164,184,224,164,176,224,165,135,224,164,166,224, +164,191,224,164,168,224,165,139,224,164,130,224,164,185,224,164,164,224,165,141, +224,164,175,224,164,190,224,164,184,224,165,135,224,164,149,224,165,141,224,164, +184,224,164,151,224,164,190,224,164,130,224,164,167,224,165,128,224,164,181,224, +164,191,224,164,182,224,165,141,224,164,181,224,164,176,224,164,190,224,164,164, +224,165,135,224,164,130,224,164,166,224,165,136,224,164,159,224,165,141,224,164, +184,224,164,168,224,164,149,224,165,141,224,164,182,224,164,190,224,164,184,224, +164,190,224,164,174,224,164,168,224,165,135,224,164,133,224,164,166,224,164,190, +224,164,178,224,164,164,224,164,172,224,164,191,224,164,156,224,164,178,224,165, +128,224,164,170,224,165,129,224,164,176,224,165,130,224,164,183,224,164,185,224, +164,191,224,164,130,224,164,166,224,165,128,224,164,174,224,164,191,224,164,164, +224,165,141,224,164,176,224,164,149,224,164,181,224,164,191,224,164,164,224,164, +190,224,164,176,224,165,129,224,164,170,224,164,175,224,165,135,224,164,184,224, +165,141,224,164,165,224,164,190,224,164,168,224,164,149,224,164,176,224,165,139, +224,164,161,224,164,188,224,164,174,224,165,129,224,164,149,224,165,141,224,164, +164,224,164,175,224,165,139,224,164,156,224,164,168,224,164,190,224,164,149,224, +165,131,224,164,170,224,164,175,224,164,190,224,164,170,224,165,139,224,164,184, +224,165,141,224,164,159,224,164,152,224,164,176,224,165,135,224,164,178,224,165, +130,224,164,149,224,164,190,224,164,176,224,165,141,224,164,175,224,164,181,224, +164,191,224,164,154,224,164,190,224,164,176,224,164,184,224,165,130,224,164,154, +224,164,168,224,164,190,224,164,174,224,165,130,224,164,178,224,165,141,224,164, +175,224,164,166,224,165,135,224,164,150,224,165,135,224,164,130,224,164,185,224, +164,174,224,165,135,224,164,182,224,164,190,224,164,184,224,165,141,224,164,149, +224,165,130,224,164,178,224,164,174,224,165,136,224,164,130,224,164,168,224,165, +135,224,164,164,224,165,136,224,164,175,224,164,190,224,164,176,224,164,156,224, +164,191,224,164,184,224,164,149,224,165,135,114,115,115,43,120,109,108,34,32,116 +,105,116,108,101,61,34,45,116,121,112,101,34,32,99,111,110,116,101,110,116,61,34 +,116,105,116,108,101,34,32,99,111,110,116,101,110,116,61,34,97,116,32,116,104, +101,32,115,97,109,101,32,116,105,109,101,46,106,115,34,62,60,47,115,99,114,105, +112,116,62,10,60,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,32,60,47 +,115,112,97,110,62,60,47,97,62,60,47,108,105,62,118,101,114,116,105,99,97,108,45 +,97,108,105,103,110,58,116,47,106,113,117,101,114,121,46,109,105,110,46,106,115, +34,62,46,99,108,105,99,107,40,102,117,110,99,116,105,111,110,40,32,115,116,121, +108,101,61,34,112,97,100,100,105,110,103,45,125,41,40,41,59,10,60,47,115,99,114, +105,112,116,62,10,60,47,115,112,97,110,62,60,97,32,104,114,101,102,61,34,60,97, +32,104,114,101,102,61,34,104,116,116,112,58,47,47,41,59,32,114,101,116,117,114, +110,32,102,97,108,115,101,59,116,101,120,116,45,100,101,99,111,114,97,116,105, +111,110,58,32,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,98,111,114, +100,101,114,45,99,111,108,108,97,112,115,101,58,97,115,115,111,99,105,97,116,101 +,100,32,119,105,116,104,32,66,97,104,97,115,97,32,73,110,100,111,110,101,115,105 +,97,69,110,103,108,105,115,104,32,108,97,110,103,117,97,103,101,60,116,101,120, +116,32,120,109,108,58,115,112,97,99,101,61,46,103,105,102,34,32,98,111,114,100, +101,114,61,34,48,34,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,10,111, +118,101,114,102,108,111,119,58,104,105,100,100,101,110,59,105,109,103,32,115,114 +,99,61,34,104,116,116,112,58,47,47,97,100,100,69,118,101,110,116,76,105,115,116, +101,110,101,114,114,101,115,112,111,110,115,105,98,108,101,32,102,111,114,32,115 +,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,47,102,97,118,105,99,111, +110,46,105,99,111,34,32,47,62,111,112,101,114,97,116,105,110,103,32,115,121,115, +116,101,109,34,32,115,116,121,108,101,61,34,119,105,100,116,104,58,49,116,97,114 +,103,101,116,61,34,95,98,108,97,110,107,34,62,83,116,97,116,101,32,85,110,105, +118,101,114,115,105,116,121,116,101,120,116,45,97,108,105,103,110,58,108,101,102 +,116,59,10,100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,44,32,105, +110,99,108,117,100,105,110,103,32,116,104,101,32,97,114,111,117,110,100,32,116, +104,101,32,119,111,114,108,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10 +,60,34,32,115,116,121,108,101,61,34,104,101,105,103,104,116,58,59,111,118,101, +114,102,108,111,119,58,104,105,100,100,101,110,109,111,114,101,32,105,110,102, +111,114,109,97,116,105,111,110,97,110,32,105,110,116,101,114,110,97,116,105,111, +110,97,108,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,111,110,101 +,32,111,102,32,116,104,101,32,102,105,114,115,116,99,97,110,32,98,101,32,102,111 +,117,110,100,32,105,110,32,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10, +100,105,115,112,108,97,121,58,32,110,111,110,101,59,34,62,34,32,47,62,10,60,108, +105,110,107,32,114,101,108,61,34,10,32,32,40,102,117,110,99,116,105,111,110,40, +41,32,123,116,104,101,32,49,53,116,104,32,99,101,110,116,117,114,121,46,112,114, +101,118,101,110,116,68,101,102,97,117,108,116,40,108,97,114,103,101,32,110,117, +109,98,101,114,32,111,102,32,66,121,122,97,110,116,105,110,101,32,69,109,112,105 +,114,101,46,106,112,103,124,116,104,117,109,98,124,108,101,102,116,124,118,97, +115,116,32,109,97,106,111,114,105,116,121,32,111,102,109,97,106,111,114,105,116, +121,32,111,102,32,116,104,101,32,32,97,108,105,103,110,61,34,99,101,110,116,101, +114,34,62,85,110,105,118,101,114,115,105,116,121,32,80,114,101,115,115,100,111, +109,105,110,97,116,101,100,32,98,121,32,116,104,101,83,101,99,111,110,100,32,87, +111,114,108,100,32,87,97,114,100,105,115,116,114,105,98,117,116,105,111,110,32, +111,102,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,116,104, +101,32,114,101,115,116,32,111,102,32,116,104,101,32,99,104,97,114,97,99,116,101, +114,105,122,101,100,32,98,121,32,114,101,108,61,34,110,111,102,111,108,108,111, +119,34,62,100,101,114,105,118,101,115,32,102,114,111,109,32,116,104,101,114,97, +116,104,101,114,32,116,104,97,110,32,116,104,101,32,97,32,99,111,109,98,105,110, +97,116,105,111,110,32,111,102,115,116,121,108,101,61,34,119,105,100,116,104,58, +49,48,48,69,110,103,108,105,115,104,45,115,112,101,97,107,105,110,103,99,111,109 +,112,117,116,101,114,32,115,99,105,101,110,99,101,98,111,114,100,101,114,61,34, +48,34,32,97,108,116,61,34,116,104,101,32,101,120,105,115,116,101,110,99,101,32, +111,102,68,101,109,111,99,114,97,116,105,99,32,80,97,114,116,121,34,32,115,116, +121,108,101,61,34,109,97,114,103,105,110,45,70,111,114,32,116,104,105,115,32,114 +,101,97,115,111,110,44,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,9,115 +,66,121,84,97,103,78,97,109,101,40,115,41,91,48,93,106,115,34,62,60,47,115,99, +114,105,112,116,62,13,10,60,46,106,115,34,62,60,47,115,99,114,105,112,116,62,13, +10,108,105,110,107,32,114,101,108,61,34,105,99,111,110,34,32,39,32,97,108,116,61 +,39,39,32,99,108,97,115,115,61,39,102,111,114,109,97,116,105,111,110,32,111,102, +32,116,104,101,118,101,114,115,105,111,110,115,32,111,102,32,116,104,101,32,60, +47,97,62,60,47,100,105,118,62,60,47,100,105,118,62,47,112,97,103,101,62,10,32,32 +,60,112,97,103,101,62,10,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110, +116,98,101,99,97,109,101,32,116,104,101,32,102,105,114,115,116,98,97,104,97,115, +97,32,73,110,100,111,110,101,115,105,97,101,110,103,108,105,115,104,32,40,115, +105,109,112,108,101,41,206,149,206,187,206,187,206,183,206,189,206,185,206,186, +206,172,209,133,209,128,208,178,208,176,209,130,209,129,208,186,208,184,208,186, +208,190,208,188,208,191,208,176,208,189,208,184,208,184,209,143,208,178,208,187, +209,143,208,181,209,130,209,129,209,143,208,148,208,190,208,177,208,176,208,178, +208,184,209,130,209,140,209,135,208,181,208,187,208,190,208,178,208,181,208,186, +208,176,209,128,208,176,208,183,208,178,208,184,209,130,208,184,209,143,208,152, +208,189,209,130,208,181,209,128,208,189,208,181,209,130,208,158,209,130,208,178, +208,181,209,130,208,184,209,130,209,140,208,189,208,176,208,191,209,128,208,184, +208,188,208,181,209,128,208,184,208,189,209,130,208,181,209,128,208,189,208,181, +209,130,208,186,208,190,209,130,208,190,209,128,208,190,208,179,208,190,209,129, +209,130,209,128,208,176,208,189,208,184,209,134,209,139,208,186,208,176,209,135, +208,181,209,129,209,130,208,178,208,181,209,131,209,129,208,187,208,190,208,178, +208,184,209,143,209,133,208,191,209,128,208,190,208,177,208,187,208,181,208,188, +209,139,208,191,208,190,208,187,209,131,209,135,208,184,209,130,209,140,209,143, +208,178,208,187,209,143,209,142,209,130,209,129,209,143,208,189,208,176,208,184, +208,177,208,190,208,187,208,181,208,181,208,186,208,190,208,188,208,191,208,176, +208,189,208,184,209,143,208,178,208,189,208,184,208,188,208,176,208,189,208,184, +208,181,209,129,209,128,208,181,208,180,209,129,209,130,208,178,208,176,216,167, +217,132,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,177, +216,166,217,138,216,179,217,138,216,169,216,167,217,132,216,167,217,134,216,170, +217,130,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216,167,216,170, +217,131,216,167,217,132,216,179,217,138,216,167,216,177,216,167,216,170,216,167, +217,132,217,133,217,131,216,170,217,136,216,168,216,169,216,167,217,132,216,179, +216,185,217,136,216,175,217,138,216,169,216,167,216,173,216,181,216,167,216,166, +217,138,216,167,216,170,216,167,217,132,216,185,216,167,217,132,217,133,217,138, +216,169,216,167,217,132,216,181,217,136,216,170,217,138,216,167,216,170,216,167, +217,132,216,167,217,134,216,170,216,177,217,134,216,170,216,167,217,132,216,170, +216,181,216,167,217,133,217,138,217,133,216,167,217,132,216,165,216,179,217,132, +216,167,217,133,217,138,216,167,217,132,217,133,216,180,216,167,216,177,217,131, +216,169,216,167,217,132,217,133,216,177,216,166,217,138,216,167,216,170,114,111, +98,111,116,115,34,32,99,111,110,116,101,110,116,61,34,60,100,105,118,32,105,100, +61,34,102,111,111,116,101,114,34,62,116,104,101,32,85,110,105,116,101,100,32,83, +116,97,116,101,115,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47, +46,106,112,103,124,114,105,103,104,116,124,116,104,117,109,98,124,46,106,115,34, +62,60,47,115,99,114,105,112,116,62,13,10,60,108,111,99,97,116,105,111,110,46,112 +,114,111,116,111,99,111,108,102,114,97,109,101,98,111,114,100,101,114,61,34,48, +34,32,115,34,32,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,60,47,97,62, +60,47,100,105,118,62,60,47,100,105,118,62,60,102,111,110,116,45,119,101,105,103, +104,116,58,98,111,108,100,59,38,113,117,111,116,59,32,97,110,100,32,38,113,117, +111,116,59,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,109, +97,114,103,105,110,58,48,59,112,97,100,100,105,110,103,58,34,32,114,101,108,61, +34,110,111,102,111,108,108,111,119,34,32,80,114,101,115,105,100,101,110,116,32, +111,102,32,116,104,101,32,116,119,101,110,116,105,101,116,104,32,99,101,110,116, +117,114,121,101,118,105,115,105,111,110,62,10,32,32,60,47,112,97,103,101,73,110, +116,101,114,110,101,116,32,69,120,112,108,111,114,101,114,97,46,97,115,121,110, +99,32,61,32,116,114,117,101,59,13,10,105,110,102,111,114,109,97,116,105,111,110, +32,97,98,111,117,116,60,100,105,118,32,105,100,61,34,104,101,97,100,101,114,34, +62,34,32,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,60,97,32,104,114, +101,102,61,34,104,116,116,112,115,58,47,47,60,100,105,118,32,105,100,61,34,99, +111,110,116,101,110,116,34,60,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10 +,60,100,101,114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,60,105,109, +103,32,115,114,99,61,39,104,116,116,112,58,47,47,97,99,99,111,114,100,105,110, +103,32,116,111,32,116,104,101,32,10,60,47,98,111,100,121,62,10,60,47,104,116,109 +,108,62,10,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,115, +99,114,105,112,116,32,108,97,110,103,117,97,103,101,61,34,65,114,105,97,108,44, +32,72,101,108,118,101,116,105,99,97,44,60,47,97,62,60,115,112,97,110,32,99,108, +97,115,115,61,34,60,47,115,99,114,105,112,116,62,60,115,99,114,105,112,116,32, +112,111,108,105,116,105,99,97,108,32,112,97,114,116,105,101,115,116,100,62,60,47 +,116,114,62,60,47,116,97,98,108,101,62,60,104,114,101,102,61,34,104,116,116,112, +58,47,47,119,119,119,46,105,110,116,101,114,112,114,101,116,97,116,105,111,110, +32,111,102,114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,100, +111,99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,99,104,97,114,115,101 +,116,61,34,117,116,102,45,56,34,62,10,98,101,103,105,110,110,105,110,103,32,111, +102,32,116,104,101,32,114,101,118,101,97,108,101,100,32,116,104,97,116,32,116, +104,101,116,101,108,101,118,105,115,105,111,110,32,115,101,114,105,101,115,34,32 +,114,101,108,61,34,110,111,102,111,108,108,111,119,34,62,32,116,97,114,103,101, +116,61,34,95,98,108,97,110,107,34,62,99,108,97,105,109,105,110,103,32,116,104,97 +,116,32,116,104,101,104,116,116,112,37,51,65,37,50,70,37,50,70,119,119,119,46, +109,97,110,105,102,101,115,116,97,116,105,111,110,115,32,111,102,80,114,105,109, +101,32,77,105,110,105,115,116,101,114,32,111,102,105,110,102,108,117,101,110,99, +101,100,32,98,121,32,116,104,101,99,108,97,115,115,61,34,99,108,101,97,114,102, +105,120,34,62,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10,13,10,116,104, +114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,67,104,117,114,99,104, +32,111,102,32,69,110,103,108,97,110,100,111,102,32,78,111,114,116,104,32,67,97, +114,111,108,105,110,97,115,113,117,97,114,101,32,107,105,108,111,109,101,116,114 +,101,115,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,100,105 +,115,116,105,110,99,116,32,102,114,111,109,32,116,104,101,99,111,109,109,111,110 +,108,121,32,107,110,111,119,110,32,97,115,80,104,111,110,101,116,105,99,32,65, +108,112,104,97,98,101,116,100,101,99,108,97,114,101,100,32,116,104,97,116,32,116 +,104,101,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,66,101, +110,106,97,109,105,110,32,70,114,97,110,107,108,105,110,114,111,108,101,45,112, +108,97,121,105,110,103,32,103,97,109,101,116,104,101,32,85,110,105,118,101,114, +115,105,116,121,32,111,102,105,110,32,87,101,115,116,101,114,110,32,69,117,114, +111,112,101,112,101,114,115,111,110,97,108,32,99,111,109,112,117,116,101,114,80, +114,111,106,101,99,116,32,71,117,116,101,110,98,101,114,103,114,101,103,97,114, +100,108,101,115,115,32,111,102,32,116,104,101,104,97,115,32,98,101,101,110,32, +112,114,111,112,111,115,101,100,116,111,103,101,116,104,101,114,32,119,105,116, +104,32,116,104,101,62,60,47,108,105,62,60,108,105,32,99,108,97,115,115,61,34,105 +,110,32,115,111,109,101,32,99,111,117,110,116,114,105,101,115,109,105,110,46,106 +,115,34,62,60,47,115,99,114,105,112,116,62,111,102,32,116,104,101,32,112,111,112 +,117,108,97,116,105,111,110,111,102,102,105,99,105,97,108,32,108,97,110,103,117, +97,103,101,60,105,109,103,32,115,114,99,61,34,105,109,97,103,101,115,47,105,100, +101,110,116,105,102,105,101,100,32,98,121,32,116,104,101,110,97,116,117,114,97, +108,32,114,101,115,111,117,114,99,101,115,99,108,97,115,115,105,102,105,99,97, +116,105,111,110,32,111,102,99,97,110,32,98,101,32,99,111,110,115,105,100,101,114 +,101,100,113,117,97,110,116,117,109,32,109,101,99,104,97,110,105,99,115,78,101, +118,101,114,116,104,101,108,101,115,115,44,32,116,104,101,109,105,108,108,105, +111,110,32,121,101,97,114,115,32,97,103,111,60,47,98,111,100,121,62,13,10,60,47, +104,116,109,108,62,13,206,149,206,187,206,187,206,183,206,189,206,185,206,186, +206,172,10,116,97,107,101,32,97,100,118,97,110,116,97,103,101,32,111,102,97,110, +100,44,32,97,99,99,111,114,100,105,110,103,32,116,111,97,116,116,114,105,98,117, +116,101,100,32,116,111,32,116,104,101,77,105,99,114,111,115,111,102,116,32,87, +105,110,100,111,119,115,116,104,101,32,102,105,114,115,116,32,99,101,110,116,117 +,114,121,117,110,100,101,114,32,116,104,101,32,99,111,110,116,114,111,108,100, +105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,115,104,111,114,116, +108,121,32,97,102,116,101,114,32,116,104,101,110,111,116,97,98,108,101,32,101, +120,99,101,112,116,105,111,110,116,101,110,115,32,111,102,32,116,104,111,117,115 +,97,110,100,115,115,101,118,101,114,97,108,32,100,105,102,102,101,114,101,110, +116,97,114,111,117,110,100,32,116,104,101,32,119,111,114,108,100,46,114,101,97, +99,104,105,110,103,32,109,105,108,105,116,97,114,121,105,115,111,108,97,116,101, +100,32,102,114,111,109,32,116,104,101,111,112,112,111,115,105,116,105,111,110,32 +,116,111,32,116,104,101,116,104,101,32,79,108,100,32,84,101,115,116,97,109,101, +110,116,65,102,114,105,99,97,110,32,65,109,101,114,105,99,97,110,115,105,110,115 +,101,114,116,101,100,32,105,110,116,111,32,116,104,101,115,101,112,97,114,97,116 +,101,32,102,114,111,109,32,116,104,101,109,101,116,114,111,112,111,108,105,116, +97,110,32,97,114,101,97,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98, +108,101,97,99,107,110,111,119,108,101,100,103,101,100,32,116,104,97,116,97,114, +103,117,97,98,108,121,32,116,104,101,32,109,111,115,116,116,121,112,101,61,34, +116,101,120,116,47,99,115,115,34,62,10,116,104,101,32,73,110,116,101,114,110,97, +116,105,111,110,97,108,65,99,99,111,114,100,105,110,103,32,116,111,32,116,104, +101,32,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,99,111,105,110 +,99,105,100,101,32,119,105,116,104,32,116,104,101,116,119,111,45,116,104,105,114 +,100,115,32,111,102,32,116,104,101,68,117,114,105,110,103,32,116,104,105,115,32, +116,105,109,101,44,100,117,114,105,110,103,32,116,104,101,32,112,101,114,105,111 +,100,97,110,110,111,117,110,99,101,100,32,116,104,97,116,32,104,101,116,104,101, +32,105,110,116,101,114,110,97,116,105,111,110,97,108,97,110,100,32,109,111,114, +101,32,114,101,99,101,110,116,108,121,98,101,108,105,101,118,101,100,32,116,104, +97,116,32,116,104,101,99,111,110,115,99,105,111,117,115,110,101,115,115,32,97, +110,100,102,111,114,109,101,114,108,121,32,107,110,111,119,110,32,97,115,115,117 +,114,114,111,117,110,100,101,100,32,98,121,32,116,104,101,102,105,114,115,116,32 +,97,112,112,101,97,114,101,100,32,105,110,111,99,99,97,115,105,111,110,97,108, +108,121,32,117,115,101,100,112,111,115,105,116,105,111,110,58,97,98,115,111,108, +117,116,101,59,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,112 +,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,116,101,120, +116,45,97,108,105,103,110,58,99,101,110,116,101,114,59,106,97,120,47,108,105,98, +115,47,106,113,117,101,114,121,47,49,46,98,97,99,107,103,114,111,117,110,100,45, +99,111,108,111,114,58,35,116,121,112,101,61,34,97,112,112,108,105,99,97,116,105, +111,110,47,97,110,103,117,97,103,101,34,32,99,111,110,116,101,110,116,61,34,60, +109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,80,114,105,118,97 +,99,121,32,80,111,108,105,99,121,60,47,97,62,101,40,34,37,51,67,115,99,114,105, +112,116,32,115,114,99,61,39,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110, +107,34,62,79,110,32,116,104,101,32,111,116,104,101,114,32,104,97,110,100,44,46, +106,112,103,124,116,104,117,109,98,124,114,105,103,104,116,124,50,60,47,100,105, +118,62,60,100,105,118,32,99,108,97,115,115,61,34,60,100,105,118,32,115,116,121, +108,101,61,34,102,108,111,97,116,58,110,105,110,101,116,101,101,110,116,104,32, +99,101,110,116,117,114,121,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108, +62,13,10,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,115,59,116, +101,120,116,45,97,108,105,103,110,58,99,101,110,116,101,114,102,111,110,116,45, +119,101,105,103,104,116,58,32,98,111,108,100,59,32,65,99,99,111,114,100,105,110, +103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98, +101,116,119,101,101,110,34,32,102,114,97,109,101,98,111,114,100,101,114,61,34,48 +,34,32,34,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,108, +105,110,107,32,104,114,101,102,61,34,104,116,116,112,58,47,47,104,116,109,108,52 +,47,108,111,111,115,101,46,100,116,100,34,62,10,100,117,114,105,110,103,32,116, +104,105,115,32,112,101,114,105,111,100,60,47,116,100,62,60,47,116,114,62,60,47, +116,97,98,108,101,62,99,108,111,115,101,108,121,32,114,101,108,97,116,101,100,32 +,116,111,102,111,114,32,116,104,101,32,102,105,114,115,116,32,116,105,109,101,59 +,102,111,110,116,45,119,101,105,103,104,116,58,98,111,108,100,59,105,110,112,117 +,116,32,116,121,112,101,61,34,116,101,120,116,34,32,60,115,112,97,110,32,115,116 +,121,108,101,61,34,102,111,110,116,45,111,110,114,101,97,100,121,115,116,97,116, +101,99,104,97,110,103,101,9,60,100,105,118,32,99,108,97,115,115,61,34,99,108,101 +,97,114,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,46,32,70 +,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,97,32,119,105,100, +101,32,118,97,114,105,101,116,121,32,111,102,32,60,33,68,79,67,84,89,80,69,32, +104,116,109,108,62,13,10,60,38,110,98,115,112,59,38,110,98,115,112,59,38,110,98, +115,112,59,34,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,115,116 +,121,108,101,61,34,102,108,111,97,116,58,108,101,102,116,59,99,111,110,99,101, +114,110,101,100,32,119,105,116,104,32,116,104,101,61,104,116,116,112,37,51,65,37 +,50,70,37,50,70,119,119,119,46,105,110,32,112,111,112,117,108,97,114,32,99,117, +108,116,117,114,101,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47 +,62,105,116,32,105,115,32,112,111,115,115,105,98,108,101,32,116,111,32,72,97,114 +,118,97,114,100,32,85,110,105,118,101,114,115,105,116,121,116,121,108,101,115, +104,101,101,116,34,32,104,114,101,102,61,34,47,116,104,101,32,109,97,105,110,32, +99,104,97,114,97,99,116,101,114,79,120,102,111,114,100,32,85,110,105,118,101,114 +,115,105,116,121,32,32,110,97,109,101,61,34,107,101,121,119,111,114,100,115,34, +32,99,115,116,121,108,101,61,34,116,101,120,116,45,97,108,105,103,110,58,116,104 +,101,32,85,110,105,116,101,100,32,75,105,110,103,100,111,109,102,101,100,101,114 +,97,108,32,103,111,118,101,114,110,109,101,110,116,60,100,105,118,32,115,116,121 +,108,101,61,34,109,97,114,103,105,110,32,100,101,112,101,110,100,105,110,103,32, +111,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102, +32,116,104,101,60,100,105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114, +46,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,100,101,115,116, +114,117,99,116,105,111,110,32,111,102,32,116,104,101,115,108,105,103,104,116,108 +,121,32,100,105,102,102,101,114,101,110,116,105,110,32,97,99,99,111,114,100,97, +110,99,101,32,119,105,116,104,116,101,108,101,99,111,109,109,117,110,105,99,97, +116,105,111,110,115,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,116, +104,101,115,104,111,114,116,108,121,32,116,104,101,114,101,97,102,116,101,114, +101,115,112,101,99,105,97,108,108,121,32,105,110,32,116,104,101,32,69,117,114, +111,112,101,97,110,32,99,111,117,110,116,114,105,101,115,72,111,119,101,118,101, +114,44,32,116,104,101,114,101,32,97,114,101,115,114,99,61,34,104,116,116,112,58, +47,47,115,116,97,116,105,99,115,117,103,103,101,115,116,101,100,32,116,104,97, +116,32,116,104,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,119,119,119, +46,97,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,84,101,108, +101,99,111,109,109,117,110,105,99,97,116,105,111,110,115,34,32,114,101,108,61,34 +,110,111,102,111,108,108,111,119,34,32,116,72,111,108,121,32,82,111,109,97,110, +32,69,109,112,101,114,111,114,97,108,109,111,115,116,32,101,120,99,108,117,115, +105,118,101,108,121,34,32,98,111,114,100,101,114,61,34,48,34,32,97,108,116,61,34 +,83,101,99,114,101,116,97,114,121,32,111,102,32,83,116,97,116,101,99,117,108,109 +,105,110,97,116,105,110,103,32,105,110,32,116,104,101,67,73,65,32,87,111,114,108 +,100,32,70,97,99,116,98,111,111,107,116,104,101,32,109,111,115,116,32,105,109, +112,111,114,116,97,110,116,97,110,110,105,118,101,114,115,97,114,121,32,111,102, +32,116,104,101,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45 +,60,108,105,62,60,101,109,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,65 +,116,108,97,110,116,105,99,32,79,99,101,97,110,115,116,114,105,99,116,108,121,32 +,115,112,101,97,107,105,110,103,44,115,104,111,114,116,108,121,32,98,101,102,111 +,114,101,32,116,104,101,100,105,102,102,101,114,101,110,116,32,116,121,112,101, +115,32,111,102,116,104,101,32,79,116,116,111,109,97,110,32,69,109,112,105,114, +101,62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,65,110,32,73, +110,116,114,111,100,117,99,116,105,111,110,32,116,111,99,111,110,115,101,113,117 +,101,110,99,101,32,111,102,32,116,104,101,100,101,112,97,114,116,117,114,101,32, +102,114,111,109,32,116,104,101,67,111,110,102,101,100,101,114,97,116,101,32,83, +116,97,116,101,115,105,110,100,105,103,101,110,111,117,115,32,112,101,111,112, +108,101,115,80,114,111,99,101,101,100,105,110,103,115,32,111,102,32,116,104,101, +105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,116,104,101,116,104,101 +,111,114,105,101,115,32,104,97,118,101,32,98,101,101,110,105,110,118,111,108,118 +,101,109,101,110,116,32,105,110,32,116,104,101,100,105,118,105,100,101,100,32, +105,110,116,111,32,116,104,114,101,101,97,100,106,97,99,101,110,116,32,99,111, +117,110,116,114,105,101,115,105,115,32,114,101,115,112,111,110,115,105,98,108, +101,32,102,111,114,100,105,115,115,111,108,117,116,105,111,110,32,111,102,32,116 +,104,101,99,111,108,108,97,98,111,114,97,116,105,111,110,32,119,105,116,104,119, +105,100,101,108,121,32,114,101,103,97,114,100,101,100,32,97,115,104,105,115,32, +99,111,110,116,101,109,112,111,114,97,114,105,101,115,102,111,117,110,100,105, +110,103,32,109,101,109,98,101,114,32,111,102,68,111,109,105,110,105,99,97,110,32 +,82,101,112,117,98,108,105,99,103,101,110,101,114,97,108,108,121,32,97,99,99,101 +,112,116,101,100,116,104,101,32,112,111,115,115,105,98,105,108,105,116,121,32, +111,102,97,114,101,32,97,108,115,111,32,97,118,97,105,108,97,98,108,101,117,110, +100,101,114,32,99,111,110,115,116,114,117,99,116,105,111,110,114,101,115,116,111 +,114,97,116,105,111,110,32,111,102,32,116,104,101,116,104,101,32,103,101,110,101 +,114,97,108,32,112,117,98,108,105,99,105,115,32,97,108,109,111,115,116,32,101, +110,116,105,114,101,108,121,112,97,115,115,101,115,32,116,104,114,111,117,103, +104,32,116,104,101,104,97,115,32,98,101,101,110,32,115,117,103,103,101,115,116, +101,100,99,111,109,112,117,116,101,114,32,97,110,100,32,118,105,100,101,111,71, +101,114,109,97,110,105,99,32,108,97,110,103,117,97,103,101,115,32,97,99,99,111, +114,100,105,110,103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110 +,116,32,102,114,111,109,32,116,104,101,115,104,111,114,116,108,121,32,97,102,116 +,101,114,119,97,114,100,115,104,114,101,102,61,34,104,116,116,112,115,58,47,47, +119,119,119,46,114,101,99,101,110,116,32,100,101,118,101,108,111,112,109,101,110 +,116,66,111,97,114,100,32,111,102,32,68,105,114,101,99,116,111,114,115,60,100, +105,118,32,99,108,97,115,115,61,34,115,101,97,114,99,104,124,32,60,97,32,104,114 +,101,102,61,34,104,116,116,112,58,47,47,73,110,32,112,97,114,116,105,99,117,108, +97,114,44,32,116,104,101,77,117,108,116,105,112,108,101,32,102,111,111,116,110, +111,116,101,115,111,114,32,111,116,104,101,114,32,115,117,98,115,116,97,110,99, +101,116,104,111,117,115,97,110,100,115,32,111,102,32,121,101,97,114,115,116,114, +97,110,115,108,97,116,105,111,110,32,111,102,32,116,104,101,60,47,100,105,118,62 +,13,10,60,47,100,105,118,62,13,10,13,10,60,97,32,104,114,101,102,61,34,105,110, +100,101,120,46,112,104,112,119,97,115,32,101,115,116,97,98,108,105,115,104,101, +100,32,105,110,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10, +112,97,114,116,105,99,105,112,97,116,101,32,105,110,32,116,104,101,97,32,115,116 +,114,111,110,103,32,105,110,102,108,117,101,110,99,101,115,116,121,108,101,61,34 +,109,97,114,103,105,110,45,116,111,112,58,114,101,112,114,101,115,101,110,116, +101,100,32,98,121,32,116,104,101,103,114,97,100,117,97,116,101,100,32,102,114, +111,109,32,116,104,101,84,114,97,100,105,116,105,111,110,97,108,108,121,44,32, +116,104,101,69,108,101,109,101,110,116,40,34,115,99,114,105,112,116,34,41,59,72, +111,119,101,118,101,114,44,32,115,105,110,99,101,32,116,104,101,47,100,105,118, +62,10,60,47,100,105,118,62,10,60,100,105,118,32,108,101,102,116,59,32,109,97,114 +,103,105,110,45,108,101,102,116,58,112,114,111,116,101,99,116,105,111,110,32,97, +103,97,105,110,115,116,48,59,32,118,101,114,116,105,99,97,108,45,97,108,105,103, +110,58,85,110,102,111,114,116,117,110,97,116,101,108,121,44,32,116,104,101,116, +121,112,101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,47,100,105,118,62, +10,60,100,105,118,32,99,108,97,115,115,61,34,32,99,108,97,115,115,61,34,99,108, +101,97,114,102,105,120,34,62,60,100,105,118,32,99,108,97,115,115,61,34,102,111, +111,116,101,114,9,9,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,116,104, +101,32,109,111,116,105,111,110,32,112,105,99,116,117,114,101,208,145,209,138,208 +,187,208,179,208,176,209,128,209,129,208,186,208,184,208,177,209,138,208,187,208 +,179,208,176,209,128,209,129,208,186,208,184,208,164,208,181,208,180,208,181,209 +,128,208,176,209,134,208,184,208,184,208,189,208,181,209,129,208,186,208,190,208 +,187,209,140,208,186,208,190,209,129,208,190,208,190,208,177,209,137,208,181,208 +,189,208,184,208,181,209,129,208,190,208,190,208,177,209,137,208,181,208,189,208 +,184,209,143,208,191,209,128,208,190,208,179,209,128,208,176,208,188,208,188,209 +,139,208,158,209,130,208,191,209,128,208,176,208,178,208,184,209,130,209,140,208 +,177,208,181,209,129,208,191,208,187,208,176,209,130,208,189,208,190,208,188,208 +,176,209,130,208,181,209,128,208,184,208,176,208,187,209,139,208,191,208,190,208 +,183,208,178,208,190,208,187,209,143,208,181,209,130,208,191,208,190,209,129,208 +,187,208,181,208,180,208,189,208,184,208,181,209,128,208,176,208,183,208,187,208 +,184,209,135,208,189,209,139,209,133,208,191,209,128,208,190,208,180,209,131,208 +,186,209,134,208,184,208,184,208,191,209,128,208,190,208,179,209,128,208,176,208 +,188,208,188,208,176,208,191,208,190,208,187,208,189,208,190,209,129,209,130,209 +,140,209,142,208,189,208,176,209,133,208,190,208,180,208,184,209,130,209,129,209 +,143,208,184,208,183,208,177,209,128,208,176,208,189,208,189,208,190,208,181,208 +,189,208,176,209,129,208,181,208,187,208,181,208,189,208,184,209,143,208,184,208 +,183,208,188,208,181,208,189,208,181,208,189,208,184,209,143,208,186,208,176,209 +,130,208,181,208,179,208,190,209,128,208,184,208,184,208,144,208,187,208,181,208 +,186,209,129,208,176,208,189,208,180,209,128,224,164,166,224,165,141,224,164,181 +,224,164,190,224,164,176,224,164,190,224,164,174,224,165,136,224,164,168,224,165 +,129,224,164,133,224,164,178,224,164,170,224,165,141,224,164,176,224,164,166,224 +,164,190,224,164,168,224,164,173,224,164,190,224,164,176,224,164,164,224,165,128 +,224,164,175,224,164,133,224,164,168,224,165,129,224,164,166,224,165,135,224,164 +,182,224,164,185,224,164,191,224,164,168,224,165,141,224,164,166,224,165,128,224 +,164,135,224,164,130,224,164,161,224,164,191,224,164,175,224,164,190,224,164,166 +,224,164,191,224,164,178,224,165,141,224,164,178,224,165,128,224,164,133,224,164 +,167,224,164,191,224,164,149,224,164,190,224,164,176,224,164,181,224,165,128,224 +,164,161,224,164,191,224,164,175,224,165,139,224,164,154,224,164,191,224,164,159 +,224,165,141,224,164,160,224,165,135,224,164,184,224,164,174,224,164,190,224,164 +,154,224,164,190,224,164,176,224,164,156,224,164,130,224,164,149,224,165,141,224 +,164,182,224,164,168,224,164,166,224,165,129,224,164,168,224,164,191,224,164,175 +,224,164,190,224,164,170,224,165,141,224,164,176,224,164,175,224,165,139,224,164 +,151,224,164,133,224,164,168,224,165,129,224,164,184,224,164,190,224,164,176,224 +,164,145,224,164,168,224,164,178,224,164,190,224,164,135,224,164,168,224,164,170 +,224,164,190,224,164,176,224,165,141,224,164,159,224,165,128,224,164,182,224,164 +,176,224,165,141,224,164,164,224,165,139,224,164,130,224,164,178,224,165,139,224 +,164,149,224,164,184,224,164,173,224,164,190,224,164,171,224,164,188,224,165,141 +,224,164,178,224,165,136,224,164,182,224,164,182,224,164,176,224,165,141,224,164 +,164,224,165,135,224,164,130,224,164,170,224,165,141,224,164,176,224,164,166,224 +,165,135,224,164,182,224,164,170,224,165,141,224,164,178,224,165,135,224,164,175 +,224,164,176,224,164,149,224,165,135,224,164,130,224,164,166,224,165,141,224,164 +,176,224,164,184,224,165,141,224,164,165,224,164,191,224,164,164,224,164,191,224 +,164,137,224,164,164,224,165,141,224,164,170,224,164,190,224,164,166,224,164,137 +,224,164,168,224,165,141,224,164,185,224,165,135,224,164,130,224,164,154,224,164 +,191,224,164,159,224,165,141,224,164,160,224,164,190,224,164,175,224,164,190,224 +,164,164,224,165,141,224,164,176,224,164,190,224,164,156,224,165,141,224,164,175 +,224,164,190,224,164,166,224,164,190,224,164,170,224,165,129,224,164,176,224,164 +,190,224,164,168,224,165,135,224,164,156,224,165,139,224,164,161,224,164,188,224 +,165,135,224,164,130,224,164,133,224,164,168,224,165,129,224,164,181,224,164,190 +,224,164,166,224,164,182,224,165,141,224,164,176,224,165,135,224,164,163,224,165 +,128,224,164,182,224,164,191,224,164,149,224,165,141,224,164,183,224,164,190,224 +,164,184,224,164,176,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184 +,224,164,130,224,164,151,224,165,141,224,164,176,224,164,185,224,164,170,224,164 +,176,224,164,191,224,164,163,224,164,190,224,164,174,224,164,172,224,165,141,224 +,164,176,224,164,190,224,164,130,224,164,161,224,164,172,224,164,154,224,165,141 +,224,164,154,224,165,139,224,164,130,224,164,137,224,164,170,224,164,178,224,164 +,172,224,165,141,224,164,167,224,164,174,224,164,130,224,164,164,224,165,141,224 +,164,176,224,165,128,224,164,184,224,164,130,224,164,170,224,164,176,224,165,141 +,224,164,149,224,164,137,224,164,174,224,165,141,224,164,174,224,165,128,224,164 +,166,224,164,174,224,164,190,224,164,167,224,165,141,224,164,175,224,164,174,224 +,164,184,224,164,185,224,164,190,224,164,175,224,164,164,224,164,190,224,164,182 +,224,164,172,224,165,141,224,164,166,224,165,139,224,164,130,224,164,174,224,165 +,128,224,164,161,224,164,191,224,164,175,224,164,190,224,164,134,224,164,136,224 +,164,170,224,165,128,224,164,143,224,164,178,224,164,174,224,165,139,224,164,172 +,224,164,190,224,164,135,224,164,178,224,164,184,224,164,130,224,164,150,224,165 +,141,224,164,175,224,164,190,224,164,134,224,164,170,224,164,176,224,165,135,224 +,164,182,224,164,168,224,164,133,224,164,168,224,165,129,224,164,172,224,164,130 +,224,164,167,224,164,172,224,164,190,224,164,156,224,164,188,224,164,190,224,164 +,176,224,164,168,224,164,181,224,165,128,224,164,168,224,164,164,224,164,174,224 +,164,170,224,165,141,224,164,176,224,164,174,224,165,129,224,164,150,224,164,170 +,224,165,141,224,164,176,224,164,182,224,165,141,224,164,168,224,164,170,224,164 +,176,224,164,191,224,164,181,224,164,190,224,164,176,224,164,168,224,165,129,224 +,164,149,224,164,184,224,164,190,224,164,168,224,164,184,224,164,174,224,164,176 +,224,165,141,224,164,165,224,164,168,224,164,134,224,164,175,224,165,139,224,164 +,156,224,164,191,224,164,164,224,164,184,224,165,139,224,164,174,224,164,181,224 +,164,190,224,164,176,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216 +,167,216,170,216,167,217,132,217,133,217,134,216,170,216,175,217,138,216,167,216 +,170,216,167,217,132,217,131,217,133,216,168,217,138,217,136,216,170,216,177,216 +,167,217,132,217,133,216,180,216,167,217,135,216,175,216,167,216,170,216,185,216 +,175,216,175,216,167,217,132,216,178,217,136,216,167,216,177,216,185,216,175,216 +,175,216,167,217,132,216,177,216,175,217,136,216,175,216,167,217,132,216,165,216 +,179,217,132,216,167,217,133,217,138,216,169,216,167,217,132,217,129,217,136,216 +,170,217,136,216,180,217,136,216,168,216,167,217,132,217,133,216,179,216,167,216 +,168,217,130,216,167,216,170,216,167,217,132,217,133,216,185,217,132,217,136,217 +,133,216,167,216,170,216,167,217,132,217,133,216,179,217,132,216,179,217,132,216 +,167,216,170,216,167,217,132,216,172,216,177,216,167,217,129,217,138,217,131,216 +,179,216,167,217,132,216,167,216,179,217,132,216,167,217,133,217,138,216,169,216 +,167,217,132,216,167,216,170,216,181,216,167,217,132,216,167,216,170,107,101,121 +,119,111,114,100,115,34,32,99,111,110,116,101,110,116,61,34,119,51,46,111,114, +103,47,49,57,57,57,47,120,104,116,109,108,34,62,60,97,32,116,97,114,103,101,116, +61,34,95,98,108,97,110,107,34,32,116,101,120,116,47,104,116,109,108,59,32,99,104 +,97,114,115,101,116,61,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107, +34,62,60,116,97,98,108,101,32,99,101,108,108,112,97,100,100,105,110,103,61,34,97 +,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,116,101,120, +116,45,97,108,105,103,110,58,32,99,101,110,116,101,114,59,116,111,32,108,97,115, +116,32,118,101,114,115,105,111,110,32,98,121,32,98,97,99,107,103,114,111,117,110 +,100,45,99,111,108,111,114,58,32,35,34,32,104,114,101,102,61,34,104,116,116,112, +58,47,47,119,119,119,46,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,32 +,105,100,61,60,97,32,104,114,101,102,61,34,35,34,32,99,108,97,115,115,61,34,34, +62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,99,114,105,112, +116,34,32,115,114,99,61,34,104,116,116,112,58,47,47,10,60,115,99,114,105,112,116 +,32,108,97,110,103,117,97,103,101,61,34,47,47,69,78,34,32,34,104,116,116,112,58, +47,47,119,119,119,46,119,101,110,99,111,100,101,85,82,73,67,111,109,112,111,110, +101,110,116,40,34,32,104,114,101,102,61,34,106,97,118,97,115,99,114,105,112,116, +58,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,116,101,110,116,100,111, +99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,115,99,112,111,115,105, +116,105,111,110,58,32,97,98,115,111,108,117,116,101,59,115,99,114,105,112,116,32 +,115,114,99,61,34,104,116,116,112,58,47,47,32,115,116,121,108,101,61,34,109,97, +114,103,105,110,45,116,111,112,58,46,109,105,110,46,106,115,34,62,60,47,115,99, +114,105,112,116,62,10,60,47,100,105,118,62,10,60,100,105,118,32,99,108,97,115, +115,61,34,119,51,46,111,114,103,47,49,57,57,57,47,120,104,116,109,108,34,32,10, +13,10,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,62,100,105,115,116,105 +,110,99,116,105,111,110,32,98,101,116,119,101,101,110,47,34,32,116,97,114,103, +101,116,61,34,95,98,108,97,110,107,34,62,60,108,105,110,107,32,104,114,101,102, +61,34,104,116,116,112,58,47,47,101,110,99,111,100,105,110,103,61,34,117,116,102, +45,56,34,63,62,10,119,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110, +101,114,63,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,119,119,119,46, +105,99,111,110,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,32,115,116, +121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,58,116,121,112,101,61,34, +116,101,120,116,47,99,115,115,34,32,47,62,10,109,101,116,97,32,112,114,111,112, +101,114,116,121,61,34,111,103,58,116,60,105,110,112,117,116,32,116,121,112,101, +61,34,116,101,120,116,34,32,32,115,116,121,108,101,61,34,116,101,120,116,45,97, +108,105,103,110,58,116,104,101,32,100,101,118,101,108,111,112,109,101,110,116,32 +,111,102,32,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116, +101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,105,115 +,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,116,97,98,108, +101,32,119,105,100,116,104,61,34,49,48,48,37,34,32,73,110,32,97,100,100,105,116, +105,111,110,32,116,111,32,116,104,101,32,99,111,110,116,114,105,98,117,116,101, +100,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,115,32, +98,101,116,119,101,101,110,100,101,118,101,108,111,112,109,101,110,116,32,111, +102,32,116,104,101,32,73,116,32,105,115,32,105,109,112,111,114,116,97,110,116,32 +,116,111,32,60,47,115,99,114,105,112,116,62,10,10,60,115,99,114,105,112,116,32, +32,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,49,62,60,47, +115,112,97,110,62,60,115,112,97,110,32,105,100,61,103,98,76,105,98,114,97,114, +121,32,111,102,32,67,111,110,103,114,101,115,115,60,105,109,103,32,115,114,99,61 +,34,104,116,116,112,58,47,47,105,109,69,110,103,108,105,115,104,32,116,114,97, +110,115,108,97,116,105,111,110,65,99,97,100,101,109,121,32,111,102,32,83,99,105, +101,110,99,101,115,100,105,118,32,115,116,121,108,101,61,34,100,105,115,112,108, +97,121,58,99,111,110,115,116,114,117,99,116,105,111,110,32,111,102,32,116,104, +101,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,105,100,41,105, +110,32,99,111,110,106,117,110,99,116,105,111,110,32,119,105,116,104,69,108,101, +109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,32,60,109,101,116,97,32, +112,114,111,112,101,114,116,121,61,34,111,103,58,208,145,209,138,208,187,208,179 +,208,176,209,128,209,129,208,186,208,184,10,32,116,121,112,101,61,34,116,101,120 +,116,34,32,110,97,109,101,61,34,62,80,114,105,118,97,99,121,32,80,111,108,105,99 +,121,60,47,97,62,97,100,109,105,110,105,115,116,101,114,101,100,32,98,121,32,116 +,104,101,101,110,97,98,108,101,83,105,110,103,108,101,82,101,113,117,101,115,116 +,115,116,121,108,101,61,38,113,117,111,116,59,109,97,114,103,105,110,58,60,47, +100,105,118,62,60,47,100,105,118,62,60,47,100,105,118,62,60,62,60,105,109,103,32 +,115,114,99,61,34,104,116,116,112,58,47,47,105,32,115,116,121,108,101,61,38,113, +117,111,116,59,102,108,111,97,116,58,114,101,102,101,114,114,101,100,32,116,111, +32,97,115,32,116,104,101,32,116,111,116,97,108,32,112,111,112,117,108,97,116,105 +,111,110,32,111,102,105,110,32,87,97,115,104,105,110,103,116,111,110,44,32,68,46 +,67,46,32,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45,97, +109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,44,111,114,103 +,97,110,105,122,97,116,105,111,110,32,111,102,32,116,104,101,112,97,114,116,105, +99,105,112,97,116,101,100,32,105,110,32,116,104,101,116,104,101,32,105,110,116, +114,111,100,117,99,116,105,111,110,32,111,102,105,100,101,110,116,105,102,105, +101,100,32,119,105,116,104,32,116,104,101,102,105,99,116,105,111,110,97,108,32, +99,104,97,114,97,99,116,101,114,32,79,120,102,111,114,100,32,85,110,105,118,101, +114,115,105,116,121,32,109,105,115,117,110,100,101,114,115,116,97,110,100,105, +110,103,32,111,102,84,104,101,114,101,32,97,114,101,44,32,104,111,119,101,118, +101,114,44,115,116,121,108,101,115,104,101,101,116,34,32,104,114,101,102,61,34, +47,67,111,108,117,109,98,105,97,32,85,110,105,118,101,114,115,105,116,121,101, +120,112,97,110,100,101,100,32,116,111,32,105,110,99,108,117,100,101,117,115,117, +97,108,108,121,32,114,101,102,101,114,114,101,100,32,116,111,105,110,100,105,99, +97,116,105,110,103,32,116,104,97,116,32,116,104,101,104,97,118,101,32,115,117, +103,103,101,115,116,101,100,32,116,104,97,116,97,102,102,105,108,105,97,116,101, +100,32,119,105,116,104,32,116,104,101,99,111,114,114,101,108,97,116,105,111,110, +32,98,101,116,119,101,101,110,110,117,109,98,101,114,32,111,102,32,100,105,102, +102,101,114,101,110,116,62,60,47,116,100,62,60,47,116,114,62,60,47,116,97,98,108 +,101,62,82,101,112,117,98,108,105,99,32,111,102,32,73,114,101,108,97,110,100,10, +60,47,115,99,114,105,112,116,62,10,60,115,99,114,105,112,116,32,117,110,100,101, +114,32,116,104,101,32,105,110,102,108,117,101,110,99,101,99,111,110,116,114,105, +98,117,116,105,111,110,32,116,111,32,116,104,101,79,102,102,105,99,105,97,108,32 +,119,101,98,115,105,116,101,32,111,102,104,101,97,100,113,117,97,114,116,101,114 +,115,32,111,102,32,116,104,101,99,101,110,116,101,114,101,100,32,97,114,111,117, +110,100,32,116,104,101,105,109,112,108,105,99,97,116,105,111,110,115,32,111,102, +32,116,104,101,104,97,118,101,32,98,101,101,110,32,100,101,118,101,108,111,112, +101,100,70,101,100,101,114,97,108,32,82,101,112,117,98,108,105,99,32,111,102,98, +101,99,97,109,101,32,105,110,99,114,101,97,115,105,110,103,108,121,99,111,110, +116,105,110,117,97,116,105,111,110,32,111,102,32,116,104,101,78,111,116,101,44, +32,104,111,119,101,118,101,114,44,32,116,104,97,116,115,105,109,105,108,97,114, +32,116,111,32,116,104,97,116,32,111,102,32,99,97,112,97,98,105,108,105,116,105, +101,115,32,111,102,32,116,104,101,97,99,99,111,114,100,97,110,99,101,32,119,105, +116,104,32,116,104,101,112,97,114,116,105,99,105,112,97,110,116,115,32,105,110, +32,116,104,101,102,117,114,116,104,101,114,32,100,101,118,101,108,111,112,109, +101,110,116,117,110,100,101,114,32,116,104,101,32,100,105,114,101,99,116,105,111 +,110,105,115,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,101,100, +104,105,115,32,121,111,117,110,103,101,114,32,98,114,111,116,104,101,114,60,47, +116,100,62,60,47,116,114,62,60,47,116,97,98,108,101,62,60,97,32,104,116,116,112, +45,101,113,117,105,118,61,34,88,45,85,65,45,112,104,121,115,105,99,97,108,32,112 +,114,111,112,101,114,116,105,101,115,111,102,32,66,114,105,116,105,115,104,32,67 +,111,108,117,109,98,105,97,104,97,115,32,98,101,101,110,32,99,114,105,116,105,99 +,105,122,101,100,40,119,105,116,104,32,116,104,101,32,101,120,99,101,112,116,105 +,111,110,113,117,101,115,116,105,111,110,115,32,97,98,111,117,116,32,116,104,101 +,112,97,115,115,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101,48,34, +32,99,101,108,108,112,97,100,100,105,110,103,61,34,48,34,32,116,104,111,117,115, +97,110,100,115,32,111,102,32,112,101,111,112,108,101,114,101,100,105,114,101,99, +116,115,32,104,101,114,101,46,32,70,111,114,104,97,118,101,32,99,104,105,108,100 +,114,101,110,32,117,110,100,101,114,37,51,69,37,51,67,47,115,99,114,105,112,116, +37,51,69,34,41,41,59,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119 +,119,119,46,60,108,105,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47, +47,115,105,116,101,95,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,116, +101,120,116,45,100,101,99,111,114,97,116,105,111,110,58,110,111,110,101,115,116, +121,108,101,61,34,100,105,115,112,108,97,121,58,32,110,111,110,101,60,109,101, +116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,88,45,110,101,119,32,68, +97,116,101,40,41,46,103,101,116,84,105,109,101,40,41,32,116,121,112,101,61,34, +105,109,97,103,101,47,120,45,105,99,111,110,34,60,47,115,112,97,110,62,60,115, +112,97,110,32,99,108,97,115,115,61,34,108,97,110,103,117,97,103,101,61,34,106,97 +,118,97,115,99,114,105,112,116,119,105,110,100,111,119,46,108,111,99,97,116,105, +111,110,46,104,114,101,102,60,97,32,104,114,101,102,61,34,106,97,118,97,115,99, +114,105,112,116,58,45,45,62,13,10,60,115,99,114,105,112,116,32,116,121,112,101, +61,34,116,60,97,32,104,114,101,102,61,39,104,116,116,112,58,47,47,119,119,119,46 +,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,114,101,102,61,34,60,47, +100,105,118,62,13,10,60,100,105,118,32,99,108,97,115,115,61,34,60,115,99,114,105 +,112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,34,32,114,101,108,61,34, +115,116,121,108,101,115,104,101,101,116,34,32,116,60,47,100,105,118,62,10,60,115 +,99,114,105,112,116,32,116,121,112,101,61,47,97,62,32,60,97,32,104,114,101,102, +61,34,104,116,116,112,58,47,47,32,97,108,108,111,119,84,114,97,110,115,112,97, +114,101,110,99,121,61,34,88,45,85,65,45,67,111,109,112,97,116,105,98,108,101,34, +32,99,111,110,114,101,108,97,116,105,111,110,115,104,105,112,32,98,101,116,119, +101,101,110,10,60,47,115,99,114,105,112,116,62,13,10,60,115,99,114,105,112,116, +32,60,47,97,62,60,47,108,105,62,60,47,117,108,62,60,47,100,105,118,62,97,115,115 +,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,112,114,111,103, +114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,60,47,97,62,60,97,32 +,104,114,101,102,61,34,104,116,116,112,58,47,47,60,47,97,62,60,47,108,105,62,60, +108,105,32,99,108,97,115,115,61,34,102,111,114,109,32,97,99,116,105,111,110,61, +34,104,116,116,112,58,47,47,60,100,105,118,32,115,116,121,108,101,61,34,100,105, +115,112,108,97,121,58,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101 +,61,34,113,34,60,116,97,98,108,101,32,119,105,100,116,104,61,34,49,48,48,37,34, +32,98,97,99,107,103,114,111,117,110,100,45,112,111,115,105,116,105,111,110,58,34 +,32,98,111,114,100,101,114,61,34,48,34,32,119,105,100,116,104,61,34,114,101,108, +61,34,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,54,62,60,117, +108,62,60,108,105,62,60,97,32,104,114,101,102,61,34,32,32,60,109,101,116,97,32, +104,116,116,112,45,101,113,117,105,118,61,34,99,115,115,34,32,109,101,100,105,97 +,61,34,115,99,114,101,101,110,34,32,114,101,115,112,111,110,115,105,98,108,101, +32,102,111,114,32,116,104,101,32,34,32,116,121,112,101,61,34,97,112,112,108,105, +99,97,116,105,111,110,47,34,32,115,116,121,108,101,61,34,98,97,99,107,103,114, +111,117,110,100,45,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116, +102,45,56,34,32,97,108,108,111,119,116,114,97,110,115,112,97,114,101,110,99,121, +61,34,115,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116, +101,13,10,60,109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,62, +60,47,115,112,97,110,62,60,115,112,97,110,32,99,108,97,115,115,61,34,48,34,32,99 +,101,108,108,115,112,97,99,105,110,103,61,34,48,34,62,59,10,60,47,115,99,114,105 +,112,116,62,10,60,115,99,114,105,112,116,32,115,111,109,101,116,105,109,101,115, +32,99,97,108,108,101,100,32,116,104,101,100,111,101,115,32,110,111,116,32,110, +101,99,101,115,115,97,114,105,108,121,70,111,114,32,109,111,114,101,32,105,110, +102,111,114,109,97,116,105,111,110,97,116,32,116,104,101,32,98,101,103,105,110, +110,105,110,103,32,111,102,32,60,33,68,79,67,84,89,80,69,32,104,116,109,108,62, +60,104,116,109,108,112,97,114,116,105,99,117,108,97,114,108,121,32,105,110,32, +116,104,101,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,97,109, +101,61,34,106,97,118,97,115,99,114,105,112,116,58,118,111,105,100,40,48,41,59,34 +,101,102,102,101,99,116,105,118,101,110,101,115,115,32,111,102,32,116,104,101,32 +,97,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,103,101, +110,101,114,97,108,108,121,32,99,111,110,115,105,100,101,114,101,100,62,60,105, +110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,34,62,60,47,115, +99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,116,104,114,111,117,103, +104,111,117,116,32,116,104,101,32,119,111,114,108,100,99,111,109,109,111,110,32, +109,105,115,99,111,110,99,101,112,116,105,111,110,97,115,115,111,99,105,97,116, +105,111,110,32,119,105,116,104,32,116,104,101,60,47,100,105,118,62,10,60,47,100, +105,118,62,10,60,100,105,118,32,99,100,117,114,105,110,103,32,104,105,115,32,108 +,105,102,101,116,105,109,101,44,99,111,114,114,101,115,112,111,110,100,105,110, +103,32,116,111,32,116,104,101,116,121,112,101,61,34,105,109,97,103,101,47,120,45 +,105,99,111,110,34,32,97,110,32,105,110,99,114,101,97,115,105,110,103,32,110,117 +,109,98,101,114,100,105,112,108,111,109,97,116,105,99,32,114,101,108,97,116,105, +111,110,115,97,114,101,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114, +101,100,109,101,116,97,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34, +32,60,105,110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,101,120 +,97,109,112,108,101,115,32,105,110,99,108,117,100,101,32,116,104,101,34,62,60, +105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,105,112,97,114,116,105, +99,105,112,97,116,105,111,110,32,105,110,32,116,104,101,116,104,101,32,101,115, +116,97,98,108,105,115,104,109,101,110,116,32,111,102,10,60,47,100,105,118,62,10, +60,100,105,118,32,99,108,97,115,115,61,34,38,97,109,112,59,110,98,115,112,59,38, +97,109,112,59,110,98,115,112,59,116,111,32,100,101,116,101,114,109,105,110,101, +32,119,104,101,116,104,101,114,113,117,105,116,101,32,100,105,102,102,101,114, +101,110,116,32,102,114,111,109,109,97,114,107,101,100,32,116,104,101,32,98,101, +103,105,110,110,105,110,103,100,105,115,116,97,110,99,101,32,98,101,116,119,101, +101,110,32,116,104,101,99,111,110,116,114,105,98,117,116,105,111,110,115,32,116, +111,32,116,104,101,99,111,110,102,108,105,99,116,32,98,101,116,119,101,101,110, +32,116,104,101,119,105,100,101,108,121,32,99,111,110,115,105,100,101,114,101,100 +,32,116,111,119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,102,105,114, +115,116,119,105,116,104,32,118,97,114,121,105,110,103,32,100,101,103,114,101,101 +,115,104,97,118,101,32,115,112,101,99,117,108,97,116,101,100,32,116,104,97,116, +40,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,112, +97,114,116,105,99,105,112,97,116,105,110,103,32,105,110,32,116,104,101,111,114, +105,103,105,110,97,108,108,121,32,100,101,118,101,108,111,112,101,100,101,116,97 +,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,32,116,121,112,101, +61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,105,110,116,101,114,99,104,97 +,110,103,101,97,98,108,121,32,119,105,116,104,109,111,114,101,32,99,108,111,115, +101,108,121,32,114,101,108,97,116,101,100,115,111,99,105,97,108,32,97,110,100,32 +,112,111,108,105,116,105,99,97,108,116,104,97,116,32,119,111,117,108,100,32,111, +116,104,101,114,119,105,115,101,112,101,114,112,101,110,100,105,99,117,108,97, +114,32,116,111,32,116,104,101,115,116,121,108,101,32,116,121,112,101,61,34,116, +101,120,116,47,99,115,115,116,121,112,101,61,34,115,117,98,109,105,116,34,32,110 +,97,109,101,61,34,102,97,109,105,108,105,101,115,32,114,101,115,105,100,105,110, +103,32,105,110,100,101,118,101,108,111,112,105,110,103,32,99,111,117,110,116,114 +,105,101,115,99,111,109,112,117,116,101,114,32,112,114,111,103,114,97,109,109, +105,110,103,101,99,111,110,111,109,105,99,32,100,101,118,101,108,111,112,109,101 +,110,116,100,101,116,101,114,109,105,110,97,116,105,111,110,32,111,102,32,116, +104,101,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111 +,110,111,110,32,115,101,118,101,114,97,108,32,111,99,99,97,115,105,111,110,115, +112,111,114,116,117,103,117,195,170,115,32,40,69,117,114,111,112,101,117,41,208, +163,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,209, +131,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,208, +160,208,190,209,129,209,129,208,184,208,185,209,129,208,186,208,190,208,185,208, +188,208,176,209,130,208,181,209,128,208,184,208,176,208,187,208,190,208,178,208, +184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,208,184,209, +131,208,191,209,128,208,176,208,178,208,187,208,181,208,189,208,184,209,143,208, +189,208,181,208,190,208,177,209,133,208,190,208,180,208,184,208,188,208,190,208, +184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208, +152,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208, +160,208,181,209,129,208,191,209,131,208,177,208,187,208,184,208,186,208,184,208, +186,208,190,208,187,208,184,209,135,208,181,209,129,209,130,208,178,208,190,208, +184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,142,209, +130,208,181,209,128,209,128,208,184,209,130,208,190,209,128,208,184,208,184,208, +180,208,190,209,129,209,130,208,176,209,130,208,190,209,135,208,189,208,190,216, +167,217,132,217,133,216,170,217,136,216,167,216,172,216,175,217,136,217,134,216, +167,217,132,216,167,216,180,216,170,216,177,216,167,217,131,216,167,216,170,216, +167,217,132,216,167,217,130,216,170,216,177,216,167,216,173,216,167,216,170,104, +116,109,108,59,32,99,104,97,114,115,101,116,61,85,84,70,45,56,34,32,115,101,116, +84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,100,105,115, +112,108,97,121,58,105,110,108,105,110,101,45,98,108,111,99,107,59,60,105,110,112 +,117,116,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,116,121,112,101, +32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,60,105,109,103,32, +115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,46,34,32,34,104,116,116, +112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,115,104,111,114,116,99,117, +116,32,105,99,111,110,34,32,104,114,101,102,61,34,34,32,97,117,116,111,99,111, +109,112,108,101,116,101,61,34,111,102,102,34,32,60,47,97,62,60,47,100,105,118,62 +,60,100,105,118,32,99,108,97,115,115,61,60,47,97,62,60,47,108,105,62,10,60,108, +105,32,99,108,97,115,115,61,34,99,115,115,34,32,116,121,112,101,61,34,116,101, +120,116,47,99,115,115,34,32,60,102,111,114,109,32,97,99,116,105,111,110,61,34, +104,116,116,112,58,47,47,120,116,47,99,115,115,34,32,104,114,101,102,61,34,104, +116,116,112,58,47,47,108,105,110,107,32,114,101,108,61,34,97,108,116,101,114,110 +,97,116,101,34,32,13,10,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116, +101,120,116,47,32,111,110,99,108,105,99,107,61,34,106,97,118,97,115,99,114,105, +112,116,58,40,110,101,119,32,68,97,116,101,41,46,103,101,116,84,105,109,101,40, +41,125,104,101,105,103,104,116,61,34,49,34,32,119,105,100,116,104,61,34,49,34,32 +,80,101,111,112,108,101,39,115,32,82,101,112,117,98,108,105,99,32,111,102,32,32, +60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,116,101, +120,116,45,100,101,99,111,114,97,116,105,111,110,58,117,110,100,101,114,116,104, +101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,116,104,101,32,60,47,100 +,105,118,62,10,60,47,100,105,118,62,10,60,47,100,105,118,62,10,101,115,116,97,98 +,108,105,115,104,109,101,110,116,32,111,102,32,116,104,101,32,60,47,100,105,118, +62,60,47,100,105,118,62,60,47,100,105,118,62,60,47,100,35,118,105,101,119,112, +111,114,116,123,109,105,110,45,104,101,105,103,104,116,58,10,60,115,99,114,105, +112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,111,112,116,105,111,110,62, +60,111,112,116,105,111,110,32,118,97,108,117,101,61,111,102,116,101,110,32,114, +101,102,101,114,114,101,100,32,116,111,32,97,115,32,47,111,112,116,105,111,110, +62,10,60,111,112,116,105,111,110,32,118,97,108,117,60,33,68,79,67,84,89,80,69,32 +,104,116,109,108,62,10,60,33,45,45,91,73,110,116,101,114,110,97,116,105,111,110, +97,108,32,65,105,114,112,111,114,116,62,10,60,97,32,104,114,101,102,61,34,104, +116,116,112,58,47,47,119,119,119,60,47,97,62,60,97,32,104,114,101,102,61,34,104, +116,116,112,58,47,47,119,224,184,160,224,184,178,224,184,169,224,184,178,224,185 +,132,224,184,151,224,184,162,225,131,165,225,131,144,225,131,160,225,131,151,225 +,131,163,225,131,154,225,131,152,230,173,163,233,171,148,228,184,173,230,150,135 +,32,40,231,185,129,233,171,148,41,224,164,168,224,164,191,224,164,176,224,165, +141,224,164,166,224,165,135,224,164,182,224,164,161,224,164,190,224,164,137,224, +164,168,224,164,178,224,165,139,224,164,161,224,164,149,224,165,141,224,164,183, +224,165,135,224,164,164,224,165,141,224,164,176,224,164,156,224,164,190,224,164, +168,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184,224,164,130,224, +164,172,224,164,130,224,164,167,224,164,191,224,164,164,224,164,184,224,165,141, +224,164,165,224,164,190,224,164,170,224,164,168,224,164,190,224,164,184,224,165, +141,224,164,181,224,165,128,224,164,149,224,164,190,224,164,176,224,164,184,224, +164,130,224,164,184,224,165,141,224,164,149,224,164,176,224,164,163,224,164,184, +224,164,190,224,164,174,224,164,151,224,165,141,224,164,176,224,165,128,224,164, +154,224,164,191,224,164,159,224,165,141,224,164,160,224,165,139,224,164,130,224, +164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164,168, +224,164,133,224,164,174,224,165,135,224,164,176,224,164,191,224,164,149,224,164, +190,224,164,181,224,164,191,224,164,173,224,164,191,224,164,168,224,165,141,224, +164,168,224,164,151,224,164,190,224,164,161,224,164,191,224,164,175,224,164,190, +224,164,129,224,164,149,224,165,141,224,164,175,224,165,139,224,164,130,224,164, +149,224,164,191,224,164,184,224,165,129,224,164,176,224,164,149,224,165,141,224, +164,183,224,164,190,224,164,170,224,164,185,224,165,129,224,164,129,224,164,154, +224,164,164,224,165,128,224,164,170,224,165,141,224,164,176,224,164,172,224,164, +130,224,164,167,224,164,168,224,164,159,224,164,191,224,164,170,224,165,141,224, +164,170,224,164,163,224,165,128,224,164,149,224,165,141,224,164,176,224,164,191, +224,164,149,224,165,135,224,164,159,224,164,170,224,165,141,224,164,176,224,164, +190,224,164,176,224,164,130,224,164,173,224,164,170,224,165,141,224,164,176,224, +164,190,224,164,170,224,165,141,224,164,164,224,164,174,224,164,190,224,164,178, +224,164,191,224,164,149,224,165,139,224,164,130,224,164,176,224,164,171,224,164, +188,224,165,141,224,164,164,224,164,190,224,164,176,224,164,168,224,164,191,224, +164,176,224,165,141,224,164,174,224,164,190,224,164,163,224,164,178,224,164,191, +224,164,174,224,164,191,224,164,159,224,165,135,224,164,161,100,101,115,99,114, +105,112,116,105,111,110,34,32,99,111,110,116,101,110,116,61,34,100,111,99,117, +109,101,110,116,46,108,111,99,97,116,105,111,110,46,112,114,111,116,46,103,101, +116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,60,33,68,79 +,67,84,89,80,69,32,104,116,109,108,62,10,60,104,116,109,108,32,60,109,101,116,97 +,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,58,117,114,108,34,32 +,99,111,110,116,101,110,116,61,34,104,116,116,112,58,47,47,46,99,115,115,34,32, +114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,115,116,121,108,101 +,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,62,116,121,112,101,61 +,34,116,101,120,116,47,99,115,115,34,32,104,114,101,102,61,34,119,51,46,111,114, +103,47,49,57,57,57,47,120,104,116,109,108,34,32,120,109,108,116,121,112,101,61, +34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,109,101,116,104 +,111,100,61,34,103,101,116,34,32,97,99,116,105,111,110,61,34,108,105,110,107,32, +114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,32,61,32,100,111 +,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,116,121,112, +101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,34,32,47,62,99,101,108,108 +,112,97,100,100,105,110,103,61,34,48,34,32,99,101,108,108,115,112,46,99,115,115, +34,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,60,47,97,62,60, +47,108,105,62,60,108,105,62,60,97,32,104,114,101,102,61,34,34,32,119,105,100,116 +,104,61,34,49,34,32,104,101,105,103,104,116,61,34,49,34,34,62,60,97,32,104,114, +101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,115,116,121,108,101,61,34, +100,105,115,112,108,97,121,58,110,111,110,101,59,34,62,97,108,116,101,114,110,97 +,116,101,34,32,116,121,112,101,61,34,97,112,112,108,105,45,47,47,87,51,67,47,47, +68,84,68,32,88,72,84,77,76,32,49,46,48,32,101,108,108,115,112,97,99,105,110,103, +61,34,48,34,32,99,101,108,108,112,97,100,32,116,121,112,101,61,34,104,105,100, +100,101,110,34,32,118,97,108,117,101,61,34,47,97,62,38,110,98,115,112,59,60,115, +112,97,110,32,114,111,108,101,61,34,115,10,60,105,110,112,117,116,32,116,121,112 +,101,61,34,104,105,100,100,101,110,34,32,108,97,110,103,117,97,103,101,61,34,74, +97,118,97,83,99,114,105,112,116,34,32,32,100,111,99,117,109,101,110,116,46,103, +101,116,69,108,101,109,101,110,116,115,66,103,61,34,48,34,32,99,101,108,108,115, +112,97,99,105,110,103,61,34,48,34,32,121,112,101,61,34,116,101,120,116,47,99,115 +,115,34,32,109,101,100,105,97,61,34,116,121,112,101,61,39,116,101,120,116,47,106 +,97,118,97,115,99,114,105,112,116,39,119,105,116,104,32,116,104,101,32,101,120, +99,101,112,116,105,111,110,32,111,102,32,121,112,101,61,34,116,101,120,116,47,99 +,115,115,34,32,114,101,108,61,34,115,116,32,104,101,105,103,104,116,61,34,49,34, +32,119,105,100,116,104,61,34,49,34,32,61,39,43,101,110,99,111,100,101,85,82,73, +67,111,109,112,111,110,101,110,116,40,60,108,105,110,107,32,114,101,108,61,34,97 +,108,116,101,114,110,97,116,101,34,32,10,98,111,100,121,44,32,116,114,44,32,105, +110,112,117,116,44,32,116,101,120,116,109,101,116,97,32,110,97,109,101,61,34,114 +,111,98,111,116,115,34,32,99,111,110,109,101,116,104,111,100,61,34,112,111,115, +116,34,32,97,99,116,105,111,110,61,34,62,10,60,97,32,104,114,101,102,61,34,104, +116,116,112,58,47,47,119,119,119,46,99,115,115,34,32,114,101,108,61,34,115,116, +121,108,101,115,104,101,101,116,34,32,60,47,100,105,118,62,60,47,100,105,118,62, +60,100,105,118,32,99,108,97,115,115,108,97,110,103,117,97,103,101,61,34,106,97, +118,97,115,99,114,105,112,116,34,62,97,114,105,97,45,104,105,100,100,101,110,61, +34,116,114,117,101,34,62,194,183,60,114,105,112,116,34,32,116,121,112,101,61,34, +116,101,120,116,47,106,97,118,97,115,108,61,48,59,125,41,40,41,59,10,40,102,117, +110,99,116,105,111,110,40,41,123,98,97,99,107,103,114,111,117,110,100,45,105,109 +,97,103,101,58,32,117,114,108,40,47,97,62,60,47,108,105,62,60,108,105,62,60,97, +32,104,114,101,102,61,34,104,9,9,60,108,105,62,60,97,32,104,114,101,102,61,34, +104,116,116,112,58,47,47,97,116,111,114,34,32,97,114,105,97,45,104,105,100,100, +101,110,61,34,116,114,117,62,32,60,97,32,104,114,101,102,61,34,104,116,116,112, +58,47,47,119,119,119,46,108,97,110,103,117,97,103,101,61,34,106,97,118,97,115,99 +,114,105,112,116,34,32,47,111,112,116,105,111,110,62,10,60,111,112,116,105,111, +110,32,118,97,108,117,101,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118, +32,99,108,97,115,115,61,114,97,116,111,114,34,32,97,114,105,97,45,104,105,100, +100,101,110,61,34,116,114,101,61,40,110,101,119,32,68,97,116,101,41,46,103,101, +116,84,105,109,101,40,41,112,111,114,116,117,103,117,195,170,115,32,40,100,111, +32,66,114,97,115,105,108,41,208,190,209,128,208,179,208,176,208,189,208,184,208, +183,208,176,209,134,208,184,208,184,208,178,208,190,208,183,208,188,208,190,208, +182,208,189,208,190,209,129,209,130,209,140,208,190,208,177,209,128,208,176,208, +183,208,190,208,178,208,176,208,189,208,184,209,143,209,128,208,181,208,179,208, +184,209,129,209,130,209,128,208,176,209,134,208,184,208,184,208,178,208,190,208, +183,208,188,208,190,208,182,208,189,208,190,209,129,209,130,208,184,208,190,208, +177,209,143,208,183,208,176,209,130,208,181,208,187,209,140,208,189,208,176,60, +33,68,79,67,84,89,80,69,32,104,116,109,108,32,80,85,66,76,73,67,32,34,110,116,45 +,84,121,112,101,34,32,99,111,110,116,101,110,116,61,34,116,101,120,116,47,60,109 +,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,116,101, +114,97,110,115,105,116,105,111,110,97,108,47,47,69,78,34,32,34,104,116,116,112, +58,60,104,116,109,108,32,120,109,108,110,115,61,34,104,116,116,112,58,47,47,119, +119,119,45,47,47,87,51,67,47,47,68,84,68,32,88,72,84,77,76,32,49,46,48,32,84,68, +84,68,47,120,104,116,109,108,49,45,116,114,97,110,115,105,116,105,111,110,97,108 +,47,47,119,119,119,46,119,51,46,111,114,103,47,84,82,47,120,104,116,109,108,49, +47,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116, +39,59,60,109,101,116,97,32,110,97,109,101,61,34,100,101,115,99,114,105,112,116, +105,111,110,112,97,114,101,110,116,78,111,100,101,46,105,110,115,101,114,116,66, +101,102,111,114,101,60,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100, +100,101,110,34,32,110,97,106,115,34,32,116,121,112,101,61,34,116,101,120,116,47, +106,97,118,97,115,99,114,105,40,100,111,99,117,109,101,110,116,41,46,114,101,97, +100,121,40,102,117,110,99,116,105,115,99,114,105,112,116,32,116,121,112,101,61, +34,116,101,120,116,47,106,97,118,97,115,105,109,97,103,101,34,32,99,111,110,116, +101,110,116,61,34,104,116,116,112,58,47,47,85,65,45,67,111,109,112,97,116,105,98 +,108,101,34,32,99,111,110,116,101,110,116,61,116,109,108,59,32,99,104,97,114,115 +,101,116,61,117,116,102,45,56,34,32,47,62,10,108,105,110,107,32,114,101,108,61, +34,115,104,111,114,116,99,117,116,32,105,99,111,110,60,108,105,110,107,32,114, +101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,60,47,115,99,114,105 +,112,116,62,10,60,115,99,114,105,112,116,32,116,121,112,101,61,61,32,100,111,99, +117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,60,97,32,116 +,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,104,114,101,102,61,32,100, +111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,66,105, +110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61 +,97,46,116,121,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114, +105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110, +97,109,101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56, +34,32,47,62,100,116,100,34,62,10,60,104,116,109,108,32,120,109,108,110,115,61,34 +,104,116,116,112,45,47,47,87,51,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49, +32,84,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,115,99,114,105,112, +116,39,41,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110, +34,32,110,97,109,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120, +116,47,106,97,118,97,115,34,32,115,116,121,108,101,61,34,100,105,115,112,108,97, +121,58,110,111,110,101,59,34,62,100,111,99,117,109,101,110,116,46,103,101,116,69 +,108,101,109,101,110,116,66,121,73,100,40,61,100,111,99,117,109,101,110,116,46, +99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,32,116,121,112,101,61,39, +116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,105,110,112,117,116, +32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61,34,100,46,103, +101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,115,110 +,105,99,97,108,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119, +46,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,32,84,114,97,110,115,105,116, +60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34 +,62,10,10,60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99, +115,115,34,62,105,111,110,97,108,46,100,116,100,34,62,10,60,104,116,109,108,32, +120,109,108,110,115,61,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110, +116,101,110,116,45,84,121,112,101,100,105,110,103,61,34,48,34,32,99,101,108,108, +115,112,97,99,105,110,103,61,34,48,34,104,116,109,108,59,32,99,104,97,114,115, +101,116,61,117,116,102,45,56,34,32,47,62,10,32,115,116,121,108,101,61,34,100,105 +,115,112,108,97,121,58,110,111,110,101,59,34,62,60,60,108,105,62,60,97,32,104, +114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,32,116,121,112,101,61, +39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,62,208,180,208,181 +,209,143,209,130,208,181,208,187,209,140,208,189,208,190,209,129,209,130,208,184 +,209,129,208,190,208,190,209,130,208,178,208,181,209,130,209,129,209,130,208,178 +,208,184,208,184,208,191,209,128,208,190,208,184,208,183,208,178,208,190,208,180 +,209,129,209,130,208,178,208,176,208,177,208,181,208,183,208,190,208,191,208,176 +,209,129,208,189,208,190,209,129,209,130,208,184,224,164,170,224,165,129,224,164 +,184,224,165,141,224,164,164,224,164,191,224,164,149,224,164,190,224,164,149,224 +,164,190,224,164,130,224,164,151,224,165,141,224,164,176,224,165,135,224,164,184 +,224,164,137,224,164,168,224,165,141,224,164,185,224,165,139,224,164,130,224,164 +,168,224,165,135,224,164,181,224,164,191,224,164,167,224,164,190,224,164,168,224 +,164,184,224,164,173,224,164,190,224,164,171,224,164,191,224,164,149,224,165,141 +,224,164,184,224,164,191,224,164,130,224,164,151,224,164,184,224,165,129,224,164 +,176,224,164,149,224,165,141,224,164,183,224,164,191,224,164,164,224,164,149,224 +,165,137,224,164,170,224,165,128,224,164,176,224,164,190,224,164,135,224,164,159 +,224,164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164 +,170,224,164,168,224,164,149,224,164,190,224,164,176,224,165,141,224,164,176,224 +,164,181,224,164,190,224,164,136,224,164,184,224,164,149,224,165,141,224,164,176 +,224,164,191,224,164,175,224,164,164,224,164,190 +} +; +#endif /* !BROTLI_EXTERNAL_DICTIONARY_DATA */ + +static BrotliDictionary kBrotliDictionary = { + /* size_bits_by_length */ + { + 0, 0, 0, 0, 10, 10, 11, 11, + 10, 10, 10, 10, 10, 9, 9, 8, + 7, 7, 8, 7, 7, 6, 6, 5, + 5, 0, 0, 0, 0, 0, 0, 0 + }, + + /* offsets_by_length */ + { + 0, 0, 0, 0, 0, 4096, 9216, 21504, + 35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864, + 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280, + 122016, 122784, 122784, 122784, 122784, 122784, 122784, 122784 + }, + + /* data_size == sizeof(kBrotliDictionaryData) */ + 122784, + + /* data */ +#ifdef BROTLI_EXTERNAL_DICTIONARY_DATA + NULL +#else + kBrotliDictionaryData +#endif +}; + +const BrotliDictionary* BrotliGetDictionary() { + return &kBrotliDictionary; +} + +void BrotliSetDictionaryData(const uint8_t* data) { + if (!!data && !kBrotliDictionary.data) { + kBrotliDictionary.data = data; + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/common/dictionary.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/common/dictionary.h new file mode 100644 index 00000000000..3fa33916d93 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/common/dictionary.h @@ -0,0 +1,64 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Collection of static dictionary words. */ + +#ifndef BROTLI_COMMON_DICTIONARY_H_ +#define BROTLI_COMMON_DICTIONARY_H_ + +#include <brotli/port.h> +#include <brotli/types.h> + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +typedef struct BrotliDictionary { + /** + * Number of bits to encode index of dictionary word in a bucket. + * + * Specification: Appendix A. Static Dictionary Data + * + * Words in a dictionary are bucketed by length. + * @c 0 means that there are no words of a given length. + * Dictionary consists of words with length of [4..24] bytes. + * Values at [0..3] and [25..31] indices should not be addressed. + */ + uint8_t size_bits_by_length[32]; + + /* assert(offset[i + 1] == offset[i] + (bits[i] ? (i << bits[i]) : 0)) */ + uint32_t offsets_by_length[32]; + + /* assert(data_size == offsets_by_length[31]) */ + size_t data_size; + + /* Data array is not bound, and should obey to size_bits_by_length values. + Specified size matches default (RFC 7932) dictionary. Its size is + defined by data_size */ + const uint8_t* data; +} BrotliDictionary; + +BROTLI_COMMON_API extern const BrotliDictionary* BrotliGetDictionary(void); + +/** + * Sets dictionary data. + * + * When dictionary data is already set / present, this method is no-op. + * + * Dictionary data MUST be provided before BrotliGetDictionary is invoked. + * This method is used ONLY in multi-client environment (e.g. C + Java), + * to reduce storage by sharing single dictionary between implementations. + */ +BROTLI_COMMON_API void BrotliSetDictionaryData(const uint8_t* data); + +#define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4 +#define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24 + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_COMMON_DICTIONARY_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/common/version.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/common/version.h new file mode 100644 index 00000000000..38946e6147b --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/common/version.h @@ -0,0 +1,26 @@ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Version definition. */ + +#ifndef BROTLI_COMMON_VERSION_H_ +#define BROTLI_COMMON_VERSION_H_ + +/* This macro should only be used when library is compiled together with client. + If library is dynamically linked, use BrotliDecoderVersion and + BrotliEncoderVersion methods. */ + +/* Semantic version, calculated as (MAJOR << 24) | (MINOR << 12) | PATCH */ +#define BROTLI_VERSION 0x1000002 + +/* This macro is used by build system to produce Libtool-friendly soname. See + https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html + */ + +/* ABI version, calculated as (CURRENT << 24) | (REVISION << 12) | AGE */ +#define BROTLI_ABI_VERSION 0x1002000 + +#endif /* BROTLI_COMMON_VERSION_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references.c new file mode 100644 index 00000000000..3ac7f2f36a5 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references.c @@ -0,0 +1,134 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function to find backward reference copies. */ + +#include "./backward_references.h" + +#include "../common/constants.h" +#include "../common/dictionary.h" +#include <brotli/types.h> +#include "./command.h" +#include "./dictionary_hash.h" +#include "./memory.h" +#include "./port.h" +#include "./quality.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static BROTLI_INLINE size_t ComputeDistanceCode(size_t distance, + size_t max_distance, + const int* dist_cache) { + if (distance <= max_distance) { + size_t distance_plus_3 = distance + 3; + size_t offset0 = distance_plus_3 - (size_t)dist_cache[0]; + size_t offset1 = distance_plus_3 - (size_t)dist_cache[1]; + if (distance == (size_t)dist_cache[0]) { + return 0; + } else if (distance == (size_t)dist_cache[1]) { + return 1; + } else if (offset0 < 7) { + return (0x9750468 >> (4 * offset0)) & 0xF; + } else if (offset1 < 7) { + return (0xFDB1ACE >> (4 * offset1)) & 0xF; + } else if (distance == (size_t)dist_cache[2]) { + return 2; + } else if (distance == (size_t)dist_cache[3]) { + return 3; + } + } + return distance + BROTLI_NUM_DISTANCE_SHORT_CODES - 1; +} + +#define EXPAND_CAT(a, b) CAT(a, b) +#define CAT(a, b) a ## b +#define FN(X) EXPAND_CAT(X, HASHER()) +#define EXPORT_FN(X) EXPAND_CAT(X, EXPAND_CAT(PREFIX(), HASHER())) +#define PREFIX() N + +#define HASHER() H2 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H3 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H4 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H5 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H6 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H40 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H41 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H42 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H54 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#undef PREFIX +#undef EXPORT_FN +#undef FN +#undef CAT +#undef EXPAND_CAT + +void BrotliCreateBackwardReferences(const BrotliDictionary* dictionary, + size_t num_bytes, + size_t position, + const uint8_t* ringbuffer, + size_t ringbuffer_mask, + const BrotliEncoderParams* params, + HasherHandle hasher, + int* dist_cache, + size_t* last_insert_len, + Command* commands, + size_t* num_commands, + size_t* num_literals) { + switch (params->hasher.type) { +#define CASE_(N) \ + case N: \ + CreateBackwardReferencesNH ## N(dictionary, \ + kStaticDictionaryHash, num_bytes, position, ringbuffer, \ + ringbuffer_mask, params, hasher, dist_cache, \ + last_insert_len, commands, num_commands, num_literals); \ + return; + FOR_GENERIC_HASHERS(CASE_) +#undef CASE_ + default: + break; + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references.h new file mode 100644 index 00000000000..7ad98813254 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references.h @@ -0,0 +1,39 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function to find backward reference copies. */ + +#ifndef BROTLI_ENC_BACKWARD_REFERENCES_H_ +#define BROTLI_ENC_BACKWARD_REFERENCES_H_ + +#include "../common/constants.h" +#include "../common/dictionary.h" +#include <brotli/types.h> +#include "./command.h" +#include "./hash.h" +#include "./port.h" +#include "./quality.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* "commands" points to the next output command to write to, "*num_commands" is + initially the total amount of commands output by previous + CreateBackwardReferences calls, and must be incremented by the amount written + by this call. */ +BROTLI_INTERNAL void BrotliCreateBackwardReferences( + const BrotliDictionary* dictionary, size_t num_bytes, size_t position, + const uint8_t* ringbuffer, size_t ringbuffer_mask, + const BrotliEncoderParams* params, HasherHandle hasher, int* dist_cache, + size_t* last_insert_len, Command* commands, size_t* num_commands, + size_t* num_literals); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_BACKWARD_REFERENCES_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references_hq.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references_hq.c new file mode 100644 index 00000000000..92ce8fbad70 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references_hq.c @@ -0,0 +1,805 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function to find backward reference copies. */ + +#include "./backward_references_hq.h" + +#include <string.h> /* memcpy, memset */ + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./command.h" +#include "./fast_log.h" +#include "./find_match_length.h" +#include "./literal_cost.h" +#include "./memory.h" +#include "./port.h" +#include "./prefix.h" +#include "./quality.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static const float kInfinity = 1.7e38f; /* ~= 2 ^ 127 */ + +static const uint32_t kDistanceCacheIndex[] = { + 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, +}; +static const int kDistanceCacheOffset[] = { + 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3 +}; + +void BrotliInitZopfliNodes(ZopfliNode* array, size_t length) { + ZopfliNode stub; + size_t i; + stub.length = 1; + stub.distance = 0; + stub.insert_length = 0; + stub.u.cost = kInfinity; + for (i = 0; i < length; ++i) array[i] = stub; +} + +static BROTLI_INLINE uint32_t ZopfliNodeCopyLength(const ZopfliNode* self) { + return self->length & 0xffffff; +} + +static BROTLI_INLINE uint32_t ZopfliNodeLengthCode(const ZopfliNode* self) { + const uint32_t modifier = self->length >> 24; + return ZopfliNodeCopyLength(self) + 9u - modifier; +} + +static BROTLI_INLINE uint32_t ZopfliNodeCopyDistance(const ZopfliNode* self) { + return self->distance & 0x7ffffff; +} + +static BROTLI_INLINE uint32_t ZopfliNodeDistanceCode(const ZopfliNode* self) { + const uint32_t short_code = self->distance >> 27; + return short_code == 0 ? + ZopfliNodeCopyDistance(self) + BROTLI_NUM_DISTANCE_SHORT_CODES - 1 : + short_code - 1; +} + +static BROTLI_INLINE uint32_t ZopfliNodeCommandLength(const ZopfliNode* self) { + return ZopfliNodeCopyLength(self) + self->insert_length; +} + +/* Histogram based cost model for zopflification. */ +typedef struct ZopfliCostModel { + /* The insert and copy length symbols. */ + float cost_cmd_[BROTLI_NUM_COMMAND_SYMBOLS]; + float cost_dist_[BROTLI_NUM_DISTANCE_SYMBOLS]; + /* Cumulative costs of literals per position in the stream. */ + float* literal_costs_; + float min_cost_cmd_; + size_t num_bytes_; +} ZopfliCostModel; + +static void InitZopfliCostModel( + MemoryManager* m, ZopfliCostModel* self, size_t num_bytes) { + self->num_bytes_ = num_bytes; + self->literal_costs_ = BROTLI_ALLOC(m, float, num_bytes + 2); + if (BROTLI_IS_OOM(m)) return; +} + +static void CleanupZopfliCostModel(MemoryManager* m, ZopfliCostModel* self) { + BROTLI_FREE(m, self->literal_costs_); +} + +static void SetCost(const uint32_t* histogram, size_t histogram_size, + float* cost) { + size_t sum = 0; + float log2sum; + size_t i; + for (i = 0; i < histogram_size; i++) { + sum += histogram[i]; + } + log2sum = (float)FastLog2(sum); + for (i = 0; i < histogram_size; i++) { + if (histogram[i] == 0) { + cost[i] = log2sum + 2; + continue; + } + + /* Shannon bits for this symbol. */ + cost[i] = log2sum - (float)FastLog2(histogram[i]); + + /* Cannot be coded with less than 1 bit */ + if (cost[i] < 1) cost[i] = 1; + } +} + +static void ZopfliCostModelSetFromCommands(ZopfliCostModel* self, + size_t position, + const uint8_t* ringbuffer, + size_t ringbuffer_mask, + const Command* commands, + size_t num_commands, + size_t last_insert_len) { + uint32_t histogram_literal[BROTLI_NUM_LITERAL_SYMBOLS]; + uint32_t histogram_cmd[BROTLI_NUM_COMMAND_SYMBOLS]; + uint32_t histogram_dist[BROTLI_NUM_DISTANCE_SYMBOLS]; + float cost_literal[BROTLI_NUM_LITERAL_SYMBOLS]; + size_t pos = position - last_insert_len; + float min_cost_cmd = kInfinity; + size_t i; + float* cost_cmd = self->cost_cmd_; + + memset(histogram_literal, 0, sizeof(histogram_literal)); + memset(histogram_cmd, 0, sizeof(histogram_cmd)); + memset(histogram_dist, 0, sizeof(histogram_dist)); + + for (i = 0; i < num_commands; i++) { + size_t inslength = commands[i].insert_len_; + size_t copylength = CommandCopyLen(&commands[i]); + size_t distcode = commands[i].dist_prefix_; + size_t cmdcode = commands[i].cmd_prefix_; + size_t j; + + histogram_cmd[cmdcode]++; + if (cmdcode >= 128) histogram_dist[distcode]++; + + for (j = 0; j < inslength; j++) { + histogram_literal[ringbuffer[(pos + j) & ringbuffer_mask]]++; + } + + pos += inslength + copylength; + } + + SetCost(histogram_literal, BROTLI_NUM_LITERAL_SYMBOLS, cost_literal); + SetCost(histogram_cmd, BROTLI_NUM_COMMAND_SYMBOLS, cost_cmd); + SetCost(histogram_dist, BROTLI_NUM_DISTANCE_SYMBOLS, self->cost_dist_); + + for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) { + min_cost_cmd = BROTLI_MIN(float, min_cost_cmd, cost_cmd[i]); + } + self->min_cost_cmd_ = min_cost_cmd; + + { + float* literal_costs = self->literal_costs_; + size_t num_bytes = self->num_bytes_; + literal_costs[0] = 0.0; + for (i = 0; i < num_bytes; ++i) { + literal_costs[i + 1] = literal_costs[i] + + cost_literal[ringbuffer[(position + i) & ringbuffer_mask]]; + } + } +} + +static void ZopfliCostModelSetFromLiteralCosts(ZopfliCostModel* self, + size_t position, + const uint8_t* ringbuffer, + size_t ringbuffer_mask) { + float* literal_costs = self->literal_costs_; + float* cost_dist = self->cost_dist_; + float* cost_cmd = self->cost_cmd_; + size_t num_bytes = self->num_bytes_; + size_t i; + BrotliEstimateBitCostsForLiterals(position, num_bytes, ringbuffer_mask, + ringbuffer, &literal_costs[1]); + literal_costs[0] = 0.0; + for (i = 0; i < num_bytes; ++i) { + literal_costs[i + 1] += literal_costs[i]; + } + for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) { + cost_cmd[i] = (float)FastLog2(11 + (uint32_t)i); + } + for (i = 0; i < BROTLI_NUM_DISTANCE_SYMBOLS; ++i) { + cost_dist[i] = (float)FastLog2(20 + (uint32_t)i); + } + self->min_cost_cmd_ = (float)FastLog2(11); +} + +static BROTLI_INLINE float ZopfliCostModelGetCommandCost( + const ZopfliCostModel* self, uint16_t cmdcode) { + return self->cost_cmd_[cmdcode]; +} + +static BROTLI_INLINE float ZopfliCostModelGetDistanceCost( + const ZopfliCostModel* self, size_t distcode) { + return self->cost_dist_[distcode]; +} + +static BROTLI_INLINE float ZopfliCostModelGetLiteralCosts( + const ZopfliCostModel* self, size_t from, size_t to) { + return self->literal_costs_[to] - self->literal_costs_[from]; +} + +static BROTLI_INLINE float ZopfliCostModelGetMinCostCmd( + const ZopfliCostModel* self) { + return self->min_cost_cmd_; +} + +/* REQUIRES: len >= 2, start_pos <= pos */ +/* REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity */ +/* Maintains the "ZopfliNode array invariant". */ +static BROTLI_INLINE void UpdateZopfliNode(ZopfliNode* nodes, size_t pos, + size_t start_pos, size_t len, size_t len_code, size_t dist, + size_t short_code, float cost) { + ZopfliNode* next = &nodes[pos + len]; + next->length = (uint32_t)(len | ((len + 9u - len_code) << 24)); + next->distance = (uint32_t)(dist | (short_code << 27)); + next->insert_length = (uint32_t)(pos - start_pos); + next->u.cost = cost; +} + +typedef struct PosData { + size_t pos; + int distance_cache[4]; + float costdiff; + float cost; +} PosData; + +/* Maintains the smallest 8 cost difference together with their positions */ +typedef struct StartPosQueue { + PosData q_[8]; + size_t idx_; +} StartPosQueue; + +static BROTLI_INLINE void InitStartPosQueue(StartPosQueue* self) { + self->idx_ = 0; +} + +static size_t StartPosQueueSize(const StartPosQueue* self) { + return BROTLI_MIN(size_t, self->idx_, 8); +} + +static void StartPosQueuePush(StartPosQueue* self, const PosData* posdata) { + size_t offset = ~(self->idx_++) & 7; + size_t len = StartPosQueueSize(self); + size_t i; + PosData* q = self->q_; + q[offset] = *posdata; + /* Restore the sorted order. In the list of |len| items at most |len - 1| + adjacent element comparisons / swaps are required. */ + for (i = 1; i < len; ++i) { + if (q[offset & 7].costdiff > q[(offset + 1) & 7].costdiff) { + BROTLI_SWAP(PosData, q, offset & 7, (offset + 1) & 7); + } + ++offset; + } +} + +static const PosData* StartPosQueueAt(const StartPosQueue* self, size_t k) { + return &self->q_[(k - self->idx_) & 7]; +} + +/* Returns the minimum possible copy length that can improve the cost of any */ +/* future position. */ +static size_t ComputeMinimumCopyLength(const float start_cost, + const ZopfliNode* nodes, + const size_t num_bytes, + const size_t pos) { + /* Compute the minimum possible cost of reaching any future position. */ + float min_cost = start_cost; + size_t len = 2; + size_t next_len_bucket = 4; + size_t next_len_offset = 10; + while (pos + len <= num_bytes && nodes[pos + len].u.cost <= min_cost) { + /* We already reached (pos + len) with no more cost than the minimum + possible cost of reaching anything from this pos, so there is no point in + looking for lengths <= len. */ + ++len; + if (len == next_len_offset) { + /* We reached the next copy length code bucket, so we add one more + extra bit to the minimum cost. */ + min_cost += 1.0f; + next_len_offset += next_len_bucket; + next_len_bucket *= 2; + } + } + return len; +} + +/* REQUIRES: nodes[pos].cost < kInfinity + REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */ +static uint32_t ComputeDistanceShortcut(const size_t block_start, + const size_t pos, + const size_t max_backward, + const size_t gap, + const ZopfliNode* nodes) { + const size_t clen = ZopfliNodeCopyLength(&nodes[pos]); + const size_t ilen = nodes[pos].insert_length; + const size_t dist = ZopfliNodeCopyDistance(&nodes[pos]); + /* Since |block_start + pos| is the end position of the command, the copy part + starts from |block_start + pos - clen|. Distances that are greater than + this or greater than |max_backward| are static dictionary references, and + do not update the last distances. Also distance code 0 (last distance) + does not update the last distances. */ + if (pos == 0) { + return 0; + } else if (dist + clen <= block_start + pos + gap && + dist <= max_backward + gap && + ZopfliNodeDistanceCode(&nodes[pos]) > 0) { + return (uint32_t)pos; + } else { + return nodes[pos - clen - ilen].u.shortcut; + } +} + +/* Fills in dist_cache[0..3] with the last four distances (as defined by + Section 4. of the Spec) that would be used at (block_start + pos) if we + used the shortest path of commands from block_start, computed from + nodes[0..pos]. The last four distances at block_start are in + starting_dist_cache[0..3]. + REQUIRES: nodes[pos].cost < kInfinity + REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */ +static void ComputeDistanceCache(const size_t pos, + const int* starting_dist_cache, + const ZopfliNode* nodes, + int* dist_cache) { + int idx = 0; + size_t p = nodes[pos].u.shortcut; + while (idx < 4 && p > 0) { + const size_t ilen = nodes[p].insert_length; + const size_t clen = ZopfliNodeCopyLength(&nodes[p]); + const size_t dist = ZopfliNodeCopyDistance(&nodes[p]); + dist_cache[idx++] = (int)dist; + /* Because of prerequisite, p >= clen + ilen >= 2. */ + p = nodes[p - clen - ilen].u.shortcut; + } + for (; idx < 4; ++idx) { + dist_cache[idx] = *starting_dist_cache++; + } +} + +/* Maintains "ZopfliNode array invariant" and pushes node to the queue, if it + is eligible. */ +static void EvaluateNode( + const size_t block_start, const size_t pos, const size_t max_backward_limit, + const size_t gap, const int* starting_dist_cache, + const ZopfliCostModel* model, StartPosQueue* queue, ZopfliNode* nodes) { + /* Save cost, because ComputeDistanceCache invalidates it. */ + float node_cost = nodes[pos].u.cost; + nodes[pos].u.shortcut = ComputeDistanceShortcut( + block_start, pos, max_backward_limit, gap, nodes); + if (node_cost <= ZopfliCostModelGetLiteralCosts(model, 0, pos)) { + PosData posdata; + posdata.pos = pos; + posdata.cost = node_cost; + posdata.costdiff = node_cost - + ZopfliCostModelGetLiteralCosts(model, 0, pos); + ComputeDistanceCache( + pos, starting_dist_cache, nodes, posdata.distance_cache); + StartPosQueuePush(queue, &posdata); + } +} + +/* Returns longest copy length. */ +static size_t UpdateNodes( + const size_t num_bytes, const size_t block_start, const size_t pos, + const uint8_t* ringbuffer, const size_t ringbuffer_mask, + const BrotliEncoderParams* params, const size_t max_backward_limit, + const int* starting_dist_cache, const size_t num_matches, + const BackwardMatch* matches, const ZopfliCostModel* model, + StartPosQueue* queue, ZopfliNode* nodes) { + const size_t cur_ix = block_start + pos; + const size_t cur_ix_masked = cur_ix & ringbuffer_mask; + const size_t max_distance = BROTLI_MIN(size_t, cur_ix, max_backward_limit); + const size_t max_len = num_bytes - pos; + const size_t max_zopfli_len = MaxZopfliLen(params); + const size_t max_iters = MaxZopfliCandidates(params); + size_t min_len; + size_t result = 0; + size_t k; + size_t gap = 0; + + EvaluateNode(block_start, pos, max_backward_limit, gap, starting_dist_cache, + model, queue, nodes); + + { + const PosData* posdata = StartPosQueueAt(queue, 0); + float min_cost = (posdata->cost + ZopfliCostModelGetMinCostCmd(model) + + ZopfliCostModelGetLiteralCosts(model, posdata->pos, pos)); + min_len = ComputeMinimumCopyLength(min_cost, nodes, num_bytes, pos); + } + + /* Go over the command starting positions in order of increasing cost + difference. */ + for (k = 0; k < max_iters && k < StartPosQueueSize(queue); ++k) { + const PosData* posdata = StartPosQueueAt(queue, k); + const size_t start = posdata->pos; + const uint16_t inscode = GetInsertLengthCode(pos - start); + const float start_costdiff = posdata->costdiff; + const float base_cost = start_costdiff + (float)GetInsertExtra(inscode) + + ZopfliCostModelGetLiteralCosts(model, 0, pos); + + /* Look for last distance matches using the distance cache from this + starting position. */ + size_t best_len = min_len - 1; + size_t j = 0; + for (; j < BROTLI_NUM_DISTANCE_SHORT_CODES && best_len < max_len; ++j) { + const size_t idx = kDistanceCacheIndex[j]; + const size_t backward = + (size_t)(posdata->distance_cache[idx] + kDistanceCacheOffset[j]); + size_t prev_ix = cur_ix - backward; + size_t len = 0; + uint8_t continuation = ringbuffer[cur_ix_masked + best_len]; + if (cur_ix_masked + best_len > ringbuffer_mask) { + break; + } + if (BROTLI_PREDICT_FALSE(backward > max_distance + gap)) { + continue; + } + if (backward <= max_distance) { + if (prev_ix >= cur_ix) { + continue; + } + + prev_ix &= ringbuffer_mask; + if (prev_ix + best_len > ringbuffer_mask || + continuation != ringbuffer[prev_ix + best_len]) { + continue; + } + len = FindMatchLengthWithLimit(&ringbuffer[prev_ix], + &ringbuffer[cur_ix_masked], + max_len); + } else { + continue; + } + { + const float dist_cost = base_cost + + ZopfliCostModelGetDistanceCost(model, j); + size_t l; + for (l = best_len + 1; l <= len; ++l) { + const uint16_t copycode = GetCopyLengthCode(l); + const uint16_t cmdcode = + CombineLengthCodes(inscode, copycode, j == 0); + const float cost = (cmdcode < 128 ? base_cost : dist_cost) + + (float)GetCopyExtra(copycode) + + ZopfliCostModelGetCommandCost(model, cmdcode); + if (cost < nodes[pos + l].u.cost) { + UpdateZopfliNode(nodes, pos, start, l, l, backward, j + 1, cost); + result = BROTLI_MAX(size_t, result, l); + } + best_len = l; + } + } + } + + /* At higher iterations look only for new last distance matches, since + looking only for new command start positions with the same distances + does not help much. */ + if (k >= 2) continue; + + { + /* Loop through all possible copy lengths at this position. */ + size_t len = min_len; + for (j = 0; j < num_matches; ++j) { + BackwardMatch match = matches[j]; + size_t dist = match.distance; + BROTLI_BOOL is_dictionary_match = + TO_BROTLI_BOOL(dist > max_distance + gap); + /* We already tried all possible last distance matches, so we can use + normal distance code here. */ + size_t dist_code = dist + BROTLI_NUM_DISTANCE_SHORT_CODES - 1; + uint16_t dist_symbol; + uint32_t distextra; + uint32_t distnumextra; + float dist_cost; + size_t max_match_len; + PrefixEncodeCopyDistance(dist_code, 0, 0, &dist_symbol, &distextra); + distnumextra = distextra >> 24; + dist_cost = base_cost + (float)distnumextra + + ZopfliCostModelGetDistanceCost(model, dist_symbol); + + /* Try all copy lengths up until the maximum copy length corresponding + to this distance. If the distance refers to the static dictionary, or + the maximum length is long enough, try only one maximum length. */ + max_match_len = BackwardMatchLength(&match); + if (len < max_match_len && + (is_dictionary_match || max_match_len > max_zopfli_len)) { + len = max_match_len; + } + for (; len <= max_match_len; ++len) { + const size_t len_code = + is_dictionary_match ? BackwardMatchLengthCode(&match) : len; + const uint16_t copycode = GetCopyLengthCode(len_code); + const uint16_t cmdcode = CombineLengthCodes(inscode, copycode, 0); + const float cost = dist_cost + (float)GetCopyExtra(copycode) + + ZopfliCostModelGetCommandCost(model, cmdcode); + if (cost < nodes[pos + len].u.cost) { + UpdateZopfliNode(nodes, pos, start, len, len_code, dist, 0, cost); + result = BROTLI_MAX(size_t, result, len); + } + } + } + } + } + return result; +} + +static size_t ComputeShortestPathFromNodes(size_t num_bytes, + ZopfliNode* nodes) { + size_t index = num_bytes; + size_t num_commands = 0; + while (nodes[index].insert_length == 0 && nodes[index].length == 1) --index; + nodes[index].u.next = BROTLI_UINT32_MAX; + while (index != 0) { + size_t len = ZopfliNodeCommandLength(&nodes[index]); + index -= len; + nodes[index].u.next = (uint32_t)len; + num_commands++; + } + return num_commands; +} + +/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */ +void BrotliZopfliCreateCommands(const size_t num_bytes, + const size_t block_start, + const size_t max_backward_limit, + const ZopfliNode* nodes, + int* dist_cache, + size_t* last_insert_len, + const BrotliEncoderParams* params, + Command* commands, + size_t* num_literals) { + size_t pos = 0; + uint32_t offset = nodes[0].u.next; + size_t i; + size_t gap = 0; + BROTLI_UNUSED(params); + for (i = 0; offset != BROTLI_UINT32_MAX; i++) { + const ZopfliNode* next = &nodes[pos + offset]; + size_t copy_length = ZopfliNodeCopyLength(next); + size_t insert_length = next->insert_length; + pos += insert_length; + offset = next->u.next; + if (i == 0) { + insert_length += *last_insert_len; + *last_insert_len = 0; + } + { + size_t distance = ZopfliNodeCopyDistance(next); + size_t len_code = ZopfliNodeLengthCode(next); + size_t max_distance = + BROTLI_MIN(size_t, block_start + pos, max_backward_limit); + BROTLI_BOOL is_dictionary = TO_BROTLI_BOOL(distance > max_distance + gap); + size_t dist_code = ZopfliNodeDistanceCode(next); + InitCommand(&commands[i], insert_length, + copy_length, (int)len_code - (int)copy_length, dist_code); + + if (!is_dictionary && dist_code > 0) { + dist_cache[3] = dist_cache[2]; + dist_cache[2] = dist_cache[1]; + dist_cache[1] = dist_cache[0]; + dist_cache[0] = (int)distance; + } + } + + *num_literals += insert_length; + pos += copy_length; + } + *last_insert_len += num_bytes - pos; +} + +static size_t ZopfliIterate(size_t num_bytes, + size_t position, + const uint8_t* ringbuffer, + size_t ringbuffer_mask, + const BrotliEncoderParams* params, + const size_t max_backward_limit, + const size_t gap, + const int* dist_cache, + const ZopfliCostModel* model, + const uint32_t* num_matches, + const BackwardMatch* matches, + ZopfliNode* nodes) { + const size_t max_zopfli_len = MaxZopfliLen(params); + StartPosQueue queue; + size_t cur_match_pos = 0; + size_t i; + nodes[0].length = 0; + nodes[0].u.cost = 0; + InitStartPosQueue(&queue); + for (i = 0; i + 3 < num_bytes; i++) { + size_t skip = UpdateNodes(num_bytes, position, i, ringbuffer, + ringbuffer_mask, params, max_backward_limit, dist_cache, + num_matches[i], &matches[cur_match_pos], model, &queue, nodes); + if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0; + cur_match_pos += num_matches[i]; + if (num_matches[i] == 1 && + BackwardMatchLength(&matches[cur_match_pos - 1]) > max_zopfli_len) { + skip = BROTLI_MAX(size_t, + BackwardMatchLength(&matches[cur_match_pos - 1]), skip); + } + if (skip > 1) { + skip--; + while (skip) { + i++; + if (i + 3 >= num_bytes) break; + EvaluateNode(position, i, max_backward_limit, gap, dist_cache, model, + &queue, nodes); + cur_match_pos += num_matches[i]; + skip--; + } + } + } + return ComputeShortestPathFromNodes(num_bytes, nodes); +} + +/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */ +size_t BrotliZopfliComputeShortestPath(MemoryManager* m, + const BrotliDictionary* dictionary, + size_t num_bytes, + size_t position, + const uint8_t* ringbuffer, + size_t ringbuffer_mask, + const BrotliEncoderParams* params, + const size_t max_backward_limit, + const int* dist_cache, + HasherHandle hasher, + ZopfliNode* nodes) { + const size_t max_zopfli_len = MaxZopfliLen(params); + ZopfliCostModel model; + StartPosQueue queue; + BackwardMatch matches[2 * (MAX_NUM_MATCHES_H10 + 64)]; + const size_t store_end = num_bytes >= StoreLookaheadH10() ? + position + num_bytes - StoreLookaheadH10() + 1 : position; + size_t i; + size_t gap = 0; + size_t lz_matches_offset = 0; + nodes[0].length = 0; + nodes[0].u.cost = 0; + InitZopfliCostModel(m, &model, num_bytes); + if (BROTLI_IS_OOM(m)) return 0; + ZopfliCostModelSetFromLiteralCosts( + &model, position, ringbuffer, ringbuffer_mask); + InitStartPosQueue(&queue); + for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; i++) { + const size_t pos = position + i; + const size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit); + size_t num_matches = FindAllMatchesH10(hasher, dictionary, ringbuffer, + ringbuffer_mask, pos, num_bytes - i, max_distance, gap, params, + &matches[lz_matches_offset]); + size_t skip; + if (num_matches > 0 && + BackwardMatchLength(&matches[num_matches - 1]) > max_zopfli_len) { + matches[0] = matches[num_matches - 1]; + num_matches = 1; + } + skip = UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask, + params, max_backward_limit, dist_cache, num_matches, matches, &model, + &queue, nodes); + if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0; + if (num_matches == 1 && BackwardMatchLength(&matches[0]) > max_zopfli_len) { + skip = BROTLI_MAX(size_t, BackwardMatchLength(&matches[0]), skip); + } + if (skip > 1) { + /* Add the tail of the copy to the hasher. */ + StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1, BROTLI_MIN( + size_t, pos + skip, store_end)); + skip--; + while (skip) { + i++; + if (i + HashTypeLengthH10() - 1 >= num_bytes) break; + EvaluateNode(position, i, max_backward_limit, gap, dist_cache, &model, + &queue, nodes); + skip--; + } + } + } + CleanupZopfliCostModel(m, &model); + return ComputeShortestPathFromNodes(num_bytes, nodes); +} + +void BrotliCreateZopfliBackwardReferences( + MemoryManager* m, const BrotliDictionary* dictionary, size_t num_bytes, + size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, + const BrotliEncoderParams* params, HasherHandle hasher, int* dist_cache, + size_t* last_insert_len, Command* commands, size_t* num_commands, + size_t* num_literals) { + const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin); + ZopfliNode* nodes; + nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1); + if (BROTLI_IS_OOM(m)) return; + BrotliInitZopfliNodes(nodes, num_bytes + 1); + *num_commands += BrotliZopfliComputeShortestPath(m, dictionary, num_bytes, + position, ringbuffer, ringbuffer_mask, params, max_backward_limit, + dist_cache, hasher, nodes); + if (BROTLI_IS_OOM(m)) return; + BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit, nodes, + dist_cache, last_insert_len, params, commands, num_literals); + BROTLI_FREE(m, nodes); +} + +void BrotliCreateHqZopfliBackwardReferences( + MemoryManager* m, const BrotliDictionary* dictionary, size_t num_bytes, + size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, + const BrotliEncoderParams* params, HasherHandle hasher, int* dist_cache, + size_t* last_insert_len, Command* commands, size_t* num_commands, + size_t* num_literals) { + const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin); + uint32_t* num_matches = BROTLI_ALLOC(m, uint32_t, num_bytes); + size_t matches_size = 4 * num_bytes; + const size_t store_end = num_bytes >= StoreLookaheadH10() ? + position + num_bytes - StoreLookaheadH10() + 1 : position; + size_t cur_match_pos = 0; + size_t i; + size_t orig_num_literals; + size_t orig_last_insert_len; + int orig_dist_cache[4]; + size_t orig_num_commands; + ZopfliCostModel model; + ZopfliNode* nodes; + BackwardMatch* matches = BROTLI_ALLOC(m, BackwardMatch, matches_size); + size_t gap = 0; + size_t shadow_matches = 0; + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; ++i) { + const size_t pos = position + i; + size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit); + size_t max_length = num_bytes - i; + size_t num_found_matches; + size_t cur_match_end; + size_t j; + /* Ensure that we have enough free slots. */ + BROTLI_ENSURE_CAPACITY(m, BackwardMatch, matches, matches_size, + cur_match_pos + MAX_NUM_MATCHES_H10 + shadow_matches); + if (BROTLI_IS_OOM(m)) return; + num_found_matches = FindAllMatchesH10(hasher, dictionary, ringbuffer, + ringbuffer_mask, pos, max_length, max_distance, gap, params, + &matches[cur_match_pos + shadow_matches]); + cur_match_end = cur_match_pos + num_found_matches; + for (j = cur_match_pos; j + 1 < cur_match_end; ++j) { + assert(BackwardMatchLength(&matches[j]) <= + BackwardMatchLength(&matches[j + 1])); + } + num_matches[i] = (uint32_t)num_found_matches; + if (num_found_matches > 0) { + const size_t match_len = BackwardMatchLength(&matches[cur_match_end - 1]); + if (match_len > MAX_ZOPFLI_LEN_QUALITY_11) { + const size_t skip = match_len - 1; + matches[cur_match_pos++] = matches[cur_match_end - 1]; + num_matches[i] = 1; + /* Add the tail of the copy to the hasher. */ + StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1, + BROTLI_MIN(size_t, pos + match_len, store_end)); + memset(&num_matches[i + 1], 0, skip * sizeof(num_matches[0])); + i += skip; + } else { + cur_match_pos = cur_match_end; + } + } + } + orig_num_literals = *num_literals; + orig_last_insert_len = *last_insert_len; + memcpy(orig_dist_cache, dist_cache, 4 * sizeof(dist_cache[0])); + orig_num_commands = *num_commands; + nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1); + if (BROTLI_IS_OOM(m)) return; + InitZopfliCostModel(m, &model, num_bytes); + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < 2; i++) { + BrotliInitZopfliNodes(nodes, num_bytes + 1); + if (i == 0) { + ZopfliCostModelSetFromLiteralCosts( + &model, position, ringbuffer, ringbuffer_mask); + } else { + ZopfliCostModelSetFromCommands(&model, position, ringbuffer, + ringbuffer_mask, commands, *num_commands - orig_num_commands, + orig_last_insert_len); + } + *num_commands = orig_num_commands; + *num_literals = orig_num_literals; + *last_insert_len = orig_last_insert_len; + memcpy(dist_cache, orig_dist_cache, 4 * sizeof(dist_cache[0])); + *num_commands += ZopfliIterate(num_bytes, position, ringbuffer, + ringbuffer_mask, params, max_backward_limit, gap, dist_cache, + &model, num_matches, matches, nodes); + BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit, + nodes, dist_cache, last_insert_len, params, commands, num_literals); + } + CleanupZopfliCostModel(m, &model); + BROTLI_FREE(m, nodes); + BROTLI_FREE(m, matches); + BROTLI_FREE(m, num_matches); +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references_hq.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references_hq.h new file mode 100644 index 00000000000..02bb2783db1 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references_hq.h @@ -0,0 +1,96 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function to find backward reference copies. */ + +#ifndef BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ +#define BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ + +#include "../common/constants.h" +#include "../common/dictionary.h" +#include <brotli/types.h> +#include "./command.h" +#include "./hash.h" +#include "./memory.h" +#include "./port.h" +#include "./quality.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +BROTLI_INTERNAL void BrotliCreateZopfliBackwardReferences( + MemoryManager* m, const BrotliDictionary* dictionary, size_t num_bytes, + size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, + const BrotliEncoderParams* params, HasherHandle hasher, int* dist_cache, + size_t* last_insert_len, Command* commands, size_t* num_commands, + size_t* num_literals); + +BROTLI_INTERNAL void BrotliCreateHqZopfliBackwardReferences( + MemoryManager* m, const BrotliDictionary* dictionary, size_t num_bytes, + size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, + const BrotliEncoderParams* params, HasherHandle hasher, int* dist_cache, + size_t* last_insert_len, Command* commands, size_t* num_commands, + size_t* num_literals); + +typedef struct ZopfliNode { + /* best length to get up to this byte (not including this byte itself) + highest 8 bit is used to reconstruct the length code */ + uint32_t length; + /* distance associated with the length; highest 5 bits contain distance + short code + 1 (or zero if no short code); this way only distances shorter + than 128MiB are allowed here */ + uint32_t distance; + /* number of literal inserts before this copy */ + uint32_t insert_length; + + /* This union holds information used by dynamic-programming. During forward + pass |cost| it used to store the goal function. When node is processed its + |cost| is invalidated in favor of |shortcut|. On path back-tracing pass + |next| is assigned the offset to next node on the path. */ + union { + /* Smallest cost to get to this byte from the beginning, as found so far. */ + float cost; + /* Offset to the next node on the path. Equals to command_length() of the + next node on the path. For last node equals to BROTLI_UINT32_MAX */ + uint32_t next; + /* Node position that provides next distance for distance cache. */ + uint32_t shortcut; + } u; +} ZopfliNode; + +BROTLI_INTERNAL void BrotliInitZopfliNodes(ZopfliNode* array, size_t length); + +/* Computes the shortest path of commands from position to at most + position + num_bytes. + + On return, path->size() is the number of commands found and path[i] is the + length of the i-th command (copy length plus insert length). + Note that the sum of the lengths of all commands can be less than num_bytes. + + On return, the nodes[0..num_bytes] array will have the following + "ZopfliNode array invariant": + For each i in [1..num_bytes], if nodes[i].cost < kInfinity, then + (1) nodes[i].copy_length() >= 2 + (2) nodes[i].command_length() <= i and + (3) nodes[i - nodes[i].command_length()].cost < kInfinity */ +BROTLI_INTERNAL size_t BrotliZopfliComputeShortestPath( + MemoryManager* m, const BrotliDictionary* dictionary, size_t num_bytes, + size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, + const BrotliEncoderParams* params, const size_t max_backward_limit, + const int* dist_cache, HasherHandle hasher, ZopfliNode* nodes); + +BROTLI_INTERNAL void BrotliZopfliCreateCommands( + const size_t num_bytes, const size_t block_start, + const size_t max_backward_limit, const ZopfliNode* nodes, + int* dist_cache, size_t* last_insert_len, const BrotliEncoderParams* params, + Command* commands, size_t* num_literals); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references_inc.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references_inc.h new file mode 100644 index 00000000000..81c783c00b6 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/backward_references_inc.h @@ -0,0 +1,153 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: EXPORT_FN, FN */ + +static BROTLI_NOINLINE void EXPORT_FN(CreateBackwardReferences)( + const BrotliDictionary* dictionary, + const uint16_t* dictionary_hash, size_t num_bytes, size_t position, + const uint8_t* ringbuffer, size_t ringbuffer_mask, + const BrotliEncoderParams* params, HasherHandle hasher, int* dist_cache, + size_t* last_insert_len, Command* commands, size_t* num_commands, + size_t* num_literals) { + /* Set maximum distance, see section 9.1. of the spec. */ + const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin); + + const Command* const orig_commands = commands; + size_t insert_length = *last_insert_len; + const size_t pos_end = position + num_bytes; + const size_t store_end = num_bytes >= FN(StoreLookahead)() ? + position + num_bytes - FN(StoreLookahead)() + 1 : position; + + /* For speed up heuristics for random data. */ + const size_t random_heuristics_window_size = + LiteralSpreeLengthForSparseSearch(params); + size_t apply_random_heuristics = position + random_heuristics_window_size; + const size_t gap = 0; + + /* Minimum score to accept a backward reference. */ + const score_t kMinScore = BROTLI_SCORE_BASE + 100; + + FN(PrepareDistanceCache)(hasher, dist_cache); + + while (position + FN(HashTypeLength)() < pos_end) { + size_t max_length = pos_end - position; + size_t max_distance = BROTLI_MIN(size_t, position, max_backward_limit); + HasherSearchResult sr; + sr.len = 0; + sr.len_code_delta = 0; + sr.distance = 0; + sr.score = kMinScore; + FN(FindLongestMatch)(hasher, dictionary, dictionary_hash, ringbuffer, + ringbuffer_mask, dist_cache, position, + max_length, max_distance, gap, &sr); + if (sr.score > kMinScore) { + /* Found a match. Let's look for something even better ahead. */ + int delayed_backward_references_in_row = 0; + --max_length; + for (;; --max_length) { + const score_t cost_diff_lazy = 175; + HasherSearchResult sr2; + sr2.len = params->quality < MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH ? + BROTLI_MIN(size_t, sr.len - 1, max_length) : 0; + sr2.len_code_delta = 0; + sr2.distance = 0; + sr2.score = kMinScore; + max_distance = BROTLI_MIN(size_t, position + 1, max_backward_limit); + FN(FindLongestMatch)(hasher, dictionary, dictionary_hash, ringbuffer, + ringbuffer_mask, dist_cache, position + 1, + max_length, max_distance, gap, &sr2); + if (sr2.score >= sr.score + cost_diff_lazy) { + /* Ok, let's just write one byte for now and start a match from the + next byte. */ + ++position; + ++insert_length; + sr = sr2; + if (++delayed_backward_references_in_row < 4 && + position + FN(HashTypeLength)() < pos_end) { + continue; + } + } + break; + } + apply_random_heuristics = + position + 2 * sr.len + random_heuristics_window_size; + max_distance = BROTLI_MIN(size_t, position, max_backward_limit); + { + /* The first 16 codes are special short-codes, + and the minimum offset is 1. */ + size_t distance_code = + ComputeDistanceCode(sr.distance, max_distance + gap, dist_cache); + if ((sr.distance <= (max_distance + gap)) && distance_code > 0) { + dist_cache[3] = dist_cache[2]; + dist_cache[2] = dist_cache[1]; + dist_cache[1] = dist_cache[0]; + dist_cache[0] = (int)sr.distance; + FN(PrepareDistanceCache)(hasher, dist_cache); + } + InitCommand(commands++, insert_length, sr.len, sr.len_code_delta, + distance_code); + } + *num_literals += insert_length; + insert_length = 0; + /* Put the hash keys into the table, if there are enough bytes left. + Depending on the hasher implementation, it can push all positions + in the given range or only a subset of them. + Avoid hash poisoning with RLE data. */ + { + size_t range_start = position + 2; + size_t range_end = BROTLI_MIN(size_t, position + sr.len, store_end); + if (sr.distance < (sr.len >> 2)) { + range_start = BROTLI_MIN(size_t, range_end, BROTLI_MAX(size_t, + range_start, position + sr.len - (sr.distance << 2))); + } + FN(StoreRange)(hasher, ringbuffer, ringbuffer_mask, range_start, + range_end); + } + position += sr.len; + } else { + ++insert_length; + ++position; + /* If we have not seen matches for a long time, we can skip some + match lookups. Unsuccessful match lookups are very very expensive + and this kind of a heuristic speeds up compression quite + a lot. */ + if (position > apply_random_heuristics) { + /* Going through uncompressible data, jump. */ + if (position > + apply_random_heuristics + 4 * random_heuristics_window_size) { + /* It is quite a long time since we saw a copy, so we assume + that this data is not compressible, and store hashes less + often. Hashes of non compressible data are less likely to + turn out to be useful in the future, too, so we store less of + them to not to flood out the hash table of good compressible + data. */ + const size_t kMargin = + BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 4); + size_t pos_jump = + BROTLI_MIN(size_t, position + 16, pos_end - kMargin); + for (; position < pos_jump; position += 4) { + FN(Store)(hasher, ringbuffer, ringbuffer_mask, position); + insert_length += 4; + } + } else { + const size_t kMargin = + BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 2); + size_t pos_jump = + BROTLI_MIN(size_t, position + 8, pos_end - kMargin); + for (; position < pos_jump; position += 2) { + FN(Store)(hasher, ringbuffer, ringbuffer_mask, position); + insert_length += 2; + } + } + } + } + } + insert_length += pos_end - position; + *last_insert_len = insert_length; + *num_commands += (size_t)(commands - orig_commands); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/bit_cost.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/bit_cost.c new file mode 100644 index 00000000000..01e30f6d5ff --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/bit_cost.c @@ -0,0 +1,35 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Functions to estimate the bit cost of Huffman trees. */ + +#include "./bit_cost.h" + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./fast_log.h" +#include "./histogram.h" +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#define FN(X) X ## Literal +#include "./bit_cost_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Command +#include "./bit_cost_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Distance +#include "./bit_cost_inc.h" /* NOLINT(build/include) */ +#undef FN + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/bit_cost.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/bit_cost.h new file mode 100644 index 00000000000..e69ee04a187 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/bit_cost.h @@ -0,0 +1,63 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Functions to estimate the bit cost of Huffman trees. */ + +#ifndef BROTLI_ENC_BIT_COST_H_ +#define BROTLI_ENC_BIT_COST_H_ + +#include <brotli/types.h> +#include "./fast_log.h" +#include "./histogram.h" +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static BROTLI_INLINE double ShannonEntropy(const uint32_t *population, + size_t size, size_t *total) { + size_t sum = 0; + double retval = 0; + const uint32_t *population_end = population + size; + size_t p; + if (size & 1) { + goto odd_number_of_elements_left; + } + while (population < population_end) { + p = *population++; + sum += p; + retval -= (double)p * FastLog2(p); + odd_number_of_elements_left: + p = *population++; + sum += p; + retval -= (double)p * FastLog2(p); + } + if (sum) retval += (double)sum * FastLog2(sum); + *total = sum; + return retval; +} + +static BROTLI_INLINE double BitsEntropy( + const uint32_t *population, size_t size) { + size_t sum; + double retval = ShannonEntropy(population, size, &sum); + if (retval < sum) { + /* At least one bit per literal is needed. */ + retval = (double)sum; + } + return retval; +} + +BROTLI_INTERNAL double BrotliPopulationCostLiteral(const HistogramLiteral*); +BROTLI_INTERNAL double BrotliPopulationCostCommand(const HistogramCommand*); +BROTLI_INTERNAL double BrotliPopulationCostDistance(const HistogramDistance*); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_BIT_COST_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/bit_cost_inc.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/bit_cost_inc.h new file mode 100644 index 00000000000..453c2260420 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/bit_cost_inc.h @@ -0,0 +1,127 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN */ + +#define HistogramType FN(Histogram) + +double FN(BrotliPopulationCost)(const HistogramType* histogram) { + static const double kOneSymbolHistogramCost = 12; + static const double kTwoSymbolHistogramCost = 20; + static const double kThreeSymbolHistogramCost = 28; + static const double kFourSymbolHistogramCost = 37; + const size_t data_size = FN(HistogramDataSize)(); + int count = 0; + size_t s[5]; + double bits = 0.0; + size_t i; + if (histogram->total_count_ == 0) { + return kOneSymbolHistogramCost; + } + for (i = 0; i < data_size; ++i) { + if (histogram->data_[i] > 0) { + s[count] = i; + ++count; + if (count > 4) break; + } + } + if (count == 1) { + return kOneSymbolHistogramCost; + } + if (count == 2) { + return (kTwoSymbolHistogramCost + (double)histogram->total_count_); + } + if (count == 3) { + const uint32_t histo0 = histogram->data_[s[0]]; + const uint32_t histo1 = histogram->data_[s[1]]; + const uint32_t histo2 = histogram->data_[s[2]]; + const uint32_t histomax = + BROTLI_MAX(uint32_t, histo0, BROTLI_MAX(uint32_t, histo1, histo2)); + return (kThreeSymbolHistogramCost + + 2 * (histo0 + histo1 + histo2) - histomax); + } + if (count == 4) { + uint32_t histo[4]; + uint32_t h23; + uint32_t histomax; + for (i = 0; i < 4; ++i) { + histo[i] = histogram->data_[s[i]]; + } + /* Sort */ + for (i = 0; i < 4; ++i) { + size_t j; + for (j = i + 1; j < 4; ++j) { + if (histo[j] > histo[i]) { + BROTLI_SWAP(uint32_t, histo, j, i); + } + } + } + h23 = histo[2] + histo[3]; + histomax = BROTLI_MAX(uint32_t, h23, histo[0]); + return (kFourSymbolHistogramCost + + 3 * h23 + 2 * (histo[0] + histo[1]) - histomax); + } + + { + /* In this loop we compute the entropy of the histogram and simultaneously + build a simplified histogram of the code length codes where we use the + zero repeat code 17, but we don't use the non-zero repeat code 16. */ + size_t max_depth = 1; + uint32_t depth_histo[BROTLI_CODE_LENGTH_CODES] = { 0 }; + const double log2total = FastLog2(histogram->total_count_); + for (i = 0; i < data_size;) { + if (histogram->data_[i] > 0) { + /* Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) = + = log2(total_count) - log2(count(symbol)) */ + double log2p = log2total - FastLog2(histogram->data_[i]); + /* Approximate the bit depth by round(-log2(P(symbol))) */ + size_t depth = (size_t)(log2p + 0.5); + bits += histogram->data_[i] * log2p; + if (depth > 15) { + depth = 15; + } + if (depth > max_depth) { + max_depth = depth; + } + ++depth_histo[depth]; + ++i; + } else { + /* Compute the run length of zeros and add the appropriate number of 0 + and 17 code length codes to the code length code histogram. */ + uint32_t reps = 1; + size_t k; + for (k = i + 1; k < data_size && histogram->data_[k] == 0; ++k) { + ++reps; + } + i += reps; + if (i == data_size) { + /* Don't add any cost for the last zero run, since these are encoded + only implicitly. */ + break; + } + if (reps < 3) { + depth_histo[0] += reps; + } else { + reps -= 2; + while (reps > 0) { + ++depth_histo[BROTLI_REPEAT_ZERO_CODE_LENGTH]; + /* Add the 3 extra bits for the 17 code length code. */ + bits += 3; + reps >>= 3; + } + } + } + } + /* Add the estimated encoding cost of the code length code histogram. */ + bits += (double)(18 + 2 * max_depth); + /* Add the entropy of the code length code histogram. */ + bits += BitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES); + } + return bits; +} + +#undef HistogramType diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/block_encoder_inc.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/block_encoder_inc.h new file mode 100644 index 00000000000..2a08f904fd6 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/block_encoder_inc.h @@ -0,0 +1,33 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN */ + +#define HistogramType FN(Histogram) + +/* Creates entropy codes for all block types and stores them to the bit + stream. */ +static void FN(BuildAndStoreEntropyCodes)(MemoryManager* m, BlockEncoder* self, + const HistogramType* histograms, const size_t histograms_size, + HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) { + const size_t alphabet_size = self->alphabet_size_; + const size_t table_size = histograms_size * alphabet_size; + self->depths_ = BROTLI_ALLOC(m, uint8_t, table_size); + self->bits_ = BROTLI_ALLOC(m, uint16_t, table_size); + if (BROTLI_IS_OOM(m)) return; + + { + size_t i; + for (i = 0; i < histograms_size; ++i) { + size_t ix = i * alphabet_size; + BuildAndStoreHuffmanTree(&histograms[i].data_[0], alphabet_size, tree, + &self->depths_[ix], &self->bits_[ix], storage_ix, storage); + } + } +} + +#undef HistogramType diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/block_splitter.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/block_splitter.c new file mode 100644 index 00000000000..0331146cf58 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/block_splitter.c @@ -0,0 +1,195 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Block split point selection utilities. */ + +#include "./block_splitter.h" + +#include <assert.h> +#include <string.h> /* memcpy, memset */ + +#include "./bit_cost.h" +#include "./cluster.h" +#include "./command.h" +#include "./fast_log.h" +#include "./histogram.h" +#include "./memory.h" +#include "./port.h" +#include "./quality.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static const size_t kMaxLiteralHistograms = 100; +static const size_t kMaxCommandHistograms = 50; +static const double kLiteralBlockSwitchCost = 28.1; +static const double kCommandBlockSwitchCost = 13.5; +static const double kDistanceBlockSwitchCost = 14.6; +static const size_t kLiteralStrideLength = 70; +static const size_t kCommandStrideLength = 40; +static const size_t kSymbolsPerLiteralHistogram = 544; +static const size_t kSymbolsPerCommandHistogram = 530; +static const size_t kSymbolsPerDistanceHistogram = 544; +static const size_t kMinLengthForBlockSplitting = 128; +static const size_t kIterMulForRefining = 2; +static const size_t kMinItersForRefining = 100; + +static size_t CountLiterals(const Command* cmds, const size_t num_commands) { + /* Count how many we have. */ + size_t total_length = 0; + size_t i; + for (i = 0; i < num_commands; ++i) { + total_length += cmds[i].insert_len_; + } + return total_length; +} + +static void CopyLiteralsToByteArray(const Command* cmds, + const size_t num_commands, + const uint8_t* data, + const size_t offset, + const size_t mask, + uint8_t* literals) { + size_t pos = 0; + size_t from_pos = offset & mask; + size_t i; + for (i = 0; i < num_commands; ++i) { + size_t insert_len = cmds[i].insert_len_; + if (from_pos + insert_len > mask) { + size_t head_size = mask + 1 - from_pos; + memcpy(literals + pos, data + from_pos, head_size); + from_pos = 0; + pos += head_size; + insert_len -= head_size; + } + if (insert_len > 0) { + memcpy(literals + pos, data + from_pos, insert_len); + pos += insert_len; + } + from_pos = (from_pos + insert_len + CommandCopyLen(&cmds[i])) & mask; + } +} + +static BROTLI_INLINE uint32_t MyRand(uint32_t* seed) { + /* Initial seed should be 7. In this case, loop length is (1 << 29). */ + *seed *= 16807U; + return *seed; +} + +static BROTLI_INLINE double BitCost(size_t count) { + return count == 0 ? -2.0 : FastLog2(count); +} + +#define HISTOGRAMS_PER_BATCH 64 +#define CLUSTERS_PER_BATCH 16 + +#define FN(X) X ## Literal +#define DataType uint8_t +/* NOLINTNEXTLINE(build/include) */ +#include "./block_splitter_inc.h" +#undef DataType +#undef FN + +#define FN(X) X ## Command +#define DataType uint16_t +/* NOLINTNEXTLINE(build/include) */ +#include "./block_splitter_inc.h" +#undef FN + +#define FN(X) X ## Distance +/* NOLINTNEXTLINE(build/include) */ +#include "./block_splitter_inc.h" +#undef DataType +#undef FN + +void BrotliInitBlockSplit(BlockSplit* self) { + self->num_types = 0; + self->num_blocks = 0; + self->types = 0; + self->lengths = 0; + self->types_alloc_size = 0; + self->lengths_alloc_size = 0; +} + +void BrotliDestroyBlockSplit(MemoryManager* m, BlockSplit* self) { + BROTLI_FREE(m, self->types); + BROTLI_FREE(m, self->lengths); +} + +void BrotliSplitBlock(MemoryManager* m, + const Command* cmds, + const size_t num_commands, + const uint8_t* data, + const size_t pos, + const size_t mask, + const BrotliEncoderParams* params, + BlockSplit* literal_split, + BlockSplit* insert_and_copy_split, + BlockSplit* dist_split) { + { + size_t literals_count = CountLiterals(cmds, num_commands); + uint8_t* literals = BROTLI_ALLOC(m, uint8_t, literals_count); + if (BROTLI_IS_OOM(m)) return; + /* Create a continuous array of literals. */ + CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, literals); + /* Create the block split on the array of literals. + Literal histograms have alphabet size 256. */ + SplitByteVectorLiteral( + m, literals, literals_count, + kSymbolsPerLiteralHistogram, kMaxLiteralHistograms, + kLiteralStrideLength, kLiteralBlockSwitchCost, params, + literal_split); + if (BROTLI_IS_OOM(m)) return; + BROTLI_FREE(m, literals); + } + + { + /* Compute prefix codes for commands. */ + uint16_t* insert_and_copy_codes = BROTLI_ALLOC(m, uint16_t, num_commands); + size_t i; + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < num_commands; ++i) { + insert_and_copy_codes[i] = cmds[i].cmd_prefix_; + } + /* Create the block split on the array of command prefixes. */ + SplitByteVectorCommand( + m, insert_and_copy_codes, num_commands, + kSymbolsPerCommandHistogram, kMaxCommandHistograms, + kCommandStrideLength, kCommandBlockSwitchCost, params, + insert_and_copy_split); + if (BROTLI_IS_OOM(m)) return; + /* TODO: reuse for distances? */ + BROTLI_FREE(m, insert_and_copy_codes); + } + + { + /* Create a continuous array of distance prefixes. */ + uint16_t* distance_prefixes = BROTLI_ALLOC(m, uint16_t, num_commands); + size_t j = 0; + size_t i; + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < num_commands; ++i) { + const Command* cmd = &cmds[i]; + if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) { + distance_prefixes[j++] = cmd->dist_prefix_; + } + } + /* Create the block split on the array of distance prefixes. */ + SplitByteVectorDistance( + m, distance_prefixes, j, + kSymbolsPerDistanceHistogram, kMaxCommandHistograms, + kCommandStrideLength, kDistanceBlockSwitchCost, params, + dist_split); + if (BROTLI_IS_OOM(m)) return; + BROTLI_FREE(m, distance_prefixes); + } +} + + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/block_splitter.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/block_splitter.h new file mode 100644 index 00000000000..6abac08d295 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/block_splitter.h @@ -0,0 +1,51 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Block split point selection utilities. */ + +#ifndef BROTLI_ENC_BLOCK_SPLITTER_H_ +#define BROTLI_ENC_BLOCK_SPLITTER_H_ + +#include <brotli/types.h> +#include "./command.h" +#include "./memory.h" +#include "./port.h" +#include "./quality.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +typedef struct BlockSplit { + size_t num_types; /* Amount of distinct types */ + size_t num_blocks; /* Amount of values in types and length */ + uint8_t* types; + uint32_t* lengths; + + size_t types_alloc_size; + size_t lengths_alloc_size; +} BlockSplit; + +BROTLI_INTERNAL void BrotliInitBlockSplit(BlockSplit* self); +BROTLI_INTERNAL void BrotliDestroyBlockSplit(MemoryManager* m, + BlockSplit* self); + +BROTLI_INTERNAL void BrotliSplitBlock(MemoryManager* m, + const Command* cmds, + const size_t num_commands, + const uint8_t* data, + const size_t offset, + const size_t mask, + const BrotliEncoderParams* params, + BlockSplit* literal_split, + BlockSplit* insert_and_copy_split, + BlockSplit* dist_split); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_BLOCK_SPLITTER_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/block_splitter_inc.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/block_splitter_inc.h new file mode 100644 index 00000000000..48844787878 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/block_splitter_inc.h @@ -0,0 +1,431 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN, DataType */ + +#define HistogramType FN(Histogram) + +static void FN(InitialEntropyCodes)(const DataType* data, size_t length, + size_t stride, + size_t num_histograms, + HistogramType* histograms) { + uint32_t seed = 7; + size_t block_length = length / num_histograms; + size_t i; + FN(ClearHistograms)(histograms, num_histograms); + for (i = 0; i < num_histograms; ++i) { + size_t pos = length * i / num_histograms; + if (i != 0) { + pos += MyRand(&seed) % block_length; + } + if (pos + stride >= length) { + pos = length - stride - 1; + } + FN(HistogramAddVector)(&histograms[i], data + pos, stride); + } +} + +static void FN(RandomSample)(uint32_t* seed, + const DataType* data, + size_t length, + size_t stride, + HistogramType* sample) { + size_t pos = 0; + if (stride >= length) { + stride = length; + } else { + pos = MyRand(seed) % (length - stride + 1); + } + FN(HistogramAddVector)(sample, data + pos, stride); +} + +static void FN(RefineEntropyCodes)(const DataType* data, size_t length, + size_t stride, + size_t num_histograms, + HistogramType* histograms) { + size_t iters = + kIterMulForRefining * length / stride + kMinItersForRefining; + uint32_t seed = 7; + size_t iter; + iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms; + for (iter = 0; iter < iters; ++iter) { + HistogramType sample; + FN(HistogramClear)(&sample); + FN(RandomSample)(&seed, data, length, stride, &sample); + FN(HistogramAddHistogram)(&histograms[iter % num_histograms], &sample); + } +} + +/* Assigns a block id from the range [0, num_histograms) to each data element + in data[0..length) and fills in block_id[0..length) with the assigned values. + Returns the number of blocks, i.e. one plus the number of block switches. */ +static size_t FN(FindBlocks)(const DataType* data, const size_t length, + const double block_switch_bitcost, + const size_t num_histograms, + const HistogramType* histograms, + double* insert_cost, + double* cost, + uint8_t* switch_signal, + uint8_t *block_id) { + const size_t data_size = FN(HistogramDataSize)(); + const size_t bitmaplen = (num_histograms + 7) >> 3; + size_t num_blocks = 1; + size_t i; + size_t j; + assert(num_histograms <= 256); + if (num_histograms <= 1) { + for (i = 0; i < length; ++i) { + block_id[i] = 0; + } + return 1; + } + memset(insert_cost, 0, sizeof(insert_cost[0]) * data_size * num_histograms); + for (i = 0; i < num_histograms; ++i) { + insert_cost[i] = FastLog2((uint32_t)histograms[i].total_count_); + } + for (i = data_size; i != 0;) { + --i; + for (j = 0; j < num_histograms; ++j) { + insert_cost[i * num_histograms + j] = + insert_cost[j] - BitCost(histograms[j].data_[i]); + } + } + memset(cost, 0, sizeof(cost[0]) * num_histograms); + memset(switch_signal, 0, sizeof(switch_signal[0]) * length * bitmaplen); + /* After each iteration of this loop, cost[k] will contain the difference + between the minimum cost of arriving at the current byte position using + entropy code k, and the minimum cost of arriving at the current byte + position. This difference is capped at the block switch cost, and if it + reaches block switch cost, it means that when we trace back from the last + position, we need to switch here. */ + for (i = 0; i < length; ++i) { + const size_t byte_ix = i; + size_t ix = byte_ix * bitmaplen; + size_t insert_cost_ix = data[byte_ix] * num_histograms; + double min_cost = 1e99; + double block_switch_cost = block_switch_bitcost; + size_t k; + for (k = 0; k < num_histograms; ++k) { + /* We are coding the symbol in data[byte_ix] with entropy code k. */ + cost[k] += insert_cost[insert_cost_ix + k]; + if (cost[k] < min_cost) { + min_cost = cost[k]; + block_id[byte_ix] = (uint8_t)k; + } + } + /* More blocks for the beginning. */ + if (byte_ix < 2000) { + block_switch_cost *= 0.77 + 0.07 * (double)byte_ix / 2000; + } + for (k = 0; k < num_histograms; ++k) { + cost[k] -= min_cost; + if (cost[k] >= block_switch_cost) { + const uint8_t mask = (uint8_t)(1u << (k & 7)); + cost[k] = block_switch_cost; + assert((k >> 3) < bitmaplen); + switch_signal[ix + (k >> 3)] |= mask; + } + } + } + { /* Trace back from the last position and switch at the marked places. */ + size_t byte_ix = length - 1; + size_t ix = byte_ix * bitmaplen; + uint8_t cur_id = block_id[byte_ix]; + while (byte_ix > 0) { + const uint8_t mask = (uint8_t)(1u << (cur_id & 7)); + assert(((size_t)cur_id >> 3) < bitmaplen); + --byte_ix; + ix -= bitmaplen; + if (switch_signal[ix + (cur_id >> 3)] & mask) { + if (cur_id != block_id[byte_ix]) { + cur_id = block_id[byte_ix]; + ++num_blocks; + } + } + block_id[byte_ix] = cur_id; + } + } + return num_blocks; +} + +static size_t FN(RemapBlockIds)(uint8_t* block_ids, const size_t length, + uint16_t* new_id, const size_t num_histograms) { + static const uint16_t kInvalidId = 256; + uint16_t next_id = 0; + size_t i; + for (i = 0; i < num_histograms; ++i) { + new_id[i] = kInvalidId; + } + for (i = 0; i < length; ++i) { + assert(block_ids[i] < num_histograms); + if (new_id[block_ids[i]] == kInvalidId) { + new_id[block_ids[i]] = next_id++; + } + } + for (i = 0; i < length; ++i) { + block_ids[i] = (uint8_t)new_id[block_ids[i]]; + assert(block_ids[i] < num_histograms); + } + assert(next_id <= num_histograms); + return next_id; +} + +static void FN(BuildBlockHistograms)(const DataType* data, const size_t length, + const uint8_t* block_ids, + const size_t num_histograms, + HistogramType* histograms) { + size_t i; + FN(ClearHistograms)(histograms, num_histograms); + for (i = 0; i < length; ++i) { + FN(HistogramAdd)(&histograms[block_ids[i]], data[i]); + } +} + +static void FN(ClusterBlocks)(MemoryManager* m, + const DataType* data, const size_t length, + const size_t num_blocks, + uint8_t* block_ids, + BlockSplit* split) { + uint32_t* histogram_symbols = BROTLI_ALLOC(m, uint32_t, num_blocks); + uint32_t* block_lengths = BROTLI_ALLOC(m, uint32_t, num_blocks); + const size_t expected_num_clusters = CLUSTERS_PER_BATCH * + (num_blocks + HISTOGRAMS_PER_BATCH - 1) / HISTOGRAMS_PER_BATCH; + size_t all_histograms_size = 0; + size_t all_histograms_capacity = expected_num_clusters; + HistogramType* all_histograms = + BROTLI_ALLOC(m, HistogramType, all_histograms_capacity); + size_t cluster_size_size = 0; + size_t cluster_size_capacity = expected_num_clusters; + uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, cluster_size_capacity); + size_t num_clusters = 0; + HistogramType* histograms = BROTLI_ALLOC(m, HistogramType, + BROTLI_MIN(size_t, num_blocks, HISTOGRAMS_PER_BATCH)); + size_t max_num_pairs = + HISTOGRAMS_PER_BATCH * HISTOGRAMS_PER_BATCH / 2; + size_t pairs_capacity = max_num_pairs + 1; + HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity); + size_t pos = 0; + uint32_t* clusters; + size_t num_final_clusters; + static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX; + uint32_t* new_index; + size_t i; + uint32_t sizes[HISTOGRAMS_PER_BATCH] = { 0 }; + uint32_t new_clusters[HISTOGRAMS_PER_BATCH] = { 0 }; + uint32_t symbols[HISTOGRAMS_PER_BATCH] = { 0 }; + uint32_t remap[HISTOGRAMS_PER_BATCH] = { 0 }; + + if (BROTLI_IS_OOM(m)) return; + + memset(block_lengths, 0, num_blocks * sizeof(uint32_t)); + + { + size_t block_idx = 0; + for (i = 0; i < length; ++i) { + assert(block_idx < num_blocks); + ++block_lengths[block_idx]; + if (i + 1 == length || block_ids[i] != block_ids[i + 1]) { + ++block_idx; + } + } + assert(block_idx == num_blocks); + } + + for (i = 0; i < num_blocks; i += HISTOGRAMS_PER_BATCH) { + const size_t num_to_combine = + BROTLI_MIN(size_t, num_blocks - i, HISTOGRAMS_PER_BATCH); + size_t num_new_clusters; + size_t j; + for (j = 0; j < num_to_combine; ++j) { + size_t k; + FN(HistogramClear)(&histograms[j]); + for (k = 0; k < block_lengths[i + j]; ++k) { + FN(HistogramAdd)(&histograms[j], data[pos++]); + } + histograms[j].bit_cost_ = FN(BrotliPopulationCost)(&histograms[j]); + new_clusters[j] = (uint32_t)j; + symbols[j] = (uint32_t)j; + sizes[j] = 1; + } + num_new_clusters = FN(BrotliHistogramCombine)( + histograms, sizes, symbols, new_clusters, pairs, num_to_combine, + num_to_combine, HISTOGRAMS_PER_BATCH, max_num_pairs); + BROTLI_ENSURE_CAPACITY(m, HistogramType, all_histograms, + all_histograms_capacity, all_histograms_size + num_new_clusters); + BROTLI_ENSURE_CAPACITY(m, uint32_t, cluster_size, + cluster_size_capacity, cluster_size_size + num_new_clusters); + if (BROTLI_IS_OOM(m)) return; + for (j = 0; j < num_new_clusters; ++j) { + all_histograms[all_histograms_size++] = histograms[new_clusters[j]]; + cluster_size[cluster_size_size++] = sizes[new_clusters[j]]; + remap[new_clusters[j]] = (uint32_t)j; + } + for (j = 0; j < num_to_combine; ++j) { + histogram_symbols[i + j] = (uint32_t)num_clusters + remap[symbols[j]]; + } + num_clusters += num_new_clusters; + assert(num_clusters == cluster_size_size); + assert(num_clusters == all_histograms_size); + } + BROTLI_FREE(m, histograms); + + max_num_pairs = + BROTLI_MIN(size_t, 64 * num_clusters, (num_clusters / 2) * num_clusters); + if (pairs_capacity < max_num_pairs + 1) { + BROTLI_FREE(m, pairs); + pairs = BROTLI_ALLOC(m, HistogramPair, max_num_pairs + 1); + if (BROTLI_IS_OOM(m)) return; + } + + clusters = BROTLI_ALLOC(m, uint32_t, num_clusters); + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < num_clusters; ++i) { + clusters[i] = (uint32_t)i; + } + num_final_clusters = FN(BrotliHistogramCombine)( + all_histograms, cluster_size, histogram_symbols, clusters, pairs, + num_clusters, num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES, + max_num_pairs); + BROTLI_FREE(m, pairs); + BROTLI_FREE(m, cluster_size); + + new_index = BROTLI_ALLOC(m, uint32_t, num_clusters); + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < num_clusters; ++i) new_index[i] = kInvalidIndex; + pos = 0; + { + uint32_t next_index = 0; + for (i = 0; i < num_blocks; ++i) { + HistogramType histo; + size_t j; + uint32_t best_out; + double best_bits; + FN(HistogramClear)(&histo); + for (j = 0; j < block_lengths[i]; ++j) { + FN(HistogramAdd)(&histo, data[pos++]); + } + best_out = (i == 0) ? histogram_symbols[0] : histogram_symbols[i - 1]; + best_bits = + FN(BrotliHistogramBitCostDistance)(&histo, &all_histograms[best_out]); + for (j = 0; j < num_final_clusters; ++j) { + const double cur_bits = FN(BrotliHistogramBitCostDistance)( + &histo, &all_histograms[clusters[j]]); + if (cur_bits < best_bits) { + best_bits = cur_bits; + best_out = clusters[j]; + } + } + histogram_symbols[i] = best_out; + if (new_index[best_out] == kInvalidIndex) { + new_index[best_out] = next_index++; + } + } + } + BROTLI_FREE(m, clusters); + BROTLI_FREE(m, all_histograms); + BROTLI_ENSURE_CAPACITY( + m, uint8_t, split->types, split->types_alloc_size, num_blocks); + BROTLI_ENSURE_CAPACITY( + m, uint32_t, split->lengths, split->lengths_alloc_size, num_blocks); + if (BROTLI_IS_OOM(m)) return; + { + uint32_t cur_length = 0; + size_t block_idx = 0; + uint8_t max_type = 0; + for (i = 0; i < num_blocks; ++i) { + cur_length += block_lengths[i]; + if (i + 1 == num_blocks || + histogram_symbols[i] != histogram_symbols[i + 1]) { + const uint8_t id = (uint8_t)new_index[histogram_symbols[i]]; + split->types[block_idx] = id; + split->lengths[block_idx] = cur_length; + max_type = BROTLI_MAX(uint8_t, max_type, id); + cur_length = 0; + ++block_idx; + } + } + split->num_blocks = block_idx; + split->num_types = (size_t)max_type + 1; + } + BROTLI_FREE(m, new_index); + BROTLI_FREE(m, block_lengths); + BROTLI_FREE(m, histogram_symbols); +} + +static void FN(SplitByteVector)(MemoryManager* m, + const DataType* data, const size_t length, + const size_t literals_per_histogram, + const size_t max_histograms, + const size_t sampling_stride_length, + const double block_switch_cost, + const BrotliEncoderParams* params, + BlockSplit* split) { + const size_t data_size = FN(HistogramDataSize)(); + size_t num_histograms = length / literals_per_histogram + 1; + HistogramType* histograms; + if (num_histograms > max_histograms) { + num_histograms = max_histograms; + } + if (length == 0) { + split->num_types = 1; + return; + } else if (length < kMinLengthForBlockSplitting) { + BROTLI_ENSURE_CAPACITY(m, uint8_t, + split->types, split->types_alloc_size, split->num_blocks + 1); + BROTLI_ENSURE_CAPACITY(m, uint32_t, + split->lengths, split->lengths_alloc_size, split->num_blocks + 1); + if (BROTLI_IS_OOM(m)) return; + split->num_types = 1; + split->types[split->num_blocks] = 0; + split->lengths[split->num_blocks] = (uint32_t)length; + split->num_blocks++; + return; + } + histograms = BROTLI_ALLOC(m, HistogramType, num_histograms); + if (BROTLI_IS_OOM(m)) return; + /* Find good entropy codes. */ + FN(InitialEntropyCodes)(data, length, + sampling_stride_length, + num_histograms, histograms); + FN(RefineEntropyCodes)(data, length, + sampling_stride_length, + num_histograms, histograms); + { + /* Find a good path through literals with the good entropy codes. */ + uint8_t* block_ids = BROTLI_ALLOC(m, uint8_t, length); + size_t num_blocks = 0; + const size_t bitmaplen = (num_histograms + 7) >> 3; + double* insert_cost = BROTLI_ALLOC(m, double, data_size * num_histograms); + double* cost = BROTLI_ALLOC(m, double, num_histograms); + uint8_t* switch_signal = BROTLI_ALLOC(m, uint8_t, length * bitmaplen); + uint16_t* new_id = BROTLI_ALLOC(m, uint16_t, num_histograms); + const size_t iters = params->quality < HQ_ZOPFLIFICATION_QUALITY ? 3 : 10; + size_t i; + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < iters; ++i) { + num_blocks = FN(FindBlocks)(data, length, + block_switch_cost, + num_histograms, histograms, + insert_cost, cost, switch_signal, + block_ids); + num_histograms = FN(RemapBlockIds)(block_ids, length, + new_id, num_histograms); + FN(BuildBlockHistograms)(data, length, block_ids, + num_histograms, histograms); + } + BROTLI_FREE(m, insert_cost); + BROTLI_FREE(m, cost); + BROTLI_FREE(m, switch_signal); + BROTLI_FREE(m, new_id); + BROTLI_FREE(m, histograms); + FN(ClusterBlocks)(m, data, length, num_blocks, block_ids, split); + if (BROTLI_IS_OOM(m)) return; + BROTLI_FREE(m, block_ids); + } +} + +#undef HistogramType diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/brotli_bit_stream.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/brotli_bit_stream.c new file mode 100644 index 00000000000..2907510b714 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/brotli_bit_stream.c @@ -0,0 +1,1330 @@ +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Brotli bit stream functions to support the low level format. There are no + compression algorithms here, just the right ordering of bits to match the + specs. */ + +#include "./brotli_bit_stream.h" + +#include <string.h> /* memcpy, memset */ + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./context.h" +#include "./entropy_encode.h" +#include "./entropy_encode_static.h" +#include "./fast_log.h" +#include "./memory.h" +#include "./port.h" +#include "./write_bits.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#define MAX_HUFFMAN_TREE_SIZE (2 * BROTLI_NUM_COMMAND_SYMBOLS + 1) +/* The size of Huffman dictionary for distances assuming that NPOSTFIX = 0 and + NDIRECT = 0. */ +#define SIMPLE_DISTANCE_ALPHABET_SIZE (BROTLI_NUM_DISTANCE_SHORT_CODES + \ + (2 * BROTLI_MAX_DISTANCE_BITS)) +/* SIMPLE_DISTANCE_ALPHABET_SIZE == 64 */ +#define SIMPLE_DISTANCE_ALPHABET_BITS 6 + +/* Represents the range of values belonging to a prefix code: + [offset, offset + 2^nbits) */ +typedef struct PrefixCodeRange { + uint32_t offset; + uint32_t nbits; +} PrefixCodeRange; + +static const PrefixCodeRange + kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = { + { 1, 2}, { 5, 2}, { 9, 2}, {13, 2}, {17, 3}, { 25, 3}, { 33, 3}, + {41, 3}, {49, 4}, {65, 4}, {81, 4}, {97, 4}, {113, 5}, {145, 5}, + {177, 5}, { 209, 5}, { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8}, + {753, 9}, {1265, 10}, {2289, 11}, {4337, 12}, {8433, 13}, {16625, 24} +}; + +static BROTLI_INLINE uint32_t BlockLengthPrefixCode(uint32_t len) { + uint32_t code = (len >= 177) ? (len >= 753 ? 20 : 14) : (len >= 41 ? 7 : 0); + while (code < (BROTLI_NUM_BLOCK_LEN_SYMBOLS - 1) && + len >= kBlockLengthPrefixCode[code + 1].offset) ++code; + return code; +} + +static BROTLI_INLINE void GetBlockLengthPrefixCode(uint32_t len, size_t* code, + uint32_t* n_extra, uint32_t* extra) { + *code = BlockLengthPrefixCode(len); + *n_extra = kBlockLengthPrefixCode[*code].nbits; + *extra = len - kBlockLengthPrefixCode[*code].offset; +} + +typedef struct BlockTypeCodeCalculator { + size_t last_type; + size_t second_last_type; +} BlockTypeCodeCalculator; + +static void InitBlockTypeCodeCalculator(BlockTypeCodeCalculator* self) { + self->last_type = 1; + self->second_last_type = 0; +} + +static BROTLI_INLINE size_t NextBlockTypeCode( + BlockTypeCodeCalculator* calculator, uint8_t type) { + size_t type_code = (type == calculator->last_type + 1) ? 1u : + (type == calculator->second_last_type) ? 0u : type + 2u; + calculator->second_last_type = calculator->last_type; + calculator->last_type = type; + return type_code; +} + +/* |nibblesbits| represents the 2 bits to encode MNIBBLES (0-3) + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +static void BrotliEncodeMlen(size_t length, uint64_t* bits, + size_t* numbits, uint64_t* nibblesbits) { + size_t lg = (length == 1) ? 1 : Log2FloorNonZero((uint32_t)(length - 1)) + 1; + size_t mnibbles = (lg < 16 ? 16 : (lg + 3)) / 4; + assert(length > 0); + assert(length <= (1 << 24)); + assert(lg <= 24); + *nibblesbits = mnibbles - 4; + *numbits = mnibbles * 4; + *bits = length - 1; +} + +static BROTLI_INLINE void StoreCommandExtra( + const Command* cmd, size_t* storage_ix, uint8_t* storage) { + uint32_t copylen_code = CommandCopyLenCode(cmd); + uint16_t inscode = GetInsertLengthCode(cmd->insert_len_); + uint16_t copycode = GetCopyLengthCode(copylen_code); + uint32_t insnumextra = GetInsertExtra(inscode); + uint64_t insextraval = cmd->insert_len_ - GetInsertBase(inscode); + uint64_t copyextraval = copylen_code - GetCopyBase(copycode); + uint64_t bits = (copyextraval << insnumextra) | insextraval; + BrotliWriteBits( + insnumextra + GetCopyExtra(copycode), bits, storage_ix, storage); +} + +/* Data structure that stores almost everything that is needed to encode each + block switch command. */ +typedef struct BlockSplitCode { + BlockTypeCodeCalculator type_code_calculator; + uint8_t type_depths[BROTLI_MAX_BLOCK_TYPE_SYMBOLS]; + uint16_t type_bits[BROTLI_MAX_BLOCK_TYPE_SYMBOLS]; + uint8_t length_depths[BROTLI_NUM_BLOCK_LEN_SYMBOLS]; + uint16_t length_bits[BROTLI_NUM_BLOCK_LEN_SYMBOLS]; +} BlockSplitCode; + +/* Stores a number between 0 and 255. */ +static void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage) { + if (n == 0) { + BrotliWriteBits(1, 0, storage_ix, storage); + } else { + size_t nbits = Log2FloorNonZero(n); + BrotliWriteBits(1, 1, storage_ix, storage); + BrotliWriteBits(3, nbits, storage_ix, storage); + BrotliWriteBits(nbits, n - ((size_t)1 << nbits), storage_ix, storage); + } +} + +/* Stores the compressed meta-block header. + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +static void StoreCompressedMetaBlockHeader(BROTLI_BOOL is_final_block, + size_t length, + size_t* storage_ix, + uint8_t* storage) { + uint64_t lenbits; + size_t nlenbits; + uint64_t nibblesbits; + + /* Write ISLAST bit. */ + BrotliWriteBits(1, (uint64_t)is_final_block, storage_ix, storage); + /* Write ISEMPTY bit. */ + if (is_final_block) { + BrotliWriteBits(1, 0, storage_ix, storage); + } + + BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits); + BrotliWriteBits(2, nibblesbits, storage_ix, storage); + BrotliWriteBits(nlenbits, lenbits, storage_ix, storage); + + if (!is_final_block) { + /* Write ISUNCOMPRESSED bit. */ + BrotliWriteBits(1, 0, storage_ix, storage); + } +} + +/* Stores the uncompressed meta-block header. + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +static void BrotliStoreUncompressedMetaBlockHeader(size_t length, + size_t* storage_ix, + uint8_t* storage) { + uint64_t lenbits; + size_t nlenbits; + uint64_t nibblesbits; + + /* Write ISLAST bit. + Uncompressed block cannot be the last one, so set to 0. */ + BrotliWriteBits(1, 0, storage_ix, storage); + BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits); + BrotliWriteBits(2, nibblesbits, storage_ix, storage); + BrotliWriteBits(nlenbits, lenbits, storage_ix, storage); + /* Write ISUNCOMPRESSED bit. */ + BrotliWriteBits(1, 1, storage_ix, storage); +} + +static void BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask( + const int num_codes, const uint8_t* code_length_bitdepth, + size_t* storage_ix, uint8_t* storage) { + static const uint8_t kStorageOrder[BROTLI_CODE_LENGTH_CODES] = { + 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15 + }; + /* The bit lengths of the Huffman code over the code length alphabet + are compressed with the following static Huffman code: + Symbol Code + ------ ---- + 0 00 + 1 1110 + 2 110 + 3 01 + 4 10 + 5 1111 */ + static const uint8_t kHuffmanBitLengthHuffmanCodeSymbols[6] = { + 0, 7, 3, 2, 1, 15 + }; + static const uint8_t kHuffmanBitLengthHuffmanCodeBitLengths[6] = { + 2, 4, 3, 2, 2, 4 + }; + + size_t skip_some = 0; /* skips none. */ + + /* Throw away trailing zeros: */ + size_t codes_to_store = BROTLI_CODE_LENGTH_CODES; + if (num_codes > 1) { + for (; codes_to_store > 0; --codes_to_store) { + if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] != 0) { + break; + } + } + } + if (code_length_bitdepth[kStorageOrder[0]] == 0 && + code_length_bitdepth[kStorageOrder[1]] == 0) { + skip_some = 2; /* skips two. */ + if (code_length_bitdepth[kStorageOrder[2]] == 0) { + skip_some = 3; /* skips three. */ + } + } + BrotliWriteBits(2, skip_some, storage_ix, storage); + { + size_t i; + for (i = skip_some; i < codes_to_store; ++i) { + size_t l = code_length_bitdepth[kStorageOrder[i]]; + BrotliWriteBits(kHuffmanBitLengthHuffmanCodeBitLengths[l], + kHuffmanBitLengthHuffmanCodeSymbols[l], storage_ix, storage); + } + } +} + +static void BrotliStoreHuffmanTreeToBitMask( + const size_t huffman_tree_size, const uint8_t* huffman_tree, + const uint8_t* huffman_tree_extra_bits, const uint8_t* code_length_bitdepth, + const uint16_t* code_length_bitdepth_symbols, + size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage) { + size_t i; + for (i = 0; i < huffman_tree_size; ++i) { + size_t ix = huffman_tree[i]; + BrotliWriteBits(code_length_bitdepth[ix], code_length_bitdepth_symbols[ix], + storage_ix, storage); + /* Extra bits */ + switch (ix) { + case BROTLI_REPEAT_PREVIOUS_CODE_LENGTH: + BrotliWriteBits(2, huffman_tree_extra_bits[i], storage_ix, storage); + break; + case BROTLI_REPEAT_ZERO_CODE_LENGTH: + BrotliWriteBits(3, huffman_tree_extra_bits[i], storage_ix, storage); + break; + } + } +} + +static void StoreSimpleHuffmanTree(const uint8_t* depths, + size_t symbols[4], + size_t num_symbols, + size_t max_bits, + size_t *storage_ix, uint8_t *storage) { + /* value of 1 indicates a simple Huffman code */ + BrotliWriteBits(2, 1, storage_ix, storage); + BrotliWriteBits(2, num_symbols - 1, storage_ix, storage); /* NSYM - 1 */ + + { + /* Sort */ + size_t i; + for (i = 0; i < num_symbols; i++) { + size_t j; + for (j = i + 1; j < num_symbols; j++) { + if (depths[symbols[j]] < depths[symbols[i]]) { + BROTLI_SWAP(size_t, symbols, j, i); + } + } + } + } + + if (num_symbols == 2) { + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); + } else if (num_symbols == 3) { + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[2], storage_ix, storage); + } else { + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[2], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[3], storage_ix, storage); + /* tree-select */ + BrotliWriteBits(1, depths[symbols[0]] == 1 ? 1 : 0, storage_ix, storage); + } +} + +/* num = alphabet size + depths = symbol depths */ +void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num, + HuffmanTree* tree, + size_t *storage_ix, uint8_t *storage) { + /* Write the Huffman tree into the brotli-representation. + The command alphabet is the largest, so this allocation will fit all + alphabets. */ + uint8_t huffman_tree[BROTLI_NUM_COMMAND_SYMBOLS]; + uint8_t huffman_tree_extra_bits[BROTLI_NUM_COMMAND_SYMBOLS]; + size_t huffman_tree_size = 0; + uint8_t code_length_bitdepth[BROTLI_CODE_LENGTH_CODES] = { 0 }; + uint16_t code_length_bitdepth_symbols[BROTLI_CODE_LENGTH_CODES]; + uint32_t huffman_tree_histogram[BROTLI_CODE_LENGTH_CODES] = { 0 }; + size_t i; + int num_codes = 0; + size_t code = 0; + + assert(num <= BROTLI_NUM_COMMAND_SYMBOLS); + + BrotliWriteHuffmanTree(depths, num, &huffman_tree_size, huffman_tree, + huffman_tree_extra_bits); + + /* Calculate the statistics of the Huffman tree in brotli-representation. */ + for (i = 0; i < huffman_tree_size; ++i) { + ++huffman_tree_histogram[huffman_tree[i]]; + } + + for (i = 0; i < BROTLI_CODE_LENGTH_CODES; ++i) { + if (huffman_tree_histogram[i]) { + if (num_codes == 0) { + code = i; + num_codes = 1; + } else if (num_codes == 1) { + num_codes = 2; + break; + } + } + } + + /* Calculate another Huffman tree to use for compressing both the + earlier Huffman tree with. */ + BrotliCreateHuffmanTree(huffman_tree_histogram, BROTLI_CODE_LENGTH_CODES, + 5, tree, code_length_bitdepth); + BrotliConvertBitDepthsToSymbols(code_length_bitdepth, + BROTLI_CODE_LENGTH_CODES, + code_length_bitdepth_symbols); + + /* Now, we have all the data, let's start storing it */ + BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes, code_length_bitdepth, + storage_ix, storage); + + if (num_codes == 1) { + code_length_bitdepth[code] = 0; + } + + /* Store the real Huffman tree now. */ + BrotliStoreHuffmanTreeToBitMask(huffman_tree_size, + huffman_tree, + huffman_tree_extra_bits, + code_length_bitdepth, + code_length_bitdepth_symbols, + storage_ix, storage); +} + +/* Builds a Huffman tree from histogram[0:length] into depth[0:length] and + bits[0:length] and stores the encoded tree to the bit stream. */ +static void BuildAndStoreHuffmanTree(const uint32_t *histogram, + const size_t length, + HuffmanTree* tree, + uint8_t* depth, + uint16_t* bits, + size_t* storage_ix, + uint8_t* storage) { + size_t count = 0; + size_t s4[4] = { 0 }; + size_t i; + size_t max_bits = 0; + for (i = 0; i < length; i++) { + if (histogram[i]) { + if (count < 4) { + s4[count] = i; + } else if (count > 4) { + break; + } + count++; + } + } + + { + size_t max_bits_counter = length - 1; + while (max_bits_counter) { + max_bits_counter >>= 1; + ++max_bits; + } + } + + if (count <= 1) { + BrotliWriteBits(4, 1, storage_ix, storage); + BrotliWriteBits(max_bits, s4[0], storage_ix, storage); + depth[s4[0]] = 0; + bits[s4[0]] = 0; + return; + } + + memset(depth, 0, length * sizeof(depth[0])); + BrotliCreateHuffmanTree(histogram, length, 15, tree, depth); + BrotliConvertBitDepthsToSymbols(depth, length, bits); + + if (count <= 4) { + StoreSimpleHuffmanTree(depth, s4, count, max_bits, storage_ix, storage); + } else { + BrotliStoreHuffmanTree(depth, length, tree, storage_ix, storage); + } +} + +static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree( + const HuffmanTree* v0, const HuffmanTree* v1) { + return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_); +} + +void BrotliBuildAndStoreHuffmanTreeFast(MemoryManager* m, + const uint32_t* histogram, + const size_t histogram_total, + const size_t max_bits, + uint8_t* depth, uint16_t* bits, + size_t* storage_ix, + uint8_t* storage) { + size_t count = 0; + size_t symbols[4] = { 0 }; + size_t length = 0; + size_t total = histogram_total; + while (total != 0) { + if (histogram[length]) { + if (count < 4) { + symbols[count] = length; + } + ++count; + total -= histogram[length]; + } + ++length; + } + + if (count <= 1) { + BrotliWriteBits(4, 1, storage_ix, storage); + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + depth[symbols[0]] = 0; + bits[symbols[0]] = 0; + return; + } + + memset(depth, 0, length * sizeof(depth[0])); + { + const size_t max_tree_size = 2 * length + 1; + HuffmanTree* tree = BROTLI_ALLOC(m, HuffmanTree, max_tree_size); + uint32_t count_limit; + if (BROTLI_IS_OOM(m)) return; + for (count_limit = 1; ; count_limit *= 2) { + HuffmanTree* node = tree; + size_t l; + for (l = length; l != 0;) { + --l; + if (histogram[l]) { + if (BROTLI_PREDICT_TRUE(histogram[l] >= count_limit)) { + InitHuffmanTree(node, histogram[l], -1, (int16_t)l); + } else { + InitHuffmanTree(node, count_limit, -1, (int16_t)l); + } + ++node; + } + } + { + const int n = (int)(node - tree); + HuffmanTree sentinel; + int i = 0; /* Points to the next leaf node. */ + int j = n + 1; /* Points to the next non-leaf node. */ + int k; + + SortHuffmanTreeItems(tree, (size_t)n, SortHuffmanTree); + /* The nodes are: + [0, n): the sorted leaf nodes that we start with. + [n]: we add a sentinel here. + [n + 1, 2n): new parent nodes are added here, starting from + (n+1). These are naturally in ascending order. + [2n]: we add a sentinel at the end as well. + There will be (2n+1) elements at the end. */ + InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1); + *node++ = sentinel; + *node++ = sentinel; + + for (k = n - 1; k > 0; --k) { + int left, right; + if (tree[i].total_count_ <= tree[j].total_count_) { + left = i; + ++i; + } else { + left = j; + ++j; + } + if (tree[i].total_count_ <= tree[j].total_count_) { + right = i; + ++i; + } else { + right = j; + ++j; + } + /* The sentinel node becomes the parent node. */ + node[-1].total_count_ = + tree[left].total_count_ + tree[right].total_count_; + node[-1].index_left_ = (int16_t)left; + node[-1].index_right_or_value_ = (int16_t)right; + /* Add back the last sentinel node. */ + *node++ = sentinel; + } + if (BrotliSetDepth(2 * n - 1, tree, depth, 14)) { + /* We need to pack the Huffman tree in 14 bits. If this was not + successful, add fake entities to the lowest values and retry. */ + break; + } + } + } + BROTLI_FREE(m, tree); + } + BrotliConvertBitDepthsToSymbols(depth, length, bits); + if (count <= 4) { + size_t i; + /* value of 1 indicates a simple Huffman code */ + BrotliWriteBits(2, 1, storage_ix, storage); + BrotliWriteBits(2, count - 1, storage_ix, storage); /* NSYM - 1 */ + + /* Sort */ + for (i = 0; i < count; i++) { + size_t j; + for (j = i + 1; j < count; j++) { + if (depth[symbols[j]] < depth[symbols[i]]) { + BROTLI_SWAP(size_t, symbols, j, i); + } + } + } + + if (count == 2) { + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); + } else if (count == 3) { + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[2], storage_ix, storage); + } else { + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[2], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[3], storage_ix, storage); + /* tree-select */ + BrotliWriteBits(1, depth[symbols[0]] == 1 ? 1 : 0, storage_ix, storage); + } + } else { + uint8_t previous_value = 8; + size_t i; + /* Complex Huffman Tree */ + StoreStaticCodeLengthCode(storage_ix, storage); + + /* Actual RLE coding. */ + for (i = 0; i < length;) { + const uint8_t value = depth[i]; + size_t reps = 1; + size_t k; + for (k = i + 1; k < length && depth[k] == value; ++k) { + ++reps; + } + i += reps; + if (value == 0) { + BrotliWriteBits(kZeroRepsDepth[reps], kZeroRepsBits[reps], + storage_ix, storage); + } else { + if (previous_value != value) { + BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value], + storage_ix, storage); + --reps; + } + if (reps < 3) { + while (reps != 0) { + reps--; + BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value], + storage_ix, storage); + } + } else { + reps -= 3; + BrotliWriteBits(kNonZeroRepsDepth[reps], kNonZeroRepsBits[reps], + storage_ix, storage); + } + previous_value = value; + } + } + } +} + +static size_t IndexOf(const uint8_t* v, size_t v_size, uint8_t value) { + size_t i = 0; + for (; i < v_size; ++i) { + if (v[i] == value) return i; + } + return i; +} + +static void MoveToFront(uint8_t* v, size_t index) { + uint8_t value = v[index]; + size_t i; + for (i = index; i != 0; --i) { + v[i] = v[i - 1]; + } + v[0] = value; +} + +static void MoveToFrontTransform(const uint32_t* BROTLI_RESTRICT v_in, + const size_t v_size, + uint32_t* v_out) { + size_t i; + uint8_t mtf[256]; + uint32_t max_value; + if (v_size == 0) { + return; + } + max_value = v_in[0]; + for (i = 1; i < v_size; ++i) { + if (v_in[i] > max_value) max_value = v_in[i]; + } + assert(max_value < 256u); + for (i = 0; i <= max_value; ++i) { + mtf[i] = (uint8_t)i; + } + { + size_t mtf_size = max_value + 1; + for (i = 0; i < v_size; ++i) { + size_t index = IndexOf(mtf, mtf_size, (uint8_t)v_in[i]); + assert(index < mtf_size); + v_out[i] = (uint32_t)index; + MoveToFront(mtf, index); + } + } +} + +/* Finds runs of zeros in v[0..in_size) and replaces them with a prefix code of + the run length plus extra bits (lower 9 bits is the prefix code and the rest + are the extra bits). Non-zero values in v[] are shifted by + *max_length_prefix. Will not create prefix codes bigger than the initial + value of *max_run_length_prefix. The prefix code of run length L is simply + Log2Floor(L) and the number of extra bits is the same as the prefix code. */ +static void RunLengthCodeZeros(const size_t in_size, + uint32_t* BROTLI_RESTRICT v, size_t* BROTLI_RESTRICT out_size, + uint32_t* BROTLI_RESTRICT max_run_length_prefix) { + uint32_t max_reps = 0; + size_t i; + uint32_t max_prefix; + for (i = 0; i < in_size;) { + uint32_t reps = 0; + for (; i < in_size && v[i] != 0; ++i) ; + for (; i < in_size && v[i] == 0; ++i) { + ++reps; + } + max_reps = BROTLI_MAX(uint32_t, reps, max_reps); + } + max_prefix = max_reps > 0 ? Log2FloorNonZero(max_reps) : 0; + max_prefix = BROTLI_MIN(uint32_t, max_prefix, *max_run_length_prefix); + *max_run_length_prefix = max_prefix; + *out_size = 0; + for (i = 0; i < in_size;) { + assert(*out_size <= i); + if (v[i] != 0) { + v[*out_size] = v[i] + *max_run_length_prefix; + ++i; + ++(*out_size); + } else { + uint32_t reps = 1; + size_t k; + for (k = i + 1; k < in_size && v[k] == 0; ++k) { + ++reps; + } + i += reps; + while (reps != 0) { + if (reps < (2u << max_prefix)) { + uint32_t run_length_prefix = Log2FloorNonZero(reps); + const uint32_t extra_bits = reps - (1u << run_length_prefix); + v[*out_size] = run_length_prefix + (extra_bits << 9); + ++(*out_size); + break; + } else { + const uint32_t extra_bits = (1u << max_prefix) - 1u; + v[*out_size] = max_prefix + (extra_bits << 9); + reps -= (2u << max_prefix) - 1u; + ++(*out_size); + } + } + } + } +} + +#define SYMBOL_BITS 9 + +static void EncodeContextMap(MemoryManager* m, + const uint32_t* context_map, + size_t context_map_size, + size_t num_clusters, + HuffmanTree* tree, + size_t* storage_ix, uint8_t* storage) { + size_t i; + uint32_t* rle_symbols; + uint32_t max_run_length_prefix = 6; + size_t num_rle_symbols = 0; + uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; + static const uint32_t kSymbolMask = (1u << SYMBOL_BITS) - 1u; + uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; + uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; + + StoreVarLenUint8(num_clusters - 1, storage_ix, storage); + + if (num_clusters == 1) { + return; + } + + rle_symbols = BROTLI_ALLOC(m, uint32_t, context_map_size); + if (BROTLI_IS_OOM(m)) return; + MoveToFrontTransform(context_map, context_map_size, rle_symbols); + RunLengthCodeZeros(context_map_size, rle_symbols, + &num_rle_symbols, &max_run_length_prefix); + memset(histogram, 0, sizeof(histogram)); + for (i = 0; i < num_rle_symbols; ++i) { + ++histogram[rle_symbols[i] & kSymbolMask]; + } + { + BROTLI_BOOL use_rle = TO_BROTLI_BOOL(max_run_length_prefix > 0); + BrotliWriteBits(1, (uint64_t)use_rle, storage_ix, storage); + if (use_rle) { + BrotliWriteBits(4, max_run_length_prefix - 1, storage_ix, storage); + } + } + BuildAndStoreHuffmanTree(histogram, num_clusters + max_run_length_prefix, + tree, depths, bits, storage_ix, storage); + for (i = 0; i < num_rle_symbols; ++i) { + const uint32_t rle_symbol = rle_symbols[i] & kSymbolMask; + const uint32_t extra_bits_val = rle_symbols[i] >> SYMBOL_BITS; + BrotliWriteBits(depths[rle_symbol], bits[rle_symbol], storage_ix, storage); + if (rle_symbol > 0 && rle_symbol <= max_run_length_prefix) { + BrotliWriteBits(rle_symbol, extra_bits_val, storage_ix, storage); + } + } + BrotliWriteBits(1, 1, storage_ix, storage); /* use move-to-front */ + BROTLI_FREE(m, rle_symbols); +} + +/* Stores the block switch command with index block_ix to the bit stream. */ +static BROTLI_INLINE void StoreBlockSwitch(BlockSplitCode* code, + const uint32_t block_len, + const uint8_t block_type, + BROTLI_BOOL is_first_block, + size_t* storage_ix, + uint8_t* storage) { + size_t typecode = NextBlockTypeCode(&code->type_code_calculator, block_type); + size_t lencode; + uint32_t len_nextra; + uint32_t len_extra; + if (!is_first_block) { + BrotliWriteBits(code->type_depths[typecode], code->type_bits[typecode], + storage_ix, storage); + } + GetBlockLengthPrefixCode(block_len, &lencode, &len_nextra, &len_extra); + + BrotliWriteBits(code->length_depths[lencode], code->length_bits[lencode], + storage_ix, storage); + BrotliWriteBits(len_nextra, len_extra, storage_ix, storage); +} + +/* Builds a BlockSplitCode data structure from the block split given by the + vector of block types and block lengths and stores it to the bit stream. */ +static void BuildAndStoreBlockSplitCode(const uint8_t* types, + const uint32_t* lengths, + const size_t num_blocks, + const size_t num_types, + HuffmanTree* tree, + BlockSplitCode* code, + size_t* storage_ix, + uint8_t* storage) { + uint32_t type_histo[BROTLI_MAX_BLOCK_TYPE_SYMBOLS]; + uint32_t length_histo[BROTLI_NUM_BLOCK_LEN_SYMBOLS]; + size_t i; + BlockTypeCodeCalculator type_code_calculator; + memset(type_histo, 0, (num_types + 2) * sizeof(type_histo[0])); + memset(length_histo, 0, sizeof(length_histo)); + InitBlockTypeCodeCalculator(&type_code_calculator); + for (i = 0; i < num_blocks; ++i) { + size_t type_code = NextBlockTypeCode(&type_code_calculator, types[i]); + if (i != 0) ++type_histo[type_code]; + ++length_histo[BlockLengthPrefixCode(lengths[i])]; + } + StoreVarLenUint8(num_types - 1, storage_ix, storage); + if (num_types > 1) { /* TODO: else? could StoreBlockSwitch occur? */ + BuildAndStoreHuffmanTree(&type_histo[0], num_types + 2, tree, + &code->type_depths[0], &code->type_bits[0], + storage_ix, storage); + BuildAndStoreHuffmanTree(&length_histo[0], BROTLI_NUM_BLOCK_LEN_SYMBOLS, + tree, &code->length_depths[0], + &code->length_bits[0], storage_ix, storage); + StoreBlockSwitch(code, lengths[0], types[0], 1, storage_ix, storage); + } +} + +/* Stores a context map where the histogram type is always the block type. */ +static void StoreTrivialContextMap(size_t num_types, + size_t context_bits, + HuffmanTree* tree, + size_t* storage_ix, + uint8_t* storage) { + StoreVarLenUint8(num_types - 1, storage_ix, storage); + if (num_types > 1) { + size_t repeat_code = context_bits - 1u; + size_t repeat_bits = (1u << repeat_code) - 1u; + size_t alphabet_size = num_types + repeat_code; + uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; + uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; + uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; + size_t i; + memset(histogram, 0, alphabet_size * sizeof(histogram[0])); + /* Write RLEMAX. */ + BrotliWriteBits(1, 1, storage_ix, storage); + BrotliWriteBits(4, repeat_code - 1, storage_ix, storage); + histogram[repeat_code] = (uint32_t)num_types; + histogram[0] = 1; + for (i = context_bits; i < alphabet_size; ++i) { + histogram[i] = 1; + } + BuildAndStoreHuffmanTree(histogram, alphabet_size, tree, + depths, bits, storage_ix, storage); + for (i = 0; i < num_types; ++i) { + size_t code = (i == 0 ? 0 : i + context_bits - 1); + BrotliWriteBits(depths[code], bits[code], storage_ix, storage); + BrotliWriteBits( + depths[repeat_code], bits[repeat_code], storage_ix, storage); + BrotliWriteBits(repeat_code, repeat_bits, storage_ix, storage); + } + /* Write IMTF (inverse-move-to-front) bit. */ + BrotliWriteBits(1, 1, storage_ix, storage); + } +} + +/* Manages the encoding of one block category (literal, command or distance). */ +typedef struct BlockEncoder { + size_t alphabet_size_; + size_t num_block_types_; + const uint8_t* block_types_; /* Not owned. */ + const uint32_t* block_lengths_; /* Not owned. */ + size_t num_blocks_; + BlockSplitCode block_split_code_; + size_t block_ix_; + size_t block_len_; + size_t entropy_ix_; + uint8_t* depths_; + uint16_t* bits_; +} BlockEncoder; + +static void InitBlockEncoder(BlockEncoder* self, size_t alphabet_size, + size_t num_block_types, const uint8_t* block_types, + const uint32_t* block_lengths, const size_t num_blocks) { + self->alphabet_size_ = alphabet_size; + self->num_block_types_ = num_block_types; + self->block_types_ = block_types; + self->block_lengths_ = block_lengths; + self->num_blocks_ = num_blocks; + InitBlockTypeCodeCalculator(&self->block_split_code_.type_code_calculator); + self->block_ix_ = 0; + self->block_len_ = num_blocks == 0 ? 0 : block_lengths[0]; + self->entropy_ix_ = 0; + self->depths_ = 0; + self->bits_ = 0; +} + +static void CleanupBlockEncoder(MemoryManager* m, BlockEncoder* self) { + BROTLI_FREE(m, self->depths_); + BROTLI_FREE(m, self->bits_); +} + +/* Creates entropy codes of block lengths and block types and stores them + to the bit stream. */ +static void BuildAndStoreBlockSwitchEntropyCodes(BlockEncoder* self, + HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) { + BuildAndStoreBlockSplitCode(self->block_types_, self->block_lengths_, + self->num_blocks_, self->num_block_types_, tree, &self->block_split_code_, + storage_ix, storage); +} + +/* Stores the next symbol with the entropy code of the current block type. + Updates the block type and block length at block boundaries. */ +static void StoreSymbol(BlockEncoder* self, size_t symbol, size_t* storage_ix, + uint8_t* storage) { + if (self->block_len_ == 0) { + size_t block_ix = ++self->block_ix_; + uint32_t block_len = self->block_lengths_[block_ix]; + uint8_t block_type = self->block_types_[block_ix]; + self->block_len_ = block_len; + self->entropy_ix_ = block_type * self->alphabet_size_; + StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0, + storage_ix, storage); + } + --self->block_len_; + { + size_t ix = self->entropy_ix_ + symbol; + BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage); + } +} + +/* Stores the next symbol with the entropy code of the current block type and + context value. + Updates the block type and block length at block boundaries. */ +static void StoreSymbolWithContext(BlockEncoder* self, size_t symbol, + size_t context, const uint32_t* context_map, size_t* storage_ix, + uint8_t* storage, const size_t context_bits) { + if (self->block_len_ == 0) { + size_t block_ix = ++self->block_ix_; + uint32_t block_len = self->block_lengths_[block_ix]; + uint8_t block_type = self->block_types_[block_ix]; + self->block_len_ = block_len; + self->entropy_ix_ = (size_t)block_type << context_bits; + StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0, + storage_ix, storage); + } + --self->block_len_; + { + size_t histo_ix = context_map[self->entropy_ix_ + context]; + size_t ix = histo_ix * self->alphabet_size_ + symbol; + BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage); + } +} + +#define FN(X) X ## Literal +/* NOLINTNEXTLINE(build/include) */ +#include "./block_encoder_inc.h" +#undef FN + +#define FN(X) X ## Command +/* NOLINTNEXTLINE(build/include) */ +#include "./block_encoder_inc.h" +#undef FN + +#define FN(X) X ## Distance +/* NOLINTNEXTLINE(build/include) */ +#include "./block_encoder_inc.h" +#undef FN + +static void JumpToByteBoundary(size_t* storage_ix, uint8_t* storage) { + *storage_ix = (*storage_ix + 7u) & ~7u; + storage[*storage_ix >> 3] = 0; +} + +void BrotliStoreMetaBlock(MemoryManager* m, + const uint8_t* input, + size_t start_pos, + size_t length, + size_t mask, + uint8_t prev_byte, + uint8_t prev_byte2, + BROTLI_BOOL is_last, + uint32_t num_direct_distance_codes, + uint32_t distance_postfix_bits, + ContextType literal_context_mode, + const Command *commands, + size_t n_commands, + const MetaBlockSplit* mb, + size_t *storage_ix, + uint8_t *storage) { + size_t pos = start_pos; + size_t i; + size_t num_distance_codes = + BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_distance_codes + + (48u << distance_postfix_bits); + HuffmanTree* tree; + BlockEncoder literal_enc; + BlockEncoder command_enc; + BlockEncoder distance_enc; + + StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); + + tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE); + if (BROTLI_IS_OOM(m)) return; + InitBlockEncoder(&literal_enc, 256, mb->literal_split.num_types, + mb->literal_split.types, mb->literal_split.lengths, + mb->literal_split.num_blocks); + InitBlockEncoder(&command_enc, BROTLI_NUM_COMMAND_SYMBOLS, + mb->command_split.num_types, mb->command_split.types, + mb->command_split.lengths, mb->command_split.num_blocks); + InitBlockEncoder(&distance_enc, num_distance_codes, + mb->distance_split.num_types, mb->distance_split.types, + mb->distance_split.lengths, mb->distance_split.num_blocks); + + BuildAndStoreBlockSwitchEntropyCodes(&literal_enc, tree, storage_ix, storage); + BuildAndStoreBlockSwitchEntropyCodes(&command_enc, tree, storage_ix, storage); + BuildAndStoreBlockSwitchEntropyCodes( + &distance_enc, tree, storage_ix, storage); + + BrotliWriteBits(2, distance_postfix_bits, storage_ix, storage); + BrotliWriteBits(4, num_direct_distance_codes >> distance_postfix_bits, + storage_ix, storage); + for (i = 0; i < mb->literal_split.num_types; ++i) { + BrotliWriteBits(2, literal_context_mode, storage_ix, storage); + } + + if (mb->literal_context_map_size == 0) { + StoreTrivialContextMap(mb->literal_histograms_size, + BROTLI_LITERAL_CONTEXT_BITS, tree, storage_ix, storage); + } else { + EncodeContextMap(m, + mb->literal_context_map, mb->literal_context_map_size, + mb->literal_histograms_size, tree, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + } + + if (mb->distance_context_map_size == 0) { + StoreTrivialContextMap(mb->distance_histograms_size, + BROTLI_DISTANCE_CONTEXT_BITS, tree, storage_ix, storage); + } else { + EncodeContextMap(m, + mb->distance_context_map, mb->distance_context_map_size, + mb->distance_histograms_size, tree, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + } + + BuildAndStoreEntropyCodesLiteral(m, &literal_enc, mb->literal_histograms, + mb->literal_histograms_size, tree, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + BuildAndStoreEntropyCodesCommand(m, &command_enc, mb->command_histograms, + mb->command_histograms_size, tree, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + BuildAndStoreEntropyCodesDistance(m, &distance_enc, mb->distance_histograms, + mb->distance_histograms_size, tree, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + BROTLI_FREE(m, tree); + + for (i = 0; i < n_commands; ++i) { + const Command cmd = commands[i]; + size_t cmd_code = cmd.cmd_prefix_; + StoreSymbol(&command_enc, cmd_code, storage_ix, storage); + StoreCommandExtra(&cmd, storage_ix, storage); + if (mb->literal_context_map_size == 0) { + size_t j; + for (j = cmd.insert_len_; j != 0; --j) { + StoreSymbol(&literal_enc, input[pos & mask], storage_ix, storage); + ++pos; + } + } else { + size_t j; + for (j = cmd.insert_len_; j != 0; --j) { + size_t context = Context(prev_byte, prev_byte2, literal_context_mode); + uint8_t literal = input[pos & mask]; + StoreSymbolWithContext(&literal_enc, literal, context, + mb->literal_context_map, storage_ix, storage, + BROTLI_LITERAL_CONTEXT_BITS); + prev_byte2 = prev_byte; + prev_byte = literal; + ++pos; + } + } + pos += CommandCopyLen(&cmd); + if (CommandCopyLen(&cmd)) { + prev_byte2 = input[(pos - 2) & mask]; + prev_byte = input[(pos - 1) & mask]; + if (cmd.cmd_prefix_ >= 128) { + size_t dist_code = cmd.dist_prefix_; + uint32_t distnumextra = cmd.dist_extra_ >> 24; + uint64_t distextra = cmd.dist_extra_ & 0xffffff; + if (mb->distance_context_map_size == 0) { + StoreSymbol(&distance_enc, dist_code, storage_ix, storage); + } else { + size_t context = CommandDistanceContext(&cmd); + StoreSymbolWithContext(&distance_enc, dist_code, context, + mb->distance_context_map, storage_ix, storage, + BROTLI_DISTANCE_CONTEXT_BITS); + } + BrotliWriteBits(distnumextra, distextra, storage_ix, storage); + } + } + } + CleanupBlockEncoder(m, &distance_enc); + CleanupBlockEncoder(m, &command_enc); + CleanupBlockEncoder(m, &literal_enc); + if (is_last) { + JumpToByteBoundary(storage_ix, storage); + } +} + +static void BuildHistograms(const uint8_t* input, + size_t start_pos, + size_t mask, + const Command *commands, + size_t n_commands, + HistogramLiteral* lit_histo, + HistogramCommand* cmd_histo, + HistogramDistance* dist_histo) { + size_t pos = start_pos; + size_t i; + for (i = 0; i < n_commands; ++i) { + const Command cmd = commands[i]; + size_t j; + HistogramAddCommand(cmd_histo, cmd.cmd_prefix_); + for (j = cmd.insert_len_; j != 0; --j) { + HistogramAddLiteral(lit_histo, input[pos & mask]); + ++pos; + } + pos += CommandCopyLen(&cmd); + if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) { + HistogramAddDistance(dist_histo, cmd.dist_prefix_); + } + } +} + +static void StoreDataWithHuffmanCodes(const uint8_t* input, + size_t start_pos, + size_t mask, + const Command *commands, + size_t n_commands, + const uint8_t* lit_depth, + const uint16_t* lit_bits, + const uint8_t* cmd_depth, + const uint16_t* cmd_bits, + const uint8_t* dist_depth, + const uint16_t* dist_bits, + size_t* storage_ix, + uint8_t* storage) { + size_t pos = start_pos; + size_t i; + for (i = 0; i < n_commands; ++i) { + const Command cmd = commands[i]; + const size_t cmd_code = cmd.cmd_prefix_; + size_t j; + BrotliWriteBits( + cmd_depth[cmd_code], cmd_bits[cmd_code], storage_ix, storage); + StoreCommandExtra(&cmd, storage_ix, storage); + for (j = cmd.insert_len_; j != 0; --j) { + const uint8_t literal = input[pos & mask]; + BrotliWriteBits( + lit_depth[literal], lit_bits[literal], storage_ix, storage); + ++pos; + } + pos += CommandCopyLen(&cmd); + if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) { + const size_t dist_code = cmd.dist_prefix_; + const uint32_t distnumextra = cmd.dist_extra_ >> 24; + const uint32_t distextra = cmd.dist_extra_ & 0xffffff; + BrotliWriteBits(dist_depth[dist_code], dist_bits[dist_code], + storage_ix, storage); + BrotliWriteBits(distnumextra, distextra, storage_ix, storage); + } + } +} + +void BrotliStoreMetaBlockTrivial(MemoryManager* m, + const uint8_t* input, + size_t start_pos, + size_t length, + size_t mask, + BROTLI_BOOL is_last, + const Command *commands, + size_t n_commands, + size_t *storage_ix, + uint8_t *storage) { + HistogramLiteral lit_histo; + HistogramCommand cmd_histo; + HistogramDistance dist_histo; + uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS]; + uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS]; + uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS]; + uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS]; + uint8_t dist_depth[SIMPLE_DISTANCE_ALPHABET_SIZE]; + uint16_t dist_bits[SIMPLE_DISTANCE_ALPHABET_SIZE]; + HuffmanTree* tree; + + StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); + + HistogramClearLiteral(&lit_histo); + HistogramClearCommand(&cmd_histo); + HistogramClearDistance(&dist_histo); + + BuildHistograms(input, start_pos, mask, commands, n_commands, + &lit_histo, &cmd_histo, &dist_histo); + + BrotliWriteBits(13, 0, storage_ix, storage); + + tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE); + if (BROTLI_IS_OOM(m)) return; + BuildAndStoreHuffmanTree(lit_histo.data_, BROTLI_NUM_LITERAL_SYMBOLS, tree, + lit_depth, lit_bits, + storage_ix, storage); + BuildAndStoreHuffmanTree(cmd_histo.data_, BROTLI_NUM_COMMAND_SYMBOLS, tree, + cmd_depth, cmd_bits, + storage_ix, storage); + BuildAndStoreHuffmanTree(dist_histo.data_, SIMPLE_DISTANCE_ALPHABET_SIZE, + tree, + dist_depth, dist_bits, + storage_ix, storage); + BROTLI_FREE(m, tree); + StoreDataWithHuffmanCodes(input, start_pos, mask, commands, + n_commands, lit_depth, lit_bits, + cmd_depth, cmd_bits, + dist_depth, dist_bits, + storage_ix, storage); + if (is_last) { + JumpToByteBoundary(storage_ix, storage); + } +} + +void BrotliStoreMetaBlockFast(MemoryManager* m, + const uint8_t* input, + size_t start_pos, + size_t length, + size_t mask, + BROTLI_BOOL is_last, + const Command *commands, + size_t n_commands, + size_t *storage_ix, + uint8_t *storage) { + StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); + + BrotliWriteBits(13, 0, storage_ix, storage); + + if (n_commands <= 128) { + uint32_t histogram[BROTLI_NUM_LITERAL_SYMBOLS] = { 0 }; + size_t pos = start_pos; + size_t num_literals = 0; + size_t i; + uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS]; + uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS]; + for (i = 0; i < n_commands; ++i) { + const Command cmd = commands[i]; + size_t j; + for (j = cmd.insert_len_; j != 0; --j) { + ++histogram[input[pos & mask]]; + ++pos; + } + num_literals += cmd.insert_len_; + pos += CommandCopyLen(&cmd); + } + BrotliBuildAndStoreHuffmanTreeFast(m, histogram, num_literals, + /* max_bits = */ 8, + lit_depth, lit_bits, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + StoreStaticCommandHuffmanTree(storage_ix, storage); + StoreStaticDistanceHuffmanTree(storage_ix, storage); + StoreDataWithHuffmanCodes(input, start_pos, mask, commands, + n_commands, lit_depth, lit_bits, + kStaticCommandCodeDepth, + kStaticCommandCodeBits, + kStaticDistanceCodeDepth, + kStaticDistanceCodeBits, + storage_ix, storage); + } else { + HistogramLiteral lit_histo; + HistogramCommand cmd_histo; + HistogramDistance dist_histo; + uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS]; + uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS]; + uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS]; + uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS]; + uint8_t dist_depth[SIMPLE_DISTANCE_ALPHABET_SIZE]; + uint16_t dist_bits[SIMPLE_DISTANCE_ALPHABET_SIZE]; + HistogramClearLiteral(&lit_histo); + HistogramClearCommand(&cmd_histo); + HistogramClearDistance(&dist_histo); + BuildHistograms(input, start_pos, mask, commands, n_commands, + &lit_histo, &cmd_histo, &dist_histo); + BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo.data_, + lit_histo.total_count_, + /* max_bits = */ 8, + lit_depth, lit_bits, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + BrotliBuildAndStoreHuffmanTreeFast(m, cmd_histo.data_, + cmd_histo.total_count_, + /* max_bits = */ 10, + cmd_depth, cmd_bits, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + BrotliBuildAndStoreHuffmanTreeFast(m, dist_histo.data_, + dist_histo.total_count_, + /* max_bits = */ + SIMPLE_DISTANCE_ALPHABET_BITS, + dist_depth, dist_bits, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + StoreDataWithHuffmanCodes(input, start_pos, mask, commands, + n_commands, lit_depth, lit_bits, + cmd_depth, cmd_bits, + dist_depth, dist_bits, + storage_ix, storage); + } + + if (is_last) { + JumpToByteBoundary(storage_ix, storage); + } +} + +/* This is for storing uncompressed blocks (simple raw storage of + bytes-as-bytes). */ +void BrotliStoreUncompressedMetaBlock(BROTLI_BOOL is_final_block, + const uint8_t * BROTLI_RESTRICT input, + size_t position, size_t mask, + size_t len, + size_t * BROTLI_RESTRICT storage_ix, + uint8_t * BROTLI_RESTRICT storage) { + size_t masked_pos = position & mask; + BrotliStoreUncompressedMetaBlockHeader(len, storage_ix, storage); + JumpToByteBoundary(storage_ix, storage); + + if (masked_pos + len > mask + 1) { + size_t len1 = mask + 1 - masked_pos; + memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len1); + *storage_ix += len1 << 3; + len -= len1; + masked_pos = 0; + } + memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len); + *storage_ix += len << 3; + + /* We need to clear the next 4 bytes to continue to be + compatible with BrotliWriteBits. */ + BrotliWriteBitsPrepareStorage(*storage_ix, storage); + + /* Since the uncompressed block itself may not be the final block, add an + empty one after this. */ + if (is_final_block) { + BrotliWriteBits(1, 1, storage_ix, storage); /* islast */ + BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */ + JumpToByteBoundary(storage_ix, storage); + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/brotli_bit_stream.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/brotli_bit_stream.h new file mode 100644 index 00000000000..2c8bfedc777 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/brotli_bit_stream.h @@ -0,0 +1,103 @@ +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Functions to convert brotli-related data structures into the + brotli bit stream. The functions here operate under + assumption that there is enough space in the storage, i.e., there are + no out-of-range checks anywhere. + + These functions do bit addressing into a byte array. The byte array + is called "storage" and the index to the bit is called storage_ix + in function arguments. */ + +#ifndef BROTLI_ENC_BROTLI_BIT_STREAM_H_ +#define BROTLI_ENC_BROTLI_BIT_STREAM_H_ + +#include <brotli/types.h> +#include "./command.h" +#include "./context.h" +#include "./entropy_encode.h" +#include "./memory.h" +#include "./metablock.h" +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* All Store functions here will use a storage_ix, which is always the bit + position for the current storage. */ + +BROTLI_INTERNAL void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num, + HuffmanTree* tree, size_t *storage_ix, uint8_t *storage); + +BROTLI_INTERNAL void BrotliBuildAndStoreHuffmanTreeFast( + MemoryManager* m, const uint32_t* histogram, const size_t histogram_total, + const size_t max_bits, uint8_t* depth, uint16_t* bits, size_t* storage_ix, + uint8_t* storage); + +/* REQUIRES: length > 0 */ +/* REQUIRES: length <= (1 << 24) */ +BROTLI_INTERNAL void BrotliStoreMetaBlock(MemoryManager* m, + const uint8_t* input, + size_t start_pos, + size_t length, + size_t mask, + uint8_t prev_byte, + uint8_t prev_byte2, + BROTLI_BOOL is_final_block, + uint32_t num_direct_distance_codes, + uint32_t distance_postfix_bits, + ContextType literal_context_mode, + const Command* commands, + size_t n_commands, + const MetaBlockSplit* mb, + size_t* storage_ix, + uint8_t* storage); + +/* Stores the meta-block without doing any block splitting, just collects + one histogram per block category and uses that for entropy coding. + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +BROTLI_INTERNAL void BrotliStoreMetaBlockTrivial(MemoryManager* m, + const uint8_t* input, + size_t start_pos, + size_t length, + size_t mask, + BROTLI_BOOL is_last, + const Command *commands, + size_t n_commands, + size_t* storage_ix, + uint8_t* storage); + +/* Same as above, but uses static prefix codes for histograms with a only a few + symbols, and uses static code length prefix codes for all other histograms. + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +BROTLI_INTERNAL void BrotliStoreMetaBlockFast(MemoryManager* m, + const uint8_t* input, + size_t start_pos, + size_t length, + size_t mask, + BROTLI_BOOL is_last, + const Command *commands, + size_t n_commands, + size_t* storage_ix, + uint8_t* storage); + +/* This is for storing uncompressed blocks (simple raw storage of + bytes-as-bytes). + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +BROTLI_INTERNAL void BrotliStoreUncompressedMetaBlock( + BROTLI_BOOL is_final_block, const uint8_t* input, size_t position, + size_t mask, size_t len, size_t* storage_ix, uint8_t* storage); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_BROTLI_BIT_STREAM_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/cluster.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/cluster.c new file mode 100644 index 00000000000..bb663278470 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/cluster.c @@ -0,0 +1,56 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Functions for clustering similar histograms together. */ + +#include "./cluster.h" + +#include <brotli/types.h> +#include "./bit_cost.h" /* BrotliPopulationCost */ +#include "./fast_log.h" +#include "./histogram.h" +#include "./memory.h" +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static BROTLI_INLINE BROTLI_BOOL HistogramPairIsLess( + const HistogramPair* p1, const HistogramPair* p2) { + if (p1->cost_diff != p2->cost_diff) { + return TO_BROTLI_BOOL(p1->cost_diff > p2->cost_diff); + } + return TO_BROTLI_BOOL((p1->idx2 - p1->idx1) > (p2->idx2 - p2->idx1)); +} + +/* Returns entropy reduction of the context map when we combine two clusters. */ +static BROTLI_INLINE double ClusterCostDiff(size_t size_a, size_t size_b) { + size_t size_c = size_a + size_b; + return (double)size_a * FastLog2(size_a) + + (double)size_b * FastLog2(size_b) - + (double)size_c * FastLog2(size_c); +} + +#define CODE(X) X + +#define FN(X) X ## Literal +#include "./cluster_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Command +#include "./cluster_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Distance +#include "./cluster_inc.h" /* NOLINT(build/include) */ +#undef FN + +#undef CODE + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/cluster.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/cluster.h new file mode 100644 index 00000000000..be58614b7ac --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/cluster.h @@ -0,0 +1,48 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Functions for clustering similar histograms together. */ + +#ifndef BROTLI_ENC_CLUSTER_H_ +#define BROTLI_ENC_CLUSTER_H_ + +#include <brotli/types.h> +#include "./histogram.h" +#include "./memory.h" +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +typedef struct HistogramPair { + uint32_t idx1; + uint32_t idx2; + double cost_combo; + double cost_diff; +} HistogramPair; + +#define CODE(X) /* Declaration */; + +#define FN(X) X ## Literal +#include "./cluster_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Command +#include "./cluster_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Distance +#include "./cluster_inc.h" /* NOLINT(build/include) */ +#undef FN + +#undef CODE + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_CLUSTER_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/cluster_inc.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/cluster_inc.h new file mode 100644 index 00000000000..22ecb3cca80 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/cluster_inc.h @@ -0,0 +1,317 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN, CODE */ + +#define HistogramType FN(Histogram) + +/* Computes the bit cost reduction by combining out[idx1] and out[idx2] and if + it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */ +BROTLI_INTERNAL void FN(BrotliCompareAndPushToQueue)( + const HistogramType* out, const uint32_t* cluster_size, uint32_t idx1, + uint32_t idx2, size_t max_num_pairs, HistogramPair* pairs, + size_t* num_pairs) CODE({ + BROTLI_BOOL is_good_pair = BROTLI_FALSE; + HistogramPair p; + p.idx1 = p.idx2 = 0; + p.cost_diff = p.cost_combo = 0; + if (idx1 == idx2) { + return; + } + if (idx2 < idx1) { + uint32_t t = idx2; + idx2 = idx1; + idx1 = t; + } + p.idx1 = idx1; + p.idx2 = idx2; + p.cost_diff = 0.5 * ClusterCostDiff(cluster_size[idx1], cluster_size[idx2]); + p.cost_diff -= out[idx1].bit_cost_; + p.cost_diff -= out[idx2].bit_cost_; + + if (out[idx1].total_count_ == 0) { + p.cost_combo = out[idx2].bit_cost_; + is_good_pair = BROTLI_TRUE; + } else if (out[idx2].total_count_ == 0) { + p.cost_combo = out[idx1].bit_cost_; + is_good_pair = BROTLI_TRUE; + } else { + double threshold = *num_pairs == 0 ? 1e99 : + BROTLI_MAX(double, 0.0, pairs[0].cost_diff); + HistogramType combo = out[idx1]; + double cost_combo; + FN(HistogramAddHistogram)(&combo, &out[idx2]); + cost_combo = FN(BrotliPopulationCost)(&combo); + if (cost_combo < threshold - p.cost_diff) { + p.cost_combo = cost_combo; + is_good_pair = BROTLI_TRUE; + } + } + if (is_good_pair) { + p.cost_diff += p.cost_combo; + if (*num_pairs > 0 && HistogramPairIsLess(&pairs[0], &p)) { + /* Replace the top of the queue if needed. */ + if (*num_pairs < max_num_pairs) { + pairs[*num_pairs] = pairs[0]; + ++(*num_pairs); + } + pairs[0] = p; + } else if (*num_pairs < max_num_pairs) { + pairs[*num_pairs] = p; + ++(*num_pairs); + } + } +}) + +BROTLI_INTERNAL size_t FN(BrotliHistogramCombine)(HistogramType* out, + uint32_t* cluster_size, + uint32_t* symbols, + uint32_t* clusters, + HistogramPair* pairs, + size_t num_clusters, + size_t symbols_size, + size_t max_clusters, + size_t max_num_pairs) CODE({ + double cost_diff_threshold = 0.0; + size_t min_cluster_size = 1; + size_t num_pairs = 0; + + { + /* We maintain a vector of histogram pairs, with the property that the pair + with the maximum bit cost reduction is the first. */ + size_t idx1; + for (idx1 = 0; idx1 < num_clusters; ++idx1) { + size_t idx2; + for (idx2 = idx1 + 1; idx2 < num_clusters; ++idx2) { + FN(BrotliCompareAndPushToQueue)(out, cluster_size, clusters[idx1], + clusters[idx2], max_num_pairs, &pairs[0], &num_pairs); + } + } + } + + while (num_clusters > min_cluster_size) { + uint32_t best_idx1; + uint32_t best_idx2; + size_t i; + if (pairs[0].cost_diff >= cost_diff_threshold) { + cost_diff_threshold = 1e99; + min_cluster_size = max_clusters; + continue; + } + /* Take the best pair from the top of heap. */ + best_idx1 = pairs[0].idx1; + best_idx2 = pairs[0].idx2; + FN(HistogramAddHistogram)(&out[best_idx1], &out[best_idx2]); + out[best_idx1].bit_cost_ = pairs[0].cost_combo; + cluster_size[best_idx1] += cluster_size[best_idx2]; + for (i = 0; i < symbols_size; ++i) { + if (symbols[i] == best_idx2) { + symbols[i] = best_idx1; + } + } + for (i = 0; i < num_clusters; ++i) { + if (clusters[i] == best_idx2) { + memmove(&clusters[i], &clusters[i + 1], + (num_clusters - i - 1) * sizeof(clusters[0])); + break; + } + } + --num_clusters; + { + /* Remove pairs intersecting the just combined best pair. */ + size_t copy_to_idx = 0; + for (i = 0; i < num_pairs; ++i) { + HistogramPair* p = &pairs[i]; + if (p->idx1 == best_idx1 || p->idx2 == best_idx1 || + p->idx1 == best_idx2 || p->idx2 == best_idx2) { + /* Remove invalid pair from the queue. */ + continue; + } + if (HistogramPairIsLess(&pairs[0], p)) { + /* Replace the top of the queue if needed. */ + HistogramPair front = pairs[0]; + pairs[0] = *p; + pairs[copy_to_idx] = front; + } else { + pairs[copy_to_idx] = *p; + } + ++copy_to_idx; + } + num_pairs = copy_to_idx; + } + + /* Push new pairs formed with the combined histogram to the heap. */ + for (i = 0; i < num_clusters; ++i) { + FN(BrotliCompareAndPushToQueue)(out, cluster_size, best_idx1, clusters[i], + max_num_pairs, &pairs[0], &num_pairs); + } + } + return num_clusters; +}) + +/* What is the bit cost of moving histogram from cur_symbol to candidate. */ +BROTLI_INTERNAL double FN(BrotliHistogramBitCostDistance)( + const HistogramType* histogram, const HistogramType* candidate) CODE({ + if (histogram->total_count_ == 0) { + return 0.0; + } else { + HistogramType tmp = *histogram; + FN(HistogramAddHistogram)(&tmp, candidate); + return FN(BrotliPopulationCost)(&tmp) - candidate->bit_cost_; + } +}) + +/* Find the best 'out' histogram for each of the 'in' histograms. + When called, clusters[0..num_clusters) contains the unique values from + symbols[0..in_size), but this property is not preserved in this function. + Note: we assume that out[]->bit_cost_ is already up-to-date. */ +BROTLI_INTERNAL void FN(BrotliHistogramRemap)(const HistogramType* in, + size_t in_size, const uint32_t* clusters, size_t num_clusters, + HistogramType* out, uint32_t* symbols) CODE({ + size_t i; + for (i = 0; i < in_size; ++i) { + uint32_t best_out = i == 0 ? symbols[0] : symbols[i - 1]; + double best_bits = + FN(BrotliHistogramBitCostDistance)(&in[i], &out[best_out]); + size_t j; + for (j = 0; j < num_clusters; ++j) { + const double cur_bits = + FN(BrotliHistogramBitCostDistance)(&in[i], &out[clusters[j]]); + if (cur_bits < best_bits) { + best_bits = cur_bits; + best_out = clusters[j]; + } + } + symbols[i] = best_out; + } + + /* Recompute each out based on raw and symbols. */ + for (i = 0; i < num_clusters; ++i) { + FN(HistogramClear)(&out[clusters[i]]); + } + for (i = 0; i < in_size; ++i) { + FN(HistogramAddHistogram)(&out[symbols[i]], &in[i]); + } +}) + +/* Reorders elements of the out[0..length) array and changes values in + symbols[0..length) array in the following way: + * when called, symbols[] contains indexes into out[], and has N unique + values (possibly N < length) + * on return, symbols'[i] = f(symbols[i]) and + out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length, + where f is a bijection between the range of symbols[] and [0..N), and + the first occurrences of values in symbols'[i] come in consecutive + increasing order. + Returns N, the number of unique values in symbols[]. */ +BROTLI_INTERNAL size_t FN(BrotliHistogramReindex)(MemoryManager* m, + HistogramType* out, uint32_t* symbols, size_t length) CODE({ + static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX; + uint32_t* new_index = BROTLI_ALLOC(m, uint32_t, length); + uint32_t next_index; + HistogramType* tmp; + size_t i; + if (BROTLI_IS_OOM(m)) return 0; + for (i = 0; i < length; ++i) { + new_index[i] = kInvalidIndex; + } + next_index = 0; + for (i = 0; i < length; ++i) { + if (new_index[symbols[i]] == kInvalidIndex) { + new_index[symbols[i]] = next_index; + ++next_index; + } + } + /* TODO: by using idea of "cycle-sort" we can avoid allocation of + tmp and reduce the number of copying by the factor of 2. */ + tmp = BROTLI_ALLOC(m, HistogramType, next_index); + if (BROTLI_IS_OOM(m)) return 0; + next_index = 0; + for (i = 0; i < length; ++i) { + if (new_index[symbols[i]] == next_index) { + tmp[next_index] = out[symbols[i]]; + ++next_index; + } + symbols[i] = new_index[symbols[i]]; + } + BROTLI_FREE(m, new_index); + for (i = 0; i < next_index; ++i) { + out[i] = tmp[i]; + } + BROTLI_FREE(m, tmp); + return next_index; +}) + +BROTLI_INTERNAL void FN(BrotliClusterHistograms)( + MemoryManager* m, const HistogramType* in, const size_t in_size, + size_t max_histograms, HistogramType* out, size_t* out_size, + uint32_t* histogram_symbols) CODE({ + uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, in_size); + uint32_t* clusters = BROTLI_ALLOC(m, uint32_t, in_size); + size_t num_clusters = 0; + const size_t max_input_histograms = 64; + size_t pairs_capacity = max_input_histograms * max_input_histograms / 2; + /* For the first pass of clustering, we allow all pairs. */ + HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity + 1); + size_t i; + + if (BROTLI_IS_OOM(m)) return; + + for (i = 0; i < in_size; ++i) { + cluster_size[i] = 1; + } + + for (i = 0; i < in_size; ++i) { + out[i] = in[i]; + out[i].bit_cost_ = FN(BrotliPopulationCost)(&in[i]); + histogram_symbols[i] = (uint32_t)i; + } + + for (i = 0; i < in_size; i += max_input_histograms) { + size_t num_to_combine = + BROTLI_MIN(size_t, in_size - i, max_input_histograms); + size_t num_new_clusters; + size_t j; + for (j = 0; j < num_to_combine; ++j) { + clusters[num_clusters + j] = (uint32_t)(i + j); + } + num_new_clusters = + FN(BrotliHistogramCombine)(out, cluster_size, + &histogram_symbols[i], + &clusters[num_clusters], pairs, + num_to_combine, num_to_combine, + max_histograms, pairs_capacity); + num_clusters += num_new_clusters; + } + + { + /* For the second pass, we limit the total number of histogram pairs. + After this limit is reached, we only keep searching for the best pair. */ + size_t max_num_pairs = BROTLI_MIN(size_t, + 64 * num_clusters, (num_clusters / 2) * num_clusters); + BROTLI_ENSURE_CAPACITY( + m, HistogramPair, pairs, pairs_capacity, max_num_pairs + 1); + if (BROTLI_IS_OOM(m)) return; + + /* Collapse similar histograms. */ + num_clusters = FN(BrotliHistogramCombine)(out, cluster_size, + histogram_symbols, clusters, + pairs, num_clusters, in_size, + max_histograms, max_num_pairs); + } + BROTLI_FREE(m, pairs); + BROTLI_FREE(m, cluster_size); + /* Find the optimal map from original histograms to the final ones. */ + FN(BrotliHistogramRemap)(in, in_size, clusters, num_clusters, + out, histogram_symbols); + BROTLI_FREE(m, clusters); + /* Convert the context map to a canonical form. */ + *out_size = FN(BrotliHistogramReindex)(m, out, histogram_symbols, in_size); + if (BROTLI_IS_OOM(m)) return; +}) + +#undef HistogramType diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/command.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/command.h new file mode 100644 index 00000000000..632318e8451 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/command.h @@ -0,0 +1,180 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* This class models a sequence of literals and a backward reference copy. */ + +#ifndef BROTLI_ENC_COMMAND_H_ +#define BROTLI_ENC_COMMAND_H_ + +#include "../common/constants.h" +#include <brotli/port.h> +#include <brotli/types.h> +#include "./fast_log.h" +#include "./prefix.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static uint32_t kInsBase[] = { 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, + 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594 }; +static uint32_t kInsExtra[] = { 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, + 5, 5, 6, 7, 8, 9, 10, 12, 14, 24 }; +static uint32_t kCopyBase[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18, 22, 30, + 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118 }; +static uint32_t kCopyExtra[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, + 4, 4, 5, 5, 6, 7, 8, 9, 10, 24 }; + +static BROTLI_INLINE uint16_t GetInsertLengthCode(size_t insertlen) { + if (insertlen < 6) { + return (uint16_t)insertlen; + } else if (insertlen < 130) { + uint32_t nbits = Log2FloorNonZero(insertlen - 2) - 1u; + return (uint16_t)((nbits << 1) + ((insertlen - 2) >> nbits) + 2); + } else if (insertlen < 2114) { + return (uint16_t)(Log2FloorNonZero(insertlen - 66) + 10); + } else if (insertlen < 6210) { + return 21u; + } else if (insertlen < 22594) { + return 22u; + } else { + return 23u; + } +} + +static BROTLI_INLINE uint16_t GetCopyLengthCode(size_t copylen) { + if (copylen < 10) { + return (uint16_t)(copylen - 2); + } else if (copylen < 134) { + uint32_t nbits = Log2FloorNonZero(copylen - 6) - 1u; + return (uint16_t)((nbits << 1) + ((copylen - 6) >> nbits) + 4); + } else if (copylen < 2118) { + return (uint16_t)(Log2FloorNonZero(copylen - 70) + 12); + } else { + return 23u; + } +} + +static BROTLI_INLINE uint16_t CombineLengthCodes( + uint16_t inscode, uint16_t copycode, BROTLI_BOOL use_last_distance) { + uint16_t bits64 = + (uint16_t)((copycode & 0x7u) | ((inscode & 0x7u) << 3)); + if (use_last_distance && inscode < 8 && copycode < 16) { + return (copycode < 8) ? bits64 : (bits64 | 64); + } else { + /* Specification: 5 Encoding of ... (last table) */ + /* offset = 2 * index, where index is in range [0..8] */ + int offset = 2 * ((copycode >> 3) + 3 * (inscode >> 3)); + /* All values in specification are K * 64, + where K = [2, 3, 6, 4, 5, 8, 7, 9, 10], + i + 1 = [1, 2, 3, 4, 5, 6, 7, 8, 9], + K - i - 1 = [1, 1, 3, 0, 0, 2, 0, 1, 2] = D. + All values in D require only 2 bits to encode. + Magic constant is shifted 6 bits left, to avoid final multiplication. */ + offset = (offset << 5) + 0x40 + ((0x520D40 >> offset) & 0xC0); + return (uint16_t)offset | bits64; + } +} + +static BROTLI_INLINE void GetLengthCode(size_t insertlen, size_t copylen, + BROTLI_BOOL use_last_distance, + uint16_t* code) { + uint16_t inscode = GetInsertLengthCode(insertlen); + uint16_t copycode = GetCopyLengthCode(copylen); + *code = CombineLengthCodes(inscode, copycode, use_last_distance); +} + +static BROTLI_INLINE uint32_t GetInsertBase(uint16_t inscode) { + return kInsBase[inscode]; +} + +static BROTLI_INLINE uint32_t GetInsertExtra(uint16_t inscode) { + return kInsExtra[inscode]; +} + +static BROTLI_INLINE uint32_t GetCopyBase(uint16_t copycode) { + return kCopyBase[copycode]; +} + +static BROTLI_INLINE uint32_t GetCopyExtra(uint16_t copycode) { + return kCopyExtra[copycode]; +} + +typedef struct Command { + uint32_t insert_len_; + /* Stores copy_len in low 24 bits and copy_len XOR copy_code in high 8 bit. */ + uint32_t copy_len_; + uint32_t dist_extra_; + uint16_t cmd_prefix_; + uint16_t dist_prefix_; +} Command; + +/* distance_code is e.g. 0 for same-as-last short code, or 16 for offset 1. */ +static BROTLI_INLINE void InitCommand(Command* self, size_t insertlen, + size_t copylen, int copylen_code_delta, size_t distance_code) { + /* Don't rely on signed int representation, use honest casts. */ + uint32_t delta = (uint8_t)((int8_t)copylen_code_delta); + self->insert_len_ = (uint32_t)insertlen; + self->copy_len_ = (uint32_t)(copylen | (delta << 24)); + /* The distance prefix and extra bits are stored in this Command as if + npostfix and ndirect were 0, they are only recomputed later after the + clustering if needed. */ + PrefixEncodeCopyDistance( + distance_code, 0, 0, &self->dist_prefix_, &self->dist_extra_); + GetLengthCode( + insertlen, (size_t)((int)copylen + copylen_code_delta), + TO_BROTLI_BOOL(self->dist_prefix_ == 0), &self->cmd_prefix_); +} + +static BROTLI_INLINE void InitInsertCommand(Command* self, size_t insertlen) { + self->insert_len_ = (uint32_t)insertlen; + self->copy_len_ = 4 << 24; + self->dist_extra_ = 0; + self->dist_prefix_ = BROTLI_NUM_DISTANCE_SHORT_CODES; + GetLengthCode(insertlen, 4, BROTLI_FALSE, &self->cmd_prefix_); +} + +static BROTLI_INLINE uint32_t CommandRestoreDistanceCode(const Command* self) { + if (self->dist_prefix_ < BROTLI_NUM_DISTANCE_SHORT_CODES) { + return self->dist_prefix_; + } else { + uint32_t nbits = self->dist_extra_ >> 24; + uint32_t extra = self->dist_extra_ & 0xffffff; + /* It is assumed that the distance was first encoded with NPOSTFIX = 0 and + NDIRECT = 0, so the code itself is of this form: + BROTLI_NUM_DISTANCE_SHORT_CODES + 2 * (nbits - 1) + prefix_bit + Therefore, the following expression results in (2 + prefix_bit). */ + uint32_t prefix = + self->dist_prefix_ + 4u - BROTLI_NUM_DISTANCE_SHORT_CODES - 2u * nbits; + /* Subtract 4 for offset (Chapter 4.) and + increase by BROTLI_NUM_DISTANCE_SHORT_CODES - 1 */ + return (prefix << nbits) + extra + BROTLI_NUM_DISTANCE_SHORT_CODES - 4u; + } +} + +static BROTLI_INLINE uint32_t CommandDistanceContext(const Command* self) { + uint32_t r = self->cmd_prefix_ >> 6; + uint32_t c = self->cmd_prefix_ & 7; + if ((r == 0 || r == 2 || r == 4 || r == 7) && (c <= 2)) { + return c; + } + return 3; +} + +static BROTLI_INLINE uint32_t CommandCopyLen(const Command* self) { + return self->copy_len_ & 0xFFFFFF; +} + +static BROTLI_INLINE uint32_t CommandCopyLenCode(const Command* self) { + int32_t delta = (int8_t)((uint8_t)(self->copy_len_ >> 24)); + return (uint32_t)((int32_t)(self->copy_len_ & 0xFFFFFF) + delta); +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_COMMAND_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/compress_fragment.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/compress_fragment.c new file mode 100644 index 00000000000..b4ca81017a3 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/compress_fragment.c @@ -0,0 +1,791 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function for fast encoding of an input fragment, independently from the input + history. This function uses one-pass processing: when we find a backward + match, we immediately emit the corresponding command and literal codes to + the bit stream. + + Adapted from the CompressFragment() function in + https://github.com/google/snappy/blob/master/snappy.cc */ + +#include "./compress_fragment.h" + +#include <string.h> /* memcmp, memcpy, memset */ + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./brotli_bit_stream.h" +#include "./entropy_encode.h" +#include "./fast_log.h" +#include "./find_match_length.h" +#include "./memory.h" +#include "./port.h" +#include "./write_bits.h" + + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18) + +/* kHashMul32 multiplier has these properties: + * The multiplier must be odd. Otherwise we may lose the highest bit. + * No long streaks of ones or zeros. + * There is no effort to ensure that it is a prime, the oddity is enough + for this use. + * The number has been tuned heuristically against compression benchmarks. */ +static const uint32_t kHashMul32 = 0x1e35a7bd; + +static BROTLI_INLINE uint32_t Hash(const uint8_t* p, size_t shift) { + const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(p) << 24) * kHashMul32; + return (uint32_t)(h >> shift); +} + +static BROTLI_INLINE uint32_t HashBytesAtOffset( + uint64_t v, int offset, size_t shift) { + assert(offset >= 0); + assert(offset <= 3); + { + const uint64_t h = ((v >> (8 * offset)) << 24) * kHashMul32; + return (uint32_t)(h >> shift); + } +} + +static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2) { + return TO_BROTLI_BOOL( + BROTLI_UNALIGNED_LOAD32(p1) == BROTLI_UNALIGNED_LOAD32(p2) && + p1[4] == p2[4]); +} + +/* Builds a literal prefix code into "depths" and "bits" based on the statistics + of the "input" string and stores it into the bit stream. + Note that the prefix code here is built from the pre-LZ77 input, therefore + we can only approximate the statistics of the actual literal stream. + Moreover, for long inputs we build a histogram from a sample of the input + and thus have to assign a non-zero depth for each literal. + Returns estimated compression ratio millibytes/char for encoding given input + with generated code. */ +static size_t BuildAndStoreLiteralPrefixCode(MemoryManager* m, + const uint8_t* input, + const size_t input_size, + uint8_t depths[256], + uint16_t bits[256], + size_t* storage_ix, + uint8_t* storage) { + uint32_t histogram[256] = { 0 }; + size_t histogram_total; + size_t i; + if (input_size < (1 << 15)) { + for (i = 0; i < input_size; ++i) { + ++histogram[input[i]]; + } + histogram_total = input_size; + for (i = 0; i < 256; ++i) { + /* We weigh the first 11 samples with weight 3 to account for the + balancing effect of the LZ77 phase on the histogram. */ + const uint32_t adjust = 2 * BROTLI_MIN(uint32_t, histogram[i], 11u); + histogram[i] += adjust; + histogram_total += adjust; + } + } else { + static const size_t kSampleRate = 29; + for (i = 0; i < input_size; i += kSampleRate) { + ++histogram[input[i]]; + } + histogram_total = (input_size + kSampleRate - 1) / kSampleRate; + for (i = 0; i < 256; ++i) { + /* We add 1 to each population count to avoid 0 bit depths (since this is + only a sample and we don't know if the symbol appears or not), and we + weigh the first 11 samples with weight 3 to account for the balancing + effect of the LZ77 phase on the histogram (more frequent symbols are + more likely to be in backward references instead as literals). */ + const uint32_t adjust = 1 + 2 * BROTLI_MIN(uint32_t, histogram[i], 11u); + histogram[i] += adjust; + histogram_total += adjust; + } + } + BrotliBuildAndStoreHuffmanTreeFast(m, histogram, histogram_total, + /* max_bits = */ 8, + depths, bits, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return 0; + { + size_t literal_ratio = 0; + for (i = 0; i < 256; ++i) { + if (histogram[i]) literal_ratio += histogram[i] * depths[i]; + } + /* Estimated encoding ratio, millibytes per symbol. */ + return (literal_ratio * 125) / histogram_total; + } +} + +/* Builds a command and distance prefix code (each 64 symbols) into "depth" and + "bits" based on "histogram" and stores it into the bit stream. */ +static void BuildAndStoreCommandPrefixCode(const uint32_t histogram[128], + uint8_t depth[128], uint16_t bits[128], size_t* storage_ix, + uint8_t* storage) { + /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */ + HuffmanTree tree[129]; + uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 }; + uint16_t cmd_bits[64]; + + BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth); + BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]); + /* We have to jump through a few hoops here in order to compute + the command bits because the symbols are in a different order than in + the full alphabet. This looks complicated, but having the symbols + in this order in the command bits saves a few branches in the Emit* + functions. */ + memcpy(cmd_depth, depth, 24); + memcpy(cmd_depth + 24, depth + 40, 8); + memcpy(cmd_depth + 32, depth + 24, 8); + memcpy(cmd_depth + 40, depth + 48, 8); + memcpy(cmd_depth + 48, depth + 32, 8); + memcpy(cmd_depth + 56, depth + 56, 8); + BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits); + memcpy(bits, cmd_bits, 48); + memcpy(bits + 24, cmd_bits + 32, 16); + memcpy(bits + 32, cmd_bits + 48, 16); + memcpy(bits + 40, cmd_bits + 24, 16); + memcpy(bits + 48, cmd_bits + 40, 16); + memcpy(bits + 56, cmd_bits + 56, 16); + BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]); + { + /* Create the bit length array for the full command alphabet. */ + size_t i; + memset(cmd_depth, 0, 64); /* only 64 first values were used */ + memcpy(cmd_depth, depth, 8); + memcpy(cmd_depth + 64, depth + 8, 8); + memcpy(cmd_depth + 128, depth + 16, 8); + memcpy(cmd_depth + 192, depth + 24, 8); + memcpy(cmd_depth + 384, depth + 32, 8); + for (i = 0; i < 8; ++i) { + cmd_depth[128 + 8 * i] = depth[40 + i]; + cmd_depth[256 + 8 * i] = depth[48 + i]; + cmd_depth[448 + 8 * i] = depth[56 + i]; + } + BrotliStoreHuffmanTree( + cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage); + } + BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage); +} + +/* REQUIRES: insertlen < 6210 */ +static BROTLI_INLINE void EmitInsertLen(size_t insertlen, + const uint8_t depth[128], + const uint16_t bits[128], + uint32_t histo[128], + size_t* storage_ix, + uint8_t* storage) { + if (insertlen < 6) { + const size_t code = insertlen + 40; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + ++histo[code]; + } else if (insertlen < 130) { + const size_t tail = insertlen - 2; + const uint32_t nbits = Log2FloorNonZero(tail) - 1u; + const size_t prefix = tail >> nbits; + const size_t inscode = (nbits << 1) + prefix + 42; + BrotliWriteBits(depth[inscode], bits[inscode], storage_ix, storage); + BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage); + ++histo[inscode]; + } else if (insertlen < 2114) { + const size_t tail = insertlen - 66; + const uint32_t nbits = Log2FloorNonZero(tail); + const size_t code = nbits + 50; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage); + ++histo[code]; + } else { + BrotliWriteBits(depth[61], bits[61], storage_ix, storage); + BrotliWriteBits(12, insertlen - 2114, storage_ix, storage); + ++histo[21]; + } +} + +static BROTLI_INLINE void EmitLongInsertLen(size_t insertlen, + const uint8_t depth[128], + const uint16_t bits[128], + uint32_t histo[128], + size_t* storage_ix, + uint8_t* storage) { + if (insertlen < 22594) { + BrotliWriteBits(depth[62], bits[62], storage_ix, storage); + BrotliWriteBits(14, insertlen - 6210, storage_ix, storage); + ++histo[22]; + } else { + BrotliWriteBits(depth[63], bits[63], storage_ix, storage); + BrotliWriteBits(24, insertlen - 22594, storage_ix, storage); + ++histo[23]; + } +} + +static BROTLI_INLINE void EmitCopyLen(size_t copylen, + const uint8_t depth[128], + const uint16_t bits[128], + uint32_t histo[128], + size_t* storage_ix, + uint8_t* storage) { + if (copylen < 10) { + BrotliWriteBits( + depth[copylen + 14], bits[copylen + 14], storage_ix, storage); + ++histo[copylen + 14]; + } else if (copylen < 134) { + const size_t tail = copylen - 6; + const uint32_t nbits = Log2FloorNonZero(tail) - 1u; + const size_t prefix = tail >> nbits; + const size_t code = (nbits << 1) + prefix + 20; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage); + ++histo[code]; + } else if (copylen < 2118) { + const size_t tail = copylen - 70; + const uint32_t nbits = Log2FloorNonZero(tail); + const size_t code = nbits + 28; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage); + ++histo[code]; + } else { + BrotliWriteBits(depth[39], bits[39], storage_ix, storage); + BrotliWriteBits(24, copylen - 2118, storage_ix, storage); + ++histo[47]; + } +} + +static BROTLI_INLINE void EmitCopyLenLastDistance(size_t copylen, + const uint8_t depth[128], + const uint16_t bits[128], + uint32_t histo[128], + size_t* storage_ix, + uint8_t* storage) { + if (copylen < 12) { + BrotliWriteBits(depth[copylen - 4], bits[copylen - 4], storage_ix, storage); + ++histo[copylen - 4]; + } else if (copylen < 72) { + const size_t tail = copylen - 8; + const uint32_t nbits = Log2FloorNonZero(tail) - 1; + const size_t prefix = tail >> nbits; + const size_t code = (nbits << 1) + prefix + 4; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage); + ++histo[code]; + } else if (copylen < 136) { + const size_t tail = copylen - 8; + const size_t code = (tail >> 5) + 30; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + BrotliWriteBits(5, tail & 31, storage_ix, storage); + BrotliWriteBits(depth[64], bits[64], storage_ix, storage); + ++histo[code]; + ++histo[64]; + } else if (copylen < 2120) { + const size_t tail = copylen - 72; + const uint32_t nbits = Log2FloorNonZero(tail); + const size_t code = nbits + 28; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage); + BrotliWriteBits(depth[64], bits[64], storage_ix, storage); + ++histo[code]; + ++histo[64]; + } else { + BrotliWriteBits(depth[39], bits[39], storage_ix, storage); + BrotliWriteBits(24, copylen - 2120, storage_ix, storage); + BrotliWriteBits(depth[64], bits[64], storage_ix, storage); + ++histo[47]; + ++histo[64]; + } +} + +static BROTLI_INLINE void EmitDistance(size_t distance, + const uint8_t depth[128], + const uint16_t bits[128], + uint32_t histo[128], + size_t* storage_ix, uint8_t* storage) { + const size_t d = distance + 3; + const uint32_t nbits = Log2FloorNonZero(d) - 1u; + const size_t prefix = (d >> nbits) & 1; + const size_t offset = (2 + prefix) << nbits; + const size_t distcode = 2 * (nbits - 1) + prefix + 80; + BrotliWriteBits(depth[distcode], bits[distcode], storage_ix, storage); + BrotliWriteBits(nbits, d - offset, storage_ix, storage); + ++histo[distcode]; +} + +static BROTLI_INLINE void EmitLiterals(const uint8_t* input, const size_t len, + const uint8_t depth[256], + const uint16_t bits[256], + size_t* storage_ix, uint8_t* storage) { + size_t j; + for (j = 0; j < len; j++) { + const uint8_t lit = input[j]; + BrotliWriteBits(depth[lit], bits[lit], storage_ix, storage); + } +} + +/* REQUIRES: len <= 1 << 24. */ +static void BrotliStoreMetaBlockHeader( + size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix, + uint8_t* storage) { + size_t nibbles = 6; + /* ISLAST */ + BrotliWriteBits(1, 0, storage_ix, storage); + if (len <= (1U << 16)) { + nibbles = 4; + } else if (len <= (1U << 20)) { + nibbles = 5; + } + BrotliWriteBits(2, nibbles - 4, storage_ix, storage); + BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage); + /* ISUNCOMPRESSED */ + BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage); +} + +static void UpdateBits(size_t n_bits, uint32_t bits, size_t pos, + uint8_t *array) { + while (n_bits > 0) { + size_t byte_pos = pos >> 3; + size_t n_unchanged_bits = pos & 7; + size_t n_changed_bits = BROTLI_MIN(size_t, n_bits, 8 - n_unchanged_bits); + size_t total_bits = n_unchanged_bits + n_changed_bits; + uint32_t mask = + (~((1u << total_bits) - 1u)) | ((1u << n_unchanged_bits) - 1u); + uint32_t unchanged_bits = array[byte_pos] & mask; + uint32_t changed_bits = bits & ((1u << n_changed_bits) - 1u); + array[byte_pos] = + (uint8_t)((changed_bits << n_unchanged_bits) | unchanged_bits); + n_bits -= n_changed_bits; + bits >>= n_changed_bits; + pos += n_changed_bits; + } +} + +static void RewindBitPosition(const size_t new_storage_ix, + size_t* storage_ix, uint8_t* storage) { + const size_t bitpos = new_storage_ix & 7; + const size_t mask = (1u << bitpos) - 1; + storage[new_storage_ix >> 3] &= (uint8_t)mask; + *storage_ix = new_storage_ix; +} + +static BROTLI_BOOL ShouldMergeBlock( + const uint8_t* data, size_t len, const uint8_t* depths) { + size_t histo[256] = { 0 }; + static const size_t kSampleRate = 43; + size_t i; + for (i = 0; i < len; i += kSampleRate) { + ++histo[data[i]]; + } + { + const size_t total = (len + kSampleRate - 1) / kSampleRate; + double r = (FastLog2(total) + 0.5) * (double)total + 200; + for (i = 0; i < 256; ++i) { + r -= (double)histo[i] * (depths[i] + FastLog2(histo[i])); + } + return TO_BROTLI_BOOL(r >= 0.0); + } +} + +/* Acceptable loss for uncompressible speedup is 2% */ +#define MIN_RATIO 980 + +static BROTLI_INLINE BROTLI_BOOL ShouldUseUncompressedMode( + const uint8_t* metablock_start, const uint8_t* next_emit, + const size_t insertlen, const size_t literal_ratio) { + const size_t compressed = (size_t)(next_emit - metablock_start); + if (compressed * 50 > insertlen) { + return BROTLI_FALSE; + } else { + return TO_BROTLI_BOOL(literal_ratio > MIN_RATIO); + } +} + +static void EmitUncompressedMetaBlock(const uint8_t* begin, const uint8_t* end, + const size_t storage_ix_start, + size_t* storage_ix, uint8_t* storage) { + const size_t len = (size_t)(end - begin); + RewindBitPosition(storage_ix_start, storage_ix, storage); + BrotliStoreMetaBlockHeader(len, 1, storage_ix, storage); + *storage_ix = (*storage_ix + 7u) & ~7u; + memcpy(&storage[*storage_ix >> 3], begin, len); + *storage_ix += len << 3; + storage[*storage_ix >> 3] = 0; +} + +static uint32_t kCmdHistoSeed[128] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 0, 0, +}; + +static BROTLI_INLINE void BrotliCompressFragmentFastImpl( + MemoryManager* m, const uint8_t* input, size_t input_size, + BROTLI_BOOL is_last, int* table, size_t table_bits, uint8_t cmd_depth[128], + uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code, + size_t* storage_ix, uint8_t* storage) { + uint32_t cmd_histo[128]; + const uint8_t* ip_end; + + /* "next_emit" is a pointer to the first byte that is not covered by a + previous copy. Bytes between "next_emit" and the start of the next copy or + the end of the input will be emitted as literal bytes. */ + const uint8_t* next_emit = input; + /* Save the start of the first block for position and distance computations. + */ + const uint8_t* base_ip = input; + + static const size_t kFirstBlockSize = 3 << 15; + static const size_t kMergeBlockSize = 1 << 16; + + const size_t kInputMarginBytes = BROTLI_WINDOW_GAP; + const size_t kMinMatchLen = 5; + + const uint8_t* metablock_start = input; + size_t block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize); + size_t total_block_size = block_size; + /* Save the bit position of the MLEN field of the meta-block header, so that + we can update it later if we decide to extend this meta-block. */ + size_t mlen_storage_ix = *storage_ix + 3; + + uint8_t lit_depth[256]; + uint16_t lit_bits[256]; + + size_t literal_ratio; + + const uint8_t* ip; + int last_distance; + + const size_t shift = 64u - table_bits; + + BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage); + /* No block splits, no contexts. */ + BrotliWriteBits(13, 0, storage_ix, storage); + + literal_ratio = BuildAndStoreLiteralPrefixCode( + m, input, block_size, lit_depth, lit_bits, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + + { + /* Store the pre-compressed command and distance prefix codes. */ + size_t i; + for (i = 0; i + 7 < *cmd_code_numbits; i += 8) { + BrotliWriteBits(8, cmd_code[i >> 3], storage_ix, storage); + } + } + BrotliWriteBits(*cmd_code_numbits & 7, cmd_code[*cmd_code_numbits >> 3], + storage_ix, storage); + + emit_commands: + /* Initialize the command and distance histograms. We will gather + statistics of command and distance codes during the processing + of this block and use it to update the command and distance + prefix codes for the next block. */ + memcpy(cmd_histo, kCmdHistoSeed, sizeof(kCmdHistoSeed)); + + /* "ip" is the input pointer. */ + ip = input; + last_distance = -1; + ip_end = input + block_size; + + if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) { + /* For the last block, we need to keep a 16 bytes margin so that we can be + sure that all distances are at most window size - 16. + For all other blocks, we only need to keep a margin of 5 bytes so that + we don't go over the block size with a copy. */ + const size_t len_limit = BROTLI_MIN(size_t, block_size - kMinMatchLen, + input_size - kInputMarginBytes); + const uint8_t* ip_limit = input + len_limit; + + uint32_t next_hash; + for (next_hash = Hash(++ip, shift); ; ) { + /* Step 1: Scan forward in the input looking for a 5-byte-long match. + If we get close to exhausting the input then goto emit_remainder. + + Heuristic match skipping: If 32 bytes are scanned with no matches + found, start looking only at every other byte. If 32 more bytes are + scanned, look at every third byte, etc.. When a match is found, + immediately go back to looking at every byte. This is a small loss + (~5% performance, ~0.1% density) for compressible data due to more + bookkeeping, but for non-compressible data (such as JPEG) it's a huge + win since the compressor quickly "realizes" the data is incompressible + and doesn't bother looking for matches everywhere. + + The "skip" variable keeps track of how many bytes there are since the + last match; dividing it by 32 (i.e. right-shifting by five) gives the + number of bytes to move ahead for each iteration. */ + uint32_t skip = 32; + + const uint8_t* next_ip = ip; + const uint8_t* candidate; + assert(next_emit < ip); +trawl: + do { + uint32_t hash = next_hash; + uint32_t bytes_between_hash_lookups = skip++ >> 5; + assert(hash == Hash(next_ip, shift)); + ip = next_ip; + next_ip = ip + bytes_between_hash_lookups; + if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) { + goto emit_remainder; + } + next_hash = Hash(next_ip, shift); + candidate = ip - last_distance; + if (IsMatch(ip, candidate)) { + if (BROTLI_PREDICT_TRUE(candidate < ip)) { + table[hash] = (int)(ip - base_ip); + break; + } + } + candidate = base_ip + table[hash]; + assert(candidate >= base_ip); + assert(candidate < ip); + + table[hash] = (int)(ip - base_ip); + } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate))); + + /* Check copy distance. If candidate is not feasible, continue search. + Checking is done outside of hot loop to reduce overhead. */ + if (ip - candidate > MAX_DISTANCE) goto trawl; + + /* Step 2: Emit the found match together with the literal bytes from + "next_emit" to the bit stream, and then see if we can find a next match + immediately afterwards. Repeat until we find no match for the input + without emitting some literal bytes. */ + + { + /* We have a 5-byte match at ip, and we need to emit bytes in + [next_emit, ip). */ + const uint8_t* base = ip; + size_t matched = 5 + FindMatchLengthWithLimit( + candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5); + int distance = (int)(base - candidate); /* > 0 */ + size_t insert = (size_t)(base - next_emit); + ip += matched; + assert(0 == memcmp(base, candidate, matched)); + if (BROTLI_PREDICT_TRUE(insert < 6210)) { + EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, + storage_ix, storage); + } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert, + literal_ratio)) { + EmitUncompressedMetaBlock(metablock_start, base, mlen_storage_ix - 3, + storage_ix, storage); + input_size -= (size_t)(base - input); + input = base; + next_emit = input; + goto next_block; + } else { + EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, + storage_ix, storage); + } + EmitLiterals(next_emit, insert, lit_depth, lit_bits, + storage_ix, storage); + if (distance == last_distance) { + BrotliWriteBits(cmd_depth[64], cmd_bits[64], storage_ix, storage); + ++cmd_histo[64]; + } else { + EmitDistance((size_t)distance, cmd_depth, cmd_bits, + cmd_histo, storage_ix, storage); + last_distance = distance; + } + EmitCopyLenLastDistance(matched, cmd_depth, cmd_bits, cmd_histo, + storage_ix, storage); + + next_emit = ip; + if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) { + goto emit_remainder; + } + /* We could immediately start working at ip now, but to improve + compression we first update "table" with the hashes of some positions + within the last copy. */ + { + uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3); + uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); + uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift); + table[prev_hash] = (int)(ip - base_ip - 3); + prev_hash = HashBytesAtOffset(input_bytes, 1, shift); + table[prev_hash] = (int)(ip - base_ip - 2); + prev_hash = HashBytesAtOffset(input_bytes, 2, shift); + table[prev_hash] = (int)(ip - base_ip - 1); + + candidate = base_ip + table[cur_hash]; + table[cur_hash] = (int)(ip - base_ip); + } + } + + while (IsMatch(ip, candidate)) { + /* We have a 5-byte match at ip, and no need to emit any literal bytes + prior to ip. */ + const uint8_t* base = ip; + size_t matched = 5 + FindMatchLengthWithLimit( + candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5); + if (ip - candidate > MAX_DISTANCE) break; + ip += matched; + last_distance = (int)(base - candidate); /* > 0 */ + assert(0 == memcmp(base, candidate, matched)); + EmitCopyLen(matched, cmd_depth, cmd_bits, cmd_histo, + storage_ix, storage); + EmitDistance((size_t)last_distance, cmd_depth, cmd_bits, + cmd_histo, storage_ix, storage); + + next_emit = ip; + if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) { + goto emit_remainder; + } + /* We could immediately start working at ip now, but to improve + compression we first update "table" with the hashes of some positions + within the last copy. */ + { + uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3); + uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); + uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift); + table[prev_hash] = (int)(ip - base_ip - 3); + prev_hash = HashBytesAtOffset(input_bytes, 1, shift); + table[prev_hash] = (int)(ip - base_ip - 2); + prev_hash = HashBytesAtOffset(input_bytes, 2, shift); + table[prev_hash] = (int)(ip - base_ip - 1); + + candidate = base_ip + table[cur_hash]; + table[cur_hash] = (int)(ip - base_ip); + } + } + + next_hash = Hash(++ip, shift); + } + } + + emit_remainder: + assert(next_emit <= ip_end); + input += block_size; + input_size -= block_size; + block_size = BROTLI_MIN(size_t, input_size, kMergeBlockSize); + + /* Decide if we want to continue this meta-block instead of emitting the + last insert-only command. */ + if (input_size > 0 && + total_block_size + block_size <= (1 << 20) && + ShouldMergeBlock(input, block_size, lit_depth)) { + assert(total_block_size > (1 << 16)); + /* Update the size of the current meta-block and continue emitting commands. + We can do this because the current size and the new size both have 5 + nibbles. */ + total_block_size += block_size; + UpdateBits(20, (uint32_t)(total_block_size - 1), mlen_storage_ix, storage); + goto emit_commands; + } + + /* Emit the remaining bytes as literals. */ + if (next_emit < ip_end) { + const size_t insert = (size_t)(ip_end - next_emit); + if (BROTLI_PREDICT_TRUE(insert < 6210)) { + EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, + storage_ix, storage); + EmitLiterals(next_emit, insert, lit_depth, lit_bits, storage_ix, storage); + } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert, + literal_ratio)) { + EmitUncompressedMetaBlock(metablock_start, ip_end, mlen_storage_ix - 3, + storage_ix, storage); + } else { + EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, + storage_ix, storage); + EmitLiterals(next_emit, insert, lit_depth, lit_bits, + storage_ix, storage); + } + } + next_emit = ip_end; + +next_block: + /* If we have more data, write a new meta-block header and prefix codes and + then continue emitting commands. */ + if (input_size > 0) { + metablock_start = input; + block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize); + total_block_size = block_size; + /* Save the bit position of the MLEN field of the meta-block header, so that + we can update it later if we decide to extend this meta-block. */ + mlen_storage_ix = *storage_ix + 3; + BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage); + /* No block splits, no contexts. */ + BrotliWriteBits(13, 0, storage_ix, storage); + literal_ratio = BuildAndStoreLiteralPrefixCode( + m, input, block_size, lit_depth, lit_bits, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits, + storage_ix, storage); + goto emit_commands; + } + + if (!is_last) { + /* If this is not the last block, update the command and distance prefix + codes for the next block and store the compressed forms. */ + cmd_code[0] = 0; + *cmd_code_numbits = 0; + BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits, + cmd_code_numbits, cmd_code); + } +} + +#define FOR_TABLE_BITS_(X) X(9) X(11) X(13) X(15) + +#define BAKE_METHOD_PARAM_(B) \ +static BROTLI_NOINLINE void BrotliCompressFragmentFastImpl ## B( \ + MemoryManager* m, const uint8_t* input, size_t input_size, \ + BROTLI_BOOL is_last, int* table, uint8_t cmd_depth[128], \ + uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code, \ + size_t* storage_ix, uint8_t* storage) { \ + BrotliCompressFragmentFastImpl(m, input, input_size, is_last, table, B, \ + cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix, storage); \ +} +FOR_TABLE_BITS_(BAKE_METHOD_PARAM_) +#undef BAKE_METHOD_PARAM_ + +void BrotliCompressFragmentFast( + MemoryManager* m, const uint8_t* input, size_t input_size, + BROTLI_BOOL is_last, int* table, size_t table_size, uint8_t cmd_depth[128], + uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code, + size_t* storage_ix, uint8_t* storage) { + const size_t initial_storage_ix = *storage_ix; + const size_t table_bits = Log2FloorNonZero(table_size); + + if (input_size == 0) { + assert(is_last); + BrotliWriteBits(1, 1, storage_ix, storage); /* islast */ + BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */ + *storage_ix = (*storage_ix + 7u) & ~7u; + return; + } + + switch (table_bits) { +#define CASE_(B) \ + case B: \ + BrotliCompressFragmentFastImpl ## B( \ + m, input, input_size, is_last, table, cmd_depth, cmd_bits, \ + cmd_code_numbits, cmd_code, storage_ix, storage); \ + break; + FOR_TABLE_BITS_(CASE_) +#undef CASE_ + default: assert(0); break; + } + + /* If output is larger than single uncompressed block, rewrite it. */ + if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) { + EmitUncompressedMetaBlock(input, input + input_size, initial_storage_ix, + storage_ix, storage); + } + + if (is_last) { + BrotliWriteBits(1, 1, storage_ix, storage); /* islast */ + BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */ + *storage_ix = (*storage_ix + 7u) & ~7u; + } +} + +#undef FOR_TABLE_BITS_ + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/compress_fragment.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/compress_fragment.h new file mode 100644 index 00000000000..d221266515a --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/compress_fragment.h @@ -0,0 +1,61 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function for fast encoding of an input fragment, independently from the input + history. This function uses one-pass processing: when we find a backward + match, we immediately emit the corresponding command and literal codes to + the bit stream. */ + +#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_H_ +#define BROTLI_ENC_COMPRESS_FRAGMENT_H_ + +#include <brotli/types.h> +#include "./memory.h" +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* Compresses "input" string to the "*storage" buffer as one or more complete + meta-blocks, and updates the "*storage_ix" bit position. + + If "is_last" is 1, emits an additional empty last meta-block. + + "cmd_depth" and "cmd_bits" contain the command and distance prefix codes + (see comment in encode.h) used for the encoding of this input fragment. + If "is_last" is 0, they are updated to reflect the statistics + of this input fragment, to be used for the encoding of the next fragment. + + "*cmd_code_numbits" is the number of bits of the compressed representation + of the command and distance prefix codes, and "cmd_code" is an array of + at least "(*cmd_code_numbits + 7) >> 3" size that contains the compressed + command and distance prefix codes. If "is_last" is 0, these are also + updated to represent the updated "cmd_depth" and "cmd_bits". + + REQUIRES: "input_size" is greater than zero, or "is_last" is 1. + REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24). + REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. + REQUIRES: "table_size" is an odd (9, 11, 13, 15) power of two + OUTPUT: maximal copy distance <= |input_size| + OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */ +BROTLI_INTERNAL void BrotliCompressFragmentFast(MemoryManager* m, + const uint8_t* input, + size_t input_size, + BROTLI_BOOL is_last, + int* table, size_t table_size, + uint8_t cmd_depth[128], + uint16_t cmd_bits[128], + size_t* cmd_code_numbits, + uint8_t* cmd_code, + size_t* storage_ix, + uint8_t* storage); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/compress_fragment_two_pass.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/compress_fragment_two_pass.c new file mode 100644 index 00000000000..e6611a00c54 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/compress_fragment_two_pass.c @@ -0,0 +1,612 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function for fast encoding of an input fragment, independently from the input + history. This function uses two-pass processing: in the first pass we save + the found backward matches and literal bytes into a buffer, and in the + second pass we emit them into the bit stream using prefix codes built based + on the actual command and literal byte histograms. */ + +#include "./compress_fragment_two_pass.h" + +#include <string.h> /* memcmp, memcpy, memset */ + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./bit_cost.h" +#include "./brotli_bit_stream.h" +#include "./entropy_encode.h" +#include "./fast_log.h" +#include "./find_match_length.h" +#include "./memory.h" +#include "./port.h" +#include "./write_bits.h" + + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18) + +/* kHashMul32 multiplier has these properties: + * The multiplier must be odd. Otherwise we may lose the highest bit. + * No long streaks of ones or zeros. + * There is no effort to ensure that it is a prime, the oddity is enough + for this use. + * The number has been tuned heuristically against compression benchmarks. */ +static const uint32_t kHashMul32 = 0x1e35a7bd; + +static BROTLI_INLINE uint32_t Hash(const uint8_t* p, size_t shift) { + const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(p) << 16) * kHashMul32; + return (uint32_t)(h >> shift); +} + +static BROTLI_INLINE uint32_t HashBytesAtOffset( + uint64_t v, int offset, size_t shift) { + assert(offset >= 0); + assert(offset <= 2); + { + const uint64_t h = ((v >> (8 * offset)) << 16) * kHashMul32; + return (uint32_t)(h >> shift); + } +} + +static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2) { + return TO_BROTLI_BOOL( + BROTLI_UNALIGNED_LOAD32(p1) == BROTLI_UNALIGNED_LOAD32(p2) && + p1[4] == p2[4] && + p1[5] == p2[5]); +} + +/* Builds a command and distance prefix code (each 64 symbols) into "depth" and + "bits" based on "histogram" and stores it into the bit stream. */ +static void BuildAndStoreCommandPrefixCode( + const uint32_t histogram[128], + uint8_t depth[128], uint16_t bits[128], + size_t* storage_ix, uint8_t* storage) { + /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */ + HuffmanTree tree[129]; + uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 }; + uint16_t cmd_bits[64]; + BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth); + BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]); + /* We have to jump through a few hoops here in order to compute + the command bits because the symbols are in a different order than in + the full alphabet. This looks complicated, but having the symbols + in this order in the command bits saves a few branches in the Emit* + functions. */ + memcpy(cmd_depth, depth + 24, 24); + memcpy(cmd_depth + 24, depth, 8); + memcpy(cmd_depth + 32, depth + 48, 8); + memcpy(cmd_depth + 40, depth + 8, 8); + memcpy(cmd_depth + 48, depth + 56, 8); + memcpy(cmd_depth + 56, depth + 16, 8); + BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits); + memcpy(bits, cmd_bits + 24, 16); + memcpy(bits + 8, cmd_bits + 40, 16); + memcpy(bits + 16, cmd_bits + 56, 16); + memcpy(bits + 24, cmd_bits, 48); + memcpy(bits + 48, cmd_bits + 32, 16); + memcpy(bits + 56, cmd_bits + 48, 16); + BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]); + { + /* Create the bit length array for the full command alphabet. */ + size_t i; + memset(cmd_depth, 0, 64); /* only 64 first values were used */ + memcpy(cmd_depth, depth + 24, 8); + memcpy(cmd_depth + 64, depth + 32, 8); + memcpy(cmd_depth + 128, depth + 40, 8); + memcpy(cmd_depth + 192, depth + 48, 8); + memcpy(cmd_depth + 384, depth + 56, 8); + for (i = 0; i < 8; ++i) { + cmd_depth[128 + 8 * i] = depth[i]; + cmd_depth[256 + 8 * i] = depth[8 + i]; + cmd_depth[448 + 8 * i] = depth[16 + i]; + } + BrotliStoreHuffmanTree( + cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage); + } + BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage); +} + +static BROTLI_INLINE void EmitInsertLen( + uint32_t insertlen, uint32_t** commands) { + if (insertlen < 6) { + **commands = insertlen; + } else if (insertlen < 130) { + const uint32_t tail = insertlen - 2; + const uint32_t nbits = Log2FloorNonZero(tail) - 1u; + const uint32_t prefix = tail >> nbits; + const uint32_t inscode = (nbits << 1) + prefix + 2; + const uint32_t extra = tail - (prefix << nbits); + **commands = inscode | (extra << 8); + } else if (insertlen < 2114) { + const uint32_t tail = insertlen - 66; + const uint32_t nbits = Log2FloorNonZero(tail); + const uint32_t code = nbits + 10; + const uint32_t extra = tail - (1u << nbits); + **commands = code | (extra << 8); + } else if (insertlen < 6210) { + const uint32_t extra = insertlen - 2114; + **commands = 21 | (extra << 8); + } else if (insertlen < 22594) { + const uint32_t extra = insertlen - 6210; + **commands = 22 | (extra << 8); + } else { + const uint32_t extra = insertlen - 22594; + **commands = 23 | (extra << 8); + } + ++(*commands); +} + +static BROTLI_INLINE void EmitCopyLen(size_t copylen, uint32_t** commands) { + if (copylen < 10) { + **commands = (uint32_t)(copylen + 38); + } else if (copylen < 134) { + const size_t tail = copylen - 6; + const size_t nbits = Log2FloorNonZero(tail) - 1; + const size_t prefix = tail >> nbits; + const size_t code = (nbits << 1) + prefix + 44; + const size_t extra = tail - (prefix << nbits); + **commands = (uint32_t)(code | (extra << 8)); + } else if (copylen < 2118) { + const size_t tail = copylen - 70; + const size_t nbits = Log2FloorNonZero(tail); + const size_t code = nbits + 52; + const size_t extra = tail - ((size_t)1 << nbits); + **commands = (uint32_t)(code | (extra << 8)); + } else { + const size_t extra = copylen - 2118; + **commands = (uint32_t)(63 | (extra << 8)); + } + ++(*commands); +} + +static BROTLI_INLINE void EmitCopyLenLastDistance( + size_t copylen, uint32_t** commands) { + if (copylen < 12) { + **commands = (uint32_t)(copylen + 20); + ++(*commands); + } else if (copylen < 72) { + const size_t tail = copylen - 8; + const size_t nbits = Log2FloorNonZero(tail) - 1; + const size_t prefix = tail >> nbits; + const size_t code = (nbits << 1) + prefix + 28; + const size_t extra = tail - (prefix << nbits); + **commands = (uint32_t)(code | (extra << 8)); + ++(*commands); + } else if (copylen < 136) { + const size_t tail = copylen - 8; + const size_t code = (tail >> 5) + 54; + const size_t extra = tail & 31; + **commands = (uint32_t)(code | (extra << 8)); + ++(*commands); + **commands = 64; + ++(*commands); + } else if (copylen < 2120) { + const size_t tail = copylen - 72; + const size_t nbits = Log2FloorNonZero(tail); + const size_t code = nbits + 52; + const size_t extra = tail - ((size_t)1 << nbits); + **commands = (uint32_t)(code | (extra << 8)); + ++(*commands); + **commands = 64; + ++(*commands); + } else { + const size_t extra = copylen - 2120; + **commands = (uint32_t)(63 | (extra << 8)); + ++(*commands); + **commands = 64; + ++(*commands); + } +} + +static BROTLI_INLINE void EmitDistance(uint32_t distance, uint32_t** commands) { + uint32_t d = distance + 3; + uint32_t nbits = Log2FloorNonZero(d) - 1; + const uint32_t prefix = (d >> nbits) & 1; + const uint32_t offset = (2 + prefix) << nbits; + const uint32_t distcode = 2 * (nbits - 1) + prefix + 80; + uint32_t extra = d - offset; + **commands = distcode | (extra << 8); + ++(*commands); +} + +/* REQUIRES: len <= 1 << 24. */ +static void BrotliStoreMetaBlockHeader( + size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix, + uint8_t* storage) { + size_t nibbles = 6; + /* ISLAST */ + BrotliWriteBits(1, 0, storage_ix, storage); + if (len <= (1U << 16)) { + nibbles = 4; + } else if (len <= (1U << 20)) { + nibbles = 5; + } + BrotliWriteBits(2, nibbles - 4, storage_ix, storage); + BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage); + /* ISUNCOMPRESSED */ + BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage); +} + +static BROTLI_INLINE void CreateCommands(const uint8_t* input, + size_t block_size, size_t input_size, const uint8_t* base_ip, int* table, + size_t table_bits, uint8_t** literals, uint32_t** commands) { + /* "ip" is the input pointer. */ + const uint8_t* ip = input; + const size_t shift = 64u - table_bits; + const uint8_t* ip_end = input + block_size; + /* "next_emit" is a pointer to the first byte that is not covered by a + previous copy. Bytes between "next_emit" and the start of the next copy or + the end of the input will be emitted as literal bytes. */ + const uint8_t* next_emit = input; + + int last_distance = -1; + const size_t kInputMarginBytes = BROTLI_WINDOW_GAP; + const size_t kMinMatchLen = 6; + + if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) { + /* For the last block, we need to keep a 16 bytes margin so that we can be + sure that all distances are at most window size - 16. + For all other blocks, we only need to keep a margin of 5 bytes so that + we don't go over the block size with a copy. */ + const size_t len_limit = BROTLI_MIN(size_t, block_size - kMinMatchLen, + input_size - kInputMarginBytes); + const uint8_t* ip_limit = input + len_limit; + + uint32_t next_hash; + for (next_hash = Hash(++ip, shift); ; ) { + /* Step 1: Scan forward in the input looking for a 6-byte-long match. + If we get close to exhausting the input then goto emit_remainder. + + Heuristic match skipping: If 32 bytes are scanned with no matches + found, start looking only at every other byte. If 32 more bytes are + scanned, look at every third byte, etc.. When a match is found, + immediately go back to looking at every byte. This is a small loss + (~5% performance, ~0.1% density) for compressible data due to more + bookkeeping, but for non-compressible data (such as JPEG) it's a huge + win since the compressor quickly "realizes" the data is incompressible + and doesn't bother looking for matches everywhere. + + The "skip" variable keeps track of how many bytes there are since the + last match; dividing it by 32 (ie. right-shifting by five) gives the + number of bytes to move ahead for each iteration. */ + uint32_t skip = 32; + + const uint8_t* next_ip = ip; + const uint8_t* candidate; + + assert(next_emit < ip); +trawl: + do { + uint32_t hash = next_hash; + uint32_t bytes_between_hash_lookups = skip++ >> 5; + ip = next_ip; + assert(hash == Hash(ip, shift)); + next_ip = ip + bytes_between_hash_lookups; + if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) { + goto emit_remainder; + } + next_hash = Hash(next_ip, shift); + candidate = ip - last_distance; + if (IsMatch(ip, candidate)) { + if (BROTLI_PREDICT_TRUE(candidate < ip)) { + table[hash] = (int)(ip - base_ip); + break; + } + } + candidate = base_ip + table[hash]; + assert(candidate >= base_ip); + assert(candidate < ip); + + table[hash] = (int)(ip - base_ip); + } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate))); + + /* Check copy distance. If candidate is not feasible, continue search. + Checking is done outside of hot loop to reduce overhead. */ + if (ip - candidate > MAX_DISTANCE) goto trawl; + + /* Step 2: Emit the found match together with the literal bytes from + "next_emit", and then see if we can find a next match immediately + afterwards. Repeat until we find no match for the input + without emitting some literal bytes. */ + + { + /* We have a 6-byte match at ip, and we need to emit bytes in + [next_emit, ip). */ + const uint8_t* base = ip; + size_t matched = 6 + FindMatchLengthWithLimit( + candidate + 6, ip + 6, (size_t)(ip_end - ip) - 6); + int distance = (int)(base - candidate); /* > 0 */ + int insert = (int)(base - next_emit); + ip += matched; + assert(0 == memcmp(base, candidate, matched)); + EmitInsertLen((uint32_t)insert, commands); + memcpy(*literals, next_emit, (size_t)insert); + *literals += insert; + if (distance == last_distance) { + **commands = 64; + ++(*commands); + } else { + EmitDistance((uint32_t)distance, commands); + last_distance = distance; + } + EmitCopyLenLastDistance(matched, commands); + + next_emit = ip; + if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) { + goto emit_remainder; + } + { + /* We could immediately start working at ip now, but to improve + compression we first update "table" with the hashes of some + positions within the last copy. */ + uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5); + uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); + uint32_t cur_hash; + table[prev_hash] = (int)(ip - base_ip - 5); + prev_hash = HashBytesAtOffset(input_bytes, 1, shift); + table[prev_hash] = (int)(ip - base_ip - 4); + prev_hash = HashBytesAtOffset(input_bytes, 2, shift); + table[prev_hash] = (int)(ip - base_ip - 3); + input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2); + cur_hash = HashBytesAtOffset(input_bytes, 2, shift); + prev_hash = HashBytesAtOffset(input_bytes, 0, shift); + table[prev_hash] = (int)(ip - base_ip - 2); + prev_hash = HashBytesAtOffset(input_bytes, 1, shift); + table[prev_hash] = (int)(ip - base_ip - 1); + + candidate = base_ip + table[cur_hash]; + table[cur_hash] = (int)(ip - base_ip); + } + } + + while (ip - candidate <= MAX_DISTANCE && IsMatch(ip, candidate)) { + /* We have a 6-byte match at ip, and no need to emit any + literal bytes prior to ip. */ + const uint8_t* base = ip; + size_t matched = 6 + FindMatchLengthWithLimit( + candidate + 6, ip + 6, (size_t)(ip_end - ip) - 6); + ip += matched; + last_distance = (int)(base - candidate); /* > 0 */ + assert(0 == memcmp(base, candidate, matched)); + EmitCopyLen(matched, commands); + EmitDistance((uint32_t)last_distance, commands); + + next_emit = ip; + if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) { + goto emit_remainder; + } + { + /* We could immediately start working at ip now, but to improve + compression we first update "table" with the hashes of some + positions within the last copy. */ + uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5); + uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); + uint32_t cur_hash; + table[prev_hash] = (int)(ip - base_ip - 5); + prev_hash = HashBytesAtOffset(input_bytes, 1, shift); + table[prev_hash] = (int)(ip - base_ip - 4); + prev_hash = HashBytesAtOffset(input_bytes, 2, shift); + table[prev_hash] = (int)(ip - base_ip - 3); + input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2); + cur_hash = HashBytesAtOffset(input_bytes, 2, shift); + prev_hash = HashBytesAtOffset(input_bytes, 0, shift); + table[prev_hash] = (int)(ip - base_ip - 2); + prev_hash = HashBytesAtOffset(input_bytes, 1, shift); + table[prev_hash] = (int)(ip - base_ip - 1); + + candidate = base_ip + table[cur_hash]; + table[cur_hash] = (int)(ip - base_ip); + } + } + + next_hash = Hash(++ip, shift); + } + } + +emit_remainder: + assert(next_emit <= ip_end); + /* Emit the remaining bytes as literals. */ + if (next_emit < ip_end) { + const uint32_t insert = (uint32_t)(ip_end - next_emit); + EmitInsertLen(insert, commands); + memcpy(*literals, next_emit, insert); + *literals += insert; + } +} + +static void StoreCommands(MemoryManager* m, + const uint8_t* literals, const size_t num_literals, + const uint32_t* commands, const size_t num_commands, + size_t* storage_ix, uint8_t* storage) { + static const uint32_t kNumExtraBits[128] = { + 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, + 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, + 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, + }; + static const uint32_t kInsertOffset[24] = { + 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322, 578, + 1090, 2114, 6210, 22594, + }; + + uint8_t lit_depths[256]; + uint16_t lit_bits[256]; + uint32_t lit_histo[256] = { 0 }; + uint8_t cmd_depths[128] = { 0 }; + uint16_t cmd_bits[128] = { 0 }; + uint32_t cmd_histo[128] = { 0 }; + size_t i; + for (i = 0; i < num_literals; ++i) { + ++lit_histo[literals[i]]; + } + BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo, num_literals, + /* max_bits = */ 8, + lit_depths, lit_bits, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + + for (i = 0; i < num_commands; ++i) { + const uint32_t code = commands[i] & 0xFF; + assert(code < 128); + ++cmd_histo[code]; + } + cmd_histo[1] += 1; + cmd_histo[2] += 1; + cmd_histo[64] += 1; + cmd_histo[84] += 1; + BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depths, cmd_bits, + storage_ix, storage); + + for (i = 0; i < num_commands; ++i) { + const uint32_t cmd = commands[i]; + const uint32_t code = cmd & 0xFF; + const uint32_t extra = cmd >> 8; + assert(code < 128); + BrotliWriteBits(cmd_depths[code], cmd_bits[code], storage_ix, storage); + BrotliWriteBits(kNumExtraBits[code], extra, storage_ix, storage); + if (code < 24) { + const uint32_t insert = kInsertOffset[code] + extra; + uint32_t j; + for (j = 0; j < insert; ++j) { + const uint8_t lit = *literals; + BrotliWriteBits(lit_depths[lit], lit_bits[lit], storage_ix, storage); + ++literals; + } + } + } +} + +/* Acceptable loss for uncompressible speedup is 2% */ +#define MIN_RATIO 0.98 +#define SAMPLE_RATE 43 + +static BROTLI_BOOL ShouldCompress( + const uint8_t* input, size_t input_size, size_t num_literals) { + double corpus_size = (double)input_size; + if (num_literals < MIN_RATIO * corpus_size) { + return BROTLI_TRUE; + } else { + uint32_t literal_histo[256] = { 0 }; + const double max_total_bit_cost = corpus_size * 8 * MIN_RATIO / SAMPLE_RATE; + size_t i; + for (i = 0; i < input_size; i += SAMPLE_RATE) { + ++literal_histo[input[i]]; + } + return TO_BROTLI_BOOL(BitsEntropy(literal_histo, 256) < max_total_bit_cost); + } +} + +static void RewindBitPosition(const size_t new_storage_ix, + size_t* storage_ix, uint8_t* storage) { + const size_t bitpos = new_storage_ix & 7; + const size_t mask = (1u << bitpos) - 1; + storage[new_storage_ix >> 3] &= (uint8_t)mask; + *storage_ix = new_storage_ix; +} + +static void EmitUncompressedMetaBlock(const uint8_t* input, size_t input_size, + size_t* storage_ix, uint8_t* storage) { + BrotliStoreMetaBlockHeader(input_size, 1, storage_ix, storage); + *storage_ix = (*storage_ix + 7u) & ~7u; + memcpy(&storage[*storage_ix >> 3], input, input_size); + *storage_ix += input_size << 3; + storage[*storage_ix >> 3] = 0; +} + +static BROTLI_INLINE void BrotliCompressFragmentTwoPassImpl( + MemoryManager* m, const uint8_t* input, size_t input_size, + BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, + int* table, size_t table_bits, size_t* storage_ix, uint8_t* storage) { + /* Save the start of the first block for position and distance computations. + */ + const uint8_t* base_ip = input; + BROTLI_UNUSED(is_last); + + while (input_size > 0) { + size_t block_size = + BROTLI_MIN(size_t, input_size, kCompressFragmentTwoPassBlockSize); + uint32_t* commands = command_buf; + uint8_t* literals = literal_buf; + size_t num_literals; + CreateCommands(input, block_size, input_size, base_ip, table, table_bits, + &literals, &commands); + num_literals = (size_t)(literals - literal_buf); + if (ShouldCompress(input, block_size, num_literals)) { + const size_t num_commands = (size_t)(commands - command_buf); + BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage); + /* No block splits, no contexts. */ + BrotliWriteBits(13, 0, storage_ix, storage); + StoreCommands(m, literal_buf, num_literals, command_buf, num_commands, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + } else { + /* Since we did not find many backward references and the entropy of + the data is close to 8 bits, we can simply emit an uncompressed block. + This makes compression speed of uncompressible data about 3x faster. */ + EmitUncompressedMetaBlock(input, block_size, storage_ix, storage); + } + input += block_size; + input_size -= block_size; + } +} + +#define FOR_TABLE_BITS_(X) \ + X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17) + +#define BAKE_METHOD_PARAM_(B) \ +static BROTLI_NOINLINE void BrotliCompressFragmentTwoPassImpl ## B( \ + MemoryManager* m, const uint8_t* input, size_t input_size, \ + BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, \ + int* table, size_t* storage_ix, uint8_t* storage) { \ + BrotliCompressFragmentTwoPassImpl(m, input, input_size, is_last, command_buf,\ + literal_buf, table, B, storage_ix, storage); \ +} +FOR_TABLE_BITS_(BAKE_METHOD_PARAM_) +#undef BAKE_METHOD_PARAM_ + +void BrotliCompressFragmentTwoPass( + MemoryManager* m, const uint8_t* input, size_t input_size, + BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, + int* table, size_t table_size, size_t* storage_ix, uint8_t* storage) { + const size_t initial_storage_ix = *storage_ix; + const size_t table_bits = Log2FloorNonZero(table_size); + switch (table_bits) { +#define CASE_(B) \ + case B: \ + BrotliCompressFragmentTwoPassImpl ## B( \ + m, input, input_size, is_last, command_buf, \ + literal_buf, table, storage_ix, storage); \ + break; + FOR_TABLE_BITS_(CASE_) +#undef CASE_ + default: assert(0); break; + } + + /* If output is larger than single uncompressed block, rewrite it. */ + if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) { + RewindBitPosition(initial_storage_ix, storage_ix, storage); + EmitUncompressedMetaBlock(input, input_size, storage_ix, storage); + } + + if (is_last) { + BrotliWriteBits(1, 1, storage_ix, storage); /* islast */ + BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */ + *storage_ix = (*storage_ix + 7u) & ~7u; + } +} + +#undef FOR_TABLE_BITS_ + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/compress_fragment_two_pass.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/compress_fragment_two_pass.h new file mode 100644 index 00000000000..ed91942fd2a --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/compress_fragment_two_pass.h @@ -0,0 +1,54 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function for fast encoding of an input fragment, independently from the input + history. This function uses two-pass processing: in the first pass we save + the found backward matches and literal bytes into a buffer, and in the + second pass we emit them into the bit stream using prefix codes built based + on the actual command and literal byte histograms. */ + +#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ +#define BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ + +#include <brotli/types.h> +#include "./memory.h" +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static const size_t kCompressFragmentTwoPassBlockSize = 1 << 17; + +/* Compresses "input" string to the "*storage" buffer as one or more complete + meta-blocks, and updates the "*storage_ix" bit position. + + If "is_last" is 1, emits an additional empty last meta-block. + + REQUIRES: "input_size" is greater than zero, or "is_last" is 1. + REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24). + REQUIRES: "command_buf" and "literal_buf" point to at least + kCompressFragmentTwoPassBlockSize long arrays. + REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. + REQUIRES: "table_size" is a power of two + OUTPUT: maximal copy distance <= |input_size| + OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */ +BROTLI_INTERNAL void BrotliCompressFragmentTwoPass(MemoryManager* m, + const uint8_t* input, + size_t input_size, + BROTLI_BOOL is_last, + uint32_t* command_buf, + uint8_t* literal_buf, + int* table, + size_t table_size, + size_t* storage_ix, + uint8_t* storage); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/context.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/context.h index 00c065bccd6..0e2e453a4b5 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/context.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/context.h @@ -4,91 +4,95 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Functions to map previous bytes into a context id. +/* Functions to map previous bytes into a context id. */ #ifndef BROTLI_ENC_CONTEXT_H_ #define BROTLI_ENC_CONTEXT_H_ -#include "./types.h" - -namespace brotli { - -// Second-order context lookup table for UTF8 byte streams. -// -// If p1 and p2 are the previous two bytes, we calculate the context as -// -// context = kUTF8ContextLookup[p1] | kUTF8ContextLookup[p2 + 256]. -// -// If the previous two bytes are ASCII characters (i.e. < 128), this will be -// equivalent to -// -// context = 4 * context1(p1) + context2(p2), -// -// where context1 is based on the previous byte in the following way: -// -// 0 : non-ASCII control -// 1 : \t, \n, \r -// 2 : space -// 3 : other punctuation -// 4 : " ' -// 5 : % -// 6 : ( < [ { -// 7 : ) > ] } -// 8 : , ; : -// 9 : . -// 10 : = -// 11 : number -// 12 : upper-case vowel -// 13 : upper-case consonant -// 14 : lower-case vowel -// 15 : lower-case consonant -// -// and context2 is based on the second last byte: -// -// 0 : control, space -// 1 : punctuation -// 2 : upper-case letter, number -// 3 : lower-case letter -// -// If the last byte is ASCII, and the second last byte is not (in a valid UTF8 -// stream it will be a continuation byte, value between 128 and 191), the -// context is the same as if the second last byte was an ASCII control or space. -// -// If the last byte is a UTF8 lead byte (value >= 192), then the next byte will -// be a continuation byte and the context id is 2 or 3 depending on the LSB of -// the last byte and to a lesser extent on the second last byte if it is ASCII. -// -// If the last byte is a UTF8 continuation byte, the second last byte can be: -// - continuation byte: the next byte is probably ASCII or lead byte (assuming -// 4-byte UTF8 characters are rare) and the context id is 0 or 1. -// - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1 -// - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3 -// -// The possible value combinations of the previous two bytes, the range of -// context ids and the type of the next byte is summarized in the table below: -// -// |--------\-----------------------------------------------------------------| -// | \ Last byte | -// | Second \---------------------------------------------------------------| -// | last byte \ ASCII | cont. byte | lead byte | -// | \ (0-127) | (128-191) | (192-) | -// |=============|===================|=====================|==================| -// | ASCII | next: ASCII/lead | not valid | next: cont. | -// | (0-127) | context: 4 - 63 | | context: 2 - 3 | -// |-------------|-------------------|---------------------|------------------| -// | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. | -// | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 | -// |-------------|-------------------|---------------------|------------------| -// | lead byte | not valid | next: ASCII/lead | not valid | -// | (192-207) | | context: 0 - 1 | | -// |-------------|-------------------|---------------------|------------------| -// | lead byte | not valid | next: cont. | not valid | -// | (208-) | | context: 2 - 3 | | -// |-------------|-------------------|---------------------|------------------| +#include <brotli/port.h> +#include <brotli/types.h> + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* Second-order context lookup table for UTF8 byte streams. + + If p1 and p2 are the previous two bytes, we calculate the context as + + context = kUTF8ContextLookup[p1] | kUTF8ContextLookup[p2 + 256]. + + If the previous two bytes are ASCII characters (i.e. < 128), this will be + equivalent to + + context = 4 * context1(p1) + context2(p2), + + where context1 is based on the previous byte in the following way: + + 0 : non-ASCII control + 1 : \t, \n, \r + 2 : space + 3 : other punctuation + 4 : " ' + 5 : % + 6 : ( < [ { + 7 : ) > ] } + 8 : , ; : + 9 : . + 10 : = + 11 : number + 12 : upper-case vowel + 13 : upper-case consonant + 14 : lower-case vowel + 15 : lower-case consonant + + and context2 is based on the second last byte: + + 0 : control, space + 1 : punctuation + 2 : upper-case letter, number + 3 : lower-case letter + + If the last byte is ASCII, and the second last byte is not (in a valid UTF8 + stream it will be a continuation byte, value between 128 and 191), the + context is the same as if the second last byte was an ASCII control or space. + + If the last byte is a UTF8 lead byte (value >= 192), then the next byte will + be a continuation byte and the context id is 2 or 3 depending on the LSB of + the last byte and to a lesser extent on the second last byte if it is ASCII. + + If the last byte is a UTF8 continuation byte, the second last byte can be: + - continuation byte: the next byte is probably ASCII or lead byte (assuming + 4-byte UTF8 characters are rare) and the context id is 0 or 1. + - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1 + - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3 + + The possible value combinations of the previous two bytes, the range of + context ids and the type of the next byte is summarized in the table below: + + |--------\-----------------------------------------------------------------| + | \ Last byte | + | Second \---------------------------------------------------------------| + | last byte \ ASCII | cont. byte | lead byte | + | \ (0-127) | (128-191) | (192-) | + |=============|===================|=====================|==================| + | ASCII | next: ASCII/lead | not valid | next: cont. | + | (0-127) | context: 4 - 63 | | context: 2 - 3 | + |-------------|-------------------|---------------------|------------------| + | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. | + | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 | + |-------------|-------------------|---------------------|------------------| + | lead byte | not valid | next: ASCII/lead | not valid | + | (192-207) | | context: 0 - 1 | | + |-------------|-------------------|---------------------|------------------| + | lead byte | not valid | next: cont. | not valid | + | (208-) | | context: 2 - 3 | | + |-------------|-------------------|---------------------|------------------| +*/ static const uint8_t kUTF8ContextLookup[512] = { - // Last byte. - // - // ASCII range. + /* Last byte. */ + /* */ + /* ASCII range. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, @@ -97,19 +101,19 @@ static const uint8_t kUTF8ContextLookup[512] = { 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, - // UTF8 continuation byte range. + /* UTF8 continuation byte range. */ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - // UTF8 lead byte range. + /* UTF8 lead byte range. */ 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - // Second last byte. - // - // ASCII range. + /* Second last byte. */ + /* */ + /* ASCII range. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -118,19 +122,19 @@ static const uint8_t kUTF8ContextLookup[512] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, - // UTF8 continuation byte range. + /* UTF8 continuation byte range. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* UTF8 lead byte range. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // UTF8 lead byte range. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; -// Context lookup table for small signed integers. +/* Context lookup table for small signed integers. */ static const uint8_t kSigned3BitContextLookup[] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -150,29 +154,31 @@ static const uint8_t kSigned3BitContextLookup[] = { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, }; -enum ContextType { +typedef enum ContextType { CONTEXT_LSB6 = 0, CONTEXT_MSB6 = 1, CONTEXT_UTF8 = 2, CONTEXT_SIGNED = 3 -}; +} ContextType; -static inline uint8_t Context(uint8_t p1, uint8_t p2, ContextType mode) { +static BROTLI_INLINE uint8_t Context(uint8_t p1, uint8_t p2, ContextType mode) { switch (mode) { case CONTEXT_LSB6: return p1 & 0x3f; case CONTEXT_MSB6: - return static_cast<uint8_t>(p1 >> 2); + return (uint8_t)(p1 >> 2); case CONTEXT_UTF8: return kUTF8ContextLookup[p1] | kUTF8ContextLookup[p2 + 256]; case CONTEXT_SIGNED: - return static_cast<uint8_t>((kSigned3BitContextLookup[p1] << 3) + - kSigned3BitContextLookup[p2]); + return (uint8_t)((kSigned3BitContextLookup[p1] << 3) + + kSigned3BitContextLookup[p2]); default: return 0; } } -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#endif // BROTLI_ENC_CONTEXT_H_ +#endif /* BROTLI_ENC_CONTEXT_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/dictionary_hash.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/dictionary_hash.c new file mode 100644 index 00000000000..40187840c65 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/dictionary_hash.c @@ -0,0 +1,1120 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Hash table on the 4-byte prefixes of static dictionary words. */ + +#include <brotli/port.h> +#include "./dictionary_hash.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +BROTLI_INTERNAL const uint16_t kStaticDictionaryHash[32768] = { +32072,0,0,0,0,0,0,0,0,21860,0,0,0,0,0,0,0,40486,0,0,0,0,0,45798,0,0,0,0,0,0,1292 +,0,0,0,0,4964,278,23717,0,19972,0,0,0,0,0,0,0,0,0,0,0,0,2126,16102,0,0,0,14437,0 +,0,0,0,0,0,0,26727,2253,0,0,17252,0,0,0,0,0,0,0,0,0,3622,0,0,0,0,22984,0,0,0,0,0 +,0,16647,0,34247,0,0,0,0,0,48486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2511,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19532,0,0,24004,0,0,0,9828,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30853,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,31974,0,0,0,0,0,0,0,0,20650,2404,0,20773,1677,9031,0,6404,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6761,7206 +,0,0,21992,22983,0,0,3529,0,1864,0,0,0,0,0,0,11046,0,0,9641,0,0,0,6507,0,0,36934 +,21576,62375,0,0,0,0,0,0,0,0,0,8294,0,0,0,0,0,0,0,40807,0,0,0,39398,8136,0,0,0,0 +,0,0,0,8875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7941,0,0,25609,0,0,0,936, +3716,3213,15687,0,0,0,0,0,52519,0,17381,0,0,0,0,1320,5797,0,21029,0,0,6472,807,0 +,0,0,0,0,0,0,0,0,0,13545,0,0,0,3624,0,0,0,29674,30820,0,31237,0,6596,0,0,0,0,0,0 +,0,0,0,64070,0,0,0,0,0,0,0,0,0,0,0,22278,0,37446,0,0,0,0,7240,423,0,24612,21705, +17636,0,0,0,0,0,0,1833,0,0,0,328,6021,0,0,0,19974,0,0,0,0,0,0,0,0,0,62119,4178,0 +,0,0,0,12100,8617,0,0,16900,0,36678,0,0,0,35366,0,51718,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,20998,0,62086,0,0,0,0,0,5542,0,0,0,0,0,0,0,0,0,0,0,14629,10952,25927,0,0,0 +,0,19849,0,0,0,0,0,0,0,30952,3046,14314,12998,0,0,0,15268,0,40582,30216,62118,0, +0,0,20132,0,0,0,0,0,12005,0,0,0,52358,0,0,0,0,24778,0,44,33095,0,0,0,0,0,26372,0 +,0,0,0,0,3781,0,0,17928,9479,0,0,0,0,0,0,0,0,32297,28613,0,0,0,0,0,0,0,0,0,0,0,0 +,0,47174,11723,0,0,0,0,0,0,0,0,0,2536,55143,0,0,6410,0,0,0,0,0,0,0,0,56294,11914 +,0,529,0,30184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8261,0,0,28808,58854,22633, +965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64135,0,0,331,3684,0,1605,0,0,0,0,0,0, +0,0,0,0,16650,37,0,23622,3144,15429,0,0,0,0,0,0,0,0,0,0,22443,69,0,0,0,0,0,0,0,0 +,17832,0,0,0,0,0,0,0,0,0,11113,0,0,0,0,18309,0,0,0,0,0,0,0,0,0,26630,0,0,25512, +25895,0,0,0,0,0,0,0,0,0,0,0,16901,0,0,0,27558,0,0,9418,0,0,0,3508,0,0,0,0,0,0,0, +0,37990,9289,8517,0,0,0,0,1578,1604,23944,0,0,14916,12781,0,0,0,0,0,0,0,12105,0, +16617,0,0,0,0,0,0,0,0,0,0,0,0,21348,11240,28870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,5772,0,0,27812,0,0,0,0,0,0,0,8324,0,0,0,0,0,0,0,0,0,0,16748,1157,0,0,18794, +16324,25898,935,8333,0,0,0,0,0,0,0,0,18246,0,18086,0,46854,0,0,0,0,0,0,339,0,0, +25188,12780,12166,6409,0,0,0,0,16516,0,27012,28395,0,0,0,0,0,0,0,1420,0,0,0,9768 +,52967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,324,0,0,0,0,0,0,0,0,0,64998,0,0,0,0,0, +21893,0,0,0,0,0,47366,0,0,0,870,0,0,0,12646,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,26020,16360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1809,0,0,0,6601,15878,0,0,0,0,0, +29092,0,28516,0,0,0,0,0,0,0,0,0,21988,0,0,0,42950,0,0,0,0,0,0,0,0,0,0,5133,1318, +0,0,0,0,0,0,0,0,0,0,0,54982,24904,0,0,0,0,0,0,0,0,0,0,51526,0,0,0,0,0,3685,0,0,0 +,0,10062,9412,0,0,0,31460,5708,6181,0,0,0,0,0,0,0,0,0,5575,0,0,0,0,0,0,0,0,0,0, +27144,57478,0,0,0,0,0,0,7084,0,21993,53126,0,0,0,0,8397,0,0,5733,0,0,0,0,0,2116, +0,24742,0,11271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1133,0,4873,0,0,38310,0,0,0,0,0, +0,0,0,0,0,0,0,17932,0,0,18053,0,0,0,25510,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17798,0, +26214,0,0,0,0,0,0,0,0,23016,17415,20392,164,0,0,0,0,0,0,0,0,0,0,0,3239,0,46119,0 +,0,0,28580,0,0,0,0,0,0,0,0,0,7621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41478,0,0,31016, +55334,10056,1924,0,0,0,0,0,36614,0,36711,0,0,0,0,0,0,0,0,0,0,13994,59303,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,26501,0,5639,0,0,0,0,0,0,13897,1253,0,0,0,0,0,5095,0,0,0, +28869,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8646,0,0,0,0,25641,17796,0,0,0,0,0,0,0, +13316,620,6309,11819,0,0,0,0,0,0,0,0,0,904,1095,0,24229,0,0,28744,49703,0,23077, +0,0,0,0,32392,0,0,0,0,35271,0,28740,5866,0,0,0,0,0,0,0,4361,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7917,8869,0,0,0,13924,0,0,0,0, +0,41958,0,0,0,0,0,0,6766,13989,0,0,0,903,0,0,24010,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,64390,0,22468,0,25861,0,0,0,0,23656,5317,0,0,0,0,0,0,23017,5445,16009 +,0,0,0,0,0,0,0,0,48006,10473,0,0,14404,0,0,0,42183,0,0,0,51270,0,0,10602,24132,0 +,0,0,0,0,43782,0,0,17834,0,0,0,25576,27205,0,0,0,0,0,0,0,0,29066,0,0,0,0,0,626, +1988,14700,0,0,0,0,0,0,0,0,0,0,0,0,57670,0,0,0,0,0,0,0,0,0,44710,0,0,0,0,3848, +7623,0,0,0,0,0,0,0,0,0,0,0,42374,0,0,0,0,0,0,0,0,19272,6436,0,0,5256,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,19685,0,0,0,0,0,0,0,0,0,0,0,0,0,39783,0,0,0,0,30984,0,0,0,0,0,0 +,28230,0,0,0,29028,10538,3205,0,0,0,0,0,0,0,0,0,0,0,5636,840,295,0,0,8488,8198,0 +,0,0,0,0,0,0,0,0,20580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4074,19526,0,0,0,0, +31144,64038,0,0,0,0,0,0,16716,0,0,0,0,0,0,0,0,0,0,0,17706,0,0,0,0,0,0,50630,0, +50503,0,0,0,0,0,0,0,0,0,0,0,25446,0,0,0,13831,0,0,0,0,0,0,2696,4039,0,0,0,0, +25288,0,12076,2054,0,48934,0,0,0,0,16969,59431,17259,35335,0,0,0,0,0,0,0,0,0,0,0 +,0,31275,0,0,0,1097,0,0,0,0,0,0,0,0,0,0,0,776,839,0,0,29386,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,5864,12134,0,0,0,0,0,0,0,25349,0,0,0,0,0,0,0,0,0,61447 +,0,0,0,0,0,0,0,0,0,24678,0,0,0,63335,0,28836,8142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4494,0,0,0,0,0,14088,1188,0,16260,0,0,0, +16421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,276,0,0,17060,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24076,29445,0,33543,0,4901,0 +,0,12522,0,0,62471,0,0,0,0,0,0,0,0,0,0,4046,0,0,0,0,20486,0,15460,2217,51719,0,0 +,0,0,0,23495,0,0,0,0,0,0,15370,0,15849,0,15113,0,0,0,0,0,0,0,0,27972,7337,0,0,0, +0,30342,0,0,0,0,0,0,0,0,32299,23940,0,17766,0,0,0,0,0,0,6184,0,20904,0,0,0,0,0,0 +,0,0,0,0,31492,0,0,0,5509,0,0,0,0,0,0,0,0,2669,50182,0,0,12299,0,0,0,0,0,0,0, +5257,28167,0,0,0,0,0,0,0,0,0,0,0,11750,3890,0,0,26500,0,0,0,0,0,0,0,49318,0,0,0, +0,0,0,0,10981,0,0,0,0,0,0,0,0,17961,1831,0,0,0,0,0,0,0,29638,0,0,0,0,26473,0, +6216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711,0,0,0,0,0,0,0,0,0,0,28683,39975 +,0,0,0,0,0,51654,0,0,0,27527,0,0,0,0,0,0,0,0,30859,3268,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28772,0,18212,0,0,0,0,25448,65446,0,0,0,0, +0,0,3337,1670,0,0,0,0,0,19332,0,0,0,0,24936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1043,0 +,0,0,0,15814,0,21670,0,0,0,0,0,0,0,16263,0,0,0,0,0,0,0,0,0,32454,0,30630,0,0, +20170,9926,0,0,0,18247,0,0,14376,0,2056,17191,0,0,0,0,0,0,0,7812,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,22474,52806,1588,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10825,0, +0,0,0,40934,0,0,0,0,0,0,0,28677,0,0,5714,0,0,0,0,0,0,0,0,0,0,0,0,0,25865,22246,0 +,0,0,0,17256,35751,0,0,0,0,0,0,0,0,8236,0,32108,0,0,0,43,14342,0,16517,0,0,30732 +,0,4012,133,0,40583,971,23942,0,0,27275,0,0,0,204,0,0,27140,7564,44327,27592, +57958,0,0,0,0,22344,25701,0,0,0,0,0,0,0,19524,31755,0,0,28102,0,59111,0,0,0,0,0, +0,0,12261,0,44934,0,0,0,0,31560,0,11114,0,0,0,0,0,0,0,0,0,0,0,18953,18311,0, +45159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +19399,0,0,0,0,0,0,0,0,0,0,0,0,0,58534,0,0,0,0,0,0,0,0,0,0,0,0,22411,23943,0,0,0, +0,0,0,11690,0,0,4069,0,0,2668,6342,0,0,0,0,0,0,27658,1766,0,0,0,0,23240,56070,0, +0,0,0,0,0,0,0,0,0,0,0,0,34119,0,24453,0,0,0,0,21867,0,17610,9894,0,0,27976,38790 +,0,0,0,43654,0,31559,12202,23142,0,0,0,50343,0,0,0,0,0,32806,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,49895,0,0,0,0,15786,4263,0,0,0,0,4746,3814,0,0,0,0,0,0,17192, +453,17323,0,20328,4036,0,0,0,15844,0,0,0,0,27561,31940,32296,0,0,0,0,0,0,0,11499 +,11782,0,0,0,0,9738,50471,0,0,0,0,0,35430,0,0,0,0,0,29734,0,0,0,36551,0,0,0,0, +9257,5606,0,13829,0,7015,0,0,0,0,0,25127,0,0,19051,0,0,0,0,0,0,0,0,0,0,0,0,0, +2572,0,0,0,0,0,0,29797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42342,0,0,0,0,9293, +0,17896,56038,4077,0,0,0,29899,37351,0,30823,0,8326,0,0,0,18342,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18569,54054,0,0,0,0,0,0,0,0,0,37254,0,0,31433, +61510,0,2022,0,0,0,0,0,25381,0,0,0,0,0,0,0,0,0,0,0,0,0,2149,25289,0,0,0,0,0,0,0, +0,0,0,12516,14185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8676,0,0,0,0,0 +,0,0,0,0,0,0,36486,0,0,0,0,10889,9607,0,28711,0,0,0,0,0,0,0,0,0,0,28490,0,0,0,0, +26181,10283,1701,0,0,0,0,0,0,0,0,0,14980,0,7783,0,27846,0,0,0,56486,3892,0,0,0, +5770,16583,0,26309,13422,20292,0,0,0,0,0,0,0,0,0,28742,0,0,0,0,14536,1158,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25801,0,0,0,0,0,0,0,0,0,0,0,0,42438,0,3332,0,0 +,0,0,0,0,0,0,0,8327,0,0,0,0,0,0,0,0,0,0,0,0,17353,1447,0,0,8427,48518,1359,0,0,0 +,0,0,14986,0,32168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9230,2791,0,0,0,0,0,0,0,0, +16073,31623,4269,0,0,0,0,0,0,4519,0,0,27912,58950,0,0,0,0,0,0,0,0,8361,19812,0,0 +,0,0,6056,7877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21701,0,0,0,0,0,0,0,0,0,0,0 +,0,9128,1125,0,16548,0,0,0,0,0,0,0,0,0,0,17292,6854,21352,0,2380,0,0,4007,0,0,0, +0,0,24357,4202,0,0,0,0,0,0,0,0,0,0,0,0,0,10664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,42823,3022,0,0,0,0,0,0,0,0,0,0,0,0,14373,0,20677,3304,2759,20522,64903,0, +0,0,38,0,0,0,0,0,0,0,0,0,0,0,27814,2802,8870,3758,1255,0,0,0,0,0,0,0,0,30027, +9510,0,0,0,0,17864,14855,0,0,0,0,0,0,0,0,0,0,23404,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +51462,0,0,0,0,0,0,0,45734,0,0,23467,32327,0,0,10826,52999,0,0,0,33222,31336, +64326,0,0,0,0,0,0,0,32166,0,0,3891,0,0,0,7017,645,0,0,0,0,0,0,27915,46087,0,0,0, +21863,0,34246,0,0,16715,0,0,0,0,14052,21416,0,0,0,0,0,0,0,0,39846,0,0,0,0,0, +38982,0,0,17512,7460,0,0,0,0,0,0,0,0,0,15428,0,0,0,0,0,0,0,28356,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,25445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11879,0,0,0,0,0,0 +,0,0,0,0,0,0,0,19911,0,20007,0,0,0,10855,943,0,0,10821,0,0,0,0,4170,0,0,0,0,0,0, +0,0,0,9836,0,0,0,0,0,0,0,0,0,0,65415,0,0,0,0,0,0,0,0,9865,24646,0,0,0,0,0,40519, +0,0,0,0,0,0,0,0,0,12804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22091,23655,0,0,0,0,0,0, +0,31686,0,0,0,58599,0,0,0,0,0,0,0,0,0,0,0,0,0,19620,0,0,0,0,0,0,0,0,0,0,0,0,0, +24421,0,28100,0,0,0,31268,0,3204,0,0,0,0,0,0,0,0,0,14822,0,0,0,0,19947,10182,0,0 +,9480,14821,4398,0,0,14532,0,0,0,48871,1873,0,0,0,0,0,0,0,589,1541,0,0,0,0,0, +23333,0,0,0,14149,0,0,0,0,1296,14374,0,27300,0,0,0,0,0,0,7276,0,0,0,0,0,0,47718, +0,0,0,0,0,0,0,0,0,0,5164,1765,0,14405,0,37574,1994,0,6636,0,0,0,0,0,0,0,0,27815, +0,0,0,0,2568,6820,0,0,0,0,0,0,0,0,0,0,11336,26247,0,0,23912,0,0,0,30536,0,0, +34342,0,17799,0,0,0,22149,0,6118,0,25732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,26600,5190,0,0,1142,0,0,0,0,0,0,0,0,39527,0,0,0,0,0,39494,0,0,0,0,0,0,0 +,0,0,0,3085,0,0,0,0,0,0,0,4786,0,0,0,28873,6532,0,0,26664,0,9193,11719,0,0,0,0,0 +,0,31752,64646,0,0,0,0,0,0,0,0,0,0,0,11397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25094,0 +,0,18153,20167,0,0,0,17254,0,0,878,0,0,0,0,0,0,0,0,0,0,24166,0,0,0,0,0,0,0,0,0,0 +,0,0,26059,0,0,0,0,0,0,0,0,0,0,0,0,0,31592,0,0,8167,24362,6212,0,34758,0,0,0,0,0 +,0,32520,0,0,44679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17989,8681,29222,0,0,0, +0,0,0,0,0,10251,4902,1452,15207,0,0,0,0,0,0,0,22822,0,10469,0,0,0,0,0,0,19337, +17670,107,11494,0,0,0,0,27305,2565,0,0,0,0,0,0,0,64518,200,28389,0,0,0,0,31208,0 +,30762,0,0,0,0,0,29321,60518,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3209,3237, +12490,22663,0,0,0,18789,31464,16391,0,0,0,0,0,0,0,0,0,0,0,20646,0,0,0,27238,0,0, +0,0,0,15940,4488,6951,0,0,0,46342,0,0,0,0,0,0,0,0,0,28965,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,20584,3367,0,25350,0,0,0,0,0,0,0,0,0,0,0,0,1814,0,0,0,0,0,0,0,0,0,0,17125, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55943,0,0,0,0,0,24133,0,0,0,0,0,0,0,0,0,0,0,0,2929 +,0,0,50086,0,2918,25356,30052,115,11846,0,0,0,0,3056,0,0,0,0,17639,239,19815,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36806,0,0,0,0,0,0,0,0,0,0,0,0,0,21479,0,0,0,0,0, +28420,11786,4772,0,0,3368,36295,0,31463,0,0,14665,996,0,20582,0,0,0,9988,0,23685 +,0,0,0,52551,0,0,0,0,0,0,0,7556,0,0,0,0,0,0,0,1895,2186,0,0,0,0,0,27755,25447,0, +0,0,0,31052,63270,0,0,0,0,0,0,0,36742,0,24804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,31048,0,0,0,0,0,0,0,0,0,21290,2276,0,0,0,0,26475,0,0,0,0,0,0,0,0,0 +,0,15332,0,0,0,0,0,0,0,0,3176,19431,0,0,0,0,0,0,0,62726,0,0,0,25380,0,0,27883, +1316,0,0,7724,3015,0,0,0,0,6697,0,0,47910,0,0,0,0,0,0,0,0,0,3141,0,0,0,14820,0,0 +,0,0,9326,0,0,0,0,0,0,0,0,0,0,31493,0,0,0,0,0,6566,0,0,0,0,0,0,6569,1348,0,25638 +,0,0,0,0,0,20324,0,0,17067,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11876,0,41030,0,0,0,26405 +,0,0,0,0,0,0,0,0,0,11431,28137,14950,0,10151,0,0,0,0,0,0,0,29574,0,0,0,0,27176, +57446,0,0,0,0,28650,57574,1387,0,0,0,0,0,0,0,0,0,0,58247,0,0,0,0,0,0,0,16805,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3526,0,15781,0,5572,13352,0,0,0,0,0,18665 +,23463,0,0,0,0,0,0,15405,6885,0,0,0,0,15272,0,0,0,0,0,0,0,0,9861,0,0,0,0,0,0,0,0 +,9512,4037,0,0,11563,49639,0,0,0,0,0,0,27880,57830,0,0,0,0,0,41831,0,21924,0,0,0 +,0,0,0,0,25509,0,27462,0,18085,0,0,0,0,0,0,0,0,0,0,0,0,13898,8068,26441,0,0,0,0, +0,0,25316,0,0,0,0,16298,7397,5706,19239,0,0,0,0,0,0,0,0,1392,50919,0,0,0,0,0, +53863,0,0,0,0,1451,0,0,0,0,0,0,0,0,0,0,35847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,17801,15813,0,12740,0,0,0,32967,0,0,0,0,0,0,5389,0,0,0,0,0,0,0,0,0,0,31143,0, +20548,0,0,0,0,0,0,0,0,0,51686,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +12109,19015,0,34983,0,21732,3600,0,0,0,0,47750,17288,43975,22857,47559,0,0,0,0, +26408,48358,0,0,0,0,0,0,0,0,0,0,0,0,0,30470,0,0,23560,4581,0,22404,0,49286,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49831,0,0,0,27525,31691,7,0,0,25835,0,0,0,0,0, +4201,16485,0,20676,0,0,0,0,3753,23303,16264,3878,0,0,0,0,0,0,11434,0,0,0,0,0,0, +7589,0,0,0,0,0,0,0,0,0,57095,0,0,0,0,0,0,0,0,0,0,0,22820,11146,49158,0,23623,0,0 +,0,0,0,0,0,13893,0,0,0,0,0,0,11722,60071,1258,0,0,0,0,0,0,18564,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,27945,0,0,0,0,5479,0,20006,17608,3431,10988,30180,0,0,0,0,0,0,0, +24581,14,0,0,0,0,0,0,25572,0,0,0,28612,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53543,0 +,0,0,0,0,0,0,0,0,0,0,33670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8710,0,14116,0,0,116, +292,0,0,0,37831,0,43078,0,0,0,0,0,0,0,0,21832,0,0,32134,783,0,0,30982,0,0,0,68,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5932,0,0,0,18505, +15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3630,16965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,17797,0,0,0,0,0,0,520,42150,0,0,3122,0,0,0,22506,0,0,0,0,0,0,0,0,28550,0, +0,0,50278,0,0,13641,5958,0,35238,0,0,0,0,0,0,0,0,29993,18724,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,20619,9319,0,0,0,0,23977,0,5193,0,0,12196,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,24390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20105,677,0,0,0,0 +,0,0,0,0,29419,0,0,0,0,0,0,0,0,0,20266,0,0,0,0,10631,0,0,0,0,0,0,0,0,0,47655,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26628,12744,0,20648,0,0,0,432,0,0 +,0,0,0,0,0,0,0,0,646,0,25604,0,0,0,0,0,0,0,0,0,0,0,0,0,63782,0,0,0,0,24616,0,0,0 +,21291,0,0,0,0,0,0,0,0,0,0,45638,0,0,0,0,1931,0,0,0,20521,59975,0,20614,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,56231,0,0,0,0,0,29991,0,52871,0,20934,0,0,0,0,0,0,0,16871, +0,0,0,0,0,0,0,0,0,0,0,0,0,7237,0,0,0,0,0,47558,0,0,0,0,0,0,0,0,0,0,0,10406,0,0,0 +,0,0,0,0,43046,0,0,2930,0,12936,0,0,0,0,0,0,0,0,0,0,0,0,31141,0,0,0,0,0,0,0, +37639,0,17572,0,0,0,0,0,0,0,0,0,0,31240,0,0,0,0,0,688,0,0,0,0,0,1648,0,0,0,0, +10055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,6345,199,0,34982,0,0 +,0,0,0,0,0,0,0,0,0,0,0,56839,0,0,0,0,0,48902,0,13412,0,0,0,0,0,0,0,0,2441,4420,0 +,0,0,0,20428,933,0,0,0,0,0,0,0,45383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,54726,0,0,0,0,0,0,0,0,0,0,0,0,17036,741,0,0,0,0,0,0,0,27589,0,0,30282 +,18950,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2248,0,0,0,0,0,0,0,0,0,25993,0,0,0, +2443,0,0,31622,0,14150,0,0,0,28679,0,0,0,0,0,0,15464,0,0,0,0,54694,0,0,0,0,0,0, +3827,0,0,0,3756,0,9897,0,0,0,0,0,19082,31239,0,0,0,0,0,0,0,0,0,0,0,24580,0,0,0,0 +,0,0,0,0,0,16580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27625,0,0,0,784,4647,32652,0,0, +63494,0,0,0,0,0,0,0,21062,0,0,0,0,0,0,0,0,0,0,3404,58470,0,32325,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,18634,2789,0,0,0,0,0,0,0,8548,0,0,0,22501,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,15881,0,0,0,0,35879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7978,17956,0,0,0, +0,0,0,0,24324,0,0,4937,0,0,0,8168,0,13420,10340,0,0,0,0,0,11780,0,0,0,0,0,0,0,0, +0,0,16712,0,0,0,0,0,0,0,17640,17991,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,2953,0,0,0,0,0,0,0,9100,16806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30667,0,0, +19013,0,0,0,0,0,0,205,15334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1969,0,0,0,0,0,0,0,26248 +,52518,0,49798,0,0,0,0,0,0,0,9668,0,0,0,0,0,4742,0,0,21641,0,0,0,0,0,0,53574,0,0 +,0,0,0,0,5707,0,0,0,0,0,0,0,3018,12454,0,0,0,0,2920,262,0,0,0,0,0,0,0,0,0,0,3593 +,0,0,0,0,0,0,0,0,0,0,23910,0,0,0,0,0,0,0,55879,0,0,0,0,0,775,0,43270,5066,48967, +0,0,22986,4165,8971,44838,0,0,0,0,0,62279,272,0,0,0,0,51430,0,0,0,0,0,0,28234,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13349,0,0,0,51111,20265,13861,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,585,7494,0,0,0,0,0,0,0,0,21768,62407,0,0,0,0,7979,166,0, +0,0,0,0,0,0,0,0,38918,0,56742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16296,5767,0,0,0,0,0,0 +,0,32068,0,0,0,0,0,0,0,0,0,0,0,0,0,29796,0,0,0,0,0,0,0,0,23916,30183,0,58791,0,0 +,0,0,0,0,0,20518,0,0,0,0,8969,0,0,0,183,0,0,0,0,0,2314,17445,0,0,0,0,0,0,0,0,0, +23748,0,0,8139,4839,27914,0,0,0,0,0,0,0,0,0,0,0,0,29478,0,0,16552,26663,0,53767, +0,0,13960,8039,18696,0,0,0,0,0,0,0,0,0,0,0,782,16005,0,0,0,0,0,0,0,0,6258,56806, +16456,12455,0,0,0,0,0,0,0,23780,0,0,0,0,0,0,9355,0,0,0,7273,41063,24780,57766,0, +0,0,0,0,0,0,0,0,0,3820,2597,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29225,61126,0,0,0,58439, +15691,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37190,22408,967,0,0,0, +23078,26858,0,0,0,19753,0,0,0,0,0,0,0,0,0,5416,13702,0,0,0,0,0,52742,20394,38567 +,0,0,0,51079,0,0,136,8516,0,0,0,0,0,0,0,0,0,0,0,27588,0,0,0,0,0,0,0,0,0,0,531,0, +0,0,0,0,0,0,0,0,8936,5031,12520,19334,0,0,22827,30247,28074,31140,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,27497,18148,20104,59079,0,0,0,0,0,0,0,0,0,24389,0,0,6125,0,0,0,0, +9541,0,0,24553,29095,0,0,0,0,0,0,0,25444,0,0,9643,0,0,63047,0,0,0,0,0,0,0,0,0, +39558,0,0,0,0,0,0,20620,11815,499,0,5128,2278,0,0,0,0,0,46310,0,0,0,0,0,0,0,0, +23530,40166,2440,0,0,0,0,0,0,0,0,0,0,15174,0,0,0,0,0,0,0,0,0,0,26922,0,0,0,0,0,0 +,0,0,0,0,26758,0,0,0,0,0,51911,0,0,23532,0,0,0,0,51238,25737,44486,12622,0,0,0,0 +,0,0,3078,0,9253,0,0,1128,22023,0,0,0,21350,0,16420,0,0,0,0,0,0,0,65094,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22532,0,48774,0,34503,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,9797,0,0,0,0,0,0,0,13797,0,38279,0,0,1738,0,489,46343,0,45382,0,0,0,0,0,0, +0,0,0,29030,0,0,0,0,0,0,6220,56550,0,0,0,0,0,26885,0,28806,0,0,0,0,0,0,0,0,0,0,0 +,45958,0,0,0,0,20553,49927,0,0,0,0,0,0,3019,12358,0,0,0,0,0,0,0,0,0,0,26571, +13319,0,0,653,23399,0,0,0,0,0,0,0,0,22316,0,0,21188,0,0,0,0,0,0,0,0,0,27556,0,0, +0,0,0,0,0,27878,21483,27653,0,29701,237,0,10632,0,0,0,0,33766,0,0,0,0,0,0,31563, +0,0,0,0,0,1416,2439,0,0,0,0,0,0,0,0,0,0,9611,0,0,0,0,0,0,0,5611,16581,26601, +35462,0,0,0,26756,0,59271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26984,57734,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,7882,0,0,0,19528,6469,0,0,1161,0,0,0,7688,20935,425,0, +0,0,0,0,0,0,0,12519,0,12902,0,0,0,0,0,0,0,0,0,0,2411,0,11725,26086,0,0,20201,0,0 +,0,0,0,0,0,0,11045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30471,0,0,0,0,0,0,0,0,0,0,0, +21541,1141,21190,0,9188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,1093,0,0,0,0,0,0,0,0, +4842,0,13672,0,0,12230,0,0,0,10532,0,0,8937,0,0,0,0,0,0,0,0,0,0,28996,0,0,11720, +26982,0,46182,0,43911,31754,0,1160,3940,0,20772,0,0,0,0,0,24549,0,32582,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,31845,0,0,0,0,0,0,0,2310,11788,0,0,43047,0,0,0,18853,0 +,0,0,0,0,0,0,0,0,63622,0,0,7048,17318,0,0,0,21957,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,1039,6279,0,0,0,0,0,0,0,0,0,0,0,0,0,12197,0,0,0,0,0,0,0,0,0, +46470,0,0,24,19719,0,0,0,0,0,0,0,0,0,39335,0,0,0,0,0,0,0,0,0,0,21353,3846,0,0,0, +0,0,0,0,36679,0,0,0,0,0,0,0,0,0,0,0,11268,0,0,0,0,0,9382,0,0,0,0,0,0,0,0,0,0,0,0 +,0,29926,0,33606,0,4708,2828,0,0,29543,0,0,0,0,0,29893,0,0,0,0,0,0,0,0,3663,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10920,7111,0,0,0,0,0,0,0,0,0,0 +,9384,0,0,0,0,0,0,0,0,0,0,0,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37094,0,0,0, +27110,0,0,0,0,0,0,21865,0,27753,30214,0,0,0,0,0,57895,0,0,0,0,0,0,0,0,0,0,12648, +5446,0,0,0,0,0,0,0,0,0,0,19784,17124,0,52007,0,0,0,0,0,0,0,0,758,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,24900,0,0,0,0,0,1476,0,65031,0,0,1205,46663,0,30023,11625, +1094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10058,0,0,0,0,0,0,28455,0,0,0,0,0,0,0,0,0,0,0, +14788,0,0,0,0,16808,0,0,742,0,0,0,0,0,0,0,0,0,0,0,21636,0,0,0,0,0,0,0,0,0,0,0,0, +15944,23207,0,0,0,0,247,0,0,0,0,24743,0,0,0,5252,0,0,0,0,0,0,0,0,29961,18660, +21099,46791,0,7045,0,0,0,0,25707,0,0,17412,3828,0,0,0,0,0,0,0,0,0,0,0,5803,5637, +0,38151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60103,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,853,0,0,0,0,0,0,30215,0,0,0,0,0,0,0,8741,0,0,0,0,0,27366,0,0,0,0,171, +4070,0,0,0,0,0,0,0,0,24073,7366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2184,5189,0, +20932,1545,4996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7684,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6313,0,0,0,0,0,0,0,30826,0,0,0,0,0,0, +0,0,0,0,27463,0,0,0,0,0,0,0,0,0,0,21640,63303,0,0,3275,31111,0,0,0,0,0,0,0,11556 +,0,14756,0,0,0,15108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23914,28966,0,0,0,4965,0,0,0,0, +0,0,0,0,0,0,10216,5223,0,0,0,0,0,0,0,0,0,27142,0,0,1173,20198,0,0,0,0,0,56614,0, +0,0,0,0,4612,0,0,0,0,0,0,0,0,0,0,11822,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17769,7910, +0,0,31880,0,0,6055,0,0,0,0,0,0,0,0,0,0,8970,0,0,0,0,0,0,0,0,0,0,0,16840,23879,0, +0,11051,0,0,0,32552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20842,13701,0,0,0,37191,7373, +10471,17482,25348,0,0,0,38502,0,0,0,0,0,0,0,0,0,21509,6058,0,0,0,0,0,0,3173,0,0, +0,9543,0,0,0,0,0,0,17768,12708,0,0,0,0,0,37030,0,0,0,0,0,0,0,0,0,0,12748,48743,0 +,11718,0,0,25194,0,0,0,9033,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5028,0,30118,0,0,0,0,0, +42759,0,0,3720,0,0,0,0,0,0,25190,0,0,0,0,0,0,0,0,0,0,5450,5125,0,58086,0,0,0,0,0 +,27716,0,0,0,0,0,0,0,0,0,22052,0,0,0,0,26249,0,15947,3460,0,0,0,35814,0,0,0,7813 +,19500,32167,0,18597,0,0,0,0,0,28644,0,0,0,60743,0,0,0,0,0,29636,0,0,0,0,0,0,0,0 +,0,0,0,0,0,17220,15885,9414,9642,0,0,0,593,0,0,24228,0,0,0,0,0,40422,0,26244,0, +23109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64902,0,0,0,0,3979,60007,0,0,0,28199 +,0,0,0,43142,0,0,0,0,0,0,0,29158,0,30532,0,0,0,0,13256,0,0,0,0,16549,0,0,0,0,0, +26116,0,0,0,0,0,0,0,0,22825,0,0,0,0,0,0,0,1065,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,18985,4805,0,0,0,0,0,17702,0,0,0,0,0,0,0,0,0,0,3468,0,0,0,0,13447,0,0,0 +,0,0,0,0,0,0,0,0,56871,0,0,1776,15780,0,0,2603,0,10280,31366,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,11592,3591,0,2372,0,0,0,0,0,0,0,20004,0,0,0,0,0,0,12072,518,0,0,1960, +8999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7178,32999,0,0,0,0,0,0,1641,0,0,0,0,0,0,0,6764, +9893,490,4005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25258,5541,0,14053,306,20743,0,0, +9422,0,0,0,0,0,0,0,11977,260,0,35175,0,0,0,0,0,0,0,18405,0,0,0,16582,0,0,0,22470 +,0,0,0,0,0,0,2792,0,0,0,14026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14858,3909,0,0,0 +,57671,0,0,0,0,0,0,15979,0,0,0,2794,15239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26884, +9070,0,0,0,0,51846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19499,37127,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,19205,10350,11910,0,0,0,0,15083,23108,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,169,0,0,0,0,0,0,0,0,0,0,0,15274,41735,0,56774,0,0,2825,0,14025, +389,0,0,0,0,0,0,0,0,21482,31910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20456,710,0,0,25032, +21797,0,0,0,0,0,0,0,0,0,0,32427,21252,0,30150,0,43174,0,0,0,0,0,0,0,0,0,0,0,0, +11403,0,0,1029,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6892,9252,0,63206, +3496,14406,0,0,0,0,0,0,0,0,0,0,22568,0,0,21253,0,0,0,0,0,0,0,39623,0,0,10189,0,0 +,0,0,0,0,0,0,0,0,0,0,0,30729,59910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3305,0,0,0,0,0,0, +0,0,0,7660,24871,0,838,0,0,0,0,0,0,0,0,0,0,0,0,12013,13252,0,551,0,0,0,43207,0, +30567,0,0,0,0,0,0,0,0,28394,30724,0,0,0,0,0,0,0,0,0,0,22665,22725,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,29414,0,0,0,0,16074,8966,245,1445,0,0,0,0,24872,0,0,0,0, +13124,0,35527,0,0,0,0,0,0,13259,10917,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +25191,0,0,0,13956,0,0,0,0,0,0,0,54631,19625,12070,3083,0,0,0,0,14436,0,0,0,0,0,0 +,0,0,0,0,0,0,0,21766,0,15463,29322,0,0,0,0,0,0,29990,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,23653,0,0,0,0,0,0,0,0,2643,0,0,21223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4114,0,0,0,0,0,0,0,0,34790,0,0,0,0,0,0,0,16103,0,0,0,0,0,0,297,3620,3338, +10372,0,14727,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29924,22473,13895, +15529,32455,30378,13540,0,28807,0,0,0,0,0,0,0,64582,18380,0,0,0,0,0,0,0,0,0,0,0, +0,38598,0,0,0,0,0,0,0,0,1236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32710,0,0,0,0,4590,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64935,0,0,0,0,0,0,0,0,0,0,0,0,16744,0,0, +0,0,0,0,20005,0,0,13608,1191,0,0,0,62183,0,0,0,0,0,24484,0,0,0,0,0,0,0,0,0,0, +17643,0,0,0,0,0,0,0,0,0,0,0,0,5380,0,0,32328,0,0,63814,0,0,0,2919,0,0,0,0,17034, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,60295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,7690,486,0,0,0,39270,0,49094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12555,0,0,0,0,0,0,0,0 +,0,0,0,0,20967,17993,12647,0,0,0,16036,32616,0,0,0,0,16294,8555,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35174,0,0,0,0,0,0,30346,0,0,0,0,0,0,0, +14797,3652,0,0,8268,12934,0,54950,0,0,0,0,2632,33959,0,23175,0,0,0,0,0,36262,0,0 +,0,0,0,0,32684,26918,0,32676,0,0,0,0,0,0,0,0,0,0,15625,11943,1206,0,0,0,0,18052, +0,0,0,0,0,16422,0,0,0,26404,0,0,28777,0,0,24902,0,0,408,45351,0,35719,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,3658,17446,0,165,0,0,0,0,0,0,0,6151,0,0,24424,0,0,0,0,0,0,0, +24170,24293,0,0,0,0,0,0,0,0,0,11847,0,39591,0,0,0,0,0,0,9549,2788,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1010,0,0,0,0,0,0,26055,31724,0,24233, +1828,0,0,0,0,0,0,0,0,0,17284,0,0,0,0,19464,0,0,0,0,0,0,0,0,32452,0,0,0,28871,0,0 +,0,0,17704,53383,0,0,0,0,0,0,0,0,0,17892,1938,0,0,0,0,0,16362,0,0,21605,0,0,5003 +,0,0,0,0,0,0,22693,0,22342,0,0,0,55846,0,0,0,0,0,0,0,0,0,22853,0,0,0,0,0,0,0,0, +6600,263,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24836,0,0,0,0,0,0,0,0,0, +40711,0,0,0,0,0,33894,0,0,0,0,0,0,13000,0,0,0,0,0,0,0,0,0,0,30308,0,0,0,0,0,0, +5386,0,0,0,0,0,0,27844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17740,0,0,0,0 +,25093,29064,0,0,0,0,0,0,0,12680,11462,0,0,0,0,0,0,0,0,84,7303,0,0,0,0,0,0,0,0,0 +,0,0,27044,457,0,22924,58246,19016,0,2606,45703,0,5157,0,25028,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,2065,0,0,0,0,0,31946,0,0,0,0,0,0,0,0,0,0,0,0,33382,0, +47878,0,0,0,0,0,0,0,0,25004,0,0,0,0,0,0,0,26153,35654,0,58055,30668,0,0,0,0, +25988,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,7560,20583,0,0,0,0,0,0,0,0,0,37510,0,0,0,0,0,0,0,0,0,42822,0,0,0,0,0,0,0,0, +0,0,0,1733,0,0,0,8196,0,0,11241,0,30572,60326,0,15013,0,0,0,40646,0,23812,0, +10022,0,0,0,0,0,0,0,0,12874,31015,0,0,0,0,0,0,1608,0,0,0,0,18308,0,0,0,0,27114,0 +,0,0,0,0,0,0,7944,1382,0,11813,0,0,0,0,0,0,0,0,0,0,0,0,0,24517,0,11621,0,0,0,0,0 +,0,0,0,0,0,0,21702,0,0,13100,8262,2644,7973,0,0,0,0,0,0,0,0,0,0,0,0,1033,12581,0 +,25221,0,0,0,40998,16301,62983,0,0,0,0,1263,9318,0,0,0,18854,0,0,1741,33895,0,0, +0,0,0,0,26377,0,0,0,0,0,0,0,0,0,0,32165,0,51143,0,0,0,0,0,29412,0,0,0,0,0,0,0,0, +1674,4230,0,0,0,0,0,10502,0,0,0,0,5545,0,0,0,0,0,2099,45158,0,0,0,0,0,0,0,0,0,0, +14157,0,26955,0,0,0,0,0,0,0,0,0,17096,0,0,0,0,0,0,0,0,0,0,0,0,0,27050,6726,0,0,0 +,0,0,0,0,0,28554,0,0,7142,0,0,0,0,16936,0,0,0,25833,0,4399,6980,0,46214,0,0,0,0, +0,10630,21164,0,0,0,0,0,0,0,2446,48551,0,0,0,0,0,0,0,0,0,0,0,13381,0,0,0,0,0,0,0 +,0,15400,12135,0,0,0,0,0,4774,586,0,0,0,0,0,0,0,0,23751,9736,4548,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25577,29607,6250,1637,0,0,0,0, +22024,0,0,0,0,22308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37414,24044,0,0,0,14474,29735, +0,7077,0,45990,0,0,0,0,30568,40039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +6150,0,4228,0,0,0,0,0,27687,0,0,0,0,0,0,0,24548,21513,1350,0,0,0,33607,0,0,0,0,0 +,0,0,0,11784,1414,0,0,0,0,0,0,0,18244,940,0,0,0,0,0,0,7270,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,16709,0,0,0,0,0,0,0,48935,0,0,0,0,0,0,23660,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,53350,0,0,0,0,0,0,4236,16358,0,4422,6665,32644,0,0,744,18084,0,11014,0,0,0,0,0, +29508,0,0,0,0,0,0,0,7686,0,0,13289,5478,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,12872,0,0,24134,1005,22916,0,31429,23400,0,0,0,0,0,0,0,28424,0,0,0, +25706,27109,0,0,26345,0,0,0,0,0,0,25126,0,0,88,0,0,0,0,0,0,0,17032,0,0,21799,0,0 +,10060,0,12296,21892,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20777,14311,0,58182, +32232,0,10282,0,2121,11527,0,0,0,12325,0,0,0,0,0,0,0,28804,2344,8133,0,0,0,0, +21864,62695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2771,0,0, +23204,0,0,0,0,0,6278,0,0,0,0,0,26597,0,0,0,0,23144,0,0,0,0,0,31816,20070,0,0,0,0 +,0,0,0,0,0,0,24456,2118,0,0,0,0,6570,1156,0,0,0,0,0,0,0,30406,0,0,0,28388,3572,0 +,0,26599,12426,5286,0,0,0,0,0,4967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24970,24167,0,0,0 +,0,28745,4678,0,0,0,0,0,0,0,1444,236,0,0,0,0,0,0,0,0,19428,0,0,0,0,0,0,2092,0,0, +0,0,0,0,0,0,0,2827,0,0,0,0,0,19881,19204,0,11749,0,0,0,0,0,0,0,17958,0,17894,0, +18726,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,21510,5033,0,0,0,0,22855,0,0,0,0,0,14598,0,29605,0,0,0,0,0,0,0,0, +617,0,0,0,0,47142,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,2225,14823, +0,0,2637,6182,78,15078,0,0,0,0,20264,0,0,0,0,0,0,36743,4140,44551,17352,25703,0, +0,0,0,0,0,0,0,0,0,0,0,14024,0,0,0,0,0,0,28004,0,0,0,0,0,7588,0,0,0,0,0,0,0,2087, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18028,0,0,0,300,14212,0,0,1386,40327,0,0,0,0 +,0,0,31082,0,0,22374,0,0,0,0,0,35718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26532,7756,0,0,18982,0,0,0,0,0,0,0,0,6440,1159,7180,0,0,0,0,0,0,45766,0,57798,0, +16740,0,0,6802,60454,0,0,0,26470,0,0,0,0,0,65382,4362,7750,0,0,0,0,0,0,9096,4743 +,334,0,0,0,0,0,0,39974,0,0,0,25828,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3027,0,0, +0,15816,0,0,0,0,0,0,0,0,48327,0,0,0,0,0,0,0,0,0,0,16168,41799,0,0,24458,8581,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12292,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,54503,0,0,0,0,5097,30852,18664,0,0,0,0,0,0,16484,0,0,27337,0,0,0, +0,0,0,0,0,0,0,0,0,35942,0,0,0,0,0,0,0,4356,0,0,0,0,0,57030,0,0,1417,41191,0,0,0, +0,0,23429,0,0,0,0,10024,21735,0,0,10126,0,0,0,0,19046,0,0,0,0,0,0,24105,4710,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4394,0,0,0,0,13253,0,56391,0,0,0,0,0,0,0,0,0,0, +0,19174,0,0,0,0,0,0,0,0,0,55974,0,0,0,52070,0,15620,0,0,0,0,0,2660,0,0,0,0,21644 +,0,0,52455,0,0,0,0,0,0,0,0,0,8902,0,0,0,0,0,0,3116,0,464,34726,0,0,0,0,0,0,25003 +,12423,0,27172,1896,7335,0,0,0,0,0,35686,0,0,0,0,3472,0,0,0,0,22406,0,0,0,0,0,0, +0,0,0,45254,0,0,0,0,0,0,0,0,0,0,0,0,0,21124,23594,33127,0,0,0,0,0,0,16684,22087, +0,0,0,0,0,0,0,0,0,0,0,0,8714,0,0,0,0,0,0,0,0,0,0,55814,0,0,0,0,0,0,4109,23460,0, +0,8874,0,0,0,0,0,0,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,0,0,29960,63398,1302,0,0,0,0, +0,0,0,0,24806,0,0,0,0,0,0,0,0,0,9799,0,0,0,0,0,0,0,31333,0,0,0,0,0,19557,0,0,0,0 +,0,5701,0,0,0,63014,0,0,0,0,0,0,0,21254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12484,0,0, +0,48326,0,0,0,0,0,0,0,0,0,0,0,15783,0,0,1202,0,0,0,0,23174,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,3086,49191,0,0,5387,15141,0,0,0,3365,0,0,0,0,20076,14021, +0,0,0,0,0,0,0,0,0,0,376,40198,0,0,0,52039,0,24932,0,0,0,0,808,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,9860,0,0,0,0,0,23719,0,21476,0,0,0,0,20776,4807,0,0,3177,16678,0,0,110 +,10853,0,0,0,17382,0,0,0,0,0,0,0,0,0,43462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,7500,4966,0,0,0,0,0,0,0,52102,0,24516,0,0,0,0,0,0,0,0,0,0,0,0,0,26535,0,0 +,0,46247,0,0,0,15557,0,0,0,0,76,52327,0,0,0,0,17866,0,0,0,0,0,0,0,0,0,0,46758,0, +0,0,0,0,19173,0,0,0,0,0,0,0,0,0,44038,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2985,0 +,0,0,0,0,0,14310,0,0,2125,45831,0,0,0,0,0,0,9838,0,13227,19492,0,0,0,29764,0,0,0 +,0,686,30053,0,0,0,0,0,30789,139,20837,0,0,0,0,502,18533,0,0,0,0,0,19111,0,0,0,0 +,0,31396,0,0,0,17444,0,0,0,0,0,0,0,49862,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25610,550,0 +,0,561,0,29034,0,0,0,3528,0,0,0,1715,14661,18,63463,0,0,0,0,0,0,0,0,0,0,14186,0, +0,0,0,0,0,0,0,0,0,0,29578,59014,0,39430,0,0,0,0,2250,16612,0,31780,0,0,0,0,0,0, +462,16967,0,29029,0,0,0,0,0,23462,0,0,0,0,0,0,0,0,1768,0,6025,16998,1804,0,0, +54182,0,0,0,0,0,0,0,0,14124,0,6154,29702,0,0,0,0,0,7716,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,48807,0,8292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16389,5933,0, +14857,51303,0,0,0,0,0,0,0,0,0,0,0,35623,9097,23047,0,0,23112,0,0,0,0,0,438,0,0,0 +,0,0,0,0,151,9254,1390,0,0,0,0,0,0,54215,0,0,0,0,6187,0,0,0,0,13095,0,0,0,0,0,0, +0,0,0,0,0,0,9866,0,0,59622,0,0,0,0,0,0,0,0,0,25286,0,0,23848,32069,0,0,0,0,0,0,0 +,0,0,9255,2187,15270,437,0,0,0,0,0,0,0,0,0,0,19493,0,0,0,0,0,0,0,0,0,0,0,11748,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16902,0,0,0,0,0,0,0,0,0,22212,1865,17543,0, +0,0,0,0,0,21996,0,0,0,0,55975,0,0,0,0,0,0,0,0,32138,21156,0,0,0,0,0,0,14249,0,0, +0,2388,0,0,0,0,6823,0,0,0,0,0,0,0,0,0,0,0,0,0,26694,0,0,6059,53511,0,0,0,0,0,0,0 +,49542,6159,0,0,0,0,0,0,0,0,0,0,0,0,0,1036,24036,0,2501,0,0,0,0,0,0,17419,51271, +3377,15142,0,0,0,0,0,0,5007,62374,0,56935,0,0,0,0,0,0,0,0,0,0,0,24422,0,0,0,0,0, +0,0,0,942,0,0,0,0,0,0,0,0,0,0,28263,0,0,0,0,0,0,0,15622,0,19749,0,0,1611,0,22219 +,48583,25129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17476,0,0,0,0,0,0,0,0,0,0, +721,0,0,0,0,32518,0,0,0,18469,0,0,0,0,0,0,5896,29927,3657,23046,0,0,3214,0,0,0,0 +,0,0,0,0,0,112,0,0,0,0,0,3048,455,0,31012,0,0,0,0,0,0,0,23270,0,32677,0,0,0,0,0, +38086,0,0,0,0,0,0,0,0,0,0,0,0,0,4900,0,0,0,0,0,0,0,0,0,25541,0,18788,0,0,22248, +1351,0,61734,4524,30629,0,14887,242,29063,0,0,14408,4741,0,0,0,37318,0,0,0,0,0,0 +,0,0,0,0,0,0,8106,0,32107,0,0,0,0,0,0,0,0,0,0,0,1481,0,0,28132,0,25798,0,59783,0 +,0,0,0,0,59078,0,0,0,23366,0,0,0,0,0,0,0,30887,0,0,0,0,16200,0,0,0,335,0,0,0,714 +,0,0,0,0,0,0,0,0,0,0,0,0,0,30730,9478,0,0,0,0,0,0,0,0,0,0,0,18790,0,0,0,0,663,0, +0,0,1034,31431,0,0,0,0,0,0,0,0,0,0,30120,0,0,0,0,13925,0,0,0,0,0,0,2280,13414,0, +0,0,0,0,0,22028,23687,3017,11047,0,0,21738,18630,0,0,0,0,0,0,0,30246,0,0,0,0,0,0 +,0,0,0,0,0,0,17257,0,21896,63783,0,0,0,21094,0,18662,0,25700,0,22533,0,0,0,0,0, +6341,5800,11111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15399, +12970,6501,0,0,3179,26438,0,0,0,0,0,0,0,15750,0,13062,0,0,0,0,0,0,0,0,0,0,142,0, +0,0,0,21284,11177,4391,0,0,0,0,19595,40647,0,0,0,0,0,11877,0,0,0,26439,0,0,0,0, +695,49126,27467,11972,0,0,0,0,0,0,9961,0,0,0,31722,62982,0,0,0,0,15817,52710,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24614,0,0,0,0,0,20550,0,0,5034,3942,0,0,0, +45927,0,0,0,0,0,0,0,0,0,0,2548,0,0,0,0,0,0,45606,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,3405,12582,15563,54087,0,0,0,0,0,0,0,0,0,0,0,0,24202,5893,0,0,0, +44230,0,0,0,5605,0,47782,0,32230,0,0,0,0,0,0,0,0,0,0,0,7014,0,0,0,0,16488,3175,0 +,27237,0,0,0,0,0,40902,0,0,0,0,0,0,0,32004,31434,0,24392,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,29130,58214,0,0,0,0,0,0,29002,0,0,0,0,0,0,0,0,0,0,55366,0,0,0,0,0,0,0 +,0,0,0,0,37926,0,0,0,0,0,0,0,0,1290,0,0,0,4713,0,0,0,0,0,0,0,0,0,0,0,0,0,20812,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1803,966,0,17700,0,0,654,19109,0,51655,0,0,0,0,0, +10470,1584,0,0,0,0,0,0,0,2506,0,0,25159,4303,0,0,0,395,15879,0,0,0,0,0,0,0,0,0,0 +,1352,6535,0,19652,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4722,7909,0,0,0,0 +,30152,0,0,64742,0,0,0,0,0,0,2153,9125,0,0,279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,41894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,1328,17030,0,0,0,0,0,0,0,54151,0,0,0,0,1775,54535,0,0,0,0,31624,0,0,0, +7150,0,0,0,0,0,0,0,1840,35943,0,0,0,0,0,56455,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +64486,0,0,0,51174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4134 +,0,0,0,0,0,0,0,0,0,0,0,17092,0,0,0,0,0,0,0,0,0,0,0,0,12,16134,19883,39943,10281, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44711,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +14125,2407,0,0,0,0,0,0,0,0,0,0,26921,0,0,0,0,0,22188,0,20810,10053,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28170,0,15208,0,0 +,32517,5736,19271,3562,10534,0,0,0,59655,0,0,0,0,27084,60422,0,0,24969,0,0,0, +2636,0,0,0,0,26277,0,0,0,0,0,0,0,0,0,0,0,30596,3594,0,0,0,8362,14565,0,0,0,0,0,0 +,10793,12326,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5906,59686,0,0,23081,517,0,15556,0,0,0, +8486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19877 +,0,0,0,0,0,0,0,0,7497,0,0,26085,0,0,23784,63591,6568,6310,0,0,0,0,0,0,0,0,0, +10054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7018,14470,18858,0,5641,10660,0,0,0,0,0,0,0, +35526,1515,0,0,0,0,0,0,0,0,0,0,0,27656,0,0,9606,0,39590,0,0,0,0,0,0,0,0,0,0,0, +53926,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,4327,12649,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,20199,0,0,0,0,0,0,26730,0,0,0,19400,14695,0,31334,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19589,0,0,0,0,0,0,0,0,5064,11908,0,27333,0, +0,0,0,0,0,0,47751,0,0,0,26662,0,0,0,0,0,0,0,55655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,6245,0,0,0,0,0,0,0,0,23368,63911,0,0,0,0,0,0,0,0,1974,0,0,0,0,0,0,0, +8520,24037,0,0,0,0,0,0,0,26279,0,0,0,22886,0,0,0,27782,0,30694,0,0,0,0,0,0,0,0,0 +,0,0,33703,0,0,0,30405,0,34598,0,51047,0,0,0,0,1908,0,0,0,0,0,0,0,0,0,0,1511, +21897,0,0,0,0,0,0,51398,0,24870,0,32647,0,0,0,35015,0,0,0,0,0,0,0,11204,0,0,0,0, +0,0,7758,57991,0,0,0,30949,0,0,22,15140,9162,0,0,0,0,0,0,25540,20136,7108,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16427,10789,9805,0,0,0,0,0,0,0,0,0,4680,0,0,52679, +0,0,0,0,0,14884,0,0,0,16804,0,0,0,0,0,0,9578,5287,0,0,0,0,0,0,0,34054,0,0,0,0,0, +19076,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7627,55719,0,39463,14446,58374,0,0,0,0,23465, +15845,0,0,0,0,0,38534,0,0,0,17893,10922,0,7176,678,0,0,0,0,0,0,0,0,3113,46279,0, +0,0,0,0,0,0,23334,0,0,18088,23268,0,62342,0,0,0,16613,0,0,0,0,0,0,0,0,0,38182,0, +0,0,0,0,0,25292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10344,71,6446,0,0,1893,0,0, +1106,0,28680,30756,0,41126,0,0,1492,0,15341,0,0,0,0,17575,0,21220,0,0,0,0,0, +25060,2088,21828,0,0,0,0,0,358,0,0,0,0,0,16708,0,0,0,1668,0,0,0,0,0,12260,0,0,0, +0,0,0,0,0,4078,0,0,0,0,0,12713,6215,0,0,20329,0,0,0,0,0,0,0,0,0,0,31204,0,0,0,0, +0,0,0,0,0,0,3732,0,1646,0,0,27460,0,34406,17128,14341,0,0,0,0,0,19527,0,0,0,0,0, +0,0,0,0,0,6120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8551,21546,10212,3020, +2951,0,17638,0,0,6985,44999,2218,8197,0,0,30472,63366,0,26660,0,0,0,0,0,0,0,0,0, +0,0,0,1265,0,0,0,0,0,0,0,2610,0,0,0,11278,20295,0,0,0,0,0,19780,0,0,0,0,0,0,2353 +,10852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5421,24292,0,0,0,0,0,0,0,0,0,0,0,0,0,34407,0, +0,0,0,0,0,15432,20774,0,0,0,0,0,0,0,0,12360,10757,0,0,0,33126,0,0,0,0,0,0,0,0,0, +0,0,29573,0,2343,0,0,0,0,0,63079,0,0,0,0,0,0,0,0,0,43015,0,16038,0,0,0,0,0,0,0,0 +,1480,25573,0,0,0,0,0,0,0,8839,0,0,0,0,0,0,0,24645,0,0,0,0,0,0,0,0,0,0,0,0,0, +5063,0,0,0,0,0,45830,0,0,0,0,0,0,0,0,0,0,823,0,0,64039,0,0,0,0,0,0,0,0,0,0,0,0,0 +,15300,0,0,0,0,0,0,2924,46759,6760,19268,0,0,0,0,0,0,0,0,0,34182,0,0,3977,18149, +0,0,0,32199,0,0,0,0,0,0,0,0,0,23524,25994,0,0,10343,0,0,0,9733,0,0,0,0,0,0,0,0,0 +,4740,0,0,0,0,0,0,0,0,0,16741,0,0,4626,23367,0,0,31400,0,0,3557,0,0,4234,0,0,0,0 +,0,0,28486,0,0,0,0,0,14213,0,57191,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,65318,29832,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29989,0,31846,0,0,8170,0,0,4421,27626,30884,0 +,0,20204,0,0,0,0,44614,534,20868,0,0,0,0,0,0,0,0,0,0,0,0,0,28710,0,10277,0,0,0,0 +,0,29511,0,19813,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27020,0,0,0,0,0,0,53094 +,0,35207,0,0,0,37542,0,61766,8584,8037,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12488 +,22757,0,0,0,0,0,0,0,0,0,0,0,0,0,23814,0,0,0,0,0,0,0,0,0,19973,0,0,0,63943,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36006,0,0,0,19012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,8580,0,0,0,0,0,0,0,18021,0,0,0,0,0,0,0,0,80,1254,0,0,0,42630,0,0,0,0,0, +0,0,16262,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2124,25479,0,0,0,0,16873,0,0,0,0,3142, +0,0,18443,0,0,0,0,0,3917,0,8841,1190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,20645,0,0,0,0,0,0,0,0,0,0,0,9284,0,0,24394,41351,0,0,0,42087,0,62566,0,0,0,0, +0,0,0,0,0,0,6728,4199,0,0,0,0,25515,0,1231,0,374,15623,0,29956,0,14118,0,0,0,0,0 +,19047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31718,0,0,0,0,0,0,0,0,0,0,0,20900,0,16743,0 +,0,0,28902,0,0,0,0,0,0,0,0,0,0,0,0,2578,0,0,0,0,0,0,0,0,0,13838,0,0,10052,0,0,0, +0,7432,43783,17097,0,0,0,0,0,873,0,0,0,398,0,0,0,0,0,0,0,0,0,8459,23559,0,53030, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35750,0,4071,0,0,0,38662,0,41414,0,0,0,0,11656,0,0 +,0,0,0,4011,42695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25353,0,0,0,0,0,0,0,27177,22372,0, +0,0,0,0,30980,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46278,3976,12711 +,0,0,0,0,0,0,0,0,0,0,0,20517,0,0,0,0,0,0,0,0,0,0,0,0,4072,11078,0,0,16553,2405,0 +,0,0,0,0,0,0,0,2670,0,0,0,0,0,0,32998,0,0,0,0,0,0,0,47046,0,30533,0,0,11050,9734 +,13129,0,0,0,0,23494,0,0,0,0,0,58310,0,0,0,57543,0,0,0,0,0,0,0,0,0,0,0,0,0,454,0 +,0,0,0,0,0,5163,59687,2220,0,0,0,0,0,0,29510,0,0,0,0,0,0,0,0,0,0,0,17316,0,20069 +,0,0,0,0,0,0,0,0,0,5319,0,0,0,0,0,0,0,0,0,27174,0,0,0,0,0,0,0,22949,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,19208,0,0,0,0,0,0,20933,0,0,6026,8742,0,0,0,17380,0,13127,2797,0 +,0,30116,0,0,5963,8004,0,57126,0,0,0,0,0,42854,14792,30759,0,24964,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,16933,0,0,0,0,0,0,15176,40839,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +788,30341,0,0,0,0,21036,24102,0,0,0,0,30123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +22597,31531,26789,0,59559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9352,29863,0,0,0,0,0,0,0,0 +,0,24551,0,0,0,0,0,0,0,20516,0,0,0,39462,3665,0,28265,0,8778,64262,0,57414,9132, +0,0,18276,0,0,0,0,0,0,0,0,0,0,26344,30725,524,19751,0,13796,0,0,0,0,0,0,0,0,0,0, +18155,0,12841,0,74,24998,13579,1061,0,64199,0,0,8776,0,0,60231,0,25412,0,0,0, +59143,0,0,0,0,0,0,14344,1510,0,0,0,38374,0,0,0,0,0,0,0,0,13353,0,0,0,0,0,0,0,0,0 +,0,9446,0,0,0,0,0,0,0,32613,0,0,0,0,0,0,0,0,0,0,0,0,0,19844,0,0,0,0,14859,0,0,0, +0,6662,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14154,0,29770,0,0,0,0,0, +16520,2182,0,0,0,0,0,36102,3340,0,0,0,0,0,0,0,0,25189,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,15720,0,0,0,0,0,0,22758,0,0,304,0,3243,14117,0,0,0,0,0,0,0,0,0,0,5130, +12679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21733,10441,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,36103,0,0,0,0,0,23590,0,57479,0,0,0,0,0,0,0,0,0,0,0,0,10824, +18372,0,0,0,0,0,35078,15722,12967,0,0,0,0,0,34599,0,0,0,0,0,0,0,0,0,0,0,0,0, +53639,0,38630,0,0,0,0,0,0,31017,11333,0,0,0,0,19144,0,9513,0,0,0,0,0,0,0,0,56711 +,24042,0,1197,0,0,58502,0,0,0,0,0,0,0,0,0,8230,6121,18628,0,0,0,0,0,0,25290,0,0, +0,0,0,1514,0,0,0,0,0,0,0,14378,9798,32363,0,0,0,0,0,9577,0,0,0,0,0,0,26788,0,0,0 +,0,0,0,330,10533,0,0,0,0,0,42246,0,0,0,0,0,0,5074,21028,0,38119,0,0,0,0,0,0,248, +0,31176,62054,0,53287,0,0,0,0,271,0,0,0,0,0,0,0,0,0,0,0,0,0,9224,2117,0,0,0,0, +15818,5607,0,52582,0,0,0,0,0,0,0,0,18248,24005,23018,0,0,0,0,0,0,0,0,0,0,0,0,0, +427,0,0,39910,0,0,7080,11399,0,0,0,0,0,0,0,0,0,0,22220,57894,0,0,0,0,0,0,0,13156 +,0,1413,1007,0,0,0,0,21415,0,21543,0,0,0,0,0,0,0,0,0,41702,22538,9573,0,0,0,8806 +,0,0,6920,56359,0,0,0,0,0,0,0,0,0,0,0,42215,0,0,13708,0,0,0,0,0,0,0,0,0,0,16453, +0,0,0,0,0,0,1582,1764,3282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11653,0,0,0,0,12139,0, +29482,31076,1673,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40262,0,0,0,33862,0 +,0,0,0,0,20996,0,0,0,0,0,4615,0,0,0,0,0,0,0,0,0,0,0,43943,333,19367,0,0,0,0,0,0, +0,26821,0,32389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4936,11687,0,0,0,0,0,0,0,0,0,10885,0 +,0,0,0,0,25926,0,0,0,0,0,0,15851,0,0,0,0,0,0,0,0,0,8360,0,17130,7942,0,11460,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,18150,14248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +22310,0,0,0,42758,0,0,0,0,0,0,0,0,29354,5574,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,31109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11236,0,0,0,0,0,0,0,0 +,0,0,0,0,0,9156,0,0,1801,14023,0,0,0,0,0,62406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +23620,0,0,0,0,0,0,0,0,0,0,31018,65510,0,0,0,0,0,0,0,26182,0,0,0,0,0,0,0,27717,0, +0,0,0,0,0,0,46950,0,0,0,0,0,0,0,0,0,0,0,0,0,31108,0,11366,0,0,0,3717,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8552,6054,3339,0,0,0,0,51622,0, +0,0,0,0,0,0,3718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28358,0,2756,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1462,0,0,27622,0,0,0,0,0,0,0,62502,14410,56743,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,12206,0,0,0,0,0,0,0,0,0,0,0,0,36550,0,38054,0,0,0, +21221,0,0,0,0,0,0,0,27077,0,0,16906,0,12587,12101,0,0,0,0,0,0,10414,28775,21769, +60167,0,56646,0,0,0,0,0,20740,0,0,0,0,0,0,5931,5351,0,65478,0,0,0,0,0,0,7977, +52647,0,4868,0,0,0,55463,0,0,0,0,0,32197,0,0,0,0,0,13445,0,0,0,26631,0,0,0,0,0, +11237,0,0,0,0,209,1285,0,0,1928,0,0,0,0,43334,23849,23172,0,0,0,0,0,0,0,0,24712, +62439,8811,3463,20457,0,0,0,0,0,0,0,0,0,16008,56263,0,0,0,0,0,0,0,0,0,0,0,60358, +22761,6565,0,0,30888,27686,0,0,0,17093,0,0,0,0,22121,0,0,0,7593,14182,0,28103,0, +0,0,0,0,45126,0,0,0,0,0,0,0,0,0,0,0,0,0,31844,0,0,0,0,0,0,0,0,0,0,0,0,0,18500,0, +0,0,0,28202,0,0,0,0,0,0,0,0,26308,0,29541,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +29572,0,0,0,21285,0,0,0,0,0,60839,0,0,0,0,0,30407,15949,2981,0,0,0,46439,0,0,0,0 +,0,23911,26505,25222,12811,5895,0,6343,0,0,0,0,0,0,0,0,0,0,0,31815,0,0,0,0,0,0,0 +,0,19688,10245,0,0,0,31301,26985,28964,0,0,0,0,0,0,0,0,27208,31172,0,0,0,0,216,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16292,0,0,0,0,0,8743,0,0,0,0,0,0,0,0, +0,0,0,0,0,6438,0,0,0,33319,0,0,0,33286,0,0,0,0,0,0,0,0,0,22181,7499,24774,0, +10756,0,44775,724,0,25768,25669,24873,5349,25257,0,0,54566,0,0,0,0,0,0,0,0,0,0,0 +,327,439,357,0,0,6536,8452,0,0,1802,0,0,61350,0,15045,0,0,0,0,0,0,0,0,0,0,0, +38343,0,0,0,0,0,0,0,0,0,0,32491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +22885,0,0,32073,0,0,0,9546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27748,0,0,23176,0,0,0 +,0,0,0,0,0,0,0,0,0,24583,0,0,0,0,0,34118,0,0,0,0,2158,0,5586,30340,0,0,0,0,0,0,0 +,0,0,0,0,0,0,24452,0,0,0,0,2409,4390,0,24196,0,0,0,0,0,0,32264,26948,20587,0,0,0 +,2155,0,0,0,0,0,0,0,0,0,0,0,4328,26276,0,0,0,0,0,0,0,0,23564,0,12458,11367,0,0, +25162,0,0,0,0,0,0,65414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32966,0,0,0, +34662,0,0,0,0,0,39238,0,0,0,0,11400,10214,266,12452,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,15173,0,0,0,13668,0,13222,0,23364,0,0,0,0,0,11941,0,0,0,0,0,0,0,0,0, +25575,0,0,0,57383,0,0,0,10308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,2865,9287,75,0,0,0,0,0,0,0,0,0,0,21508,22380,59526,0,0,0,23589,0,0,0,51590 +,0,0,0,0,0,0,0,0,0,0,0,4645,3980,28295,0,0,0,0,0,12388,0,0,0,0,0,0,0,0,0,0,0, +21734,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41767,0,0,0,0,0,0,0,18436,0,0,0,0,0, +0,0,21958,0,19430,0,0,1204,0,0,0,0,0,0,0,0,0,3240,55239,0,0,0,0,0,30660,0,0,0, +28901,0,0,0,0,4716,0,0,0,0,0,0,0,0,0,0,0,11754,0,0,0,0,22086,0,22564,8749,0,0, +28391,0,0,0,0,0,0,0,0,0,0,0,2886,0,0,0,0,0,0,0,29062,0,0,0,0,0,0,0,40358,0,0, +15916,39526,0,13735,0,0,0,0,28938,0,407,4006,0,0,0,26916,0,0,0,0,0,27526,30280,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24586,0,24649,5126, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8684,0,0,0,0,0,0,0,23019,0,22377,18599,0 +,0,0,0,0,0,0,0,0,0,27593,9735,0,20196,0,0,0,0,28168,48423,0,0,0,0,0,31399,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,13892,0,0,0,0,0,17606,0,0,15242,29767,26378,17701,0,0, +14472,0,4840,0,0,0,0,0,0,24708,0,9349,4330,0,0,0,0,0,0,0,16137,0,0,34854,0,0,0,0 +,0,0,0,0,0,0,0,25063,0,0,0,0,0,0,6603,12583,0,0,0,0,0,0,0,0,7433,29188,0,0,0,0,0 +,31270,0,0,22920,3143,0,0,0,0,0,23461,0,0,0,0,0,0,0,0,618,0,0,0,0,21381,0,11524, +0,0,0,0,0,0,21004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,23239,0,0,0,0,0,0,0,0,0,0,0, +0,2313,0,0,40614,0,0,14825,0,0,0,0,0,0,46535,0,41190,7853,0,31656,0,0,0,0,0,0,0, +0,0,3433,5255,0,0,0,0,0,0,0,33958,0,0,0,0,72,15493,0,0,0,0,0,0,0,36070,0,0,0,0,0 +,0,0,14724,0,0,0,0,0,29828,0,0,0,0,0,0,0,18822,20008,0,0,0,0,2438,2952,0,0,0,0,0 +,0,0,0,0,0,0,0,0,3342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24420,0,19908,0,0,0,8101,0, +17479,0,0,3530,0,8202,29319,0,0,1132,6789,0,0,23881,0,0,0,4810,0,0,46918,0,0,0, +41574,0,0,0,0,0,0,0,0,0,48582,0,0,0,0,0,0,0,0,0,0,0,0,0,39334,0,0,0,26117,0,0,0, +0,0,0,5100,0,0,0,0,0,23496,27813,4045,54918,0,0,0,0,0,0,6473,7428,0,0,0,0,6792,0 +,0,0,0,0,3560,32103,0,0,0,0,0,0,0,0,0,0,0,54790,0,0,6926,0,0,0,0,16518,0,0,0,0,0 +,20806,0,0,0,0,1841,3174,0,0,0,0,9612,18374,0,0,0,0,32744,0,0,9671,0,59879,0, +23300,8073,0,0,14758,0,0,0,10342,0,0,0,0,0,0,24808,14759,0,0,0,0,0,0,5515,0,0, +14852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2354,23271,0,32740,0,0,0,0,0,0,0,0 +,0,0,18472,0,0,0,0,0,0,0,0,33190,0,0,0,0,0,0,0,0,8972,21669,0,0,0,0,0,0,0,0,0,0, +0,25574,0,0,0,0,5096,0,14283,55367,0,0,0,0,0,0,0,0,0,12644,0,0,0,0,4651,0,0,0,0, +0,0,0,661,0,0,13638,19466,0,0,0,0,0,31273,0,8010,0,0,0,0,0,3211,0,0,0,0,63430,0, +0,0,0,0,15237,0,0,0,0,0,0,19018,2437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14312,0 +,0,0,0,16836,0,0,471,35975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,6023,0,0,0,0,0,0,0,0,11593,9639,0,0,0,55783,0,5700,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27908,0,26598,0,0,6667,6470,0,0,0,0,0,0,0, +62534,0,0,0,0,16522,27911,0,0,10025,7172,0,0,779,0,360,17477,0,0,0,61991,7752, +7717,1494,0,0,0,26569,40742,0,0,0,0,0,0,0,26406,10474,32196,0,0,0,0,0,50567, +16521,11716,0,0,0,0,0,55558,0,0,0,0,0,0,0,0,0,0,0,61926,0,26436,0,0,0,0,4459, +10598,0,0,0,0,0,0,0,0,0,0,0,9223,0,29318,0,0,0,0,0,60423,0,0,0,0,0,0,0,47078,0, +50246,0,12612,0,0,0,0,0,0,0,61799,0,55015,0,21060,7309,0,0,0,0,0,11976,0,0,0,0, +23527,0,0,0,0,0,0,10347,15942,0,34023,0,0,0,0,4969,0,0,0,0,0,0,0,0,28997,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36454,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19716, +28872,0,0,0,0,0,22152,0,0,0,0,0,0,26342,0,0,0,9764,0,0,0,0,0,0,0,21798,0,0,0,0, +13,6853,32136,0,0,0,0,0,0,0,750,0,0,54502,0,0,0,0,0,0,0,0,0,46183,0,0,625,22854, +0,0,0,0,2061,23588,0,0,11049,56262,0,0,18538,1509,0,0,17258,4453,0,0,0,0,12429,0 +,0,0,0,8102,0,0,0,0,0,0,8074,0,23852,0,0,0,0,0,0,0,0,0,0,0,16136,3428,0,27876,0, +0,0,7332,0,0,0,0,0,28900,0,0,2284,0,0,17573,201,1508,0,0,0,0,0,0,0,0,0,31365, +27688,22565,0,0,0,5159,0,0,0,0,4584,42599,0,0,0,44422,1068,23173,0,0,0,613,0,0,0 +,12645,0,0,0,0,0,27076,6732,0,0,0,3913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,22244,29992,15911,0,0,0,0,0,22982,0,0,0,0,0,0,0,50598,0,0 +,0,0,0,0,5161,1574,0,0,0,0,0,0,0,0,0,19108,0,0,0,35014,0,0,0,25956,29067,0,0,0,0 +,0,0,0,0,0,0,47079,0,0,0,0,0,0,0,0,0,0,1356,61927,0,0,0,64455,2122,64231,0,0, +18763,0,0,0,0,0,0,0,0,0,907,34471,0,0,0,39078,0,0,1995,0,0,0,0,0,0,0,0,0,0,56518 +,0,0,0,0,0,0,0,0,0,0,0,0,822,0,15978,44423,0,0,3112,325,0,0,0,0,0,15397,0,0,0,0, +0,0,0,0,0,0,1193,4294,4968,15559,0,46150,0,0,0,0,0,18917,0,0,0,0,0,0,9928,37543, +0,0,0,0,13097,36999,0,0,0,15430,0,0,8424,29639,0,0,0,0,0,0,0,0,0,0,0,0,0,25734,0 +,0,0,0,0,0,0,0,0,0,0,0,0,40487,0,13284,0,11141,0,0,0,32388,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5298,57702,0,0,0,0,0,0,0,13060,0,0,0,0,0,0, +8233,42278,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36422,0,0,0,7972,0,0,0, +18437,0,0,0,0,7406,0,0,0,9225,0,0,0,0,0,0,0,0,0,13865,47591,18220,53703,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2796,0,0,0,0,0,24940,17223,0,0,0 +,13221,0,0,0,0,0,0,0,0,0,0,15848,0,0,0,0,0,6122,1735,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,16968,18151,0,0,0,0,0,47494,0,0,0,0,0,0,26089,19494,0,0,0,0,0,15494,0,0 +,0,0,0,0,0,0,0,0,28809,0,0,0,0,42727,0,55174,0,0,0,0,0,0,0,0,0,0,0,20485,0,0,0,0 +,0,0,0,0,0,0,0,58598,0,0,0,0,0,0,0,0,0,0,0,0,0,15172,0,0,0,0,0,0,0,0,0,35302,0, +48135,20972,33094,0,0,0,0,0,9765,0,0,0,0,0,0,0,0,0,39559,0,0,13736,6950,0,0,0,0, +23658,8903,0,0,0,0,0,0,0,22662,0,0,0,0,0,58886,7468,0,0,0,0,0,0,0,0,64550,0,0,0, +0,0,47622,0,0,0,50886,0,0,0,0,0,57606,912,0,0,0,0,0,0,0,0,0,1449,0,1169,0,718, +46151,12104,0,0,0,0,0,0,48230,0,0,0,0,0,0,0,0,0,0,1259,0,0,33734,23208,62567,0, +65158,0,0,0,0,0,0,0,0,0,0,28684,59878,0,0,0,0,0,0,0,0,0,0,25769,0,0,0,0,65479,0, +0,0,0,555,22789,0,19748,1769,10246,8680,0,0,0,0,0,0,0,0,0,14250,0,5899,3303,0,0, +0,0,0,0,0,0,21097,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21638,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,10795,0,0,0,16204,0,0,0,0,0,26986,2469,0,14660,0,0,0,0,0,45447, +12234,3494,4555,10566,0,0,0,0,0,0,0,0,0,0,0,0,2801,0,0,0,15755,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,39654,0,0,0,0,0,0,6763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +33574,0,10279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63527,0,0,3912,0,0,7492,0,0,0,35142, +0,0,0,0,0,0,17576,8103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16713,4198,0,0,4782,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,16228,0,0,0,0,25961,20166,0,0,0,10980,0,0,0,0,0,14340, +18922,14567,0,44199,0,0,0,0,0,0,0,18406,0,0,0,0,0,37606,0,0,0,0,0,0,0,0,0,20902, +0,0,0,56358,0,38342,0,0,0,0,9514,36071,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21700,0,0, +5266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1134,0,1453,0,0,0,0,0,3882,0,0,0, +0,0,0,0,0,4004,0,0,0,51910,0,0,0,0,0,23076,4648,0,0,0,31051,25351,0,0,0,22884,0, +0,0,0,0,63975,0,0,2376,16997,0,0,2096,0,0,0,3373,7046,0,0,0,0,0,0,0,30726,0,0,0, +0,20,0,13707,614,0,0,12840,3079,0,0,0,0,0,51046,3729,0,32680,0,0,0,0,0,24008, +62759,0,0,4745,0,0,0,0,0,0,0,0,0,0,0,0,0,2414,0,0,44262,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,24937,0,0,0,0,0,0,0,0,19140,0,13575,0,0,0,0,0,0,0,39110,0,0,0,28036,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,4261,0,0,0,0,5992,0,264,0,0,0,0,0,0,0,13739,0,21928,0, +0,0,0,0,0,0,0,0,0,0,4232,15110,0,0,0,0,0,0,0,0,0,30022,0,0,27977,0,0,0,0,0,24776 +,0,0,0,0,0,2962,0,0,0,0,0,0,26564,22441,0,0,0,0,0,13640,11205,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,19305,1894,0,0,0,0,0,0,0,0,0,0,9389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14119, +5224,135,0,0,0,0,0,0,0,0,0,25796,0,0,0,0,0,0,7470,0,0,0,0,63815,0,55654,0,0, +12584,0,1524,33223,0,0,0,9895,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11624, +0,0,0,5614,0,0,0,0,0,0,0,21320,0,0,53607,0,51206,0,0,0,25863,0,0,0,0,0,0,0,0,0,0 +,0,8964,1740,0,0,0,0,0,0,0,0,13476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7975,0, +0,3306,8134,0,8389,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25766,0,0,0,0,0,0,0,0,0, +52166,0,0,0,0,0,0,0,0,0,0,0,0,0,21477,31112,31652,0,0,0,0,0,0,0,28452,0,0,0, +44231,0,0,0,0,0,0,0,24805,0,0,0,0,0,0,0,0,0,0,12428,6471,0,0,0,0,525,17926,0,0,0 +,26919,0,0,18120,0,0,0,30024,0,0,0,0,0,0,0,0,0,0,29189,0,0,0,43559,0,0,0,0,0,0, +19787,7557,0,59334,0,0,10184,6085,0,44039,0,0,0,0,0,0,0,11175,0,0,0,0,30440, +63110,0,0,0,0,0,0,11017,0,0,0,0,0,0,0,0,27204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,29126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,622,0,5226,2727,0,15588,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4650,0,2675,0,0,32420,0,0,0,61511,0,0, +5419,17829,2123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38183,2640,0,11274,14533,1842,0,0, +42663,12681,3430,0,11845,0,0,0,0,0,0,0,0,0,6533,0,0,0,0,0,54598,0,0,0,0,0,0,0,0, +0,0,0,0,12616,38535,0,0,0,0,0,32229,0,0,0,54279,0,48614,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,31401,0,0,0,0,34310,0,0,0,22788,0,52134,0,0,0,0,0,0,0,23302,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,40678,0,0,0,51463,535,0,0,0,0,15525,0,0,0,0,0,0,4904,869,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63718,0,0,0,0,0,0,0,0,1678,0,692,0,0,0, +0,0,0,0,0,0,26216,0,0,0,0,0,29355,0,0,0,0,25095,0,0,0,0,4335,0,0,0,0,0,14538,0,0 +,0,0,0,0,0,0,0,27273,55014,0,0,0,0,0,27271,0,0,0,0,0,30468,0,0,0,0,18186,0,0,0,0 +,0,14345,0,0,0,2152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58438,21034,0,23339,21318,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,21412,0,0,0,0,0,0,0,12869,0,0,4875,0,0,0,0,29191,0,0,0,0 +,0,0,1640,10247,0,14244,0,0,0,0,9867,0,0,0,0,0,12363,0,0,7653,0,0,4168,2663,0, +4580,0,11143,0,0,0,0,0,0,0,30662,0,0,0,0,0,6724,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,13764,0,0,0,0,0,0,0,0,0,0,0,0,234,6821,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,25639,0,0,0,0,0,0,0,0,0,29958,0,3461,0,0,0,0,0,0,0,0,0,28324, +18795,7013,12746,11655,0,37287,0,0,10953,7718,9705,0,0,0,0,0,0,0,0,0,0,46534,0,0 +,0,0,0,0,0,0,0,0,8137,17988,0,25156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41415,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15784,6918,0,0,0,0,7019,10919,0,0,0, +0,0,0,0,0,0,0,4171,55495,4940,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22440,19333,0,0, +28136,0,6249,21317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53414,0,0,0,57318,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39303,0,0,0,0,0,19940,0,0,0,0,0,0,0,25543,0,0,0 +,0,0,0,0,0,0,0,0,0,2698,3911,0,0,0,26790,0,0,0,0,0,0,32424,0,0,18470,0,0,0,14726 +,29834,0,0,0,0,0,0,0,0,0,0,0,1000,4197,0,0,0,19366,0,0,0,39878,0,0,0,0,2185,8901 +,5288,9829,25000,0,0,0,0,0,0,1062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35622,0, +0,23048,62503,6506,0,0,0,0,0,0,0,13609,10438,0,0,0,0,0,0,0,0,0,0,7723,42119,0,0, +0,0,0,13317,0,0,0,41606,0,27111,0,0,21194,11461,0,0,0,0,26856,58342,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,20940,48710,0,0,0,0,0,0,5227,0,0,0,0,0,10061,31300,0,0,0,19236,0 +,0,0,0,0,30277,13896,0,0,0,12876,13159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,428, +46951,13134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,21668,0,0,0,0,0,0,0,0,0,0,0,0,2249,0,0,0,0,44967,0,0,0,0 +,0,0,3465,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24868,0,0,0,0,0,23909,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,2190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16164,0, +10437,0,0,5263,20102,20938,0,0,0,1192,1030,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,21385,4870,0,0,0,0,0,0,0,0,0,0,0,18596,0,0,0,0,1422,4038,2858,0,0,0,0,0,0,0,0 +,48998,0,0,0,0,0,0,0,0,6508,37350,0,0,0,0,0,0,0,0,17001,39431,0,0,0,0,0,30182,0, +21445,7403,28164,0,51750,0,0,0,62631,0,0,0,0,0,0,0,31206,0,0,0,0,0,0,0,0,0,0,0, +7751,0,0,0,0,0,0,0,0,0,13477,0,0,456,26693,0,0,0,0,0,0,0,0,0,0,0,0,14890,0,0,0,0 +,0,26697,22022,13225,27364,0,0,0,18884,0,0,0,0,0,0,0,0,3659,0,0,0,0,0,0,0,0,0,0, +0,1448,5413,0,0,0,0,0,0,0,0,0,0,0,6340,0,0,18091,18725,0,0,0,0,0,0,0,0,0,0,0,0,0 +,22118,0,0,0,18981,0,0,0,0,0,0,0,0,0,29223,3724,0,0,0,0,43526,0,0,0,25668,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21545,9862,0,22692,32201,60646,0,7300,0,0, +0,58887,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19460,0,0,0,0,0,0,0,0,0,50342,0, +65255,4360,17286,0,0,0,0,0,0,0,28708,0,0,30025,60102,0,0,0,0,0,0,0,0,0,47014,0, +31973,0,9572,0,0,0,0,0,0,0,18501,0,0,0,0,0,14597,0,0,0,53735,5228,22183,0,0,0,0, +0,0,1554,24164,0,0,0,0,0,0,0,0,0,0,0,0,10827,0,0,0,0,34918,0,0,0,0,22252,0,0, +46855,0,0,0,0,0,31207,0,0,10733,0,0,63334,0,0,0,0,8616,50119,20169,12678,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58087,20298,5,0,0,30920,0,0,0,0,0,0,0,296,13190,0 +,30663,0,0,18536,12228,0,6788,0,0,0,0,30890,21796,0,0,526,0,0,0,0,0,0,0,0,0,0,0, +0,20965,0,0,0,0,2161,0,0,0,0,0,0,24038,0,0,0,0,13544,7398,0,0,32522,9605,0,0,0,0 +,3208,7590,0,0,0,43846,0,0,0,38663,0,0,0,0,0,39014,4142,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,6373,0,0,13676,0,0,0,0,30374,21288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22791,0,0,0,0,0,37958,0,0,0,0,0,0,0,0,0,0,9452, +9990,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4841,0,0,0,0,18820,152,0,0,0,0,0,13260,3334,0,0 +,24234,8422,0,17957,0,0,0,10244,0,0,0,0,0,0,0,0,0,0,0,7204,0,0,0,0,1201,26151,0, +31173,0,0,0,0,0,0,0,0,0,0,0,0,0,64838,4203,7525,521,0,18888,37031,0,0,0,0,0,0,0, +0,7082,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4490,12487,0,0,0,0,0,0,0,36615,0,0, +0,14854,0,0,0,0,0,0,0,0,0,0,0,0,6539,13029,9704,38983,0,0,0,0,168,10405,0,0,0,0, +394,25607,0,57063,0,0,0,0,0,0,0,0,0,0,16141,19878,0,0,0,0,0,0,0,0,0,29446,0, +12036,0,0,0,0,0,6982,18572,0,24584,14535,0,0,0,0,0,0,0,0,0,0,16,0,21642,0,0,0,0, +0,0,5254,0,0,0,0,0,0,0,0,1622,0,0,0,0,0,0,0,0,0,0,0,0,0,3853,9126,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,7241,10982,0,0,0,0,0,0,0,0,0,0,0,0,0,0,950,0,0,57990,0,0,277,0 +,0,0,694,36007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42470,0,0,0,0,18409, +51142,0,0,0,0,0,0,0,0,0,28646,0,0,0,30693,0,0,0,0,0,56295,5544,0,0,0,0,8518,8366 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45670,0,0, +9608,33062,0,0,0,0,0,0,0,0,0,0,0,18694,0,0,0,0,1672,23493,0,0,6955,7655,0,36134, +0,0,0,0,0,0,0,0,23432,647,0,0,0,0,0,0,0,0,0,0,0,13382,0,0,0,19621,0,0,0,0,0,0,0, +0,0,20228,0,0,2728,31495,0,0,0,0,29096,22213,235,35495,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,5348,0,0,0,0,8968,1989,0,0,1066,0,0,11492,5965,31367,0,0,0,0,0,0,0,0,0,0,0, +18727,0,0,0,6757,0,0,10765,4646,0,36166,0,27943,0,0,26888,8420,0,0,0,0,0,0,0,0,0 +,29316,0,0,0,0,0,0,0,0,0,0,4975,0,0,0,14762,3111,0,0,0,0,0,43399,0,0,0,0,0,0,0, +18980,0,0,0,0,0,44550,0,0,0,0,4051,0,0,0,0,37734,0,0,0,0,0,5188,0,0,0,0,0,24486, +0,5989,0,41159,0,0,0,0,0,0,0,0,0,20326,0,0,747,6884,0,0,0,41798,0,0,3117,22919,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21032,0,0,0,0,0,0,0,0,9574,0,0,0,0,0,0, +4302,0,0,0,0,0,0,0,0,0,0,0,21068,34630,0,0,0,0,0,64071,0,0,0,0,0,0,26667,7943,0, +0,0,0,0,52934,0,0,17002,0,0,0,0,0,0,20294,0,0,0,0,0,0,0,0,0,27301,18347,7974,0,0 +,0,0,0,0,0,0,16874,0,0,0,0,45414,0,0,0,0,0,0,648,1575,0,0,0,31749,0,0,0,23301,0, +0,0,0,0,0,0,0,0,0,0,0,15912,50535,0,0,0,0,1993,8582,0,0,0,0,0,0,0,38438,0,0,0,0, +0,0,0,0,0,0,0,0,15850,6183,0,0,0,0,3402,0,0,27494,0,0,749,0,0,0,0,0,0,0,26025, +29606,0,0,7144,19622,30504,0,0,0,0,0,0,0,0,21316,0,0,0,0,0,0,0,0,0,21444,0,0, +1289,6919,0,0,0,0,0,0,8299,0,0,0,14090,35655,0,0,0,0,0,0,0,0,2377,15206,0,0,6028 +,4452,0,25508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50310,0,0,0,0,1269,0,0,0,0,0,0,0,0,0 +,0,0,0,51014,0,0,0,0,0,0,0,9286,0,7429,0,0,28393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,16680,452,0,0,0,0,0,23718,0,0,0,31750,0,0,0,0,0,0,0,0,3568,0,0,13604,0,0, +0,0,0,25255,0,0,0,50982,0,56582,0,0,7467,0,0,0,0,30181,0,0,0,0,0,0,0,30564,7208, +7845,0,0,0,0,0,0,7726,0,0,0,0,62182,0,0,0,41094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,22695,0,0,0,0,0,0,17736,0,0,0,0,0,0,0,0,50054,0,0,0,14180,0,0,0,0, +0,0,8974,0,0,0,0,0,0,0,0,23332,0,0,0,11140,0,0,0,0,0,0,0,24262,27145,9540,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,26537,45510,6062,3879,0,0,20233,25991,0,0,17803,0,0,0,0,0, +13962,5508,16971,27013,7437,31494,0,0,0,0,0,0,0,0,0,0,4714,0,0,0,0,0,0,0,0,17189 +,0,0,0,0,0,27492,0,0,26953,0,0,0,0,0,0,0,0,0,0,41319,0,0,0,0,0,0,0,0,0,0,0,47430 +,19596,12549,0,0,0,8390,1006,0,0,0,0,0,0,0,0,0,0,24100,17577,4,0,0,0,0,0,22277,0 +,0,0,0,0,0,0,26692,0,0,0,0,0,24676,0,0,0,0,0,0,0,0,0,0,0,0,0,29477,0,0,0,21573,0 +,0,0,0,0,0,0,0,0,0,9864,14214,0,0,0,0,0,0,25771,5766,0,0,8909,8679,0,0,6861, +16166,0,38887,0,0,0,0,0,0,12392,8678,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52646,1354,2950,0,14692,0,0,10572,49830,0,0,0,0,0,0,0,0,3626,582,0,0,0,55750,0,0 +,0,30885,0,0,0,0,0,0,0,0,0,0,0,0,0,5830,0,0,2090,0,0,0,0,0,0,0,0,0,0,0,0,31142,0 +,0,0,0,0,10503,0,0,18825,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +57158,0,0,30792,63526,0,0,0,9863,16267,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,18824,0,0,0,0,0,0,19653,25388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9292,0,0,0,0,0,0,0,0,0,0,36358,0,0,0,0,0,0,0,0, +0,0,25480,23015,0,0,10440,6725,0,0,0,22436,24265,15109,0,0,0,62311,8906,34534,0, +0,0,0,0,0,15913,1319,0,0,20296,1477,30760,0,25928,16772,0,0,1069,0,0,0,0,0,0,0,0 +,0,0,0,0,17029,0,31909,0,0,0,0,0,0,0,0,0,0,0,41638,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,41542,0,21478,0,0,0,9796,0,0,0,0,0,0,0,0,0,0,22187,58343,0,0,0,24295,0, +0,0,0,0,61831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2833,5829,0,0,0,62855,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,16676,0,0,0,0,0,0,13577,27431,0,0,0,0,21480,10501,0,16932, +0,0,0,0,0,22918,0,48294,2574,2150,0,0,0,0,1897,4518,0,0,0,0,0,0,25064,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47942,0,0,0,0,10990,13767, +25705,37863,21672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43430,1712,0,0,0,0, +18886,0,0,0,0,0,0,0,0,0,0,0,0,0,10535,0,0,0,0,0,0,0,15012,0,0,0,0,0,0,0,0,0,0, +14734,0,0,55782,0,0,30824,10886,0,0,0,0,0,51302,0,0,8012,0,0,0,0,0,20680,6981,0, +57415,11,0,0,18277,0,14564,0,0,0,32390,0,0,0,0,0,0,0,0,0,0,0,0,19113,5158,0, +11172,0,16774,0,0,0,0,0,0,0,0,0,0,0,0,10315,13830,0,0,0,0,0,0,10410,7141,0,0,0,0 +,0,18116,0,0,0,44615,15403,13958,0,1540,14632,19525,24201,19781,0,0,0,24165,0, +38951,0,0,0,0,0,6308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17416,15749,3438,13255,0,0,0,0, +0,0,0,0,0,0,0,32228,0,0,0,0,176,0,0,50566,0,0,0,0,0,0,0,0,0,0,0,0,0,21540,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,58982,0,0,0,0,0,0,0,0,0,5284,0,0,0,0,0,0,25897,28326,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15945,0,0,0,9804,293,0,0,0,0,0,0,0,13988,23082,4677 +,0,0,0,0,0,0,0,0,0,0,0,5670,0,0,0,0,0,0,0,44070,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,6405,0,30692,0,0,0,61702,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,45926,0,15398,0,0,0,0,0,0,4554,2692,0,0,0,0,0,32485,0,0,0,10084,0,0,0,0,0,0, +24297,0,0,0,0,0,0,0,0,22790,0,0,0,55110,0,0,0,0,0,0,0,0,0,0,0,0,7112,0,31530, +45255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40743,17226,22599,0, +0,0,0,0,0,0,0,3695,0,0,0,0,0,0,0,0,0,0,56999,0,0,0,0,0,13799,3114,21287,1353, +7591,0,0,0,8455,0,0,6824,0,0,0,0,0,0,0,14569,0,0,0,29000,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,19979,0,18376,0,0,0,0,0,0,0,0,0,0,0,0,11332,0,0,0,49863,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,2191,7527,23148,58022,0,0,0,30631,0,26565,0,0,0,0,0,0,0,0,0,0,0,0,754 +,0,0,15877,0,0,0,0,0,0,0,17510,7657,2821,0,0,0,0,0,0,0,0,0,41927,0,0,0,0,0,0,0,0 +,2569,34439,0,0,3790,0,0,0,15339,8775,0,0,0,0,0,0,0,0,0,0,0,15908,0,0,21419,8359 +,0,0,0,0,424,0,0,0,0,0,0,25318,8008,20551,0,0,0,45735,30058,30372,0,0,0,0,0,0,0, +0,0,0,0,0,0,26180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31432,10567,0,0,0,0, +17450,0,0,0,0,0,0,30310,0,38022,0,0,0,0,0,28932,0,0,0,0,0,43910,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,22180,12075,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22247,0,0,22826, +12359,0,0,0,0,4105,50407,0,0,0,0,0,0,13581,28583,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,28936,0,0,0,0,0,17673,10310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,905,57862, +1580,0,0,0,0,58630,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13479,0,0, +14153,13286,0,0,9259,0,0,0,0,0,6606,3524,0,0,0,0,0,6567,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,631,49255,0,0,0,0,0,42886,0,38215,0,0,0,0,0,0,0,0,17580, +0,0,0,0,0,0,0,0,55046,0,0,0,0,0,0,0,0,0,10213,0,0,0,0,3604,37767,0,0,0,0,0,0,0,0 +,0,0,0,30950,0,0,0,0,0,0,0,0,0,62087,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23528,0 +,0,0,0,0,0,0,0,0,28715,4229,0,0,0,0,0,0,0,0,0,0,1226,26820,0,0,0,12133,6984,261, +21130,32548,0,0,0,0,0,0,3565,12390,20713,28071,0,0,1706,25287,0,0,0,0,0,0,0,0, +14670,0,0,0,0,0,0,30534,0,0,0,12615,0,43750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28228, +0,0,0,0,0,0,0,45095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1224,3975,10954,6375,0,0,0,0 +,0,0,0,0,0,0,23180,20100,0,0,0,0,25736,8519,0,0,0,0,0,6663,0,2534,0,0,0,0,0,0,0, +0,23720,0,0,0,0,0,0,0,0,0,0,19398,0,47814,26281,49702,0,0,4332,12965,0,0,5704, +3206,0,0,0,0,0,0,0,0,0,0,0,0,0,15396,0,0,0,44102,0,0,0,0,0,0,0,0,0,0,0,0,0,25317 +,1064,39271,27433,0,14952,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14308,0,0,0,0,0,0,2763 +,4100,0,0,0,0,0,0,18792,0,0,0,22154,32583,0,6244,0,0,0,0,0,0,0,49478,0,0,0,0,0,0 +,0,0,0,0,0,21894,0,0,11048,0,0,0,0,0,0,11685,0,53862,0,0,15114,0,13870,0,0,0,0,0 +,0,0,919,0,0,0,31916,0,22570,101,0,0,0,0,0,0,0,0,0,7333,0,0,0,0,3272,0,0,0,0, +27718,32712,0,0,0,0,0,0,0,0,0,1782,0,3688,0,0,0,0,29862,0,0,0,0,0,0,0,22469,0,0, +0,0,0,0,0,55302,850,15492,0,0,0,5927,19786,13350,0,25702,0,0,0,0,0,0,0,0,0,0,0, +40390,0,0,0,0,0,0,0,0,0,0,0,0,0,20260,0,0,0,0,0,0,0,0,0,0,0,0,0,15335,8394,0,0,0 +,0,0,0,26566,0,0,0,0,843,2245,0,0,0,0,0,0,0,0,6959,0,20488,1638,0,0,11533,50759, +0,0,0,0,0,20871,0,0,0,0,0,24519,0,0,0,0,9544,23591,0,0,0,0,0,0,0,0,0,0,20969, +7109,29001,0,0,32422,31720,64294,0,0,0,0,16106,0,0,0,6930,4933,0,0,0,22917,0, +27015,0,0,0,0,19880,8070,0,0,0,0,23945,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3310,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18439,0,0,0,20742,0,0,0,10597,0,0,0,0,0,0, +0,0,0,0,0,0,20236,0,0,0,16584,3429,0,0,0,0,0,0,0,0,27241,0,0,0,0,16132,0,0,0,0,0 +,0,0,0,0,0,0,0,244,28261,0,0,0,0,0,0,0,29509,0,0,0,0,0,0,0,0,2921,31781,0,0,0,0, +0,0,6408,4196,344,0,0,0,0,0,0,0,0,0,0,0,0,0,11689,45863,0,0,0,0,906,3301,0,0, +25544,32421,0,0,0,0,0,0,0,0,1260,61607,0,27302,0,0,8682,16614,0,0,0,0,10830,0,0, +9604,15049,13413,0,0,0,0,0,0,26761,0,0,0,0,0,0,61990,0,0,0,0,0,12580,0,0,11432,0 +,0,0,0,0,22507,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12389,0,0,0,0,0,0, +2408,22661,14507,43239,0,9700,0,0,24714,0,0,0,0,0,0,0,0,23972,0,0,0,0,0,0,0,0,0, +0,0,0,0,34086,0,0,22955,7238,0,0,0,0,0,28485,13806,20038,0,0,0,0,22602,0,0,0, +1645,22340,0,0,0,0,0,0,0,0,0,0,0,26502,0,0,554,0,0,0,0,61735,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,2694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,883,27879,15948,0,3242,57382,0,0 +,0,0,0,0,13930,0,0,0,0,0,30922,0,4137,52615,0,0,0,0,0,0,0,0,0,0,0,0,0,31911, +16072,0,0,0,0,0,0,0,0,0,0,0,0,26340,0,61671,0,0,0,0,3145,56199,0,0,0,0,0,0,0,0,0 +,0,0,0,280,0,5131,33479,0,15751,0,0,0,0,0,0,4136,1446,0,0,0,0,0,0,11304,17863,0, +0,0,0,0,25125,0,0,0,36646,6057,0,0,0,855,11301,0,0,0,0,0,64774,0,0,0,19397,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,1040,27367,0,0,0,0,0,0,0,0,0,0,0,0,0,64358,0,0,178, +132,0,0,14763,24455,0,0,0,46374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46246,0,0,0,37382, +0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8166,0,0,6921,0,0,0,9163,0,0,0,119, +0,0,0,23146,17156,0,0,0,0,0,9127,0,0,0,17927,0,0,0,0,0,22084,0,0,0,0,0,39879,0,0 +,2035,0,1067,0,0,0,0,0,16652,59591,0,0,0,0,0,0,0,0,0,0,0,0,20171,0,0,0,0,17733,0 +,0,0,0,0,32037,0,0,0,0,0,14277,0,0,0,0,0,0,0,42022,0,0,26793,20358,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,8907,0,0,0,0,0,0,0,0,27780,0,0,0,0,32330,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,39399,0,9732,0,16199,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,854,0,2984,45063,25418,26980,22539,0,9133,3653,15528,28743,4649,0,616, +65127,0,0,0,61863,0,0,0,0,0,0,0,55303,0,0,0,0,0,0,0,0,23880,0,0,0,0,0,0,0,31848, +62854,0,0,0,0,0,0,0,0,0,0,0,49606,0,27974,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,32580,0,0,0,26052,4043,0,0,40454,0,0,26056,30565,0,0,0,0,0,0,0,31398,0,0,0,0 +,0,0,0,0,29288,1797,0,0,3220,0,0,0,0,0,0,0,0,0,20427,0,0,0,0,23621,0,0,0,0,0,0,0 +,0,0,24261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35591,0,0,6862,0,0,0,4265,0,6285, +5383,0,0,0,0,0,36870,0,39847,0,0,17224,5414,27882,58118,0,0,13224,4262,0,0,0, +31302,0,0,1388,2982,11881,0,0,0,0,0,0,16837,809,0,24140,10724,0,0,0,0,5835,0,0,0 +,0,0,0,0,0,0,0,0,1256,19237,0,0,0,0,0,0,0,5796,11848,0,0,52870,11464,0,0,0,0,0,0 +,0,0,0,5645,9158,0,25223,0,0,0,0,0,39142,24968,8135,32104,28678,0,0,0,46311,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23820,0,0,0,0,0,4050,0,1323,25220,0,0,0,20133,0, +0,0,0,0,0,0,0,0,0,0,9381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,13444,1198,60806,0,0,0,0,17356,50247,30632,0,0,0,0,0,0,0,11944, +999,0,0,0,0,4010,10404,0,0,0,0,0,0,10346,0,0,49510,0,0,0,0,0,0,0,0,0,0,0,0,0, +38919,0,0,0,0,0,0,6351,60966,20137,487,0,0,0,0,0,0,655,2406,17387,43303,0,0,0, +17063,0,0,213,0,0,0,0,0,0,17221,0,0,0,0,0,0,0,0,0,0,0,10820,0,0,0,0,369,6,0,0, +9098,21093,0,31653,0,0,0,0,0,0,0,0,0,27143,0,0,16234,0,0,0,0,0,0,0,0,6020,31723, +28293,0,0,0,0,1936,30695,0,0,0,0,0,52902,0,0,29512,10791,0,20420,0,0,16010,0,0,0 +,0,0,0,0,0,0,0,0,5324,0,0,0,0,0,0,0,0,0,0,0,0,13383,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,24328,0,0,0,0,0,0,40870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,24648,0,0,0,0,0,0,0,7786,2852,0,0,0,0,0,0,0,0,0,44678,0,17925,0,0,105,53062, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18762,0,0,40679,0,0,0,16165,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,20390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62310,1322, +14247,0,0,0,0,0,0,0,0,1832,6052,0,0,11882,0,0,0,0,17668,0,28262,0,29542,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28007,0,0,0,57223, +1585,0,0,0,0,0,0,0,0,0,0,0,21162,0,0,62247,0,0,0,0,0,25414,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,36326,0,0,0,23845,0,0,0,0,0,0,0,2693,0,0,0,0,0,0,0, +13125,0,31236,0,0,0,0,0,22502,0,0,0,0,0,0,5994,10309,0,0,0,7269,0,0,0,0,17929,0, +1011,44647,0,0,0,0,0,14919,0,0,0,0,20586,5350,0,0,0,45702,0,13189,0,0,0,0,0,0,0, +0,0,35782,17992,0,0,0,0,0,8203,0,0,0,0,0,0,56678,0,0,0,0,0,38087,4233,0,2127,0,0 +,0,0,0,0,0,0,0,0,10148,0,0,0,2021,0,0,0,0,0,0,0,47206,0,0,0,0,0,0,0,9220,0,0,0,0 +,19465,0,0,0,0,0,0,0,0,39206,0,38055,0,0,0,0,0,0,0,46982,0,0,0,0,0,22054,3850,0, +0,0,0,0,0,0,55,0,10542,0,0,0,0,7239,0,0,0,0,0,59367,0,0,14761,0,0,0,0,43079,0,0, +0,0,0,2726,0,0,9582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37478,0, +0,0,31364,0,0,0,0,0,0,0,0,20393,8933,0,0,0,0,0,9380,0,0,0,0,16905,549,0,0,0,0, +182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1558,0,0,0,0,0,0,0,19242,0 +,0,0,0,0,0,24933,0,6276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42310,23595, +24068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13191,6158,2567,0,0,268,47047,0,0,0,0,0,0,0, +0,0,27940,0,0,0,0,0,26726,0,0,0,0,8200,1222,31562,0,0,0,0,0,0,0,0,0,2922,8231, +8904,29157,0,0,0,0,0,0,0,0,23976,4836,0,0,0,0,0,0,0,0,0,0,0,0,31658,0,0,31685,0, +0,2889,6213,0,0,0,0,0,13605,0,0,0,0,0,24772,0,0,0,0,0,0,0,0,0,0,20684,26468, +24075,0,0,0,21193,0,715,679,0,0,0,0,0,0,3050,7654,0,0,0,13798,0,0,0,0,15,27973,0 +,0,8491,2086,0,0,0,43206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60391,0,0,0,0,0,0 +,0,25892,0,22276,0,34374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20165,0,0,25672,0 +,0,0,1811,24839,0,31044,0,0,25513,0,0,0,0,0,12810,0,0,62438,0,0,1325,0,364,3782, +0,0,0,0,0,0,0,0,8042,19687,0,0,0,33415,0,0,0,0,0,0,0,0,0,0,0,7205,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,11844,0,0,0,0,3341,1543,6698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,29766,0,0,0,0,0,0,0,0,0,0,0,41158,0,24294,0,3844,12329, +0,0,0,13738,0,0,0,0,0,0,0,0,26245,0,0,0,0,0,0,6378,0,343,4838,0,0,0,24358,11688, +0,0,0,0,0,0,0,0,0,1489,34759,0,0,0,0,363,51974,1878,11013,0,0,32265,59782,0,0,0, +28421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14089,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,29257,61222,0,30661,0,28327,0,0,0,0,0,0,0,0,0,0,0,0,0, +27108,8843,0,9673,2084,0,0,0,16327,0,48455,0,0,0,0,0,0,4876,9316,0,0,0,0,0,0,0,0 +,0,0,0,0,9035,18852,0,0,0,0,0,0,0,0,0,0,0,0,0,4164,0,0,14827,1349,0,0,0,0,0, +11909,0,0,0,0,0,0,0,0,0,21765,0,0,0,0,0,0,0,0,31272,63910,0,0,0,25924,0,0,0,0,0, +0,0,0,0,44487,0,0,0,20612,0,0,27754,31428,0,0,0,0,0,0,0,17287,0,3943,0,0,0,63302 +,0,0,0,0,25256,19942,0,55142,0,39046,0,0,0,0,0,0,0,15367,0,0,0,0,0,0,0,0,0,0,0, +28422,0,0,0,0,0,0,0,0,0,0,0,0,9576,63847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,25226,5734,0,0,0,0,0,0,13801,4997,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,43942,1270,2566,6284,0,0,16230,0,0,0,20678,0,0,0,0,0,38855,0,0,0,0, +29643,0,0,0,41,3655,0,0,0,0,0,14276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,15686,0,0,0,15718,0,50694,0,0,16232,8007,0,0,0,5060, +329,11591,51,0,0,0,0,0,0,0,0,0,13065,7302,27530,15366,0,24934,0,0,0,17828,0,0, +4552,6311,0,0,0,0,0,0,0,0,0,0,0,47686,368,12103,10122,33830,0,0,599,18534,9579, +49479,0,5668,0,0,0,0,0,0,0,0,0,13157,0,0,0,0,23274,14055,0,0,0,0,0,48903,0,0,0,0 +,0,0,1871,0,15434,0,0,0,16174,62470,0,0,0,0,0,0,0,0,0,0,0,7749,0,0,0,0,0,0,0, +30501,0,0,0,0,25675,0,0,0,0,0,0,0,0,0,0,9285,0,0,25323,1669,0,0,0,0,0,0,0,0,0,0, +0,3588,0,0,0,0,0,32902,0,0,4426,0,0,0,0,57959,0,0,0,0,0,0,29898,58278,0,0,0,0, +11880,1220,0,0,0,41479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23141,0,0,0,0,0,0,0,0,0,0,0 +,0,0,42566,0,0,0,0,0,0,0,40167,9484,3493,0,0,0,0,0,21126,0,0,0,0,8649,18918,0,0, +0,0,0,0,0,34886,2601,0,0,0,0,12518,0,0,0,0,7976,10311,0,0,0,0,0,0,0,45190,0,0,0, +0,0,0,0,0,0,0,16842,20229,0,0,0,0,0,0,7528,4614,0,0,0,0,0,30086,0,0,0,1671,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,9896,6277,0,0,0,0,0,61191,0,41287,0,21956,0,0,20010,0,0,0 +,0,0,0,0,0,0,0,0,13195,0,0,0,0,1381,0,0,0,0,365,30951,24268,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,7044,0,0,0,0,0,0,0,0,0,0,27944,359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,28487,0,0,77,0,0,0,0,0,0,0,0,56775,12586,8421,0,0,0,0,0,0,26185,14599,0,0, +8040,5702,12585,3109,0,0,0,0,0,21574,5388,0,0,0,0,0,0,0,5106,52454,0,0,0,0,0,0,0 +,0,1907,29895,0,6116,0,0,0,0,11081,5285,0,28069,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4104 +,0,0,0,0,0,0,41511,0,0,0,0,0,0,5262,0,0,0,503,4231,7720,34343,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7304,10374,1718,0,0,29127,0,0,0,0,0,0,0,0,23497, +22567,6952,2340,0,0,0,0,0,0,0,0,20360,12453,0,45094,0,0,0,0,0,28582,0,0,0,0,680, +0,0,0,0,0,0,0,0,0,0,0,0,0,23084,0,0,0,30696,0,0,0,0,45862,0,0,0,0,0,0,0,0,0,0,0, +0,5580,6053,0,0,0,0,0,0,0,0,0,0,712,70,0,0,26091,11335,0,0,0,0,13612,0,13160, +1926,435,51559,0,0,0,0,0,0,0,0,0,0,0,0,0,47302,19083,0,0,12742,0,1607,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,6155,37095,0,0,0,0,0,18948,7146,0,0,0,0,0,0,0,7848, +2055,0,0,0,0,8910,0,19336,0,0,48070,8490,0,0,0,0,0,0,0,9932,56423,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,4133,0,0,0,0,0,0,0,0,0,43398,0,0,0,0,0,0,0,0,16173,0,0,0,0,0 +,0,0,32011,0,0,30918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26854,0,0,0,0,0,0,0,0,0,0,0,0 +,0,20389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18889,0,0,0,0,8965,0,0,0,44358,0,0,0,8997,0 +,34055,0,0,0,0,0,29350,0,0,501,17767,0,0,32457,60262,0,0,0,30886,0,0,3757,1063,0 +,0,0,25637,0,0,0,0,0,28068,0,26374,0,0,0,0,0,0,0,0,0,0,0,11684,0,0,0,0,0,0,24779 +,229,0,13766,0,0,7402,11525,0,0,0,0,0,0,0,0,26313,23686,0,0,29736,47527,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27268,0,0,0,0,553,0,0,0,0,0,0,32038,0,0,0,0,1135, +26596,0,0,12300,14631,0,0,0,43238,0,871,0,0,31496,0,8457,17669,0,12836,0,0,0, +22726,0,38758,0,0,375,6564,0,0,0,0,0,0,0,0,0,0,0,0,170,18535,0,22948,0,0,32360,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,25764,0,0,0,0,0,0,0,0,0,0,0,15652,0,0,0,32774,0,0,0,0 +,0,0,0,0,0,28551,0,0,0,0,0,0,0,0,0,0,0,0,15145,0,0,0,21100,27654,0,0,0,0,0,0, +4874,26215,0,1639,0,0,0,0,0,0,0,0,0,0,4169,0,0,0,0,0,7336,0,0,0,0,21572,0,0,0,0, +0,0,0,0,0,24644,1675,2533,0,0,0,53318,0,13094,0,0,0,0,0,0,0,6246,0,22020,0,0,0,0 +,0,0,0,0,0,0,0,28453,5576,5124,0,0,0,0,0,0,0,0,0,0,0,0,0,27910,0,29382,18216, +8583,0,0,0,39174,0,43558,0,0,0,0,0,0,0,0,0,11973,0,0,0,0,0,23397,0,0,0,0,6091,0, +0,0,0,0,0,0,6474,16197,14217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,26728,0,567,48839,0,0,0,0,0,15271,0,0,31818,43974,2450,0,0,0,0,0,0,0, +11368,9191,0,44454,0,0,0,0,0,0,14568,12293,0,0,0,8453,0,0,0,0,0,0,0,0,0,0,0,0, +32040,0,0,0,0,0,0,0,0,0,0,0,0,902,0,0,0,27236,5612,11495,0,0,0,0,0,0,0,0,9194, +23684,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27430,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26217,44870,0,0,0,0,0,0,5581,7173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20968,18340,0,0,0,0,0,0,0,0,4107,11239 +,0,0,0,0,0,0,0,0,0,0,0,29381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21990,0,0,0,0 +,0,0,0,0,0,48806,0,0,0,32292,0,0,0,0,0,0,0,10884,0,0,0,0,0,0,0,0,0,0,27562,0, +5643,0,0,0,0,0,0,0,0,0,3089,31525,0,19684,0,0,0,0,0,0,0,61415,0,0,0,0,0,36198,0, +0,0,0,0,0,0,7908,0,0,0,0,872,743,0,0,0,0,0,0,0,0,1229,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,32484,0,0,0,0,0,34822,0,0,0,0,0,50726,0,0,0,0,7274,0,0,0,15304, +11526,0,0,0,3047,0,0,0,0,0,0,22376,0,0,0,846,0,0,0,0,35815,0,0,0,23652,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,23721,2148,0,0,0,0,0,0,14856,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,1358,0,3082,0,0,0,848,10949,0,0,0,0,0,0,6504,0,0,14372,0,0,0,0,0,0 +,0,0,0,0,8201,9958,0,0,0,0,0,0,24266,0,0,0,0,0,0,0,0,26469,0,0,0,0,18604,2053,0, +33511,0,0,0,0,0,9222,0,0,0,0,0,44006,0,0,0,0,0,0,0,0,0,0,0,41895,0,0,0,0,0,0,0,0 +,12044,390,0,0,0,0,0,4935,0,48646,0,56102,3052,16070,0,0,0,0,0,0,0,8612,9320, +38311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,500,0,0,0,0,42918,0, +32550,0,0,0,0,0,0,0,0,27434,57926,17064,0,0,46502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,26760,6756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,624,0,5000,0,0,0,0,32293,0, +0,0,0,0,0,0,0,0,0,0,0,0,26246,0,0,0,0,0,0,0,0,23,7301,0,0,0,36199,0,40838,0,0,0, +0,0,0,0,0,0,0,0,0,27178,57350,0,0,12457,9317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16810,0,0,0,14510,0,0,0,0,21319,0,0,0,13508,17, +11365,0,0,0,0,5291,0,8329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27685,0,0,0,0,0,0,0, +52006,0,0,0,7493,0,44263,0,0,0,0,0,0,0,0,9800,0,0,0,25676,61478,0,0,0,0,0,0,5773 +,0,0,0,0,41991,26057,0,0,0,0,0,0,0,0,0,0,22629,0,0,0,47783,362,1959,23468,0,0,0, +10921,0,0,0,3150,0,0,0,0,0,0,0,0,0,0,0,32456,0,0,0,0,0,0,0,4559,3270,0,0,983,0,0 +,26343,0,33446,0,0,0,61767,0,48390,0,0,0,0,0,0,0,2790,0,39782,7849,0,0,0,0,0,0,0 +,1544,2183,0,0,0,0,0,0,0,0,4040,2471,20009,30020,0,0,11242,0,0,0,5578,53382,0, +22631,0,0,0,0,0,0,0,0,0,0,0,12901,0,0,0,0,0,0,0,0,0,0,0,0,215,0,0,9030,0,0,0,0,0 +,0,265,1412,0,0,11626,3687,0,0,0,0,0,0,0,0,0,0,0,0,17449,24359,0,0,26729,40134,0 +,0,0,0,29768,61958,0,0,0,0,0,0,0,0,20908,0,0,0,0,0,11016,0,0,47462,21547,5926,0, +0,14728,2983,24104,15301,0,0,0,0,0,32645,0,0,0,0,0,0,0,3300,0,0,0,15972,0,0,0,0, +0,0,6634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3076,0,30983,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,106,0,0,0,0,12775,0,0,0,0,7177,18022,0,0,0,0,0,22534,0,0,0,0,0,0,0,0,0,0,0, +49894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27560,0,0,0,0,30278,10668,23877,0, +0,0,0,0,0,0,29124,0,0,0,0,0,0,0,0,0,0,0,0,0,20870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,44582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48454,0,0,0,0,6442,0,16330,22951,0,0 +,16904,0,0,0,0,644,0,0,0,40038,0,0,0,37222,0,0,0,9830,0,0,0,0,0,34919,0,0,0,0,0, +0,0,0,0,0,0,13733,0,0,0,28196,0,0,0,0,0,19876,0,0,0,0,0,0,0,23558,0,11142,0, +27781,0,0,0,0,13864,0,0,0,24682,47847,0,0,0,0,6890,0,0,0,0,0,3981,0,0,0,0,0,0,0, +0,0,0,0,1772,0,0,0,0,0,0,0,3603,1991,0,27396,8652,0,18312,0,0,0,0,30054,0,0,0,0, +0,0,0,11270,0,0,0,0,0,0,0,0,0,20708,0,0,0,0,338,0,0,0,0,0,0,0,7050,0,0,0,0,0,0,0 +,0,0,0,0,0,0,14862,0,0,3492,0,0,0,55878,0,0,0,16486,0,0,0,18119,0,0,0,0,0,0,2154 +,1284,0,0,23113,31751,0,0,29547,0,0,0,0,0,0,36647,0,0,0,0,0,0,0,0,0,0,0,18183,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,7913,0,0,0,0,20644,0,0,10508,0,0,0,0,0,0,0,0,0,0,0,0, +43622,0,0,0,0,0,40966,0,0,0,0,0,0,0,0,0,0,246,901,11529,5191,0,0,0,0,0,0,0,0,0,0 +,0,24454,0,0,26665,27590,0,27397,0,0,0,0,0,0,23562,2949,0,0,30344,62214,0,47334, +2026,18885,0,0,0,48678,0,0,0,22694,0,0,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,15465,0,0,0,0,38822,0,0,0,0,945,32708,0,54791,0,14918,0,0,0,0,0,0, +0,0,0,0,0,0,0,23396,0,0,0,0,0,0,5486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7722,0,0, +0,0,0,0,0,0,0,0,0,30856,64166,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35206,0,0,0,30535,0, +0,0,0,0,0,0,0,0,62663,0,0,1096,17574,31820,0,0,14375,4402,27207,0,0,21448,4676,0 +,0,0,0,16585,5094,0,0,0,0,0,0,0,0,4845,0,0,32870,0,0,0,0,0,0,0,0,0,0,31466,0,0,0 +,0,31783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4522,16039,0,0,0,0,0,0,0,0, +0,14469,0,0,0,0,0,0,0,0,0,0,7464,4773,0,0,0,0,0,0,0,0,18636,0,0,0,25640,0,0,0,0, +0,0,2244,0,0,11818,0,1168,0,0,0,0,0,0,0,6540,23079,13770,7719,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58150,528, +34502,32682,0,0,12997,0,0,0,0,0,2214,0,0,0,0,0,58567,0,0,0,26375,0,0,0,0,0,0,0,0 +,0,26437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,32005,22952,59047,0,13543,0,0,0,0,0,0,0,0,16328,0,0,33542,0,0,0,19782,0,0,0, +16644,0,0,0,0,31688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10276,0,0,0, +0,0,0,0,36327,0,0,29480,0,0,0,777,12709,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27398,0,0, +0,4455,9037,31397,0,9221,0,0,0,60487,20840,1796,0,0,0,0,0,0,0,0,8364,0,0,0,0,0,0 +,0,0,0,0,0,19752,44902,0,38566,0,0,18027,0,0,0,0,0,0,0,0,10662,0,0,0,0,0,11812,0 +,0,0,0,0,0,0,0,0,19910,0,0,0,45030,0,0,0,0,0,0,0,0,0,0,0,0,19978,5127,0,11620,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,19817,0,5579,9350,0,0,21002,19718,0,0,0,21926,0,0,0,0,0,0,0,0,0,0,0,0,0,20711, +0,0,0,20197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40550,0,0,0,57510,0,0,0,53895, +0,0,15017,0,17000,39367,2347,0,0,0,0,0,0,0,0,0,8588,0,0,0,0,0,3273,17862,3498, +2085,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19048,0,0,0,0,0,11978,58631,0,0,0,0 +,0,0,523,0,12969,198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28197,0,47846,0,0,0,0,0,0 +,0,0,0,4549,0,0,0,0,0,0,0,0,0,0,687,14917,748,8229,0,0,0,0,0,0,2476,12935,0,0,0, +0,0,0,22792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27528,59142,0,0,20876,20134,0,0,0, +0,440,12068,0,58951,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48038,0,0,0,60999,0,0,0,0, +0,0,0,0,0,0,0,0,0,15716,7498,5476,0,0,0,0,20202,37959,0,0,0,0,0,0,0,0,0,0,0,0, +29801,0,5451,0,0,0,0,0,0,0,0,0,0,50790,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24485,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13573,0,0,22856,0,0,0,0,21927,0,0,0,0,0 +,0,9130,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,0,0,0,2282,583,0,0,0,0,0,0,0,0,0,0,3726, +26503,0,0,0,0,0,0,9258,0,0,0,0,0,0,0,0,21604,0,0,0,45574,0,0,0,0,0,20710,0,0,0, +42694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1163,6694,0,0,0,0,0,0,0,10948,0,0,0,29700,0,0, +0,0,0,58823,3796,27399,20939,10180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +19,29287,28649,14534,0,0,16428,45607,0,0,0,0,0,0,25322,0,4908,0,0,0,0,0,0,25476, +29097,14246,11053,0,0,0,0,0,0,0,0,18502,0,0,0,44390,0,0,0,17765,0,0,0,0,0,0, +24520,0,0,0,0,0,0,0,0,0,0,17319,0,0,0,0,0,0,0,0,0,0,0,0,0,28166,0,0,0,0,0,48198, +0,0,31467,0,24585,0,0,0,0,18692,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23596,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,7236,968,13637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14791,0,0,0,12324,0,12741,0,0,0 +,0,0,0,0,0,0,11108,0,0,0,0,4009,40295,20616,4357,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +15015,0,0,0,0,0,43751,0,0,0,0,0,0,0,0,0,0,0,23013,0,0,0,0,0,0,0,0,0,0,0,0,0, +45542,0,0,0,0,0,0,0,0,0,23974,0,0,0,0,17480,20647,0,0,0,0,0,0,8876,0,0,40806,0,0 +,0,0,0,0,0,14502,17160,17764,0,0,31594,35431,0,0,2890,0,0,0,0,0,0,0,0,27524,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8228,0,56583,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,34278,0,0,0,0,0,0,0,0,0,0,0,0,0,2662,0,26724,0,0,0,0,0,0,0,64198,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3049, +54983,0,0,0,0,0,0,0,837,0,17604,0,0,0,0,0,28838,0,0,0,0,0,0,26312,0,0,3910,0,0,0 +,25830,0,0,0,0,0,8391,0,19845,19240,1092,0,0,5449,0,0,0,0,17188,0,0,0,0,0,0,0,0, +0,10629,0,0,6671,61094,5832,8358,0,0,0,55078,0,0,0,0,0,29860,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,51494,0,28647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25989,0,0,30153,61318 +,0,0,0,0,0,0,0,24903,0,0,0,4388,0,42054,0,0,0,0,0,0,0,53158,0,0,0,0,0,0,0,50918, +0,0,0,0,0,0,26251,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5929,2853,0,37126, +7372,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2027,934,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,55686,0,0,5672,5447,0,62758,0,0,0,0,0,0,0,0,0,0,0,0,2923,0,556,1415, +0,0,0,0,0,0,0,0,0,8645,0,9477,0,0,0,0,0,0,0,48742,0,0,0,0,0,0,0,0,0,0,24235,228, +0,0,0,0,0,0,0,0,0,0,16970,18823,0,0,0,0,0,0,0,0,0,25158,0,0,0,0,0,18567,20072, +2823,14313,1830,0,0,0,0,0,0,0,0,27048,23526,0,0,0,0,0,997,492,0,14730,16677,396, +13574,0,0,0,41671,0,0,0,0,0,0,0,19045,0,0,0,421,17545,3110,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,47111,14475,56551,0,0,0,0,0,0,0,0,0,0,3697,0,0,0,0,0,0,49382,0,35559,0, +0,0,0,40,0,11496,15621,0,8550,0,0,0,63462,0,0,0,0,0,0,0,36966,0,50406,0,46022, +1001,0,0,12069,3249,0,0,0,0,0,0,0,0,0,0,0,0,0,15241,0,0,0,0,0,0,0,0,64743,0,0,0, +0,0,58759,0,0,0,0,1136,26981,0,0,0,0,0,0,0,17732,0,0,0,17157,20011,6629,0,43879, +0,0,0,13572,25128,10759,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28676,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,875,24007,0,0,0,0,7628,0,0,0,0,0,12268,0,0,0,0,0,0,0,0,19300 +,23210,356,0,0,0,0,0,0,0,0,0,15236,0,0,0,0,0,49670,0,0,0,0,0,0,0,21764,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,13931,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45799,0,0,436,3589, +0,0,11402,0,0,0,0,0,0,0,0,0,0,62822,0,0,0,39814,588,0,0,0,0,0,0,27750,0,0,0,0,0, +0,1609,22660,2346,18951,0,16068,0,0,0,0,0,0,5162,11110,0,0,0,0,15048,1060,0,7879 +,18280,326,0,14886,19656,0,7594,0,0,0,0,0,781,581,0,16198,0,0,0,0,0,0,1078,9892, +0,0,0,0,0,0,0,0,0,0,4489,0,0,0,0,33798,0,0,0,54534,0,0,0,0,0,0,0,33158,0,0,0,0,0 +,0,0,0,0,42086,13834,2757,8456,16773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3434,0,0,0, +0,0,3946,29668,0,0,30634,36775,0,0,0,0,0,24901,0,16069,6280,0,0,0,0,41990,0,0,0, +0,0,0,0,27365,0,0,0,0,0,0,0,0,0,0,1450,44807,0,0,0,32100,0,0,0,0,0,35110,0,0,0,0 +,0,0,0,0,17448,19591,0,0,0,0,0,0,0,0,0,0,0,0,1739,0,0,0,0,5511,0,0,0,32934,0,0,0 +,0,0,0,0,0,0,18180,0,0,0,23428,19754,0,0,31174,3021,31655,23464,0,0,0,0,0,0, +57255,0,0,21292,64487,0,0,0,0,0,0,25802,9189,0,0,0,0,0,49254,0,0,0,0,0,0,0,0,0,0 +,5837,50023,0,0,0,0,0,0,0,0,0,15495,0,0,0,0,0,51942,0,0,0,0,0,0,0,0,28104,58662, +0,50214,0,0,0,0,0,0,0,0,2988,0,22888,31812,0,0,0,0,0,2020,0,18916,0,0,0,0,0,0,0, +23973,0,0,0,0,17516,11717,0,0,0,55911,0,0,0,0,0,0,0,2855,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,46822,0,24710,28586,0,0,0,1556,0,0,30117,0,0,22090,57127,3403,14087,0 +,0,0,0,0,0,0,0,0,0,1041,0,10633,6916,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27269,0,0,13322,18055,0,29380,0,56454,0,0,120 +,0,0,8773,0,0,0,0,16040,0,0,0,0,0,0,0,27242,23781,0,1572,0,28134,0,0,1512,0,0,0, +0,0,0,27684,0,38470,0,0,0,0,0,0,1513,8709,0,0,0,0,0,0,0,0,0,0,0,46566,0,0,0,0, +28521,61159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24356,0,0,0,0,0,0,0,0,0,13028,0, +5863,0,0,15693,0,0,0,0,0,0,0,1131,23398,0,0,0,0,0,0,0,26212,0,0,0,0,0,0,0,0,0,0, +0,0,0,18404,0,0,0,0,1457,26183,0,0,2475,7110,0,0,0,0,27180,60166,0,0,0,20262,0, +41862,0,0,0,0,0,0,0,0,0,0,2762,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26148,0,0,0,0,0,0,0,0 +,0,28229,0,0,0,29254,0,0,0,0,0,0,0,0,0,0,27690,0,0,13636,12776,1862,0,0,0,0,0,0, +17225,3271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,4457,18117,0,2023,402,0,0,0,0,0,0,0,0,0,0,0,0,0,104,3654,0,0, +0,0,0,0,0,0,18440,0,0,0,0,0,0,0,0,29861,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,22150,0,0,0,0,0,0,0,0,0,0,0,0,24074,0,0,0,0,0,0,0,0,12004,0,32358, +0,0,3081,0,0,0,0,0,0,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,10792,1799,21322,0,7880, +12613,0,0,0,0,0,0,0,0,13993,0,0,0,16202,0,0,0,0,32102,0,37223,0,10500,0,0,0,0,0, +0,0,0,32008,0,0,0,0,0,23816,3236,0,0,0,0,0,23237,0,0,5642,0,4684,294,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,26852,0,0,0,0,0,0,7148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,7890,61798,939,0,0,56679,0,0,0,0,0,27078,202,5029,0,0,0,0,0, +0,0,0,0,28005,0,0,15273,24741,5676,20452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55910,0,0 +,0,0,5069,27942,0,21092,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12517,0,0,0,0,0,0, +0,0,0,0,0,0,21384,28260,0,2502,20108,0,0,0,0,0,0,0,0,0,0,0,0,46726,0,30790,0,0,0 +,0,0,14725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1099,6372,0,0,0,12422,15182,0,8683,0, +10665,19462,0,0,0,0,0,0,1590,0,31628,0,22632,19750,0,0,0,0,0,0,0,24198,0,0,0,0,0 +,50662,0,0,0,0,0,0,0,0,0,0,9131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11015,0,0,0,0,0,0,0, +0,16490,54695,0,0,0,0,0,0,0,0,12937,0,0,0,0,16004,0,0,0,0,0,0,0,0,0,2181,6923,0, +0,0,0,0,0,0,15624,11302,0,0,5673,7559,0,0,14668,15684,0,0,0,0,0,0,24204,48134,0, +24230,0,55527,0,0,3464,19141,0,0,0,0}; + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/dictionary_hash.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/dictionary_hash.h new file mode 100644 index 00000000000..b3bb9599f43 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/dictionary_hash.h @@ -0,0 +1,24 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Hash table on the 4-byte prefixes of static dictionary words. */ + +#ifndef BROTLI_ENC_DICTIONARY_HASH_H_ +#define BROTLI_ENC_DICTIONARY_HASH_H_ + +#include <brotli/types.h> + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +extern const uint16_t kStaticDictionaryHash[32768]; + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_DICTIONARY_HASH_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/encode.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/encode.c new file mode 100644 index 00000000000..069521014ec --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/encode.c @@ -0,0 +1,1764 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Implementation of Brotli compressor. */ + +#include <brotli/encode.h> + +#include <stdlib.h> /* free, malloc */ +#include <string.h> /* memcpy, memset */ + +#include "../common/version.h" +#include "./backward_references.h" +#include "./backward_references_hq.h" +#include "./bit_cost.h" +#include "./brotli_bit_stream.h" +#include "./compress_fragment.h" +#include "./compress_fragment_two_pass.h" +#include "./context.h" +#include "./entropy_encode.h" +#include "./fast_log.h" +#include "./hash.h" +#include "./histogram.h" +#include "./memory.h" +#include "./metablock.h" +#include "./port.h" +#include "./prefix.h" +#include "./quality.h" +#include "./ringbuffer.h" +#include "./utf8_util.h" +#include "./write_bits.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#define COPY_ARRAY(dst, src) memcpy(dst, src, sizeof(src)); + +typedef enum BrotliEncoderStreamState { + /* Default state. */ + BROTLI_STREAM_PROCESSING = 0, + /* Intermediate state; after next block is emitted, byte-padding should be + performed before getting back to default state. */ + BROTLI_STREAM_FLUSH_REQUESTED = 1, + /* Last metablock was produced; no more input is acceptable. */ + BROTLI_STREAM_FINISHED = 2, + /* Flushing compressed block and writing meta-data block header. */ + BROTLI_STREAM_METADATA_HEAD = 3, + /* Writing metadata block body. */ + BROTLI_STREAM_METADATA_BODY = 4 +} BrotliEncoderStreamState; + +typedef struct BrotliEncoderStateStruct { + BrotliEncoderParams params; + + MemoryManager memory_manager_; + + HasherHandle hasher_; + uint64_t input_pos_; + RingBuffer ringbuffer_; + size_t cmd_alloc_size_; + Command* commands_; + size_t num_commands_; + size_t num_literals_; + size_t last_insert_len_; + uint64_t last_flush_pos_; + uint64_t last_processed_pos_; + int dist_cache_[BROTLI_NUM_DISTANCE_SHORT_CODES]; + int saved_dist_cache_[4]; + uint8_t last_byte_; + uint8_t last_byte_bits_; + uint8_t prev_byte_; + uint8_t prev_byte2_; + size_t storage_size_; + uint8_t* storage_; + /* Hash table for FAST_ONE_PASS_COMPRESSION_QUALITY mode. */ + int small_table_[1 << 10]; /* 4KiB */ + int* large_table_; /* Allocated only when needed */ + size_t large_table_size_; + /* Command and distance prefix codes (each 64 symbols, stored back-to-back) + used for the next block in FAST_ONE_PASS_COMPRESSION_QUALITY. The command + prefix code is over a smaller alphabet with the following 64 symbols: + 0 - 15: insert length code 0, copy length code 0 - 15, same distance + 16 - 39: insert length code 0, copy length code 0 - 23 + 40 - 63: insert length code 0 - 23, copy length code 0 + Note that symbols 16 and 40 represent the same code in the full alphabet, + but we do not use either of them in FAST_ONE_PASS_COMPRESSION_QUALITY. */ + uint8_t cmd_depths_[128]; + uint16_t cmd_bits_[128]; + /* The compressed form of the command and distance prefix codes for the next + block in FAST_ONE_PASS_COMPRESSION_QUALITY. */ + uint8_t cmd_code_[512]; + size_t cmd_code_numbits_; + /* Command and literal buffers for FAST_TWO_PASS_COMPRESSION_QUALITY. */ + uint32_t* command_buf_; + uint8_t* literal_buf_; + + uint8_t* next_out_; + size_t available_out_; + size_t total_out_; + /* Temporary buffer for padding flush bits or metadata block header / body. */ + union { + uint64_t u64[2]; + uint8_t u8[16]; + } tiny_buf_; + uint32_t remaining_metadata_bytes_; + BrotliEncoderStreamState stream_state_; + + BROTLI_BOOL is_last_block_emitted_; + BROTLI_BOOL is_initialized_; +} BrotliEncoderStateStruct; + +static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s); + +static size_t InputBlockSize(BrotliEncoderState* s) { + if (!EnsureInitialized(s)) return 0; + return (size_t)1 << s->params.lgblock; +} + +static uint64_t UnprocessedInputSize(BrotliEncoderState* s) { + return s->input_pos_ - s->last_processed_pos_; +} + +static size_t RemainingInputBlockSize(BrotliEncoderState* s) { + const uint64_t delta = UnprocessedInputSize(s); + size_t block_size = InputBlockSize(s); + if (delta >= block_size) return 0; + return block_size - (size_t)delta; +} + +BROTLI_BOOL BrotliEncoderSetParameter( + BrotliEncoderState* state, BrotliEncoderParameter p, uint32_t value) { + /* Changing parameters on the fly is not implemented yet. */ + if (state->is_initialized_) return BROTLI_FALSE; + /* TODO: Validate/clamp parameters here. */ + switch (p) { + case BROTLI_PARAM_MODE: + state->params.mode = (BrotliEncoderMode)value; + return BROTLI_TRUE; + + case BROTLI_PARAM_QUALITY: + state->params.quality = (int)value; + return BROTLI_TRUE; + + case BROTLI_PARAM_LGWIN: + state->params.lgwin = (int)value; + return BROTLI_TRUE; + + case BROTLI_PARAM_LGBLOCK: + state->params.lgblock = (int)value; + return BROTLI_TRUE; + + case BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: + if ((value != 0) && (value != 1)) return BROTLI_FALSE; + state->params.disable_literal_context_modeling = TO_BROTLI_BOOL(!!value); + return BROTLI_TRUE; + + case BROTLI_PARAM_SIZE_HINT: + state->params.size_hint = value; + return BROTLI_TRUE; + + default: return BROTLI_FALSE; + } +} + +static void RecomputeDistancePrefixes(Command* cmds, + size_t num_commands, + uint32_t num_direct_distance_codes, + uint32_t distance_postfix_bits) { + size_t i; + if (num_direct_distance_codes == 0 && distance_postfix_bits == 0) { + return; + } + for (i = 0; i < num_commands; ++i) { + Command* cmd = &cmds[i]; + if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) { + PrefixEncodeCopyDistance(CommandRestoreDistanceCode(cmd), + num_direct_distance_codes, + distance_postfix_bits, + &cmd->dist_prefix_, + &cmd->dist_extra_); + } + } +} + +/* Wraps 64-bit input position to 32-bit ring-buffer position preserving + "not-a-first-lap" feature. */ +static uint32_t WrapPosition(uint64_t position) { + uint32_t result = (uint32_t)position; + uint64_t gb = position >> 30; + if (gb > 2) { + /* Wrap every 2GiB; The first 3GB are continuous. */ + result = (result & ((1u << 30) - 1)) | ((uint32_t)((gb - 1) & 1) + 1) << 30; + } + return result; +} + +static uint8_t* GetBrotliStorage(BrotliEncoderState* s, size_t size) { + MemoryManager* m = &s->memory_manager_; + if (s->storage_size_ < size) { + BROTLI_FREE(m, s->storage_); + s->storage_ = BROTLI_ALLOC(m, uint8_t, size); + if (BROTLI_IS_OOM(m)) return NULL; + s->storage_size_ = size; + } + return s->storage_; +} + +static size_t HashTableSize(size_t max_table_size, size_t input_size) { + size_t htsize = 256; + while (htsize < max_table_size && htsize < input_size) { + htsize <<= 1; + } + return htsize; +} + +static int* GetHashTable(BrotliEncoderState* s, int quality, + size_t input_size, size_t* table_size) { + /* Use smaller hash table when input.size() is smaller, since we + fill the table, incurring O(hash table size) overhead for + compression, and if the input is short, we won't need that + many hash table entries anyway. */ + MemoryManager* m = &s->memory_manager_; + const size_t max_table_size = MaxHashTableSize(quality); + size_t htsize = HashTableSize(max_table_size, input_size); + int* table; + assert(max_table_size >= 256); + if (quality == FAST_ONE_PASS_COMPRESSION_QUALITY) { + /* Only odd shifts are supported by fast-one-pass. */ + if ((htsize & 0xAAAAA) == 0) { + htsize <<= 1; + } + } + + if (htsize <= sizeof(s->small_table_) / sizeof(s->small_table_[0])) { + table = s->small_table_; + } else { + if (htsize > s->large_table_size_) { + s->large_table_size_ = htsize; + BROTLI_FREE(m, s->large_table_); + s->large_table_ = BROTLI_ALLOC(m, int, htsize); + if (BROTLI_IS_OOM(m)) return 0; + } + table = s->large_table_; + } + + *table_size = htsize; + memset(table, 0, htsize * sizeof(*table)); + return table; +} + +static void EncodeWindowBits(int lgwin, uint8_t* last_byte, + uint8_t* last_byte_bits) { + if (lgwin == 16) { + *last_byte = 0; + *last_byte_bits = 1; + } else if (lgwin == 17) { + *last_byte = 1; + *last_byte_bits = 7; + } else if (lgwin > 17) { + *last_byte = (uint8_t)(((lgwin - 17) << 1) | 1); + *last_byte_bits = 4; + } else { + *last_byte = (uint8_t)(((lgwin - 8) << 4) | 1); + *last_byte_bits = 7; + } +} + +/* Initializes the command and distance prefix codes for the first block. */ +static void InitCommandPrefixCodes(uint8_t cmd_depths[128], + uint16_t cmd_bits[128], + uint8_t cmd_code[512], + size_t* cmd_code_numbits) { + static const uint8_t kDefaultCommandDepths[128] = { + 0, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, + 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, + 7, 7, 10, 10, 10, 10, 10, 10, 0, 4, 4, 5, 5, 5, 6, 6, + 7, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 10, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + }; + static const uint16_t kDefaultCommandBits[128] = { + 0, 0, 8, 9, 3, 35, 7, 71, + 39, 103, 23, 47, 175, 111, 239, 31, + 0, 0, 0, 4, 12, 2, 10, 6, + 13, 29, 11, 43, 27, 59, 87, 55, + 15, 79, 319, 831, 191, 703, 447, 959, + 0, 14, 1, 25, 5, 21, 19, 51, + 119, 159, 95, 223, 479, 991, 63, 575, + 127, 639, 383, 895, 255, 767, 511, 1023, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 59, 7, 39, 23, 55, 30, 1, 17, 9, 25, 5, 0, 8, 4, 12, + 2, 10, 6, 21, 13, 29, 3, 19, 11, 15, 47, 31, 95, 63, 127, 255, + 767, 2815, 1791, 3839, 511, 2559, 1535, 3583, 1023, 3071, 2047, 4095, + }; + static const uint8_t kDefaultCommandCode[] = { + 0xff, 0x77, 0xd5, 0xbf, 0xe7, 0xde, 0xea, 0x9e, 0x51, 0x5d, 0xde, 0xc6, + 0x70, 0x57, 0xbc, 0x58, 0x58, 0x58, 0xd8, 0xd8, 0x58, 0xd5, 0xcb, 0x8c, + 0xea, 0xe0, 0xc3, 0x87, 0x1f, 0x83, 0xc1, 0x60, 0x1c, 0x67, 0xb2, 0xaa, + 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0xcc, 0xa1, 0xce, 0x88, 0x54, 0x94, + 0x46, 0xe1, 0xb0, 0xd0, 0x4e, 0xb2, 0xf7, 0x04, 0x00, + }; + static const size_t kDefaultCommandCodeNumBits = 448; + COPY_ARRAY(cmd_depths, kDefaultCommandDepths); + COPY_ARRAY(cmd_bits, kDefaultCommandBits); + + /* Initialize the pre-compressed form of the command and distance prefix + codes. */ + COPY_ARRAY(cmd_code, kDefaultCommandCode); + *cmd_code_numbits = kDefaultCommandCodeNumBits; +} + +/* Decide about the context map based on the ability of the prediction + ability of the previous byte UTF8-prefix on the next byte. The + prediction ability is calculated as Shannon entropy. Here we need + Shannon entropy instead of 'BitsEntropy' since the prefix will be + encoded with the remaining 6 bits of the following byte, and + BitsEntropy will assume that symbol to be stored alone using Huffman + coding. */ +static void ChooseContextMap(int quality, + uint32_t* bigram_histo, + size_t* num_literal_contexts, + const uint32_t** literal_context_map) { + static const uint32_t kStaticContextMapContinuation[64] = { + 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + static const uint32_t kStaticContextMapSimpleUTF8[64] = { + 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + + uint32_t monogram_histo[3] = { 0 }; + uint32_t two_prefix_histo[6] = { 0 }; + size_t total; + size_t i; + size_t dummy; + double entropy[4]; + for (i = 0; i < 9; ++i) { + monogram_histo[i % 3] += bigram_histo[i]; + two_prefix_histo[i % 6] += bigram_histo[i]; + } + entropy[1] = ShannonEntropy(monogram_histo, 3, &dummy); + entropy[2] = (ShannonEntropy(two_prefix_histo, 3, &dummy) + + ShannonEntropy(two_prefix_histo + 3, 3, &dummy)); + entropy[3] = 0; + for (i = 0; i < 3; ++i) { + entropy[3] += ShannonEntropy(bigram_histo + 3 * i, 3, &dummy); + } + + total = monogram_histo[0] + monogram_histo[1] + monogram_histo[2]; + assert(total != 0); + entropy[0] = 1.0 / (double)total; + entropy[1] *= entropy[0]; + entropy[2] *= entropy[0]; + entropy[3] *= entropy[0]; + + if (quality < MIN_QUALITY_FOR_HQ_CONTEXT_MODELING) { + /* 3 context models is a bit slower, don't use it at lower qualities. */ + entropy[3] = entropy[1] * 10; + } + /* If expected savings by symbol are less than 0.2 bits, skip the + context modeling -- in exchange for faster decoding speed. */ + if (entropy[1] - entropy[2] < 0.2 && + entropy[1] - entropy[3] < 0.2) { + *num_literal_contexts = 1; + } else if (entropy[2] - entropy[3] < 0.02) { + *num_literal_contexts = 2; + *literal_context_map = kStaticContextMapSimpleUTF8; + } else { + *num_literal_contexts = 3; + *literal_context_map = kStaticContextMapContinuation; + } +} + +/* Decide if we want to use a more complex static context map containing 13 + context values, based on the entropy reduction of histograms over the + first 5 bits of literals. */ +static BROTLI_BOOL ShouldUseComplexStaticContextMap(const uint8_t* input, + size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint, + size_t* num_literal_contexts, const uint32_t** literal_context_map) { + static const uint32_t kStaticContextMapComplexUTF8[64] = { + 11, 11, 12, 12, /* 0 special */ + 0, 0, 0, 0, /* 4 lf */ + 1, 1, 9, 9, /* 8 space */ + 2, 2, 2, 2, /* !, first after space/lf and after something else. */ + 1, 1, 1, 1, /* " */ + 8, 3, 3, 3, /* % */ + 1, 1, 1, 1, /* ({[ */ + 2, 2, 2, 2, /* }]) */ + 8, 4, 4, 4, /* :; */ + 8, 7, 4, 4, /* . */ + 8, 0, 0, 0, /* > */ + 3, 3, 3, 3, /* [0..9] */ + 5, 5, 10, 5, /* [A-Z] */ + 5, 5, 10, 5, + 6, 6, 6, 6, /* [a-z] */ + 6, 6, 6, 6, + }; + BROTLI_UNUSED(quality); + /* Try the more complex static context map only for long data. */ + if (size_hint < (1 << 20)) { + return BROTLI_FALSE; + } else { + const size_t end_pos = start_pos + length; + /* To make entropy calculations faster and to fit on the stack, we collect + histograms over the 5 most significant bits of literals. One histogram + without context and 13 additional histograms for each context value. */ + uint32_t combined_histo[32] = { 0 }; + uint32_t context_histo[13][32] = { { 0 } }; + uint32_t total = 0; + double entropy[3]; + size_t dummy; + size_t i; + for (; start_pos + 64 <= end_pos; start_pos += 4096) { + const size_t stride_end_pos = start_pos + 64; + uint8_t prev2 = input[start_pos & mask]; + uint8_t prev1 = input[(start_pos + 1) & mask]; + size_t pos; + /* To make the analysis of the data faster we only examine 64 byte long + strides at every 4kB intervals. */ + for (pos = start_pos + 2; pos < stride_end_pos; ++pos) { + const uint8_t literal = input[pos & mask]; + const uint8_t context = (uint8_t)kStaticContextMapComplexUTF8[ + Context(prev1, prev2, CONTEXT_UTF8)]; + ++total; + ++combined_histo[literal >> 3]; + ++context_histo[context][literal >> 3]; + prev2 = prev1; + prev1 = literal; + } + } + entropy[1] = ShannonEntropy(combined_histo, 32, &dummy); + entropy[2] = 0; + for (i = 0; i < 13; ++i) { + entropy[2] += ShannonEntropy(&context_histo[i][0], 32, &dummy); + } + entropy[0] = 1.0 / (double)total; + entropy[1] *= entropy[0]; + entropy[2] *= entropy[0]; + /* The triggering heuristics below were tuned by compressing the individual + files of the silesia corpus. If we skip this kind of context modeling + for not very well compressible input (i.e. entropy using context modeling + is 60% of maximal entropy) or if expected savings by symbol are less + than 0.2 bits, then in every case when it triggers, the final compression + ratio is improved. Note however that this heuristics might be too strict + for some cases and could be tuned further. */ + if (entropy[2] > 3.0 || entropy[1] - entropy[2] < 0.2) { + return BROTLI_FALSE; + } else { + *num_literal_contexts = 13; + *literal_context_map = kStaticContextMapComplexUTF8; + return BROTLI_TRUE; + } + } +} + +static void DecideOverLiteralContextModeling(const uint8_t* input, + size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint, + size_t* num_literal_contexts, const uint32_t** literal_context_map) { + if (quality < MIN_QUALITY_FOR_CONTEXT_MODELING || length < 64) { + return; + } else if (ShouldUseComplexStaticContextMap( + input, start_pos, length, mask, quality, size_hint, + num_literal_contexts, literal_context_map)) { + /* Context map was already set, nothing else to do. */ + } else { + /* Gather bi-gram data of the UTF8 byte prefixes. To make the analysis of + UTF8 data faster we only examine 64 byte long strides at every 4kB + intervals. */ + const size_t end_pos = start_pos + length; + uint32_t bigram_prefix_histo[9] = { 0 }; + for (; start_pos + 64 <= end_pos; start_pos += 4096) { + static const int lut[4] = { 0, 0, 1, 2 }; + const size_t stride_end_pos = start_pos + 64; + int prev = lut[input[start_pos & mask] >> 6] * 3; + size_t pos; + for (pos = start_pos + 1; pos < stride_end_pos; ++pos) { + const uint8_t literal = input[pos & mask]; + ++bigram_prefix_histo[prev + lut[literal >> 6]]; + prev = lut[literal >> 6] * 3; + } + } + ChooseContextMap(quality, &bigram_prefix_histo[0], num_literal_contexts, + literal_context_map); + } +} + +static BROTLI_BOOL ShouldCompress( + const uint8_t* data, const size_t mask, const uint64_t last_flush_pos, + const size_t bytes, const size_t num_literals, const size_t num_commands) { + if (num_commands < (bytes >> 8) + 2) { + if (num_literals > 0.99 * (double)bytes) { + uint32_t literal_histo[256] = { 0 }; + static const uint32_t kSampleRate = 13; + static const double kMinEntropy = 7.92; + const double bit_cost_threshold = + (double)bytes * kMinEntropy / kSampleRate; + size_t t = (bytes + kSampleRate - 1) / kSampleRate; + uint32_t pos = (uint32_t)last_flush_pos; + size_t i; + for (i = 0; i < t; i++) { + ++literal_histo[data[pos & mask]]; + pos += kSampleRate; + } + if (BitsEntropy(literal_histo, 256) > bit_cost_threshold) { + return BROTLI_FALSE; + } + } + } + return BROTLI_TRUE; +} + +static void WriteMetaBlockInternal(MemoryManager* m, + const uint8_t* data, + const size_t mask, + const uint64_t last_flush_pos, + const size_t bytes, + const BROTLI_BOOL is_last, + const BrotliEncoderParams* params, + const uint8_t prev_byte, + const uint8_t prev_byte2, + const size_t num_literals, + const size_t num_commands, + Command* commands, + const int* saved_dist_cache, + int* dist_cache, + size_t* storage_ix, + uint8_t* storage) { + const uint32_t wrapped_last_flush_pos = WrapPosition(last_flush_pos); + uint8_t last_byte; + uint8_t last_byte_bits; + uint32_t num_direct_distance_codes = 0; + uint32_t distance_postfix_bits = 0; + + if (bytes == 0) { + /* Write the ISLAST and ISEMPTY bits. */ + BrotliWriteBits(2, 3, storage_ix, storage); + *storage_ix = (*storage_ix + 7u) & ~7u; + return; + } + + if (!ShouldCompress(data, mask, last_flush_pos, bytes, + num_literals, num_commands)) { + /* Restore the distance cache, as its last update by + CreateBackwardReferences is now unused. */ + memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); + BrotliStoreUncompressedMetaBlock(is_last, data, + wrapped_last_flush_pos, mask, bytes, + storage_ix, storage); + return; + } + + last_byte = storage[0]; + last_byte_bits = (uint8_t)(*storage_ix & 0xff); + if (params->quality >= MIN_QUALITY_FOR_RECOMPUTE_DISTANCE_PREFIXES && + params->mode == BROTLI_MODE_FONT) { + num_direct_distance_codes = 12; + distance_postfix_bits = 1; + RecomputeDistancePrefixes(commands, + num_commands, + num_direct_distance_codes, + distance_postfix_bits); + } + if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) { + BrotliStoreMetaBlockFast(m, data, wrapped_last_flush_pos, + bytes, mask, is_last, + commands, num_commands, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) { + BrotliStoreMetaBlockTrivial(m, data, wrapped_last_flush_pos, + bytes, mask, is_last, + commands, num_commands, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + } else { + ContextType literal_context_mode = CONTEXT_UTF8; + MetaBlockSplit mb; + InitMetaBlockSplit(&mb); + if (params->quality < MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING) { + size_t num_literal_contexts = 1; + const uint32_t* literal_context_map = NULL; + if (!params->disable_literal_context_modeling) { + DecideOverLiteralContextModeling( + data, wrapped_last_flush_pos, bytes, mask, params->quality, + params->size_hint, &num_literal_contexts, + &literal_context_map); + } + BrotliBuildMetaBlockGreedy(m, data, wrapped_last_flush_pos, mask, + prev_byte, prev_byte2, literal_context_mode, num_literal_contexts, + literal_context_map, commands, num_commands, &mb); + if (BROTLI_IS_OOM(m)) return; + } else { + if (!BrotliIsMostlyUTF8(data, wrapped_last_flush_pos, mask, bytes, + kMinUTF8Ratio)) { + literal_context_mode = CONTEXT_SIGNED; + } + BrotliBuildMetaBlock(m, data, wrapped_last_flush_pos, mask, params, + prev_byte, prev_byte2, + commands, num_commands, + literal_context_mode, + &mb); + if (BROTLI_IS_OOM(m)) return; + } + if (params->quality >= MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS) { + BrotliOptimizeHistograms(num_direct_distance_codes, + distance_postfix_bits, + &mb); + } + BrotliStoreMetaBlock(m, data, wrapped_last_flush_pos, bytes, mask, + prev_byte, prev_byte2, + is_last, + num_direct_distance_codes, + distance_postfix_bits, + literal_context_mode, + commands, num_commands, + &mb, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + DestroyMetaBlockSplit(m, &mb); + } + if (bytes + 4 < (*storage_ix >> 3)) { + /* Restore the distance cache and last byte. */ + memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); + storage[0] = last_byte; + *storage_ix = last_byte_bits; + BrotliStoreUncompressedMetaBlock(is_last, data, + wrapped_last_flush_pos, mask, + bytes, storage_ix, storage); + } +} + +static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s) { + if (BROTLI_IS_OOM(&s->memory_manager_)) return BROTLI_FALSE; + if (s->is_initialized_) return BROTLI_TRUE; + + SanitizeParams(&s->params); + s->params.lgblock = ComputeLgBlock(&s->params); + + s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX; + + RingBufferSetup(&s->params, &s->ringbuffer_); + + /* Initialize last byte with stream header. */ + { + int lgwin = s->params.lgwin; + if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY || + s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) { + lgwin = BROTLI_MAX(int, lgwin, 18); + } + EncodeWindowBits(lgwin, &s->last_byte_, &s->last_byte_bits_); + } + + if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) { + InitCommandPrefixCodes(s->cmd_depths_, s->cmd_bits_, + s->cmd_code_, &s->cmd_code_numbits_); + } + + s->is_initialized_ = BROTLI_TRUE; + return BROTLI_TRUE; +} + +static void BrotliEncoderInitParams(BrotliEncoderParams* params) { + params->mode = BROTLI_DEFAULT_MODE; + params->quality = BROTLI_DEFAULT_QUALITY; + params->lgwin = BROTLI_DEFAULT_WINDOW; + params->lgblock = 0; + params->size_hint = 0; + params->disable_literal_context_modeling = BROTLI_FALSE; +} + +static void BrotliEncoderInitState(BrotliEncoderState* s) { + BrotliEncoderInitParams(&s->params); + s->input_pos_ = 0; + s->num_commands_ = 0; + s->num_literals_ = 0; + s->last_insert_len_ = 0; + s->last_flush_pos_ = 0; + s->last_processed_pos_ = 0; + s->prev_byte_ = 0; + s->prev_byte2_ = 0; + s->storage_size_ = 0; + s->storage_ = 0; + s->hasher_ = NULL; + s->large_table_ = NULL; + s->large_table_size_ = 0; + s->cmd_code_numbits_ = 0; + s->command_buf_ = NULL; + s->literal_buf_ = NULL; + s->next_out_ = NULL; + s->available_out_ = 0; + s->total_out_ = 0; + s->stream_state_ = BROTLI_STREAM_PROCESSING; + s->is_last_block_emitted_ = BROTLI_FALSE; + s->is_initialized_ = BROTLI_FALSE; + + RingBufferInit(&s->ringbuffer_); + + s->commands_ = 0; + s->cmd_alloc_size_ = 0; + + /* Initialize distance cache. */ + s->dist_cache_[0] = 4; + s->dist_cache_[1] = 11; + s->dist_cache_[2] = 15; + s->dist_cache_[3] = 16; + /* Save the state of the distance cache in case we need to restore it for + emitting an uncompressed block. */ + memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_)); +} + +BrotliEncoderState* BrotliEncoderCreateInstance(brotli_alloc_func alloc_func, + brotli_free_func free_func, + void* opaque) { + BrotliEncoderState* state = 0; + if (!alloc_func && !free_func) { + state = (BrotliEncoderState*)malloc(sizeof(BrotliEncoderState)); + } else if (alloc_func && free_func) { + state = (BrotliEncoderState*)alloc_func(opaque, sizeof(BrotliEncoderState)); + } + if (state == 0) { + /* BROTLI_DUMP(); */ + return 0; + } + BrotliInitMemoryManager( + &state->memory_manager_, alloc_func, free_func, opaque); + BrotliEncoderInitState(state); + return state; +} + +static void BrotliEncoderCleanupState(BrotliEncoderState* s) { + MemoryManager* m = &s->memory_manager_; + if (BROTLI_IS_OOM(m)) { + BrotliWipeOutMemoryManager(m); + return; + } + BROTLI_FREE(m, s->storage_); + BROTLI_FREE(m, s->commands_); + RingBufferFree(m, &s->ringbuffer_); + DestroyHasher(m, &s->hasher_); + BROTLI_FREE(m, s->large_table_); + BROTLI_FREE(m, s->command_buf_); + BROTLI_FREE(m, s->literal_buf_); +} + +/* Deinitializes and frees BrotliEncoderState instance. */ +void BrotliEncoderDestroyInstance(BrotliEncoderState* state) { + if (!state) { + return; + } else { + MemoryManager* m = &state->memory_manager_; + brotli_free_func free_func = m->free_func; + void* opaque = m->opaque; + BrotliEncoderCleanupState(state); + free_func(opaque, state); + } +} + +/* + Copies the given input data to the internal ring buffer of the compressor. + No processing of the data occurs at this time and this function can be + called multiple times before calling WriteBrotliData() to process the + accumulated input. At most input_block_size() bytes of input data can be + copied to the ring buffer, otherwise the next WriteBrotliData() will fail. + */ +static void CopyInputToRingBuffer(BrotliEncoderState* s, + const size_t input_size, + const uint8_t* input_buffer) { + RingBuffer* ringbuffer_ = &s->ringbuffer_; + MemoryManager* m = &s->memory_manager_; + if (!EnsureInitialized(s)) return; + RingBufferWrite(m, input_buffer, input_size, ringbuffer_); + if (BROTLI_IS_OOM(m)) return; + s->input_pos_ += input_size; + + /* TL;DR: If needed, initialize 7 more bytes in the ring buffer to make the + hashing not depend on uninitialized data. This makes compression + deterministic and it prevents uninitialized memory warnings in Valgrind. + Even without erasing, the output would be valid (but nondeterministic). + + Background information: The compressor stores short (at most 8 bytes) + substrings of the input already read in a hash table, and detects + repetitions by looking up such substrings in the hash table. If it + can find a substring, it checks whether the substring is really there + in the ring buffer (or it's just a hash collision). Should the hash + table become corrupt, this check makes sure that the output is + still valid, albeit the compression ratio would be bad. + + The compressor populates the hash table from the ring buffer as it's + reading new bytes from the input. However, at the last few indexes of + the ring buffer, there are not enough bytes to build full-length + substrings from. Since the hash table always contains full-length + substrings, we erase with dummy zeros here to make sure that those + substrings will contain zeros at the end instead of uninitialized + data. + + Please note that erasing is not necessary (because the + memory region is already initialized since he ring buffer + has a `tail' that holds a copy of the beginning,) so we + skip erasing if we have already gone around at least once in + the ring buffer. + + Only clear during the first round of ring-buffer writes. On + subsequent rounds data in the ring-buffer would be affected. */ + if (ringbuffer_->pos_ <= ringbuffer_->mask_) { + /* This is the first time when the ring buffer is being written. + We clear 7 bytes just after the bytes that have been copied from + the input buffer. + + The ring-buffer has a "tail" that holds a copy of the beginning, + but only once the ring buffer has been fully written once, i.e., + pos <= mask. For the first time, we need to write values + in this tail (where index may be larger than mask), so that + we have exactly defined behavior and don't read uninitialized + memory. Due to performance reasons, hashing reads data using a + LOAD64, which can go 7 bytes beyond the bytes written in the + ring-buffer. */ + memset(ringbuffer_->buffer_ + ringbuffer_->pos_, 0, 7); + } +} + +/* Marks all input as processed. + Returns true if position wrapping occurs. */ +static BROTLI_BOOL UpdateLastProcessedPos(BrotliEncoderState* s) { + uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_); + uint32_t wrapped_input_pos = WrapPosition(s->input_pos_); + s->last_processed_pos_ = s->input_pos_; + return TO_BROTLI_BOOL(wrapped_input_pos < wrapped_last_processed_pos); +} + +/* + Processes the accumulated input data and sets |*out_size| to the length of + the new output meta-block, or to zero if no new output meta-block has been + created (in this case the processed input data is buffered internally). + If |*out_size| is positive, |*output| points to the start of the output + data. If |is_last| or |force_flush| is BROTLI_TRUE, an output meta-block is + always created. However, until |is_last| is BROTLI_TRUE encoder may retain up + to 7 bits of the last byte of output. To force encoder to dump the remaining + bits use WriteMetadata() to append an empty meta-data block. + Returns BROTLI_FALSE if the size of the input data is larger than + input_block_size(). + */ +static BROTLI_BOOL EncodeData( + BrotliEncoderState* s, const BROTLI_BOOL is_last, + const BROTLI_BOOL force_flush, size_t* out_size, uint8_t** output) { + const uint64_t delta = UnprocessedInputSize(s); + const uint32_t bytes = (uint32_t)delta; + const uint32_t wrapped_last_processed_pos = + WrapPosition(s->last_processed_pos_); + uint8_t* data; + uint32_t mask; + MemoryManager* m = &s->memory_manager_; + const BrotliDictionary* dictionary = BrotliGetDictionary(); + + if (!EnsureInitialized(s)) return BROTLI_FALSE; + data = s->ringbuffer_.buffer_; + mask = s->ringbuffer_.mask_; + + /* Adding more blocks after "last" block is forbidden. */ + if (s->is_last_block_emitted_) return BROTLI_FALSE; + if (is_last) s->is_last_block_emitted_ = BROTLI_TRUE; + + if (delta > InputBlockSize(s)) { + return BROTLI_FALSE; + } + if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY && + !s->command_buf_) { + s->command_buf_ = + BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize); + s->literal_buf_ = + BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } + + if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY || + s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) { + uint8_t* storage; + size_t storage_ix = s->last_byte_bits_; + size_t table_size; + int* table; + + if (delta == 0 && !is_last) { + /* We have no new input data and we don't have to finish the stream, so + nothing to do. */ + *out_size = 0; + return BROTLI_TRUE; + } + storage = GetBrotliStorage(s, 2 * bytes + 502); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + storage[0] = s->last_byte_; + table = GetHashTable(s, s->params.quality, bytes, &table_size); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) { + BrotliCompressFragmentFast( + m, &data[wrapped_last_processed_pos & mask], + bytes, is_last, + table, table_size, + s->cmd_depths_, s->cmd_bits_, + &s->cmd_code_numbits_, s->cmd_code_, + &storage_ix, storage); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } else { + BrotliCompressFragmentTwoPass( + m, &data[wrapped_last_processed_pos & mask], + bytes, is_last, + s->command_buf_, s->literal_buf_, + table, table_size, + &storage_ix, storage); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } + s->last_byte_ = storage[storage_ix >> 3]; + s->last_byte_bits_ = storage_ix & 7u; + UpdateLastProcessedPos(s); + *output = &storage[0]; + *out_size = storage_ix >> 3; + return BROTLI_TRUE; + } + + { + /* Theoretical max number of commands is 1 per 2 bytes. */ + size_t newsize = s->num_commands_ + bytes / 2 + 1; + if (newsize > s->cmd_alloc_size_) { + Command* new_commands; + /* Reserve a bit more memory to allow merging with a next block + without reallocation: that would impact speed. */ + newsize += (bytes / 4) + 16; + s->cmd_alloc_size_ = newsize; + new_commands = BROTLI_ALLOC(m, Command, newsize); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + if (s->commands_) { + memcpy(new_commands, s->commands_, sizeof(Command) * s->num_commands_); + BROTLI_FREE(m, s->commands_); + } + s->commands_ = new_commands; + } + } + + InitOrStitchToPreviousBlock(m, &s->hasher_, data, mask, &s->params, + wrapped_last_processed_pos, bytes, is_last); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + + if (s->params.quality == ZOPFLIFICATION_QUALITY) { + assert(s->params.hasher.type == 10); + BrotliCreateZopfliBackwardReferences( + m, dictionary, bytes, wrapped_last_processed_pos, data, mask, + &s->params, s->hasher_, s->dist_cache_, &s->last_insert_len_, + &s->commands_[s->num_commands_], &s->num_commands_, &s->num_literals_); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } else if (s->params.quality == HQ_ZOPFLIFICATION_QUALITY) { + assert(s->params.hasher.type == 10); + BrotliCreateHqZopfliBackwardReferences( + m, dictionary, bytes, wrapped_last_processed_pos, data, mask, + &s->params, s->hasher_, s->dist_cache_, &s->last_insert_len_, + &s->commands_[s->num_commands_], &s->num_commands_, &s->num_literals_); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } else { + BrotliCreateBackwardReferences( + dictionary, bytes, wrapped_last_processed_pos, data, mask, + &s->params, s->hasher_, s->dist_cache_, &s->last_insert_len_, + &s->commands_[s->num_commands_], &s->num_commands_, &s->num_literals_); + } + + { + const size_t max_length = MaxMetablockSize(&s->params); + const size_t max_literals = max_length / 8; + const size_t max_commands = max_length / 8; + const size_t processed_bytes = (size_t)(s->input_pos_ - s->last_flush_pos_); + /* If maximal possible additional block doesn't fit metablock, flush now. */ + /* TODO: Postpone decision until next block arrives? */ + const BROTLI_BOOL next_input_fits_metablock = TO_BROTLI_BOOL( + processed_bytes + InputBlockSize(s) <= max_length); + /* If block splitting is not used, then flush as soon as there is some + amount of commands / literals produced. */ + const BROTLI_BOOL should_flush = TO_BROTLI_BOOL( + s->params.quality < MIN_QUALITY_FOR_BLOCK_SPLIT && + s->num_literals_ + s->num_commands_ >= MAX_NUM_DELAYED_SYMBOLS); + if (!is_last && !force_flush && !should_flush && + next_input_fits_metablock && + s->num_literals_ < max_literals && + s->num_commands_ < max_commands) { + /* Merge with next input block. Everything will happen later. */ + if (UpdateLastProcessedPos(s)) { + HasherReset(s->hasher_); + } + *out_size = 0; + return BROTLI_TRUE; + } + } + + /* Create the last insert-only command. */ + if (s->last_insert_len_ > 0) { + InitInsertCommand(&s->commands_[s->num_commands_++], s->last_insert_len_); + s->num_literals_ += s->last_insert_len_; + s->last_insert_len_ = 0; + } + + if (!is_last && s->input_pos_ == s->last_flush_pos_) { + /* We have no new input data and we don't have to finish the stream, so + nothing to do. */ + *out_size = 0; + return BROTLI_TRUE; + } + assert(s->input_pos_ >= s->last_flush_pos_); + assert(s->input_pos_ > s->last_flush_pos_ || is_last); + assert(s->input_pos_ - s->last_flush_pos_ <= 1u << 24); + { + const uint32_t metablock_size = + (uint32_t)(s->input_pos_ - s->last_flush_pos_); + uint8_t* storage = GetBrotliStorage(s, 2 * metablock_size + 502); + size_t storage_ix = s->last_byte_bits_; + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + storage[0] = s->last_byte_; + WriteMetaBlockInternal( + m, data, mask, s->last_flush_pos_, metablock_size, is_last, + &s->params, s->prev_byte_, s->prev_byte2_, + s->num_literals_, s->num_commands_, s->commands_, s->saved_dist_cache_, + s->dist_cache_, &storage_ix, storage); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + s->last_byte_ = storage[storage_ix >> 3]; + s->last_byte_bits_ = storage_ix & 7u; + s->last_flush_pos_ = s->input_pos_; + if (UpdateLastProcessedPos(s)) { + HasherReset(s->hasher_); + } + if (s->last_flush_pos_ > 0) { + s->prev_byte_ = data[((uint32_t)s->last_flush_pos_ - 1) & mask]; + } + if (s->last_flush_pos_ > 1) { + s->prev_byte2_ = data[(uint32_t)(s->last_flush_pos_ - 2) & mask]; + } + s->num_commands_ = 0; + s->num_literals_ = 0; + /* Save the state of the distance cache in case we need to restore it for + emitting an uncompressed block. */ + memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_)); + *output = &storage[0]; + *out_size = storage_ix >> 3; + return BROTLI_TRUE; + } +} + +/* Dumps remaining output bits and metadata header to |header|. + Returns number of produced bytes. + REQUIRED: |header| should be 8-byte aligned and at least 16 bytes long. + REQUIRED: |block_size| <= (1 << 24). */ +static size_t WriteMetadataHeader( + BrotliEncoderState* s, const size_t block_size, uint8_t* header) { + size_t storage_ix; + storage_ix = s->last_byte_bits_; + header[0] = s->last_byte_; + s->last_byte_ = 0; + s->last_byte_bits_ = 0; + + BrotliWriteBits(1, 0, &storage_ix, header); + BrotliWriteBits(2, 3, &storage_ix, header); + BrotliWriteBits(1, 0, &storage_ix, header); + if (block_size == 0) { + BrotliWriteBits(2, 0, &storage_ix, header); + } else { + uint32_t nbits = (block_size == 1) ? 0 : + (Log2FloorNonZero((uint32_t)block_size - 1) + 1); + uint32_t nbytes = (nbits + 7) / 8; + BrotliWriteBits(2, nbytes, &storage_ix, header); + BrotliWriteBits(8 * nbytes, block_size - 1, &storage_ix, header); + } + return (storage_ix + 7u) >> 3; +} + +static BROTLI_BOOL BrotliCompressBufferQuality10( + int lgwin, size_t input_size, const uint8_t* input_buffer, + size_t* encoded_size, uint8_t* encoded_buffer) { + MemoryManager memory_manager; + MemoryManager* m = &memory_manager; + + const size_t mask = BROTLI_SIZE_MAX >> 1; + const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(lgwin); + int dist_cache[4] = { 4, 11, 15, 16 }; + int saved_dist_cache[4] = { 4, 11, 15, 16 }; + BROTLI_BOOL ok = BROTLI_TRUE; + const size_t max_out_size = *encoded_size; + size_t total_out_size = 0; + uint8_t last_byte; + uint8_t last_byte_bits; + HasherHandle hasher = NULL; + + const size_t hasher_eff_size = + BROTLI_MIN(size_t, input_size, max_backward_limit + BROTLI_WINDOW_GAP); + + BrotliEncoderParams params; + const BrotliDictionary* dictionary = BrotliGetDictionary(); + + const int lgmetablock = BROTLI_MIN(int, 24, lgwin + 1); + size_t max_block_size; + const size_t max_metablock_size = (size_t)1 << lgmetablock; + const size_t max_literals_per_metablock = max_metablock_size / 8; + const size_t max_commands_per_metablock = max_metablock_size / 8; + size_t metablock_start = 0; + uint8_t prev_byte = 0; + uint8_t prev_byte2 = 0; + + BrotliEncoderInitParams(¶ms); + params.quality = 10; + params.lgwin = lgwin; + SanitizeParams(¶ms); + params.lgblock = ComputeLgBlock(¶ms); + max_block_size = (size_t)1 << params.lgblock; + + BrotliInitMemoryManager(m, 0, 0, 0); + + assert(input_size <= mask + 1); + EncodeWindowBits(lgwin, &last_byte, &last_byte_bits); + InitOrStitchToPreviousBlock(m, &hasher, input_buffer, mask, ¶ms, + 0, hasher_eff_size, BROTLI_TRUE); + if (BROTLI_IS_OOM(m)) goto oom; + + while (ok && metablock_start < input_size) { + const size_t metablock_end = + BROTLI_MIN(size_t, input_size, metablock_start + max_metablock_size); + const size_t expected_num_commands = + (metablock_end - metablock_start) / 12 + 16; + Command* commands = 0; + size_t num_commands = 0; + size_t last_insert_len = 0; + size_t num_literals = 0; + size_t metablock_size = 0; + size_t cmd_alloc_size = 0; + BROTLI_BOOL is_last; + uint8_t* storage; + size_t storage_ix; + + size_t block_start; + for (block_start = metablock_start; block_start < metablock_end; ) { + size_t block_size = + BROTLI_MIN(size_t, metablock_end - block_start, max_block_size); + ZopfliNode* nodes = BROTLI_ALLOC(m, ZopfliNode, block_size + 1); + size_t path_size; + size_t new_cmd_alloc_size; + if (BROTLI_IS_OOM(m)) goto oom; + BrotliInitZopfliNodes(nodes, block_size + 1); + StitchToPreviousBlockH10(hasher, block_size, block_start, + input_buffer, mask); + path_size = BrotliZopfliComputeShortestPath( + m, dictionary, block_size, block_start, input_buffer, mask, ¶ms, + max_backward_limit, dist_cache, hasher, nodes); + if (BROTLI_IS_OOM(m)) goto oom; + /* We allocate a command buffer in the first iteration of this loop that + will be likely big enough for the whole metablock, so that for most + inputs we will not have to reallocate in later iterations. We do the + allocation here and not before the loop, because if the input is small, + this will be allocated after the Zopfli cost model is freed, so this + will not increase peak memory usage. + TODO: If the first allocation is too small, increase command + buffer size exponentially. */ + new_cmd_alloc_size = BROTLI_MAX(size_t, expected_num_commands, + num_commands + path_size + 1); + if (cmd_alloc_size != new_cmd_alloc_size) { + Command* new_commands = BROTLI_ALLOC(m, Command, new_cmd_alloc_size); + if (BROTLI_IS_OOM(m)) goto oom; + cmd_alloc_size = new_cmd_alloc_size; + if (commands) { + memcpy(new_commands, commands, sizeof(Command) * num_commands); + BROTLI_FREE(m, commands); + } + commands = new_commands; + } + BrotliZopfliCreateCommands(block_size, block_start, max_backward_limit, + &nodes[0], dist_cache, &last_insert_len, + ¶ms, &commands[num_commands], + &num_literals); + num_commands += path_size; + block_start += block_size; + metablock_size += block_size; + BROTLI_FREE(m, nodes); + if (num_literals > max_literals_per_metablock || + num_commands > max_commands_per_metablock) { + break; + } + } + + if (last_insert_len > 0) { + InitInsertCommand(&commands[num_commands++], last_insert_len); + num_literals += last_insert_len; + } + + is_last = TO_BROTLI_BOOL(metablock_start + metablock_size == input_size); + storage = NULL; + storage_ix = last_byte_bits; + + if (metablock_size == 0) { + /* Write the ISLAST and ISEMPTY bits. */ + storage = BROTLI_ALLOC(m, uint8_t, 16); + if (BROTLI_IS_OOM(m)) goto oom; + storage[0] = last_byte; + BrotliWriteBits(2, 3, &storage_ix, storage); + storage_ix = (storage_ix + 7u) & ~7u; + } else if (!ShouldCompress(input_buffer, mask, metablock_start, + metablock_size, num_literals, num_commands)) { + /* Restore the distance cache, as its last update by + CreateBackwardReferences is now unused. */ + memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); + storage = BROTLI_ALLOC(m, uint8_t, metablock_size + 16); + if (BROTLI_IS_OOM(m)) goto oom; + storage[0] = last_byte; + BrotliStoreUncompressedMetaBlock(is_last, input_buffer, + metablock_start, mask, metablock_size, + &storage_ix, storage); + } else { + uint32_t num_direct_distance_codes = 0; + uint32_t distance_postfix_bits = 0; + ContextType literal_context_mode = CONTEXT_UTF8; + MetaBlockSplit mb; + InitMetaBlockSplit(&mb); + if (!BrotliIsMostlyUTF8(input_buffer, metablock_start, mask, + metablock_size, kMinUTF8Ratio)) { + literal_context_mode = CONTEXT_SIGNED; + } + BrotliBuildMetaBlock(m, input_buffer, metablock_start, mask, ¶ms, + prev_byte, prev_byte2, + commands, num_commands, + literal_context_mode, + &mb); + if (BROTLI_IS_OOM(m)) goto oom; + BrotliOptimizeHistograms(num_direct_distance_codes, + distance_postfix_bits, + &mb); + storage = BROTLI_ALLOC(m, uint8_t, 2 * metablock_size + 502); + if (BROTLI_IS_OOM(m)) goto oom; + storage[0] = last_byte; + BrotliStoreMetaBlock(m, input_buffer, metablock_start, metablock_size, + mask, prev_byte, prev_byte2, + is_last, + num_direct_distance_codes, + distance_postfix_bits, + literal_context_mode, + commands, num_commands, + &mb, + &storage_ix, storage); + if (BROTLI_IS_OOM(m)) goto oom; + if (metablock_size + 4 < (storage_ix >> 3)) { + /* Restore the distance cache and last byte. */ + memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); + storage[0] = last_byte; + storage_ix = last_byte_bits; + BrotliStoreUncompressedMetaBlock(is_last, input_buffer, + metablock_start, mask, + metablock_size, &storage_ix, storage); + } + DestroyMetaBlockSplit(m, &mb); + } + last_byte = storage[storage_ix >> 3]; + last_byte_bits = storage_ix & 7u; + metablock_start += metablock_size; + prev_byte = input_buffer[metablock_start - 1]; + prev_byte2 = input_buffer[metablock_start - 2]; + /* Save the state of the distance cache in case we need to restore it for + emitting an uncompressed block. */ + memcpy(saved_dist_cache, dist_cache, 4 * sizeof(dist_cache[0])); + + { + const size_t out_size = storage_ix >> 3; + total_out_size += out_size; + if (total_out_size <= max_out_size) { + memcpy(encoded_buffer, storage, out_size); + encoded_buffer += out_size; + } else { + ok = BROTLI_FALSE; + } + } + BROTLI_FREE(m, storage); + BROTLI_FREE(m, commands); + } + + *encoded_size = total_out_size; + DestroyHasher(m, &hasher); + return ok; + +oom: + BrotliWipeOutMemoryManager(m); + return BROTLI_FALSE; +} + +size_t BrotliEncoderMaxCompressedSize(size_t input_size) { + /* [window bits / empty metadata] + N * [uncompressed] + [last empty] */ + size_t num_large_blocks = input_size >> 24; + size_t tail = input_size - (num_large_blocks << 24); + size_t tail_overhead = (tail > (1 << 20)) ? 4 : 3; + size_t overhead = 2 + (4 * num_large_blocks) + tail_overhead + 1; + size_t result = input_size + overhead; + if (input_size == 0) return 1; + return (result < input_size) ? 0 : result; +} + +/* Wraps data to uncompressed brotli stream with minimal window size. + |output| should point at region with at least BrotliEncoderMaxCompressedSize + addressable bytes. + Returns the length of stream. */ +static size_t MakeUncompressedStream( + const uint8_t* input, size_t input_size, uint8_t* output) { + size_t size = input_size; + size_t result = 0; + size_t offset = 0; + if (input_size == 0) { + output[0] = 6; + return 1; + } + output[result++] = 0x21; /* window bits = 10, is_last = false */ + output[result++] = 0x03; /* empty metadata, padding */ + while (size > 0) { + uint32_t nibbles = 0; + uint32_t chunk_size; + uint32_t bits; + chunk_size = (size > (1u << 24)) ? (1u << 24) : (uint32_t)size; + if (chunk_size > (1u << 16)) nibbles = (chunk_size > (1u << 20)) ? 2 : 1; + bits = + (nibbles << 1) | ((chunk_size - 1) << 3) | (1u << (19 + 4 * nibbles)); + output[result++] = (uint8_t)bits; + output[result++] = (uint8_t)(bits >> 8); + output[result++] = (uint8_t)(bits >> 16); + if (nibbles == 2) output[result++] = (uint8_t)(bits >> 24); + memcpy(&output[result], &input[offset], chunk_size); + result += chunk_size; + offset += chunk_size; + size -= chunk_size; + } + output[result++] = 3; + return result; +} + +BROTLI_BOOL BrotliEncoderCompress( + int quality, int lgwin, BrotliEncoderMode mode, size_t input_size, + const uint8_t* input_buffer, size_t* encoded_size, + uint8_t* encoded_buffer) { + BrotliEncoderState* s; + size_t out_size = *encoded_size; + const uint8_t* input_start = input_buffer; + uint8_t* output_start = encoded_buffer; + size_t max_out_size = BrotliEncoderMaxCompressedSize(input_size); + if (out_size == 0) { + /* Output buffer needs at least one byte. */ + return BROTLI_FALSE; + } + if (input_size == 0) { + /* Handle the special case of empty input. */ + *encoded_size = 1; + *encoded_buffer = 6; + return BROTLI_TRUE; + } + if (quality == 10) { + /* TODO: Implement this direct path for all quality levels. */ + const int lg_win = BROTLI_MIN(int, BROTLI_MAX_WINDOW_BITS, + BROTLI_MAX(int, 16, lgwin)); + int ok = BrotliCompressBufferQuality10(lg_win, input_size, input_buffer, + encoded_size, encoded_buffer); + if (!ok || (max_out_size && *encoded_size > max_out_size)) { + goto fallback; + } + return BROTLI_TRUE; + } + + s = BrotliEncoderCreateInstance(0, 0, 0); + if (!s) { + return BROTLI_FALSE; + } else { + size_t available_in = input_size; + const uint8_t* next_in = input_buffer; + size_t available_out = *encoded_size; + uint8_t* next_out = encoded_buffer; + size_t total_out = 0; + BROTLI_BOOL result = BROTLI_FALSE; + BrotliEncoderSetParameter(s, BROTLI_PARAM_QUALITY, (uint32_t)quality); + BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, (uint32_t)lgwin); + BrotliEncoderSetParameter(s, BROTLI_PARAM_MODE, (uint32_t)mode); + BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, (uint32_t)input_size); + result = BrotliEncoderCompressStream(s, BROTLI_OPERATION_FINISH, + &available_in, &next_in, &available_out, &next_out, &total_out); + if (!BrotliEncoderIsFinished(s)) result = 0; + *encoded_size = total_out; + BrotliEncoderDestroyInstance(s); + if (!result || (max_out_size && *encoded_size > max_out_size)) { + goto fallback; + } + return BROTLI_TRUE; + } +fallback: + *encoded_size = 0; + if (!max_out_size) return BROTLI_FALSE; + if (out_size >= max_out_size) { + *encoded_size = + MakeUncompressedStream(input_start, input_size, output_start); + return BROTLI_TRUE; + } + return BROTLI_FALSE; +} + +static void InjectBytePaddingBlock(BrotliEncoderState* s) { + uint32_t seal = s->last_byte_; + size_t seal_bits = s->last_byte_bits_; + uint8_t* destination; + s->last_byte_ = 0; + s->last_byte_bits_ = 0; + /* is_last = 0, data_nibbles = 11, reserved = 0, meta_nibbles = 00 */ + seal |= 0x6u << seal_bits; + seal_bits += 6; + /* If we have already created storage, then append to it. + Storage is valid until next block is being compressed. */ + if (s->next_out_) { + destination = s->next_out_ + s->available_out_; + } else { + destination = s->tiny_buf_.u8; + s->next_out_ = destination; + } + destination[0] = (uint8_t)seal; + if (seal_bits > 8) destination[1] = (uint8_t)(seal >> 8); + s->available_out_ += (seal_bits + 7) >> 3; +} + +/* Injects padding bits or pushes compressed data to output. + Returns false if nothing is done. */ +static BROTLI_BOOL InjectFlushOrPushOutput(BrotliEncoderState* s, + size_t* available_out, uint8_t** next_out, size_t* total_out) { + if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED && + s->last_byte_bits_ != 0) { + InjectBytePaddingBlock(s); + return BROTLI_TRUE; + } + + if (s->available_out_ != 0 && *available_out != 0) { + size_t copy_output_size = + BROTLI_MIN(size_t, s->available_out_, *available_out); + memcpy(*next_out, s->next_out_, copy_output_size); + *next_out += copy_output_size; + *available_out -= copy_output_size; + s->next_out_ += copy_output_size; + s->available_out_ -= copy_output_size; + s->total_out_ += copy_output_size; + if (total_out) *total_out = s->total_out_; + return BROTLI_TRUE; + } + + return BROTLI_FALSE; +} + +static void CheckFlushComplete(BrotliEncoderState* s) { + if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED && + s->available_out_ == 0) { + s->stream_state_ = BROTLI_STREAM_PROCESSING; + s->next_out_ = 0; + } +} + +static BROTLI_BOOL BrotliEncoderCompressStreamFast( + BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in, + const uint8_t** next_in, size_t* available_out, uint8_t** next_out, + size_t* total_out) { + const size_t block_size_limit = (size_t)1 << s->params.lgwin; + const size_t buf_size = BROTLI_MIN(size_t, kCompressFragmentTwoPassBlockSize, + BROTLI_MIN(size_t, *available_in, block_size_limit)); + uint32_t* tmp_command_buf = NULL; + uint32_t* command_buf = NULL; + uint8_t* tmp_literal_buf = NULL; + uint8_t* literal_buf = NULL; + MemoryManager* m = &s->memory_manager_; + if (s->params.quality != FAST_ONE_PASS_COMPRESSION_QUALITY && + s->params.quality != FAST_TWO_PASS_COMPRESSION_QUALITY) { + return BROTLI_FALSE; + } + if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) { + if (!s->command_buf_ && buf_size == kCompressFragmentTwoPassBlockSize) { + s->command_buf_ = + BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize); + s->literal_buf_ = + BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } + if (s->command_buf_) { + command_buf = s->command_buf_; + literal_buf = s->literal_buf_; + } else { + tmp_command_buf = BROTLI_ALLOC(m, uint32_t, buf_size); + tmp_literal_buf = BROTLI_ALLOC(m, uint8_t, buf_size); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + command_buf = tmp_command_buf; + literal_buf = tmp_literal_buf; + } + } + + while (BROTLI_TRUE) { + if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) { + continue; + } + + /* Compress block only when internal output buffer is empty, stream is not + finished, there is no pending flush request, and there is either + additional input or pending operation. */ + if (s->available_out_ == 0 && + s->stream_state_ == BROTLI_STREAM_PROCESSING && + (*available_in != 0 || op != BROTLI_OPERATION_PROCESS)) { + size_t block_size = BROTLI_MIN(size_t, block_size_limit, *available_in); + BROTLI_BOOL is_last = + (*available_in == block_size) && (op == BROTLI_OPERATION_FINISH); + BROTLI_BOOL force_flush = + (*available_in == block_size) && (op == BROTLI_OPERATION_FLUSH); + size_t max_out_size = 2 * block_size + 502; + BROTLI_BOOL inplace = BROTLI_TRUE; + uint8_t* storage = NULL; + size_t storage_ix = s->last_byte_bits_; + size_t table_size; + int* table; + + if (force_flush && block_size == 0) { + s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED; + continue; + } + if (max_out_size <= *available_out) { + storage = *next_out; + } else { + inplace = BROTLI_FALSE; + storage = GetBrotliStorage(s, max_out_size); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } + storage[0] = s->last_byte_; + table = GetHashTable(s, s->params.quality, block_size, &table_size); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + + if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) { + BrotliCompressFragmentFast(m, *next_in, block_size, is_last, table, + table_size, s->cmd_depths_, s->cmd_bits_, &s->cmd_code_numbits_, + s->cmd_code_, &storage_ix, storage); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } else { + BrotliCompressFragmentTwoPass(m, *next_in, block_size, is_last, + command_buf, literal_buf, table, table_size, + &storage_ix, storage); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } + *next_in += block_size; + *available_in -= block_size; + if (inplace) { + size_t out_bytes = storage_ix >> 3; + assert(out_bytes <= *available_out); + assert((storage_ix & 7) == 0 || out_bytes < *available_out); + *next_out += out_bytes; + *available_out -= out_bytes; + s->total_out_ += out_bytes; + if (total_out) *total_out = s->total_out_; + } else { + size_t out_bytes = storage_ix >> 3; + s->next_out_ = storage; + s->available_out_ = out_bytes; + } + s->last_byte_ = storage[storage_ix >> 3]; + s->last_byte_bits_ = storage_ix & 7u; + + if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED; + if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED; + continue; + } + break; + } + BROTLI_FREE(m, tmp_command_buf); + BROTLI_FREE(m, tmp_literal_buf); + CheckFlushComplete(s); + return BROTLI_TRUE; +} + +static BROTLI_BOOL ProcessMetadata( + BrotliEncoderState* s, size_t* available_in, const uint8_t** next_in, + size_t* available_out, uint8_t** next_out, size_t* total_out) { + if (*available_in > (1u << 24)) return BROTLI_FALSE; + /* Switch to metadata block workflow, if required. */ + if (s->stream_state_ == BROTLI_STREAM_PROCESSING) { + s->remaining_metadata_bytes_ = (uint32_t)*available_in; + s->stream_state_ = BROTLI_STREAM_METADATA_HEAD; + } + if (s->stream_state_ != BROTLI_STREAM_METADATA_HEAD && + s->stream_state_ != BROTLI_STREAM_METADATA_BODY) { + return BROTLI_FALSE; + } + + while (BROTLI_TRUE) { + if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) { + continue; + } + if (s->available_out_ != 0) break; + + if (s->input_pos_ != s->last_flush_pos_) { + BROTLI_BOOL result = EncodeData(s, BROTLI_FALSE, BROTLI_TRUE, + &s->available_out_, &s->next_out_); + if (!result) return BROTLI_FALSE; + continue; + } + + if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD) { + s->next_out_ = s->tiny_buf_.u8; + s->available_out_ = + WriteMetadataHeader(s, s->remaining_metadata_bytes_, s->next_out_); + s->stream_state_ = BROTLI_STREAM_METADATA_BODY; + continue; + } else { + /* Exit workflow only when there is no more input and no more output. + Otherwise client may continue producing empty metadata blocks. */ + if (s->remaining_metadata_bytes_ == 0) { + s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX; + s->stream_state_ = BROTLI_STREAM_PROCESSING; + break; + } + if (*available_out) { + /* Directly copy input to output. */ + uint32_t copy = (uint32_t)BROTLI_MIN( + size_t, s->remaining_metadata_bytes_, *available_out); + memcpy(*next_out, *next_in, copy); + *next_in += copy; + *available_in -= copy; + s->remaining_metadata_bytes_ -= copy; + *next_out += copy; + *available_out -= copy; + } else { + /* This guarantees progress in "TakeOutput" workflow. */ + uint32_t copy = BROTLI_MIN(uint32_t, s->remaining_metadata_bytes_, 16); + s->next_out_ = s->tiny_buf_.u8; + memcpy(s->next_out_, *next_in, copy); + *next_in += copy; + *available_in -= copy; + s->remaining_metadata_bytes_ -= copy; + s->available_out_ = copy; + } + continue; + } + } + + return BROTLI_TRUE; +} + +static void UpdateSizeHint(BrotliEncoderState* s, size_t available_in) { + if (s->params.size_hint == 0) { + uint64_t delta = UnprocessedInputSize(s); + uint64_t tail = available_in; + uint32_t limit = 1u << 30; + uint32_t total; + if ((delta >= limit) || (tail >= limit) || ((delta + tail) >= limit)) { + total = limit; + } else { + total = (uint32_t)(delta + tail); + } + s->params.size_hint = total; + } +} + +BROTLI_BOOL BrotliEncoderCompressStream( + BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in, + const uint8_t** next_in, size_t* available_out,uint8_t** next_out, + size_t* total_out) { + if (!EnsureInitialized(s)) return BROTLI_FALSE; + + /* Unfinished metadata block; check requirements. */ + if (s->remaining_metadata_bytes_ != BROTLI_UINT32_MAX) { + if (*available_in != s->remaining_metadata_bytes_) return BROTLI_FALSE; + if (op != BROTLI_OPERATION_EMIT_METADATA) return BROTLI_FALSE; + } + + if (op == BROTLI_OPERATION_EMIT_METADATA) { + UpdateSizeHint(s, 0); /* First data metablock might be emitted here. */ + return ProcessMetadata( + s, available_in, next_in, available_out, next_out, total_out); + } + + if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD || + s->stream_state_ == BROTLI_STREAM_METADATA_BODY) { + return BROTLI_FALSE; + } + + if (s->stream_state_ != BROTLI_STREAM_PROCESSING && *available_in != 0) { + return BROTLI_FALSE; + } + if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY || + s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) { + return BrotliEncoderCompressStreamFast(s, op, available_in, next_in, + available_out, next_out, total_out); + } + while (BROTLI_TRUE) { + size_t remaining_block_size = RemainingInputBlockSize(s); + + if (remaining_block_size != 0 && *available_in != 0) { + size_t copy_input_size = + BROTLI_MIN(size_t, remaining_block_size, *available_in); + CopyInputToRingBuffer(s, copy_input_size, *next_in); + *next_in += copy_input_size; + *available_in -= copy_input_size; + continue; + } + + if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) { + continue; + } + + /* Compress data only when internal output buffer is empty, stream is not + finished and there is no pending flush request. */ + if (s->available_out_ == 0 && + s->stream_state_ == BROTLI_STREAM_PROCESSING) { + if (remaining_block_size == 0 || op != BROTLI_OPERATION_PROCESS) { + BROTLI_BOOL is_last = TO_BROTLI_BOOL( + (*available_in == 0) && op == BROTLI_OPERATION_FINISH); + BROTLI_BOOL force_flush = TO_BROTLI_BOOL( + (*available_in == 0) && op == BROTLI_OPERATION_FLUSH); + BROTLI_BOOL result; + UpdateSizeHint(s, *available_in); + result = EncodeData(s, is_last, force_flush, + &s->available_out_, &s->next_out_); + if (!result) return BROTLI_FALSE; + if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED; + if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED; + continue; + } + } + break; + } + CheckFlushComplete(s); + return BROTLI_TRUE; +} + +BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* s) { + return TO_BROTLI_BOOL(s->stream_state_ == BROTLI_STREAM_FINISHED && + !BrotliEncoderHasMoreOutput(s)); +} + +BROTLI_BOOL BrotliEncoderHasMoreOutput(BrotliEncoderState* s) { + return TO_BROTLI_BOOL(s->available_out_ != 0); +} + +const uint8_t* BrotliEncoderTakeOutput(BrotliEncoderState* s, size_t* size) { + size_t consumed_size = s->available_out_; + uint8_t* result = s->next_out_; + if (*size) { + consumed_size = BROTLI_MIN(size_t, *size, s->available_out_); + } + if (consumed_size) { + s->next_out_ += consumed_size; + s->available_out_ -= consumed_size; + s->total_out_ += consumed_size; + CheckFlushComplete(s); + *size = consumed_size; + } else { + *size = 0; + result = 0; + } + return result; +} + +uint32_t BrotliEncoderVersion(void) { + return BROTLI_VERSION; +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/entropy_encode.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/entropy_encode.c new file mode 100644 index 00000000000..41ea9483d19 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/entropy_encode.c @@ -0,0 +1,501 @@ +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Entropy encoding (Huffman) utilities. */ + +#include "./entropy_encode.h" + +#include <string.h> /* memset */ + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +BROTLI_BOOL BrotliSetDepth( + int p0, HuffmanTree* pool, uint8_t* depth, int max_depth) { + int stack[16]; + int level = 0; + int p = p0; + assert(max_depth <= 15); + stack[0] = -1; + while (BROTLI_TRUE) { + if (pool[p].index_left_ >= 0) { + level++; + if (level > max_depth) return BROTLI_FALSE; + stack[level] = pool[p].index_right_or_value_; + p = pool[p].index_left_; + continue; + } else { + depth[pool[p].index_right_or_value_] = (uint8_t)level; + } + while (level >= 0 && stack[level] == -1) level--; + if (level < 0) return BROTLI_TRUE; + p = stack[level]; + stack[level] = -1; + } +} + +/* Sort the root nodes, least popular first. */ +static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree( + const HuffmanTree* v0, const HuffmanTree* v1) { + if (v0->total_count_ != v1->total_count_) { + return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_); + } + return TO_BROTLI_BOOL(v0->index_right_or_value_ > v1->index_right_or_value_); +} + +/* This function will create a Huffman tree. + + The catch here is that the tree cannot be arbitrarily deep. + Brotli specifies a maximum depth of 15 bits for "code trees" + and 7 bits for "code length code trees." + + count_limit is the value that is to be faked as the minimum value + and this minimum value is raised until the tree matches the + maximum length requirement. + + This algorithm is not of excellent performance for very long data blocks, + especially when population counts are longer than 2**tree_limit, but + we are not planning to use this with extremely long blocks. + + See http://en.wikipedia.org/wiki/Huffman_coding */ +void BrotliCreateHuffmanTree(const uint32_t *data, + const size_t length, + const int tree_limit, + HuffmanTree* tree, + uint8_t *depth) { + uint32_t count_limit; + HuffmanTree sentinel; + InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1); + /* For block sizes below 64 kB, we never need to do a second iteration + of this loop. Probably all of our block sizes will be smaller than + that, so this loop is mostly of academic interest. If we actually + would need this, we would be better off with the Katajainen algorithm. */ + for (count_limit = 1; ; count_limit *= 2) { + size_t n = 0; + size_t i; + size_t j; + size_t k; + for (i = length; i != 0;) { + --i; + if (data[i]) { + const uint32_t count = BROTLI_MAX(uint32_t, data[i], count_limit); + InitHuffmanTree(&tree[n++], count, -1, (int16_t)i); + } + } + + if (n == 1) { + depth[tree[0].index_right_or_value_] = 1; /* Only one element. */ + break; + } + + SortHuffmanTreeItems(tree, n, SortHuffmanTree); + + /* The nodes are: + [0, n): the sorted leaf nodes that we start with. + [n]: we add a sentinel here. + [n + 1, 2n): new parent nodes are added here, starting from + (n+1). These are naturally in ascending order. + [2n]: we add a sentinel at the end as well. + There will be (2n+1) elements at the end. */ + tree[n] = sentinel; + tree[n + 1] = sentinel; + + i = 0; /* Points to the next leaf node. */ + j = n + 1; /* Points to the next non-leaf node. */ + for (k = n - 1; k != 0; --k) { + size_t left, right; + if (tree[i].total_count_ <= tree[j].total_count_) { + left = i; + ++i; + } else { + left = j; + ++j; + } + if (tree[i].total_count_ <= tree[j].total_count_) { + right = i; + ++i; + } else { + right = j; + ++j; + } + + { + /* The sentinel node becomes the parent node. */ + size_t j_end = 2 * n - k; + tree[j_end].total_count_ = + tree[left].total_count_ + tree[right].total_count_; + tree[j_end].index_left_ = (int16_t)left; + tree[j_end].index_right_or_value_ = (int16_t)right; + + /* Add back the last sentinel node. */ + tree[j_end + 1] = sentinel; + } + } + if (BrotliSetDepth((int)(2 * n - 1), &tree[0], depth, tree_limit)) { + /* We need to pack the Huffman tree in tree_limit bits. If this was not + successful, add fake entities to the lowest values and retry. */ + break; + } + } +} + +static void Reverse(uint8_t* v, size_t start, size_t end) { + --end; + while (start < end) { + uint8_t tmp = v[start]; + v[start] = v[end]; + v[end] = tmp; + ++start; + --end; + } +} + +static void BrotliWriteHuffmanTreeRepetitions( + const uint8_t previous_value, + const uint8_t value, + size_t repetitions, + size_t* tree_size, + uint8_t* tree, + uint8_t* extra_bits_data) { + assert(repetitions > 0); + if (previous_value != value) { + tree[*tree_size] = value; + extra_bits_data[*tree_size] = 0; + ++(*tree_size); + --repetitions; + } + if (repetitions == 7) { + tree[*tree_size] = value; + extra_bits_data[*tree_size] = 0; + ++(*tree_size); + --repetitions; + } + if (repetitions < 3) { + size_t i; + for (i = 0; i < repetitions; ++i) { + tree[*tree_size] = value; + extra_bits_data[*tree_size] = 0; + ++(*tree_size); + } + } else { + size_t start = *tree_size; + repetitions -= 3; + while (BROTLI_TRUE) { + tree[*tree_size] = BROTLI_REPEAT_PREVIOUS_CODE_LENGTH; + extra_bits_data[*tree_size] = repetitions & 0x3; + ++(*tree_size); + repetitions >>= 2; + if (repetitions == 0) { + break; + } + --repetitions; + } + Reverse(tree, start, *tree_size); + Reverse(extra_bits_data, start, *tree_size); + } +} + +static void BrotliWriteHuffmanTreeRepetitionsZeros( + size_t repetitions, + size_t* tree_size, + uint8_t* tree, + uint8_t* extra_bits_data) { + if (repetitions == 11) { + tree[*tree_size] = 0; + extra_bits_data[*tree_size] = 0; + ++(*tree_size); + --repetitions; + } + if (repetitions < 3) { + size_t i; + for (i = 0; i < repetitions; ++i) { + tree[*tree_size] = 0; + extra_bits_data[*tree_size] = 0; + ++(*tree_size); + } + } else { + size_t start = *tree_size; + repetitions -= 3; + while (BROTLI_TRUE) { + tree[*tree_size] = BROTLI_REPEAT_ZERO_CODE_LENGTH; + extra_bits_data[*tree_size] = repetitions & 0x7; + ++(*tree_size); + repetitions >>= 3; + if (repetitions == 0) { + break; + } + --repetitions; + } + Reverse(tree, start, *tree_size); + Reverse(extra_bits_data, start, *tree_size); + } +} + +void BrotliOptimizeHuffmanCountsForRle(size_t length, uint32_t* counts, + uint8_t* good_for_rle) { + size_t nonzero_count = 0; + size_t stride; + size_t limit; + size_t sum; + const size_t streak_limit = 1240; + /* Let's make the Huffman code more compatible with RLE encoding. */ + size_t i; + for (i = 0; i < length; i++) { + if (counts[i]) { + ++nonzero_count; + } + } + if (nonzero_count < 16) { + return; + } + while (length != 0 && counts[length - 1] == 0) { + --length; + } + if (length == 0) { + return; /* All zeros. */ + } + /* Now counts[0..length - 1] does not have trailing zeros. */ + { + size_t nonzeros = 0; + uint32_t smallest_nonzero = 1 << 30; + for (i = 0; i < length; ++i) { + if (counts[i] != 0) { + ++nonzeros; + if (smallest_nonzero > counts[i]) { + smallest_nonzero = counts[i]; + } + } + } + if (nonzeros < 5) { + /* Small histogram will model it well. */ + return; + } + if (smallest_nonzero < 4) { + size_t zeros = length - nonzeros; + if (zeros < 6) { + for (i = 1; i < length - 1; ++i) { + if (counts[i - 1] != 0 && counts[i] == 0 && counts[i + 1] != 0) { + counts[i] = 1; + } + } + } + } + if (nonzeros < 28) { + return; + } + } + /* 2) Let's mark all population counts that already can be encoded + with an RLE code. */ + memset(good_for_rle, 0, length); + { + /* Let's not spoil any of the existing good RLE codes. + Mark any seq of 0's that is longer as 5 as a good_for_rle. + Mark any seq of non-0's that is longer as 7 as a good_for_rle. */ + uint32_t symbol = counts[0]; + size_t step = 0; + for (i = 0; i <= length; ++i) { + if (i == length || counts[i] != symbol) { + if ((symbol == 0 && step >= 5) || + (symbol != 0 && step >= 7)) { + size_t k; + for (k = 0; k < step; ++k) { + good_for_rle[i - k - 1] = 1; + } + } + step = 1; + if (i != length) { + symbol = counts[i]; + } + } else { + ++step; + } + } + } + /* 3) Let's replace those population counts that lead to more RLE codes. + Math here is in 24.8 fixed point representation. */ + stride = 0; + limit = 256 * (counts[0] + counts[1] + counts[2]) / 3 + 420; + sum = 0; + for (i = 0; i <= length; ++i) { + if (i == length || good_for_rle[i] || + (i != 0 && good_for_rle[i - 1]) || + (256 * counts[i] - limit + streak_limit) >= 2 * streak_limit) { + if (stride >= 4 || (stride >= 3 && sum == 0)) { + size_t k; + /* The stride must end, collapse what we have, if we have enough (4). */ + size_t count = (sum + stride / 2) / stride; + if (count == 0) { + count = 1; + } + if (sum == 0) { + /* Don't make an all zeros stride to be upgraded to ones. */ + count = 0; + } + for (k = 0; k < stride; ++k) { + /* We don't want to change value at counts[i], + that is already belonging to the next stride. Thus - 1. */ + counts[i - k - 1] = (uint32_t)count; + } + } + stride = 0; + sum = 0; + if (i < length - 2) { + /* All interesting strides have a count of at least 4, */ + /* at least when non-zeros. */ + limit = 256 * (counts[i] + counts[i + 1] + counts[i + 2]) / 3 + 420; + } else if (i < length) { + limit = 256 * counts[i]; + } else { + limit = 0; + } + } + ++stride; + if (i != length) { + sum += counts[i]; + if (stride >= 4) { + limit = (256 * sum + stride / 2) / stride; + } + if (stride == 4) { + limit += 120; + } + } + } +} + +static void DecideOverRleUse(const uint8_t* depth, const size_t length, + BROTLI_BOOL *use_rle_for_non_zero, + BROTLI_BOOL *use_rle_for_zero) { + size_t total_reps_zero = 0; + size_t total_reps_non_zero = 0; + size_t count_reps_zero = 1; + size_t count_reps_non_zero = 1; + size_t i; + for (i = 0; i < length;) { + const uint8_t value = depth[i]; + size_t reps = 1; + size_t k; + for (k = i + 1; k < length && depth[k] == value; ++k) { + ++reps; + } + if (reps >= 3 && value == 0) { + total_reps_zero += reps; + ++count_reps_zero; + } + if (reps >= 4 && value != 0) { + total_reps_non_zero += reps; + ++count_reps_non_zero; + } + i += reps; + } + *use_rle_for_non_zero = + TO_BROTLI_BOOL(total_reps_non_zero > count_reps_non_zero * 2); + *use_rle_for_zero = TO_BROTLI_BOOL(total_reps_zero > count_reps_zero * 2); +} + +void BrotliWriteHuffmanTree(const uint8_t* depth, + size_t length, + size_t* tree_size, + uint8_t* tree, + uint8_t* extra_bits_data) { + uint8_t previous_value = BROTLI_INITIAL_REPEATED_CODE_LENGTH; + size_t i; + BROTLI_BOOL use_rle_for_non_zero = BROTLI_FALSE; + BROTLI_BOOL use_rle_for_zero = BROTLI_FALSE; + + /* Throw away trailing zeros. */ + size_t new_length = length; + for (i = 0; i < length; ++i) { + if (depth[length - i - 1] == 0) { + --new_length; + } else { + break; + } + } + + /* First gather statistics on if it is a good idea to do RLE. */ + if (length > 50) { + /* Find RLE coding for longer codes. + Shorter codes seem not to benefit from RLE. */ + DecideOverRleUse(depth, new_length, + &use_rle_for_non_zero, &use_rle_for_zero); + } + + /* Actual RLE coding. */ + for (i = 0; i < new_length;) { + const uint8_t value = depth[i]; + size_t reps = 1; + if ((value != 0 && use_rle_for_non_zero) || + (value == 0 && use_rle_for_zero)) { + size_t k; + for (k = i + 1; k < new_length && depth[k] == value; ++k) { + ++reps; + } + } + if (value == 0) { + BrotliWriteHuffmanTreeRepetitionsZeros( + reps, tree_size, tree, extra_bits_data); + } else { + BrotliWriteHuffmanTreeRepetitions(previous_value, + value, reps, tree_size, + tree, extra_bits_data); + previous_value = value; + } + i += reps; + } +} + +static uint16_t BrotliReverseBits(size_t num_bits, uint16_t bits) { + static const size_t kLut[16] = { /* Pre-reversed 4-bit values. */ + 0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe, + 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf + }; + size_t retval = kLut[bits & 0xf]; + size_t i; + for (i = 4; i < num_bits; i += 4) { + retval <<= 4; + bits = (uint16_t)(bits >> 4); + retval |= kLut[bits & 0xf]; + } + retval >>= ((0 - num_bits) & 0x3); + return (uint16_t)retval; +} + +/* 0..15 are values for bits */ +#define MAX_HUFFMAN_BITS 16 + +void BrotliConvertBitDepthsToSymbols(const uint8_t *depth, + size_t len, + uint16_t *bits) { + /* In Brotli, all bit depths are [1..15] + 0 bit depth means that the symbol does not exist. */ + uint16_t bl_count[MAX_HUFFMAN_BITS] = { 0 }; + uint16_t next_code[MAX_HUFFMAN_BITS]; + size_t i; + int code = 0; + for (i = 0; i < len; ++i) { + ++bl_count[depth[i]]; + } + bl_count[0] = 0; + next_code[0] = 0; + for (i = 1; i < MAX_HUFFMAN_BITS; ++i) { + code = (code + bl_count[i - 1]) << 1; + next_code[i] = (uint16_t)code; + } + for (i = 0; i < len; ++i) { + if (depth[i]) { + bits[i] = BrotliReverseBits(depth[i], next_code[depth[i]]++); + } + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/entropy_encode.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/entropy_encode.h new file mode 100644 index 00000000000..812d0094f86 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/entropy_encode.h @@ -0,0 +1,122 @@ +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Entropy encoding (Huffman) utilities. */ + +#ifndef BROTLI_ENC_ENTROPY_ENCODE_H_ +#define BROTLI_ENC_ENTROPY_ENCODE_H_ + +#include <brotli/types.h> +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* A node of a Huffman tree. */ +typedef struct HuffmanTree { + uint32_t total_count_; + int16_t index_left_; + int16_t index_right_or_value_; +} HuffmanTree; + +static BROTLI_INLINE void InitHuffmanTree(HuffmanTree* self, uint32_t count, + int16_t left, int16_t right) { + self->total_count_ = count; + self->index_left_ = left; + self->index_right_or_value_ = right; +} + +/* Returns 1 is assignment of depths succeeded, otherwise 0. */ +BROTLI_INTERNAL BROTLI_BOOL BrotliSetDepth( + int p, HuffmanTree* pool, uint8_t* depth, int max_depth); + +/* This function will create a Huffman tree. + + The (data,length) contains the population counts. + The tree_limit is the maximum bit depth of the Huffman codes. + + The depth contains the tree, i.e., how many bits are used for + the symbol. + + The actual Huffman tree is constructed in the tree[] array, which has to + be at least 2 * length + 1 long. + + See http://en.wikipedia.org/wiki/Huffman_coding */ +BROTLI_INTERNAL void BrotliCreateHuffmanTree(const uint32_t *data, + const size_t length, + const int tree_limit, + HuffmanTree* tree, + uint8_t *depth); + +/* Change the population counts in a way that the consequent + Huffman tree compression, especially its RLE-part will be more + likely to compress this data more efficiently. + + length contains the size of the histogram. + counts contains the population counts. + good_for_rle is a buffer of at least length size */ +BROTLI_INTERNAL void BrotliOptimizeHuffmanCountsForRle( + size_t length, uint32_t* counts, uint8_t* good_for_rle); + +/* Write a Huffman tree from bit depths into the bit-stream representation + of a Huffman tree. The generated Huffman tree is to be compressed once + more using a Huffman tree */ +BROTLI_INTERNAL void BrotliWriteHuffmanTree(const uint8_t* depth, + size_t num, + size_t* tree_size, + uint8_t* tree, + uint8_t* extra_bits_data); + +/* Get the actual bit values for a tree of bit depths. */ +BROTLI_INTERNAL void BrotliConvertBitDepthsToSymbols(const uint8_t *depth, + size_t len, + uint16_t *bits); + +/* Input size optimized Shell sort. */ +typedef BROTLI_BOOL (*HuffmanTreeComparator)( + const HuffmanTree*, const HuffmanTree*); +static BROTLI_INLINE void SortHuffmanTreeItems(HuffmanTree* items, + const size_t n, HuffmanTreeComparator comparator) { + static const size_t gaps[] = {132, 57, 23, 10, 4, 1}; + if (n < 13) { + /* Insertion sort. */ + size_t i; + for (i = 1; i < n; ++i) { + HuffmanTree tmp = items[i]; + size_t k = i; + size_t j = i - 1; + while (comparator(&tmp, &items[j])) { + items[k] = items[j]; + k = j; + if (!j--) break; + } + items[k] = tmp; + } + return; + } else { + /* Shell sort. */ + int g = n < 57 ? 2 : 0; + for (; g < 6; ++g) { + size_t gap = gaps[g]; + size_t i; + for (i = gap; i < n; ++i) { + size_t j = i; + HuffmanTree tmp = items[i]; + for (; j >= gap && comparator(&tmp, &items[j - gap]); j -= gap) { + items[j] = items[j - gap]; + } + items[j] = tmp; + } + } + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_ENTROPY_ENCODE_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/entropy_encode_static.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/entropy_encode_static.h index d21f3b51744..bc0ee53c56b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/entropy_encode_static.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/entropy_encode_static.h @@ -4,22 +4,25 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Static entropy codes used for faster meta-block encoding. +/* Static entropy codes used for faster meta-block encoding. */ #ifndef BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ #define BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ -#include "./prefix.h" -#include "./types.h" +#include "../common/constants.h" +#include <brotli/port.h> +#include <brotli/types.h> #include "./write_bits.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif static const uint8_t kCodeLengthDepth[18] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 0, 4, 4, }; -static const uint8_t kStaticCommandCodeDepth[kNumCommandPrefixes] = { +static const uint8_t kStaticCommandCodeDepth[BROTLI_NUM_COMMAND_SYMBOLS] = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, @@ -77,11 +80,13 @@ static const uint32_t kCodeLengthBits[18] = { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 15, 31, 0, 11, 7, }; -inline void StoreStaticCodeLengthCode(size_t* storage_ix, uint8_t* storage) { - WriteBits(40, MAKE_UINT64_T(0xff, 0x55555554), storage_ix, storage); +static BROTLI_INLINE void StoreStaticCodeLengthCode( + size_t* storage_ix, uint8_t* storage) { + BrotliWriteBits( + 40, BROTLI_MAKE_UINT64_T(0x0000ffU, 0x55555554U), storage_ix, storage); } -static const uint64_t kZeroRepsBits[704] = { +static const uint64_t kZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = { 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000017, 0x00000027, 0x00000037, 0x00000047, 0x00000057, 0x00000067, 0x00000077, 0x00000770, 0x00000b87, 0x00001387, 0x00001b87, 0x00002387, 0x00002b87, 0x00003387, @@ -202,7 +207,7 @@ static const uint64_t kZeroRepsBits[704] = { 0x06f9cb87, 0x08f9cb87, }; -static const uint32_t kZeroRepsDepth[704] = { +static const uint32_t kZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0, 4, 8, 7, 7, 7, 7, 7, 7, 7, 7, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, @@ -249,7 +254,7 @@ static const uint32_t kZeroRepsDepth[704] = { 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, }; -static const uint64_t kNonZeroRepsBits[704] = { +static const uint64_t kNonZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = { 0x0000000b, 0x0000001b, 0x0000002b, 0x0000003b, 0x000002cb, 0x000006cb, 0x00000acb, 0x00000ecb, 0x000002db, 0x000006db, 0x00000adb, 0x00000edb, 0x000002eb, 0x000006eb, 0x00000aeb, 0x00000eeb, 0x000002fb, 0x000006fb, @@ -370,7 +375,7 @@ static const uint64_t kNonZeroRepsBits[704] = { 0x2baeb6db, 0x3baeb6db, }; -static const uint32_t kNonZeroRepsDepth[704] = { +static const uint32_t kNonZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = { 6, 6, 6, 6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, @@ -417,47 +422,7 @@ static const uint32_t kNonZeroRepsDepth[704] = { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, }; -static const uint16_t kStaticLiteralCodeBits[256] = { - 0, 128, 64, 192, 32, 160, 96, 224, - 16, 144, 80, 208, 48, 176, 112, 240, - 8, 136, 72, 200, 40, 168, 104, 232, - 24, 152, 88, 216, 56, 184, 120, 248, - 4, 132, 68, 196, 36, 164, 100, 228, - 20, 148, 84, 212, 52, 180, 116, 244, - 12, 140, 76, 204, 44, 172, 108, 236, - 28, 156, 92, 220, 60, 188, 124, 252, - 2, 130, 66, 194, 34, 162, 98, 226, - 18, 146, 82, 210, 50, 178, 114, 242, - 10, 138, 74, 202, 42, 170, 106, 234, - 26, 154, 90, 218, 58, 186, 122, 250, - 6, 134, 70, 198, 38, 166, 102, 230, - 22, 150, 86, 214, 54, 182, 118, 246, - 14, 142, 78, 206, 46, 174, 110, 238, - 30, 158, 94, 222, 62, 190, 126, 254, - 1, 129, 65, 193, 33, 161, 97, 225, - 17, 145, 81, 209, 49, 177, 113, 241, - 9, 137, 73, 201, 41, 169, 105, 233, - 25, 153, 89, 217, 57, 185, 121, 249, - 5, 133, 69, 197, 37, 165, 101, 229, - 21, 149, 85, 213, 53, 181, 117, 245, - 13, 141, 77, 205, 45, 173, 109, 237, - 29, 157, 93, 221, 61, 189, 125, 253, - 3, 131, 67, 195, 35, 163, 99, 227, - 19, 147, 83, 211, 51, 179, 115, 243, - 11, 139, 75, 203, 43, 171, 107, 235, - 27, 155, 91, 219, 59, 187, 123, 251, - 7, 135, 71, 199, 39, 167, 103, 231, - 23, 151, 87, 215, 55, 183, 119, 247, - 15, 143, 79, 207, 47, 175, 111, 239, - 31, 159, 95, 223, 63, 191, 127, 255, -}; - -inline void StoreStaticLiteralHuffmanTree(size_t* storage_ix, - uint8_t* storage) { - WriteBits(32, 0x00010003U, storage_ix, storage); -} - -static const uint16_t kStaticCommandCodeBits[kNumCommandPrefixes] = { +static const uint16_t kStaticCommandCodeBits[BROTLI_NUM_COMMAND_SYMBOLS] = { 0, 256, 128, 384, 64, 320, 192, 448, 32, 288, 160, 416, 96, 352, 224, 480, 16, 272, 144, 400, 80, 336, 208, 464, @@ -548,10 +513,11 @@ static const uint16_t kStaticCommandCodeBits[kNumCommandPrefixes] = { 255, 1279, 767, 1791, 511, 1535, 1023, 2047, }; -inline void StoreStaticCommandHuffmanTree(size_t* storage_ix, - uint8_t* storage) { - WriteBits(28, 0x0000000006307003U, storage_ix, storage); - WriteBits(31, 0x0000000009262441U, storage_ix, storage); +static BROTLI_INLINE void StoreStaticCommandHuffmanTree( + size_t* storage_ix, uint8_t* storage) { + BrotliWriteBits( + 56, BROTLI_MAKE_UINT64_T(0x926244U, 0x16307003U), storage_ix, storage); + BrotliWriteBits(3, 0x00000000U, storage_ix, storage); } static const uint16_t kStaticDistanceCodeBits[64] = { @@ -561,12 +527,13 @@ static const uint16_t kStaticDistanceCodeBits[64] = { 3, 35, 19, 51, 11, 43, 27, 59, 7, 39, 23, 55, 15, 47, 31, 63, }; -inline void StoreStaticDistanceHuffmanTree(size_t* storage_ix, - uint8_t* storage) { - WriteBits(18, 0x000000000001dc03U, storage_ix, storage); - WriteBits(10, 0x00000000000000daU, storage_ix, storage); +static BROTLI_INLINE void StoreStaticDistanceHuffmanTree( + size_t* storage_ix, uint8_t* storage) { + BrotliWriteBits(28, 0x0369dc03U, storage_ix, storage); } -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#endif // BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ +#endif /* BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/fast_log.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/fast_log.h index f9450ed5891..49c1af31d06 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/fast_log.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/fast_log.h @@ -4,21 +4,23 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Utilities for fast computation of logarithms. +/* Utilities for fast computation of logarithms. */ #ifndef BROTLI_ENC_FAST_LOG_H_ #define BROTLI_ENC_FAST_LOG_H_ -#include <assert.h> #include <math.h> -#include "./types.h" +#include <brotli/types.h> +#include <brotli/port.h> -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -static inline uint32_t Log2FloorNonZero(size_t n) { -#ifdef __GNUC__ - return 31u ^ static_cast<uint32_t>(__builtin_clz(static_cast<uint32_t>(n))); +static BROTLI_INLINE uint32_t Log2FloorNonZero(size_t n) { +#if BROTLI_MODERN_COMPILER || __has_builtin(__builtin_clz) + return 31u ^ (uint32_t)__builtin_clz((uint32_t)n); #else uint32_t result = 0; while (n >>= 1) result++; @@ -26,10 +28,10 @@ static inline uint32_t Log2FloorNonZero(size_t n) { #endif } -// A lookup table for small values of log2(int) to be used in entropy -// computation. -// -// ", ".join(["%.16ff" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) +/* A lookup table for small values of log2(int) to be used in entropy + computation. + + ", ".join(["%.16ff" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) */ static const float kLog2Table[] = { 0.0000000000000000f, 0.0000000000000000f, 1.0000000000000000f, 1.5849625007211563f, 2.0000000000000000f, 2.3219280948873622f, @@ -119,21 +121,25 @@ static const float kLog2Table[] = { 7.9943534368588578f }; -// Faster logarithm for small integers, with the property of log2(0) == 0. -static inline double FastLog2(size_t v) { +#define LOG_2_INV 1.4426950408889634 + +/* Faster logarithm for small integers, with the property of log2(0) == 0. */ +static BROTLI_INLINE double FastLog2(size_t v) { if (v < sizeof(kLog2Table) / sizeof(kLog2Table[0])) { return kLog2Table[v]; } -#if defined(_MSC_VER) && _MSC_VER <= 1600 - // Visual Studio 2010 does not have the log2() function defined, so we use - // log() and a multiplication instead. - static const double kLog2Inv = 1.4426950408889634f; - return log(static_cast<double>(v)) * kLog2Inv; +#if (defined(_MSC_VER) && _MSC_VER <= 1700) || \ + (defined(__ANDROID_API__) && __ANDROID_API__ < 18) + /* Visual Studio 2012 and Android API levels < 18 do not have the log2() + * function defined, so we use log() and a multiplication instead. */ + return log((double)v) * LOG_2_INV; #else - return log2(static_cast<double>(v)); + return log2((double)v); #endif } -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#endif // BROTLI_ENC_FAST_LOG_H_ +#endif /* BROTLI_ENC_FAST_LOG_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/find_match_length.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/find_match_length.h new file mode 100644 index 00000000000..41845312c45 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/find_match_length.h @@ -0,0 +1,80 @@ +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function to find maximal matching prefixes of strings. */ + +#ifndef BROTLI_ENC_FIND_MATCH_LENGTH_H_ +#define BROTLI_ENC_FIND_MATCH_LENGTH_H_ + +#include <brotli/types.h> +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* Separate implementation for little-endian 64-bit targets, for speed. */ +#if defined(__GNUC__) && defined(_LP64) && defined(BROTLI_LITTLE_ENDIAN) + +static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1, + const uint8_t* s2, + size_t limit) { + size_t matched = 0; + size_t limit2 = (limit >> 3) + 1; /* + 1 is for pre-decrement in while */ + while (BROTLI_PREDICT_TRUE(--limit2)) { + if (BROTLI_PREDICT_FALSE(BROTLI_UNALIGNED_LOAD64LE(s2) == + BROTLI_UNALIGNED_LOAD64LE(s1 + matched))) { + s2 += 8; + matched += 8; + } else { + uint64_t x = BROTLI_UNALIGNED_LOAD64LE(s2) ^ + BROTLI_UNALIGNED_LOAD64LE(s1 + matched); + size_t matching_bits = (size_t)__builtin_ctzll(x); + matched += matching_bits >> 3; + return matched; + } + } + limit = (limit & 7) + 1; /* + 1 is for pre-decrement in while */ + while (--limit) { + if (BROTLI_PREDICT_TRUE(s1[matched] == *s2)) { + ++s2; + ++matched; + } else { + return matched; + } + } + return matched; +} +#else +static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1, + const uint8_t* s2, + size_t limit) { + size_t matched = 0; + const uint8_t* s2_limit = s2 + limit; + const uint8_t* s2_ptr = s2; + /* Find out how long the match is. We loop over the data 32 bits at a + time until we find a 32-bit block that doesn't match; then we find + the first non-matching bit and use that to calculate the total + length of the match. */ + while (s2_ptr <= s2_limit - 4 && + BROTLI_UNALIGNED_LOAD32(s2_ptr) == + BROTLI_UNALIGNED_LOAD32(s1 + matched)) { + s2_ptr += 4; + matched += 4; + } + while ((s2_ptr < s2_limit) && (s1[matched] == *s2_ptr)) { + ++s2_ptr; + ++matched; + } + return matched; +} +#endif + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_FIND_MATCH_LENGTH_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash.h new file mode 100644 index 00000000000..c94edd3300e --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash.h @@ -0,0 +1,446 @@ +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* A (forgetful) hash table to the data seen by the compressor, to + help create backward references to previous data. */ + +#ifndef BROTLI_ENC_HASH_H_ +#define BROTLI_ENC_HASH_H_ + +#include <string.h> /* memcmp, memset */ + +#include "../common/constants.h" +#include "../common/dictionary.h" +#include <brotli/types.h> +#include "./fast_log.h" +#include "./find_match_length.h" +#include "./memory.h" +#include "./port.h" +#include "./quality.h" +#include "./static_dict.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* Pointer to hasher data. + * + * Excluding initialization and destruction, hasher can be passed as + * HasherHandle by value. + * + * Typically hasher data consists of 3 sections: + * * HasherCommon structure + * * private structured hasher data, depending on hasher type + * * private dynamic hasher data, depending on hasher type and parameters + */ +typedef uint8_t* HasherHandle; + +typedef struct { + BrotliHasherParams params; + + /* False if hasher needs to be "prepared" before use. */ + BROTLI_BOOL is_prepared_; + + size_t dict_num_lookups; + size_t dict_num_matches; +} HasherCommon; + +static BROTLI_INLINE HasherCommon* GetHasherCommon(HasherHandle handle) { + return (HasherCommon*)handle; +} + +#define score_t size_t + +static const uint32_t kCutoffTransformsCount = 10; +/* 0, 12, 27, 23, 42, 63, 56, 48, 59, 64 */ +/* 0+0, 4+8, 8+19, 12+11, 16+26, 20+43, 24+32, 28+20, 32+27, 36+28 */ +static const uint64_t kCutoffTransforms = + BROTLI_MAKE_UINT64_T(0x071B520A, 0xDA2D3200); + +typedef struct HasherSearchResult { + size_t len; + size_t distance; + score_t score; + int len_code_delta; /* == len_code - len */ +} HasherSearchResult; + +/* kHashMul32 multiplier has these properties: + * The multiplier must be odd. Otherwise we may lose the highest bit. + * No long streaks of ones or zeros. + * There is no effort to ensure that it is a prime, the oddity is enough + for this use. + * The number has been tuned heuristically against compression benchmarks. */ +static const uint32_t kHashMul32 = 0x1e35a7bd; +static const uint64_t kHashMul64 = BROTLI_MAKE_UINT64_T(0x1e35a7bd, 0x1e35a7bd); +static const uint64_t kHashMul64Long = + BROTLI_MAKE_UINT64_T(0x1fe35a7bU, 0xd3579bd3U); + +static BROTLI_INLINE uint32_t Hash14(const uint8_t* data) { + uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kHashMul32; + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return h >> (32 - 14); +} + +static BROTLI_INLINE void PrepareDistanceCache( + int* BROTLI_RESTRICT distance_cache, const int num_distances) { + if (num_distances > 4) { + int last_distance = distance_cache[0]; + distance_cache[4] = last_distance - 1; + distance_cache[5] = last_distance + 1; + distance_cache[6] = last_distance - 2; + distance_cache[7] = last_distance + 2; + distance_cache[8] = last_distance - 3; + distance_cache[9] = last_distance + 3; + if (num_distances > 10) { + int next_last_distance = distance_cache[1]; + distance_cache[10] = next_last_distance - 1; + distance_cache[11] = next_last_distance + 1; + distance_cache[12] = next_last_distance - 2; + distance_cache[13] = next_last_distance + 2; + distance_cache[14] = next_last_distance - 3; + distance_cache[15] = next_last_distance + 3; + } + } +} + +#define BROTLI_LITERAL_BYTE_SCORE 135 +#define BROTLI_DISTANCE_BIT_PENALTY 30 +/* Score must be positive after applying maximal penalty. */ +#define BROTLI_SCORE_BASE (BROTLI_DISTANCE_BIT_PENALTY * 8 * sizeof(size_t)) + +/* Usually, we always choose the longest backward reference. This function + allows for the exception of that rule. + + If we choose a backward reference that is further away, it will + usually be coded with more bits. We approximate this by assuming + log2(distance). If the distance can be expressed in terms of the + last four distances, we use some heuristic constants to estimate + the bits cost. For the first up to four literals we use the bit + cost of the literals from the literal cost model, after that we + use the average bit cost of the cost model. + + This function is used to sometimes discard a longer backward reference + when it is not much longer and the bit cost for encoding it is more + than the saved literals. + + backward_reference_offset MUST be positive. */ +static BROTLI_INLINE score_t BackwardReferenceScore( + size_t copy_length, size_t backward_reference_offset) { + return BROTLI_SCORE_BASE + BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length - + BROTLI_DISTANCE_BIT_PENALTY * Log2FloorNonZero(backward_reference_offset); +} + +static BROTLI_INLINE score_t BackwardReferenceScoreUsingLastDistance( + size_t copy_length) { + return BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length + + BROTLI_SCORE_BASE + 15; +} + +static BROTLI_INLINE score_t BackwardReferencePenaltyUsingLastDistance( + size_t distance_short_code) { + return (score_t)39 + ((0x1CA10 >> (distance_short_code & 0xE)) & 0xE); +} + +static BROTLI_INLINE BROTLI_BOOL TestStaticDictionaryItem( + const BrotliDictionary* dictionary, size_t item, const uint8_t* data, + size_t max_length, size_t max_backward, HasherSearchResult* out) { + size_t len; + size_t dist; + size_t offset; + size_t matchlen; + size_t backward; + score_t score; + len = item & 0x1F; + dist = item >> 5; + offset = dictionary->offsets_by_length[len] + len * dist; + if (len > max_length) { + return BROTLI_FALSE; + } + + matchlen = + FindMatchLengthWithLimit(data, &dictionary->data[offset], len); + if (matchlen + kCutoffTransformsCount <= len || matchlen == 0) { + return BROTLI_FALSE; + } + { + size_t cut = len - matchlen; + size_t transform_id = + (cut << 2) + (size_t)((kCutoffTransforms >> (cut * 6)) & 0x3F); + backward = max_backward + dist + 1 + + (transform_id << dictionary->size_bits_by_length[len]); + } + if (backward >= BROTLI_MAX_DISTANCE) { + return BROTLI_FALSE; + } + score = BackwardReferenceScore(matchlen, backward); + if (score < out->score) { + return BROTLI_FALSE; + } + out->len = matchlen; + out->len_code_delta = (int)len - (int)matchlen; + out->distance = backward; + out->score = score; + return BROTLI_TRUE; +} + +static BROTLI_INLINE void SearchInStaticDictionary( + const BrotliDictionary* dictionary, const uint16_t* dictionary_hash, + HasherHandle handle, const uint8_t* data, size_t max_length, + size_t max_backward, HasherSearchResult* out, BROTLI_BOOL shallow) { + size_t key; + size_t i; + HasherCommon* self = GetHasherCommon(handle); + if (self->dict_num_matches < (self->dict_num_lookups >> 7)) { + return; + } + key = Hash14(data) << 1; + for (i = 0; i < (shallow ? 1u : 2u); ++i, ++key) { + size_t item = dictionary_hash[key]; + self->dict_num_lookups++; + if (item != 0) { + BROTLI_BOOL item_matches = TestStaticDictionaryItem( + dictionary, item, data, max_length, max_backward, out); + if (item_matches) { + self->dict_num_matches++; + } + } + } +} + +typedef struct BackwardMatch { + uint32_t distance; + uint32_t length_and_code; +} BackwardMatch; + +static BROTLI_INLINE void InitBackwardMatch(BackwardMatch* self, + size_t dist, size_t len) { + self->distance = (uint32_t)dist; + self->length_and_code = (uint32_t)(len << 5); +} + +static BROTLI_INLINE void InitDictionaryBackwardMatch(BackwardMatch* self, + size_t dist, size_t len, size_t len_code) { + self->distance = (uint32_t)dist; + self->length_and_code = + (uint32_t)((len << 5) | (len == len_code ? 0 : len_code)); +} + +static BROTLI_INLINE size_t BackwardMatchLength(const BackwardMatch* self) { + return self->length_and_code >> 5; +} + +static BROTLI_INLINE size_t BackwardMatchLengthCode(const BackwardMatch* self) { + size_t code = self->length_and_code & 31; + return code ? code : BackwardMatchLength(self); +} + +#define EXPAND_CAT(a, b) CAT(a, b) +#define CAT(a, b) a ## b +#define FN(X) EXPAND_CAT(X, HASHER()) + +#define HASHER() H10 +#define BUCKET_BITS 17 +#define MAX_TREE_SEARCH_DEPTH 64 +#define MAX_TREE_COMP_LENGTH 128 +#include "./hash_to_binary_tree_inc.h" /* NOLINT(build/include) */ +#undef MAX_TREE_SEARCH_DEPTH +#undef MAX_TREE_COMP_LENGTH +#undef BUCKET_BITS +#undef HASHER +/* MAX_NUM_MATCHES == 64 + MAX_TREE_SEARCH_DEPTH */ +#define MAX_NUM_MATCHES_H10 128 + +/* For BUCKET_SWEEP == 1, enabling the dictionary lookup makes compression + a little faster (0.5% - 1%) and it compresses 0.15% better on small text + and HTML inputs. */ + +#define HASHER() H2 +#define BUCKET_BITS 16 +#define BUCKET_SWEEP 1 +#define HASH_LEN 5 +#define USE_DICTIONARY 1 +#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */ +#undef BUCKET_SWEEP +#undef USE_DICTIONARY +#undef HASHER + +#define HASHER() H3 +#define BUCKET_SWEEP 2 +#define USE_DICTIONARY 0 +#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */ +#undef USE_DICTIONARY +#undef BUCKET_SWEEP +#undef BUCKET_BITS +#undef HASHER + +#define HASHER() H4 +#define BUCKET_BITS 17 +#define BUCKET_SWEEP 4 +#define USE_DICTIONARY 1 +#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */ +#undef USE_DICTIONARY +#undef HASH_LEN +#undef BUCKET_SWEEP +#undef BUCKET_BITS +#undef HASHER + +#define HASHER() H5 +#include "./hash_longest_match_inc.h" /* NOLINT(build/include) */ +#undef HASHER + +#define HASHER() H6 +#include "./hash_longest_match64_inc.h" /* NOLINT(build/include) */ +#undef HASHER + +#define BUCKET_BITS 15 + +#define NUM_LAST_DISTANCES_TO_CHECK 4 +#define NUM_BANKS 1 +#define BANK_BITS 16 +#define HASHER() H40 +#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */ +#undef HASHER +#undef NUM_LAST_DISTANCES_TO_CHECK + +#define NUM_LAST_DISTANCES_TO_CHECK 10 +#define HASHER() H41 +#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */ +#undef HASHER +#undef NUM_LAST_DISTANCES_TO_CHECK +#undef NUM_BANKS +#undef BANK_BITS + +#define NUM_LAST_DISTANCES_TO_CHECK 16 +#define NUM_BANKS 512 +#define BANK_BITS 9 +#define HASHER() H42 +#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */ +#undef HASHER +#undef NUM_LAST_DISTANCES_TO_CHECK +#undef NUM_BANKS +#undef BANK_BITS + +#undef BUCKET_BITS + +#define HASHER() H54 +#define BUCKET_BITS 20 +#define BUCKET_SWEEP 4 +#define HASH_LEN 7 +#define USE_DICTIONARY 0 +#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */ +#undef USE_DICTIONARY +#undef HASH_LEN +#undef BUCKET_SWEEP +#undef BUCKET_BITS +#undef HASHER + +#undef FN +#undef CAT +#undef EXPAND_CAT + +#define FOR_GENERIC_HASHERS(H) H(2) H(3) H(4) H(5) H(6) H(40) H(41) H(42) H(54) +#define FOR_ALL_HASHERS(H) FOR_GENERIC_HASHERS(H) H(10) + +static BROTLI_INLINE void DestroyHasher( + MemoryManager* m, HasherHandle* handle) { + if (*handle == NULL) return; + BROTLI_FREE(m, *handle); +} + +static BROTLI_INLINE void HasherReset(HasherHandle handle) { + if (handle == NULL) return; + GetHasherCommon(handle)->is_prepared_ = BROTLI_FALSE; +} + +static BROTLI_INLINE size_t HasherSize(const BrotliEncoderParams* params, + BROTLI_BOOL one_shot, const size_t input_size) { + size_t result = sizeof(HasherCommon); + switch (params->hasher.type) { +#define SIZE_(N) \ + case N: \ + result += HashMemAllocInBytesH ## N(params, one_shot, input_size); \ + break; + FOR_ALL_HASHERS(SIZE_) +#undef SIZE_ + default: + break; + } + return result; +} + +static BROTLI_INLINE void HasherSetup(MemoryManager* m, HasherHandle* handle, + BrotliEncoderParams* params, const uint8_t* data, size_t position, + size_t input_size, BROTLI_BOOL is_last) { + HasherHandle self = NULL; + HasherCommon* common = NULL; + BROTLI_BOOL one_shot = (position == 0 && is_last); + if (*handle == NULL) { + size_t alloc_size; + ChooseHasher(params, ¶ms->hasher); + alloc_size = HasherSize(params, one_shot, input_size); + self = BROTLI_ALLOC(m, uint8_t, alloc_size); + if (BROTLI_IS_OOM(m)) return; + *handle = self; + common = GetHasherCommon(self); + common->params = params->hasher; + switch (common->params.type) { +#define INITIALIZE_(N) \ + case N: \ + InitializeH ## N(*handle, params); \ + break; + FOR_ALL_HASHERS(INITIALIZE_); +#undef INITIALIZE_ + default: + break; + } + HasherReset(*handle); + } + + self = *handle; + common = GetHasherCommon(self); + if (!common->is_prepared_) { + switch (common->params.type) { +#define PREPARE_(N) \ + case N: \ + PrepareH ## N(self, one_shot, input_size, data); \ + break; + FOR_ALL_HASHERS(PREPARE_) +#undef PREPARE_ + default: break; + } + if (position == 0) { + common->dict_num_lookups = 0; + common->dict_num_matches = 0; + } + common->is_prepared_ = BROTLI_TRUE; + } +} + +static BROTLI_INLINE void InitOrStitchToPreviousBlock( + MemoryManager* m, HasherHandle* handle, const uint8_t* data, size_t mask, + BrotliEncoderParams* params, size_t position, size_t input_size, + BROTLI_BOOL is_last) { + HasherHandle self; + HasherSetup(m, handle, params, data, position, input_size, is_last); + if (BROTLI_IS_OOM(m)) return; + self = *handle; + switch (GetHasherCommon(self)->params.type) { +#define INIT_(N) \ + case N: \ + StitchToPreviousBlockH ## N(self, input_size, position, data, mask); \ + break; + FOR_ALL_HASHERS(INIT_) +#undef INIT_ + default: break; + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_HASH_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_forgetful_chain_inc.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_forgetful_chain_inc.h new file mode 100644 index 00000000000..8f9ee7330de --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_forgetful_chain_inc.h @@ -0,0 +1,253 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN, BUCKET_BITS, NUM_BANKS, BANK_BITS, + NUM_LAST_DISTANCES_TO_CHECK */ + +/* A (forgetful) hash table to the data seen by the compressor, to + help create backward references to previous data. + + Hashes are stored in chains which are bucketed to groups. Group of chains + share a storage "bank". When more than "bank size" chain nodes are added, + oldest nodes are replaced; this way several chains may share a tail. */ + +#define HashForgetfulChain HASHER() + +#define BANK_SIZE (1 << BANK_BITS) + +/* Number of hash buckets. */ +#define BUCKET_SIZE (1 << BUCKET_BITS) + +#define CAPPED_CHAINS 0 + +static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; } +static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; } + +/* HashBytes is the function that chooses the bucket to place the address in.*/ +static BROTLI_INLINE size_t FN(HashBytes)(const uint8_t *data) { + const uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kHashMul32; + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return h >> (32 - BUCKET_BITS); +} + +typedef struct FN(Slot) { + uint16_t delta; + uint16_t next; +} FN(Slot); + +typedef struct FN(Bank) { + FN(Slot) slots[BANK_SIZE]; +} FN(Bank); + +typedef struct HashForgetfulChain { + uint32_t addr[BUCKET_SIZE]; + uint16_t head[BUCKET_SIZE]; + /* Truncated hash used for quick rejection of "distance cache" candidates. */ + uint8_t tiny_hash[65536]; + FN(Bank) banks[NUM_BANKS]; + uint16_t free_slot_idx[NUM_BANKS]; + size_t max_hops; +} HashForgetfulChain; + +static BROTLI_INLINE HashForgetfulChain* FN(Self)(HasherHandle handle) { + return (HashForgetfulChain*)&(GetHasherCommon(handle)[1]); +} + +static void FN(Initialize)( + HasherHandle handle, const BrotliEncoderParams* params) { + FN(Self)(handle)->max_hops = + (params->quality > 6 ? 7u : 8u) << (params->quality - 4); +} + +static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, + size_t input_size, const uint8_t* data) { + HashForgetfulChain* self = FN(Self)(handle); + /* Partial preparation is 100 times slower (per socket). */ + size_t partial_prepare_threshold = BUCKET_SIZE >> 6; + if (one_shot && input_size <= partial_prepare_threshold) { + size_t i; + for (i = 0; i < input_size; ++i) { + size_t bucket = FN(HashBytes)(&data[i]); + /* See InitEmpty comment. */ + self->addr[bucket] = 0xCCCCCCCC; + self->head[bucket] = 0xCCCC; + } + } else { + /* Fill |addr| array with 0xCCCCCCCC value. Because of wrapping, position + processed by hasher never reaches 3GB + 64M; this makes all new chains + to be terminated after the first node. */ + memset(self->addr, 0xCC, sizeof(self->addr)); + memset(self->head, 0, sizeof(self->head)); + } + memset(self->tiny_hash, 0, sizeof(self->tiny_hash)); + memset(self->free_slot_idx, 0, sizeof(self->free_slot_idx)); +} + +static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( + const BrotliEncoderParams* params, BROTLI_BOOL one_shot, + size_t input_size) { + BROTLI_UNUSED(params); + BROTLI_UNUSED(one_shot); + BROTLI_UNUSED(input_size); + return sizeof(HashForgetfulChain); +} + +/* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and prepend + node to corresponding chain; also update tiny_hash for current position. */ +static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle, + const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) { + HashForgetfulChain* self = FN(Self)(handle); + const size_t key = FN(HashBytes)(&data[ix & mask]); + const size_t bank = key & (NUM_BANKS - 1); + const size_t idx = self->free_slot_idx[bank]++ & (BANK_SIZE - 1); + size_t delta = ix - self->addr[key]; + self->tiny_hash[(uint16_t)ix] = (uint8_t)key; + if (delta > 0xFFFF) delta = CAPPED_CHAINS ? 0 : 0xFFFF; + self->banks[bank].slots[idx].delta = (uint16_t)delta; + self->banks[bank].slots[idx].next = self->head[key]; + self->addr[key] = (uint32_t)ix; + self->head[key] = (uint16_t)idx; +} + +static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, + const uint8_t *data, const size_t mask, const size_t ix_start, + const size_t ix_end) { + size_t i; + for (i = ix_start; i < ix_end; ++i) { + FN(Store)(handle, data, mask, i); + } +} + +static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, + size_t num_bytes, size_t position, const uint8_t* ringbuffer, + size_t ring_buffer_mask) { + if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) { + /* Prepare the hashes for three last bytes of the last write. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 3); + FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 2); + FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 1); + } +} + +static BROTLI_INLINE void FN(PrepareDistanceCache)( + HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { + BROTLI_UNUSED(handle); + PrepareDistanceCache(distance_cache, NUM_LAST_DISTANCES_TO_CHECK); +} + +/* Find a longest backward match of &data[cur_ix] up to the length of + max_length and stores the position cur_ix in the hash table. + + REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache + values; if this method is invoked repeatedly with the same distance + cache values, it is enough to invoke FN(PrepareDistanceCache) once. + + Does not look for matches longer than max_length. + Does not look for matches further away than max_backward. + Writes the best match into |out|. + |out|->score is updated only if a better match is found. */ +static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle, + const BrotliDictionary* dictionary, const uint16_t* dictionary_hash, + const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, + const int* BROTLI_RESTRICT distance_cache, + const size_t cur_ix, const size_t max_length, const size_t max_backward, + const size_t gap, HasherSearchResult* BROTLI_RESTRICT out) { + HashForgetfulChain* self = FN(Self)(handle); + const size_t cur_ix_masked = cur_ix & ring_buffer_mask; + /* Don't accept a short copy from far away. */ + score_t min_score = out->score; + score_t best_score = out->score; + size_t best_len = out->len; + size_t i; + const size_t key = FN(HashBytes)(&data[cur_ix_masked]); + const uint8_t tiny_hash = (uint8_t)(key); + out->len = 0; + out->len_code_delta = 0; + /* Try last distance first. */ + for (i = 0; i < NUM_LAST_DISTANCES_TO_CHECK; ++i) { + const size_t backward = (size_t)distance_cache[i]; + size_t prev_ix = (cur_ix - backward); + /* For distance code 0 we want to consider 2-byte matches. */ + if (i > 0 && self->tiny_hash[(uint16_t)prev_ix] != tiny_hash) continue; + if (prev_ix >= cur_ix || backward > max_backward) { + continue; + } + prev_ix &= ring_buffer_mask; + { + const size_t len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 2) { + score_t score = BackwardReferenceScoreUsingLastDistance(len); + if (best_score < score) { + if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i); + if (best_score < score) { + best_score = score; + best_len = len; + out->len = best_len; + out->distance = backward; + out->score = best_score; + } + } + } + } + } + { + const size_t bank = key & (NUM_BANKS - 1); + size_t backward = 0; + size_t hops = self->max_hops; + size_t delta = cur_ix - self->addr[key]; + size_t slot = self->head[key]; + while (hops--) { + size_t prev_ix; + size_t last = slot; + backward += delta; + if (backward > max_backward || (CAPPED_CHAINS && !delta)) break; + prev_ix = (cur_ix - backward) & ring_buffer_mask; + slot = self->banks[bank].slots[last].next; + delta = self->banks[bank].slots[last].delta; + if (cur_ix_masked + best_len > ring_buffer_mask || + prev_ix + best_len > ring_buffer_mask || + data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { + continue; + } + { + const size_t len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 4) { + /* Comparing for >= 3 does not change the semantics, but just saves + for a few unnecessary binary logarithms in backward reference + score, since we are not interested in such short matches. */ + score_t score = BackwardReferenceScore(len, backward); + if (best_score < score) { + best_score = score; + best_len = len; + out->len = best_len; + out->distance = backward; + out->score = best_score; + } + } + } + } + FN(Store)(handle, data, ring_buffer_mask, cur_ix); + } + if (out->score == min_score) { + SearchInStaticDictionary(dictionary, dictionary_hash, + handle, &data[cur_ix_masked], max_length, max_backward + gap, out, + BROTLI_FALSE); + } +} + +#undef BANK_SIZE +#undef BUCKET_SIZE +#undef CAPPED_CHAINS + +#undef HashForgetfulChain diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_longest_match64_inc.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_longest_match64_inc.h new file mode 100644 index 00000000000..6b0697b2675 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_longest_match64_inc.h @@ -0,0 +1,266 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN */ + +/* A (forgetful) hash table to the data seen by the compressor, to + help create backward references to previous data. + + This is a hash map of fixed size (bucket_size_) to a ring buffer of + fixed size (block_size_). The ring buffer contains the last block_size_ + index positions of the given hash key in the compressed data. */ + +#define HashLongestMatch HASHER() + +static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; } +static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; } + +/* HashBytes is the function that chooses the bucket to place the address in. */ +static BROTLI_INLINE uint32_t FN(HashBytes)(const uint8_t *data, + const uint64_t mask, + const int shift) { + const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(data) & mask) * kHashMul64Long; + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return (uint32_t)(h >> shift); +} + +typedef struct HashLongestMatch { + /* Number of hash buckets. */ + size_t bucket_size_; + /* Only block_size_ newest backward references are kept, + and the older are forgotten. */ + size_t block_size_; + /* Left-shift for computing hash bucket index from hash value. */ + int hash_shift_; + /* Mask for selecting the next 4-8 bytes of input */ + uint64_t hash_mask_; + /* Mask for accessing entries in a block (in a ring-buffer manner). */ + uint32_t block_mask_; + + /* --- Dynamic size members --- */ + + /* Number of entries in a particular bucket. */ + /* uint16_t num[bucket_size]; */ + + /* Buckets containing block_size_ of backward references. */ + /* uint32_t* buckets[bucket_size * block_size]; */ +} HashLongestMatch; + +static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) { + return (HashLongestMatch*)&(GetHasherCommon(handle)[1]); +} + +static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) { + return (uint16_t*)(&self[1]); +} + +static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) { + return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]); +} + +static void FN(Initialize)( + HasherHandle handle, const BrotliEncoderParams* params) { + HasherCommon* common = GetHasherCommon(handle); + HashLongestMatch* self = FN(Self)(handle); + BROTLI_UNUSED(params); + self->hash_shift_ = 64 - common->params.bucket_bits; + self->hash_mask_ = (~((uint64_t)0U)) >> (64 - 8 * common->params.hash_len); + self->bucket_size_ = (size_t)1 << common->params.bucket_bits; + self->block_size_ = (size_t)1 << common->params.block_bits; + self->block_mask_ = (uint32_t)(self->block_size_ - 1); +} + +static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, + size_t input_size, const uint8_t* data) { + HashLongestMatch* self = FN(Self)(handle); + uint16_t* num = FN(Num)(self); + /* Partial preparation is 100 times slower (per socket). */ + size_t partial_prepare_threshold = self->bucket_size_ >> 6; + if (one_shot && input_size <= partial_prepare_threshold) { + size_t i; + for (i = 0; i < input_size; ++i) { + const uint32_t key = FN(HashBytes)(&data[i], self->hash_mask_, + self->hash_shift_); + num[key] = 0; + } + } else { + memset(num, 0, self->bucket_size_ * sizeof(num[0])); + } +} + +static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( + const BrotliEncoderParams* params, BROTLI_BOOL one_shot, + size_t input_size) { + size_t bucket_size = (size_t)1 << params->hasher.bucket_bits; + size_t block_size = (size_t)1 << params->hasher.block_bits; + BROTLI_UNUSED(one_shot); + BROTLI_UNUSED(input_size); + return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size); +} + +/* Look at 4 bytes at &data[ix & mask]. + Compute a hash from these, and store the value of ix at that position. */ +static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t *data, + const size_t mask, const size_t ix) { + HashLongestMatch* self = FN(Self)(handle); + uint16_t* num = FN(Num)(self); + const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_mask_, + self->hash_shift_); + const size_t minor_ix = num[key] & self->block_mask_; + const size_t offset = + minor_ix + (key << GetHasherCommon(handle)->params.block_bits); + FN(Buckets)(self)[offset] = (uint32_t)ix; + ++num[key]; +} + +static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, + const uint8_t *data, const size_t mask, const size_t ix_start, + const size_t ix_end) { + size_t i; + for (i = ix_start; i < ix_end; ++i) { + FN(Store)(handle, data, mask, i); + } +} + +static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, + size_t num_bytes, size_t position, const uint8_t* ringbuffer, + size_t ringbuffer_mask) { + if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) { + /* Prepare the hashes for three last bytes of the last write. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3); + FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2); + FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1); + } +} + +static BROTLI_INLINE void FN(PrepareDistanceCache)( + HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { + PrepareDistanceCache(distance_cache, + GetHasherCommon(handle)->params.num_last_distances_to_check); +} + +/* Find a longest backward match of &data[cur_ix] up to the length of + max_length and stores the position cur_ix in the hash table. + + REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache + values; if this method is invoked repeatedly with the same distance + cache values, it is enough to invoke FN(PrepareDistanceCache) once. + + Does not look for matches longer than max_length. + Does not look for matches further away than max_backward. + Writes the best match into |out|. + |out|->score is updated only if a better match is found. */ +static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle, + const BrotliDictionary* dictionary, const uint16_t* dictionary_hash, + const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, + const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix, + const size_t max_length, const size_t max_backward, const size_t gap, + HasherSearchResult* BROTLI_RESTRICT out) { + HasherCommon* common = GetHasherCommon(handle); + HashLongestMatch* self = FN(Self)(handle); + uint16_t* num = FN(Num)(self); + uint32_t* buckets = FN(Buckets)(self); + const size_t cur_ix_masked = cur_ix & ring_buffer_mask; + /* Don't accept a short copy from far away. */ + score_t min_score = out->score; + score_t best_score = out->score; + size_t best_len = out->len; + size_t i; + out->len = 0; + out->len_code_delta = 0; + /* Try last distance first. */ + for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i) { + const size_t backward = (size_t)distance_cache[i]; + size_t prev_ix = (size_t)(cur_ix - backward); + if (prev_ix >= cur_ix) { + continue; + } + if (BROTLI_PREDICT_FALSE(backward > max_backward)) { + continue; + } + prev_ix &= ring_buffer_mask; + + if (cur_ix_masked + best_len > ring_buffer_mask || + prev_ix + best_len > ring_buffer_mask || + data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { + continue; + } + { + const size_t len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 3 || (len == 2 && i < 2)) { + /* Comparing for >= 2 does not change the semantics, but just saves for + a few unnecessary binary logarithms in backward reference score, + since we are not interested in such short matches. */ + score_t score = BackwardReferenceScoreUsingLastDistance(len); + if (best_score < score) { + if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i); + if (best_score < score) { + best_score = score; + best_len = len; + out->len = best_len; + out->distance = backward; + out->score = best_score; + } + } + } + } + } + { + const uint32_t key = FN(HashBytes)( + &data[cur_ix_masked], self->hash_mask_, self->hash_shift_); + uint32_t* BROTLI_RESTRICT bucket = + &buckets[key << common->params.block_bits]; + const size_t down = + (num[key] > self->block_size_) ? + (num[key] - self->block_size_) : 0u; + for (i = num[key]; i > down;) { + size_t prev_ix = bucket[--i & self->block_mask_]; + const size_t backward = cur_ix - prev_ix; + if (BROTLI_PREDICT_FALSE(backward > max_backward)) { + break; + } + prev_ix &= ring_buffer_mask; + if (cur_ix_masked + best_len > ring_buffer_mask || + prev_ix + best_len > ring_buffer_mask || + data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { + continue; + } + { + const size_t len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 4) { + /* Comparing for >= 3 does not change the semantics, but just saves + for a few unnecessary binary logarithms in backward reference + score, since we are not interested in such short matches. */ + score_t score = BackwardReferenceScore(len, backward); + if (best_score < score) { + best_score = score; + best_len = len; + out->len = best_len; + out->distance = backward; + out->score = best_score; + } + } + } + } + bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix; + ++num[key]; + } + if (min_score == out->score) { + SearchInStaticDictionary(dictionary, dictionary_hash, + handle, &data[cur_ix_masked], max_length, max_backward + gap, out, + BROTLI_FALSE); + } +} + +#undef HashLongestMatch diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_longest_match_inc.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_longest_match_inc.h new file mode 100644 index 00000000000..dc5335f8edb --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_longest_match_inc.h @@ -0,0 +1,258 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN */ + +/* A (forgetful) hash table to the data seen by the compressor, to + help create backward references to previous data. + + This is a hash map of fixed size (bucket_size_) to a ring buffer of + fixed size (block_size_). The ring buffer contains the last block_size_ + index positions of the given hash key in the compressed data. */ + +#define HashLongestMatch HASHER() + +static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; } +static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; } + +/* HashBytes is the function that chooses the bucket to place the address in. */ +static uint32_t FN(HashBytes)(const uint8_t *data, const int shift) { + uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kHashMul32; + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return (uint32_t)(h >> shift); +} + +typedef struct HashLongestMatch { + /* Number of hash buckets. */ + size_t bucket_size_; + /* Only block_size_ newest backward references are kept, + and the older are forgotten. */ + size_t block_size_; + /* Left-shift for computing hash bucket index from hash value. */ + int hash_shift_; + /* Mask for accessing entries in a block (in a ring-buffer manner). */ + uint32_t block_mask_; + + /* --- Dynamic size members --- */ + + /* Number of entries in a particular bucket. */ + /* uint16_t num[bucket_size]; */ + + /* Buckets containing block_size_ of backward references. */ + /* uint32_t* buckets[bucket_size * block_size]; */ +} HashLongestMatch; + +static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) { + return (HashLongestMatch*)&(GetHasherCommon(handle)[1]); +} + +static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) { + return (uint16_t*)(&self[1]); +} + +static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) { + return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]); +} + +static void FN(Initialize)( + HasherHandle handle, const BrotliEncoderParams* params) { + HasherCommon* common = GetHasherCommon(handle); + HashLongestMatch* self = FN(Self)(handle); + BROTLI_UNUSED(params); + self->hash_shift_ = 32 - common->params.bucket_bits; + self->bucket_size_ = (size_t)1 << common->params.bucket_bits; + self->block_size_ = (size_t)1 << common->params.block_bits; + self->block_mask_ = (uint32_t)(self->block_size_ - 1); +} + +static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, + size_t input_size, const uint8_t* data) { + HashLongestMatch* self = FN(Self)(handle); + uint16_t* num = FN(Num)(self); + /* Partial preparation is 100 times slower (per socket). */ + size_t partial_prepare_threshold = self->bucket_size_ >> 6; + if (one_shot && input_size <= partial_prepare_threshold) { + size_t i; + for (i = 0; i < input_size; ++i) { + const uint32_t key = FN(HashBytes)(&data[i], self->hash_shift_); + num[key] = 0; + } + } else { + memset(num, 0, self->bucket_size_ * sizeof(num[0])); + } +} + +static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( + const BrotliEncoderParams* params, BROTLI_BOOL one_shot, + size_t input_size) { + size_t bucket_size = (size_t)1 << params->hasher.bucket_bits; + size_t block_size = (size_t)1 << params->hasher.block_bits; + BROTLI_UNUSED(one_shot); + BROTLI_UNUSED(input_size); + return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size); +} + +/* Look at 4 bytes at &data[ix & mask]. + Compute a hash from these, and store the value of ix at that position. */ +static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data, + const size_t mask, const size_t ix) { + HashLongestMatch* self = FN(Self)(handle); + uint16_t* num = FN(Num)(self); + const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_shift_); + const size_t minor_ix = num[key] & self->block_mask_; + const size_t offset = + minor_ix + (key << GetHasherCommon(handle)->params.block_bits); + FN(Buckets)(self)[offset] = (uint32_t)ix; + ++num[key]; +} + +static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, + const uint8_t *data, const size_t mask, const size_t ix_start, + const size_t ix_end) { + size_t i; + for (i = ix_start; i < ix_end; ++i) { + FN(Store)(handle, data, mask, i); + } +} + +static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, + size_t num_bytes, size_t position, const uint8_t* ringbuffer, + size_t ringbuffer_mask) { + if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) { + /* Prepare the hashes for three last bytes of the last write. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3); + FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2); + FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1); + } +} + +static BROTLI_INLINE void FN(PrepareDistanceCache)( + HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { + PrepareDistanceCache(distance_cache, + GetHasherCommon(handle)->params.num_last_distances_to_check); +} + +/* Find a longest backward match of &data[cur_ix] up to the length of + max_length and stores the position cur_ix in the hash table. + + REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache + values; if this method is invoked repeatedly with the same distance + cache values, it is enough to invoke FN(PrepareDistanceCache) once. + + Does not look for matches longer than max_length. + Does not look for matches further away than max_backward. + Writes the best match into |out|. + |out|->score is updated only if a better match is found. */ +static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle, + const BrotliDictionary* dictionary, const uint16_t* dictionary_hash, + const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, + const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix, + const size_t max_length, const size_t max_backward, const size_t gap, + HasherSearchResult* BROTLI_RESTRICT out) { + HasherCommon* common = GetHasherCommon(handle); + HashLongestMatch* self = FN(Self)(handle); + uint16_t* num = FN(Num)(self); + uint32_t* buckets = FN(Buckets)(self); + const size_t cur_ix_masked = cur_ix & ring_buffer_mask; + /* Don't accept a short copy from far away. */ + score_t min_score = out->score; + score_t best_score = out->score; + size_t best_len = out->len; + size_t i; + out->len = 0; + out->len_code_delta = 0; + /* Try last distance first. */ + for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i) { + const size_t backward = (size_t)distance_cache[i]; + size_t prev_ix = (size_t)(cur_ix - backward); + if (prev_ix >= cur_ix) { + continue; + } + if (BROTLI_PREDICT_FALSE(backward > max_backward)) { + continue; + } + prev_ix &= ring_buffer_mask; + + if (cur_ix_masked + best_len > ring_buffer_mask || + prev_ix + best_len > ring_buffer_mask || + data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { + continue; + } + { + const size_t len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 3 || (len == 2 && i < 2)) { + /* Comparing for >= 2 does not change the semantics, but just saves for + a few unnecessary binary logarithms in backward reference score, + since we are not interested in such short matches. */ + score_t score = BackwardReferenceScoreUsingLastDistance(len); + if (best_score < score) { + if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i); + if (best_score < score) { + best_score = score; + best_len = len; + out->len = best_len; + out->distance = backward; + out->score = best_score; + } + } + } + } + } + { + const uint32_t key = + FN(HashBytes)(&data[cur_ix_masked], self->hash_shift_); + uint32_t* BROTLI_RESTRICT bucket = + &buckets[key << common->params.block_bits]; + const size_t down = + (num[key] > self->block_size_) ? (num[key] - self->block_size_) : 0u; + for (i = num[key]; i > down;) { + size_t prev_ix = bucket[--i & self->block_mask_]; + const size_t backward = cur_ix - prev_ix; + if (BROTLI_PREDICT_FALSE(backward > max_backward)) { + break; + } + prev_ix &= ring_buffer_mask; + if (cur_ix_masked + best_len > ring_buffer_mask || + prev_ix + best_len > ring_buffer_mask || + data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { + continue; + } + { + const size_t len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 4) { + /* Comparing for >= 3 does not change the semantics, but just saves + for a few unnecessary binary logarithms in backward reference + score, since we are not interested in such short matches. */ + score_t score = BackwardReferenceScore(len, backward); + if (best_score < score) { + best_score = score; + best_len = len; + out->len = best_len; + out->distance = backward; + out->score = best_score; + } + } + } + } + bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix; + ++num[key]; + } + if (min_score == out->score) { + SearchInStaticDictionary(dictionary, dictionary_hash, + handle, &data[cur_ix_masked], max_length, max_backward + gap, out, + BROTLI_FALSE); + } +} + +#undef HashLongestMatch diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_longest_match_quickly_inc.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_longest_match_quickly_inc.h new file mode 100644 index 00000000000..2c78351112a --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_longest_match_quickly_inc.h @@ -0,0 +1,234 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN, BUCKET_BITS, BUCKET_SWEEP, HASH_LEN, + USE_DICTIONARY + */ + +#define HashLongestMatchQuickly HASHER() + +#define BUCKET_SIZE (1 << BUCKET_BITS) + +#define HASH_MAP_SIZE (4 << BUCKET_BITS) + +static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; } +static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; } + +/* HashBytes is the function that chooses the bucket to place + the address in. The HashLongestMatch and HashLongestMatchQuickly + classes have separate, different implementations of hashing. */ +static uint32_t FN(HashBytes)(const uint8_t* data) { + const uint64_t h = ((BROTLI_UNALIGNED_LOAD64LE(data) << (64 - 8 * HASH_LEN)) * + kHashMul64); + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return (uint32_t)(h >> (64 - BUCKET_BITS)); +} + +/* A (forgetful) hash table to the data seen by the compressor, to + help create backward references to previous data. + + This is a hash map of fixed size (BUCKET_SIZE). Starting from the + given index, BUCKET_SWEEP buckets are used to store values of a key. */ +typedef struct HashLongestMatchQuickly { + uint32_t buckets_[BUCKET_SIZE + BUCKET_SWEEP]; +} HashLongestMatchQuickly; + +static BROTLI_INLINE HashLongestMatchQuickly* FN(Self)(HasherHandle handle) { + return (HashLongestMatchQuickly*)&(GetHasherCommon(handle)[1]); +} + +static void FN(Initialize)( + HasherHandle handle, const BrotliEncoderParams* params) { + BROTLI_UNUSED(handle); + BROTLI_UNUSED(params); +} + +static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, + size_t input_size, const uint8_t* data) { + HashLongestMatchQuickly* self = FN(Self)(handle); + /* Partial preparation is 100 times slower (per socket). */ + size_t partial_prepare_threshold = HASH_MAP_SIZE >> 7; + if (one_shot && input_size <= partial_prepare_threshold) { + size_t i; + for (i = 0; i < input_size; ++i) { + const uint32_t key = FN(HashBytes)(&data[i]); + memset(&self->buckets_[key], 0, BUCKET_SWEEP * sizeof(self->buckets_[0])); + } + } else { + /* It is not strictly necessary to fill this buffer here, but + not filling will make the results of the compression stochastic + (but correct). This is because random data would cause the + system to find accidentally good backward references here and there. */ + memset(&self->buckets_[0], 0, sizeof(self->buckets_)); + } +} + +static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( + const BrotliEncoderParams* params, BROTLI_BOOL one_shot, + size_t input_size) { + BROTLI_UNUSED(params); + BROTLI_UNUSED(one_shot); + BROTLI_UNUSED(input_size); + return sizeof(HashLongestMatchQuickly); +} + +/* Look at 5 bytes at &data[ix & mask]. + Compute a hash from these, and store the value somewhere within + [ix .. ix+3]. */ +static BROTLI_INLINE void FN(Store)(HasherHandle handle, + const uint8_t *data, const size_t mask, const size_t ix) { + const uint32_t key = FN(HashBytes)(&data[ix & mask]); + /* Wiggle the value with the bucket sweep range. */ + const uint32_t off = (ix >> 3) % BUCKET_SWEEP; + FN(Self)(handle)->buckets_[key + off] = (uint32_t)ix; +} + +static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, + const uint8_t *data, const size_t mask, const size_t ix_start, + const size_t ix_end) { + size_t i; + for (i = ix_start; i < ix_end; ++i) { + FN(Store)(handle, data, mask, i); + } +} + +static BROTLI_INLINE void FN(StitchToPreviousBlock)( + HasherHandle handle, size_t num_bytes, size_t position, + const uint8_t* ringbuffer, size_t ringbuffer_mask) { + if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) { + /* Prepare the hashes for three last bytes of the last write. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3); + FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2); + FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1); + } +} + +static BROTLI_INLINE void FN(PrepareDistanceCache)( + HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { + BROTLI_UNUSED(handle); + BROTLI_UNUSED(distance_cache); +} + +/* Find a longest backward match of &data[cur_ix & ring_buffer_mask] + up to the length of max_length and stores the position cur_ix in the + hash table. + + Does not look for matches longer than max_length. + Does not look for matches further away than max_backward. + Writes the best match into |out|. + |out|->score is updated only if a better match is found. */ +static BROTLI_INLINE void FN(FindLongestMatch)( + HasherHandle handle, const BrotliDictionary* dictionary, + const uint16_t* dictionary_hash, const uint8_t* BROTLI_RESTRICT data, + const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache, + const size_t cur_ix, const size_t max_length, const size_t max_backward, + const size_t gap, HasherSearchResult* BROTLI_RESTRICT out) { + HashLongestMatchQuickly* self = FN(Self)(handle); + const size_t best_len_in = out->len; + const size_t cur_ix_masked = cur_ix & ring_buffer_mask; + const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]); + int compare_char = data[cur_ix_masked + best_len_in]; + score_t min_score = out->score; + score_t best_score = out->score; + size_t best_len = best_len_in; + size_t cached_backward = (size_t)distance_cache[0]; + size_t prev_ix = cur_ix - cached_backward; + out->len_code_delta = 0; + if (prev_ix < cur_ix) { + prev_ix &= (uint32_t)ring_buffer_mask; + if (compare_char == data[prev_ix + best_len]) { + size_t len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 4) { + const score_t score = BackwardReferenceScoreUsingLastDistance(len); + if (best_score < score) { + best_score = score; + best_len = len; + out->len = len; + out->distance = cached_backward; + out->score = best_score; + compare_char = data[cur_ix_masked + best_len]; + if (BUCKET_SWEEP == 1) { + self->buckets_[key] = (uint32_t)cur_ix; + return; + } + } + } + } + } + if (BUCKET_SWEEP == 1) { + size_t backward; + size_t len; + /* Only one to look for, don't bother to prepare for a loop. */ + prev_ix = self->buckets_[key]; + self->buckets_[key] = (uint32_t)cur_ix; + backward = cur_ix - prev_ix; + prev_ix &= (uint32_t)ring_buffer_mask; + if (compare_char != data[prev_ix + best_len_in]) { + return; + } + if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) { + return; + } + len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 4) { + const score_t score = BackwardReferenceScore(len, backward); + if (best_score < score) { + out->len = len; + out->distance = backward; + out->score = score; + return; + } + } + } else { + uint32_t *bucket = self->buckets_ + key; + int i; + prev_ix = *bucket++; + for (i = 0; i < BUCKET_SWEEP; ++i, prev_ix = *bucket++) { + const size_t backward = cur_ix - prev_ix; + size_t len; + prev_ix &= (uint32_t)ring_buffer_mask; + if (compare_char != data[prev_ix + best_len]) { + continue; + } + if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) { + continue; + } + len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 4) { + const score_t score = BackwardReferenceScore(len, backward); + if (best_score < score) { + best_score = score; + best_len = len; + out->len = best_len; + out->distance = backward; + out->score = score; + compare_char = data[cur_ix_masked + best_len]; + } + } + } + } + if (USE_DICTIONARY && min_score == out->score) { + SearchInStaticDictionary(dictionary, dictionary_hash, + handle, &data[cur_ix_masked], max_length, max_backward + gap, out, + BROTLI_TRUE); + } + self->buckets_[key + ((cur_ix >> 3) % BUCKET_SWEEP)] = (uint32_t)cur_ix; +} + +#undef HASH_MAP_SIZE +#undef BUCKET_SIZE + +#undef HashLongestMatchQuickly diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_to_binary_tree_inc.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_to_binary_tree_inc.h new file mode 100644 index 00000000000..30c71b52f88 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/hash_to_binary_tree_inc.h @@ -0,0 +1,326 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN, BUCKET_BITS, MAX_TREE_COMP_LENGTH, + MAX_TREE_SEARCH_DEPTH */ + +/* A (forgetful) hash table where each hash bucket contains a binary tree of + sequences whose first 4 bytes share the same hash code. + Each sequence is MAX_TREE_COMP_LENGTH long and is identified by its starting + position in the input data. The binary tree is sorted by the lexicographic + order of the sequences, and it is also a max-heap with respect to the + starting positions. */ + +#define HashToBinaryTree HASHER() + +#define BUCKET_SIZE (1 << BUCKET_BITS) + +static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; } +static BROTLI_INLINE size_t FN(StoreLookahead)(void) { + return MAX_TREE_COMP_LENGTH; +} + +static uint32_t FN(HashBytes)(const uint8_t *data) { + uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kHashMul32; + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return h >> (32 - BUCKET_BITS); +} + +typedef struct HashToBinaryTree { + /* The window size minus 1 */ + size_t window_mask_; + + /* Hash table that maps the 4-byte hashes of the sequence to the last + position where this hash was found, which is the root of the binary + tree of sequences that share this hash bucket. */ + uint32_t buckets_[BUCKET_SIZE]; + + /* A position used to mark a non-existent sequence, i.e. a tree is empty if + its root is at invalid_pos_ and a node is a leaf if both its children + are at invalid_pos_. */ + uint32_t invalid_pos_; + + /* --- Dynamic size members --- */ + + /* The union of the binary trees of each hash bucket. The root of the tree + corresponding to a hash is a sequence starting at buckets_[hash] and + the left and right children of a sequence starting at pos are + forest_[2 * pos] and forest_[2 * pos + 1]. */ + /* uint32_t forest[2 * num_nodes] */ +} HashToBinaryTree; + +static BROTLI_INLINE HashToBinaryTree* FN(Self)(HasherHandle handle) { + return (HashToBinaryTree*)&(GetHasherCommon(handle)[1]); +} + +static BROTLI_INLINE uint32_t* FN(Forest)(HashToBinaryTree* self) { + return (uint32_t*)(&self[1]); +} + +static void FN(Initialize)( + HasherHandle handle, const BrotliEncoderParams* params) { + HashToBinaryTree* self = FN(Self)(handle); + self->window_mask_ = (1u << params->lgwin) - 1u; + self->invalid_pos_ = (uint32_t)(0 - self->window_mask_); +} + +static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, + size_t input_size, const uint8_t* data) { + HashToBinaryTree* self = FN(Self)(handle); + uint32_t invalid_pos = self->invalid_pos_; + uint32_t i; + BROTLI_UNUSED(data); + BROTLI_UNUSED(one_shot); + BROTLI_UNUSED(input_size); + for (i = 0; i < BUCKET_SIZE; i++) { + self->buckets_[i] = invalid_pos; + } +} + +static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( + const BrotliEncoderParams* params, BROTLI_BOOL one_shot, + size_t input_size) { + size_t num_nodes = (size_t)1 << params->lgwin; + if (one_shot && input_size < num_nodes) { + num_nodes = input_size; + } + return sizeof(HashToBinaryTree) + 2 * sizeof(uint32_t) * num_nodes; +} + +static BROTLI_INLINE size_t FN(LeftChildIndex)(HashToBinaryTree* self, + const size_t pos) { + return 2 * (pos & self->window_mask_); +} + +static BROTLI_INLINE size_t FN(RightChildIndex)(HashToBinaryTree* self, + const size_t pos) { + return 2 * (pos & self->window_mask_) + 1; +} + +/* Stores the hash of the next 4 bytes and in a single tree-traversal, the + hash bucket's binary tree is searched for matches and is re-rooted at the + current position. + + If less than MAX_TREE_COMP_LENGTH data is available, the hash bucket of the + current position is searched for matches, but the state of the hash table + is not changed, since we can not know the final sorting order of the + current (incomplete) sequence. + + This function must be called with increasing cur_ix positions. */ +static BROTLI_INLINE BackwardMatch* FN(StoreAndFindMatches)( + HashToBinaryTree* self, const uint8_t* const BROTLI_RESTRICT data, + const size_t cur_ix, const size_t ring_buffer_mask, const size_t max_length, + const size_t max_backward, size_t* const BROTLI_RESTRICT best_len, + BackwardMatch* BROTLI_RESTRICT matches) { + const size_t cur_ix_masked = cur_ix & ring_buffer_mask; + const size_t max_comp_len = + BROTLI_MIN(size_t, max_length, MAX_TREE_COMP_LENGTH); + const BROTLI_BOOL should_reroot_tree = + TO_BROTLI_BOOL(max_length >= MAX_TREE_COMP_LENGTH); + const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]); + uint32_t* forest = FN(Forest)(self); + size_t prev_ix = self->buckets_[key]; + /* The forest index of the rightmost node of the left subtree of the new + root, updated as we traverse and re-root the tree of the hash bucket. */ + size_t node_left = FN(LeftChildIndex)(self, cur_ix); + /* The forest index of the leftmost node of the right subtree of the new + root, updated as we traverse and re-root the tree of the hash bucket. */ + size_t node_right = FN(RightChildIndex)(self, cur_ix); + /* The match length of the rightmost node of the left subtree of the new + root, updated as we traverse and re-root the tree of the hash bucket. */ + size_t best_len_left = 0; + /* The match length of the leftmost node of the right subtree of the new + root, updated as we traverse and re-root the tree of the hash bucket. */ + size_t best_len_right = 0; + size_t depth_remaining; + if (should_reroot_tree) { + self->buckets_[key] = (uint32_t)cur_ix; + } + for (depth_remaining = MAX_TREE_SEARCH_DEPTH; ; --depth_remaining) { + const size_t backward = cur_ix - prev_ix; + const size_t prev_ix_masked = prev_ix & ring_buffer_mask; + if (backward == 0 || backward > max_backward || depth_remaining == 0) { + if (should_reroot_tree) { + forest[node_left] = self->invalid_pos_; + forest[node_right] = self->invalid_pos_; + } + break; + } + { + const size_t cur_len = BROTLI_MIN(size_t, best_len_left, best_len_right); + size_t len; + assert(cur_len <= MAX_TREE_COMP_LENGTH); + len = cur_len + + FindMatchLengthWithLimit(&data[cur_ix_masked + cur_len], + &data[prev_ix_masked + cur_len], + max_length - cur_len); + assert(0 == memcmp(&data[cur_ix_masked], &data[prev_ix_masked], len)); + if (matches && len > *best_len) { + *best_len = len; + InitBackwardMatch(matches++, backward, len); + } + if (len >= max_comp_len) { + if (should_reroot_tree) { + forest[node_left] = forest[FN(LeftChildIndex)(self, prev_ix)]; + forest[node_right] = forest[FN(RightChildIndex)(self, prev_ix)]; + } + break; + } + if (data[cur_ix_masked + len] > data[prev_ix_masked + len]) { + best_len_left = len; + if (should_reroot_tree) { + forest[node_left] = (uint32_t)prev_ix; + } + node_left = FN(RightChildIndex)(self, prev_ix); + prev_ix = forest[node_left]; + } else { + best_len_right = len; + if (should_reroot_tree) { + forest[node_right] = (uint32_t)prev_ix; + } + node_right = FN(LeftChildIndex)(self, prev_ix); + prev_ix = forest[node_right]; + } + } + } + return matches; +} + +/* Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to the + length of max_length and stores the position cur_ix in the hash table. + + Sets *num_matches to the number of matches found, and stores the found + matches in matches[0] to matches[*num_matches - 1]. The matches will be + sorted by strictly increasing length and (non-strictly) increasing + distance. */ +static BROTLI_INLINE size_t FN(FindAllMatches)(HasherHandle handle, + const BrotliDictionary* dictionary, const uint8_t* data, + const size_t ring_buffer_mask, const size_t cur_ix, + const size_t max_length, const size_t max_backward, const size_t gap, + const BrotliEncoderParams* params, BackwardMatch* matches) { + BackwardMatch* const orig_matches = matches; + const size_t cur_ix_masked = cur_ix & ring_buffer_mask; + size_t best_len = 1; + const size_t short_match_max_backward = + params->quality != HQ_ZOPFLIFICATION_QUALITY ? 16 : 64; + size_t stop = cur_ix - short_match_max_backward; + uint32_t dict_matches[BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1]; + size_t i; + if (cur_ix < short_match_max_backward) { stop = 0; } + for (i = cur_ix - 1; i > stop && best_len <= 2; --i) { + size_t prev_ix = i; + const size_t backward = cur_ix - prev_ix; + if (BROTLI_PREDICT_FALSE(backward > max_backward)) { + break; + } + prev_ix &= ring_buffer_mask; + if (data[cur_ix_masked] != data[prev_ix] || + data[cur_ix_masked + 1] != data[prev_ix + 1]) { + continue; + } + { + const size_t len = + FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked], + max_length); + if (len > best_len) { + best_len = len; + InitBackwardMatch(matches++, backward, len); + } + } + } + if (best_len < max_length) { + matches = FN(StoreAndFindMatches)(FN(Self)(handle), data, cur_ix, + ring_buffer_mask, max_length, max_backward, &best_len, matches); + } + for (i = 0; i <= BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN; ++i) { + dict_matches[i] = kInvalidMatch; + } + { + size_t minlen = BROTLI_MAX(size_t, 4, best_len + 1); + if (BrotliFindAllStaticDictionaryMatches(dictionary, + &data[cur_ix_masked], minlen, max_length, &dict_matches[0])) { + size_t maxlen = BROTLI_MIN( + size_t, BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN, max_length); + size_t l; + for (l = minlen; l <= maxlen; ++l) { + uint32_t dict_id = dict_matches[l]; + if (dict_id < kInvalidMatch) { + size_t distance = max_backward + gap + (dict_id >> 5) + 1; + if (distance < BROTLI_MAX_DISTANCE) { + InitDictionaryBackwardMatch(matches++, distance, l, dict_id & 31); + } + } + } + } + } + return (size_t)(matches - orig_matches); +} + +/* Stores the hash of the next 4 bytes and re-roots the binary tree at the + current sequence, without returning any matches. + REQUIRES: ix + MAX_TREE_COMP_LENGTH <= end-of-current-block */ +static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t *data, + const size_t mask, const size_t ix) { + HashToBinaryTree* self = FN(Self)(handle); + /* Maximum distance is window size - 16, see section 9.1. of the spec. */ + const size_t max_backward = self->window_mask_ - BROTLI_WINDOW_GAP + 1; + FN(StoreAndFindMatches)(self, data, ix, mask, MAX_TREE_COMP_LENGTH, + max_backward, NULL, NULL); +} + +static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, + const uint8_t *data, const size_t mask, const size_t ix_start, + const size_t ix_end) { + size_t i = ix_start; + size_t j = ix_start; + if (ix_start + 63 <= ix_end) { + i = ix_end - 63; + } + if (ix_start + 512 <= i) { + for (; j < i; j += 8) { + FN(Store)(handle, data, mask, j); + } + } + for (; i < ix_end; ++i) { + FN(Store)(handle, data, mask, i); + } +} + +static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, + size_t num_bytes, size_t position, const uint8_t* ringbuffer, + size_t ringbuffer_mask) { + HashToBinaryTree* self = FN(Self)(handle); + if (num_bytes >= FN(HashTypeLength)() - 1 && + position >= MAX_TREE_COMP_LENGTH) { + /* Store the last `MAX_TREE_COMP_LENGTH - 1` positions in the hasher. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + const size_t i_start = position - MAX_TREE_COMP_LENGTH + 1; + const size_t i_end = BROTLI_MIN(size_t, position, i_start + num_bytes); + size_t i; + for (i = i_start; i < i_end; ++i) { + /* Maximum distance is window size - 16, see section 9.1. of the spec. + Furthermore, we have to make sure that we don't look further back + from the start of the next block than the window size, otherwise we + could access already overwritten areas of the ring-buffer. */ + const size_t max_backward = + self->window_mask_ - BROTLI_MAX(size_t, + BROTLI_WINDOW_GAP - 1, + position - i); + /* We know that i + MAX_TREE_COMP_LENGTH <= position + num_bytes, i.e. the + end of the current block and that we have at least + MAX_TREE_COMP_LENGTH tail in the ring-buffer. */ + FN(StoreAndFindMatches)(self, ringbuffer, i, ringbuffer_mask, + MAX_TREE_COMP_LENGTH, max_backward, NULL, NULL); + } + } +} + +#undef BUCKET_SIZE + +#undef HashToBinaryTree diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/histogram.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/histogram.c new file mode 100644 index 00000000000..bb7b4c53626 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/histogram.c @@ -0,0 +1,97 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Build per-context histograms of literals, commands and distance codes. */ + +#include "./histogram.h" + +#include "./block_splitter.h" +#include "./command.h" +#include "./context.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +typedef struct BlockSplitIterator { + const BlockSplit* split_; /* Not owned. */ + size_t idx_; + size_t type_; + size_t length_; +} BlockSplitIterator; + +static void InitBlockSplitIterator(BlockSplitIterator* self, + const BlockSplit* split) { + self->split_ = split; + self->idx_ = 0; + self->type_ = 0; + self->length_ = split->lengths ? split->lengths[0] : 0; +} + +static void BlockSplitIteratorNext(BlockSplitIterator* self) { + if (self->length_ == 0) { + ++self->idx_; + self->type_ = self->split_->types[self->idx_]; + self->length_ = self->split_->lengths[self->idx_]; + } + --self->length_; +} + +void BrotliBuildHistogramsWithContext( + const Command* cmds, const size_t num_commands, + const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split, + const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t start_pos, + size_t mask, uint8_t prev_byte, uint8_t prev_byte2, + const ContextType* context_modes, HistogramLiteral* literal_histograms, + HistogramCommand* insert_and_copy_histograms, + HistogramDistance* copy_dist_histograms) { + size_t pos = start_pos; + BlockSplitIterator literal_it; + BlockSplitIterator insert_and_copy_it; + BlockSplitIterator dist_it; + size_t i; + + InitBlockSplitIterator(&literal_it, literal_split); + InitBlockSplitIterator(&insert_and_copy_it, insert_and_copy_split); + InitBlockSplitIterator(&dist_it, dist_split); + for (i = 0; i < num_commands; ++i) { + const Command* cmd = &cmds[i]; + size_t j; + BlockSplitIteratorNext(&insert_and_copy_it); + HistogramAddCommand(&insert_and_copy_histograms[insert_and_copy_it.type_], + cmd->cmd_prefix_); + for (j = cmd->insert_len_; j != 0; --j) { + size_t context; + BlockSplitIteratorNext(&literal_it); + context = context_modes ? + ((literal_it.type_ << BROTLI_LITERAL_CONTEXT_BITS) + + Context(prev_byte, prev_byte2, context_modes[literal_it.type_])) : + literal_it.type_; + HistogramAddLiteral(&literal_histograms[context], + ringbuffer[pos & mask]); + prev_byte2 = prev_byte; + prev_byte = ringbuffer[pos & mask]; + ++pos; + } + pos += CommandCopyLen(cmd); + if (CommandCopyLen(cmd)) { + prev_byte2 = ringbuffer[(pos - 2) & mask]; + prev_byte = ringbuffer[(pos - 1) & mask]; + if (cmd->cmd_prefix_ >= 128) { + size_t context; + BlockSplitIteratorNext(&dist_it); + context = (dist_it.type_ << BROTLI_DISTANCE_CONTEXT_BITS) + + CommandDistanceContext(cmd); + HistogramAddDistance(©_dist_histograms[context], + cmd->dist_prefix_); + } + } + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/histogram.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/histogram.h new file mode 100644 index 00000000000..2161574b3bb --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/histogram.h @@ -0,0 +1,60 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Models the histograms of literals, commands and distance codes. */ + +#ifndef BROTLI_ENC_HISTOGRAM_H_ +#define BROTLI_ENC_HISTOGRAM_H_ + +#include <string.h> /* memset */ + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./block_splitter.h" +#include "./command.h" +#include "./context.h" +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#define FN(X) X ## Literal +#define DATA_SIZE BROTLI_NUM_LITERAL_SYMBOLS +#define DataType uint8_t +#include "./histogram_inc.h" /* NOLINT(build/include) */ +#undef DataType +#undef DATA_SIZE +#undef FN + +#define FN(X) X ## Command +#define DataType uint16_t +#define DATA_SIZE BROTLI_NUM_COMMAND_SYMBOLS +#include "./histogram_inc.h" /* NOLINT(build/include) */ +#undef DATA_SIZE +#undef FN + +#define FN(X) X ## Distance +#define DATA_SIZE BROTLI_NUM_DISTANCE_SYMBOLS +#include "./histogram_inc.h" /* NOLINT(build/include) */ +#undef DataType +#undef DATA_SIZE +#undef FN + +BROTLI_INTERNAL void BrotliBuildHistogramsWithContext( + const Command* cmds, const size_t num_commands, + const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split, + const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t pos, + size_t mask, uint8_t prev_byte, uint8_t prev_byte2, + const ContextType* context_modes, HistogramLiteral* literal_histograms, + HistogramCommand* insert_and_copy_histograms, + HistogramDistance* copy_dist_histograms); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_HISTOGRAM_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/histogram_inc.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/histogram_inc.h new file mode 100644 index 00000000000..78070368c5e --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/histogram_inc.h @@ -0,0 +1,51 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: Histogram, DATA_SIZE, DataType */ + +/* A simple container for histograms of data in blocks. */ + +typedef struct FN(Histogram) { + uint32_t data_[DATA_SIZE]; + size_t total_count_; + double bit_cost_; +} FN(Histogram); + +static BROTLI_INLINE void FN(HistogramClear)(FN(Histogram)* self) { + memset(self->data_, 0, sizeof(self->data_)); + self->total_count_ = 0; + self->bit_cost_ = HUGE_VAL; +} + +static BROTLI_INLINE void FN(ClearHistograms)( + FN(Histogram)* array, size_t length) { + size_t i; + for (i = 0; i < length; ++i) FN(HistogramClear)(array + i); +} + +static BROTLI_INLINE void FN(HistogramAdd)(FN(Histogram)* self, size_t val) { + ++self->data_[val]; + ++self->total_count_; +} + +static BROTLI_INLINE void FN(HistogramAddVector)(FN(Histogram)* self, + const DataType *p, size_t n) { + self->total_count_ += n; + n += 1; + while (--n) ++self->data_[*p++]; +} + +static BROTLI_INLINE void FN(HistogramAddHistogram)(FN(Histogram)* self, + const FN(Histogram)* v) { + size_t i; + self->total_count_ += v->total_count_; + for (i = 0; i < DATA_SIZE; ++i) { + self->data_[i] += v->data_[i]; + } +} + +static BROTLI_INLINE size_t FN(HistogramDataSize)(void) { return DATA_SIZE; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/literal_cost.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/literal_cost.c new file mode 100644 index 00000000000..91c691cd437 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/literal_cost.c @@ -0,0 +1,175 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Literal cost model to allow backward reference replacement to be efficient. +*/ + +#include "./literal_cost.h" + +#include <brotli/types.h> +#include "./fast_log.h" +#include "./port.h" +#include "./utf8_util.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static size_t UTF8Position(size_t last, size_t c, size_t clamp) { + if (c < 128) { + return 0; /* Next one is the 'Byte 1' again. */ + } else if (c >= 192) { /* Next one is the 'Byte 2' of utf-8 encoding. */ + return BROTLI_MIN(size_t, 1, clamp); + } else { + /* Let's decide over the last byte if this ends the sequence. */ + if (last < 0xe0) { + return 0; /* Completed two or three byte coding. */ + } else { /* Next one is the 'Byte 3' of utf-8 encoding. */ + return BROTLI_MIN(size_t, 2, clamp); + } + } +} + +static size_t DecideMultiByteStatsLevel(size_t pos, size_t len, size_t mask, + const uint8_t *data) { + size_t counts[3] = { 0 }; + size_t max_utf8 = 1; /* should be 2, but 1 compresses better. */ + size_t last_c = 0; + size_t i; + for (i = 0; i < len; ++i) { + size_t c = data[(pos + i) & mask]; + ++counts[UTF8Position(last_c, c, 2)]; + last_c = c; + } + if (counts[2] < 500) { + max_utf8 = 1; + } + if (counts[1] + counts[2] < 25) { + max_utf8 = 0; + } + return max_utf8; +} + +static void EstimateBitCostsForLiteralsUTF8(size_t pos, size_t len, size_t mask, + const uint8_t *data, float *cost) { + /* max_utf8 is 0 (normal ASCII single byte modeling), + 1 (for 2-byte UTF-8 modeling), or 2 (for 3-byte UTF-8 modeling). */ + const size_t max_utf8 = DecideMultiByteStatsLevel(pos, len, mask, data); + size_t histogram[3][256] = { { 0 } }; + size_t window_half = 495; + size_t in_window = BROTLI_MIN(size_t, window_half, len); + size_t in_window_utf8[3] = { 0 }; + + size_t i; + { /* Bootstrap histograms. */ + size_t last_c = 0; + size_t utf8_pos = 0; + for (i = 0; i < in_window; ++i) { + size_t c = data[(pos + i) & mask]; + ++histogram[utf8_pos][c]; + ++in_window_utf8[utf8_pos]; + utf8_pos = UTF8Position(last_c, c, max_utf8); + last_c = c; + } + } + + /* Compute bit costs with sliding window. */ + for (i = 0; i < len; ++i) { + if (i >= window_half) { + /* Remove a byte in the past. */ + size_t c = + i < window_half + 1 ? 0 : data[(pos + i - window_half - 1) & mask]; + size_t last_c = + i < window_half + 2 ? 0 : data[(pos + i - window_half - 2) & mask]; + size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8); + --histogram[utf8_pos2][data[(pos + i - window_half) & mask]]; + --in_window_utf8[utf8_pos2]; + } + if (i + window_half < len) { + /* Add a byte in the future. */ + size_t c = data[(pos + i + window_half - 1) & mask]; + size_t last_c = data[(pos + i + window_half - 2) & mask]; + size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8); + ++histogram[utf8_pos2][data[(pos + i + window_half) & mask]]; + ++in_window_utf8[utf8_pos2]; + } + { + size_t c = i < 1 ? 0 : data[(pos + i - 1) & mask]; + size_t last_c = i < 2 ? 0 : data[(pos + i - 2) & mask]; + size_t utf8_pos = UTF8Position(last_c, c, max_utf8); + size_t masked_pos = (pos + i) & mask; + size_t histo = histogram[utf8_pos][data[masked_pos]]; + double lit_cost; + if (histo == 0) { + histo = 1; + } + lit_cost = FastLog2(in_window_utf8[utf8_pos]) - FastLog2(histo); + lit_cost += 0.02905; + if (lit_cost < 1.0) { + lit_cost *= 0.5; + lit_cost += 0.5; + } + /* Make the first bytes more expensive -- seems to help, not sure why. + Perhaps because the entropy source is changing its properties + rapidly in the beginning of the file, perhaps because the beginning + of the data is a statistical "anomaly". */ + if (i < 2000) { + lit_cost += 0.7 - ((double)(2000 - i) / 2000.0 * 0.35); + } + cost[i] = (float)lit_cost; + } + } +} + +void BrotliEstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask, + const uint8_t *data, float *cost) { + if (BrotliIsMostlyUTF8(data, pos, mask, len, kMinUTF8Ratio)) { + EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, cost); + return; + } else { + size_t histogram[256] = { 0 }; + size_t window_half = 2000; + size_t in_window = BROTLI_MIN(size_t, window_half, len); + + /* Bootstrap histogram. */ + size_t i; + for (i = 0; i < in_window; ++i) { + ++histogram[data[(pos + i) & mask]]; + } + + /* Compute bit costs with sliding window. */ + for (i = 0; i < len; ++i) { + size_t histo; + if (i >= window_half) { + /* Remove a byte in the past. */ + --histogram[data[(pos + i - window_half) & mask]]; + --in_window; + } + if (i + window_half < len) { + /* Add a byte in the future. */ + ++histogram[data[(pos + i + window_half) & mask]]; + ++in_window; + } + histo = histogram[data[(pos + i) & mask]]; + if (histo == 0) { + histo = 1; + } + { + double lit_cost = FastLog2(in_window) - FastLog2(histo); + lit_cost += 0.029; + if (lit_cost < 1.0) { + lit_cost *= 0.5; + lit_cost += 0.5; + } + cost[i] = (float)lit_cost; + } + } + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/literal_cost.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/literal_cost.h new file mode 100644 index 00000000000..7b3d030d2ee --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/literal_cost.h @@ -0,0 +1,30 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Literal cost model to allow backward reference replacement to be efficient. +*/ + +#ifndef BROTLI_ENC_LITERAL_COST_H_ +#define BROTLI_ENC_LITERAL_COST_H_ + +#include <brotli/types.h> +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* Estimates how many bits the literals in the interval [pos, pos + len) in the + ring-buffer (data, mask) will take entropy coded and writes these estimates + to the cost[0..len) array. */ +BROTLI_INTERNAL void BrotliEstimateBitCostsForLiterals( + size_t pos, size_t len, size_t mask, const uint8_t *data, float *cost); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_LITERAL_COST_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/memory.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/memory.c new file mode 100644 index 00000000000..5aa5a2246b3 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/memory.c @@ -0,0 +1,181 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Algorithms for distributing the literals and commands of a metablock between + block types and contexts. */ + +#include "./memory.h" + +#include <assert.h> +#include <stdlib.h> /* exit, free, malloc */ +#include <string.h> /* memcpy */ + +#include <brotli/types.h> +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#define MAX_PERM_ALLOCATED 128 +#define MAX_NEW_ALLOCATED 64 +#define MAX_NEW_FREED 64 + +#define PERM_ALLOCATED_OFFSET 0 +#define NEW_ALLOCATED_OFFSET MAX_PERM_ALLOCATED +#define NEW_FREED_OFFSET (MAX_PERM_ALLOCATED + MAX_NEW_ALLOCATED) + +static void* DefaultAllocFunc(void* opaque, size_t size) { + BROTLI_UNUSED(opaque); + return malloc(size); +} + +static void DefaultFreeFunc(void* opaque, void* address) { + BROTLI_UNUSED(opaque); + free(address); +} + +void BrotliInitMemoryManager( + MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func, + void* opaque) { + if (!alloc_func) { + m->alloc_func = DefaultAllocFunc; + m->free_func = DefaultFreeFunc; + m->opaque = 0; + } else { + m->alloc_func = alloc_func; + m->free_func = free_func; + m->opaque = opaque; + } +#if !defined(BROTLI_ENCODER_EXIT_ON_OOM) + m->is_oom = BROTLI_FALSE; + m->perm_allocated = 0; + m->new_allocated = 0; + m->new_freed = 0; +#endif /* BROTLI_ENCODER_EXIT_ON_OOM */ +} + +#if defined(BROTLI_ENCODER_EXIT_ON_OOM) + +void* BrotliAllocate(MemoryManager* m, size_t n) { + void* result = m->alloc_func(m->opaque, n); + if (!result) exit(EXIT_FAILURE); + return result; +} + +void BrotliFree(MemoryManager* m, void* p) { + m->free_func(m->opaque, p); +} + +void BrotliWipeOutMemoryManager(MemoryManager* m) { + BROTLI_UNUSED(m); +} + +#else /* BROTLI_ENCODER_EXIT_ON_OOM */ + +static void SortPointers(void** items, const size_t n) { + /* Shell sort. */ + static const size_t gaps[] = {23, 10, 4, 1}; + int g = 0; + for (; g < 4; ++g) { + size_t gap = gaps[g]; + size_t i; + for (i = gap; i < n; ++i) { + size_t j = i; + void* tmp = items[i]; + for (; j >= gap && tmp < items[j - gap]; j -= gap) { + items[j] = items[j - gap]; + } + items[j] = tmp; + } + } +} + +static size_t Annihilate(void** a, size_t a_len, void** b, size_t b_len) { + size_t a_read_index = 0; + size_t b_read_index = 0; + size_t a_write_index = 0; + size_t b_write_index = 0; + size_t annihilated = 0; + while (a_read_index < a_len && b_read_index < b_len) { + if (a[a_read_index] == b[b_read_index]) { + a_read_index++; + b_read_index++; + annihilated++; + } else if (a[a_read_index] < b[b_read_index]) { + a[a_write_index++] = a[a_read_index++]; + } else { + b[b_write_index++] = b[b_read_index++]; + } + } + while (a_read_index < a_len) a[a_write_index++] = a[a_read_index++]; + while (b_read_index < b_len) b[b_write_index++] = b[b_read_index++]; + return annihilated; +} + +static void CollectGarbagePointers(MemoryManager* m) { + size_t annihilated; + SortPointers(m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated); + SortPointers(m->pointers + NEW_FREED_OFFSET, m->new_freed); + annihilated = Annihilate( + m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated, + m->pointers + NEW_FREED_OFFSET, m->new_freed); + m->new_allocated -= annihilated; + m->new_freed -= annihilated; + + if (m->new_freed != 0) { + annihilated = Annihilate( + m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated, + m->pointers + NEW_FREED_OFFSET, m->new_freed); + m->perm_allocated -= annihilated; + m->new_freed -= annihilated; + assert(m->new_freed == 0); + } + + if (m->new_allocated != 0) { + assert(m->perm_allocated + m->new_allocated <= MAX_PERM_ALLOCATED); + memcpy(m->pointers + PERM_ALLOCATED_OFFSET + m->perm_allocated, + m->pointers + NEW_ALLOCATED_OFFSET, + sizeof(void*) * m->new_allocated); + m->perm_allocated += m->new_allocated; + m->new_allocated = 0; + SortPointers(m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated); + } +} + +void* BrotliAllocate(MemoryManager* m, size_t n) { + void* result = m->alloc_func(m->opaque, n); + if (!result) { + m->is_oom = BROTLI_TRUE; + return NULL; + } + if (m->new_allocated == MAX_NEW_ALLOCATED) CollectGarbagePointers(m); + m->pointers[NEW_ALLOCATED_OFFSET + (m->new_allocated++)] = result; + return result; +} + +void BrotliFree(MemoryManager* m, void* p) { + if (!p) return; + m->free_func(m->opaque, p); + if (m->new_freed == MAX_NEW_FREED) CollectGarbagePointers(m); + m->pointers[NEW_FREED_OFFSET + (m->new_freed++)] = p; +} + +void BrotliWipeOutMemoryManager(MemoryManager* m) { + size_t i; + CollectGarbagePointers(m); + /* Now all unfreed pointers are in perm-allocated list. */ + for (i = 0; i < m->perm_allocated; ++i) { + m->free_func(m->opaque, m->pointers[PERM_ALLOCATED_OFFSET + i]); + } + m->perm_allocated = 0; +} + +#endif /* BROTLI_ENCODER_EXIT_ON_OOM */ + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/memory.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/memory.h new file mode 100644 index 00000000000..babf1f80b19 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/memory.h @@ -0,0 +1,63 @@ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Macros for memory management. */ + +#ifndef BROTLI_ENC_MEMORY_H_ +#define BROTLI_ENC_MEMORY_H_ + +#include <brotli/types.h> +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#if !defined(BROTLI_ENCODER_CLEANUP_ON_OOM) && \ + !defined(BROTLI_ENCODER_EXIT_ON_OOM) +#define BROTLI_ENCODER_EXIT_ON_OOM +#endif + +typedef struct MemoryManager { + brotli_alloc_func alloc_func; + brotli_free_func free_func; + void* opaque; +#if !defined(BROTLI_ENCODER_EXIT_ON_OOM) + BROTLI_BOOL is_oom; + size_t perm_allocated; + size_t new_allocated; + size_t new_freed; + void* pointers[256]; +#endif /* BROTLI_ENCODER_EXIT_ON_OOM */ +} MemoryManager; + +BROTLI_INTERNAL void BrotliInitMemoryManager( + MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func, + void* opaque); + +BROTLI_INTERNAL void* BrotliAllocate(MemoryManager* m, size_t n); +#define BROTLI_ALLOC(M, T, N) \ + ((N) > 0 ? ((T*)BrotliAllocate((M), (N) * sizeof(T))) : NULL) + +BROTLI_INTERNAL void BrotliFree(MemoryManager* m, void* p); +#define BROTLI_FREE(M, P) { \ + BrotliFree((M), (P)); \ + P = NULL; \ +} + +#if defined(BROTLI_ENCODER_EXIT_ON_OOM) +#define BROTLI_IS_OOM(M) (!!0) +#else /* BROTLI_ENCODER_EXIT_ON_OOM */ +#define BROTLI_IS_OOM(M) (!!(M)->is_oom) +#endif /* BROTLI_ENCODER_EXIT_ON_OOM */ + +BROTLI_INTERNAL void BrotliWipeOutMemoryManager(MemoryManager* m); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_MEMORY_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/metablock.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/metablock.c new file mode 100644 index 00000000000..1db76da0067 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/metablock.c @@ -0,0 +1,528 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Algorithms for distributing the literals and commands of a metablock between + block types and contexts. */ + +#include "./metablock.h" + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./bit_cost.h" +#include "./block_splitter.h" +#include "./cluster.h" +#include "./context.h" +#include "./entropy_encode.h" +#include "./histogram.h" +#include "./memory.h" +#include "./port.h" +#include "./quality.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +void BrotliBuildMetaBlock(MemoryManager* m, + const uint8_t* ringbuffer, + const size_t pos, + const size_t mask, + const BrotliEncoderParams* params, + uint8_t prev_byte, + uint8_t prev_byte2, + const Command* cmds, + size_t num_commands, + ContextType literal_context_mode, + MetaBlockSplit* mb) { + /* Histogram ids need to fit in one byte. */ + static const size_t kMaxNumberOfHistograms = 256; + HistogramDistance* distance_histograms; + HistogramLiteral* literal_histograms; + ContextType* literal_context_modes = NULL; + size_t literal_histograms_size; + size_t distance_histograms_size; + size_t i; + size_t literal_context_multiplier = 1; + + BrotliSplitBlock(m, cmds, num_commands, + ringbuffer, pos, mask, params, + &mb->literal_split, + &mb->command_split, + &mb->distance_split); + if (BROTLI_IS_OOM(m)) return; + + if (!params->disable_literal_context_modeling) { + literal_context_multiplier = 1 << BROTLI_LITERAL_CONTEXT_BITS; + literal_context_modes = + BROTLI_ALLOC(m, ContextType, mb->literal_split.num_types); + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < mb->literal_split.num_types; ++i) { + literal_context_modes[i] = literal_context_mode; + } + } + + literal_histograms_size = + mb->literal_split.num_types * literal_context_multiplier; + literal_histograms = + BROTLI_ALLOC(m, HistogramLiteral, literal_histograms_size); + if (BROTLI_IS_OOM(m)) return; + ClearHistogramsLiteral(literal_histograms, literal_histograms_size); + + distance_histograms_size = + mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS; + distance_histograms = + BROTLI_ALLOC(m, HistogramDistance, distance_histograms_size); + if (BROTLI_IS_OOM(m)) return; + ClearHistogramsDistance(distance_histograms, distance_histograms_size); + + assert(mb->command_histograms == 0); + mb->command_histograms_size = mb->command_split.num_types; + mb->command_histograms = + BROTLI_ALLOC(m, HistogramCommand, mb->command_histograms_size); + if (BROTLI_IS_OOM(m)) return; + ClearHistogramsCommand(mb->command_histograms, mb->command_histograms_size); + + BrotliBuildHistogramsWithContext(cmds, num_commands, + &mb->literal_split, &mb->command_split, &mb->distance_split, + ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_modes, + literal_histograms, mb->command_histograms, distance_histograms); + BROTLI_FREE(m, literal_context_modes); + + assert(mb->literal_context_map == 0); + mb->literal_context_map_size = + mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS; + mb->literal_context_map = + BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size); + if (BROTLI_IS_OOM(m)) return; + + assert(mb->literal_histograms == 0); + mb->literal_histograms_size = mb->literal_context_map_size; + mb->literal_histograms = + BROTLI_ALLOC(m, HistogramLiteral, mb->literal_histograms_size); + if (BROTLI_IS_OOM(m)) return; + + BrotliClusterHistogramsLiteral(m, literal_histograms, literal_histograms_size, + kMaxNumberOfHistograms, mb->literal_histograms, + &mb->literal_histograms_size, mb->literal_context_map); + if (BROTLI_IS_OOM(m)) return; + BROTLI_FREE(m, literal_histograms); + + if (params->disable_literal_context_modeling) { + /* Distribute assignment to all contexts. */ + for (i = mb->literal_split.num_types; i != 0;) { + size_t j = 0; + i--; + for (; j < (1 << BROTLI_LITERAL_CONTEXT_BITS); j++) { + mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] = + mb->literal_context_map[i]; + } + } + } + + assert(mb->distance_context_map == 0); + mb->distance_context_map_size = + mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS; + mb->distance_context_map = + BROTLI_ALLOC(m, uint32_t, mb->distance_context_map_size); + if (BROTLI_IS_OOM(m)) return; + + assert(mb->distance_histograms == 0); + mb->distance_histograms_size = mb->distance_context_map_size; + mb->distance_histograms = + BROTLI_ALLOC(m, HistogramDistance, mb->distance_histograms_size); + if (BROTLI_IS_OOM(m)) return; + + BrotliClusterHistogramsDistance(m, distance_histograms, + mb->distance_context_map_size, + kMaxNumberOfHistograms, + mb->distance_histograms, + &mb->distance_histograms_size, + mb->distance_context_map); + if (BROTLI_IS_OOM(m)) return; + BROTLI_FREE(m, distance_histograms); +} + +#define FN(X) X ## Literal +#include "./metablock_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Command +#include "./metablock_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Distance +#include "./metablock_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define BROTLI_MAX_STATIC_CONTEXTS 13 + +/* Greedy block splitter for one block category (literal, command or distance). + Gathers histograms for all context buckets. */ +typedef struct ContextBlockSplitter { + /* Alphabet size of particular block category. */ + size_t alphabet_size_; + size_t num_contexts_; + size_t max_block_types_; + /* We collect at least this many symbols for each block. */ + size_t min_block_size_; + /* We merge histograms A and B if + entropy(A+B) < entropy(A) + entropy(B) + split_threshold_, + where A is the current histogram and B is the histogram of the last or the + second last block type. */ + double split_threshold_; + + size_t num_blocks_; + BlockSplit* split_; /* not owned */ + HistogramLiteral* histograms_; /* not owned */ + size_t* histograms_size_; /* not owned */ + + /* The number of symbols that we want to collect before deciding on whether + or not to merge the block with a previous one or emit a new block. */ + size_t target_block_size_; + /* The number of symbols in the current histogram. */ + size_t block_size_; + /* Offset of the current histogram. */ + size_t curr_histogram_ix_; + /* Offset of the histograms of the previous two block types. */ + size_t last_histogram_ix_[2]; + /* Entropy of the previous two block types. */ + double last_entropy_[2 * BROTLI_MAX_STATIC_CONTEXTS]; + /* The number of times we merged the current block with the last one. */ + size_t merge_last_count_; +} ContextBlockSplitter; + +static void InitContextBlockSplitter( + MemoryManager* m, ContextBlockSplitter* self, size_t alphabet_size, + size_t num_contexts, size_t min_block_size, double split_threshold, + size_t num_symbols, BlockSplit* split, HistogramLiteral** histograms, + size_t* histograms_size) { + size_t max_num_blocks = num_symbols / min_block_size + 1; + size_t max_num_types; + assert(num_contexts <= BROTLI_MAX_STATIC_CONTEXTS); + + self->alphabet_size_ = alphabet_size; + self->num_contexts_ = num_contexts; + self->max_block_types_ = BROTLI_MAX_NUMBER_OF_BLOCK_TYPES / num_contexts; + self->min_block_size_ = min_block_size; + self->split_threshold_ = split_threshold; + self->num_blocks_ = 0; + self->split_ = split; + self->histograms_size_ = histograms_size; + self->target_block_size_ = min_block_size; + self->block_size_ = 0; + self->curr_histogram_ix_ = 0; + self->merge_last_count_ = 0; + + /* We have to allocate one more histogram than the maximum number of block + types for the current histogram when the meta-block is too big. */ + max_num_types = + BROTLI_MIN(size_t, max_num_blocks, self->max_block_types_ + 1); + BROTLI_ENSURE_CAPACITY(m, uint8_t, + split->types, split->types_alloc_size, max_num_blocks); + BROTLI_ENSURE_CAPACITY(m, uint32_t, + split->lengths, split->lengths_alloc_size, max_num_blocks); + if (BROTLI_IS_OOM(m)) return; + split->num_blocks = max_num_blocks; + if (BROTLI_IS_OOM(m)) return; + assert(*histograms == 0); + *histograms_size = max_num_types * num_contexts; + *histograms = BROTLI_ALLOC(m, HistogramLiteral, *histograms_size); + self->histograms_ = *histograms; + if (BROTLI_IS_OOM(m)) return; + /* Clear only current histogram. */ + ClearHistogramsLiteral(&self->histograms_[0], num_contexts); + self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0; +} + +/* Does either of three things: + (1) emits the current block with a new block type; + (2) emits the current block with the type of the second last block; + (3) merges the current block with the last block. */ +static void ContextBlockSplitterFinishBlock( + ContextBlockSplitter* self, MemoryManager* m, BROTLI_BOOL is_final) { + BlockSplit* split = self->split_; + const size_t num_contexts = self->num_contexts_; + double* last_entropy = self->last_entropy_; + HistogramLiteral* histograms = self->histograms_; + + if (self->block_size_ < self->min_block_size_) { + self->block_size_ = self->min_block_size_; + } + if (self->num_blocks_ == 0) { + size_t i; + /* Create first block. */ + split->lengths[0] = (uint32_t)self->block_size_; + split->types[0] = 0; + + for (i = 0; i < num_contexts; ++i) { + last_entropy[i] = + BitsEntropy(histograms[i].data_, self->alphabet_size_); + last_entropy[num_contexts + i] = last_entropy[i]; + } + ++self->num_blocks_; + ++split->num_types; + self->curr_histogram_ix_ += num_contexts; + if (self->curr_histogram_ix_ < *self->histograms_size_) { + ClearHistogramsLiteral( + &self->histograms_[self->curr_histogram_ix_], self->num_contexts_); + } + self->block_size_ = 0; + } else if (self->block_size_ > 0) { + /* Try merging the set of histograms for the current block type with the + respective set of histograms for the last and second last block types. + Decide over the split based on the total reduction of entropy across + all contexts. */ + double entropy[BROTLI_MAX_STATIC_CONTEXTS]; + HistogramLiteral* combined_histo = + BROTLI_ALLOC(m, HistogramLiteral, 2 * num_contexts); + double combined_entropy[2 * BROTLI_MAX_STATIC_CONTEXTS]; + double diff[2] = { 0.0 }; + size_t i; + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < num_contexts; ++i) { + size_t curr_histo_ix = self->curr_histogram_ix_ + i; + size_t j; + entropy[i] = BitsEntropy(histograms[curr_histo_ix].data_, + self->alphabet_size_); + for (j = 0; j < 2; ++j) { + size_t jx = j * num_contexts + i; + size_t last_histogram_ix = self->last_histogram_ix_[j] + i; + combined_histo[jx] = histograms[curr_histo_ix]; + HistogramAddHistogramLiteral(&combined_histo[jx], + &histograms[last_histogram_ix]); + combined_entropy[jx] = BitsEntropy( + &combined_histo[jx].data_[0], self->alphabet_size_); + diff[j] += combined_entropy[jx] - entropy[i] - last_entropy[jx]; + } + } + + if (split->num_types < self->max_block_types_ && + diff[0] > self->split_threshold_ && + diff[1] > self->split_threshold_) { + /* Create new block. */ + split->lengths[self->num_blocks_] = (uint32_t)self->block_size_; + split->types[self->num_blocks_] = (uint8_t)split->num_types; + self->last_histogram_ix_[1] = self->last_histogram_ix_[0]; + self->last_histogram_ix_[0] = split->num_types * num_contexts; + for (i = 0; i < num_contexts; ++i) { + last_entropy[num_contexts + i] = last_entropy[i]; + last_entropy[i] = entropy[i]; + } + ++self->num_blocks_; + ++split->num_types; + self->curr_histogram_ix_ += num_contexts; + if (self->curr_histogram_ix_ < *self->histograms_size_) { + ClearHistogramsLiteral( + &self->histograms_[self->curr_histogram_ix_], self->num_contexts_); + } + self->block_size_ = 0; + self->merge_last_count_ = 0; + self->target_block_size_ = self->min_block_size_; + } else if (diff[1] < diff[0] - 20.0) { + /* Combine this block with second last block. */ + split->lengths[self->num_blocks_] = (uint32_t)self->block_size_; + split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2]; + BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1); + for (i = 0; i < num_contexts; ++i) { + histograms[self->last_histogram_ix_[0] + i] = + combined_histo[num_contexts + i]; + last_entropy[num_contexts + i] = last_entropy[i]; + last_entropy[i] = combined_entropy[num_contexts + i]; + HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]); + } + ++self->num_blocks_; + self->block_size_ = 0; + self->merge_last_count_ = 0; + self->target_block_size_ = self->min_block_size_; + } else { + /* Combine this block with last block. */ + split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_; + for (i = 0; i < num_contexts; ++i) { + histograms[self->last_histogram_ix_[0] + i] = combined_histo[i]; + last_entropy[i] = combined_entropy[i]; + if (split->num_types == 1) { + last_entropy[num_contexts + i] = last_entropy[i]; + } + HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]); + } + self->block_size_ = 0; + if (++self->merge_last_count_ > 1) { + self->target_block_size_ += self->min_block_size_; + } + } + BROTLI_FREE(m, combined_histo); + } + if (is_final) { + *self->histograms_size_ = split->num_types * num_contexts; + split->num_blocks = self->num_blocks_; + } +} + +/* Adds the next symbol to the current block type and context. When the + current block reaches the target size, decides on merging the block. */ +static void ContextBlockSplitterAddSymbol( + ContextBlockSplitter* self, MemoryManager* m, + size_t symbol, size_t context) { + HistogramAddLiteral(&self->histograms_[self->curr_histogram_ix_ + context], + symbol); + ++self->block_size_; + if (self->block_size_ == self->target_block_size_) { + ContextBlockSplitterFinishBlock(self, m, /* is_final = */ BROTLI_FALSE); + if (BROTLI_IS_OOM(m)) return; + } +} + +static void MapStaticContexts(MemoryManager* m, + size_t num_contexts, + const uint32_t* static_context_map, + MetaBlockSplit* mb) { + size_t i; + assert(mb->literal_context_map == 0); + mb->literal_context_map_size = + mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS; + mb->literal_context_map = + BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size); + if (BROTLI_IS_OOM(m)) return; + + for (i = 0; i < mb->literal_split.num_types; ++i) { + uint32_t offset = (uint32_t)(i * num_contexts); + size_t j; + for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS); ++j) { + mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] = + offset + static_context_map[j]; + } + } +} + +static BROTLI_INLINE void BrotliBuildMetaBlockGreedyInternal( + MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask, + uint8_t prev_byte, uint8_t prev_byte2, ContextType literal_context_mode, + const size_t num_contexts, const uint32_t* static_context_map, + const Command *commands, size_t n_commands, MetaBlockSplit* mb) { + union { + BlockSplitterLiteral plain; + ContextBlockSplitter ctx; + } lit_blocks; + BlockSplitterCommand cmd_blocks; + BlockSplitterDistance dist_blocks; + size_t num_literals = 0; + size_t i; + for (i = 0; i < n_commands; ++i) { + num_literals += commands[i].insert_len_; + } + + if (num_contexts == 1) { + InitBlockSplitterLiteral(m, &lit_blocks.plain, 256, 512, 400.0, + num_literals, &mb->literal_split, &mb->literal_histograms, + &mb->literal_histograms_size); + } else { + InitContextBlockSplitter(m, &lit_blocks.ctx, 256, num_contexts, 512, 400.0, + num_literals, &mb->literal_split, &mb->literal_histograms, + &mb->literal_histograms_size); + } + if (BROTLI_IS_OOM(m)) return; + InitBlockSplitterCommand(m, &cmd_blocks, BROTLI_NUM_COMMAND_SYMBOLS, 1024, + 500.0, n_commands, &mb->command_split, &mb->command_histograms, + &mb->command_histograms_size); + if (BROTLI_IS_OOM(m)) return; + InitBlockSplitterDistance(m, &dist_blocks, 64, 512, 100.0, n_commands, + &mb->distance_split, &mb->distance_histograms, + &mb->distance_histograms_size); + if (BROTLI_IS_OOM(m)) return; + + for (i = 0; i < n_commands; ++i) { + const Command cmd = commands[i]; + size_t j; + BlockSplitterAddSymbolCommand(&cmd_blocks, cmd.cmd_prefix_); + for (j = cmd.insert_len_; j != 0; --j) { + uint8_t literal = ringbuffer[pos & mask]; + if (num_contexts == 1) { + BlockSplitterAddSymbolLiteral(&lit_blocks.plain, literal); + } else { + size_t context = Context(prev_byte, prev_byte2, literal_context_mode); + ContextBlockSplitterAddSymbol(&lit_blocks.ctx, m, literal, + static_context_map[context]); + if (BROTLI_IS_OOM(m)) return; + } + prev_byte2 = prev_byte; + prev_byte = literal; + ++pos; + } + pos += CommandCopyLen(&cmd); + if (CommandCopyLen(&cmd)) { + prev_byte2 = ringbuffer[(pos - 2) & mask]; + prev_byte = ringbuffer[(pos - 1) & mask]; + if (cmd.cmd_prefix_ >= 128) { + BlockSplitterAddSymbolDistance(&dist_blocks, cmd.dist_prefix_); + } + } + } + + if (num_contexts == 1) { + BlockSplitterFinishBlockLiteral( + &lit_blocks.plain, /* is_final = */ BROTLI_TRUE); + } else { + ContextBlockSplitterFinishBlock( + &lit_blocks.ctx, m, /* is_final = */ BROTLI_TRUE); + if (BROTLI_IS_OOM(m)) return; + } + BlockSplitterFinishBlockCommand(&cmd_blocks, /* is_final = */ BROTLI_TRUE); + BlockSplitterFinishBlockDistance(&dist_blocks, /* is_final = */ BROTLI_TRUE); + + if (num_contexts > 1) { + MapStaticContexts(m, num_contexts, static_context_map, mb); + } +} + +void BrotliBuildMetaBlockGreedy(MemoryManager* m, + const uint8_t* ringbuffer, + size_t pos, + size_t mask, + uint8_t prev_byte, + uint8_t prev_byte2, + ContextType literal_context_mode, + size_t num_contexts, + const uint32_t* static_context_map, + const Command* commands, + size_t n_commands, + MetaBlockSplit* mb) { + if (num_contexts == 1) { + BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byte, + prev_byte2, literal_context_mode, 1, NULL, commands, n_commands, mb); + } else { + BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byte, + prev_byte2, literal_context_mode, num_contexts, static_context_map, + commands, n_commands, mb); + } +} + +void BrotliOptimizeHistograms(size_t num_direct_distance_codes, + size_t distance_postfix_bits, + MetaBlockSplit* mb) { + uint8_t good_for_rle[BROTLI_NUM_COMMAND_SYMBOLS]; + size_t num_distance_codes; + size_t i; + for (i = 0; i < mb->literal_histograms_size; ++i) { + BrotliOptimizeHuffmanCountsForRle(256, mb->literal_histograms[i].data_, + good_for_rle); + } + for (i = 0; i < mb->command_histograms_size; ++i) { + BrotliOptimizeHuffmanCountsForRle(BROTLI_NUM_COMMAND_SYMBOLS, + mb->command_histograms[i].data_, + good_for_rle); + } + num_distance_codes = BROTLI_NUM_DISTANCE_SHORT_CODES + + num_direct_distance_codes + + ((2 * BROTLI_MAX_DISTANCE_BITS) << distance_postfix_bits); + for (i = 0; i < mb->distance_histograms_size; ++i) { + BrotliOptimizeHuffmanCountsForRle(num_distance_codes, + mb->distance_histograms[i].data_, + good_for_rle); + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/metablock.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/metablock.h new file mode 100644 index 00000000000..cc523999cda --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/metablock.h @@ -0,0 +1,100 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Algorithms for distributing the literals and commands of a metablock between + block types and contexts. */ + +#ifndef BROTLI_ENC_METABLOCK_H_ +#define BROTLI_ENC_METABLOCK_H_ + +#include <brotli/types.h> +#include "./block_splitter.h" +#include "./command.h" +#include "./context.h" +#include "./histogram.h" +#include "./memory.h" +#include "./port.h" +#include "./quality.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +typedef struct MetaBlockSplit { + BlockSplit literal_split; + BlockSplit command_split; + BlockSplit distance_split; + uint32_t* literal_context_map; + size_t literal_context_map_size; + uint32_t* distance_context_map; + size_t distance_context_map_size; + HistogramLiteral* literal_histograms; + size_t literal_histograms_size; + HistogramCommand* command_histograms; + size_t command_histograms_size; + HistogramDistance* distance_histograms; + size_t distance_histograms_size; +} MetaBlockSplit; + +static BROTLI_INLINE void InitMetaBlockSplit(MetaBlockSplit* mb) { + BrotliInitBlockSplit(&mb->literal_split); + BrotliInitBlockSplit(&mb->command_split); + BrotliInitBlockSplit(&mb->distance_split); + mb->literal_context_map = 0; + mb->literal_context_map_size = 0; + mb->distance_context_map = 0; + mb->distance_context_map_size = 0; + mb->literal_histograms = 0; + mb->literal_histograms_size = 0; + mb->command_histograms = 0; + mb->command_histograms_size = 0; + mb->distance_histograms = 0; + mb->distance_histograms_size = 0; +} + +static BROTLI_INLINE void DestroyMetaBlockSplit( + MemoryManager* m, MetaBlockSplit* mb) { + BrotliDestroyBlockSplit(m, &mb->literal_split); + BrotliDestroyBlockSplit(m, &mb->command_split); + BrotliDestroyBlockSplit(m, &mb->distance_split); + BROTLI_FREE(m, mb->literal_context_map); + BROTLI_FREE(m, mb->distance_context_map); + BROTLI_FREE(m, mb->literal_histograms); + BROTLI_FREE(m, mb->command_histograms); + BROTLI_FREE(m, mb->distance_histograms); +} + +/* Uses the slow shortest-path block splitter and does context clustering. */ +BROTLI_INTERNAL void BrotliBuildMetaBlock(MemoryManager* m, + const uint8_t* ringbuffer, + const size_t pos, + const size_t mask, + const BrotliEncoderParams* params, + uint8_t prev_byte, + uint8_t prev_byte2, + const Command* cmds, + size_t num_commands, + ContextType literal_context_mode, + MetaBlockSplit* mb); + +/* Uses a fast greedy block splitter that tries to merge current block with the + last or the second last block and uses a static context clustering which + is the same for all block types. */ +BROTLI_INTERNAL void BrotliBuildMetaBlockGreedy( + MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask, + uint8_t prev_byte, uint8_t prev_byte2, ContextType literal_context_mode, + size_t num_contexts, const uint32_t* static_context_map, + const Command* commands, size_t n_commands, MetaBlockSplit* mb); + +BROTLI_INTERNAL void BrotliOptimizeHistograms(size_t num_direct_distance_codes, + size_t distance_postfix_bits, + MetaBlockSplit* mb); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_METABLOCK_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/metablock_inc.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/metablock_inc.h new file mode 100644 index 00000000000..c8bfb81281c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/metablock_inc.h @@ -0,0 +1,183 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN */ + +#define HistogramType FN(Histogram) + +/* Greedy block splitter for one block category (literal, command or distance). +*/ +typedef struct FN(BlockSplitter) { + /* Alphabet size of particular block category. */ + size_t alphabet_size_; + /* We collect at least this many symbols for each block. */ + size_t min_block_size_; + /* We merge histograms A and B if + entropy(A+B) < entropy(A) + entropy(B) + split_threshold_, + where A is the current histogram and B is the histogram of the last or the + second last block type. */ + double split_threshold_; + + size_t num_blocks_; + BlockSplit* split_; /* not owned */ + HistogramType* histograms_; /* not owned */ + size_t* histograms_size_; /* not owned */ + + /* The number of symbols that we want to collect before deciding on whether + or not to merge the block with a previous one or emit a new block. */ + size_t target_block_size_; + /* The number of symbols in the current histogram. */ + size_t block_size_; + /* Offset of the current histogram. */ + size_t curr_histogram_ix_; + /* Offset of the histograms of the previous two block types. */ + size_t last_histogram_ix_[2]; + /* Entropy of the previous two block types. */ + double last_entropy_[2]; + /* The number of times we merged the current block with the last one. */ + size_t merge_last_count_; +} FN(BlockSplitter); + +static void FN(InitBlockSplitter)( + MemoryManager* m, FN(BlockSplitter)* self, size_t alphabet_size, + size_t min_block_size, double split_threshold, size_t num_symbols, + BlockSplit* split, HistogramType** histograms, size_t* histograms_size) { + size_t max_num_blocks = num_symbols / min_block_size + 1; + /* We have to allocate one more histogram than the maximum number of block + types for the current histogram when the meta-block is too big. */ + size_t max_num_types = + BROTLI_MIN(size_t, max_num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 1); + self->alphabet_size_ = alphabet_size; + self->min_block_size_ = min_block_size; + self->split_threshold_ = split_threshold; + self->num_blocks_ = 0; + self->split_ = split; + self->histograms_size_ = histograms_size; + self->target_block_size_ = min_block_size; + self->block_size_ = 0; + self->curr_histogram_ix_ = 0; + self->merge_last_count_ = 0; + BROTLI_ENSURE_CAPACITY(m, uint8_t, + split->types, split->types_alloc_size, max_num_blocks); + BROTLI_ENSURE_CAPACITY(m, uint32_t, + split->lengths, split->lengths_alloc_size, max_num_blocks); + if (BROTLI_IS_OOM(m)) return; + self->split_->num_blocks = max_num_blocks; + assert(*histograms == 0); + *histograms_size = max_num_types; + *histograms = BROTLI_ALLOC(m, HistogramType, *histograms_size); + self->histograms_ = *histograms; + if (BROTLI_IS_OOM(m)) return; + /* Clear only current histogram. */ + FN(HistogramClear)(&self->histograms_[0]); + self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0; +} + +/* Does either of three things: + (1) emits the current block with a new block type; + (2) emits the current block with the type of the second last block; + (3) merges the current block with the last block. */ +static void FN(BlockSplitterFinishBlock)( + FN(BlockSplitter)* self, BROTLI_BOOL is_final) { + BlockSplit* split = self->split_; + double* last_entropy = self->last_entropy_; + HistogramType* histograms = self->histograms_; + self->block_size_ = + BROTLI_MAX(size_t, self->block_size_, self->min_block_size_); + if (self->num_blocks_ == 0) { + /* Create first block. */ + split->lengths[0] = (uint32_t)self->block_size_; + split->types[0] = 0; + last_entropy[0] = + BitsEntropy(histograms[0].data_, self->alphabet_size_); + last_entropy[1] = last_entropy[0]; + ++self->num_blocks_; + ++split->num_types; + ++self->curr_histogram_ix_; + if (self->curr_histogram_ix_ < *self->histograms_size_) + FN(HistogramClear)(&histograms[self->curr_histogram_ix_]); + self->block_size_ = 0; + } else if (self->block_size_ > 0) { + double entropy = BitsEntropy(histograms[self->curr_histogram_ix_].data_, + self->alphabet_size_); + HistogramType combined_histo[2]; + double combined_entropy[2]; + double diff[2]; + size_t j; + for (j = 0; j < 2; ++j) { + size_t last_histogram_ix = self->last_histogram_ix_[j]; + combined_histo[j] = histograms[self->curr_histogram_ix_]; + FN(HistogramAddHistogram)(&combined_histo[j], + &histograms[last_histogram_ix]); + combined_entropy[j] = BitsEntropy( + &combined_histo[j].data_[0], self->alphabet_size_); + diff[j] = combined_entropy[j] - entropy - last_entropy[j]; + } + + if (split->num_types < BROTLI_MAX_NUMBER_OF_BLOCK_TYPES && + diff[0] > self->split_threshold_ && + diff[1] > self->split_threshold_) { + /* Create new block. */ + split->lengths[self->num_blocks_] = (uint32_t)self->block_size_; + split->types[self->num_blocks_] = (uint8_t)split->num_types; + self->last_histogram_ix_[1] = self->last_histogram_ix_[0]; + self->last_histogram_ix_[0] = (uint8_t)split->num_types; + last_entropy[1] = last_entropy[0]; + last_entropy[0] = entropy; + ++self->num_blocks_; + ++split->num_types; + ++self->curr_histogram_ix_; + if (self->curr_histogram_ix_ < *self->histograms_size_) + FN(HistogramClear)(&histograms[self->curr_histogram_ix_]); + self->block_size_ = 0; + self->merge_last_count_ = 0; + self->target_block_size_ = self->min_block_size_; + } else if (diff[1] < diff[0] - 20.0) { + /* Combine this block with second last block. */ + split->lengths[self->num_blocks_] = (uint32_t)self->block_size_; + split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2]; + BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1); + histograms[self->last_histogram_ix_[0]] = combined_histo[1]; + last_entropy[1] = last_entropy[0]; + last_entropy[0] = combined_entropy[1]; + ++self->num_blocks_; + self->block_size_ = 0; + FN(HistogramClear)(&histograms[self->curr_histogram_ix_]); + self->merge_last_count_ = 0; + self->target_block_size_ = self->min_block_size_; + } else { + /* Combine this block with last block. */ + split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_; + histograms[self->last_histogram_ix_[0]] = combined_histo[0]; + last_entropy[0] = combined_entropy[0]; + if (split->num_types == 1) { + last_entropy[1] = last_entropy[0]; + } + self->block_size_ = 0; + FN(HistogramClear)(&histograms[self->curr_histogram_ix_]); + if (++self->merge_last_count_ > 1) { + self->target_block_size_ += self->min_block_size_; + } + } + } + if (is_final) { + *self->histograms_size_ = split->num_types; + split->num_blocks = self->num_blocks_; + } +} + +/* Adds the next symbol to the current histogram. When the current histogram + reaches the target size, decides on merging the block. */ +static void FN(BlockSplitterAddSymbol)(FN(BlockSplitter)* self, size_t symbol) { + FN(HistogramAdd)(&self->histograms_[self->curr_histogram_ix_], symbol); + ++self->block_size_; + if (self->block_size_ == self->target_block_size_) { + FN(BlockSplitterFinishBlock)(self, /* is_final = */ BROTLI_FALSE); + } +} + +#undef HistogramType diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/port.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/port.h new file mode 100644 index 00000000000..c3befdf17f5 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/port.h @@ -0,0 +1,192 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Macros for endianness, branch prediction and unaligned loads and stores. */ + +#ifndef BROTLI_ENC_PORT_H_ +#define BROTLI_ENC_PORT_H_ + +#include <assert.h> +#include <string.h> /* memcpy */ + +#include <brotli/port.h> +#include <brotli/types.h> + +#if defined OS_LINUX || defined OS_CYGWIN +#include <endian.h> +#elif defined OS_FREEBSD +#include <machine/endian.h> +#elif defined OS_MACOSX +#include <machine/endian.h> +/* Let's try and follow the Linux convention */ +#define __BYTE_ORDER BYTE_ORDER +#define __LITTLE_ENDIAN LITTLE_ENDIAN +#endif + +/* define the macro BROTLI_LITTLE_ENDIAN + using the above endian definitions from endian.h if + endian.h was included */ +#ifdef __BYTE_ORDER +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define BROTLI_LITTLE_ENDIAN +#endif + +#else + +#if defined(__LITTLE_ENDIAN__) +#define BROTLI_LITTLE_ENDIAN +#endif +#endif /* __BYTE_ORDER */ + +#if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +#define BROTLI_LITTLE_ENDIAN +#endif + +/* Enable little-endian optimization for x64 architecture on Windows. */ +#if (defined(_WIN32) || defined(_WIN64)) && defined(_M_X64) +#define BROTLI_LITTLE_ENDIAN +#endif + +/* Portable handling of unaligned loads, stores, and copies. + On some platforms, like ARM, the copy functions can be more efficient + then a load and a store. */ + +#if defined(BROTLI_LITTLE_ENDIAN) && (\ + defined(ARCH_PIII) || defined(ARCH_ATHLON) || \ + defined(ARCH_K8) || defined(_ARCH_PPC)) + +/* x86 and x86-64 can perform unaligned loads/stores directly; + modern PowerPC hardware can also do unaligned integer loads and stores; + but note: the FPU still sends unaligned loads and stores to a trap handler! +*/ + +#define BROTLI_UNALIGNED_LOAD32(_p) (*(const uint32_t *)(_p)) +#define BROTLI_UNALIGNED_LOAD64LE(_p) (*(const uint64_t *)(_p)) + +#define BROTLI_UNALIGNED_STORE64LE(_p, _val) \ + (*(uint64_t *)(_p) = (_val)) + +#elif defined(BROTLI_LITTLE_ENDIAN) && defined(__arm__) && \ + !defined(__ARM_ARCH_5__) && \ + !defined(__ARM_ARCH_5T__) && \ + !defined(__ARM_ARCH_5TE__) && \ + !defined(__ARM_ARCH_5TEJ__) && \ + !defined(__ARM_ARCH_6__) && \ + !defined(__ARM_ARCH_6J__) && \ + !defined(__ARM_ARCH_6K__) && \ + !defined(__ARM_ARCH_6Z__) && \ + !defined(__ARM_ARCH_6ZK__) && \ + !defined(__ARM_ARCH_6T2__) + +/* ARMv7 and newer support native unaligned accesses, but only of 16-bit + and 32-bit values (not 64-bit); older versions either raise a fatal signal, + do an unaligned read and rotate the words around a bit, or do the reads very + slowly (trip through kernel mode). */ + +#define BROTLI_UNALIGNED_LOAD32(_p) (*(const uint32_t *)(_p)) + +static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void *p) { + uint64_t t; + memcpy(&t, p, sizeof t); + return t; +} + +static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void *p, uint64_t v) { + memcpy(p, &v, sizeof v); +} + +#else + +/* These functions are provided for architectures that don't support */ +/* unaligned loads and stores. */ + +static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32(const void *p) { + uint32_t t; + memcpy(&t, p, sizeof t); + return t; +} + +#if defined(BROTLI_LITTLE_ENDIAN) + +static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void *p) { + uint64_t t; + memcpy(&t, p, sizeof t); + return t; +} + +static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void *p, uint64_t v) { + memcpy(p, &v, sizeof v); +} + +#else /* BROTLI_LITTLE_ENDIAN */ + +static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void *p) { + const uint8_t* in = (const uint8_t*)p; + uint64_t value = (uint64_t)(in[0]); + value |= (uint64_t)(in[1]) << 8; + value |= (uint64_t)(in[2]) << 16; + value |= (uint64_t)(in[3]) << 24; + value |= (uint64_t)(in[4]) << 32; + value |= (uint64_t)(in[5]) << 40; + value |= (uint64_t)(in[6]) << 48; + value |= (uint64_t)(in[7]) << 56; + return value; +} + +static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void *p, uint64_t v) { + uint8_t* out = (uint8_t*)p; + out[0] = (uint8_t)v; + out[1] = (uint8_t)(v >> 8); + out[2] = (uint8_t)(v >> 16); + out[3] = (uint8_t)(v >> 24); + out[4] = (uint8_t)(v >> 32); + out[5] = (uint8_t)(v >> 40); + out[6] = (uint8_t)(v >> 48); + out[7] = (uint8_t)(v >> 56); +} + +#endif /* BROTLI_LITTLE_ENDIAN */ + +#endif + +#define TEMPLATE_(T) \ + static BROTLI_INLINE T brotli_min_ ## T (T a, T b) { return a < b ? a : b; } \ + static BROTLI_INLINE T brotli_max_ ## T (T a, T b) { return a > b ? a : b; } +TEMPLATE_(double) TEMPLATE_(float) TEMPLATE_(int) +TEMPLATE_(size_t) TEMPLATE_(uint32_t) TEMPLATE_(uint8_t) +#undef TEMPLATE_ +#define BROTLI_MIN(T, A, B) (brotli_min_ ## T((A), (B))) +#define BROTLI_MAX(T, A, B) (brotli_max_ ## T((A), (B))) + +#define BROTLI_SWAP(T, A, I, J) { \ + T __brotli_swap_tmp = (A)[(I)]; \ + (A)[(I)] = (A)[(J)]; \ + (A)[(J)] = __brotli_swap_tmp; \ +} + +/* +Dynamically grows array capacity to at least the requested size +M: MemoryManager +T: data type +A: array +C: capacity +R: requested size +*/ +#define BROTLI_ENSURE_CAPACITY(M, T, A, C, R) { \ + if (C < (R)) { \ + size_t _new_size = (C == 0) ? (R) : C; \ + T* new_array; \ + while (_new_size < (R)) _new_size *= 2; \ + new_array = BROTLI_ALLOC((M), T, _new_size); \ + if (!BROTLI_IS_OOM(M) && C != 0) \ + memcpy(new_array, A, C * sizeof(T)); \ + BROTLI_FREE((M), A); \ + A = new_array; \ + C = _new_size; \ + } \ +} + +#endif /* BROTLI_ENC_PORT_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/prefix.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/prefix.h new file mode 100644 index 00000000000..e279ffe7f88 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/prefix.h @@ -0,0 +1,54 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Functions for encoding of integers into prefix codes the amount of extra + bits, and the actual values of the extra bits. */ + +#ifndef BROTLI_ENC_PREFIX_H_ +#define BROTLI_ENC_PREFIX_H_ + +#include "../common/constants.h" +#include <brotli/port.h> +#include <brotli/types.h> +#include "./fast_log.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* Here distance_code is an intermediate code, i.e. one of the special codes or + the actual distance increased by BROTLI_NUM_DISTANCE_SHORT_CODES - 1. */ +static BROTLI_INLINE void PrefixEncodeCopyDistance(size_t distance_code, + size_t num_direct_codes, + size_t postfix_bits, + uint16_t* code, + uint32_t* extra_bits) { + if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes) { + *code = (uint16_t)distance_code; + *extra_bits = 0; + return; + } else { + size_t dist = ((size_t)1 << (postfix_bits + 2u)) + + (distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES - num_direct_codes); + size_t bucket = Log2FloorNonZero(dist) - 1; + size_t postfix_mask = (1u << postfix_bits) - 1; + size_t postfix = dist & postfix_mask; + size_t prefix = (dist >> bucket) & 1; + size_t offset = (2 + prefix) << bucket; + size_t nbits = bucket - postfix_bits; + *code = (uint16_t)( + (BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes + + ((2 * (nbits - 1) + prefix) << postfix_bits) + postfix)); + *extra_bits = (uint32_t)( + (nbits << 24) | ((dist - offset) >> postfix_bits)); + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_PREFIX_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/quality.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/quality.h new file mode 100644 index 00000000000..5791470510f --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/quality.h @@ -0,0 +1,161 @@ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Constants and formulas that affect speed-ratio trade-offs and thus define + quality levels. */ + +#ifndef BROTLI_ENC_QUALITY_H_ +#define BROTLI_ENC_QUALITY_H_ + +#include <brotli/encode.h> +#include "./port.h" + +#define FAST_ONE_PASS_COMPRESSION_QUALITY 0 +#define FAST_TWO_PASS_COMPRESSION_QUALITY 1 +#define ZOPFLIFICATION_QUALITY 10 +#define HQ_ZOPFLIFICATION_QUALITY 11 + +#define MAX_QUALITY_FOR_STATIC_ENTROPY_CODES 2 +#define MIN_QUALITY_FOR_BLOCK_SPLIT 4 +#define MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS 4 +#define MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH 5 +#define MIN_QUALITY_FOR_CONTEXT_MODELING 5 +#define MIN_QUALITY_FOR_HQ_CONTEXT_MODELING 7 +#define MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING 10 +/* Only for "font" mode. */ +#define MIN_QUALITY_FOR_RECOMPUTE_DISTANCE_PREFIXES 10 + +/* For quality below MIN_QUALITY_FOR_BLOCK_SPLIT there is no block splitting, + so we buffer at most this much literals and commands. */ +#define MAX_NUM_DELAYED_SYMBOLS 0x2fff + +typedef struct BrotliHasherParams { + int type; + int bucket_bits; + int block_bits; + int hash_len; + int num_last_distances_to_check; +} BrotliHasherParams; + +/* Encoding parameters */ +typedef struct BrotliEncoderParams { + BrotliEncoderMode mode; + int quality; + int lgwin; + int lgblock; + size_t size_hint; + BROTLI_BOOL disable_literal_context_modeling; + BrotliHasherParams hasher; +} BrotliEncoderParams; + +/* Returns hash-table size for quality levels 0 and 1. */ +static BROTLI_INLINE size_t MaxHashTableSize(int quality) { + return quality == FAST_ONE_PASS_COMPRESSION_QUALITY ? 1 << 15 : 1 << 17; +} + +/* The maximum length for which the zopflification uses distinct distances. */ +#define MAX_ZOPFLI_LEN_QUALITY_10 150 +#define MAX_ZOPFLI_LEN_QUALITY_11 325 + +/* Do not thoroughly search when a long copy is found. */ +#define BROTLI_LONG_COPY_QUICK_STEP 16384 + +static BROTLI_INLINE size_t MaxZopfliLen(const BrotliEncoderParams* params) { + return params->quality <= 10 ? + MAX_ZOPFLI_LEN_QUALITY_10 : + MAX_ZOPFLI_LEN_QUALITY_11; +} + +/* Number of best candidates to evaluate to expand Zopfli chain. */ +static BROTLI_INLINE size_t MaxZopfliCandidates( + const BrotliEncoderParams* params) { + return params->quality <= 10 ? 1 : 5; +} + +static BROTLI_INLINE void SanitizeParams(BrotliEncoderParams* params) { + params->quality = BROTLI_MIN(int, BROTLI_MAX_QUALITY, + BROTLI_MAX(int, BROTLI_MIN_QUALITY, params->quality)); + if (params->lgwin < BROTLI_MIN_WINDOW_BITS) { + params->lgwin = BROTLI_MIN_WINDOW_BITS; + } else if (params->lgwin > BROTLI_MAX_WINDOW_BITS) { + params->lgwin = BROTLI_MAX_WINDOW_BITS; + } +} + +/* Returns optimized lg_block value. */ +static BROTLI_INLINE int ComputeLgBlock(const BrotliEncoderParams* params) { + int lgblock = params->lgblock; + if (params->quality == FAST_ONE_PASS_COMPRESSION_QUALITY || + params->quality == FAST_TWO_PASS_COMPRESSION_QUALITY) { + lgblock = params->lgwin; + } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) { + lgblock = 14; + } else if (lgblock == 0) { + lgblock = 16; + if (params->quality >= 9 && params->lgwin > lgblock) { + lgblock = BROTLI_MIN(int, 18, params->lgwin); + } + } else { + lgblock = BROTLI_MIN(int, BROTLI_MAX_INPUT_BLOCK_BITS, + BROTLI_MAX(int, BROTLI_MIN_INPUT_BLOCK_BITS, lgblock)); + } + return lgblock; +} + +/* Returns log2 of the size of main ring buffer area. + Allocate at least lgwin + 1 bits for the ring buffer so that the newly + added block fits there completely and we still get lgwin bits and at least + read_block_size_bits + 1 bits because the copy tail length needs to be + smaller than ring-buffer size. */ +static BROTLI_INLINE int ComputeRbBits(const BrotliEncoderParams* params) { + return 1 + BROTLI_MAX(int, params->lgwin, params->lgblock); +} + +static BROTLI_INLINE size_t MaxMetablockSize( + const BrotliEncoderParams* params) { + int bits = + BROTLI_MIN(int, ComputeRbBits(params), BROTLI_MAX_INPUT_BLOCK_BITS); + return (size_t)1 << bits; +} + +/* When searching for backward references and have not seen matches for a long + time, we can skip some match lookups. Unsuccessful match lookups are very + expensive and this kind of a heuristic speeds up compression quite a lot. + At first 8 byte strides are taken and every second byte is put to hasher. + After 4x more literals stride by 16 bytes, every put 4-th byte to hasher. + Applied only to qualities 2 to 9. */ +static BROTLI_INLINE size_t LiteralSpreeLengthForSparseSearch( + const BrotliEncoderParams* params) { + return params->quality < 9 ? 64 : 512; +} + +static BROTLI_INLINE void ChooseHasher(const BrotliEncoderParams* params, + BrotliHasherParams* hparams) { + if (params->quality > 9) { + hparams->type = 10; + } else if (params->quality == 4 && params->size_hint >= (1 << 20)) { + hparams->type = 54; + } else if (params->quality < 5) { + hparams->type = params->quality; + } else if (params->lgwin <= 16) { + hparams->type = params->quality < 7 ? 40 : params->quality < 9 ? 41 : 42; + } else if (params->size_hint >= (1 << 20) && params->lgwin >= 19) { + hparams->type = 6; + hparams->block_bits = params->quality - 1; + hparams->bucket_bits = 15; + hparams->hash_len = 5; + hparams->num_last_distances_to_check = + params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16; + } else { + hparams->type = 5; + hparams->block_bits = params->quality - 1; + hparams->bucket_bits = params->quality < 7 ? 14 : 15; + hparams->num_last_distances_to_check = + params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16; + } +} + +#endif /* BROTLI_ENC_QUALITY_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/ringbuffer.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/ringbuffer.h new file mode 100644 index 00000000000..0e7ef977a44 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/ringbuffer.h @@ -0,0 +1,160 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Sliding window over the input data. */ + +#ifndef BROTLI_ENC_RINGBUFFER_H_ +#define BROTLI_ENC_RINGBUFFER_H_ + +#include <string.h> /* memcpy */ + +#include <brotli/types.h> +#include "./memory.h" +#include "./port.h" +#include "./quality.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* A RingBuffer(window_bits, tail_bits) contains `1 << window_bits' bytes of + data in a circular manner: writing a byte writes it to: + `position() % (1 << window_bits)'. + For convenience, the RingBuffer array contains another copy of the + first `1 << tail_bits' bytes: + buffer_[i] == buffer_[i + (1 << window_bits)], if i < (1 << tail_bits), + and another copy of the last two bytes: + buffer_[-1] == buffer_[(1 << window_bits) - 1] and + buffer_[-2] == buffer_[(1 << window_bits) - 2]. */ +typedef struct RingBuffer { + /* Size of the ring-buffer is (1 << window_bits) + tail_size_. */ + const uint32_t size_; + const uint32_t mask_; + const uint32_t tail_size_; + const uint32_t total_size_; + + uint32_t cur_size_; + /* Position to write in the ring buffer. */ + uint32_t pos_; + /* The actual ring buffer containing the copy of the last two bytes, the data, + and the copy of the beginning as a tail. */ + uint8_t *data_; + /* The start of the ring-buffer. */ + uint8_t *buffer_; +} RingBuffer; + +static BROTLI_INLINE void RingBufferInit(RingBuffer* rb) { + rb->cur_size_ = 0; + rb->pos_ = 0; + rb->data_ = 0; + rb->buffer_ = 0; +} + +static BROTLI_INLINE void RingBufferSetup( + const BrotliEncoderParams* params, RingBuffer* rb) { + int window_bits = ComputeRbBits(params); + int tail_bits = params->lgblock; + *(uint32_t*)&rb->size_ = 1u << window_bits; + *(uint32_t*)&rb->mask_ = (1u << window_bits) - 1; + *(uint32_t*)&rb->tail_size_ = 1u << tail_bits; + *(uint32_t*)&rb->total_size_ = rb->size_ + rb->tail_size_; +} + +static BROTLI_INLINE void RingBufferFree(MemoryManager* m, RingBuffer* rb) { + BROTLI_FREE(m, rb->data_); +} + +/* Allocates or re-allocates data_ to the given length + plus some slack + region before and after. Fills the slack regions with zeros. */ +static BROTLI_INLINE void RingBufferInitBuffer( + MemoryManager* m, const uint32_t buflen, RingBuffer* rb) { + static const size_t kSlackForEightByteHashingEverywhere = 7; + uint8_t* new_data = BROTLI_ALLOC( + m, uint8_t, 2 + buflen + kSlackForEightByteHashingEverywhere); + size_t i; + if (BROTLI_IS_OOM(m)) return; + if (rb->data_) { + memcpy(new_data, rb->data_, + 2 + rb->cur_size_ + kSlackForEightByteHashingEverywhere); + BROTLI_FREE(m, rb->data_); + } + rb->data_ = new_data; + rb->cur_size_ = buflen; + rb->buffer_ = rb->data_ + 2; + rb->buffer_[-2] = rb->buffer_[-1] = 0; + for (i = 0; i < kSlackForEightByteHashingEverywhere; ++i) { + rb->buffer_[rb->cur_size_ + i] = 0; + } +} + +static BROTLI_INLINE void RingBufferWriteTail( + const uint8_t *bytes, size_t n, RingBuffer* rb) { + const size_t masked_pos = rb->pos_ & rb->mask_; + if (BROTLI_PREDICT_FALSE(masked_pos < rb->tail_size_)) { + /* Just fill the tail buffer with the beginning data. */ + const size_t p = rb->size_ + masked_pos; + memcpy(&rb->buffer_[p], bytes, + BROTLI_MIN(size_t, n, rb->tail_size_ - masked_pos)); + } +} + +/* Push bytes into the ring buffer. */ +static BROTLI_INLINE void RingBufferWrite( + MemoryManager* m, const uint8_t *bytes, size_t n, RingBuffer* rb) { + if (rb->pos_ == 0 && n < rb->tail_size_) { + /* Special case for the first write: to process the first block, we don't + need to allocate the whole ring-buffer and we don't need the tail + either. However, we do this memory usage optimization only if the + first write is less than the tail size, which is also the input block + size, otherwise it is likely that other blocks will follow and we + will need to reallocate to the full size anyway. */ + rb->pos_ = (uint32_t)n; + RingBufferInitBuffer(m, rb->pos_, rb); + if (BROTLI_IS_OOM(m)) return; + memcpy(rb->buffer_, bytes, n); + return; + } + if (rb->cur_size_ < rb->total_size_) { + /* Lazily allocate the full buffer. */ + RingBufferInitBuffer(m, rb->total_size_, rb); + if (BROTLI_IS_OOM(m)) return; + /* Initialize the last two bytes to zero, so that we don't have to worry + later when we copy the last two bytes to the first two positions. */ + rb->buffer_[rb->size_ - 2] = 0; + rb->buffer_[rb->size_ - 1] = 0; + } + { + const size_t masked_pos = rb->pos_ & rb->mask_; + /* The length of the writes is limited so that we do not need to worry + about a write */ + RingBufferWriteTail(bytes, n, rb); + if (BROTLI_PREDICT_TRUE(masked_pos + n <= rb->size_)) { + /* A single write fits. */ + memcpy(&rb->buffer_[masked_pos], bytes, n); + } else { + /* Split into two writes. + Copy into the end of the buffer, including the tail buffer. */ + memcpy(&rb->buffer_[masked_pos], bytes, + BROTLI_MIN(size_t, n, rb->total_size_ - masked_pos)); + /* Copy into the beginning of the buffer */ + memcpy(&rb->buffer_[0], bytes + (rb->size_ - masked_pos), + n - (rb->size_ - masked_pos)); + } + } + rb->buffer_[-2] = rb->buffer_[rb->size_ - 2]; + rb->buffer_[-1] = rb->buffer_[rb->size_ - 1]; + rb->pos_ += (uint32_t)n; + if (rb->pos_ > (1u << 30)) { + /* Wrap, but preserve not-a-first-lap feature. */ + rb->pos_ = (rb->pos_ & ((1u << 30) - 1)) | (1u << 30); + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_RINGBUFFER_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/static_dict.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/static_dict.c index 27177b1b6d4..b98ee8becdd 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/static_dict.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/static_dict.c @@ -6,88 +6,105 @@ #include "./static_dict.h" -#include <algorithm> - -#include "./dictionary.h" +#include "../common/dictionary.h" #include "./find_match_length.h" +#include "./port.h" #include "./static_dict_lut.h" -#include "./transform.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static const uint8_t kUppercaseFirst = 10; +static const uint8_t kOmitLastNTransforms[10] = { + 0, 12, 27, 23, 42, 63, 56, 48, 59, 64, +}; -inline uint32_t Hash(const uint8_t *data) { +static BROTLI_INLINE uint32_t Hash(const uint8_t *data) { uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kDictHashMul32; - // The higher bits contain more mixture from the multiplication, - // so we take our results from there. + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ return h >> (32 - kDictNumBits); } -inline void AddMatch(size_t distance, size_t len, size_t len_code, - uint32_t* matches) { - uint32_t match = static_cast<uint32_t>((distance << 5) + len_code); - matches[len] = std::min(matches[len], match); +static BROTLI_INLINE void AddMatch(size_t distance, size_t len, size_t len_code, + uint32_t* matches) { + uint32_t match = (uint32_t)((distance << 5) + len_code); + matches[len] = BROTLI_MIN(uint32_t, matches[len], match); } -inline size_t DictMatchLength(const uint8_t* data, - size_t id, - size_t len, - size_t maxlen) { - const size_t offset = kBrotliDictionaryOffsetsByLength[len] + len * id; - return FindMatchLengthWithLimit(&kBrotliDictionary[offset], data, - std::min(len, maxlen)); +static BROTLI_INLINE size_t DictMatchLength(const BrotliDictionary* dictionary, + const uint8_t* data, + size_t id, + size_t len, + size_t maxlen) { + const size_t offset = dictionary->offsets_by_length[len] + len * id; + return FindMatchLengthWithLimit(&dictionary->data[offset], data, + BROTLI_MIN(size_t, len, maxlen)); } -inline bool IsMatch(DictWord w, const uint8_t* data, size_t max_length) { - if (w.len > max_length) return false; - const size_t offset = kBrotliDictionaryOffsetsByLength[w.len] + w.len * w.idx; - const uint8_t* dict = &kBrotliDictionary[offset]; - if (w.transform == 0) { - // Match against base dictionary word. - return FindMatchLengthWithLimit(dict, data, w.len) == w.len; - } else if (w.transform == 10) { - // Match against uppercase first transform. - // Note that there are only ASCII uppercase words in the lookup table. - return (dict[0] >= 'a' && dict[0] <= 'z' && - (dict[0] ^ 32) == data[0] && - FindMatchLengthWithLimit(&dict[1], &data[1], w.len - 1u) == - w.len - 1u); +static BROTLI_INLINE BROTLI_BOOL IsMatch(const BrotliDictionary* dictionary, + DictWord w, const uint8_t* data, size_t max_length) { + if (w.len > max_length) { + return BROTLI_FALSE; } else { - // Match against uppercase all transform. - // Note that there are only ASCII uppercase words in the lookup table. - for (size_t i = 0; i < w.len; ++i) { - if (dict[i] >= 'a' && dict[i] <= 'z') { - if ((dict[i] ^ 32) != data[i]) return false; - } else { - if (dict[i] != data[i]) return false; + const size_t offset = dictionary->offsets_by_length[w.len] + + (size_t)w.len * (size_t)w.idx; + const uint8_t* dict = &dictionary->data[offset]; + if (w.transform == 0) { + /* Match against base dictionary word. */ + return + TO_BROTLI_BOOL(FindMatchLengthWithLimit(dict, data, w.len) == w.len); + } else if (w.transform == 10) { + /* Match against uppercase first transform. + Note that there are only ASCII uppercase words in the lookup table. */ + return TO_BROTLI_BOOL(dict[0] >= 'a' && dict[0] <= 'z' && + (dict[0] ^ 32) == data[0] && + FindMatchLengthWithLimit(&dict[1], &data[1], w.len - 1u) == + w.len - 1u); + } else { + /* Match against uppercase all transform. + Note that there are only ASCII uppercase words in the lookup table. */ + size_t i; + for (i = 0; i < w.len; ++i) { + if (dict[i] >= 'a' && dict[i] <= 'z') { + if ((dict[i] ^ 32) != data[i]) return BROTLI_FALSE; + } else { + if (dict[i] != data[i]) return BROTLI_FALSE; + } } + return BROTLI_TRUE; } - return true; } } -bool FindAllStaticDictionaryMatches(const uint8_t* data, - size_t min_length, - size_t max_length, - uint32_t* matches) { - bool found_match = false; - size_t key = Hash(data); - size_t bucket = kStaticDictionaryBuckets[key]; - if (bucket != 0) { - size_t num = bucket & 0xff; - size_t offset = bucket >> 8; - for (size_t i = 0; i < num; ++i) { - const DictWord w = kStaticDictionaryWords[offset + i]; - const size_t l = w.len; - const size_t n = 1u << kBrotliDictionarySizeBitsByLength[l]; +BROTLI_BOOL BrotliFindAllStaticDictionaryMatches( + const BrotliDictionary* dictionary, const uint8_t* data, size_t min_length, + size_t max_length, uint32_t* matches) { + BROTLI_BOOL has_found_match = BROTLI_FALSE; + { + size_t offset = kStaticDictionaryBuckets[Hash(data)]; + BROTLI_BOOL end = !offset; + while (!end) { + DictWord w = kStaticDictionaryWords[offset++]; + const size_t l = w.len & 0x1F; + const size_t n = (size_t)1 << dictionary->size_bits_by_length[l]; const size_t id = w.idx; + end = !!(w.len & 0x80); + w.len = (uint8_t)l; if (w.transform == 0) { - const size_t matchlen = DictMatchLength(data, id, l, max_length); - // Transform "" + kIdentity + "" + const size_t matchlen = + DictMatchLength(dictionary, data, id, l, max_length); + const uint8_t* s; + size_t minlen; + size_t maxlen; + size_t len; + /* Transform "" + kIdentity + "" */ if (matchlen == l) { AddMatch(id, l, l, matches); - found_match = true; + has_found_match = BROTLI_TRUE; } - // Transforms "" + kOmitLast1 + "" and "" + kOmitLast1 + "ing " + /* Transforms "" + kOmitLast1 + "" and "" + kOmitLast1 + "ing " */ if (matchlen >= l - 1) { AddMatch(id + 12 * n, l - 1, l, matches); if (l + 2 < max_length && @@ -95,21 +112,21 @@ bool FindAllStaticDictionaryMatches(const uint8_t* data, data[l + 2] == ' ') { AddMatch(id + 49 * n, l + 3, l, matches); } - found_match = true; + has_found_match = BROTLI_TRUE; } - // Transform "" + kOmitLastN + "" (N = 2 .. 9) - size_t minlen = min_length; - if (l > 9) minlen = std::max(minlen, l - 9); - size_t maxlen = std::min(matchlen, l - 2); - for (size_t len = minlen; len <= maxlen; ++len) { + /* Transform "" + kOmitLastN + "" (N = 2 .. 9) */ + minlen = min_length; + if (l > 9) minlen = BROTLI_MAX(size_t, minlen, l - 9); + maxlen = BROTLI_MIN(size_t, matchlen, l - 2); + for (len = minlen; len <= maxlen; ++len) { AddMatch(id + kOmitLastNTransforms[l - len] * n, len, l, matches); - found_match = true; + has_found_match = BROTLI_TRUE; } if (matchlen < l || l + 6 >= max_length) { continue; } - const uint8_t* s = &data[l]; - // Transforms "" + kIdentity + <suffix> + s = &data[l]; + /* Transforms "" + kIdentity + <suffix> */ if (s[0] == ' ') { AddMatch(id + n, l + 1, l, matches); if (s[1] == 'a') { @@ -127,7 +144,7 @@ bool FindAllStaticDictionaryMatches(const uint8_t* data, } else if (s[1] == 'b') { if (s[2] == 'y' && s[3] == ' ') { AddMatch(id + 38 * n, l + 4, l, matches); - } + } } else if (s[1] == 'i') { if (s[2] == 'n') { if (s[3] == ' ') AddMatch(id + 16 * n, l + 4, l, matches); @@ -235,7 +252,7 @@ bool FindAllStaticDictionaryMatches(const uint8_t* data, } else if (s[0] == 'i') { if (s[1] == 'v') { if (s[2] == 'e' && s[3] == ' ') { - AddMatch(id + 92 * n, l + 4, l, matches); + AddMatch(id + 92 * n, l + 4, l, matches); } } else if (s[1] == 'z') { if (s[2] == 'e' && s[3] == ' ') { @@ -256,75 +273,79 @@ bool FindAllStaticDictionaryMatches(const uint8_t* data, } } } else { - // Set t=false for kUppercaseFirst and - // t=true otherwise (kUppercaseAll) transform. - const bool t = w.transform != kUppercaseFirst; - if (!IsMatch(w, data, max_length)) { + /* Set is_all_caps=0 for kUppercaseFirst and + is_all_caps=1 otherwise (kUppercaseAll) transform. */ + const BROTLI_BOOL is_all_caps = + TO_BROTLI_BOOL(w.transform != kUppercaseFirst); + const uint8_t* s; + if (!IsMatch(dictionary, w, data, max_length)) { continue; } - // Transform "" + kUppercase{First,All} + "" - AddMatch(id + (t ? 44 : 9) * n, l, l, matches); - found_match = true; + /* Transform "" + kUppercase{First,All} + "" */ + AddMatch(id + (is_all_caps ? 44 : 9) * n, l, l, matches); + has_found_match = BROTLI_TRUE; if (l + 1 >= max_length) { continue; } - // Transforms "" + kUppercase{First,All} + <suffix> - const uint8_t* s = &data[l]; + /* Transforms "" + kUppercase{First,All} + <suffix> */ + s = &data[l]; if (s[0] == ' ') { - AddMatch(id + (t ? 68 : 4) * n, l + 1, l, matches); + AddMatch(id + (is_all_caps ? 68 : 4) * n, l + 1, l, matches); } else if (s[0] == '"') { - AddMatch(id + (t ? 87 : 66) * n, l + 1, l, matches); + AddMatch(id + (is_all_caps ? 87 : 66) * n, l + 1, l, matches); if (s[1] == '>') { - AddMatch(id + (t ? 97 : 69) * n, l + 2, l, matches); + AddMatch(id + (is_all_caps ? 97 : 69) * n, l + 2, l, matches); } } else if (s[0] == '.') { - AddMatch(id + (t ? 101 : 79) * n, l + 1, l, matches); + AddMatch(id + (is_all_caps ? 101 : 79) * n, l + 1, l, matches); if (s[1] == ' ') { - AddMatch(id + (t ? 114 : 88) * n, l + 2, l, matches); + AddMatch(id + (is_all_caps ? 114 : 88) * n, l + 2, l, matches); } } else if (s[0] == ',') { - AddMatch(id + (t ? 112 : 99) * n, l + 1, l, matches); + AddMatch(id + (is_all_caps ? 112 : 99) * n, l + 1, l, matches); if (s[1] == ' ') { - AddMatch(id + (t ? 107 : 58) * n, l + 2, l, matches); + AddMatch(id + (is_all_caps ? 107 : 58) * n, l + 2, l, matches); } } else if (s[0] == '\'') { - AddMatch(id + (t ? 94 : 74) * n, l + 1, l, matches); + AddMatch(id + (is_all_caps ? 94 : 74) * n, l + 1, l, matches); } else if (s[0] == '(') { - AddMatch(id + (t ? 113 : 78) * n, l + 1, l, matches); + AddMatch(id + (is_all_caps ? 113 : 78) * n, l + 1, l, matches); } else if (s[0] == '=') { if (s[1] == '"') { - AddMatch(id + (t ? 105 : 104) * n, l + 2, l, matches); + AddMatch(id + (is_all_caps ? 105 : 104) * n, l + 2, l, matches); } else if (s[1] == '\'') { - AddMatch(id + (t ? 116 : 108) * n, l + 2, l, matches); + AddMatch(id + (is_all_caps ? 116 : 108) * n, l + 2, l, matches); } } } } } - // Transforms with prefixes " " and "." + /* Transforms with prefixes " " and "." */ if (max_length >= 5 && (data[0] == ' ' || data[0] == '.')) { - bool is_space = (data[0] == ' '); - key = Hash(&data[1]); - bucket = kStaticDictionaryBuckets[key]; - size_t num = bucket & 0xff; - size_t offset = bucket >> 8; - for (size_t i = 0; i < num; ++i) { - const DictWord w = kStaticDictionaryWords[offset + i]; - const size_t l = w.len; - const size_t n = 1u << kBrotliDictionarySizeBitsByLength[l]; + BROTLI_BOOL is_space = TO_BROTLI_BOOL(data[0] == ' '); + size_t offset = kStaticDictionaryBuckets[Hash(&data[1])]; + BROTLI_BOOL end = !offset; + while (!end) { + DictWord w = kStaticDictionaryWords[offset++]; + const size_t l = w.len & 0x1F; + const size_t n = (size_t)1 << dictionary->size_bits_by_length[l]; const size_t id = w.idx; + end = !!(w.len & 0x80); + w.len = (uint8_t)l; if (w.transform == 0) { - if (!IsMatch(w, &data[1], max_length - 1)) { + const uint8_t* s; + if (!IsMatch(dictionary, w, &data[1], max_length - 1)) { continue; } - // Transforms " " + kIdentity + "" and "." + kIdentity + "" + /* Transforms " " + kIdentity + "" and "." + kIdentity + "" */ AddMatch(id + (is_space ? 6 : 32) * n, l + 1, l, matches); - found_match = true; + has_found_match = BROTLI_TRUE; if (l + 2 >= max_length) { continue; } - // Transforms " " + kIdentity + <suffix> and "." + kIdentity + <suffix> - const uint8_t* s = &data[l + 1]; + /* Transforms " " + kIdentity + <suffix> and "." + kIdentity + <suffix> + */ + s = &data[l + 1]; if (s[0] == ' ') { AddMatch(id + (is_space ? 2 : 77) * n, l + 2, l, matches); } else if (s[0] == '(') { @@ -349,89 +370,93 @@ bool FindAllStaticDictionaryMatches(const uint8_t* data, } } } else if (is_space) { - // Set t=false for kUppercaseFirst and - // t=true otherwise (kUppercaseAll) transform. - const bool t = w.transform != kUppercaseFirst; - if (!IsMatch(w, &data[1], max_length - 1)) { + /* Set is_all_caps=0 for kUppercaseFirst and + is_all_caps=1 otherwise (kUppercaseAll) transform. */ + const BROTLI_BOOL is_all_caps = + TO_BROTLI_BOOL(w.transform != kUppercaseFirst); + const uint8_t* s; + if (!IsMatch(dictionary, w, &data[1], max_length - 1)) { continue; } - // Transforms " " + kUppercase{First,All} + "" - AddMatch(id + (t ? 85 : 30) * n, l + 1, l, matches); - found_match = true; + /* Transforms " " + kUppercase{First,All} + "" */ + AddMatch(id + (is_all_caps ? 85 : 30) * n, l + 1, l, matches); + has_found_match = BROTLI_TRUE; if (l + 2 >= max_length) { continue; } - // Transforms " " + kUppercase{First,All} + <suffix> - const uint8_t* s = &data[l + 1]; + /* Transforms " " + kUppercase{First,All} + <suffix> */ + s = &data[l + 1]; if (s[0] == ' ') { - AddMatch(id + (t ? 83 : 15) * n, l + 2, l, matches); + AddMatch(id + (is_all_caps ? 83 : 15) * n, l + 2, l, matches); } else if (s[0] == ',') { - if (!t) { + if (!is_all_caps) { AddMatch(id + 109 * n, l + 2, l, matches); - } + } if (s[1] == ' ') { - AddMatch(id + (t ? 111 : 65) * n, l + 3, l, matches); + AddMatch(id + (is_all_caps ? 111 : 65) * n, l + 3, l, matches); } } else if (s[0] == '.') { - AddMatch(id + (t ? 115 : 96) * n, l + 2, l, matches); + AddMatch(id + (is_all_caps ? 115 : 96) * n, l + 2, l, matches); if (s[1] == ' ') { - AddMatch(id + (t ? 117 : 91) * n, l + 3, l, matches); + AddMatch(id + (is_all_caps ? 117 : 91) * n, l + 3, l, matches); } } else if (s[0] == '=') { if (s[1] == '"') { - AddMatch(id + (t ? 110 : 118) * n, l + 3, l, matches); + AddMatch(id + (is_all_caps ? 110 : 118) * n, l + 3, l, matches); } else if (s[1] == '\'') { - AddMatch(id + (t ? 119 : 120) * n, l + 3, l, matches); + AddMatch(id + (is_all_caps ? 119 : 120) * n, l + 3, l, matches); } } } } } if (max_length >= 6) { - // Transforms with prefixes "e ", "s ", ", " and "\xc2\xa0" + /* Transforms with prefixes "e ", "s ", ", " and "\xc2\xa0" */ if ((data[1] == ' ' && (data[0] == 'e' || data[0] == 's' || data[0] == ',')) || (data[0] == 0xc2 && data[1] == 0xa0)) { - key = Hash(&data[2]); - bucket = kStaticDictionaryBuckets[key]; - size_t num = bucket & 0xff; - size_t offset = bucket >> 8; - for (size_t i = 0; i < num; ++i) { - const DictWord w = kStaticDictionaryWords[offset + i]; - const size_t l = w.len; - const size_t n = 1u << kBrotliDictionarySizeBitsByLength[l]; + size_t offset = kStaticDictionaryBuckets[Hash(&data[2])]; + BROTLI_BOOL end = !offset; + while (!end) { + DictWord w = kStaticDictionaryWords[offset++]; + const size_t l = w.len & 0x1F; + const size_t n = (size_t)1 << dictionary->size_bits_by_length[l]; const size_t id = w.idx; - if (w.transform == 0 && IsMatch(w, &data[2], max_length - 2)) { + end = !!(w.len & 0x80); + w.len = (uint8_t)l; + if (w.transform == 0 && + IsMatch(dictionary, w, &data[2], max_length - 2)) { if (data[0] == 0xc2) { AddMatch(id + 102 * n, l + 2, l, matches); - found_match = true; + has_found_match = BROTLI_TRUE; } else if (l + 2 < max_length && data[l + 2] == ' ') { size_t t = data[0] == 'e' ? 18 : (data[0] == 's' ? 7 : 13); AddMatch(id + t * n, l + 3, l, matches); - found_match = true; + has_found_match = BROTLI_TRUE; } } } } } if (max_length >= 9) { - // Transforms with prefixes " the " and ".com/" + /* Transforms with prefixes " the " and ".com/" */ if ((data[0] == ' ' && data[1] == 't' && data[2] == 'h' && data[3] == 'e' && data[4] == ' ') || (data[0] == '.' && data[1] == 'c' && data[2] == 'o' && data[3] == 'm' && data[4] == '/')) { - key = Hash(&data[5]); - bucket = kStaticDictionaryBuckets[key]; - size_t num = bucket & 0xff; - size_t offset = bucket >> 8; - for (size_t i = 0; i < num; ++i) { - const DictWord w = kStaticDictionaryWords[offset + i]; - const size_t l = w.len; - const size_t n = 1u << kBrotliDictionarySizeBitsByLength[l]; + size_t offset = kStaticDictionaryBuckets[Hash(&data[5])]; + BROTLI_BOOL end = !offset; + while (!end) { + DictWord w = kStaticDictionaryWords[offset++]; + const size_t l = w.len & 0x1F; + const size_t n = (size_t)1 << dictionary->size_bits_by_length[l]; const size_t id = w.idx; - if (w.transform == 0 && IsMatch(w, &data[5], max_length - 5)) { + end = !!(w.len & 0x80); + w.len = (uint8_t)l; + if (w.transform == 0 && + IsMatch(dictionary, w, &data[5], max_length - 5)) { AddMatch(id + (data[0] == ' ' ? 41 : 72) * n, l + 5, l, matches); - found_match = true; + has_found_match = BROTLI_TRUE; if (l + 5 < max_length) { const uint8_t* s = &data[l + 5]; if (data[0] == ' ') { @@ -449,7 +474,9 @@ bool FindAllStaticDictionaryMatches(const uint8_t* data, } } } - return found_match; + return has_found_match; } -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/static_dict.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/static_dict.h new file mode 100644 index 00000000000..fb74b13368c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/static_dict.h @@ -0,0 +1,39 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Class to model the static dictionary. */ + +#ifndef BROTLI_ENC_STATIC_DICT_H_ +#define BROTLI_ENC_STATIC_DICT_H_ + +#include "../common/dictionary.h" +#include <brotli/types.h> +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#define BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN 37 +static const uint32_t kInvalidMatch = 0xfffffff; + +/* Matches data against static dictionary words, and for each length l, + for which a match is found, updates matches[l] to be the minimum possible + (distance << 5) + len_code. + Returns 1 if matches have been found, otherwise 0. + Prerequisites: + matches array is at least BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1 long + all elements are initialized to kInvalidMatch */ +BROTLI_INTERNAL BROTLI_BOOL BrotliFindAllStaticDictionaryMatches( + const BrotliDictionary* dictionary, + const uint8_t* data, size_t min_length, size_t max_length, + uint32_t* matches); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_STATIC_DICT_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/static_dict_lut.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/static_dict_lut.h new file mode 100644 index 00000000000..ba94f76b28c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/static_dict_lut.h @@ -0,0 +1,5864 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Lookup table for static dictionary and transforms. */ + +#ifndef BROTLI_ENC_STATIC_DICT_LUT_H_ +#define BROTLI_ENC_STATIC_DICT_LUT_H_ + +#include <brotli/types.h> + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +typedef struct DictWord { + /* Highest bit is used to indicate end of bucket. */ + uint8_t len; + uint8_t transform; + uint16_t idx; +} DictWord; + +static const int kDictNumBits = 15; +static const uint32_t kDictHashMul32 = 0x1e35a7bd; + +static const uint16_t kStaticDictionaryBuckets[32768] = { +1,0,0,0,0,0,0,0,0,3,6,0,0,0,0,0,20,0,0,0,21,0,22,0,0,0,0,0,0,0,0,23,0,0,25,0,29, +0,53,0,0,0,0,0,0,55,0,0,0,0,0,0,61,76,0,0,0,94,0,0,0,0,0,0,96,0,97,0,98,0,0,0,0, +0,0,0,99,101,106,108,0,0,0,0,0,110,0,111,112,0,113,118,124,0,0,0,0,0,125,128,0,0 +,0,0,129,0,0,131,0,0,0,0,0,0,132,0,0,135,0,0,0,137,0,0,0,0,0,138,139,0,0,0,0,0,0 +,0,142,143,144,0,0,0,0,0,145,0,0,0,146,149,151,152,0,0,153,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,154,0,0,0,0,0,0,155,0,0,0,0,160,182,0,0,0,0,0,0,183,0,0,0,188,189,0,0, +192,0,0,0,0,0,0,194,0,0,0,0,0,0,0,0,197,202,209,0,0,210,0,224,0,0,0,225,0,0,0,0, +0,0,0,0,0,0,231,0,0,0,232,0,240,0,0,242,0,0,0,0,0,0,0,0,0,0,0,244,0,0,0,246,0,0, +249,251,253,0,0,0,0,0,258,0,0,261,263,0,0,0,267,0,0,268,0,269,0,0,0,0,0,0,0,0,0, +271,0,0,0,0,0,0,272,0,273,0,277,0,278,286,0,0,0,0,287,0,289,290,291,0,0,0,295,0, +0,296,297,0,0,0,0,0,0,0,0,0,0,298,0,0,0,299,0,0,305,0,324,0,0,0,0,0,327,0,328, +329,0,0,0,0,336,0,0,340,0,341,342,343,0,0,346,0,348,0,0,0,0,0,0,349,351,0,0,355, +0,363,0,364,0,368,369,0,370,0,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,373,0,375,0, +0,0,0,376,377,0,0,394,395,396,0,0,398,0,0,0,0,400,0,0,408,0,0,0,0,420,0,0,0,0,0, +0,421,0,0,422,423,0,0,429,435,436,442,0,0,443,0,444,445,453,456,0,457,0,0,0,0,0, +458,0,0,0,459,0,0,0,460,0,462,463,465,0,0,0,0,0,0,466,469,0,0,0,0,0,0,470,0,0,0, +474,0,476,0,0,0,0,483,0,485,0,0,0,486,0,0,488,491,492,0,0,497,499,500,0,501,0,0, +0,505,0,0,506,0,0,0,507,0,0,0,509,0,0,0,0,511,512,519,0,0,0,0,0,0,529,530,0,0,0, +534,0,0,0,0,543,0,0,0,0,0,0,0,0,0,553,0,0,0,0,557,560,0,0,0,0,0,0,561,0,564,0,0, +0,0,0,0,565,566,0,575,0,619,0,620,0,0,623,624,0,0,0,625,0,0,626,627,0,0,628,0,0, +0,0,630,0,631,0,0,0,0,0,0,0,0,0,641,0,0,0,0,643,656,668,0,0,0,673,0,0,0,674,0,0, +0,0,0,0,0,0,682,0,687,0,690,0,693,699,700,0,0,0,0,0,0,704,705,0,0,0,0,707,710,0, +711,0,0,0,0,726,0,0,729,0,0,0,730,731,0,0,0,0,0,752,0,0,0,762,0,763,0,0,767,0,0, +0,770,774,0,0,775,0,0,0,0,0,0,0,0,0,0,776,0,0,0,777,783,0,0,0,785,788,0,0,0,0, +790,0,0,0,793,0,0,0,0,794,0,0,804,819,821,0,827,0,0,0,834,0,0,835,0,0,0,841,0, +844,0,850,851,859,0,860,0,0,0,0,0,0,0,874,0,876,0,877,890,0,0,0,0,0,0,0,0,893, +894,898,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,899,0,0,0,900,904,906,0,0,0,907,0,908,909, +0,910,0,0,0,0,911,0,0,0,0,0,916,0,0,0,922,925,0,930,0,934,0,0,0,0,0,943,0,0,944, +0,953,954,0,0,0,0,0,0,955,0,962,963,0,0,976,0,0,977,978,979,980,0,981,0,0,0,0, +984,0,0,985,0,0,987,989,991,0,0,0,0,0,0,0,0,0,992,0,0,0,993,0,0,0,0,0,0,996,0,0, +0,1000,0,0,0,0,0,1002,0,0,0,0,1005,1007,0,0,0,1009,0,0,0,1010,0,0,0,0,0,0,1011,0 +,1012,0,0,0,0,1014,1016,0,0,0,1020,0,1021,0,0,0,0,1022,0,0,0,1024,0,0,0,0,0,0, +1025,0,0,1026,1027,0,0,0,0,0,1031,0,1033,0,0,0,0,1034,0,0,0,1037,1040,0,0,0,1042 +,1043,0,0,1053,0,1054,0,0,1057,0,0,0,1058,0,0,1060,0,0,0,0,0,0,0,1061,0,0,1062,0 +,0,0,0,1063,0,0,0,0,1064,0,0,0,0,0,1065,0,0,0,0,1066,1067,0,0,0,1069,1070,1072,0 +,0,0,0,0,0,1073,0,1075,0,0,0,0,0,0,1080,1084,0,0,0,0,1088,0,0,0,0,0,0,1094,0, +1095,0,1107,0,0,0,1112,1114,0,1119,0,1122,0,0,1126,0,1129,0,1130,0,0,0,0,0,1132, +0,0,0,0,0,0,1144,0,0,1145,1146,0,1148,1149,0,0,1150,1151,0,0,0,0,1152,0,1153,0,0 +,0,0,0,1154,0,1163,0,0,0,1164,0,0,0,0,0,1165,0,1167,0,1170,0,0,0,0,0,1171,1172,0 +,0,0,0,0,0,0,0,1173,1175,1177,0,1186,0,0,0,0,0,0,0,0,0,0,1195,0,0,1221,0,0,1224, +0,0,1227,0,0,0,0,0,1228,1229,0,0,1230,0,0,0,0,0,0,0,0,0,1231,0,0,0,1233,0,0,1243 +,1244,1246,1248,0,0,0,0,1254,1255,1258,1259,0,0,0,1260,0,0,1261,0,0,0,1262,1264, +0,0,1265,0,0,0,0,0,0,0,0,0,0,0,0,1266,0,1267,0,0,0,0,1273,1274,1276,1289,0,0, +1291,1292,1293,0,0,1294,1295,1296,0,0,0,0,1302,0,1304,0,0,0,0,0,0,0,0,0,1311, +1312,0,1314,0,1316,1320,1321,0,0,0,0,0,0,0,1322,1323,1324,0,1335,0,1336,0,0,0,0, +1341,1342,0,1346,0,1357,0,0,0,1358,1360,0,0,0,0,0,0,1361,0,0,0,1362,1365,0,1366, +0,0,0,0,0,0,0,1379,0,0,0,0,0,0,0,0,0,0,0,0,1386,0,1388,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,1395,0,0,0,0,1403,0,1405,0,0,1407,0,0,0,0,0,1408,1409,0,1410,0,0,0,1412,1413, +1416,0,0,1429,1451,0,0,1454,0,0,0,0,0,0,0,1455,0,0,0,0,0,0,0,1456,0,0,0,0,1459, +1460,1461,1475,0,0,0,0,0,0,1477,0,1480,0,1481,0,0,1486,0,0,1495,0,0,0,1496,0,0, +1498,1499,1501,1520,1521,0,0,0,1526,0,0,0,0,1528,1529,0,1533,1536,0,0,0,1537, +1538,1549,0,1550,1558,1559,1572,0,1573,0,0,0,0,0,0,0,0,0,1575,0,0,0,0,0,1579,0, +1599,0,1603,0,1604,0,1605,0,0,0,0,0,1608,1610,0,0,0,0,1611,0,1615,0,1616,1618,0, +1619,0,0,1622,0,0,0,0,1634,0,0,0,1635,0,0,0,1641,0,0,0,0,0,0,0,0,0,1643,0,0,0, +1650,0,0,1652,0,0,0,0,0,1653,0,0,0,1654,0,0,0,0,1655,0,1662,0,0,1663,1664,0,0, +1668,0,0,1669,1670,0,1672,1673,0,0,0,0,0,1674,0,0,0,1675,1676,1680,0,1682,0,0, +1687,0,0,0,0,0,1704,0,0,1705,0,0,1721,0,0,0,0,1734,1735,0,0,0,0,1737,0,0,0,0, +1739,0,0,1740,0,0,0,0,0,0,0,0,0,0,1741,1743,0,0,0,0,1745,0,0,0,1749,0,0,0,1751,0 +,0,0,0,0,0,1760,0,0,0,0,1765,0,0,0,0,0,1784,0,1785,1787,0,0,0,0,1788,1789,0,0,0, +0,1790,1791,1793,0,1798,1799,0,0,0,0,1801,0,1803,1805,0,0,0,1806,1811,0,1812, +1814,0,1821,0,0,0,0,0,1822,1833,0,0,0,0,0,0,1848,0,0,0,0,0,0,1857,0,0,0,1859,0,0 +,0,0,1861,0,0,0,0,0,0,0,1866,0,1921,1925,0,0,0,1929,1930,0,0,0,0,0,0,0,0,0,1931, +0,0,0,0,1932,0,0,0,1934,0,0,0,0,0,0,0,0,1946,0,0,1948,0,0,0,0,1950,0,1957,0,1958 +,0,0,0,0,0,1965,1967,0,0,0,0,1968,0,1969,0,1971,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,1973,0,0,0,0,1975,0,0,0,0,1976,1979,0,1982,0,0,0,0,1984,1988,0,0,0,0,1990, +2004,2008,0,0,0,2012,2013,0,0,0,0,0,0,0,0,0,0,2015,0,2016,2017,0,0,0,0,2021,0,0, +2025,0,0,0,0,0,2029,2036,2040,0,2042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2043,0,0,0,0,0, +2045,0,0,0,0,0,0,0,2046,2047,0,2048,2049,0,2059,0,0,2063,0,2064,2065,0,0,2066,0, +0,0,0,0,0,2069,0,0,0,0,2070,0,2071,0,2072,0,0,0,0,2080,2082,2083,0,0,0,0,0,2085, +0,2086,2088,2089,2105,0,0,0,0,2107,0,0,2116,2117,0,2120,0,0,2122,0,0,0,0,0,2123, +0,0,2125,2127,2128,0,0,0,2130,0,0,0,2137,2139,2140,2141,0,0,0,0,0,0,0,0,0,2144, +2145,0,0,2146,2149,0,0,0,0,2150,0,0,2151,2158,0,2159,0,2160,0,0,0,0,0,0,2161, +2162,0,0,2194,2202,0,0,0,0,0,0,2205,2217,0,2220,0,2221,0,2222,2224,0,0,0,0,2237, +0,0,0,0,0,2238,0,2239,2241,0,0,2242,0,0,0,0,0,2243,0,0,0,0,0,0,2252,0,0,2253,0,0 +,0,2257,2258,0,0,0,2260,0,0,0,0,0,0,0,2262,0,2264,0,0,0,0,0,2269,2270,0,0,0,0,0, +0,0,0,0,2271,0,2273,0,0,0,0,2277,0,0,0,0,2278,0,0,0,0,2279,0,2280,0,2283,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2287,0,0,0,0,0,0,0,2289,2290,0,0,0,0,2291,0,2292,0, +0,0,2293,2295,2296,0,0,0,0,0,0,0,2298,0,0,0,0,0,2303,0,2305,0,0,2306,0,2307,0,0, +0,0,0,0,0,0,0,0,0,0,2313,2314,2315,2316,0,0,2318,0,2319,0,2322,0,0,2323,0,2324,0 +,2326,0,0,0,0,0,0,0,2335,0,2336,2338,2339,0,2340,0,0,0,2355,0,2375,0,2382,2386,0 +,2387,0,0,2394,0,0,0,0,2395,0,2397,0,0,0,0,0,2398,0,0,0,0,0,0,0,2399,2402,2404, +2408,2411,0,0,0,2413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2415,0,0,2416,2417,2419,0,2420, +0,0,0,0,0,2425,0,0,0,2426,0,0,0,0,0,0,0,0,0,0,0,0,2427,2428,0,2429,0,0,2430,2434 +,0,2436,0,0,0,0,0,0,2441,2442,0,2445,0,0,2446,2457,0,2459,0,0,2462,0,2464,0,2477 +,0,2478,2486,0,0,0,2491,0,0,2493,0,0,2494,0,2495,0,2513,2523,0,0,0,0,2524,0,0,0, +0,0,0,2528,2529,2530,0,0,2531,0,2533,0,0,2534,2535,0,2536,2537,0,2538,0,2539, +2540,0,0,0,2545,2546,0,0,0,0,0,0,0,2548,0,0,2549,0,2550,2555,0,0,0,0,0,2557,0, +2560,0,0,0,0,0,0,0,0,0,0,0,2561,0,2576,0,0,0,0,0,0,0,0,0,2577,2578,0,0,0,2579,0, +0,0,0,0,0,0,2580,0,0,0,0,2581,0,0,0,0,2583,0,2584,0,2588,2590,0,0,0,2591,0,0,0,0 +,2593,2594,0,2595,0,2601,2602,0,0,2603,0,2605,0,0,0,2606,2607,2611,0,2615,0,0,0, +2617,0,0,0,0,0,0,0,0,0,0,0,0,0,2619,0,0,2620,0,0,0,2621,0,2623,0,2625,0,0,2628, +2629,0,0,2635,2636,2637,0,0,2639,0,0,0,2642,0,0,0,0,2643,0,2644,0,2649,0,0,0,0,0 +,0,2655,2656,0,0,2657,0,0,0,0,0,2658,0,0,0,0,0,2659,0,0,0,0,2664,2685,0,2687,0, +2688,0,0,2689,0,0,2694,0,2695,0,0,2698,0,2701,2706,0,0,0,2707,0,2709,2710,2711,0 +,0,0,2720,2730,2735,0,0,0,0,2738,2740,0,0,0,0,2747,0,0,0,0,0,0,2748,0,0,2749,0,0 +,0,0,0,2750,0,0,2752,2754,0,0,0,0,0,2758,0,0,0,0,2762,0,0,0,0,2763,0,0,0,0,0,0,0 +,2764,2767,0,0,0,0,2768,0,0,2770,0,0,0,0,0,0,0,2771,0,0,0,0,0,0,0,0,0,2772,0,0,0 +,0,0,2773,2776,0,0,2783,0,0,2784,0,2789,0,2790,0,0,0,2792,0,0,0,0,0,0,0,0,0,0, +2793,2795,0,0,0,0,0,0,2796,0,0,0,0,0,0,2797,2799,0,0,0,0,2803,0,0,0,0,2806,0, +2807,2808,2817,2819,0,0,0,0,0,2821,0,0,0,0,2822,2823,0,0,0,0,0,0,0,2824,0,0,2828 +,0,2834,0,0,0,0,0,0,2836,0,2838,0,0,2839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2841, +0,0,0,2842,0,0,0,0,0,2843,2844,0,0,0,0,2846,0,0,2847,0,2849,0,2853,0,0,0,0,0, +2857,0,0,0,0,2858,0,2859,0,0,2860,0,2862,2868,0,0,0,0,2875,0,2876,0,0,2877,2878, +2884,2889,2890,0,0,2891,0,0,2892,0,0,0,2906,2912,0,2913,0,0,0,0,0,0,0,0,2916,0, +2934,0,0,0,0,0,2935,0,0,0,0,2939,0,2940,0,0,0,0,0,0,0,2941,0,0,0,2946,0,2949,0,0 +,2950,2954,2955,0,0,0,2959,2961,0,0,2962,0,2963,0,0,0,0,0,0,2964,2965,2966,2967, +0,0,0,0,0,0,0,2969,0,0,0,0,0,2970,2975,0,2982,2983,2984,0,0,0,0,0,2989,0,0,2990, +0,0,0,0,0,0,0,2991,0,0,0,0,0,0,0,0,2998,0,3000,3001,0,0,3002,0,0,0,3003,0,0,3012 +,0,0,3022,0,0,3024,0,0,3025,3027,0,0,0,3030,0,0,0,0,3034,3035,0,0,3036,0,3039,0, +3049,0,0,3050,0,0,0,0,0,0,3051,0,3053,0,0,0,0,3057,0,3058,0,0,0,0,0,0,0,0,3063,0 +,0,3073,3074,3078,3079,0,3080,3086,0,0,0,0,0,0,0,0,3087,0,3092,0,3095,0,3099,0,0 +,0,3100,0,3101,3102,0,3122,0,0,0,3124,0,3125,0,0,0,0,0,0,3132,3134,0,0,3136,0,0, +0,0,0,0,0,3147,0,0,3149,0,0,0,0,0,3150,3151,3152,0,0,0,0,3158,0,0,3160,0,0,3161, +0,0,3162,0,3163,3166,3168,0,0,3169,3170,0,0,3171,0,0,0,0,0,0,0,3182,0,3184,0,0, +3188,0,0,3194,0,0,0,0,0,0,3204,0,0,0,0,3209,0,0,0,0,0,0,0,0,0,0,0,3216,3217,0,0, +0,0,0,0,0,3219,0,0,3220,3222,0,3223,0,0,0,0,3224,0,3225,3226,0,3228,3233,0,3239, +3241,3242,0,0,3251,3252,3253,3255,0,0,0,0,0,0,0,0,3260,0,0,3261,0,0,0,3267,0,0,0 +,0,0,0,0,0,3271,0,0,0,3278,0,3282,0,0,0,3284,0,0,0,3285,3286,0,0,0,0,0,0,0,3287, +3292,0,0,0,0,3294,3296,0,0,3299,3300,3301,0,3302,0,0,0,0,0,3304,3306,0,0,0,0,0,0 +,3308,0,0,0,0,0,0,0,0,0,3311,0,0,0,0,0,0,0,0,3312,3314,3315,0,3318,0,0,0,0,0,0,0 +,0,3319,0,0,0,0,0,3321,0,0,0,0,0,0,0,0,0,3322,0,0,3324,3325,0,0,3326,0,0,3328, +3329,3331,0,0,3335,0,0,3337,0,3338,0,0,0,0,3343,3347,0,0,0,3348,0,0,3351,0,0,0,0 +,0,0,3354,0,0,0,0,0,0,0,0,0,0,3355,0,0,3365,3366,3367,0,0,0,0,0,0,3368,3369,0, +3370,0,0,3373,0,0,3376,0,0,3377,0,3379,3387,0,0,0,0,0,3390,0,0,0,0,0,0,0,3402,0, +3403,3436,3437,3439,0,0,3441,0,0,0,3442,0,0,3449,0,0,0,3450,0,0,0,0,0,0,0,3451,0 +,0,3452,0,3453,3456,0,3457,0,0,3458,0,3459,0,0,0,0,0,0,0,0,0,3460,0,0,3469,3470, +0,0,3475,0,0,0,3480,3487,3489,0,3490,0,0,3491,3499,0,3500,0,0,3501,0,0,0,3502,0, +3514,0,0,0,3516,3517,0,0,0,3518,0,0,0,0,3520,3521,3522,0,0,3526,3530,0,0,0,0, +3531,0,0,0,0,3536,0,0,0,0,0,0,0,3539,3541,0,0,3542,3544,0,3547,3548,0,0,3550,0, +3553,0,0,0,0,0,0,0,3554,0,3555,0,3558,0,3559,0,0,0,0,0,0,0,0,3563,0,3581,0,0,0, +3599,0,0,0,3600,0,3601,0,3602,3603,0,0,3606,3608,0,3610,3611,0,0,0,0,0,0,0,0,0, +3612,3616,3619,0,0,0,0,0,0,0,0,0,0,0,0,0,3624,3628,0,3629,3634,3635,0,0,0,0,0,0, +3636,0,3637,0,0,3638,3651,0,0,0,0,0,0,3652,3653,0,0,0,0,3656,3657,0,0,0,0,0,3658 +,0,0,0,0,3659,0,3661,3663,3664,0,3665,0,3692,0,0,0,3694,3696,0,0,0,0,0,0,0,0,0,0 +,0,0,3698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3700,0,0,3701,0,0,0,3708,3709,0,0,0,3711 +,3712,0,0,0,0,0,3723,0,3724,3725,0,0,3726,0,0,0,0,0,0,3728,3729,0,3734,3735,3737 +,0,0,0,3743,0,3745,0,0,3746,0,0,3747,3748,0,3757,0,3759,3766,3767,0,3768,0,0,0,0 +,3769,0,0,3771,0,3774,0,0,0,0,0,0,3775,0,0,0,0,0,0,3776,0,3777,3786,0,3788,3789, +0,0,0,0,0,0,0,0,0,3791,0,3811,0,0,0,0,0,3814,3815,3816,3820,0,0,0,0,0,0,0,3821,0 +,0,3825,0,0,0,0,3835,0,0,3848,3849,0,0,0,0,3850,3851,3853,0,0,0,0,3859,0,3860, +3862,0,0,0,0,0,3863,0,0,0,0,0,0,0,0,3873,0,3874,0,3875,3886,0,3887,0,0,0,0,3892, +3913,0,3914,0,0,0,3925,3931,0,0,0,0,3934,3941,3942,0,0,0,0,3943,0,0,0,3944,0,0,0 +,0,0,3945,0,3947,0,0,0,3956,3957,0,0,0,0,0,0,0,0,0,3958,0,3959,3965,0,0,0,0,3966 +,0,0,0,3967,0,0,0,3968,3974,0,0,0,0,0,3975,3977,3978,0,0,0,0,3980,0,3985,0,0,0,0 +,0,0,0,0,3986,4011,0,0,4017,0,0,0,0,0,0,0,0,0,0,0,4018,0,0,0,0,4019,0,4023,0,0,0 +,4027,4028,0,0,0,0,0,0,0,0,4031,4034,0,0,4035,4037,4039,4040,0,0,0,0,0,4059,0, +4060,4061,0,4062,4063,4066,0,0,4072,0,0,0,0,0,0,0,0,0,0,0,0,0,4088,0,0,0,0,0, +4091,0,0,0,0,4094,4095,0,0,4096,0,0,0,0,0,4098,4099,0,0,0,4101,0,4104,0,0,0,4105 +,4108,0,4113,0,0,4115,4116,0,4126,0,0,4127,0,0,0,0,0,0,0,4128,4132,4133,0,4134,0 +,0,0,4137,0,0,4141,0,0,0,0,4144,4146,4147,0,0,0,0,4148,0,0,4311,0,0,0,4314,4329, +0,4331,4332,0,4333,0,4334,0,0,0,4335,0,4336,0,0,0,4337,0,0,0,4342,4345,4346,4350 +,0,4351,4352,0,4354,4355,0,0,4364,0,0,0,0,4369,0,0,0,4373,0,4374,0,0,0,0,4377,0, +0,0,0,4378,0,0,0,4380,0,0,0,4381,4382,0,0,0,0,0,0,0,4384,0,0,0,0,4385,0,0,0,4386 +,0,0,0,4391,4398,0,0,0,0,4407,4409,0,0,0,0,4410,0,0,4411,0,4414,4415,4418,0,4427 +,4428,4430,0,4431,0,4448,0,0,0,0,0,4449,0,0,0,4451,4452,0,4453,4454,0,4456,0,0,0 +,0,0,0,0,4459,0,4463,0,0,0,0,0,4466,0,4467,0,4469,0,0,0,0,0,0,0,0,0,0,0,0,0,4470 +,4471,0,4473,0,0,4475,0,0,0,0,4477,4478,0,0,0,4479,4481,0,4482,0,4484,0,0,0,0,0, +0,0,4486,0,0,4488,0,0,4497,0,4508,0,0,4510,4511,0,4520,4523,0,4524,0,4525,0,4527 +,0,0,4528,0,0,0,0,4530,0,4531,0,0,4532,0,0,0,4533,0,0,0,0,0,4535,0,0,0,4536,0,0, +0,0,0,4541,4543,4544,4545,4547,0,4548,0,0,0,0,4550,4551,0,4553,0,0,0,0,4562,0,0, +4571,0,0,0,4574,0,0,0,4575,0,4576,0,4577,0,0,0,4581,0,0,0,0,0,4582,0,0,4586,0,0, +0,4588,0,0,4597,0,4598,0,0,0,0,4616,4617,0,4618,0,0,0,0,4619,0,4620,0,0,4621,0, +4624,0,0,0,0,0,4625,0,0,0,0,4657,0,4659,0,4667,0,0,0,4668,4670,0,4672,0,0,0,0,0, +4673,4676,0,0,0,0,4687,0,0,0,0,4697,0,0,0,0,4699,0,4701,0,0,0,0,4702,0,0,4706,0, +0,4713,0,0,0,4714,4715,4716,0,0,0,0,0,0,0,0,0,0,0,0,4717,0,0,4720,0,4721,4729, +4735,0,0,0,4737,0,0,0,4739,0,0,0,4740,0,0,0,4741,0,0,0,0,0,4742,0,4745,4746,4747 +,0,0,0,0,0,0,0,0,4748,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4751, +4786,0,4787,0,4788,4796,0,0,4797,4798,0,4799,4806,4807,0,0,0,0,4809,4810,0,0,0,0 +,0,0,4811,0,0,0,0,0,4812,0,4813,0,0,4815,0,4821,4822,0,0,0,0,4823,0,0,0,0,0,0,0, +0,0,0,4824,0,0,0,0,4826,0,0,0,4828,0,4829,0,0,0,4843,0,0,4847,0,4853,4855,4858,0 +,0,0,0,0,4859,0,4864,0,0,4879,0,0,0,0,4880,0,0,0,0,4881,0,4882,0,0,0,0,0,0,0,0,0 +,4883,0,0,0,0,4884,0,0,0,0,0,4886,4887,4888,4894,4896,0,4902,0,0,4905,0,0,4915,0 +,0,0,0,0,0,0,4916,4917,4919,4921,0,0,0,0,0,4926,0,0,0,0,4927,0,0,0,0,0,0,0,0, +4929,0,4930,4931,0,4938,0,4952,0,4953,4957,4960,4964,0,0,0,0,0,0,0,5019,5020, +5022,0,0,0,0,0,5023,0,0,0,5024,0,0,0,5025,0,0,0,0,5028,0,0,0,0,5029,5030,5031,0, +5033,0,0,0,0,0,0,0,0,0,5034,5035,0,5036,0,0,5037,0,0,0,0,5038,0,0,5039,0,0,0, +5041,5042,0,0,0,0,5044,5049,5054,0,5055,0,5057,0,0,0,5060,0,0,0,0,0,5063,0,5064, +5065,0,5067,0,0,0,5068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5076,0,0,0,0,0,0, +0,5077,0,0,5078,5080,0,0,5083,0,0,0,0,0,0,0,0,5085,0,0,0,0,0,0,5098,5099,5101, +5105,5107,0,5108,0,5109,0,0,0,0,0,0,0,5110,0,0,0,0,0,5117,5118,0,5121,0,5122,0,0 +,5130,0,0,0,5137,0,0,0,5148,0,0,0,0,0,0,0,5151,5154,0,0,0,5155,0,0,5156,5159, +5161,0,0,0,0,5162,0,0,0,0,5163,5164,0,5166,0,0,0,0,0,0,0,0,0,0,5167,0,0,0,5172,0 +,0,0,0,0,0,5178,5179,0,0,5190,0,0,5191,5192,5194,0,0,5198,5201,0,0,0,0,0,5203,0, +5206,5209,0,0,0,0,0,0,5213,0,5214,5216,0,0,0,0,0,5217,0,0,0,0,0,0,0,0,5218,5219, +0,5231,0,0,5244,5249,0,5254,0,5255,0,0,5257,0,0,0,0,0,5258,0,5260,5270,0,5277,0, +0,0,0,0,0,5280,5281,5282,5283,0,0,0,0,0,5284,0,5285,0,0,0,0,0,5287,5288,0,0,0,0, +0,0,0,0,0,0,5289,5291,0,0,5294,0,0,5295,0,0,0,0,0,0,0,5304,0,0,5306,5307,5308,0, +5309,0,0,5310,0,0,0,0,5311,5312,0,5313,0,0,0,0,0,5316,0,0,0,5317,0,0,0,0,0,0,0,0 +,0,5325,0,0,0,0,0,0,5326,0,5327,5329,0,5332,0,0,0,0,5338,0,0,0,0,0,0,0,0,5340,0, +0,5341,0,0,0,5342,0,5343,5344,0,0,5345,0,0,0,0,0,0,5347,5348,0,0,0,0,0,0,0,0,0, +5349,0,5350,0,5354,0,0,0,0,5358,0,0,5359,0,0,5361,0,0,5365,0,5367,0,5373,0,0,0, +5379,0,0,0,5380,0,0,0,5382,0,5384,0,0,0,0,0,0,5385,0,0,0,0,5387,0,0,0,0,0,0,5388 +,5390,5393,0,0,0,0,0,0,0,0,0,0,0,5396,0,0,0,0,5397,5402,0,0,0,0,0,5403,0,0,0, +5404,5405,0,0,0,0,0,0,0,0,0,0,0,0,5406,0,0,0,0,5410,0,0,5411,0,5415,0,0,0,0,5416 +,5434,0,0,0,0,0,0,0,0,0,0,0,5438,0,5440,0,0,0,0,0,0,5441,5442,0,0,0,5443,5444, +5447,0,0,5448,5449,5451,0,0,0,5456,5457,0,0,0,5459,0,0,0,5461,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,5464,0,5466,0,0,5467,0,5470,0,0,5473,0,0,5474,0,0,5476,0,0,0,0,0,0,0,0 +,0,0,0,5477,0,0,0,0,0,0,0,5484,0,0,5485,5486,0,0,0,0,0,5488,0,0,0,0,0,0,0,5489,0 +,0,0,0,0,5507,0,0,0,5510,0,5511,0,0,5512,0,0,0,5513,0,5515,0,0,5516,5517,0,5518, +0,0,5522,0,0,0,0,0,5534,5535,0,0,5536,0,5538,0,0,5543,0,5544,0,0,5545,0,5547,0, +5557,0,0,5558,0,5560,5567,0,0,0,0,5568,0,0,0,5571,5573,0,5574,0,5575,0,0,0,0, +5577,0,0,5598,0,0,0,0,0,0,0,0,0,5600,5609,0,0,0,0,5610,0,0,5612,0,5624,0,5625,0, +0,0,5629,0,5641,0,5642,5643,0,0,0,0,0,0,5651,0,0,0,5652,5653,0,5661,5662,5678,0, +5679,0,0,0,0,5685,5686,0,0,0,0,0,5690,5692,0,5703,0,0,0,0,0,5706,0,0,0,0,5707,0, +0,0,0,0,0,5708,0,0,5709,0,5710,0,0,0,5712,0,5733,0,5734,5735,0,0,5744,5751,0,0,0 +,0,0,0,0,0,0,0,0,0,5752,0,5754,0,0,0,0,0,0,5757,5758,0,5760,5761,0,0,0,0,5763, +5764,5765,0,5766,0,5767,5768,0,5770,0,0,0,0,5776,5780,0,0,0,0,5782,0,0,0,0,5784, +0,0,5788,0,0,0,0,0,0,0,0,0,0,0,5797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5799,0,0,5801, +0,0,0,5811,0,0,0,0,0,0,5816,0,0,5827,0,0,0,0,0,0,0,0,5830,5831,0,0,5832,0,0,5833 +,0,5835,5844,5845,0,5846,0,0,0,0,0,5850,0,0,0,0,0,5852,0,5855,5857,0,0,5859,0, +5861,0,0,5863,0,5865,0,0,0,5873,5875,0,0,0,5877,0,5879,0,0,0,5888,0,0,5889,5891, +0,5894,0,0,0,0,0,0,5895,0,5897,0,0,0,0,0,0,5907,0,5911,0,0,5912,0,5913,5922,5924 +,0,5927,5928,0,0,0,0,5929,5930,0,5933,0,0,0,0,5949,0,0,5951,0,0,0,0,0,0,0,0,5953 +,0,0,5954,0,5959,5960,5961,0,5964,0,0,0,5976,5978,5987,5990,0,0,0,0,0,5991,0, +5992,0,0,0,5994,5995,0,0,5996,0,0,6001,6003,0,0,0,0,6007,0,0,0,0,0,6008,0,0,6009 +,0,6010,0,0,0,6011,6015,0,6017,0,6019,0,6023,0,0,0,0,0,0,0,6025,0,0,0,0,0,0,0,0, +0,0,6026,0,6030,0,0,6032,0,0,0,6033,6038,6040,0,0,0,6041,6045,0,0,6046,0,0,6053, +0,0,6054,0,6055,0,0,0,0,0,0,6057,0,6063,0,0,0,6064,0,6066,6071,6072,0,0,0,0,0,0, +6075,6076,0,0,6077,0,0,0,0,0,0,0,0,0,6078,6079,0,0,0,0,0,0,0,0,6080,0,6083,0,0,0 +,0,0,6084,0,0,6088,0,6089,0,0,6093,6105,0,0,6107,0,6110,0,0,0,6111,6125,6126,0,0 +,0,6129,0,0,0,0,6130,0,0,0,6131,6134,0,0,0,0,0,0,6142,0,0,0,0,0,6144,0,0,6146, +6151,6153,0,6156,0,6163,0,6180,6181,0,0,0,0,0,6182,0,0,0,0,6184,6195,0,0,6206,0, +6208,0,0,6212,6213,6214,0,6215,0,0,0,6228,0,0,0,6234,0,0,0,0,0,0,6235,6240,0, +6242,6243,6244,0,6250,6255,0,0,0,0,0,6257,0,0,0,6258,6278,0,6284,0,0,0,6285,0,0, +0,0,0,0,0,0,6286,0,0,0,6320,0,0,6322,6332,0,0,0,0,0,0,0,0,6334,0,0,0,0,0,0,0, +6335,0,0,6337,0,6338,0,6339,6340,0,0,6356,6357,6369,0,0,0,6370,6371,6372,0,6373, +0,0,0,0,0,6376,0,0,0,0,0,6382,6383,6384,0,0,0,0,6386,0,6389,6397,6400,6411,0, +6414,0,0,0,0,0,0,0,6415,6416,0,0,0,0,0,0,6417,0,0,0,0,6418,0,0,0,0,0,0,0,6420,0, +6421,6423,6425,0,6429,6430,0,6433,6438,0,0,0,0,0,0,0,0,0,0,6439,6440,0,0,6441,0, +0,6444,0,0,0,0,6446,0,0,0,0,6447,6448,0,0,6450,0,0,0,6454,0,0,6455,0,6461,0,0,0, +0,0,0,6462,0,0,6463,0,6464,0,6465,6467,0,0,0,6468,0,6479,6480,0,0,0,0,0,0,0,6481 +,0,0,6485,6487,0,0,0,0,0,0,6493,0,0,0,0,0,0,0,0,6494,6495,6496,0,0,0,0,0,6498,0, +0,0,6507,6508,0,0,0,0,0,0,0,0,0,0,6511,6512,0,0,0,0,6513,0,0,0,6514,0,0,0,0,0, +6516,0,0,6517,6518,0,0,0,6519,6520,6521,0,6523,0,0,0,0,6524,6528,0,6530,0,0,6532 +,0,6578,0,0,0,6583,0,6584,0,0,0,6587,0,0,0,6590,0,6591,0,0,0,0,0,6592,0,0,0,0, +6593,6594,0,0,0,0,0,6599,6600,0,0,6601,6602,6604,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +6608,0,0,0,0,0,0,0,0,6610,6611,0,6615,0,6616,6618,6620,0,6637,0,0,0,0,6639,0,0,0 +,0,6641,0,6642,0,0,0,6647,0,6660,6663,0,6664,0,6666,6669,0,6675,6676,6677,0,0,0, +0,0,0,0,0,0,6678,0,0,0,6679,0,6680,0,0,0,0,0,0,0,6693,0,0,0,0,0,0,0,0,0,6704, +6705,6706,0,0,6711,6713,0,0,0,0,0,6716,0,0,0,6717,0,6719,6724,0,0,0,0,0,0,0,0, +6725,6726,0,0,0,0,0,6728,6729,6735,0,6737,6742,0,0,6743,6750,0,6751,0,0,6752, +6753,0,0,0,0,0,0,6754,0,0,0,0,0,6756,0,0,0,0,0,0,6763,0,0,6764,6765,0,0,0,6770,0 +,0,0,6776,6780,0,6781,0,0,0,6783,0,6784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +6785,0,0,0,6792,0,0,0,6793,0,0,6802,0,0,0,0,0,6803,0,0,0,6804,0,0,0,6812,0,0, +6823,0,6824,6839,0,0,0,0,6852,0,0,6854,0,6856,6857,0,0,0,0,0,0,0,0,0,6867,0,6868 +,6870,6872,0,0,0,6873,6874,0,0,0,0,0,6875,0,0,6877,0,0,0,0,0,0,0,6878,0,0,0,6879 +,0,6880,0,0,0,0,0,0,0,0,0,0,6887,0,6888,6891,6893,0,6895,0,0,0,0,0,0,0,0,6899,0, +0,0,0,6901,0,0,0,0,6910,0,6911,0,0,6912,0,0,6913,6914,0,0,0,6915,0,0,0,6916,6919 +,0,0,0,0,0,0,6924,0,6925,0,0,0,6926,6927,6928,0,6929,0,6930,0,0,6931,6935,0,6936 +,0,0,0,0,6939,6940,6941,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6942,6948,6949,0,0,0,0,0,0 +,0,6952,6954,6963,6965,6966,0,0,6967,6968,0,0,0,0,0,0,0,0,0,6969,0,0,6970,6979,0 +,0,6980,0,0,6983,0,0,0,0,0,6984,0,0,0,0,0,0,0,6988,6990,6992,0,0,0,0,0,0,0,6995, +0,0,0,7012,0,0,0,0,0,0,0,0,0,7019,0,0,0,0,0,0,0,0,7021,0,0,7022,7023,7028,0,7030 +,7033,0,0,0,0,0,0,7038,0,0,0,0,0,0,0,0,0,0,7039,0,0,0,0,0,7046,0,7047,0,0,0,0,0, +0,0,0,0,0,0,7048,7052,0,0,0,0,0,7054,0,7060,0,0,0,0,7061,0,7065,0,0,0,0,7067, +7069,0,7070,7071,7072,0,0,7078,0,7080,7081,0,7083,0,0,0,7084,7087,7088,0,0,7090, +0,7093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7107,0,0,7108,0,0,0,0,0,0,0,0,7110,0,7114,0 +,0,0,0,0,0,0,7115,0,7116,0,0,0,0,0,7117,0,0,7118,0,0,7124,0,7125,0,0,7126,0,0,0, +0,7128,0,0,0,0,0,7129,0,7130,0,7132,7133,0,0,7134,0,0,7139,0,7148,7150,0,0,0,0, +7152,0,0,0,7153,7156,7157,0,0,0,0,0,7158,0,0,0,0,0,0,0,0,0,0,7163,7165,7169,0, +7171,0,0,0,0,0,0,0,0,0,7172,0,7173,7181,0,0,0,0,0,7182,7185,0,0,0,0,7187,0,7201, +7204,0,0,0,0,0,7206,7207,0,0,0,0,7211,7216,0,7218,0,0,0,0,7226,7228,7230,7232, +7233,7235,7237,0,0,0,0,7238,7241,0,7242,0,0,7247,0,0,0,7266,0,0,0,0,0,0,0,7289,0 +,0,7290,7291,0,0,7292,0,7297,0,0,0,0,0,0,0,0,0,0,7300,0,7301,0,0,0,0,0,0,0,0,0,0 +,0,0,7302,0,0,0,0,7305,0,0,0,0,7307,0,7308,0,7310,0,7335,0,0,0,0,0,0,0,7337,0, +7343,7347,0,0,0,0,0,7348,0,7349,7350,7352,7354,0,0,0,0,7357,0,7358,7366,0,7367, +7368,0,0,7373,0,0,0,7374,0,0,0,0,0,0,0,7376,0,0,0,7377,0,0,0,0,0,7378,0,7379, +7380,0,0,0,0,0,7383,0,0,7386,0,0,0,0,7398,0,0,0,7399,7400,0,7401,0,0,0,0,0,0,0, +7402,0,0,0,0,0,7405,0,0,0,0,0,7406,0,0,0,0,0,0,0,0,7421,7427,7429,0,0,0,7435,0,0 +,7436,0,0,0,7437,0,0,0,0,0,0,7438,7443,0,7446,0,7448,0,0,0,0,0,0,0,0,0,0,7456,0, +0,0,0,0,7457,0,0,7461,0,0,0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7463,7466,7472, +0,7476,0,0,7490,0,7491,0,0,7493,0,0,0,7498,7499,0,0,7508,0,0,0,0,0,7512,0,0,0, +7513,7514,7516,0,0,0,0,7518,0,0,7519,7521,7522,0,0,0,7526,0,0,7529,0,0,7531,0, +7536,0,7538,0,7539,0,0,7541,7542,7546,0,0,0,0,0,7547,0,7548,0,0,0,0,0,7550,0,0, +7552,7553,0,0,0,0,0,0,0,0,0,0,7554,7563,0,7573,0,0,0,0,0,0,7574,7576,0,7578,7581 +,7583,0,0,0,7584,0,7587,0,0,0,0,0,7589,0,0,0,7594,0,0,7595,0,0,7600,7602,7610,0, +0,0,0,0,7612,0,7613,7614,0,0,7615,0,0,7616,0,7620,0,7621,7622,0,7623,0,0,0,0, +7626,0,0,0,0,7627,7629,7631,0,0,7633,0,0,0,0,0,7639,0,7640,7642,0,0,7643,0,0,0,0 +,7644,0,0,0,0,0,0,0,7645,0,0,0,0,0,7661,7662,7663,7665,0,7666,0,7667,0,7684,7688 +,7690,0,7691,0,0,0,0,0,0,7692,0,0,7700,0,7707,0,7708,0,7709,0,7721,0,0,0,7722,0, +7724,0,0,0,0,0,0,7729,7731,0,7732,0,7733,7735,0,0,0,0,0,0,0,7739,0,0,7741,7745,0 +,7748,0,0,0,7751,0,0,0,7752,0,0,0,0,0,0,0,7753,0,0,7756,0,7757,0,7759,0,7760,0,0 +,0,0,7761,7768,0,0,7769,0,0,7770,0,0,7771,0,0,7772,0,0,7773,0,0,0,0,0,7778,7783, +0,0,0,0,0,7784,7785,0,7790,0,0,0,0,7792,0,7798,0,0,0,0,0,7799,0,7810,0,0,7813,0, +7814,0,7816,0,7818,7824,7825,7826,0,7828,7830,0,0,0,7840,0,7842,0,7843,0,0,0,0, +7844,0,0,0,0,0,0,0,7846,0,0,0,0,0,7856,7857,7858,7862,0,7865,0,0,7866,0,0,7913,0 +,0,0,0,7914,0,0,7915,7917,7918,7919,0,7920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7921, +7922,0,7924,0,0,7925,0,0,7927,0,7930,7935,0,0,7937,0,0,0,0,0,0,7939,0,7940,0,0,0 +,0,0,7941,0,0,0,0,7945,0,0,0,0,7949,0,0,0,0,0,0,0,0,7950,0,7953,0,0,0,0,0,0,0, +7968,0,0,0,0,7969,7972,7992,0,7993,0,0,0,0,0,0,0,0,0,0,0,7994,0,0,0,0,8007,8008, +0,0,0,0,0,0,0,0,0,0,0,0,8010,0,0,0,8012,0,0,0,0,0,0,0,0,8018,0,8028,8029,0,0, +8030,0,0,8032,8033,0,0,8034,8036,0,0,0,0,0,0,0,0,0,0,8037,0,0,0,8043,8052,8059, +8060,0,0,8061,0,0,0,8062,0,8063,0,8064,0,8066,8068,0,0,0,8080,8081,0,8089,0,0,0, +0,0,8092,0,0,0,0,0,0,8093,8110,0,0,0,0,0,0,0,8111,0,0,0,0,0,8112,8115,0,8117,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8120,8121,8122,8128,8129,8130,8131,0,0,8139,0,0, +8144,0,0,0,0,8145,8146,8153,0,0,0,0,0,0,0,0,8154,0,8157,8160,8162,0,8164,8165,0, +0,0,0,8166,8167,0,0,8179,0,0,0,8185,0,0,0,8186,0,0,8187,0,0,0,8188,0,0,0,0,0, +8204,0,0,0,0,8210,0,0,0,0,0,8213,0,8214,0,0,8215,0,0,0,0,0,0,8218,0,0,0,0,0,0,0, +0,0,8219,0,8221,0,0,8222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8225,0,0,0,8233,0,0, +8242,0,0,0,0,0,0,0,0,0,0,0,8247,0,8248,8252,0,8256,8257,0,0,8261,0,8264,8265,0,0 +,0,0,8267,0,0,0,8269,0,0,0,0,0,0,0,0,0,8270,0,0,0,8278,0,8279,8283,0,0,8285,8286 +,8289,8292,0,0,0,0,8293,8295,8299,8300,8301,0,0,0,0,0,0,8304,8307,0,0,0,0,0,0,0, +8321,0,0,0,8322,8323,8325,8326,8327,0,0,8332,8338,0,0,8340,0,0,0,0,0,8350,0,0, +8351,0,8354,8355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8360,8372,0,0,0,0,0,0,0,0,8377,0,0, +0,0,8380,0,0,0,8383,0,8384,0,0,0,0,8386,8392,0,0,8394,0,0,0,0,0,0,0,8396,8397,0, +8398,0,8399,0,0,0,0,0,8400,0,8401,8410,8411,0,8412,8413,8422,0,0,0,0,8423,0,0,0, +0,8424,0,0,8425,0,0,0,0,0,0,0,8441,8442,0,0,0,0,0,0,8443,0,0,8444,0,8447,0,0,0,0 +,8451,0,8458,0,8462,0,0,8468,0,8469,0,0,0,8470,0,8473,8479,8480,0,0,0,0,8481, +8483,0,0,0,0,0,0,0,0,0,8484,0,0,8490,0,0,0,0,0,0,8491,8493,8494,0,8528,0,0,0,0,0 +,0,0,8530,0,0,0,0,0,0,0,0,8534,8538,8540,0,0,8541,0,0,8545,0,8557,0,0,8569,8570, +0,0,8571,8574,8575,8579,0,8583,0,0,0,0,8591,0,0,0,0,0,0,0,0,8606,0,8607,0,0,0,0, +0,0,0,0,0,8608,0,0,8609,0,0,0,8610,0,0,0,8611,0,0,8613,8617,8621,0,0,8622,0,8623 +,0,8624,8625,0,0,0,0,0,0,0,0,0,8637,8638,8639,8650,0,0,0,0,8652,8654,8655,0,0,0, +0,0,0,0,0,0,0,8656,0,0,0,0,0,8657,0,0,0,0,0,0,0,0,0,8658,0,0,8659,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,8660,0,0,0,0,0,0,8661,8663,8664,0,0,0,0,8665,0,8669,0, +0,0,0,0,0,0,8671,8674,0,8684,0,8686,0,0,0,8689,0,0,0,8690,0,8706,0,0,0,0,0,0,0,0 +,0,0,0,8710,0,8711,8713,8714,8724,8727,8728,8733,8736,0,8737,8739,0,0,0,0,8742, +8743,8745,8754,0,0,0,0,8756,0,0,0,0,0,0,8757,8760,0,0,0,0,0,8762,8763,8764,0, +8766,8769,8770,8773,0,8774,0,8779,0,0,0,0,8780,0,0,8781,0,0,8783,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8784,0,0,0,0,0,0,0,0,8785,0,0,0,0,8786,0,0,0,0,8788 +,8790,0,0,0,8803,0,8813,8814,0,0,0,0,0,8815,8816,0,0,0,0,8818,0,0,0,0,8822,8828, +8829,0,8831,0,0,0,0,8833,0,0,0,8834,0,0,0,8835,0,8836,0,0,0,8837,0,0,0,0,0,0, +8838,8839,0,0,0,0,0,0,0,0,0,0,0,8840,0,0,0,8841,0,8842,0,0,0,8846,0,0,0,0,0,0,0, +8847,0,8848,0,0,8864,0,0,8866,0,0,8870,8872,0,0,8873,8874,0,0,0,0,0,0,8875,0, +8876,0,0,0,0,8896,8900,0,0,0,0,8901,0,0,0,0,0,8904,0,8907,0,0,0,0,8911,8912,8913 +,0,0,0,8914,0,8915,0,0,0,0,0,0,0,0,0,0,0,0,8916,0,0,0,8929,0,0,0,0,0,0,0,0,0,0, +8930,0,8932,0,8943,0,0,0,8945,8947,0,0,0,0,8949,0,8950,0,8954,8957,0,0,8970,0,0, +0,0,8971,0,8996,0,0,0,0,8997,9000,0,0,0,0,9001,9002,0,9004,9009,9024,0,0,0,0,0,0 +,0,0,0,0,0,0,9027,9082,0,0,9083,9089,0,0,0,0,0,0,9090,0,0,0,9092,0,0,9093,0,9095 +,0,0,9096,9097,9101,9102,0,0,0,0,0,0,0,0,9112,0,0,0,0,0,0,9114,0,0,9120,0,9121, +9122,0,0,0,9123,9124,0,0,9125,0,0,9126,0,9127,0,0,9129,9131,0,0,0,9132,0,0,9136, +0,9144,0,0,9148,0,0,0,0,0,0,9149,0,9152,9163,0,0,9165,0,0,0,0,0,0,0,0,0,0,0,0,0, +9166,0,9169,0,0,0,0,0,0,0,9170,0,0,0,0,9172,0,9174,9175,9176,0,9177,0,0,0,0,0,0, +0,0,9186,0,9187,0,0,0,9188,9189,0,0,9190,0,0,0,0,9191,0,0,0,9193,0,0,0,0,9197, +9198,0,0,0,9208,9211,0,0,0,0,9216,9217,0,9220,0,0,0,0,9221,9222,9223,0,9224,9225 +,0,0,9227,0,9228,9229,0,0,9230,0,9232,0,9233,0,0,0,0,0,9234,9235,0,0,9237,0,0,0, +0,0,0,0,0,9238,9240,0,0,9241,0,0,0,0,9244,0,0,0,0,9247,0,0,0,0,0,0,0,0,0,0,9248, +0,0,0,9249,0,0,0,0,0,9250,0,0,0,0,9251,0,0,9252,9255,0,0,0,9256,0,0,0,0,0,0,0, +9257,0,0,9258,0,0,0,0,0,0,9259,0,0,0,0,0,9262,9263,0,0,9265,9266,0,0,0,0,0,0,0,0 +,9268,9271,0,0,0,0,0,0,0,0,0,9273,0,0,0,9276,9277,9279,0,0,0,0,0,0,0,9280,0,0, +9293,0,0,0,0,0,9297,9301,0,0,0,0,0,0,0,0,0,0,0,9308,9309,9313,9321,9322,0,9326, +9327,0,0,9477,0,9479,0,0,0,0,9482,0,0,0,9483,0,9484,0,0,0,0,0,0,0,0,0,9485,0,0, +9486,0,0,0,9489,0,0,0,0,9490,9491,0,0,0,0,9493,0,9495,9496,0,0,0,0,0,0,0,0,9500, +0,9502,0,0,0,0,0,9504,9507,0,9509,0,9511,0,0,9513,0,0,0,0,0,0,0,0,9515,0,0,0,0,0 +,0,9516,9517,0,0,0,0,9532,0,0,9533,0,0,9538,0,9539,9540,0,0,0,0,9541,0,0,0,9542, +0,0,0,0,0,0,0,0,9544,9545,0,9546,0,0,0,0,0,0,9547,9548,0,0,0,9550,0,9557,0,9558, +0,9561,0,9563,9570,0,9572,9574,9575,0,0,0,9577,9592,0,0,9596,0,0,0,9598,0,9600,0 +,9601,0,0,0,0,0,0,9608,0,9638,9639,0,0,0,0,0,0,0,9641,0,0,9643,9644,9645,9646,0, +0,0,9648,0,0,0,0,0,0,0,9650,9654,0,0,0,0,0,0,0,0,9655,0,0,0,0,0,9656,0,9657,0,0, +0,0,9658,0,0,9659,0,0,9664,0,0,9665,0,9667,9669,0,0,0,0,0,0,0,0,0,0,0,0,9671,0, +9673,9681,0,0,0,0,9682,9683,9684,0,0,0,0,9686,9698,0,0,9700,9701,9702,0,9703, +9717,0,0,0,0,9718,0,9726,0,0,0,0,9727,0,0,0,9728,0,9742,0,9744,0,0,0,9750,0,9754 +,9755,0,0,0,0,0,9756,0,9757,9768,0,9769,0,0,0,9770,9771,0,9773,0,9774,0,9775,0,0 +,0,9776,9777,9784,0,0,0,9786,0,9789,0,0,0,0,9793,9794,0,0,0,9808,0,0,0,0,0,9811, +0,0,0,0,0,0,0,0,0,0,0,0,9812,0,9820,0,9823,0,9828,0,0,0,0,9830,0,0,9833,9836,0,0 +,0,9840,0,0,0,9841,0,0,9842,0,9845,0,0,0,9847,9848,0,0,9855,0,0,0,0,0,0,9856, +9863,9865,0,0,0,0,0,0,0,0,9866,9867,9868,9873,9875,0,0,0,0,0,0,9880,0,9886,0,0,0 +,9887,0,0,9891,0,0,0,0,0,0,0,9906,9907,9908,0,0,0,9909,0,0,0,0,0,0,9910,0,0,0,0, +9913,0,0,0,0,9914,0,0,0,0,0,9922,0,0,0,0,9923,9925,0,0,0,0,0,0,9930,0,0,0,9931,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9932,0,9939,0,0,9940,9962,9966,0,9969,9970,0,0,9974 +,0,9979,9981,9982,0,0,0,9985,0,0,0,0,0,0,9987,0,0,0,0,0,0,0,9988,9993,0,0,9994,0 +,0,0,9997,0,10004,0,0,0,0,0,10007,10019,10020,10022,0,0,0,10031,0,0,0,0,0,10032, +0,0,10034,0,10036,0,0,0,0,10038,0,10039,10040,10041,10042,0,0,0,0,0,10043,0,0,0, +0,0,10045,10054,0,0,0,0,10055,0,0,10057,10058,0,0,0,0,0,0,10059,0,0,0,0,0,0,0, +10060,0,0,0,0,0,0,0,10063,0,10066,0,0,0,10070,0,10072,0,0,10076,10077,0,0,10084, +0,10087,10090,10091,0,0,0,10094,10097,0,0,0,0,0,0,10098,0,0,0,0,0,0,10103,0, +10104,0,10108,0,0,0,0,0,0,0,0,10120,0,0,0,10122,0,0,10125,0,0,0,0,10127,10128,0, +0,10134,0,10135,10136,0,10137,0,0,10147,0,10149,10150,0,0,10156,0,10158,10159, +10160,10168,0,0,10171,0,10173,0,0,0,10176,0,0,0,0,10177,0,0,0,0,10178,0,0,0,0, +10194,0,10202,0,0,10203,10204,0,10205,10206,0,10207,0,0,0,0,10209,0,0,0,0,0,0,0, +10213,0,0,0,0,0,0,10217,0,10229,0,10230,10231,0,0,10232,0,0,10237,10238,10244,0, +0,0,0,0,10250,0,10252,0,0,0,0,0,0,10255,0,0,10257,0,0,0,0,0,0,10258,0,10259,0,0, +0,0,0,0,0,0,10260,0,0,0,0,0,0,0,10284,10288,10289,0,0,0,10290,0,10296,0,0,0,0,0, +10297,0,0,0,0,0,0,10298,0,0,0,0,10299,10303,0,0,0,0,0,10306,0,0,0,10307,0,10308, +0,0,0,0,10311,0,0,0,0,0,0,0,10315,10317,0,0,0,10318,10319,0,10321,0,10326,0, +10328,0,0,0,0,10329,0,0,10331,0,10332,0,0,0,0,0,0,10334,0,0,10335,10338,0,0,0,0, +0,10339,10349,0,0,0,0,0,0,10351,0,10353,0,0,0,0,0,0,10362,0,10368,0,10369,0,0,0, +10372,10373,0,0,0,0,0,10374,0,0,0,10375,0,10376,0,0,10386,10388,10390,0,0,0,0,0, +0,0,10391,0,0,10392,10394,0,0,10396,0,10397,0,10403,0,0,0,0,0,0,0,0,10404,0, +10405,10410,0,0,10411,0,10412,0,0,0,0,0,0,0,10421,10422,10423,0,0,0,0,0,0,0,0,0, +10425,0,0,10427,0,0,10430,0,0,0,0,0,10432,0,10433,10434,0,0,0,0,10436,10437,0, +10438,0,10439,0,10444,10446,0,0,0,0,0,10448,0,0,0,0,0,10449,0,0,0,0,0,0,0,10451, +0,10453,0,0,0,10454,10457,0,0,10459,0,10469,0,0,0,0,0,10472,10481,0,0,0,0,0, +10482,10483,0,10492,0,0,0,0,0,0,0,0,0,0,10499,0,0,0,10502,0,0,10510,0,10521, +10524,0,0,10525,10526,10528,0,0,0,0,0,0,0,0,10530,0,0,0,0,10533,0,10534,0,0,0,0, +0,0,0,0,0,0,10535,10536,0,0,10544,0,10553,10556,0,10557,10559,0,0,0,0,0,10562, +10563,10564,0,10565,0,0,0,10566,0,10567,0,0,0,0,10575,0,0,10576,0,10578,0,0,0,0, +0,0,0,0,0,0,10585,10586,10587,10589,0,10590,0,0,10594,0,0,0,0,0,10598,0,0,10601, +0,0,0,10602,0,10603,0,10604,0,10605,0,0,10607,0,10626,0,10627,0,0,0,0,0,10629, +10630,10631,0,0,0,10646,0,0,0,10647,0,10650,0,10651,0,0,0,10652,10653,10655,0, +10658,0,0,10659,0,10667,0,0,0,0,10669,0,0,0,0,0,0,0,0,0,10670,0,0,0,10671,0,0,0, +0,10672,10673,0,10674,0,0,0,10676,0,0,0,0,0,0,10678,0,10682,0,0,10692,0,10697,0, +0,0,0,10698,0,0,0,10700,0,0,0,0,0,10703,0,10704,0,0,0,0,0,0,0,10705,0,10715, +10718,10720,0,0,10722,0,0,0,0,0,0,0,0,10723,0,0,0,0,10726,0,0,0,0,0,10727,10730, +10743,0,0,0,0,0,0,10744,0,0,10745,0,0,0,0,0,0,10748,0,0,0,0,10750,0,0,10752, +10753,0,0,0,10756,0,0,0,0,0,0,10758,0,0,0,10759,0,10769,0,0,10772,0,0,0,0,0,0, +10773,0,0,0,10777,0,0,10779,0,0,0,0,0,0,0,0,10780,10784,0,0,0,10789,0,0,0,10791, +0,0,0,0,0,0,0,0,0,10795,0,0,10796,0,10808,0,10809,0,0,0,10810,0,0,0,10812,0,0, +10814,0,0,0,0,0,0,0,0,0,10815,0,0,0,0,10816,10817,0,0,0,0,10819,0,10820,0,0,0,0, +10821,10822,10823,0,10826,10849,0,0,0,0,10850,0,0,10852,0,10853,0,0,10856,0,0, +10857,10858,10859,10860,0,0,0,0,0,0,10863,0,10866,10867,10872,10890,0,0,10891, +10892,0,0,0,0,0,10893,0,0,0,10896,10899,0,0,10900,10902,0,0,0,0,0,10903,0,0,0,0, +0,0,0,0,0,0,0,0,10905,0,10906,0,0,0,0,10908,10911,0,10912,0,0,10916,0,0,0,0,0, +10917,0,10918,0,0,0,10923,0,0,0,0,0,10924,0,0,10928,10929,0,0,10930,0,0,0,10932, +0,0,0,0,10939,0,0,10945,0,0,0,10947,0,0,10948,0,0,0,0,0,0,0,0,0,0,0,0,10958,0, +10960,10962,0,0,10964,0,0,0,10966,0,0,0,0,0,0,0,0,0,0,10967,0,0,0,10968,0,0,0, +10973,0,0,0,0,0,10975,0,0,0,10976,10978,0,0,10982,10984,10987,0,0,10988,0,10989, +0,0,10991,0,0,0,0,10992,0,0,0,10993,0,10995,0,0,0,10996,10997,0,0,0,10998,0, +10999,0,11001,0,0,0,0,0,0,11010,11012,0,11013,11016,11017,0,0,11019,11020,11021, +0,0,0,0,0,0,0,0,0,0,0,0,11022,0,0,11023,11029,0,0,0,0,11031,0,0,0,11034,0,0,0,0, +11055,0,0,0,0,0,11056,11060,0,0,0,0,0,0,11061,0,0,11064,11065,0,11066,0,11069,0, +11085,0,0,0,0,0,11086,0,0,0,11088,0,0,0,11094,0,0,0,11095,11096,0,0,0,0,0,0, +11097,11098,0,0,0,0,0,0,11099,0,0,11102,11108,0,0,0,11109,0,11114,11119,0,11131, +0,0,0,11142,0,0,11143,0,11146,0,11147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11148,0, +11149,11152,11153,11154,0,11156,0,11157,0,0,0,11158,0,0,11159,11160,0,0,0,0,0,0, +0,0,0,0,0,0,11163,0,0,11164,11166,0,0,0,11172,11174,0,0,0,11176,0,0,0,0,0,11182, +11183,0,0,0,11184,11187,0,0,11188,11189,0,0,0,0,0,0,11194,0,0,0,0,0,0,0,11200, +11202,0,0,0,0,0,0,11203,0,11204,0,0,0,0,0,11205,0,0,0,11206,0,11207,0,0,11209,0, +11211,0,11214,0,0,11231,0,0,0,11293,11295,0,0,11296,11297,11302,0,0,0,11307,0,0, +0,0,11309,11310,0,11311,0,0,0,11313,0,11314,0,0,0,0,11334,0,11338,0,0,0,11339,0, +0,0,0,0,11340,0,11341,11342,0,11344,0,11345,0,0,0,11348,11349,0,0,11350,0,0,0, +11355,0,0,0,0,0,0,11356,0,11357,11370,0,0,11371,0,11374,11376,0,0,0,11377,0,0, +11378,11383,0,11386,11399,0,11400,11406,0,0,0,11408,0,0,11409,11412,0,0,0,0, +11417,0,0,0,11418,0,11421,0,11426,11429,0,0,0,0,0,11430,0,11437,0,11438,0,0,0,0, +0,11440,11453,0,0,0,0,0,0,11454,0,0,0,0,11455,0,0,11456,11460,11461,11463,0, +11469,0,11473,0,0,0,0,11474,0,0,0,11475,0,11476,11477,11480,0,0,0,0,11481,0,0, +11484,0,0,11487,0,0,0,0,0,0,0,0,0,0,11497,0,0,11502,0,11509,0,0,11510,11511, +11513,0,0,0,0,0,0,0,0,0,0,11515,0,0,0,0,11516,0,11520,11521,0,0,0,0,0,0,0,0,0,0, +0,11529,11530,11531,11534,0,0,11543,0,0,0,0,0,11547,0,11548,0,0,0,0,0,11552, +11556,0,11557,0,0,11559,0,11560,0,0,0,0,0,0,11561,0,0,11563,11564,0,11565,0,0,0, +0,11567,0,0,0,11569,0,11574,0,11575,0,0,0,11577,0,11578,0,0,0,11580,11581,0,0,0, +11582,11584,0,0,0,0,0,0,0,11587,0,11588,11591,0,11595,0,0,0,0,0,0,0,0,11596,0, +11597,0,0,0,0,11598,11601,0,0,0,11602,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11603, +11604,0,11606,0,0,11608,0,0,0,0,11610,0,0,11611,0,0,0,0,11613,0,11622,0,0,0, +11623,0,0,0,0,11625,0,0,11626,11627,11628,11630,0,0,0,0,0,0,11639,0,0,11646,0, +11648,11649,0,11650,0,0,0,0,0,0,0,0,0,11651,0,0,11652,11653,11656,0,0,11677, +11679,0,0,0,0,11680,0,0,11681,0,11685,0,0,0,0,0,0,0,0,11688,0,0,0,11716,0,11719, +0,0,0,0,0,11721,0,0,11724,11743,0,0,0,0,0,0,0,0,11745,11748,11750,0,0,0,0,0, +11751,0,0,0,11752,11754,0,11755,0,0,0,0,0,0,0,11759,0,0,0,0,0,0,11760,0,0,0, +11761,0,0,0,0,0,0,11766,11767,0,11772,11773,0,11774,0,0,11775,0,11777,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,11778,11780,0,0,0,0,0,0,0,11783,0,11784,0,0,0,11785, +0,0,0,11786,0,0,0,0,11788,0,0,11789,11791,11792,0,0,0,0,11795,11834,11835,11836, +0,0,11837,0,0,0,11838,0,0,11846,11851,0,11852,0,11869,0,0,0,11871,0,0,0,11872, +11874,0,0,0,0,0,0,11875,0,11876,11877,0,0,0,0,0,0,0,0,0,0,11883,0,0,0,0,0,0,0, +11884,0,11885,0,11886,0,0,11887,0,11894,11895,11897,11909,11910,0,11912,11918,0, +0,11920,0,11922,11924,11927,11928,0,0,0,0,11929,0,11934,0,0,0,0,0,11941,11943, +11944,0,11945,0,0,0,0,11948,11949,0,0,0,0,11953,0,11954,0,11955,0,11956,0,0,0,0, +0,11957,0,0,11959,0,0,0,0,0,0,0,0,11961,0,0,0,0,0,11978,0,0,0,11979,11980,11986, +11987,0,11992,0,0,0,0,0,11993,0,0,0,11994,0,11999,12004,12005,12006,0,0,0,0,0, +12011,0,0,12012,12014,0,0,12015,0,0,12019,12028,0,0,12029,0,0,12032,12033,0,0,0, +0,12034,0,12041,12043,0,0,12044,0,0,0,0,0,0,0,12046,0,0,0,0,0,0,0,12054,12055,0, +12056,0,0,0,12060,12064,0,0,0,0,0,12065,12067,12068,0,0,0,0,0,0,0,0,12074,0,0,0, +12075,12076,0,0,0,12079,0,12081,12086,12087,0,0,12088,0,0,0,0,12089,0,12092,0,0, +0,0,12097,0,0,0,0,0,0,0,0,12098,0,0,0,0,0,0,0,0,0,0,0,0,0,12102,12103,12104, +12111,0,0,12114,12116,0,0,0,12118,0,0,0,12119,12120,12128,0,0,0,0,12130,0,0,0,0, +0,0,12131,0,0,0,12132,12134,0,0,0,0,12137,0,12139,0,12141,0,0,12142,0,0,0,12144, +0,0,0,0,0,12145,0,12148,0,12153,0,0,0,0,12154,12171,12173,0,0,0,12175,0,0,0,0, +12178,0,0,0,0,0,0,0,12183,0,0,0,0,0,0,0,0,12184,0,0,0,12186,0,0,0,0,0,12187, +12188,0,0,12189,0,12196,0,12197,0,0,12198,0,12201,0,0,0,0,12203,0,12209,0,0,0,0, +12210,12211,12212,12213,0,12217,12218,0,0,0,0,0,0,0,0,0,12222,0,0,0,0,0,0,0, +12223,0,0,12229,0,0,0,0,12233,0,0,0,0,12234,0,0,12236,12242,0,0,0,12243,0,0,0, +12244,12253,0,12254,12256,0,12257,0,0,12275,0,0,0,0,0,12277,0,0,0,0,0,12278,0, +12289,0,0,12290,0,12292,12293,0,0,12294,0,12295,0,0,12296,0,12297,0,12298,0,0,0, +0,12301,0,0,0,0,0,0,0,0,0,0,0,0,0,12309,0,12338,12340,0,0,0,0,12341,0,0,0,0,0,0, +0,0,12342,12343,0,12344,0,0,0,0,0,0,0,0,0,12345,0,0,0,0,0,0,0,0,12346,0,0,0,0, +12348,0,0,0,0,0,0,0,0,0,0,0,0,12350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12351,0,12355, +12356,12357,0,0,12367,12370,12371,0,0,0,0,0,12372,12376,0,0,0,0,0,0,0,0,12379,0, +12382,0,12383,0,0,12384,0,0,0,0,12393,0,0,12394,0,0,0,0,12398,12403,0,0,12404,0, +0,0,0,0,0,0,0,0,0,0,0,0,12410,0,0,0,12411,0,0,0,12412,0,0,0,0,12420,0,12421,0,0, +0,0,0,12423,0,12425,12429,0,0,0,12431,12432,0,0,0,0,0,0,0,0,0,0,0,0,12434,0,0,0, +0,0,12435,12436,0,0,0,0,0,0,0,0,12437,0,0,0,0,0,12438,0,0,0,0,0,0,0,0,12445,0,0, +0,12450,12451,0,0,0,0,0,0,0,0,12452,12475,0,0,12493,12494,0,0,0,12495,0,0,0,0, +12496,12502,12509,0,0,0,0,12510,0,12512,12513,0,0,0,0,12514,0,0,0,12515,0,12520, +0,0,0,12524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12527,0,0,0,12528,0,0,0,12529,0,0,0, +0,0,12530,0,12535,0,0,12536,0,12538,0,0,0,0,0,0,0,0,0,0,0,0,12540,0,12548,0,0,0, +0,0,12550,0,0,0,12551,12552,0,0,0,12554,0,0,0,0,0,0,0,0,12555,0,0,12562,0,12565, +0,12566,0,0,0,0,0,0,0,0,0,0,0,0,12569,0,0,0,12571,12574,0,0,0,0,0,0,0,12577,0,0, +0,0,0,0,0,12578,12579,12603,0,12608,0,0,12611,0,12612,0,12615,0,12625,0,0,0,0, +12627,12646,0,12648,0,0,12657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12670,0,0,12671,0, +12673,12677,0,0,0,0,0,0,0,0,0,0,0,12679,0,12681,0,12682,12693,0,12694,0,12697,0, +12701,0,0,0,12703,12704,0,0,0,0,12707,12737,0,0,12739,0,0,12740,0,0,12742,12743, +0,0,0,0,0,0,0,0,0,12745,0,12746,12747,0,12748,0,0,12759,12767,0,0,0,0,12773,0, +12774,12778,0,0,0,0,0,0,0,12779,0,0,0,0,0,12780,12793,0,12824,0,12825,0,12836,0, +0,0,0,12839,0,12842,0,0,0,0,0,0,0,0,0,0,0,0,12843,12845,0,12846,0,0,0,0,12847,0, +0,12850,12852,12853,0,0,0,12854,0,0,0,12855,0,12856,0,12858,0,0,12859,0,12862,0, +12863,0,0,12866,0,12869,12872,12873,0,0,0,0,0,0,0,0,0,12875,0,12877,0,0,12878,0, +0,0,0,0,0,0,0,0,12884,12885,12888,0,12889,0,0,0,0,12893,0,0,0,12895,12896,12898, +0,0,0,0,0,0,0,12902,0,12909,12910,0,12926,0,12928,0,0,0,12929,0,12930,0,0,0,0, +12931,0,12932,12933,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12934,0,12942,0,0,0,0,12944, +0,0,0,0,0,0,0,0,12946,0,0,12948,0,0,12949,0,0,0,0,12950,0,0,0,0,12951,0,12952,0, +12953,0,0,0,12954,12958,12959,0,0,0,0,0,12960,12964,0,0,0,0,0,12966,0,0,0,0,0,0, +0,0,12970,0,12971,0,0,0,0,0,0,12972,0,0,12982,0,0,0,12984,12985,0,12986,12996, +12997,13001,13002,0,0,0,0,13004,0,0,13005,0,0,13007,13009,0,13017,0,0,0,13020,0, +13021,0,0,0,0,0,0,0,0,0,0,13022,0,0,0,0,0,0,0,0,13024,13027,0,0,0,0,0,13028,0,0, +13029,0,0,0,0,0,0,0,13032,0,13037,0,0,0,0,0,0,13040,0,0,13041,0,0,0,13043,13044, +13046,0,0,0,0,13047,0,0,0,0,0,0,0,13049,13054,0,13056,0,0,13060,13061,0,0,0,0,0, +13067,0,0,13068,0,13071,0,0,0,0,0,13077,13078,0,0,0,0,0,13079,13080,13081,0, +13082,0,0,0,13085,0,0,0,0,0,0,0,13086,0,13087,13088,0,0,0,0,0,13094,0,13099,0, +13100,0,0,0,13101,0,13125,13126,13128,13129,0,0,13130,0,13131,0,0,0,0,0,0,13134, +0,0,0,0,0,0,0,0,0,0,0,13150,0,13168,0,0,0,0,0,0,0,0,0,13169,0,0,13170,0,0,0,0, +13174,0,0,0,13176,0,0,0,0,0,13177,0,13178,13183,13187,0,0,0,13189,0,0,13190,0,0, +13191,0,0,13206,0,0,0,13207,0,0,0,0,0,0,0,0,0,0,13212,0,0,13219,13232,0,0,0, +13241,0,13249,13253,0,0,0,0,0,13255,13259,0,13260,13261,0,13262,0,13272,0,0,0,0, +13276,0,0,0,0,13277,13299,0,0,13301,13302,0,0,13303,0,0,13305,0,13310,0,0,0, +13311,0,0,0,0,13325,0,13328,0,0,0,13329,0,0,0,0,0,0,13330,0,0,13331,0,13335,0,0, +13342,0,0,0,0,0,13343,0,13354,0,13362,0,13366,13367,13369,0,0,13371,13372,0, +13373,13374,0,13376,0,13380,13381,13386,0,13387,13388,0,13389,13391,13395,0,0,0, +0,0,13401,13409,0,13410,0,0,0,0,13420,0,0,0,0,0,13422,0,0,0,0,13423,0,0,0,0, +13425,0,0,0,0,0,13427,0,0,0,13428,0,0,13430,13438,0,13439,0,13445,0,13448,13449, +0,0,0,0,0,0,13451,0,13457,0,0,0,0,13458,13459,0,13460,0,0,0,0,13464,13465,13466, +13470,0,13471,13472,13474,13475,0,13476,0,0,13478,13479,0,13481,0,0,0,0,13487,0, +13490,0,13493,0,0,13494,0,0,13495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13496,13497,0, +13500,0,0,13516,13522,0,0,13525,13528,0,0,0,13530,13535,0,13537,13539,0,13540,0, +13543,0,13544,0,0,0,0,0,0,13545,0,0,0,0,0,0,13547,0,0,0,13549,13555,0,0,0,13556, +13557,0,0,0,0,0,0,0,13558,0,13563,0,0,0,0,13564,0,0,0,0,0,0,0,0,13566,0,0,0,0,0, +0,13569,0,0,13571,0,0,0,0,13573,0,0,0,0,0,0,13578,0,0,0,0,0,0,0,0,0,0,13581,0, +13586,0,13595,0,13600,0,0,0,0,0,0,0,0,13601,13603,0,13604,13605,13606,13607,0,0, +13617,13618,0,0,0,0,0,0,0,13623,0,13625,13627,0,0,0,0,0,0,0,0,13629,0,0,0,13634, +0,0,0,13638,0,0,0,0,0,0,0,0,13654,0,0,0,0,0,0,0,0,0,0,13656,0,13659,0,0,13660,0, +0,13662,0,0,0,13663,0,13664,0,0,0,0,0,13668,0,13669,13671,0,0,13672,0,0,0,0,0,0, +13675,13685,0,13686,0,0,0,13687,0,0,0,13692,13694,13697,0,0,0,13702,0,0,0,0,0, +13705,0,0,0,0,13707,0,0,0,13714,0,0,0,0,0,0,0,0,0,13715,0,13716,13717,0,0,13719, +13724,13730,13731,0,0,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,13734,0,13736,0,0,13737, +13738,13747,0,13751,0,0,13752,0,0,0,13753,0,13757,0,0,13762,13763,0,13764,13765, +0,13766,0,0,13767,0,0,0,13768,0,0,0,0,0,0,0,13769,0,0,13772,0,13775,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,13776,13778,13787,0,0,0,13797,0,13798,0,13801,0,13804, +13806,0,0,0,0,13816,13817,0,0,0,0,0,0,0,0,0,0,0,0,0,13834,0,13836,0,0,13838,0,0, +13839,0,13840,0,0,0,0,13842,0,0,0,0,0,0,13843,0,0,0,0,0,0,0,0,0,13845,0,0,0,0,0, +13858,0,0,13860,0,0,13861,0,0,13862,13863,0,13868,0,13869,13870,0,0,0,0,0,0,0,0, +0,0,13872,0,0,0,0,13873,13878,0,0,0,0,0,0,0,0,0,0,13886,0,13888,13889,13890,0,0, +13891,13894,0,13897,13899,13900,13904,0,0,13906,0,0,0,13909,0,0,0,13910,0,0,0, +13911,0,0,0,0,0,13912,13917,0,0,0,0,13918,0,13919,0,0,13920,0,0,0,13921,0,0, +13922,0,0,0,0,0,0,0,13924,0,13927,0,0,0,0,0,13932,0,13933,0,13934,0,0,13935,0, +13944,0,0,0,13954,0,0,13955,0,0,0,0,13956,0,13957,0,13967,13969,0,0,0,0,0,0,0,0, +0,0,0,0,13970,13990,0,13991,13994,0,13995,0,0,0,0,13996,0,0,13999,0,0,0,14018,0, +14019,0,14021,0,0,0,0,0,0,14041,0,0,0,0,0,0,0,0,14043,0,0,0,0,14046,0,0,0,14048, +14049,0,0,0,0,0,0,0,0,0,0,14051,0,0,14052,14056,0,14063,0,14064,14066,0,0,14067, +0,0,0,0,0,0,0,0,0,14068,0,0,0,14072,0,14074,14075,0,14076,14079,14085,14086, +14087,14093,0,0,0,0,14095,0,0,0,0,0,0,14096,14097,0,0,0,0,0,0,0,14098,0,14102,0, +0,0,0,0,14103,0,0,0,14104,0,0,14105,0,0,0,14107,14108,0,0,14109,0,0,0,0,0,0,0,0, +14117,0,0,0,0,14118,0,0,0,0,14119,0,0,14120,0,0,14121,0,14122,14127,0,14128, +14136,0,0,14138,0,14140,0,0,0,14141,14142,0,0,0,0,14146,0,0,14149,0,14151,0,0,0, +14152,0,0,14153,0,0,0,0,0,0,0,0,0,14154,0,14156,14157,0,0,14159,0,14161,0,0,0,0, +14162,0,0,0,0,0,0,14163,0,0,14173,0,0,0,0,0,0,14174,0,0,14176,0,0,14178,0,0, +14179,14181,0,0,14182,14185,14187,0,14190,0,0,14197,0,0,0,0,0,0,0,0,0,0,0,0, +14198,0,0,0,0,0,0,14199,14200,0,0,0,14204,0,0,14208,0,0,0,0,0,0,0,0,0,0,0,14231, +0,0,0,0,0,0,0,0,0,14234,0,0,14235,0,0,0,14240,14241,0,0,0,14246,0,0,0,14247,0, +14250,0,0,14251,0,0,14254,0,0,14256,0,0,0,14260,0,14261,0,0,0,0,14262,14267, +14269,0,0,14277,0,0,14278,0,14279,14282,0,0,0,14283,0,0,0,14284,14285,0,0,0,0, +14286,0,0,0,14288,0,0,0,14289,0,14290,0,14293,14301,14302,14304,14305,0,14307,0, +14308,14309,0,0,0,0,0,0,0,0,0,0,0,14311,14312,0,0,14317,0,0,0,0,0,0,0,14318,0,0, +0,0,14320,0,0,0,0,14321,14322,0,0,0,0,0,14326,14329,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +14330,14331,0,0,0,0,14332,0,0,0,14333,0,0,14337,14340,0,14341,0,0,14342,0,14345, +14346,0,0,14347,0,14362,0,0,0,0,0,14364,14365,14371,0,14373,0,0,14374,0,14379,0, +14400,0,0,0,0,0,14401,0,0,14405,0,14406,0,14408,14409,0,0,0,14417,0,0,14424,0,0, +0,0,0,0,0,0,0,14430,0,0,0,14431,0,0,14435,0,14440,0,0,0,0,0,0,14442,0,0,14443,0, +0,0,0,0,14446,0,0,0,0,0,0,0,14454,0,14457,0,14460,0,0,14466,0,0,0,0,0,14467,0,0, +0,0,0,0,14469,0,14477,0,0,0,0,0,0,14478,14482,0,0,0,14483,0,0,0,14485,14486,0,0, +0,14487,14488,14489,14492,14493,14494,14495,14496,14497,0,14499,0,14501,0,0,0,0, +0,0,0,0,0,0,14502,0,14507,14512,14513,14514,0,0,0,0,0,0,0,0,0,0,0,14515,14526, +14530,0,14537,0,14544,0,14547,0,0,14548,14550,14551,0,0,14552,0,0,0,14553,0, +14554,0,0,0,0,14556,14564,0,0,14565,14566,0,0,0,0,0,0,14568,0,0,14569,0,0,0, +14571,14576,0,0,14577,14578,14579,0,0,14580,0,0,0,0,14582,0,0,0,0,0,0,0,0,0,0,0, +0,14583,0,0,0,0,0,14587,0,14588,0,0,14600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,14601,0,0,14604,14605,14611,0,14613,0,0,0,0,14615,0,0,0,0,0,0,14627,0,14628,0, +0,0,0,14631,0,14633,14634,0,0,0,0,14635,0,0,0,0,0,0,0,0,14636,0,0,14639,14642,0, +0,0,0,14644,0,0,0,0,14645,14646,0,14653,0,0,14654,0,14658,0,14661,0,0,0,14665,0, +0,0,14668,0,0,0,0,0,0,0,0,0,14669,0,0,14670,0,0,0,14680,0,0,14681,0,0,0,0,0, +14682,14683,0,0,0,0,14686,0,0,0,0,14687,14697,0,0,0,0,14699,14705,14711,0,0,0,0, +0,0,0,0,0,0,14712,0,0,0,14713,0,0,0,0,14719,0,14720,14721,14726,0,0,0,14728, +14729,0,0,0,0,14731,0,0,0,0,0,0,0,14733,14736,14737,0,0,14740,14742,0,0,0,14744, +14753,0,0,0,0,14755,14758,14760,0,0,0,0,0,14761,14762,14765,14771,0,14772,0, +14773,14774,0,0,14775,0,0,14776,0,0,0,0,14777,0,14779,0,0,14782,0,0,14785,14786, +14788,0,0,0,0,0,14795,0,0,0,0,0,0,14798,0,14803,14804,14806,0,0,0,14809,0,0,0,0, +0,0,14810,0,0,0,0,14811,0,14812,0,0,0,0,0,14815,0,0,0,0,0,0,0,0,14816,0,14818,0, +0,0,0,0,0,14819,0,14820,0,14823,0,0,0,14824,0,0,14826,14827,0,0,0,0,0,0,0,0,0,0, +0,0,14830,0,0,0,0,0,14833,0,14845,0,0,0,0,0,14846,0,0,14847,14871,0,14873,0, +14876,0,14877,14878,14880,0,0,0,0,0,14881,0,14882,14894,0,0,0,0,14895,0,14907,0, +14908,0,0,0,0,0,0,0,14911,0,0,0,0,14920,0,0,14931,0,14932,14934,14935,0,0,14936, +0,14945,0,0,0,0,0,0,0,14947,0,0,14948,14949,14951,0,0,14952,0,0,0,14964,14973,0, +0,14990,0,0,0,0,14995,0,0,14998,15001,0,0,15002,15020,0,0,0,0,0,0,15021,0,15022, +0,0,0,0,15023,0,0,15025,15029,15033,0,0,0,15034,0,0,0,15035,0,0,0,0,0,15043, +15044,0,0,0,15045,15046,15048,15050,0,15065,0,0,0,0,15066,0,0,15075,15082,15084, +0,0,15085,15086,0,0,0,0,0,0,0,0,15088,0,0,0,15089,0,0,0,0,15094,0,15096,0,15097, +0,15100,0,0,15102,0,0,0,0,0,0,0,0,15105,0,0,15106,0,15109,15113,0,0,0,15115,0, +15118,0,0,0,0,0,0,15119,0,0,15120,0,0,0,0,0,15123,15129,0,0,0,15130,0,15131,0,0, +15134,0,15135,0,0,0,15137,15138,0,0,0,0,0,0,15139,0,0,0,0,0,15140,0,0,15154, +15162,0,15169,15170,0,15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15177,0,15178,15179,0, +0,0,0,0,15183,0,0,0,0,0,0,0,0,0,0,0,0,15185,15187,0,15194,15195,15196,0,0,0,0,0, +0,0,15204,0,0,0,0,15206,0,0,0,0,0,15207,0,0,0,0,0,0,0,0,0,15213,0,15214,0,0,0,0, +0,0,0,15232,0,0,0,0,15234,0,15238,15240,0,15248,0,0,0,0,15250,15251,0,0,0,0,0,0, +0,15252,0,0,0,15255,15262,15266,0,0,0,15267,0,0,0,15277,15279,0,0,0,15280,15281, +15282,0,0,0,0,0,15285,0,0,0,0,15289,0,0,15291,0,0,0,0,0,0,0,15296,15297,0,0, +15304,0,0,0,0,15306,0,0,0,0,0,0,15307,15308,0,15309,0,0,15311,0,0,15312,15313,0, +0,0,0,0,0,0,0,0,0,0,0,15314,15317,0,0,0,15318,15319,0,0,0,0,15320,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,15321,0,0,0,0,0,15324,0,15325,15326,0,15330,0,0,0,0,15334,0, +15335,0,15341,0,0,15342,0,0,15343,15344,0,0,0,0,15345,0,0,0,0,15347,0,0,15348, +15349,15350,0,15356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15357,0,15358,0,0,0,0,0,0,0, +15359,15360,15364,0,15380,0,0,0,0,0,15392,0,0,15393,0,15395,0,0,0,0,0,0,0,0, +15396,0,0,15397,15398,0,0,0,0,0,0,0,0,0,15399,0,15400,0,0,0,15402,0,15405,15410, +0,0,0,0,15411,0,0,0,15412,0,15416,0,0,0,0,0,0,0,15428,0,15435,0,0,15438,0,0,0,0, +15439,0,0,0,15440,0,0,0,15441,15449,15451,0,0,0,0,0,0,0,15452,0,0,15455,0,0,0, +15456,0,0,15458,0,15460,15461,0,0,0,0,0,15462,15464,0,15465,0,0,15466,0,0,15467, +0,0,0,0,0,15468,0,0,0,0,15481,0,0,15484,0,15485,15486,0,0,0,15487,0,0,0,0,0, +15488,0,15492,15498,0,0,0,15499,0,0,0,15500,0,15501,0,0,15512,0,15522,0,0,0, +15524,0,15525,15526,0,0,15527,0,0,15545,15546,0,15548,15552,0,15553,0,0,0,15554, +0,15555,0,15557,15565,15573,15577,15578,0,15582,0,15583,0,0,0,0,0,0,0,0,0,0,0,0, +0,15586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15588,0,0,0,0,0,15589,0,0,0,0,0,0,0,15593, +15594,0,0,0,0,15595,0,0,0,0,0,0,15596,0,0,0,15597,0,0,0,0,15600,0,0,15601,0,0,0, +0,15602,15603,0,0,0,0,0,0,15604,0,15609,0,0,15612,0,0,15613,0,0,15615,15617, +15618,0,0,15620,0,15636,15637,0,0,15649,0,0,0,0,0,0,0,15650,0,0,15651,0,0,0, +15656,0,15658,0,0,0,15664,0,0,15665,0,0,15668,0,0,0,0,0,15669,0,0,15674,0,0, +15675,0,0,0,0,15676,0,0,0,0,0,0,0,0,0,0,0,15677,0,0,0,0,15678,0,0,0,0,0,15679,0, +0,15681,0,15686,0,0,0,0,15687,0,15688,0,0,15690,0,0,0,15697,0,15699,15700,0,0,0, +0,0,0,0,0,0,15701,0,15702,15703,0,15704,0,15705,0,15707,0,15709,0,15712,15716,0, +15717,0,15718,15720,0,0,0,0,0,15724,0,0,0,15725,0,15726,0,0,0,15740,0,15745, +15746,0,0,15747,0,15748,0,0,0,0,0,15749,0,0,0,15752,0,15753,0,0,0,0,0,0,15759,0, +0,0,15765,0,0,0,0,0,0,0,0,0,15767,0,0,0,15771,0,0,15784,0,0,0,0,15785,15790, +15791,0,0,15792,0,0,0,15807,0,15811,0,0,0,0,0,0,0,0,0,0,0,0,15818,0,0,0,15819,0, +0,0,0,15821,0,0,0,0,0,15822,15824,0,0,15827,0,0,15829,15831,0,15832,0,0,15833,0, +15835,15838,15839,15843,0,0,0,0,0,0,0,0,0,0,0,15844,0,0,0,0,15845,15851,15856,0, +0,0,0,0,0,0,15858,15860,0,15861,0,0,0,15864,0,0,0,0,15865,0,0,0,0,0,0,15866,0, +15872,0,0,15876,0,0,0,0,15877,15878,15883,15885,0,0,15888,0,0,0,0,0,15889,15890, +0,0,0,0,0,0,0,0,15892,0,0,0,0,0,0,0,15893,0,0,15894,0,0,0,15895,0,15896,15897,0, +15898,15901,15902,0,15911,15915,0,15916,0,15924,15935,0,15937,0,0,0,0,0,15950,0, +0,0,0,0,0,0,15958,0,0,0,15961,0,0,15966,0,15967,0,0,15977,0,0,15978,0,0,15981, +15982,15983,0,0,0,0,0,0,0,15986,0,0,0,15990,0,15991,15995,15998,0,15999,0,16000, +0,0,0,0,16008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16009,16011,0,16013,0,0,0,0, +0,0,0,0,16014,0,0,16015,16023,16024,16025,0,0,16026,0,16030,0,16032,0,16033,0,0, +0,0,0,0,16035,16036,16037,0,0,0,0,0,16039,0,0,0,0,16041,0,0,0,0,0,16043,16044,0, +0,16047,0,0,0,16048,0,0,16049,16050,16052,0,0,0,0,0,16055,0,0,0,0,0,0,0,0,16056, +0,0,0,0,0,0,0,16058,16060,16061,0,0,16063,0,0,16064,0,0,0,16067,16068,0,0,16069, +16078,0,0,0,16079,0,0,0,16080,0,16081,0,0,0,16088,0,0,0,0,0,0,0,0,0,0,0,16089, +16093,0,16097,0,16103,0,16104,16105,0,0,16256,0,0,16259,0,0,0,0,0,0,0,16260, +16261,0,0,16262,0,0,16263,0,16268,0,0,0,0,0,0,0,16269,0,0,16270,16273,0,16274,0, +0,0,0,16275,16276,16277,16280,0,0,0,16281,16284,0,0,0,16286,0,16289,0,0,0,0,0,0, +0,0,0,16290,0,0,0,0,16291,0,0,0,0,0,0,0,16292,0,0,0,0,0,0,0,0,16293,16295,16297, +0,16302,0,16304,0,16305,0,16306,0,0,0,0,0,0,0,0,0,0,0,0,16307,16308,16312,0,0,0, +0,0,0,16313,16315,0,16318,0,0,0,16321,0,0,0,0,0,0,0,16326,16333,16336,0,0,0,0, +16337,16340,0,0,0,0,0,16345,0,0,16346,0,0,0,0,0,0,0,0,0,16347,0,0,16348,0,0,0,0, +16349,0,0,0,16350,0,16357,0,0,0,0,16359,16360,0,0,0,0,16362,16363,16364,16365,0, +0,16366,0,0,0,0,16367,16368,0,16369,16374,0,0,0,0,0,0,0,16376,0,0,0,0,16378, +16379,0,16380,0,0,0,16381,16383,0,0,0,0,0,16390,0,0,0,16399,0,16402,16404,16406, +16407,0,0,0,16409,16411,0,0,0,0,16412,0,16413,16415,16423,0,0,0,0,0,16424,0,0,0, +16428,16434,16435,16449,0,16450,16451,0,0,0,16453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +16454,0,0,16456,16458,0,0,16459,0,0,16460,0,0,0,0,16462,0,16463,0,0,16466,0,0,0, +0,0,16479,0,0,16480,0,16481,16484,0,0,0,0,0,0,0,0,0,0,16485,0,0,0,0,0,0,16489,0, +0,0,0,0,16491,0,0,16498,0,0,16503,0,16505,0,0,0,0,0,0,0,0,16506,0,0,0,16508, +16509,0,0,0,0,0,0,0,0,16511,16513,0,0,0,16516,0,16517,0,16519,0,16529,0,0,16531, +0,0,0,0,0,0,16534,0,0,16541,16542,0,0,0,0,0,0,0,0,0,16543,16547,16548,0,0,0, +16551,0,16552,0,0,0,16553,0,0,16558,0,0,16562,16565,0,0,0,16570,0,0,0,16573, +16585,0,0,0,16586,16587,16595,0,16596,0,16598,0,0,0,16600,0,0,0,0,0,0,0,0,0,0,0, +0,0,16601,0,0,0,0,16603,0,0,0,0,0,0,0,16604,16612,0,0,0,0,16613,0,16618,0,0,0, +16640,0,0,16641,0,0,0,0,0,0,16645,0,0,0,0,16646,0,0,0,0,0,0,16651,0,0,0,0,16653, +16654,0,0,0,16655,0,0,16656,16667,0,0,0,0,16671,0,16672,0,0,0,16673,0,0,0,0,0, +16676,0,16686,0,0,0,0,16689,0,16690,0,16692,0,16693,0,16694,0,16696,0,0,0,16705, +0,0,0,0,0,0,16707,0,0,0,16709,0,0,0,0,16711,0,16712,16713,0,0,0,16715,0,0,0,0, +16716,0,0,0,0,0,0,0,0,0,16718,16724,0,0,16726,16727,0,0,0,0,0,0,0,16728,0,16729, +0,0,16730,0,0,0,0,0,16731,0,0,0,16732,0,0,0,0,16734,16738,0,0,0,0,0,0,0,0,16743, +0,0,16745,0,0,0,0,0,16749,0,16752,0,0,0,0,16756,0,0,16758,0,16759,0,0,0,0,0, +16760,0,0,0,0,0,0,0,16762,0,16769,0,16770,0,16772,0,0,0,16777,16780,0,0,0,0,0,0, +16781,0,0,16782,0,16784,0,0,16785,16787,16792,0,0,16794,0,0,0,16798,0,0,16809,0, +0,16814,16816,16817,0,16819,0,0,0,0,0,0,0,0,0,0,16820,0,0,16836,16839,0,0,16841, +16851,16857,0,0,16858,16859,0,0,16860,0,0,0,0,0,0,0,0,16862,0,16863,0,0,0,0,0,0, +0,16864,0,0,0,0,0,0,0,16876,0,16881,16882,0,16885,16886,0,16887,0,0,0,16889, +16891,0,0,0,0,0,16894,16895,0,0,0,0,0,0,0,0,0,0,0,16897,0,16898,0,0,0,0,0,16913, +0,0,16924,16925,16926,0,0,16927,0,0,0,16937,16938,0,0,0,16940,16941,0,0,0,16942, +16945,0,16946,16949,16950,0,0,0,16952,16955,0,0,0,16965,0,16969,0,0,16975,0,0, +16976,0,0,0,0,16978,0,0,16981,0,16983,16989,0,0,0,0,16990,0,0,16991,0,0,0,16993, +0,16994,16996,17000,0,0,0,0,0,17002,17004,0,17006,0,0,17007,0,0,0,0,17008,17013, +17014,0,0,0,0,0,0,0,0,0,17021,0,17031,0,0,0,0,0,17033,17036,0,17038,0,0,17039,0, +17045,0,0,17046,17047,0,0,0,0,17048,0,17049,17050,0,17051,17053,0,17054,0,17055, +0,0,0,0,0,17063,0,0,17064,0,0,0,0,0,0,0,17065,0,0,17068,0,0,0,0,0,17072,0,0,0,0, +0,0,17073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17074,0,17080,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,17081,17083,17084,0,0,0,17085,0,0,0,0,17092,0,0,0,0,0,0,0, +0,0,17093,0,17095,17102,0,0,0,0,0,0,17103,0,0,17105,0,17107,0,0,0,0,17114,0,0,0, +0,0,17115,17125,17127,0,0,17128,0,0,0,17129,17130,0,17131,0,0,0,0,0,17132,17135, +17145,0,0,0,0,0,0,0,0,17146,0,17147,0,17148,0,0,0,0,0,0,17149,17150,0,17151, +17153,0,17155,0,0,0,0,17163,17171,0,17174,0,0,0,0,17179,0,0,17182,17185,0,0,0,0, +0,17186,0,0,17188,0,0,0,0,0,0,0,17189,17191,0,17194,0,0,0,0,0,0,0,0,0,17195, +17196,17203,17204,0,0,17205,17217,0,0,0,0,0,17218,0,0,0,0,17219,0,17220,0,17221, +0,0,17230,0,0,0,0,0,17236,0,17238,17239,0,0,0,17241,17244,0,0,17245,0,17248,0,0, +17251,0,17252,0,0,17264,0,17266,0,0,0,17268,0,0,0,0,17271,17272,0,17273,0,17295, +0,17302,0,17305,0,0,0,17306,0,0,0,0,0,0,0,17308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +17309,0,17310,17313,0,0,0,0,17314,17315,0,17317,0,0,0,0,17318,0,0,0,0,0,0,0, +17320,0,0,0,0,0,0,17334,0,17344,17348,0,0,0,17350,17351,0,0,17353,0,0,17354,0,0, +0,0,0,0,0,0,0,17355,0,0,0,0,0,0,17356,17357,0,0,17359,0,0,0,17371,0,17372,0,0,0, +17393,0,0,0,0,17394,0,0,0,0,0,17395,0,0,17399,0,0,0,17401,17417,0,17418,0,17419, +0,0,0,0,0,17422,17423,0,0,0,0,0,17424,0,0,0,0,0,17428,17429,17433,0,0,0,17437,0, +0,17441,0,0,17442,0,0,17453,0,0,0,0,0,0,0,0,17454,17456,17462,0,0,17466,0,0, +17468,0,0,17469,0,0,0,0,17470,0,17475,0,0,0,0,0,17479,0,0,0,17483,17484,0,17485, +0,17486,0,17491,17492,0,0,17493,0,17494,17495,0,0,0,17496,0,0,0,17497,0,0,0, +17502,0,0,0,0,0,17503,0,17505,0,17507,0,0,0,17512,17513,17514,0,0,17515,0,0,0, +17519,0,0,0,17522,0,0,17523,0,0,0,0,0,0,0,0,0,17527,0,0,0,17528,0,0,0,17534,0,0, +0,0,17536,0,0,0,17539,0,17540,17543,17549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17556, +0,0,17558,0,17559,0,0,17560,0,0,0,17563,0,0,0,0,0,0,17564,0,0,17565,17566,0, +17567,0,0,0,0,0,0,17569,17570,0,17575,0,0,0,0,0,0,0,0,0,0,0,17581,0,0,0,17582, +17583,0,17586,0,0,17587,0,0,0,0,0,0,0,17588,0,0,0,0,17596,17597,0,0,17598,17600, +0,0,0,0,0,0,17601,0,0,0,17604,0,0,17605,0,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,17612,0,0,17618,0,17621,17622,0,0,0,0,17623,0,0,17624,0,0,17630,0,0, +17631,17633,17634,0,0,0,0,0,0,0,17635,0,0,17636,0,0,17637,0,17638,0,17640,0,0,0, +0,0,0,0,0,0,0,17641,0,0,0,0,0,0,0,0,0,0,17643,0,0,0,0,17645,0,0,0,0,0,0,0,0, +17646,17662,0,0,0,0,0,0,0,0,0,17663,17664,0,17665,17666,0,0,0,17669,17671,17673, +0,17679,0,0,0,0,0,0,0,17684,0,0,0,17686,0,17714,0,0,17720,17722,17726,0,0,17728, +0,0,17729,0,0,0,17732,0,17733,0,17734,0,0,0,17735,0,0,0,0,17737,0,0,0,0,17739,0, +0,0,17741,17742,0,0,0,0,17743,17744,17745,0,0,0,17749,0,17750,17751,17752,17754, +17761,17762,0,17763,0,17766,0,17772,0,0,0,0,0,17775,0,0,0,0,0,0,0,17776,0,0, +17777,0,0,17778,17779,0,17782,17783,0,0,0,0,0,0,0,0,0,0,17784,0,0,0,0,0,0,0, +17821,0,0,0,17822,0,0,0,17823,17825,0,0,0,0,0,17826,17831,17832,17833,0,0,17845, +0,0,0,17846,0,0,0,17848,17850,17854,0,17855,0,0,17859,0,0,0,0,0,0,17860,17861,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17870,17871,0,0,0,0,0,0,17872,0,0,0,17879,0, +0,0,17881,17883,0,17884,0,17885,0,0,17886,0,0,17887,17891,17953,0,0,0,0,17954,0, +0,17955,0,17968,0,0,17972,0,0,0,0,0,17974,0,0,0,0,17976,17978,0,0,17983,0,0,0,0, +18003,0,0,0,0,0,18007,0,0,0,0,0,18009,0,0,0,0,0,0,0,18010,0,0,0,0,0,0,18012,0,0, +18014,0,0,0,18015,0,0,0,18016,0,18017,0,0,0,18030,0,0,0,0,0,0,0,18031,0,0,18036, +18037,18038,0,0,18049,18056,0,18057,18058,0,18059,0,0,0,0,0,0,0,0,18062,0,0,0,0, +18064,0,0,0,0,0,0,0,0,18067,0,0,0,18068,0,0,18075,0,0,18078,18093,18094,0,0,0,0, +0,0,0,0,18097,0,0,0,0,0,18098,18100,0,0,0,18108,0,18111,0,0,18112,0,18113,0,0, +18115,18116,0,18118,0,0,0,0,18121,0,0,0,0,18123,0,0,0,0,0,0,0,0,0,18124,0,0,0,0, +18125,18126,0,18127,0,0,18128,18135,0,0,0,0,0,0,0,0,0,18150,0,0,0,0,0,18151, +18152,0,0,18156,18164,0,18166,18171,0,0,0,0,0,0,0,0,0,18172,18183,0,18184,0,0,0, +0,18185,0,18187,0,0,0,0,0,18188,0,0,0,0,0,0,0,0,18189,0,0,18190,0,0,18191,18192, +0,0,18194,18195,18196,0,0,0,18197,0,18203,0,18204,0,0,0,0,18205,0,0,0,18207, +18208,0,0,18214,0,0,0,18215,18216,0,0,0,18220,0,0,18222,0,0,0,0,0,18223,0,18225, +18231,0,18234,0,18235,0,0,0,0,18240,0,0,18241,18242,0,0,0,0,0,18243,18251,0, +18253,0,18254,0,0,0,18266,0,0,0,0,0,0,18269,18270,18271,18273,18281,0,0,0,0,0,0, +0,0,0,0,0,0,18282,0,18283,0,18284,0,0,0,0,0,0,18285,0,18287,18289,0,0,18290,0,0, +0,0,18308,0,0,0,18310,0,0,0,0,0,0,0,0,0,0,0,0,18311,0,18312,18313,0,18315,0,0, +18316,18320,0,18331,0,18332,0,18336,0,0,0,0,18337,0,18340,0,0,0,0,0,0,0,0,0, +18341,0,18344,18345,0,18346,0,0,0,0,0,18348,0,18351,0,0,18356,0,0,0,0,0,0,18357, +0,0,0,0,0,18367,0,0,0,18368,0,18369,0,18370,18371,0,0,0,18437,18444,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,18445,18450,0,0,0,0,18451,0,18452,0,0,0,18453,0,0,0,0,0,18455,0, +0,0,18456,0,18457,0,18460,0,0,18461,0,0,0,0,0,0,0,0,18466,0,0,18467,0,0,0,0, +18473,0,0,0,18476,0,18477,0,0,0,18478,18479,18480,0,0,0,18485,0,0,0,18486,0,0,0, +0,0,0,18488,18490,0,0,0,0,0,0,18491,0,0,0,0,0,18495,0,0,18496,0,0,0,0,0,0,18505, +0,18521,0,18522,18523,0,0,0,18525,18526,0,0,0,0,0,18527,0,0,0,0,18532,18533,0, +18534,0,0,0,0,0,0,18535,18537,0,18538,0,0,0,0,0,0,18540,18541,18542,18543,0, +18546,0,0,0,0,18553,18556,0,0,18558,0,0,18569,18571,0,0,0,18572,0,18574,0,0,0,0, +18586,0,0,0,0,0,18588,0,0,18589,0,0,0,0,0,0,18590,0,18592,0,0,0,0,18594,0,0,0, +18596,0,0,18597,18598,0,0,18601,0,0,0,0,18602,0,0,0,18603,18604,0,18605,0,0,0,0, +18608,0,0,18611,0,0,0,0,0,0,0,0,0,18612,0,18616,0,0,18617,18619,0,0,0,18628,0,0, +0,18629,0,0,18630,0,0,0,0,0,0,0,18631,0,18632,0,0,18635,18637,0,0,0,0,0,0,18641, +18643,18648,0,18652,0,0,18653,0,18655,18656,0,0,0,18657,0,0,18666,18674,0,0,0,0, +18677,18684,18685,0,0,18686,0,0,18690,0,0,0,0,0,0,0,18695,18696,0,0,0,0,0,0,0,0, +0,0,18697,0,0,18700,0,0,0,0,0,0,18702,0,18708,0,0,18709,0,18710,0,0,18711,0, +18714,0,0,18718,0,0,0,0,0,0,18719,0,0,18722,0,18726,0,0,0,0,0,0,0,0,0,0,0,0,0, +18731,0,0,0,0,0,18739,18741,0,0,18742,0,18743,18744,18746,18748,0,18752,18753,0, +0,18754,18763,0,18765,0,0,0,18766,0,0,0,18769,0,0,0,0,0,18773,18778,18779,18781, +0,0,18784,18787,0,18788,0,18793,0,0,0,0,0,0,18795,0,0,18800,0,0,0,0,0,18801, +18804,0,0,0,0,0,0,0,18806,0,0,0,18811,18815,18816,0,0,0,0,18825,0,0,18827,18829, +0,0,18830,0,0,0,0,18831,0,0,18832,0,0,0,0,18833,0,18840,0,18841,0,18842,0,0,0,0, +18843,0,18844,0,0,0,0,0,0,18845,18846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +18848,0,0,0,18853,18860,0,0,18862,18866,0,0,18867,18869,0,0,18874,18881,18891,0, +0,0,0,0,0,0,0,0,0,18892,0,0,0,0,0,0,0,0,18895,0,18896,0,0,0,18900,0,0,0,18901,0, +18902,18915,18916,0,0,0,0,0,0,0,0,18919,0,0,0,0,0,18920,0,0,0,18921,18929,0,0,0, +0,18930,0,0,0,0,0,0,18932,0,0,0,0,18934,18942,0,0,0,18951,18957,0,0,0,0,18958,0, +0,0,0,18959,18960,0,0,18961,0,0,18962,0,0,0,0,18963,18964,0,0,0,18965,0,18967,0, +0,0,0,0,0,0,0,0,18968,0,18969,0,18970,18973,18976,0,0,0,0,0,0,18977,0,0,0,18981, +0,0,0,18990,0,18998,0,0,0,0,0,18999,19003,0,0,19005,0,0,0,19006,0,0,0,0,0,0, +19008,19011,0,0,19018,0,0,19019,0,19024,0,19031,19032,0,19039,0,19041,19050,0,0, +0,19051,19055,19056,0,19059,19063,19064,0,0,19088,0,0,0,19093,19094,0,0,0,0, +19095,0,19096,0,0,0,19097,0,0,19098,0,19099,19100,0,0,19103,0,0,0,0,0,0,0,19111, +0,0,0,0,0,0,19112,0,0,0,19116,19117,0,19121,19122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,19123,19124,0,0,0,0,0,0,0,19125,19126,0,19128,0,0,0,0,0,0,0,0,0,0, +19129,19130,19131,19132,0,0,19146,0,0,19147,19156,19158,0,0,0,0,0,0,0,0,19182, +19185,0,0,19187,0,0,0,19193,0,0,0,0,0,19194,0,19197,0,0,0,0,19198,0,0,0,0,0,0,0, +0,0,0,19202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19203,0,19205,19210, +0,0,0,19213,0,19218,0,0,0,19223,19229,0,0,19230,0,0,19231,19232,19233,19239,0,0, +0,0,0,19240,0,19248,19249,0,0,0,0,19254,0,19256,19258,19259,0,0,19261,0,19266,0, +0,0,19272,0,19278,19281,19282,0,0,0,0,0,0,0,0,0,0,0,0,19283,0,0,19284,0,0,19285, +19287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19288,19291,0,19292,0,0,0,0,19297,0,19298,0,0, +0,0,19302,19303,0,0,0,0,19304,19305,0,0,0,0,19314,0,0,19315,0,0,19321,0,0,0,0,0, +0,0,19322,0,19333,0,19334,19335,0,19336,19337,0,0,0,0,0,0,0,0,0,0,0,19346,0,0, +19353,0,19354,19362,0,19366,19367,0,0,19369,0,19375,0,19377,19380,19388,0,0,0,0, +0,19389,19390,0,0,0,0,19392,0,0,0,0,0,19402,0,0,0,0,0,0,0,0,19412,0,0,19413, +19422,0,19424,0,0,0,19425,0,0,0,19428,0,0,0,0,19431,0,0,0,0,0,19432,0,0,0,0,0, +19448,19459,0,0,19461,0,19462,19463,0,19467,19474,19482,0,0,0,0,19494,0,0,0,0, +19501,0,0,0,0,0,0,0,0,0,0,19502,19504,0,0,0,0,0,0,0,19505,0,0,0,0,19506,19507,0, +0,0,19508,0,0,19511,0,0,19514,0,19515,0,19516,0,19518,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,19530,0,19537,19538,0,19543,19546,0,19547,19551,0,0,0,0,0,0,19552, +19553,0,0,0,0,0,0,0,0,0,0,0,0,19555,0,0,19556,0,0,0,0,0,0,0,0,0,0,0,0,19560, +19561,0,0,19562,0,0,0,0,0,0,19565,19567,0,19568,0,0,0,19569,19570,0,19578,0,0,0, +0,19580,0,0,0,0,19581,19584,0,0,0,0,0,0,0,19585,19586,0,0,0,19587,19588,0,19589, +0,0,0,0,0,0,19592,19593,19599,0,19600,0,0,19604,0,0,19605,0,19606,19608,19610,0, +19613,19614,0,0,0,0,0,0,19616,19617,0,0,19618,0,0,19619,0,0,0,19620,19621,19631, +0,0,19632,19634,19636,0,19643,0,0,19644,19658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,19659,0,0,0,0,0,0,0,0,0,0,0,19675,19677,0,0,0,0,19679,0,19683,0,19684,0,0, +0,0,0,0,19687,0,0,0,0,0,0,0,0,19688,19689,19692,0,0,0,0,0,0,0,19695,19697,0,0,0, +0,0,19698,19699,0,0,19700,0,19702,0,0,19703,0,0,0,0,0,0,19704,19708,0,19710,0, +19713,0,0,0,19715,0,0,0,0,19718,0,0,0,0,0,0,0,19720,0,19722,0,0,19725,0,0,0,0,0, +0,0,0,0,0,0,0,0,19730,0,0,0,0,0,19731,0,19734,19735,19739,0,0,19740,0,19741,0,0, +0,19746,0,0,19747,0,19771,0,0,0,0,0,0,0,0,19772,19775,0,0,0,0,0,0,19778,0,0,0,0, +0,19779,0,0,19780,19790,0,19791,0,0,19792,0,0,0,19793,0,0,19796,19797,0,0,0, +19799,0,0,0,19801,0,0,0,0,19803,0,19804,0,19805,0,0,19807,0,0,0,19808,0,0,0,0,0, +0,19809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19816,0,19821,0,19822,19830,19831,0,0, +0,19833,0,0,0,0,0,0,0,0,0,0,19838,0,0,0,0,19839,0,0,19843,0,0,0,0,19845,0,0,0,0, +19847,0,0,19848,0,19849,0,0,0,0,0,0,0,19851,0,0,0,19854,0,0,0,0,0,0,0,0,0,19864, +0,19865,0,19866,0,0,0,0,0,0,0,19868,0,0,19870,0,0,19871,0,0,19872,19873,19875,0, +19880,19882,19884,0,0,19885,19886,19888,0,0,0,0,0,0,0,0,0,0,0,0,19890,19892, +19893,0,0,19894,0,0,0,19895,0,19896,19902,0,0,19903,0,0,19905,0,0,0,19906,0, +19908,0,19909,19911,0,0,0,19913,19920,0,19938,19939,19940,0,0,0,0,0,0,0,19942,0, +19943,0,19945,0,0,0,19951,19952,19954,19960,0,19965,0,19971,0,0,0,0,0,19975,0, +19976,0,19990,0,0,19991,0,19993,0,19995,0,0,0,19998,19999,20001,0,20003,20005,0, +20011,20012,0,0,0,0,0,0,20014,0,20020,0,0,0,0,20021,0,0,0,0,0,20023,20024,0,0,0, +0,0,20025,0,0,20027,0,0,20029,0,0,20032,0,0,0,0,20044,20045,0,20048,20049,0,0, +20050,0,20052,0,0,20054,20057,0,0,0,0,0,0,0,0,0,20059,0,0,20061,0,20062,0,20064, +0,0,20066,0,0,20067,0,0,0,0,20069,0,0,0,0,0,0,20070,20071,0,0,0,0,0,0,0,0,0,0,0, +20072,0,0,20073,20074,0,0,0,0,0,20075,0,20078,0,0,0,0,20080,0,20081,0,0,0,0,0,0, +20095,0,20098,0,0,0,0,0,0,0,20107,0,0,0,0,0,0,0,0,20112,0,0,0,20113,20114,0,0,0, +20115,20123,20124,0,0,0,20131,20133,20134,0,0,0,0,20136,0,0,20137,20138,20150,0, +20152,0,0,0,20153,0,0,20154,0,0,0,20158,0,20163,0,0,20164,0,0,0,0,0,0,0,20166,0, +20168,0,20170,0,20175,0,0,20178,0,0,0,0,20223,0,0,0,0,20224,0,20226,0,0,20230,0, +20231,0,0,0,0,20232,0,0,20233,20234,0,20244,0,20247,0,0,0,0,0,0,20249,0,0,0, +20250,0,0,0,0,20251,0,20253,0,20254,0,0,0,0,20256,0,0,20264,0,0,0,0,20266,0,0,0, +20278,0,0,20279,20282,0,0,0,0,0,20283,0,20284,0,20285,0,20287,20290,0,0,0,0, +20292,0,0,0,0,20293,20297,0,0,0,0,0,0,20299,0,20300,20303,0,0,0,0,0,0,20307,0,0, +20308,0,20309,0,20310,0,0,0,0,0,0,20312,0,0,0,20314,0,0,0,0,20315,20316,0,20322, +0,0,0,0,0,0,20339,0,0,0,20342,0,0,0,0,20352,0,0,0,0,0,0,0,0,0,0,20362,0,0,20365, +0,20375,20377,0,0,0,0,0,0,0,0,0,0,0,20378,20379,0,20380,0,0,20381,0,20382,0, +20383,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20390,20392,20393,0,0,20395,0,0,0,0,0, +20396,0,0,0,0,0,0,0,0,20398,20415,0,0,0,20417,0,0,20420,0,0,20426,20428,0,20431, +0,0,20432,0,20433,20434,20435,0,0,0,0,20440,0,0,0,0,0,20442,0,20443,0,20446,0,0, +0,0,20448,0,20451,0,0,0,0,0,0,0,0,0,20452,20453,0,0,20454,0,0,0,0,0,0,20457,0, +20458,0,0,0,20465,0,0,0,0,0,20469,0,0,0,20473,0,20476,0,0,0,0,0,0,0,0,20477,0,0, +20485,0,0,20486,0,0,20487,0,20496,0,20497,0,0,20498,0,0,0,0,0,0,0,0,0,0,20499, +20500,0,20501,0,0,0,0,0,20520,20527,0,20529,0,0,0,0,20539,0,0,20540,0,0,0,20543, +0,0,0,20546,0,0,0,0,0,20548,0,0,20563,0,0,20564,0,20566,0,0,0,0,0,20589,0,0,0,0, +20590,0,0,20593,20594,0,0,0,0,20595,0,20597,20598,0,0,0,20618,20620,0,0,0,0, +20621,0,0,0,0,20627,0,0,0,0,0,20628,0,0,0,20629,0,20630,0,0,20639,0,0,0,0,0, +20707,0,0,20709,0,0,0,20713,20714,0,0,0,0,0,20724,20725,0,0,0,0,20726,20728, +20729,0,20733,0,20734,0,20735,20736,0,20737,0,0,20744,0,20745,0,20748,0,0,20749, +0,0,0,0,0,0,0,0,20750,0,0,0,0,20754,0,0,0,20761,0,0,20763,0,0,0,0,0,0,0,20766,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,20767,0,0,0,0,20768,0,20769,20777,0,0,0,0,0,0,20785,0, +0,0,20786,20795,20801,0,20802,0,20807,0,0,20808,0,0,20810,0,0,20811,0,20812,0,0, +0,0,0,20813,0,0,20818,20820,20821,0,0,0,20822,0,20823,0,0,0,20826,0,0,0,0,0,0,0, +20829,20830,20831,0,20832,20836,0,0,20839,0,0,20840,20842,0,20843,0,20844,0, +20854,0,0,0,20855,0,0,0,0,20856,0,0,0,20869,0,0,20871,0,0,0,0,0,0,0,20873,0,0,0, +0,0,20876,0,0,0,0,0,20880,0,0,20882,0,0,0,0,20883,20884,0,0,20890,0,0,0,0,0,0,0, +0,0,20891,0,0,0,0,0,20905,0,20906,20910,0,0,20912,20915,0,0,0,0,0,20916,0,20917, +0,20919,20920,20922,0,20927,0,20928,20929,20930,0,0,20935,0,0,20939,0,0,20941,0, +0,0,20943,0,0,0,20946,20947,0,0,0,0,0,20950,0,20954,0,0,20955,20964,0,0,20967,0, +0,0,0,0,20973,20975,0,0,0,20984,0,20987,20988,0,0,0,0,0,20989,0,0,0,20995,0, +20998,0,20999,0,0,0,0,21000,21001,0,0,0,0,21008,0,21010,0,21016,0,0,0,21017, +21018,0,0,0,0,0,21021,21026,21027,21028,0,0,21029,0,0,0,0,0,21030,0,0,0,0,0,0,0, +0,0,0,0,0,0,21031,21032,0,0,0,0,0,21037,0,0,21038,0,0,0,0,0,0,0,0,0,21039,0, +21041,0,21046,21047,0,0,0,21049,21053,0,0,21057,21064,21065,0,0,21066,21067,0,0, +0,21069,0,0,0,21071,21072,0,0,21073,0,21074,0,0,21078,0,0,0,0,21079,0,0,21080, +21081,0,0,21086,21087,0,21089,0,0,0,0,0,0,0,21091,0,21093,0,21094,0,0,0,0,0,0,0, +0,21095,0,0,0,0,0,21096,0,21098,0,0,0,0,0,0,0,21099,0,0,21100,21101,21102,0,0,0, +0,0,21103,0,21104,0,0,0,0,0,21105,21108,21109,0,0,21112,21113,0,0,0,0,0,0,21115, +21122,21123,0,0,0,0,0,21125,0,0,0,0,0,0,0,0,21129,21131,0,0,21134,0,0,0,21137, +21142,0,21143,0,0,21144,0,21145,21146,0,21152,21154,21155,21156,0,0,0,21160,0,0, +0,0,0,0,21161,0,21164,0,21166,0,0,0,0,21170,0,0,0,0,21171,0,0,21172,0,21174,0, +21175,0,0,0,0,0,21176,21179,21188,0,0,0,21189,0,0,21190,0,0,0,21192,0,0,21193,0, +0,0,21198,0,21212,0,0,21213,0,0,0,0,0,0,21215,21216,0,0,21223,21225,0,21226,0,0, +0,0,21227,21228,0,0,21229,0,0,0,0,21230,21236,0,0,0,0,0,0,0,0,0,0,0,0,0,21237,0, +0,21238,21239,0,0,0,0,21256,0,0,0,0,0,21257,0,0,0,0,0,0,0,21259,0,0,0,21263,0, +21272,0,21274,0,21282,0,0,0,0,0,0,0,0,21283,0,0,0,0,0,0,0,0,21294,0,0,21297,0,0, +0,0,21298,0,0,0,21299,0,21300,21302,0,21316,0,21318,21322,21323,0,21324,0,21326, +0,0,0,21327,21328,0,0,0,21352,0,0,21354,21361,0,0,0,0,0,0,0,0,0,0,0,0,0,21362,0, +0,0,21363,0,0,0,0,0,0,0,0,0,21366,0,0,21367,21372,21374,0,0,0,21375,21377,0, +21378,0,0,0,21380,0,0,0,0,0,0,0,0,0,0,21381,0,0,0,0,0,0,21382,0,21383,0,0,21384, +0,0,21385,0,0,0,0,21389,21390,0,0,0,0,0,0,0,0,0,0,0,0,0,21397,21398,0,0,0,0,0,0, +0,0,0,0,21399,0,21400,0,0,0,0,21402,0,0,0,21403,21404,0,21405,21406,0,0,0,21407, +0,0,0,0,0,0,0,0,0,0,0,0,21408,0,0,0,0,21409,0,21421,0,21422,0,0,0,21425,21428,0, +0,0,0,21429,0,0,0,0,0,21433,0,0,0,0,0,0,0,0,0,0,21434,0,21443,0,21444,21449,0, +21452,0,21453,21454,0,0,0,21457,0,0,21458,0,0,0,21460,21461,0,0,21464,0,0,0, +21473,21478,0,0,21479,0,0,21481,21483,0,0,0,0,0,0,0,0,21484,0,0,21485,21486,0,0, +21488,0,0,0,0,0,0,21523,0,0,21525,0,0,0,0,0,0,0,21526,0,0,0,0,0,0,21529,21530,0, +0,21531,0,0,21533,0,0,21539,21564,0,21567,0,0,0,0,0,0,0,0,21575,0,0,0,0,21577,0, +0,0,0,0,21591,0,0,21604,0,0,0,0,0,0,0,0,0,21605,0,21606,0,0,21617,21618,21619, +21620,0,0,0,0,0,0,0,0,0,0,0,0,0,21623,0,0,0,0,21631,0,21635,0,0,0,0,21639,21646, +21653,21662,0,0,21663,21664,0,21666,0,0,21667,0,21670,21672,21673,0,21674,21683, +0,0,0,0,0,21684,0,21694,0,0,0,0,21695,21700,0,21703,0,21704,0,0,21709,0,0,0, +21710,0,0,0,0,0,0,0,0,21711,0,0,0,21712,0,21717,0,21730,0,0,0,21731,21733,0,0,0, +0,21737,21741,21742,0,21747,0,0,0,21749,0,0,0,0,0,0,0,0,0,0,0,0,0,21750,0,0,0,0, +0,21752,0,0,0,0,21753,0,0,0,0,0,0,21755,21756,0,21757,0,0,0,0,0,0,21760,0,0, +21763,0,0,0,0,0,0,0,0,0,21764,0,0,21766,0,0,21767,0,0,0,0,0,0,0,0,0,21773,0, +21774,0,0,21775,0,0,0,0,21776,0,0,21777,0,0,0,0,0,0,0,0,0,21780,21787,21788, +21791,0,0,0,21797,0,0,0,0,0,21805,0,0,0,0,21806,0,21807,21809,0,21810,21811,0, +21817,21819,21820,0,21823,0,21824,0,0,21825,0,0,21826,21832,0,0,0,0,0,21833, +21848,21849,0,0,21867,21870,21871,21873,0,0,0,21874,0,0,0,0,0,0,0,0,0,21875,0, +21878,0,0,0,21879,0,21881,21886,0,0,0,0,21887,0,0,21888,21894,21895,21897,0, +21901,0,21904,0,0,21906,0,0,0,21909,21910,21911,0,0,21912,0,0,21913,21914,21915, +0,21919,0,0,0,0,0,0,0,21921,0,0,21922,21933,21939,0,0,0,0,0,0,0,0,0,0,0,21944,0, +0,0,0,0,21945,0,21947,0,0,0,0,0,0,0,0,0,0,21949,0,0,0,21950,0,0,0,0,0,0,0,0,0,0, +0,0,0,21951,0,21952,0,0,0,0,0,0,0,0,0,21954,21957,0,0,0,0,21958,0,21959,0,0,0,0, +0,0,21962,21963,0,0,0,0,0,0,0,0,21964,21965,0,0,21969,21970,0,0,0,21974,0,0, +21980,21981,0,21982,0,0,0,0,0,21985,0,21988,0,21992,0,21999,0,0,0,0,0,0,22001,0, +22002,0,0,0,0,0,0,22003,0,0,0,0,0,22004,0,0,0,22008,0,22009,22015,0,0,22016,0,0, +0,22017,22019,0,0,0,0,0,0,0,0,0,22020,0,0,0,0,0,0,0,0,0,0,22021,22037,0,22039,0, +0,0,22040,0,0,0,22048,22049,0,0,22053,22055,22056,22059,0,0,22060,22061,0,0, +22064,0,0,0,0,22066,0,0,0,0,0,0,0,22073,0,0,0,22074,22075,0,0,0,0,0,0,0,22076,0, +0,0,0,22077,22084,22099,0,0,0,0,0,0,0,22104,0,0,22107,0,22108,0,22109,0,22110,0, +0,0,0,0,0,0,22111,22119,0,22120,22122,0,0,0,0,22125,0,0,0,22128,22129,0,0,0,0,0, +0,22141,0,0,0,22142,0,0,22144,22146,0,22148,22149,22151,22154,0,0,0,22162,0,0,0, +0,22164,22177,0,0,0,0,22179,0,22182,22183,0,0,22184,22188,0,0,0,0,0,0,0,0,22190, +0,22194,22201,0,0,22208,0,22209,0,22212,0,0,22215,0,22223,22231,0,0,22232,0, +22234,0,0,22235,22236,0,22237,0,22240,0,0,0,0,0,22241,0,0,0,22242,22246,22247,0, +0,0,22259,22268,0,22269,0,0,0,0,0,0,0,22270,0,0,0,0,22271,0,22272,0,22277,0,0,0, +0,0,22278,22280,22283,22286,0,0,22287,22289,0,0,22290,0,22293,0,0,0,0,0,0,0,0,0, +0,22295,0,22301,22302,0,0,0,22305,0,22308,0,0,0,0,0,0,0,0,0,0,22315,0,0,0,22317, +0,22334,0,0,0,22335,0,0,0,0,0,22336,0,22338,22344,0,22347,22349,0,22350,0,0,0,0, +0,0,0,22357,0,0,0,0,0,22358,0,0,0,0,0,0,0,0,0,0,22359,22360,0,0,0,0,0,0,0,0, +22361,22366,0,0,22369,0,22370,22373,0,0,0,0,0,22375,0,22377,0,0,0,0,0,22378,0,0, +0,0,22381,0,0,0,0,22382,0,22383,0,0,0,0,0,0,0,0,0,22391,0,0,22392,22395,22396, +22402,0,0,0,0,0,0,0,0,0,0,0,0,0,22405,0,0,22406,0,0,22408,0,0,22409,22410,0,0,0, +0,0,0,22424,0,0,0,0,22426,0,0,0,22427,0,22428,0,22432,0,22435,22442,22443,0,0,0, +0,22444,0,0,0,0,0,22446,0,22454,0,22455,0,0,0,22465,0,22470,0,22471,0,0,0,0, +22472,22473,0,22487,0,0,0,22488,0,0,0,0,22489,0,0,22499,0,0,0,0,0,0,22514,0,0, +22515,0,0,0,0,0,0,0,22516,0,0,0,22517,22520,0,0,0,22534,0,0,22535,0,0,22536,0, +22540,22553,0,22555,0,0,0,0,22561,0,0,22562,0,0,0,0,0,0,0,0,0,0,0,22566,0,0,0,0, +22567,22568,0,0,22575,0,22579,0,22582,22583,22585,0,0,0,0,0,22586,0,0,22587,0,0, +22590,0,0,0,0,0,22591,0,22592,0,0,0,0,0,22593,0,22602,0,0,22604,0,0,22609,0,0, +22618,0,0,0,0,0,0,22619,0,22624,22625,0,0,22638,0,0,0,0,0,22639,0,0,22640,0,0,0, +0,0,0,0,22644,0,22645,22647,0,0,0,0,22652,22653,0,0,0,22654,0,22655,0,0,0,22656, +0,0,0,0,0,0,0,0,0,0,22673,22675,22676,0,0,22678,22679,0,22691,0,0,0,0,0,0,0, +22693,0,0,22696,0,22699,22707,22708,0,0,0,0,0,0,0,0,22718,0,22719,0,0,0,0,22723, +0,0,0,22724,22725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22726,22728,0,0,0,0,0,0,0,0,22729, +0,0,22731,0,0,0,0,22732,22735,22736,0,0,0,0,22739,0,22749,0,0,22751,0,0,0,0,0,0, +0,0,0,0,0,22758,0,0,0,0,0,22760,0,0,0,0,0,22764,22765,22766,0,22768,0,0,0,0,0, +22769,22770,0,0,0,0,0,0,22771,0,0,22772,22775,0,22776,22777,22780,0,0,22782, +22784,0,22787,0,22789,22796,0,0,0,0,0,22798,0,0,0,0,0,0,22802,0,22803,22804,0,0, +0,0,0,0,0,0,0,0,22805,0,0,22810,22811,22814,22816,0,22825,22826,0,22831,22833,0, +0,0,0,0,0,0,0,0,22834,0,22836,22838,0,22839,0,0,0,0,0,22840,0,22847,0,0,0,0,0, +22856,22857,0,22858,22859,0,0,22862,0,0,22864,0,0,0,0,22865,0,0,0,0,0,0,0,0,0,0, +0,22866,0,22867,22868,0,0,0,0,22869,0,22871,0,22872,0,22873,22881,22882,22884, +22885,0,0,0,0,0,0,0,22886,22887,0,22894,0,22895,0,0,0,22900,0,22901,0,0,0,0, +22904,0,0,0,0,22905,22907,0,0,0,22915,22917,0,0,22918,0,0,0,22920,0,0,0,22929, +22930,0,0,0,22941,22942,0,0,0,22943,0,0,0,22944,0,0,0,0,0,0,0,22946,0,22947,0,0, +22954,0,22956,0,0,22962,0,0,0,0,0,0,0,22963,0,0,22964,0,0,0,0,0,0,0,22965,0, +22968,0,0,0,22969,0,0,0,0,0,22970,0,22971,0,0,0,0,0,22978,0,0,22979,0,22987,0,0, +22989,0,0,0,0,0,0,22990,0,23005,0,0,0,0,0,0,0,23006,23007,23008,0,0,23023,23024, +23029,0,0,0,0,23030,0,0,0,0,0,23032,0,0,0,0,0,23035,0,0,0,0,23038,0,0,0,23048,0, +23049,23052,23053,23060,23061,0,23063,0,0,0,0,23067,23068,0,0,0,23069,23073,0,0, +0,23127,0,23128,0,0,0,0,0,23129,0,23138,23141,0,23149,0,0,23150,0,0,0,23152,0,0, +0,0,0,0,0,0,23154,0,0,0,0,23157,23159,23160,0,0,0,0,0,0,0,0,0,0,0,0,23180,0,0,0, +0,23181,0,0,23188,0,23189,0,0,0,0,0,0,0,0,0,0,0,0,23195,0,0,23196,23199,0,0,0,0, +0,0,0,0,0,23202,0,23204,0,23207,0,23209,23210,0,0,0,0,0,0,23227,23229,0,0,23230, +23234,23238,0,0,0,23245,23246,23248,0,0,0,0,23249,23254,0,0,0,23265,0,0,0,0,0,0, +0,23268,0,23276,0,0,0,0,23277,0,23297,0,23298,0,0,0,0,23299,0,23302,0,0,23303, +23312,0,0,23314,0,23320,0,0,0,0,23324,0,23325,0,23328,0,23334,0,0,0,23337,0,0,0, +0,23343,23344,23346,0,23348,0,0,0,0,0,0,0,0,23353,0,0,0,0,23355,0,23356,23358,0, +0,0,23359,23360,0,23361,0,23367,0,23369,0,0,23373,0,23378,23379,0,23382,23383,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,23387,0,0,0,0,0,0,23388,23390,0,0,23393,23398,0,0,0, +23399,0,0,0,23400,0,0,0,0,23401,0,0,0,23415,0,0,0,0,0,0,0,0,23416,0,23422,0, +23443,23444,0,0,0,0,23448,0,23454,0,0,0,0,0,0,23456,0,0,23458,23464,0,0,0,0,0,0, +23465,0,0,0,23470,23471,0,0,23472,0,0,0,23473,23496,0,0,0,0,0,0,0,0,23497,0, +23499,0,0,23502,0,0,23503,0,0,23513,0,0,23515,0,0,0,23517,0,0,0,0,23518,23519, +23521,23524,0,23525,23528,23539,0,0,0,0,0,23541,0,0,23544,0,0,23556,0,0,23557,0, +0,0,0,0,0,0,0,0,0,0,0,0,23559,0,23560,0,0,23561,0,0,23566,0,0,0,0,0,23568,23569, +23570,0,0,0,0,23571,0,23574,0,0,0,0,0,0,0,0,0,0,0,23575,0,23579,0,0,23581,0,0,0, +0,0,0,23587,0,0,0,0,0,0,0,23596,23598,0,0,0,0,23602,23606,0,0,23607,0,23608,0,0, +0,23614,23616,0,0,0,0,0,23618,0,0,23619,0,0,0,0,23621,23626,0,23627,0,0,0,0,0,0, +0,23629,0,23630,0,0,0,0,23634,0,23636,0,0,0,0,0,0,23638,0,0,0,0,23640,23667,0, +23669,0,0,0,23681,0,0,0,0,0,0,0,23682,0,23683,0,0,0,0,0,23684,0,0,0,23685,23689, +0,23693,23694,23700,0,23702,0,23709,0,0,0,0,0,0,0,23712,0,0,0,0,0,23714,0,0, +23715,0,0,0,0,23718,0,0,23720,0,0,0,0,23722,0,0,0,23726,23729,0,23741,23746,0, +23748,0,0,0,0,23749,0,0,0,0,0,23750,0,0,0,0,23751,0,23753,0,0,0,0,23757,23765,0, +0,0,23770,0,0,0,0,0,0,0,23771,0,23772,23781,0,0,23796,0,0,0,0,23798,0,23799,0,0, +0,23802,0,0,23806,0,23807,0,0,23808,0,23809,0,23819,0,0,0,23821,0,23827,0,0,0, +23829,0,0,0,0,0,0,0,23830,0,0,0,0,0,0,23832,23833,23834,23835,0,0,0,0,23837, +23838,0,0,0,0,0,23846,0,0,0,0,0,0,23847,0,0,0,0,0,23879,23881,0,0,23882,23883, +23895,0,23899,0,0,0,0,23901,0,0,0,0,0,0,23902,0,0,0,0,0,23903,23905,0,23906,0, +23907,23918,23919,23920,0,23922,0,23924,0,23927,0,23934,0,23937,23941,0,23942, +23946,0,0,0,0,0,23955,23956,23958,0,0,0,0,0,0,23959,0,23962,23965,0,23966,0,0,0, +0,23967,23968,0,0,23973,0,0,23974,0,0,0,0,23975,0,23976,0,0,0,0,0,0,0,0,0,0,0,0, +0,23977,0,0,0,0,0,0,0,0,23980,0,0,23984,0,23985,0,0,23987,0,0,23988,23990,23991, +0,0,0,0,0,0,23992,0,0,0,0,0,0,0,0,23994,0,0,0,23998,0,0,0,0,0,0,0,0,0,23999,0,0, +24003,0,24004,0,24006,0,0,0,24007,0,0,24008,0,0,0,0,0,0,0,24009,0,0,24010,0,0, +24011,0,0,24013,24014,0,0,24015,24016,24027,0,24028,24029,0,24030,0,0,0,0,0, +24033,24034,0,24035,0,0,24036,0,0,24044,0,24048,24049,24063,24067,0,24068,24070, +0,0,24071,24078,24087,0,24090,0,0,0,24095,0,24098,24101,24104,24106,0,24107,0,0, +0,24108,0,0,0,0,24110,24111,0,24113,0,0,24115,24120,0,0,0,0,0,0,24124,0,24125,0, +24126,0,24127,0,0,0,0,0,24135,0,0,24136,0,24137,24142,0,0,0,24146,0,0,24147, +24149,24154,0,24163,0,0,0,24165,24166,24167,0,0,0,0,0,0,0,0,0,0,24169,24170, +24175,0,0,0,24178,0,0,24179,0,0,24181,0,24184,24197,0,24201,24204,0,0,0,0,0,0, +24206,24212,24220,0,0,0,24224,0,0,0,0,0,0,0,0,24226,0,24234,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,24235,0,24236,0,0,0,0,0,24239,24240,24241,0,0,24248,0,0,24249,0, +24251,0,0,0,0,0,0,24253,0,24268,0,0,0,24269,0,24271,24272,0,0,0,0,24273,0,0, +24274,0,0,24279,0,0,0,0,0,0,0,24280,0,24293,24294,0,0,0,0,0,0,24296,0,0,24323,0, +0,0,24329,24330,24331,24339,0,24351,0,0,24369,24370,0,0,0,24371,0,0,0,0,24372, +24373,24374,0,0,0,0,0,24378,0,0,0,0,24379,0,24381,0,24383,24389,0,24390,0,0, +24394,24395,24400,0,0,0,24401,24402,0,24406,0,0,0,24411,0,0,0,24415,0,24416,0,0, +0,0,0,24417,0,24419,0,24422,0,24423,24428,0,24435,0,0,0,24439,0,0,0,24440,24442, +24446,0,0,0,24447,24448,24449,24452,0,0,0,0,24453,24457,0,0,24458,24459,24460,0, +24465,0,0,0,0,0,0,0,24470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24471,0,24473, +24474,24475,24476,0,24478,0,0,0,0,24480,0,0,0,0,0,0,0,0,0,0,24481,0,0,0,0,0,0,0, +0,0,0,24482,24485,0,0,0,0,24486,0,0,0,24488,0,0,0,24494,0,0,0,0,24497,0,0,24498, +0,0,0,24499,24506,0,0,0,24507,0,0,24511,0,0,24513,24514,0,0,0,0,0,24517,0,24518, +0,24520,0,24521,24524,24525,0,0,0,0,0,24527,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24528,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24537,24539,0,24540,0,0,0,24548,0,0,0,0,0,24549, +24550,0,0,0,24553,24554,0,24555,0,24556,0,24558,0,0,0,0,0,24560,0,0,0,24561,0,0, +0,0,0,24562,0,0,0,0,0,0,0,0,0,0,0,0,0,24567,0,0,0,0,0,24569,0,0,0,24574,0,24575, +0,0,0,0,0,0,0,0,0,0,0,24577,24581,0,24584,0,0,0,0,0,24585,0,0,0,0,0,24586,0,0, +24587,0,24588,0,0,0,0,0,0,0,0,0,0,24590,24591,0,0,0,0,24592,0,0,0,0,0,0,0,24594, +0,0,0,0,0,0,0,24596,24597,0,0,0,0,24602,24603,0,0,0,0,24604,0,0,24605,0,24610,0, +0,24611,0,0,0,0,24612,24615,24616,24624,0,0,0,24627,0,24638,24639,0,0,0,0,24640, +0,0,0,24655,24656,24657,0,0,0,0,0,0,0,0,24662,0,24663,24664,0,0,0,0,0,24665,0,0, +0,0,24667,0,0,0,0,0,0,24668,24669,0,24670,24674,0,0,0,24675,0,24678,0,0,24679,0, +0,0,24681,0,24683,0,0,0,0,24684,0,24685,0,0,24686,0,0,24688,24689,0,0,0,0,24690, +24691,0,0,0,0,0,0,0,24697,0,24698,0,0,0,0,0,0,0,0,24709,0,0,0,0,0,24710,0,24712, +0,0,0,0,0,0,24713,24714,0,24715,0,24716,24718,0,24719,0,0,0,0,24720,0,0,24725,0, +0,24738,0,24749,24750,0,0,0,24752,0,0,0,24753,0,0,0,24758,0,0,0,0,0,24762,0, +24763,0,0,0,0,0,0,0,24764,0,0,0,0,0,24765,24767,24768,0,24772,0,0,0,0,24773,0,0, +0,0,24777,0,0,0,0,0,24785,0,24786,24788,0,0,0,24789,0,0,0,0,24794,24798,0,24799, +24800,0,0,0,24803,0,24804,24806,0,24807,0,0,0,24810,0,0,0,0,0,0,24827,24828,0, +24835,0,0,0,0,0,0,24836,0,0,0,0,0,24839,0,24843,24844,0,0,0,0,0,0,0,0,0,0,24847, +0,0,24848,0,0,0,0,0,0,24849,0,24850,24851,0,0,0,24852,0,24853,0,0,0,0,0,0,0,0,0, +24854,0,24855,0,0,24868,0,0,0,24883,0,0,0,24884,0,24895,24897,0,0,0,0,0,24899,0, +0,0,0,0,24900,0,24913,0,0,0,0,0,0,24914,0,0,24917,24930,24931,0,0,0,24932,0,0, +24939,0,0,24942,0,0,0,0,0,0,0,0,0,24945,24950,0,24951,0,0,24953,0,0,0,24954,0, +24959,0,0,0,24961,0,0,24962,0,24964,24968,24970,24972,0,0,0,0,0,24976,0,0,0, +24977,0,24982,0,0,24983,0,0,24984,0,0,0,24993,0,0,0,24994,0,0,25001,0,0,0,25003, +0,0,25018,0,0,25023,0,0,0,25034,0,0,25035,25036,0,25037,0,0,0,0,0,0,0,25039,0,0, +0,0,0,25040,0,0,0,0,0,0,0,25042,0,0,25043,25045,0,0,0,0,0,0,25049,0,0,25051,0, +25052,25053,0,0,25054,0,0,0,25055,0,0,0,0,25057,25059,0,0,25060,25064,0,25065, +25069,25070,0,0,0,0,25072,0,25073,0,25090,0,0,25092,25093,25101,0,0,0,0,0,0, +25105,25108,0,0,25113,0,0,25115,25116,0,0,0,0,0,0,25117,0,0,0,25120,25121,0,0,0, +0,0,0,0,25125,0,0,0,25126,0,25130,25134,0,25139,0,25143,0,0,0,25151,0,25161,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,0,0,0,0,0,0,0,25174,0,25175,0,25207,0,0, +0,25209,0,0,0,0,25213,0,25219,0,25223,0,25225,0,0,0,25227,0,0,0,25228,0,0,0, +25229,0,0,0,0,0,0,0,25231,25233,0,0,0,0,25237,25239,0,0,0,25243,0,0,0,25252,0, +25257,25258,0,0,0,0,25260,25265,0,25268,0,0,25273,25324,0,25325,0,25326,0,0,0,0, +0,0,0,0,25327,0,0,0,0,0,25328,0,0,0,0,0,0,25332,0,0,0,25333,0,0,0,25336,25337, +25338,0,0,25343,0,25350,0,0,0,0,0,0,0,25352,0,25354,0,25375,0,25379,0,0,0,0, +25384,0,0,0,0,0,0,0,0,0,25386,0,25388,0,25390,0,0,25399,0,0,25401,0,0,0,25402,0, +0,0,25407,0,0,0,0,0,0,0,0,0,0,0,25413,25415,0,0,25417,0,0,0,0,0,0,0,25419,0,0,0, +25421,0,0,0,25424,0,0,0,0,25433,0,0,0,0,0,0,0,0,0,25435,0,0,0,0,0,0,25436,0,0,0, +25437,0,0,25440,0,0,0,0,0,0,25442,0,0,25443,0,25446,0,0,25449,0,0,0,25450,0,0,0, +0,25452,0,25453,25454,25455,0,0,0,25456,0,25457,0,0,0,25459,0,25461,0,25468,0,0, +0,0,0,0,0,0,25469,0,0,0,0,0,25471,0,0,0,0,0,25474,0,0,0,0,0,0,0,0,25475,0,0,0,0, +25477,0,0,0,0,25483,0,0,0,0,0,25484,0,0,0,0,0,0,0,0,0,0,0,0,25485,0,25497,0,0, +25498,0,25504,0,25510,0,25512,0,0,25513,25514,0,0,0,0,0,0,25517,25518,25519,0, +25520,0,0,0,0,0,0,0,25521,0,25522,25527,25534,0,25536,0,25537,0,0,25548,25550,0, +0,25551,0,25552,0,0,0,0,0,25554,0,25555,0,25556,25557,25568,0,0,0,25570,25571,0, +0,0,0,0,0,25574,0,0,0,0,25579,0,0,0,25581,0,0,0,25582,0,0,0,0,0,0,0,0,0,25588,0, +0,0,0,25589,0,0,0,0,25590,0,25591,25592,25593,0,25594,0,0,0,25596,0,25597,25615, +0,0,0,0,0,25618,0,0,0,0,25619,25623,0,0,25629,0,0,25631,0,0,0,25635,25636,0,0, +25649,0,0,0,0,25654,0,0,0,25661,25663,0,0,25671,0,0,25678,25698,0,25699,25702, +25703,0,0,0,0,0,0,0,0,25704,0,0,0,0,0,25706,0,0,25710,0,25711,0,25712,0,25715, +25716,25717,0,0,25718,25728,25732,0,0,0,25734,0,0,0,0,0,0,0,0,0,25737,0,0,25739, +0,0,0,25740,0,25741,25745,0,25746,0,25748,25772,25778,0,0,0,0,0,25780,0,0,0,0, +25781,0,25782,25784,25785,0,0,0,25789,0,0,0,0,0,0,25797,25801,0,0,0,25808,25809, +0,0,25811,25814,25815,0,0,25817,0,0,0,0,0,0,0,0,25820,0,0,0,0,25832,25833,0,0,0, +25846,0,0,0,25847,25848,0,0,0,0,0,0,0,0,0,25849,25850,0,0,25851,0,0,25852,0, +25862,0,0,0,25863,25865,0,0,0,0,0,0,0,25867,25868,0,25869,25874,0,25875,0,25876, +25877,0,0,0,0,25878,25902,0,0,0,0,0,0,0,25903,25904,25905,0,0,0,25908,25909,0,0, +0,0,25910,0,0,0,0,0,0,0,25912,0,25913,0,0,0,0,0,0,0,0,25914,0,0,25916,0,0,0,0,0, +25917,25927,0,0,0,0,25928,0,0,25930,0,0,0,25933,0,0,25938,25942,0,0,0,0,0,0,0, +25945,0,25950,0,25956,0,0,25961,25962,0,0,25963,0,25964,25965,25966,0,0,0,0,0, +25967,0,0,0,0,25968,0,0,0,25969,25971,0,0,0,0,0,25973,25975,0,0,0,0,0,0,0,25978, +0,25981,0,0,0,25982,0,0,0,25984,0,0,0,0,0,0,0,25993,0,0,0,0,0,0,0,0,0,0,0,0,0, +26002,0,0,0,26005,0,0,0,26006,26007,0,0,26014,26015,26016,0,0,0,0,0,0,26017, +26018,26020,0,26022,26023,0,0,0,26024,26028,0,26029,26033,26034,26044,0,0,0,0,0, +26046,0,0,26047,0,0,26049,0,26050,0,26051,0,0,0,0,0,26053,0,0,0,0,26054,26059,0, +0,0,0,0,0,26060,0,26066,0,0,0,0,0,0,0,0,0,0,0,0,26067,0,26069,0,0,26071,0,0,0, +26073,0,26074,26077,0,0,0,0,26078,0,0,0,26079,0,26090,0,0,26094,0,0,0,0,0,0,0,0, +26095,0,0,0,0,0,0,0,0,0,0,0,26096,26101,0,26107,26122,0,26124,0,0,26125,0,0,0,0, +0,0,26136,26141,26155,0,0,0,0,0,0,0,0,0,26164,26166,0,0,0,26167,0,26170,26171,0, +0,26172,0,0,26174,0,0,0,0,0,0,0,0,0,0,0,0,0,26175,0,0,0,26176,26177,0,26321, +26322,0,26323,0,0,26324,0,0,0,0,0,0,0,26325,0,26331,0,0,0,0,0,0,26335,0,0,0, +26350,0,0,0,26379,0,0,26382,26383,26385,0,0,26392,26406,0,0,0,0,26411,0,0,0,0,0, +26412,0,0,26420,0,0,26423,0,26424,26426,26432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26435,0,26436,0,0,0,0,0,26441,0,26444,0,0,0,26446,0,0,0,0,26447,0,0,0,0,26449,0, +26450,26452,0,26453,26454,0,0,0,26455,0,0,0,26456,0,0,26458,0,0,26460,0,26463,0, +0,0,0,0,0,0,0,26464,26470,0,0,0,0,0,0,0,0,0,26473,0,0,26474,0,0,0,0,0,0,0,26475, +0,0,0,0,0,0,0,26477,0,26485,0,0,26486,0,26487,0,0,26488,26493,26494,0,0,26495,0, +26497,26504,26506,0,0,0,0,0,26507,0,0,0,0,0,26509,0,0,26510,0,0,0,0,0,0,0,0,0,0, +0,0,0,26512,0,26513,26515,0,0,0,26518,0,0,0,26519,0,26524,26526,0,0,0,26527,0, +26532,0,26533,26537,26558,0,0,0,26559,0,0,0,26571,0,0,26573,0,26588,0,26593,0,0, +0,0,0,0,26603,0,26604,0,0,0,0,0,0,0,0,0,0,26606,0,0,0,0,0,0,0,26607,26609,26611, +26614,0,0,0,26616,26620,0,26621,0,0,0,0,0,26627,0,26629,0,0,26630,0,0,26632, +26643,0,0,0,26644,0,0,0,0,0,0,0,0,0,26646,26647,0,0,0,26650,0,0,26656,0,0,0,0, +26663,26670,26671,0,0,0,26685,26686,26687,0,26689,0,0,0,0,26744,0,26745,0,26747, +26748,0,26749,26750,26751,0,0,0,0,26752,26755,0,0,0,26756,26769,0,0,0,26774,0,0, +0,0,0,26775,0,26777,26778,0,26786,0,0,0,26787,0,0,0,0,0,0,0,0,0,0,0,0,0,26788,0, +0,26789,0,0,0,0,0,26791,0,26792,26793,0,0,0,26794,0,26797,26798,0,0,0,26800,0,0, +26803,0,26804,0,0,0,0,0,0,0,0,0,26805,0,0,26808,0,0,26809,0,0,0,0,0,0,0,26812,0, +26825,0,0,0,0,0,0,0,26826,0,0,26827,26829,26834,0,0,0,0,26835,0,0,26849,0,26851, +0,0,0,0,0,0,0,0,0,26852,0,26853,26857,0,26858,0,26859,0,0,0,0,0,0,0,26876,0, +26878,26882,26883,0,0,0,0,26890,26894,0,0,0,0,26895,26896,0,0,0,0,0,26900,0,0,0, +0,0,0,0,26911,26913,26914,26915,26916,26919,0,0,0,26921,26922,0,0,26925,0,0,0, +26928,0,0,26929,26930,0,0,0,26931,0,26932,0,0,0,0,0,26933,0,0,0,0,0,0,26937,0,0, +26943,0,0,26944,0,0,0,26946,0,0,0,0,0,0,0,26956,0,26958,0,0,26963,0,0,0,0,0,0,0, +26965,0,26969,26970,26972,0,0,0,0,0,26973,0,26974,0,26978,0,26980,0,0,0,0,0,0, +26982,0,26986,26987,0,26990,0,0,0,0,27003,27006,0,0,27007,27010,27012,27013,0,0, +0,0,0,0,0,0,27014,27015,27018,0,27019,0,0,0,0,0,27025,0,0,0,27026,0,0,0,0,27029, +27030,27031,27034,0,0,27036,27037,0,0,0,27038,27042,0,0,0,27044,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,27045,0,0,0,0,0,0,0,27046,0,0,0,0,0,0,0,27047,27049,0,27050,0,0,0, +27051,27052,0,27055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27056,27058,27059,0, +27061,0,27064,0,0,0,0,0,27069,0,0,27070,0,0,0,0,0,0,0,27072,0,0,0,0,0,0,0,0, +27076,0,0,0,0,0,27078,0,27079,0,0,0,27081,0,0,0,0,0,0,27082,0,27083,27086,0,0,0, +0,27087,0,0,0,0,0,27088,27090,0,27094,0,0,27095,0,27099,27102,0,0,0,27103,0,0,0, +0,27105,0,0,0,27106,0,0,0,0,0,0,27107,0,0,0,0,27108,27117,0,0,0,0,27118,0,0, +27124,0,27126,0,0,27130,27131,0,0,0,0,0,0,27147,0,0,0,0,27148,27149,0,0,0,0, +27150,27151,0,27152,0,27159,0,0,0,27164,0,0,0,0,0,0,0,27175,0,27189,0,0,27191,0, +27193,0,27195,0,27198,0,0,0,0,0,27200,0,0,0,0,27202,0,0,0,0,27203,0,0,27204,0,0, +27206,0,27207,0,0,0,0,27209,0,0,0,27213,0,0,27216,27219,27220,27222,27223,0, +27224,0,27225,27226,0,0,27233,0,0,0,0,27235,0,27237,0,27238,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,27239,0,27242,27243,0,27250,0,0,0,27251,0,27253,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,27254,27255,27258,0,0,0,27259,0,0,0,0,0,0,27267,0,27276,27278, +0,0,0,0,0,0,0,0,0,27296,27297,27301,0,0,0,0,0,0,27302,0,0,0,0,0,0,27312,27313,0, +0,0,0,0,27318,0,27320,0,27329,0,27330,27331,0,27332,0,0,0,0,27340,0,0,0,27348,0, +0,0,0,0,0,27350,0,27351,0,0,0,0,27355,0,0,27358,27359,27361,0,0,0,27365,0,27367, +0,27376,27378,0,0,27379,0,0,0,0,0,0,27396,0,27397,27404,0,0,0,0,0,27408,0,0,0,0, +27453,0,0,0,27456,0,0,0,27458,0,0,0,0,0,0,0,27459,0,0,0,27460,0,0,27461,0,27465, +27467,0,0,27469,0,27470,0,27471,0,27477,27482,0,0,0,0,0,0,27484,0,0,0,0,0,0, +27485,0,0,0,0,0,27493,0,27494,27502,0,0,0,0,0,0,0,0,0,0,0,0,27511,27532,0,0,0, +27533,27545,0,0,0,27546,0,0,0,0,0,0,0,0,0,0,27547,0,0,27549,27550,0,27551,0,0,0, +0,0,0,0,27555,0,0,27571,0,27573,27574,27575,27577,0,27578,0,0,27579,27585,0,0,0, +0,0,27586,0,0,27588,27589,0,0,0,0,27596,0,0,27600,0,0,0,0,0,0,0,0,0,0,0,27608,0, +0,0,0,0,0,0,0,0,0,0,27610,0,0,0,27618,0,0,27620,0,0,0,27631,0,0,27632,27634,0, +27636,27638,0,0,0,27643,0,27644,27649,0,0,0,0,0,0,0,0,0,0,0,0,0,27651,27660,0, +27661,0,0,0,0,0,0,0,27662,0,0,27664,0,27665,0,0,0,27669,0,27671,0,0,0,27673, +27674,0,0,0,27682,0,0,0,27711,0,27712,27713,27719,27720,0,0,27728,0,27729,0,0,0, +0,0,0,0,0,0,27731,0,0,27732,0,27733,0,27738,0,0,0,27742,0,0,0,27743,27744,0,0,0, +0,0,0,27745,27746,0,0,0,27747,27748,27751,27752,0,0,0,27768,27770,0,0,0,27774, +27775,0,27776,27777,0,0,27781,0,27784,0,27786,0,0,27791,0,27792,27793,27804,0, +27812,27813,0,0,0,0,0,0,0,0,27814,0,27825,0,27827,0,0,0,0,27828,27861,27862,0,0, +0,27864,0,0,0,27865,27884,0,27889,0,0,0,0,0,27890,0,27891,0,0,0,27892,0,0,0,0,0, +27897,27898,0,0,27899,0,0,0,27901,27905,0,0,27920,0,0,27921,0,27922,0,0,0,27931, +27934,0,0,0,0,0,0,0,0,0,0,27941,0,27942,0,27945,0,27947,27954,0,0,0,0,27960, +27963,0,0,0,0,0,0,0,0,27964,27965,0,0,0,27967,0,27969,27975,0,27976,27977,0, +27981,0,27983,28051,28052,0,0,0,0,0,28056,0,0,0,0,0,0,28058,28059,0,0,28061,0,0, +0,0,0,0,0,28063,0,0,0,0,0,0,28066,0,0,0,0,0,0,28069,28070,28072,0,28073,0,0, +28074,0,0,0,0,28075,0,0,0,0,0,0,0,28078,0,0,0,0,28085,0,0,0,0,28086,0,0,0,0,0,0, +28088,0,0,0,0,0,0,0,0,28090,0,28097,28114,28115,0,0,0,0,0,0,0,28116,0,0,0,0,0, +28118,0,28129,0,28131,0,0,28135,0,0,0,28140,28141,0,0,0,28146,0,0,0,0,28152,0,0, +0,0,28155,28157,28161,0,0,0,0,28166,0,28167,0,0,0,0,0,0,0,0,0,0,0,28172,0,0,0,0, +0,0,28173,0,0,28175,0,0,0,0,0,0,0,0,0,28178,28188,0,28190,0,0,0,0,0,28191,0, +28193,28206,0,0,28207,28209,0,28211,0,28213,0,0,0,28215,28216,28217,0,28222,0, +28223,28225,0,0,0,28226,0,28227,28229,28232,0,0,0,0,0,0,0,0,0,28235,0,28241,0,0, +28242,0,0,0,0,28243,0,0,0,28245,0,0,0,28248,28250,0,28251,28252,0,0,0,0,0,0, +28253,0,0,28254,28255,0,0,28256,0,0,28258,0,0,0,0,0,28259,0,0,28260,0,0,28261,0, +0,0,0,28262,28263,0,0,28264,0,0,0,28266,0,28268,28269,0,28270,28272,28274,0, +28277,28278,0,0,0,28279,0,28280,28281,28283,0,28292,0,28294,0,28297,0,0,0,0, +28299,0,0,0,0,0,28300,0,0,0,0,0,0,0,28301,0,0,0,0,0,0,0,0,0,0,0,0,0,28302,28303, +0,0,0,0,28304,0,0,28305,0,28312,0,28313,28314,0,0,0,0,0,0,28315,0,0,0,28320, +28321,0,0,28328,0,0,0,28329,28338,0,28339,0,0,28344,0,0,0,0,0,0,0,0,28347,0,0,0, +0,0,0,0,0,28348,0,0,0,0,0,28411,0,28412,28413,0,28416,0,0,0,28420,0,0,0,0,0, +28421,0,0,0,0,28423,0,0,0,28424,0,0,28428,0,0,0,0,0,28429,0,0,0,28431,28434,0, +28458,0,0,0,0,0,0,0,0,0,0,0,28464,0,0,0,0,28465,0,28467,0,0,0,0,0,0,28471,0,0,0, +0,28474,0,28480,0,28481,0,0,28485,0,0,0,0,28486,28488,0,0,28489,0,0,0,0,28492,0, +0,0,28495,0,28497,0,28499,0,0,0,0,28500,0,0,28502,28503,0,0,0,28508,0,0,0,28510, +0,0,28512,28513,28514,28521,0,28526,0,28527,28528,0,0,0,0,28529,0,0,28532,0,0, +28537,28538,0,0,0,28539,0,28548,0,28553,28554,0,0,0,0,0,0,0,0,0,0,0,0,28560, +28563,0,0,28564,0,0,0,0,28565,0,0,0,0,0,0,0,28566,28568,0,0,0,0,0,0,28569,0,0,0, +28570,0,28572,28573,0,0,0,0,28575,0,0,0,0,28576,28581,28588,0,0,28589,0,0,0, +28590,28595,0,28598,0,0,28601,0,0,28605,0,0,0,0,28614,28615,28619,0,0,0,0,0,0, +28620,0,28626,0,0,28628,0,28631,0,28632,0,0,0,0,0,0,28635,0,0,0,28637,28638,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28639,0,28643,0,0,28652,0,0,0,28662,0, +28670,28671,0,0,0,0,0,0,0,0,0,28672,28673,28675,28676,0,0,0,0,0,0,0,28691,0,0,0, +28695,0,0,0,28696,0,28697,28698,0,28705,0,28707,28708,28710,0,0,0,0,0,0,0,28711, +28728,0,0,0,28736,0,0,0,28737,0,0,0,0,0,0,0,0,0,28738,0,28739,0,28741,0,0,28742, +0,0,0,0,0,0,0,0,0,0,0,28745,0,0,0,0,0,0,28749,28750,28752,28754,28756,0,28757,0, +0,0,0,28759,28760,0,0,0,0,0,0,28762,0,0,0,28764,0,0,0,0,0,0,28766,0,28767,28768, +0,0,0,0,28769,28770,0,0,0,0,0,0,0,0,0,0,0,0,0,28771,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,28772,0,28773,0,28782,0,0,0,0,0,0,28784,0,28785,0,28786,0,0,0,28787,0,0,0, +28797,0,0,0,0,0,0,28799,0,0,28801,0,0,0,0,28802,0,28805,0,0,28806,0,0,28807,0,0, +0,0,0,0,0,28808,0,0,0,0,0,28810,28812,0,0,28816,28819,0,0,28821,0,28826,0,0,0, +28842,28852,0,0,28853,0,28854,28855,0,0,0,28857,0,0,0,28858,0,28867,28868,28869, +0,0,0,28874,28880,28882,28890,28892,0,0,0,0,0,0,0,28895,0,0,0,28898,28899,0,0,0, +28900,0,0,28904,0,28906,0,0,0,0,28907,0,0,0,0,0,0,28908,0,0,0,28910,0,28914,0,0, +0,0,0,0,0,28915,28916,28919,0,0,28920,0,28921,0,0,0,0,0,0,0,0,28924,0,0,0,0, +28926,28929,0,0,0,28930,0,28936,0,28939,0,0,0,0,28942,0,0,0,0,0,0,28956,0,0,0, +28966,0,0,0,0,28967,0,0,0,0,0,0,0,0,0,28968,0,28971,0,28975,28976,0,28982,28983, +0,0,28984,28989,28996,28997,28998,0,0,0,0,0,0,28999,0,0,0,0,0,29000,0,29001,0,0, +0,29009,0,0,29011,0,0,29021,0,0,0,0,29024,0,29025,0,0,0,0,0,29026,0,0,0,29036,0, +0,0,29037,0,0,0,0,29038,0,29045,0,29047,0,0,0,0,0,0,0,0,0,29051,0,0,0,29054, +29056,29062,0,29070,29082,0,0,0,29083,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29084,0,0, +0,0,29085,29088,0,0,0,0,0,0,0,29090,29097,0,0,0,29103,0,0,0,0,0,0,0,0,29105,0,0, +0,0,0,29107,0,29109,0,0,0,29115,0,0,29120,0,0,29138,29140,0,0,0,0,0,0,0,0,0, +29152,0,29160,29174,0,29176,0,0,29180,0,29181,0,0,0,0,0,0,0,0,29228,0,0,29229,0, +0,29230,0,0,0,0,0,0,0,0,0,0,29234,0,0,0,29241,0,29245,0,29248,0,29250,29256, +29280,0,29282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29285,0,0,29286,29291,29292,0,0,0,0, +29294,0,29295,0,0,0,0,0,29296,29297,29298,29300,0,29302,0,0,29304,29307,0,29312, +0,0,0,29322,0,0,29323,0,0,29324,29326,29328,0,29335,0,0,0,0,0,0,0,29338,29339,0, +0,0,0,0,29341,29343,0,0,0,0,29344,0,0,0,0,0,29345,0,0,0,0,29346,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29347,29348,29349,0,0,29354,0,0,29355,0,0,0,0,0,0,0,0,29357,0,0, +0,0,29364,0,29365,0,0,0,0,0,0,0,29366,0,0,29368,0,0,0,0,0,0,0,0,29378,0,29381,0, +0,0,0,0,0,0,0,29386,0,0,0,0,0,0,29389,0,0,0,29390,0,0,29391,29397,0,29398,29412, +29414,29418,29419,0,0,0,0,0,0,0,29420,0,0,0,0,0,0,0,29423,0,0,0,29435,0,0,0, +29437,0,0,29439,0,29441,0,0,0,0,29443,0,29446,29450,29452,0,0,0,0,0,29456,0,0,0, +0,0,29461,0,0,0,29464,0,0,0,0,0,0,0,0,29468,0,29473,0,0,0,29486,0,0,0,29490,0,0, +0,29491,29492,0,0,29497,0,0,0,29498,0,29499,0,29502,29505,0,29509,0,0,0,29510,0, +0,0,29512,0,0,0,29516,0,0,0,0,0,0,0,0,29518,0,29519,0,0,0,0,0,29520,29521,29529, +0,0,0,0,0,0,0,0,29530,0,0,29531,29538,0,29540,0,0,0,29542,0,29543,29544,29547,0, +0,29548,0,0,0,29549,0,0,0,29550,0,0,29552,0,0,0,0,29558,29561,0,29562,29564,0,0, +29565,0,0,29566,0,0,0,0,0,0,0,0,0,0,29578,29584,29586,29591,0,0,0,0,29593,29594, +0,0,29597,0,0,29613,0,29614,0,29615,0,0,0,0,29616,29617,0,0,29625,0,0,0,29632,0, +0,0,0,0,0,0,29633,0,0,0,0,0,29634,29635,29637,0,29638,0,29641,29643,0,0,0,0,0,0, +29644,0,29645,0,29649,0,0,0,29650,0,29653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29656, +29659,0,0,29660,0,0,0,29661,0,0,0,0,0,29664,0,0,0,29671,29673,0,0,0,0,0,0,0, +29675,0,29677,29679,0,0,29684,0,0,0,0,0,29685,0,0,0,29687,0,0,0,29688,0,29689, +29690,29700,0,29701,0,0,0,29702,0,29706,0,0,0,0,0,0,0,29720,0,29721,0,29727,0, +29733,29734,0,29750,29761,0,29763,0,0,0,0,0,29764,0,0,29765,0,0,0,29771,0,0,0,0, +0,0,0,0,0,0,0,0,29772,0,0,0,29773,29774,29775,0,0,0,0,0,0,0,0,0,0,0,29822,0,0,0, +29824,0,29825,0,0,0,0,0,29827,0,0,0,0,0,0,0,0,29829,0,29832,29834,0,0,29835,0,0, +29837,29838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29843,0,0,0,0,29844,29845,0,0,0, +0,0,0,0,0,0,29849,0,0,29869,29872,29890,29905,0,0,0,0,0,29907,29921,0,29922,0,0, +29923,29926,29944,29946,0,0,0,0,0,0,0,29947,29948,0,0,0,29951,0,0,0,0,0,29953,0, +0,29956,0,29957,0,0,29962,0,0,0,0,29971,0,0,0,29972,0,0,0,0,0,29978,0,29979, +29992,30007,30008,30010,0,0,0,30013,0,0,0,0,30014,30016,0,0,0,0,0,0,0,0,0,0,0, +30017,0,0,0,0,0,30023,30031,0,0,30033,0,0,0,0,0,0,0,0,0,0,30034,0,30038,0,30039, +0,30040,0,0,0,0,0,0,30067,30068,0,0,0,30069,0,30072,0,0,0,30073,0,0,0,0,30075,0, +0,0,0,0,0,30079,0,0,30080,0,0,0,0,0,30082,0,0,0,0,0,0,0,0,0,0,0,30084,30090,0,0, +30091,0,0,0,0,30098,30118,0,30119,0,30121,30130,0,0,0,0,0,0,0,0,0,0,0,0,0,30131, +30132,30133,0,0,0,0,0,0,30135,0,0,0,0,0,0,0,0,0,0,0,30136,0,0,30137,30138,0,0,0, +30139,30146,0,0,0,0,0,30147,0,0,30148,30151,0,0,0,30168,0,30172,30173,0,0,0,0,0, +0,0,0,30180,30181,0,30192,0,0,0,0,0,0,0,30194,30196,0,0,30199,0,0,30202,0,0,0,0, +30203,0,0,0,0,0,0,0,0,0,0,30213,0,0,0,30216,0,0,30217,0,0,0,30218,0,0,0,0,30219, +0,30220,0,30222,30227,0,0,0,0,0,30231,0,0,30233,30235,0,0,0,0,30238,0,30240, +30243,30245,0,30250,30252,0,0,0,30269,0,0,30271,30272,0,0,0,30278,30280,0,0, +30282,0,30284,0,30294,0,0,0,0,30295,30296,0,0,0,0,0,30298,30299,30302,30304, +30306,0,0,0,0,0,0,30316,30317,0,0,0,30318,0,0,0,30319,0,30320,30322,30326,0,0,0, +0,0,30327,0,30332,30348,30349,0,0,30356,0,0,0,0,0,0,0,0,30357,0,30358,0,30359, +30360,0,0,30365,30366,30378,0,0,0,0,30379,0,0,30381,0,30385,0,30388,30397,0,0,0, +30401,0,0,0,0,30403,0,0,0,0,0,30404,0,0,30405,0,30406,30408,0,30409,0,30410,0,0, +0,30417,0,0,30418,30419,0,30420,0,30424,0,0,0,30427,30430,30432,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,30433,0,0,0,0,0,0,0,30436,0,30437,30438,0,30441,30442,0,0, +0,30445,0,0,0,0,30452,30456,30457,0,0,0,30458,0,30464,0,0,0,0,0,0,30467,0,30469, +0,0,0,0,0,30477,0,0,30484,0,0,0,0,0,30485,0,0,0,0,0,30486,30487,30497,30498,0,0, +0,0,0,0,0,0,0,0,30505,0,30508,0,0,0,30509,30510,0,30514,30516,0,0,0,0,0,0,0,0,0, +0,0,30523,0,30524,0,30525,0,0,0,0,30537,0,0,30538,0,0,0,0,0,30553,0,0,30555, +30556,30558,30559,30560,0,0,30561,0,30562,0,0,0,0,0,0,0,0,30563,30570,30571,0, +30586,30587,0,0,30590,0,0,30594,0,0,0,0,30611,30612,30623,30634,0,0,30636,30640, +30655,30656,0,30657,0,0,30658,30669,0,30670,0,30676,30678,0,0,0,0,0,0,0,30679,0, +0,0,0,0,0,0,0,0,0,0,30695,0,0,30698,0,0,0,0,30700,0,0,0,0,30701,0,30702,30703,0, +0,0,0,30707,0,0,0,30709,0,0,30710,30719,30729,0,0,0,0,0,0,0,0,0,30731,0,0,30733, +0,0,0,30734,0,0,0,0,0,30736,30737,0,0,0,30740,0,0,0,30743,0,30746,0,30747,30748, +0,0,30751,30752,30753,0,0,0,30754,0,0,30760,0,0,0,0,0,0,0,30763,0,30764,0,0, +30766,0,30769,30770,30771,30774,30777,0,0,30779,30780,30781,0,0,0,0,30790,0,0,0, +30792,0,0,0,0,30810,0,0,0,0,0,0,0,30812,30819,0,0,30823,30824,0,30825,0,30827,0, +0,0,0,0,0,30828,0,0,30830,0,0,0,30834,0,30835,0,30837,30838,0,30845,0,0,0,0,0, +30846,30847,0,0,30849,0,30851,0,0,0,0,0,30852,30858,0,0,30859,0,30865,0,0,30866, +0,0,30868,0,0,30869,0,0,0,30881,30883,0,0,0,0,0,30889,0,30891,0,0,0,0,30894,0, +30895,0,30897,0,30898,0,0,0,30904,30906,0,30909,0,0,0,0,0,0,30910,0,0,0,30915, +30933,30942,0,0,0,0,30943,0,0,30945,0,0,0,0,0,0,30946,0,0,30947,0,0,30955,30956, +0,0,30960,0,0,30961,30962,30966,0,0,30969,30974,0,0,0,30976,0,0,30977,0,30978, +30982,0,0,0,0,0,0,0,30994,30995,30998,0,31000,0,0,31001,0,0,31003,31005,0,0, +31006,31011,0,0,31014,0,31016,0,0,0,0,31018,0,0,31020,31023,31024,31025,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,31027,31028,31029,0,0,0,0,0,0,31032,0,0,0,0,0,0,0,0,0,0,0, +31036,31037,31038,0,0,0,31041,31043,31045,0,31047,0,0,0,31048,0,31049,0,0,0, +31053,31054,31055,0,0,31063,0,0,0,0,0,31066,0,31068,31071,0,0,0,31072,31073,0,0, +0,0,31075,0,0,31076,0,0,0,31077,31079,0,31080,0,0,0,0,0,0,0,0,0,0,31087,0,31142, +0,31144,0,0,31145,31146,31147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31149,0,31151,31152,0, +0,0,0,0,0,0,31162,31171,31174,31175,0,0,0,31176,0,0,0,0,0,0,0,31179,0,0,0,31186, +0,0,0,31192,31195,0,0,31196,0,0,0,0,0,0,0,0,31198,0,0,0,0,0,31199,0,0,0,31205,0, +0,0,0,31211,31215,0,0,0,0,31231,0,31232,0,0,0,0,0,0,0,0,0,0,31233,31236,31253,0, +31254,0,0,0,0,0,0,31255,0,0,31257,0,0,0,0,0,0,0,0,0,31258,31259,0,0,31260,0, +31261,0,0,0,0,0,31262,31263,0,0,31264,0,31266,0,31267,0,0,0,0,0,31281,0,31282,0, +31284,0,0,31285,31287,31288,0,0,31290,0,0,0,31292,31295,0,31299,0,31300,0,0,0,0, +0,31302,0,0,0,0,31303,0,0,0,0,0,0,31304,0,0,0,0,0,31305,31308,31309,31315,0, +31317,0,0,0,0,0,31323,0,31324,0,0,0,0,0,31325,31327,0,0,31331,0,0,0,0,0,31333,0, +0,0,0,0,31336,0,0,31337,0,0,0,0,0,0,31338,0,0,0,0,0,0,0,0,0,0,0,0,31339,0,0,0,0, +0,0,0,31342,0,0,0,0,31345,0,0,0,0,0,0,0,0,31347,0,0,0,0,0,0,31348,0,0,31350, +31351,0,31352,0,0,31354,0,0,0,0,31355,0,0,31356,0,0,0,0,0,0,0,0,0,0,31363,0, +31372,0,0,31373,0,0,0,0,0,0,0,0,0,31376,0,31388,0,31389,0,31392,0,31401,0,31405, +31407,31408,0,31409,0,0,0,0,0,0,31413,31415,0,0,0,31416,31418,0,0,0,0,0,0,31422, +31423,0,0,31424,0,31425,31432,0,0,0,0,0,0,0,0,0,31433,0,0,0,0,0,0,0,0,31434,0,0, +0,0,0,0,31435,0,0,0,0,31438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31442,0,31444,0, +31448,0,0,31451,0,0,0,0,31452,0,31461,31465,0,0,31466,0,0,31467,0,0,31468,0,0,0, +31469,31473,0,31476,0,0,0,0,31489,31490,0,0,0,0,0,0,0,31492,31493,31494,0,0,0,0, +31501,31504,31505,0,0,0,0,0,0,0,0,0,31509,0,0,0,0,31510,0,0,31511,0,0,31513,0,0, +0,0,0,0,0,0,0,31514,0,31522,31536,31539,31540,0,31541,0,0,0,0,0,0,31546,31553, +31559,0,0,0,31560,31561,31562,0,0,31564,31567,0,31569,0,0,0,31570,0,0,0,0,31571, +0,0,0,0,0,0,31572,31574,31580,31581,0,0,31582,31584,31585,31586,31595,0,31596,0, +0,0,0,31597,0,31599,0,31600,31601,0,0,31603,31604,0,0,31608,31610,0,0,0,31611,0, +31615,0,0,0,0,31616,0,0,0,0,0,0,31617,0,0,0,0,0,31618,0,0,0,0,0,0,31621,0,0,0,0, +0,0,0,0,0,31622,31625,0,0,0,0,31627,0,31641,0,0,31642,0,0,31643,0,0,0,0,0,0,0,0, +0,31644,0,31646,0,0,0,0,31648,0,0,0,31652,0,0,0,31657,0,0,31676,0,0,0,0,0,0,0, +31689,31691,31692,0,31694,0,0,0,31696,0,31702,0,31703,0}; + +static const DictWord kStaticDictionaryWords[31705] = { +{0,0,0},{8,0,1002},{136,0,1015},{4,0,683},{4,10,325},{138,10,125},{7,11,572},{9, +11,592},{11,11,680},{11,11,842},{11,11,924},{12,11,356},{12,11,550},{13,11,317}, +{13,11,370},{13,11,469},{13,11,471},{14,11,397},{18,11,69},{146,11,145},{134,0, +1265},{136,11,534},{134,0,1431},{11,0,138},{140,0,40},{4,0,155},{7,0,1689},{4,10 +,718},{135,10,1216},{4,0,245},{5,0,151},{5,0,741},{6,0,1147},{7,0,498},{7,0,870} +,{7,0,1542},{12,0,213},{14,0,36},{14,0,391},{17,0,111},{18,0,6},{18,0,46},{18,0, +151},{19,0,36},{20,0,32},{20,0,56},{20,0,69},{20,0,102},{21,0,4},{22,0,8},{22,0, +10},{22,0,14},{150,0,31},{4,0,624},{135,0,1752},{5,10,124},{5,10,144},{6,10,548} +,{7,10,15},{7,10,153},{137,10,629},{6,0,503},{9,0,586},{13,0,468},{14,0,66},{16, +0,58},{7,10,1531},{8,10,416},{9,10,275},{10,10,100},{11,10,658},{11,10,979},{12, +10,86},{14,10,207},{15,10,20},{143,10,25},{5,0,603},{7,0,1212},{9,0,565},{14,0, +301},{5,10,915},{6,10,1783},{7,10,211},{7,10,1353},{9,10,83},{10,10,376},{10,10, +431},{11,10,543},{12,10,664},{13,10,280},{13,10,428},{14,10,128},{17,10,52},{145 +,10,81},{4,0,492},{133,0,451},{135,0,835},{141,0,70},{132,0,539},{7,11,748},{139 +,11,700},{7,11,1517},{11,11,597},{14,11,76},{14,11,335},{148,11,33},{6,0,113},{ +135,0,436},{4,10,338},{133,10,400},{136,0,718},{133,11,127},{133,11,418},{6,0, +1505},{7,0,520},{6,11,198},{11,10,892},{140,11,83},{4,10,221},{5,10,659},{5,10, +989},{7,10,697},{7,10,1211},{138,10,284},{135,0,1070},{5,11,276},{6,11,55},{135, +11,1369},{134,0,1515},{6,11,1752},{136,11,726},{138,10,507},{15,0,78},{4,10,188} +,{135,10,805},{5,10,884},{139,10,991},{133,11,764},{134,10,1653},{6,11,309},{7, +11,331},{138,11,550},{135,11,1861},{132,11,348},{135,11,986},{135,11,1573},{12,0 +,610},{13,0,431},{144,0,59},{9,11,799},{140,10,166},{134,0,1530},{132,0,750},{ +132,0,307},{133,0,964},{6,11,194},{7,11,133},{10,11,493},{10,11,570},{139,11,664 +},{5,11,24},{5,11,569},{6,11,3},{6,11,119},{6,11,143},{6,11,440},{7,11,295},{7, +11,599},{7,11,1686},{7,11,1854},{8,11,424},{9,11,43},{9,11,584},{9,11,760},{10, +11,148},{10,11,328},{11,11,159},{11,11,253},{11,11,506},{12,11,487},{12,11,531}, +{144,11,33},{136,10,760},{5,11,14},{5,11,892},{6,11,283},{7,11,234},{136,11,537} +,{135,11,1251},{4,11,126},{8,11,635},{147,11,34},{4,11,316},{135,11,1561},{6,0, +999},{6,0,1310},{137,11,861},{4,11,64},{5,11,352},{5,11,720},{6,11,368},{139,11, +359},{4,0,75},{5,0,180},{6,0,500},{7,0,58},{7,0,710},{10,0,645},{136,10,770},{ +133,0,649},{6,0,276},{7,0,282},{7,0,879},{7,0,924},{8,0,459},{9,0,599},{9,0,754} +,{11,0,574},{12,0,128},{12,0,494},{13,0,52},{13,0,301},{15,0,30},{143,0,132},{ +132,0,200},{4,10,89},{5,10,489},{6,10,315},{7,10,553},{7,10,1745},{138,10,243},{ +135,11,1050},{7,0,1621},{6,10,1658},{9,10,3},{10,10,154},{11,10,641},{13,10,85}, +{13,10,201},{141,10,346},{6,11,175},{137,11,289},{5,11,432},{133,11,913},{6,0, +225},{137,0,211},{7,0,718},{8,0,687},{139,0,374},{4,10,166},{133,10,505},{9,0, +110},{134,10,1670},{8,0,58},{9,0,724},{11,0,809},{13,0,113},{145,0,72},{6,0,345} +,{7,0,1247},{144,11,82},{5,11,931},{134,11,1698},{8,0,767},{8,0,803},{9,0,301},{ +137,0,903},{139,0,203},{134,0,1154},{7,0,1949},{136,0,674},{134,0,259},{135,0, +1275},{5,11,774},{6,11,1637},{6,11,1686},{134,11,1751},{134,0,1231},{7,10,445},{ +8,10,307},{8,10,704},{10,10,41},{10,10,439},{11,10,237},{11,10,622},{140,10,201} +,{136,0,254},{6,11,260},{135,11,1484},{139,0,277},{135,10,1977},{4,10,189},{5,10 +,713},{6,11,573},{136,10,57},{138,10,371},{132,10,552},{134,11,344},{133,0,248}, +{9,0,800},{10,0,693},{11,0,482},{11,0,734},{11,0,789},{134,11,240},{4,0,116},{5, +0,95},{5,0,445},{7,0,1688},{8,0,29},{9,0,272},{11,0,509},{11,0,915},{4,11,292},{ +4,11,736},{5,11,871},{6,11,171},{6,11,1689},{7,11,1324},{7,11,1944},{9,11,415},{ +9,11,580},{14,11,230},{146,11,68},{7,0,490},{13,0,100},{143,0,75},{135,0,1641},{ +133,0,543},{7,11,209},{8,11,661},{10,11,42},{11,11,58},{12,11,58},{12,11,118},{ +141,11,32},{5,0,181},{8,0,41},{6,11,63},{135,11,920},{133,0,657},{133,11,793},{ +138,0,709},{7,0,25},{8,0,202},{138,0,536},{5,11,665},{135,10,1788},{145,10,49},{ +9,0,423},{140,0,89},{5,11,67},{6,11,62},{6,11,374},{135,11,1391},{8,0,113},{9,0, +877},{10,0,554},{11,0,83},{12,0,136},{19,0,109},{9,11,790},{140,11,47},{138,10, +661},{4,0,963},{10,0,927},{14,0,442},{135,10,1945},{133,0,976},{132,0,206},{4,11 +,391},{135,11,1169},{134,0,2002},{6,0,696},{134,0,1008},{134,0,1170},{132,11,271 +},{7,0,13},{8,0,226},{10,0,537},{11,0,570},{11,0,605},{11,0,799},{11,0,804},{12, +0,85},{12,0,516},{12,0,623},{13,0,112},{13,0,361},{14,0,77},{14,0,78},{17,0,28}, +{19,0,110},{140,11,314},{132,0,769},{134,0,1544},{4,0,551},{137,0,678},{5,10,84} +,{134,10,163},{9,0,57},{9,0,459},{10,0,425},{11,0,119},{12,0,184},{12,0,371},{13 +,0,358},{145,0,51},{5,0,188},{5,0,814},{8,0,10},{9,0,421},{9,0,729},{10,0,609},{ +11,0,689},{4,11,253},{5,10,410},{5,11,544},{7,11,300},{137,11,340},{134,0,624},{ +138,11,321},{135,0,1941},{18,0,130},{5,10,322},{8,10,186},{9,10,262},{10,10,187} +,{142,10,208},{5,11,53},{5,11,541},{6,11,94},{6,11,499},{7,11,230},{139,11,321}, +{133,10,227},{4,0,378},{4,11,920},{5,11,25},{5,11,790},{6,11,457},{135,11,853},{ +137,0,269},{132,0,528},{134,0,1146},{7,10,1395},{8,10,486},{9,10,236},{9,10,878} +,{10,10,218},{11,10,95},{19,10,17},{147,10,31},{7,10,2043},{8,10,672},{141,10, +448},{134,0,1105},{134,0,1616},{134,11,1765},{140,11,163},{5,10,412},{133,11,822 +},{132,11,634},{6,0,656},{134,11,1730},{134,0,1940},{5,0,104},{6,0,173},{135,0, +1631},{136,10,562},{6,11,36},{7,11,658},{8,11,454},{147,11,86},{5,0,457},{134,10 +,1771},{7,0,810},{8,0,138},{8,0,342},{9,0,84},{10,0,193},{11,0,883},{140,0,359}, +{9,0,620},{135,10,1190},{137,10,132},{7,11,975},{137,11,789},{6,0,95},{6,0,1934} +,{136,0,967},{141,11,335},{6,0,406},{10,0,409},{10,0,447},{11,0,44},{140,0,100}, +{4,10,317},{135,10,1279},{132,0,477},{134,0,1268},{6,0,1941},{8,0,944},{5,10,63} +,{133,10,509},{132,0,629},{132,11,104},{4,0,246},{133,0,375},{6,0,1636},{132,10, +288},{135,11,1614},{9,0,49},{10,0,774},{8,10,89},{8,10,620},{11,10,628},{12,10, +322},{143,10,124},{4,0,282},{7,0,1034},{11,0,398},{11,0,634},{12,0,1},{12,0,79}, +{12,0,544},{14,0,237},{17,0,10},{146,0,20},{132,0,824},{7,11,45},{9,11,542},{9, +11,566},{138,11,728},{5,0,118},{5,0,499},{6,0,476},{6,0,665},{6,0,1176},{6,0, +1196},{7,0,600},{7,0,888},{135,0,1096},{7,0,296},{7,0,596},{8,0,560},{8,0,586},{ +9,0,612},{11,0,304},{12,0,46},{13,0,89},{14,0,112},{145,0,122},{5,0,894},{6,0, +1772},{9,0,1009},{138,10,120},{5,11,533},{7,11,755},{138,11,780},{151,10,1},{6,0 +,1474},{7,11,87},{142,11,288},{139,0,366},{137,10,461},{7,11,988},{7,11,1939},{9 +,11,64},{9,11,502},{12,11,7},{12,11,34},{13,11,12},{13,11,234},{147,11,77},{7,0, +1599},{7,0,1723},{8,0,79},{8,0,106},{8,0,190},{8,0,302},{8,0,383},{8,0,713},{9,0 +,119},{9,0,233},{9,0,419},{9,0,471},{10,0,181},{10,0,406},{11,0,57},{11,0,85},{ +11,0,120},{11,0,177},{11,0,296},{11,0,382},{11,0,454},{11,0,758},{11,0,999},{12, +0,27},{12,0,98},{12,0,131},{12,0,245},{12,0,312},{12,0,446},{12,0,454},{13,0,25} +,{13,0,98},{13,0,426},{13,0,508},{14,0,70},{14,0,163},{14,0,272},{14,0,277},{14, +0,370},{15,0,95},{15,0,138},{15,0,167},{17,0,38},{148,0,96},{135,10,1346},{10,0, +200},{19,0,2},{151,0,22},{135,11,141},{134,10,85},{134,0,1759},{138,0,372},{145, +0,16},{8,0,943},{132,11,619},{139,11,88},{5,11,246},{8,11,189},{9,11,355},{9,11, +512},{10,11,124},{10,11,453},{11,11,143},{11,11,416},{11,11,859},{141,11,341},{5 +,0,258},{134,0,719},{6,0,1798},{6,0,1839},{8,0,900},{10,0,874},{10,0,886},{12,0, +698},{12,0,732},{12,0,770},{16,0,106},{18,0,163},{18,0,170},{18,0,171},{152,0,20 +},{9,0,707},{11,0,326},{11,0,339},{12,0,423},{12,0,502},{20,0,62},{9,11,707},{11 +,11,326},{11,11,339},{12,11,423},{12,11,502},{148,11,62},{5,0,30},{7,0,495},{8,0 +,134},{9,0,788},{140,0,438},{133,11,678},{5,10,279},{6,10,235},{7,10,468},{8,10, +446},{9,10,637},{10,10,717},{11,10,738},{140,10,514},{5,11,35},{6,11,287},{7,11, +862},{7,11,1886},{138,11,179},{7,0,1948},{7,0,2004},{132,11,517},{5,10,17},{6,10 +,371},{137,10,528},{4,0,115},{5,0,669},{6,0,407},{8,0,311},{11,0,10},{141,0,5},{ +137,0,381},{5,0,50},{6,0,439},{7,0,780},{135,0,1040},{136,11,667},{11,11,403},{ +146,11,83},{5,0,1},{6,0,81},{138,0,520},{134,0,738},{5,0,482},{8,0,98},{9,0,172} +,{10,0,360},{10,0,700},{10,0,822},{11,0,302},{11,0,778},{12,0,50},{12,0,127},{12 +,0,396},{13,0,62},{13,0,328},{14,0,122},{147,0,72},{9,11,157},{10,11,131},{140, +11,72},{135,11,714},{135,11,539},{5,0,2},{6,0,512},{7,0,797},{7,0,1494},{8,0,253 +},{8,0,589},{9,0,77},{10,0,1},{10,0,129},{10,0,225},{11,0,118},{11,0,226},{11,0, +251},{11,0,430},{11,0,701},{11,0,974},{11,0,982},{12,0,64},{12,0,260},{12,0,488} +,{140,0,690},{5,11,394},{7,11,367},{7,11,487},{7,11,857},{7,11,1713},{8,11,246}, +{9,11,537},{10,11,165},{12,11,219},{140,11,561},{136,0,557},{5,10,779},{5,10,807 +},{6,10,1655},{134,10,1676},{4,10,196},{5,10,558},{133,10,949},{11,11,827},{12, +11,56},{14,11,34},{143,11,148},{137,0,347},{133,0,572},{134,0,832},{4,0,12},{7,0 +,504},{7,0,522},{7,0,809},{8,0,797},{141,0,88},{4,10,752},{133,11,449},{7,11,86} +,{8,11,103},{145,11,69},{7,11,2028},{138,11,641},{5,0,528},{6,11,1},{142,11,2},{ +134,0,861},{10,0,294},{4,10,227},{5,10,159},{5,10,409},{7,10,80},{10,10,479},{12 +,10,418},{14,10,50},{14,10,249},{142,10,295},{7,10,1470},{8,10,66},{8,10,137},{8 +,10,761},{9,10,638},{11,10,80},{11,10,212},{11,10,368},{11,10,418},{12,10,8},{13 +,10,15},{16,10,61},{17,10,59},{19,10,28},{148,10,84},{20,0,109},{135,11,1148},{6 +,11,277},{7,11,1274},{7,11,1386},{7,11,1392},{12,11,129},{146,11,87},{6,11,187}, +{7,11,39},{7,11,1203},{8,11,380},{8,11,542},{14,11,117},{149,11,28},{134,0,1187} +,{5,0,266},{9,0,290},{9,0,364},{10,0,293},{11,0,606},{142,0,45},{6,11,297},{7,11 +,793},{139,11,938},{4,0,50},{6,0,594},{9,0,121},{10,0,49},{10,0,412},{139,0,834} +,{136,0,748},{7,11,464},{8,11,438},{11,11,105},{11,11,363},{12,11,231},{14,11, +386},{15,11,102},{148,11,75},{132,0,466},{13,0,399},{14,0,337},{6,10,38},{7,10, +1220},{8,10,185},{8,10,256},{9,10,22},{9,10,331},{10,10,738},{11,10,205},{11,10, +540},{11,10,746},{13,10,465},{142,10,194},{9,0,378},{141,0,162},{137,0,519},{4, +10,159},{6,10,115},{7,10,252},{7,10,257},{7,10,1928},{8,10,69},{9,10,384},{10,10 +,91},{10,10,615},{12,10,375},{14,10,235},{18,10,117},{147,10,123},{5,11,604},{5, +10,911},{136,10,278},{132,0,667},{8,0,351},{9,0,322},{4,10,151},{135,10,1567},{ +134,0,902},{133,10,990},{12,0,180},{5,10,194},{7,10,1662},{137,10,90},{4,0,869}, +{134,0,1996},{134,0,813},{133,10,425},{137,11,761},{132,0,260},{133,10,971},{5, +11,20},{6,11,298},{7,11,659},{7,11,1366},{137,11,219},{4,0,39},{5,0,36},{7,0, +1843},{8,0,407},{11,0,144},{140,0,523},{4,0,510},{10,0,587},{139,10,752},{7,0,29 +},{7,0,66},{7,0,1980},{10,0,487},{138,0,809},{13,0,260},{14,0,82},{18,0,63},{137 +,10,662},{5,10,72},{6,10,264},{7,10,21},{7,10,46},{7,10,2013},{8,10,215},{8,10, +513},{10,10,266},{139,10,22},{134,0,570},{6,0,565},{7,0,1667},{4,11,439},{10,10, +95},{11,10,603},{12,11,242},{13,10,443},{14,10,160},{143,10,4},{134,0,1464},{134 +,10,431},{9,0,372},{15,0,2},{19,0,10},{19,0,18},{5,10,874},{6,10,1677},{143,10,0 +},{132,0,787},{6,0,380},{12,0,399},{21,0,19},{7,10,939},{7,10,1172},{7,10,1671}, +{9,10,540},{10,10,696},{11,10,265},{11,10,732},{11,10,928},{11,10,937},{141,10, +438},{137,0,200},{132,11,233},{132,0,516},{134,11,577},{132,0,844},{11,0,887},{ +14,0,365},{142,0,375},{132,11,482},{8,0,821},{140,0,44},{7,0,1655},{136,0,305},{ +5,10,682},{135,10,1887},{135,11,346},{132,10,696},{4,0,10},{7,0,917},{139,0,786} +,{5,11,795},{6,11,1741},{8,11,417},{137,11,782},{4,0,1016},{134,0,2031},{5,0,684 +},{4,10,726},{133,10,630},{6,0,1021},{134,0,1480},{8,10,802},{136,10,838},{134,0 +,27},{134,0,395},{135,11,622},{7,11,625},{135,11,1750},{4,11,203},{135,11,1936}, +{6,10,118},{7,10,215},{7,10,1521},{140,10,11},{132,0,813},{136,0,511},{7,10,615} +,{138,10,251},{135,10,1044},{145,0,56},{133,10,225},{6,0,342},{6,0,496},{8,0,275 +},{137,0,206},{4,0,909},{133,0,940},{132,0,891},{7,11,311},{9,11,308},{140,11, +255},{4,10,370},{5,10,756},{135,10,1326},{4,0,687},{134,0,1596},{134,0,1342},{6, +10,1662},{7,10,48},{8,10,771},{10,10,116},{13,10,104},{14,10,105},{14,10,184},{ +15,10,168},{19,10,92},{148,10,68},{138,10,209},{4,11,400},{5,11,267},{135,11,232 +},{151,11,12},{6,0,41},{141,0,160},{141,11,314},{134,0,1718},{136,0,778},{142,11 +,261},{134,0,1610},{133,0,115},{132,0,294},{14,0,314},{132,10,120},{132,0,983},{ +5,0,193},{140,0,178},{138,10,429},{5,10,820},{135,10,931},{6,0,994},{6,0,1051},{ +6,0,1439},{7,0,174},{133,11,732},{4,11,100},{7,11,679},{8,11,313},{138,10,199},{ +6,10,151},{6,10,1675},{7,10,383},{151,10,10},{6,0,1796},{8,0,848},{8,0,867},{8,0 +,907},{10,0,855},{140,0,703},{140,0,221},{4,0,122},{5,0,796},{5,0,952},{6,0,1660 +},{6,0,1671},{8,0,567},{9,0,687},{9,0,742},{10,0,686},{11,0,682},{11,0,909},{140 +,0,281},{5,11,362},{5,11,443},{6,11,318},{7,11,1019},{139,11,623},{5,11,463},{ +136,11,296},{11,0,583},{13,0,262},{6,10,1624},{12,10,422},{142,10,360},{5,0,179} +,{7,0,1095},{135,0,1213},{4,10,43},{4,11,454},{5,10,344},{133,10,357},{4,0,66},{ +7,0,722},{135,0,904},{134,0,773},{7,0,352},{133,10,888},{5,11,48},{5,11,404},{6, +11,557},{7,11,458},{8,11,597},{10,11,455},{10,11,606},{11,11,49},{11,11,548},{12 +,11,476},{13,11,18},{141,11,450},{134,11,418},{132,10,711},{5,11,442},{135,11, +1984},{141,0,35},{137,0,152},{134,0,1197},{135,11,1093},{137,11,203},{137,10,440 +},{10,0,592},{10,0,753},{12,0,317},{12,0,355},{12,0,465},{12,0,469},{12,0,560},{ +12,0,578},{141,0,243},{133,0,564},{134,0,797},{5,10,958},{133,10,987},{5,11,55}, +{7,11,376},{140,11,161},{133,11,450},{134,0,556},{134,0,819},{11,10,276},{142,10 +,293},{7,0,544},{138,0,61},{8,0,719},{4,10,65},{5,10,479},{5,10,1004},{7,10,1913 +},{8,10,317},{9,10,302},{10,10,612},{141,10,22},{4,0,5},{5,0,498},{8,0,637},{9,0 +,521},{4,11,213},{4,10,261},{7,11,223},{7,10,510},{136,11,80},{5,0,927},{7,0,101 +},{4,10,291},{7,11,381},{7,11,806},{7,11,820},{8,11,354},{8,11,437},{8,11,787},{ +9,10,515},{9,11,657},{10,11,58},{10,11,339},{10,11,749},{11,11,914},{12,10,152}, +{12,11,162},{12,10,443},{13,11,75},{13,10,392},{14,11,106},{14,11,198},{14,11, +320},{14,10,357},{14,11,413},{146,11,43},{6,0,1153},{7,0,1441},{136,11,747},{4,0 +,893},{5,0,780},{133,0,893},{138,11,654},{133,11,692},{133,0,238},{134,11,191},{ +4,10,130},{135,10,843},{6,0,1296},{5,10,42},{5,10,879},{7,10,245},{7,10,324},{7, +10,1532},{11,10,463},{11,10,472},{13,10,363},{144,10,52},{134,0,1729},{6,0,1999} +,{136,0,969},{4,10,134},{133,10,372},{4,0,60},{7,0,941},{7,0,1800},{8,0,314},{9, +0,700},{139,0,487},{134,0,1144},{6,11,162},{7,11,1960},{136,11,831},{132,11,706} +,{135,0,1147},{138,11,426},{138,11,89},{7,0,1853},{138,0,437},{136,0,419},{135, +10,1634},{133,0,828},{5,0,806},{7,0,176},{7,0,178},{7,0,1240},{7,0,1976},{132,10 +,644},{135,11,1877},{5,11,420},{135,11,1449},{4,0,51},{5,0,39},{6,0,4},{7,0,591} +,{7,0,849},{7,0,951},{7,0,1613},{7,0,1760},{7,0,1988},{9,0,434},{10,0,754},{11,0 +,25},{139,0,37},{10,11,57},{138,11,277},{135,10,540},{132,11,204},{135,0,159},{ +139,11,231},{133,0,902},{7,0,928},{7,11,366},{9,11,287},{12,11,199},{12,11,556}, +{140,11,577},{6,10,623},{136,10,789},{4,10,908},{5,10,359},{5,10,508},{6,10,1723 +},{7,10,343},{7,10,1996},{135,10,2026},{134,0,270},{4,10,341},{135,10,480},{5,11 +,356},{135,11,224},{11,11,588},{11,11,864},{11,11,968},{143,11,160},{132,0,556}, +{137,0,801},{132,0,416},{142,0,372},{5,0,152},{5,0,197},{7,0,340},{7,0,867},{10, +0,548},{10,0,581},{11,0,6},{12,0,3},{12,0,19},{14,0,110},{142,0,289},{139,0,369} +,{7,11,630},{9,11,567},{11,11,150},{11,11,444},{141,11,119},{134,11,539},{7,10, +1995},{8,10,299},{11,10,890},{140,10,674},{7,0,34},{7,0,190},{8,0,28},{8,0,141}, +{8,0,444},{8,0,811},{9,0,468},{11,0,334},{12,0,24},{12,0,386},{140,0,576},{133,0 +,757},{7,0,1553},{136,0,898},{133,0,721},{136,0,1012},{4,0,789},{5,0,647},{135,0 +,1102},{132,0,898},{10,0,183},{4,10,238},{5,10,503},{6,10,179},{7,10,2003},{8,10 +,381},{8,10,473},{9,10,149},{10,10,788},{15,10,45},{15,10,86},{20,10,110},{150, +10,57},{9,0,136},{19,0,107},{4,10,121},{5,10,156},{5,10,349},{10,10,605},{142,10 +,342},{4,11,235},{135,11,255},{4,11,194},{5,11,584},{6,11,384},{7,11,583},{10,11 +,761},{11,11,760},{139,11,851},{6,10,80},{6,10,1694},{7,10,173},{7,10,1974},{9, +10,547},{10,10,730},{14,10,18},{150,10,39},{4,10,923},{134,10,1711},{5,0,277},{ +141,0,247},{132,0,435},{133,11,562},{134,0,1311},{5,11,191},{137,11,271},{132,10 +,595},{7,11,1537},{14,11,96},{143,11,73},{5,0,437},{7,0,502},{7,0,519},{7,0,1122 +},{7,0,1751},{14,0,211},{6,10,459},{7,10,1753},{7,10,1805},{8,10,658},{9,10,1},{ +11,10,959},{141,10,446},{6,0,814},{4,11,470},{5,11,473},{6,11,153},{7,11,1503},{ +7,11,1923},{10,11,701},{11,11,132},{11,11,168},{11,11,227},{11,11,320},{11,11, +436},{11,11,525},{11,11,855},{12,11,41},{12,11,286},{13,11,103},{13,11,284},{14, +11,255},{14,11,262},{15,11,117},{143,11,127},{5,0,265},{6,0,212},{135,0,28},{138 +,0,750},{133,11,327},{6,11,552},{7,11,1754},{137,11,604},{134,0,2012},{132,0,702 +},{5,11,80},{6,11,405},{7,11,403},{7,11,1502},{7,11,1626},{8,11,456},{9,11,487}, +{9,11,853},{9,11,889},{10,11,309},{11,11,721},{11,11,994},{12,11,430},{141,11, +165},{5,0,808},{135,0,2045},{5,0,166},{8,0,739},{140,0,511},{134,10,490},{4,11, +453},{5,11,887},{6,11,535},{8,11,6},{136,11,543},{4,0,119},{5,0,170},{5,0,447},{ +7,0,1708},{7,0,1889},{9,0,357},{9,0,719},{12,0,486},{140,0,596},{137,0,500},{7, +10,250},{136,10,507},{132,10,158},{6,0,809},{134,0,1500},{9,0,327},{11,0,350},{ +11,0,831},{13,0,352},{4,10,140},{7,10,362},{8,10,209},{9,10,10},{9,10,503},{9,10 +,614},{10,10,689},{11,10,327},{11,10,725},{12,10,252},{12,10,583},{13,10,192},{ +14,10,269},{14,10,356},{148,10,50},{135,11,741},{4,0,450},{7,0,1158},{19,10,1},{ +19,10,26},{150,10,9},{6,0,597},{135,0,1318},{134,0,1602},{6,10,228},{7,10,1341}, +{9,10,408},{138,10,343},{7,0,1375},{7,0,1466},{138,0,331},{132,0,754},{132,10, +557},{5,11,101},{6,11,88},{6,11,543},{7,11,1677},{9,11,100},{10,11,677},{14,11, +169},{14,11,302},{14,11,313},{15,11,48},{143,11,84},{134,0,1368},{4,11,310},{9, +11,795},{10,11,733},{11,11,451},{12,11,249},{14,11,115},{14,11,286},{143,11,100} +,{132,10,548},{10,0,557},{7,10,197},{8,10,142},{8,10,325},{9,10,150},{9,10,596}, +{10,10,353},{11,10,74},{11,10,315},{12,10,662},{12,10,681},{14,10,423},{143,10, +141},{133,11,587},{5,0,850},{136,0,799},{10,0,908},{12,0,701},{12,0,757},{142,0, +466},{4,0,62},{5,0,275},{18,0,19},{6,10,399},{6,10,579},{7,10,692},{7,10,846},{7 +,10,1015},{7,10,1799},{8,10,403},{9,10,394},{10,10,133},{12,10,4},{12,10,297},{ +12,10,452},{16,10,81},{18,10,25},{21,10,14},{22,10,12},{151,10,18},{12,0,459},{7 +,10,1546},{11,10,299},{142,10,407},{132,10,177},{132,11,498},{7,11,217},{8,11, +140},{138,11,610},{5,10,411},{135,10,653},{134,0,1802},{7,10,439},{10,10,727},{ +11,10,260},{139,10,684},{133,11,905},{11,11,580},{142,11,201},{134,0,1397},{5,10 +,208},{7,10,753},{135,10,1528},{7,0,238},{7,0,2033},{8,0,120},{8,0,188},{8,0,659 +},{9,0,598},{10,0,466},{12,0,342},{12,0,588},{13,0,503},{14,0,246},{143,0,92},{ +135,11,1041},{4,11,456},{7,11,105},{7,11,358},{7,11,1637},{8,11,643},{139,11,483 +},{6,0,1318},{134,0,1324},{4,0,201},{7,0,1744},{8,0,602},{11,0,247},{11,0,826},{ +17,0,65},{133,10,242},{8,0,164},{146,0,62},{133,10,953},{139,10,802},{133,0,615} +,{7,11,1566},{8,11,269},{9,11,212},{9,11,718},{14,11,15},{14,11,132},{142,11,227 +},{133,10,290},{132,10,380},{5,10,52},{7,10,277},{9,10,368},{139,10,791},{135,0, +1243},{133,11,539},{11,11,919},{141,11,409},{136,0,968},{133,11,470},{134,0,882} +,{132,0,907},{5,0,100},{10,0,329},{12,0,416},{149,0,29},{10,10,138},{139,10,476} +,{5,10,725},{5,10,727},{6,11,91},{7,11,435},{135,10,1811},{4,11,16},{5,11,316},{ +5,11,842},{6,11,370},{6,11,1778},{8,11,166},{11,11,812},{12,11,206},{12,11,351}, +{14,11,418},{16,11,15},{16,11,34},{18,11,3},{19,11,3},{19,11,7},{20,11,4},{149, +11,21},{132,0,176},{5,0,636},{5,0,998},{7,0,9},{7,0,1508},{8,0,26},{9,0,317},{9, +0,358},{10,0,210},{10,0,292},{10,0,533},{11,0,555},{12,0,526},{12,0,607},{13,0, +263},{13,0,459},{142,0,271},{6,0,256},{8,0,265},{4,10,38},{7,10,307},{7,10,999}, +{7,10,1481},{7,10,1732},{7,10,1738},{9,10,414},{11,10,316},{12,10,52},{13,10,420 +},{147,10,100},{135,10,1296},{4,11,611},{133,11,606},{4,0,643},{142,11,21},{133, +11,715},{133,10,723},{6,0,610},{135,11,597},{10,0,127},{141,0,27},{6,0,1995},{6, +0,2001},{8,0,119},{136,0,973},{4,11,149},{138,11,368},{12,0,522},{4,11,154},{5, +10,109},{6,10,1784},{7,11,1134},{7,10,1895},{8,11,105},{12,10,296},{140,10,302}, +{4,11,31},{6,11,429},{7,11,962},{9,11,458},{139,11,691},{10,0,553},{11,0,876},{ +13,0,193},{13,0,423},{14,0,166},{19,0,84},{4,11,312},{5,10,216},{7,10,1879},{9, +10,141},{9,10,270},{9,10,679},{10,10,159},{11,10,197},{12,10,538},{12,10,559},{ +14,10,144},{14,10,167},{143,10,67},{134,0,1582},{7,0,1578},{135,11,1578},{137,10 +,81},{132,11,236},{134,10,391},{134,0,795},{7,10,322},{136,10,249},{5,11,836},{5 +,11,857},{6,11,1680},{7,11,59},{147,11,53},{135,0,432},{10,11,68},{139,11,494},{ +4,11,81},{139,11,867},{7,0,126},{136,0,84},{142,11,280},{5,11,282},{8,11,650},{9 +,11,295},{9,11,907},{138,11,443},{136,0,790},{5,10,632},{138,10,526},{6,0,64},{ +12,0,377},{13,0,309},{14,0,141},{14,0,429},{14,11,141},{142,11,429},{134,0,1529} +,{6,0,321},{7,0,1857},{9,0,530},{19,0,99},{7,10,948},{7,10,1042},{8,10,235},{8, +10,461},{9,10,453},{10,10,354},{145,10,77},{7,0,1104},{11,0,269},{11,0,539},{11, +0,627},{11,0,706},{11,0,975},{12,0,248},{12,0,434},{12,0,600},{12,0,622},{13,0, +297},{13,0,485},{14,0,69},{14,0,409},{143,0,108},{4,10,362},{7,10,52},{7,10,303} +,{10,11,70},{12,11,26},{14,11,17},{14,11,178},{15,11,34},{149,11,12},{11,0,977}, +{141,0,507},{9,0,34},{139,0,484},{5,10,196},{6,10,486},{7,10,212},{8,10,309},{ +136,10,346},{6,0,1700},{7,0,26},{7,0,293},{7,0,382},{7,0,1026},{7,0,1087},{7,0, +2027},{8,0,24},{8,0,114},{8,0,252},{8,0,727},{8,0,729},{9,0,30},{9,0,199},{9,0, +231},{9,0,251},{9,0,334},{9,0,361},{9,0,712},{10,0,55},{10,0,60},{10,0,232},{10, +0,332},{10,0,384},{10,0,396},{10,0,504},{10,0,542},{10,0,652},{11,0,20},{11,0,48 +},{11,0,207},{11,0,291},{11,0,298},{11,0,342},{11,0,365},{11,0,394},{11,0,620},{ +11,0,705},{11,0,1017},{12,0,123},{12,0,340},{12,0,406},{12,0,643},{13,0,61},{13, +0,269},{13,0,311},{13,0,319},{13,0,486},{14,0,234},{15,0,62},{15,0,85},{16,0,71} +,{18,0,119},{20,0,105},{135,10,1912},{4,11,71},{5,11,376},{7,11,119},{138,11,665 +},{10,0,918},{10,0,926},{4,10,686},{136,11,55},{138,10,625},{136,10,706},{132,11 +,479},{4,10,30},{133,10,43},{6,0,379},{7,0,270},{8,0,176},{8,0,183},{9,0,432},{9 +,0,661},{12,0,247},{12,0,617},{18,0,125},{7,11,607},{8,11,99},{152,11,4},{5,0, +792},{133,0,900},{4,11,612},{133,11,561},{4,11,41},{4,10,220},{5,11,74},{7,10, +1535},{7,11,1627},{11,11,871},{140,11,619},{135,0,1920},{7,11,94},{11,11,329},{ +11,11,965},{12,11,241},{14,11,354},{15,11,22},{148,11,63},{9,11,209},{137,11,300 +},{134,0,771},{135,0,1979},{4,0,901},{133,0,776},{142,0,254},{133,11,98},{9,11, +16},{141,11,386},{133,11,984},{4,11,182},{6,11,205},{135,11,220},{7,10,1725},{7, +10,1774},{138,10,393},{5,10,263},{134,10,414},{4,11,42},{9,11,205},{9,11,786},{ +138,11,659},{14,0,140},{148,0,41},{8,0,440},{10,0,359},{6,10,178},{6,11,289},{6, +10,1750},{7,11,1670},{9,10,690},{10,10,155},{10,10,373},{11,10,698},{12,11,57},{ +13,10,155},{20,10,93},{151,11,4},{4,0,37},{5,0,334},{7,0,1253},{151,11,25},{4,0, +508},{4,11,635},{5,10,97},{137,10,393},{139,11,533},{4,0,640},{133,0,513},{134, +10,1639},{132,11,371},{4,11,272},{7,11,836},{7,11,1651},{145,11,89},{5,11,825},{ +6,11,444},{6,11,1640},{136,11,308},{4,10,191},{7,10,934},{8,10,647},{145,10,97}, +{12,0,246},{15,0,162},{19,0,64},{20,0,8},{20,0,95},{22,0,24},{152,0,17},{4,0,533 +},{5,10,165},{9,10,346},{138,10,655},{5,11,737},{139,10,885},{133,10,877},{8,10, +128},{139,10,179},{137,11,307},{140,0,752},{133,0,920},{135,0,1048},{5,0,153},{6 +,0,580},{6,10,1663},{7,10,132},{7,10,1154},{7,10,1415},{7,10,1507},{12,10,493},{ +15,10,105},{151,10,15},{5,10,459},{7,10,1073},{8,10,241},{136,10,334},{138,0,391 +},{135,0,1952},{133,11,525},{8,11,641},{11,11,388},{140,11,580},{142,0,126},{134 +,0,640},{132,0,483},{7,0,1616},{9,0,69},{6,10,324},{6,10,520},{7,10,338},{7,10, +1729},{8,10,228},{139,10,750},{5,11,493},{134,11,528},{135,0,734},{4,11,174},{ +135,11,911},{138,0,480},{9,0,495},{146,0,104},{135,10,705},{9,0,472},{4,10,73},{ +6,10,612},{7,10,927},{7,10,1330},{7,10,1822},{8,10,217},{9,10,765},{9,10,766},{ +10,10,408},{11,10,51},{11,10,793},{12,10,266},{15,10,158},{20,10,89},{150,10,32} +,{7,11,548},{137,11,58},{4,11,32},{5,11,215},{6,11,269},{7,11,1782},{7,11,1892}, +{10,11,16},{11,11,822},{11,11,954},{141,11,481},{132,0,874},{9,0,229},{5,10,389} +,{136,10,636},{7,11,1749},{136,11,477},{134,0,948},{5,11,308},{135,11,1088},{4,0 +,748},{139,0,1009},{136,10,21},{6,0,555},{135,0,485},{5,11,126},{8,11,297},{9,11 +,366},{9,11,445},{12,11,53},{12,11,374},{141,11,492},{7,11,1551},{139,11,361},{ +136,0,193},{136,0,472},{8,0,653},{13,0,93},{147,0,14},{132,0,984},{132,11,175},{ +5,0,172},{6,0,1971},{132,11,685},{149,11,8},{133,11,797},{13,0,83},{5,10,189},{7 +,10,442},{7,10,443},{8,10,281},{12,10,174},{141,10,261},{134,0,1568},{133,11,565 +},{139,0,384},{133,0,260},{7,0,758},{7,0,880},{7,0,1359},{9,0,164},{9,0,167},{10 +,0,156},{10,0,588},{12,0,101},{14,0,48},{15,0,70},{6,10,2},{7,10,1262},{7,10, +1737},{8,10,22},{8,10,270},{8,10,612},{9,10,312},{9,10,436},{10,10,311},{10,10, +623},{11,10,72},{11,10,330},{11,10,455},{12,10,321},{12,10,504},{12,10,530},{12, +10,543},{13,10,17},{13,10,156},{13,10,334},{17,10,60},{148,10,64},{4,11,252},{7, +11,1068},{10,11,434},{11,11,228},{11,11,426},{13,11,231},{18,11,106},{148,11,87} +,{7,10,354},{10,10,410},{139,10,815},{6,0,367},{7,10,670},{7,10,1327},{8,10,411} +,{8,10,435},{9,10,653},{9,10,740},{10,10,385},{11,10,222},{11,10,324},{11,10,829 +},{140,10,611},{7,0,1174},{6,10,166},{135,10,374},{146,0,121},{132,0,828},{5,11, +231},{138,11,509},{7,11,601},{9,11,277},{9,11,674},{10,11,178},{10,11,257},{10, +11,418},{11,11,531},{11,11,544},{11,11,585},{12,11,113},{12,11,475},{13,11,99},{ +142,11,428},{134,0,1541},{135,11,1779},{5,0,343},{134,10,398},{135,10,50},{135, +11,1683},{4,0,440},{7,0,57},{8,0,167},{8,0,375},{9,0,82},{9,0,561},{9,0,744},{10 +,0,620},{137,11,744},{134,0,926},{6,10,517},{7,10,1159},{10,10,621},{139,10,192} +,{137,0,827},{8,0,194},{136,0,756},{10,10,223},{139,10,645},{7,10,64},{136,10, +245},{4,11,399},{5,11,119},{5,11,494},{7,11,751},{137,11,556},{132,0,808},{135,0 +,22},{7,10,1763},{140,10,310},{5,0,639},{7,0,1249},{11,0,896},{134,11,584},{134, +0,1614},{135,0,860},{135,11,1121},{5,10,129},{6,10,61},{135,10,947},{4,0,102},{7 +,0,815},{7,0,1699},{139,0,964},{13,10,505},{141,10,506},{139,10,1000},{132,11, +679},{132,0,899},{132,0,569},{5,11,694},{137,11,714},{136,0,795},{6,0,2045},{139 +,11,7},{6,0,52},{9,0,104},{9,0,559},{12,0,308},{147,0,87},{4,0,301},{132,0,604}, +{133,10,637},{136,0,779},{5,11,143},{5,11,769},{6,11,1760},{7,11,682},{7,11,1992 +},{136,11,736},{137,10,590},{147,0,32},{137,11,527},{5,10,280},{135,10,1226},{ +134,0,494},{6,0,677},{6,0,682},{134,0,1044},{133,10,281},{135,10,1064},{7,0,508} +,{133,11,860},{6,11,422},{7,11,0},{7,11,1544},{9,11,577},{11,11,990},{12,11,141} +,{12,11,453},{13,11,47},{141,11,266},{134,0,1014},{5,11,515},{137,11,131},{134,0 +,957},{132,11,646},{6,0,310},{7,0,1849},{8,0,72},{8,0,272},{8,0,431},{9,0,12},{9 +,0,376},{10,0,563},{10,0,630},{10,0,796},{10,0,810},{11,0,367},{11,0,599},{11,0, +686},{140,0,672},{7,0,570},{4,11,396},{7,10,120},{7,11,728},{8,10,489},{9,11,117 +},{9,10,319},{10,10,820},{11,10,1004},{12,10,379},{12,10,679},{13,10,117},{13,11 +,202},{13,10,412},{14,10,25},{15,10,52},{15,10,161},{16,10,47},{20,11,51},{149, +10,2},{6,11,121},{6,11,124},{6,11,357},{7,11,1138},{7,11,1295},{8,11,162},{139, +11,655},{8,0,449},{4,10,937},{5,10,801},{136,11,449},{139,11,958},{6,0,181},{7,0 +,537},{8,0,64},{9,0,127},{10,0,496},{12,0,510},{141,0,384},{138,11,253},{4,0,244 +},{135,0,233},{133,11,237},{132,10,365},{6,0,1650},{10,0,702},{139,0,245},{5,10, +7},{139,10,774},{13,0,463},{20,0,49},{13,11,463},{148,11,49},{4,10,734},{5,10, +662},{134,10,430},{4,10,746},{135,10,1090},{5,10,360},{136,10,237},{137,0,338},{ +143,11,10},{7,11,571},{138,11,366},{134,0,1279},{9,11,513},{10,11,22},{10,11,39} +,{12,11,122},{140,11,187},{133,0,896},{146,0,178},{134,0,695},{137,0,808},{134, +11,587},{7,11,107},{7,11,838},{8,11,550},{138,11,401},{7,0,1117},{136,0,539},{4, +10,277},{5,10,608},{6,10,493},{7,10,457},{140,10,384},{133,11,768},{12,0,257},{7 +,10,27},{135,10,316},{140,0,1003},{4,0,207},{5,0,586},{5,0,676},{6,0,448},{8,0, +244},{11,0,1},{13,0,3},{16,0,54},{17,0,4},{18,0,13},{133,10,552},{4,10,401},{137 +,10,264},{5,0,516},{7,0,1883},{135,11,1883},{12,0,960},{132,11,894},{5,0,4},{5,0 +,810},{6,0,13},{6,0,538},{6,0,1690},{6,0,1726},{7,0,499},{7,0,1819},{8,0,148},{8 +,0,696},{8,0,791},{12,0,125},{143,0,9},{135,0,1268},{11,0,30},{14,0,315},{9,10, +543},{10,10,524},{12,10,524},{16,10,18},{20,10,26},{148,10,65},{6,0,748},{4,10, +205},{5,10,623},{7,10,104},{136,10,519},{11,0,542},{139,0,852},{140,0,6},{132,0, +848},{7,0,1385},{11,0,582},{11,0,650},{11,0,901},{11,0,949},{12,0,232},{12,0,236 +},{13,0,413},{13,0,501},{18,0,116},{7,10,579},{9,10,41},{9,10,244},{9,10,669},{ +10,10,5},{11,10,861},{11,10,951},{139,10,980},{4,0,945},{6,0,1811},{6,0,1845},{6 +,0,1853},{6,0,1858},{8,0,862},{12,0,782},{12,0,788},{18,0,160},{148,0,117},{132, +10,717},{4,0,925},{5,0,803},{8,0,698},{138,0,828},{134,0,1416},{132,0,610},{139, +0,992},{6,0,878},{134,0,1477},{135,0,1847},{138,11,531},{137,11,539},{134,11,272 +},{133,0,383},{134,0,1404},{132,10,489},{4,11,9},{5,11,128},{7,11,368},{11,11, +480},{148,11,3},{136,0,986},{9,0,660},{138,0,347},{135,10,892},{136,11,682},{7,0 +,572},{9,0,592},{11,0,680},{12,0,356},{140,0,550},{7,0,1411},{138,11,527},{4,11, +2},{7,11,545},{135,11,894},{137,10,473},{11,0,64},{7,11,481},{7,10,819},{9,10,26 +},{9,10,392},{9,11,792},{10,10,152},{10,10,226},{12,10,276},{12,10,426},{12,10, +589},{13,10,460},{15,10,97},{19,10,48},{148,10,104},{135,10,51},{136,11,445},{ +136,11,646},{135,0,606},{132,10,674},{6,0,1829},{134,0,1830},{132,10,770},{5,10, +79},{7,10,1027},{7,10,1477},{139,10,52},{5,11,530},{142,11,113},{134,10,1666},{7 +,0,748},{139,0,700},{134,10,195},{133,10,789},{9,0,87},{10,0,365},{4,10,251},{4, +10,688},{7,10,513},{135,10,1284},{136,11,111},{133,0,127},{6,0,198},{140,0,83},{ +133,11,556},{133,10,889},{4,10,160},{5,10,330},{7,10,1434},{136,10,174},{5,0,276 +},{6,0,55},{7,0,1369},{138,0,864},{8,11,16},{140,11,568},{6,0,1752},{136,0,726}, +{135,0,1066},{133,0,764},{6,11,186},{137,11,426},{11,0,683},{139,11,683},{6,0, +309},{7,0,331},{138,0,550},{133,10,374},{6,0,1212},{6,0,1852},{7,0,1062},{8,0, +874},{8,0,882},{138,0,936},{132,11,585},{134,0,1364},{7,0,986},{133,10,731},{6,0 +,723},{6,0,1408},{138,0,381},{135,0,1573},{134,0,1025},{4,10,626},{5,10,642},{6, +10,425},{10,10,202},{139,10,141},{4,11,93},{5,11,252},{6,11,229},{7,11,291},{9, +11,550},{139,11,644},{137,11,749},{137,11,162},{132,11,381},{135,0,1559},{6,0, +194},{7,0,133},{10,0,493},{10,0,570},{139,0,664},{5,0,24},{5,0,569},{6,0,3},{6,0 +,119},{6,0,143},{6,0,440},{7,0,295},{7,0,599},{7,0,1686},{7,0,1854},{8,0,424},{9 +,0,43},{9,0,584},{9,0,760},{10,0,148},{10,0,328},{11,0,159},{11,0,253},{11,0,506 +},{12,0,487},{140,0,531},{6,0,661},{134,0,1517},{136,10,835},{151,10,17},{5,0,14 +},{5,0,892},{6,0,283},{7,0,234},{136,0,537},{139,0,541},{4,0,126},{8,0,635},{147 +,0,34},{4,0,316},{4,0,495},{135,0,1561},{4,11,187},{5,11,184},{5,11,690},{7,11, +1869},{138,11,756},{139,11,783},{4,0,998},{137,0,861},{136,0,1009},{139,11,292}, +{5,11,21},{6,11,77},{6,11,157},{7,11,974},{7,11,1301},{7,11,1339},{7,11,1490},{7 +,11,1873},{137,11,628},{7,11,1283},{9,11,227},{9,11,499},{10,11,341},{11,11,325} +,{11,11,408},{14,11,180},{15,11,144},{18,11,47},{147,11,49},{4,0,64},{5,0,352},{ +5,0,720},{6,0,368},{139,0,359},{5,10,384},{8,10,455},{140,10,48},{5,10,264},{134 +,10,184},{7,0,1577},{10,0,304},{10,0,549},{12,0,365},{13,0,220},{13,0,240},{142, +0,33},{134,0,1107},{134,0,929},{135,0,1142},{6,0,175},{137,0,289},{5,0,432},{133 +,0,913},{6,0,279},{7,0,219},{5,10,633},{135,10,1323},{7,0,785},{7,10,359},{8,10, +243},{140,10,175},{139,0,595},{132,10,105},{8,11,398},{9,11,681},{139,11,632},{ +140,0,80},{5,0,931},{134,0,1698},{142,11,241},{134,11,20},{134,0,1323},{11,0,526 +},{11,0,939},{141,0,290},{5,0,774},{6,0,780},{6,0,1637},{6,0,1686},{6,0,1751},{8 +,0,559},{141,0,109},{141,0,127},{7,0,1167},{11,0,934},{13,0,391},{17,0,76},{135, +11,709},{135,0,963},{6,0,260},{135,0,1484},{134,0,573},{4,10,758},{139,11,941},{ +135,10,1649},{145,11,36},{4,0,292},{137,0,580},{4,0,736},{5,0,871},{6,0,1689},{ +135,0,1944},{7,11,945},{11,11,713},{139,11,744},{134,0,1164},{135,11,937},{6,0, +1922},{9,0,982},{15,0,173},{15,0,178},{15,0,200},{18,0,189},{18,0,207},{21,0,47} +,{135,11,1652},{7,0,1695},{139,10,128},{6,0,63},{135,0,920},{133,0,793},{143,11, +134},{133,10,918},{5,0,67},{6,0,62},{6,0,374},{135,0,1391},{9,0,790},{12,0,47},{ +4,11,579},{5,11,226},{5,11,323},{135,11,960},{10,11,784},{141,11,191},{4,0,391}, +{135,0,1169},{137,0,443},{13,11,232},{146,11,35},{132,10,340},{132,0,271},{137, +11,313},{5,11,973},{137,11,659},{134,0,1140},{6,11,135},{135,11,1176},{4,0,253}, +{5,0,544},{7,0,300},{137,0,340},{7,0,897},{5,10,985},{7,10,509},{145,10,96},{138 +,11,735},{135,10,1919},{138,0,890},{5,0,818},{134,0,1122},{5,0,53},{5,0,541},{6, +0,94},{6,0,499},{7,0,230},{139,0,321},{4,0,920},{5,0,25},{5,0,790},{6,0,457},{7, +0,853},{8,0,788},{142,11,31},{132,10,247},{135,11,314},{132,0,468},{7,0,243},{6, +10,337},{7,10,494},{8,10,27},{8,10,599},{138,10,153},{4,10,184},{5,10,390},{7,10 +,618},{7,10,1456},{139,10,710},{134,0,870},{134,0,1238},{134,0,1765},{10,0,853}, +{10,0,943},{14,0,437},{14,0,439},{14,0,443},{14,0,446},{14,0,452},{14,0,469},{14 +,0,471},{14,0,473},{16,0,93},{16,0,102},{16,0,110},{148,0,121},{4,0,605},{7,0, +518},{7,0,1282},{7,0,1918},{10,0,180},{139,0,218},{133,0,822},{4,0,634},{11,0, +916},{142,0,419},{6,11,281},{7,11,6},{8,11,282},{8,11,480},{8,11,499},{9,11,198} +,{10,11,143},{10,11,169},{10,11,211},{10,11,417},{10,11,574},{11,11,147},{11,11, +395},{12,11,75},{12,11,407},{12,11,608},{13,11,500},{142,11,251},{134,0,898},{6, +0,36},{7,0,658},{8,0,454},{150,11,48},{133,11,674},{135,11,1776},{4,11,419},{10, +10,227},{11,10,497},{11,10,709},{140,10,415},{6,10,360},{7,10,1664},{136,10,478} +,{137,0,806},{12,11,508},{14,11,102},{14,11,226},{144,11,57},{135,11,1123},{4,11 +,138},{7,11,1012},{7,11,1280},{137,11,76},{5,11,29},{140,11,638},{136,10,699},{ +134,0,1326},{132,0,104},{135,11,735},{132,10,739},{134,0,1331},{7,0,260},{135,11 +,260},{135,11,1063},{7,0,45},{9,0,542},{9,0,566},{10,0,728},{137,10,869},{4,10, +67},{5,10,422},{7,10,1037},{7,10,1289},{7,10,1555},{9,10,741},{145,10,108},{139, +0,263},{134,0,1516},{14,0,146},{15,0,42},{16,0,23},{17,0,86},{146,0,17},{138,0, +468},{136,0,1005},{4,11,17},{5,11,23},{7,11,995},{11,11,383},{11,11,437},{12,11, +460},{140,11,532},{7,0,87},{142,0,288},{138,10,96},{135,11,626},{144,10,26},{7,0 +,988},{7,0,1939},{9,0,64},{9,0,502},{12,0,22},{12,0,34},{13,0,12},{13,0,234},{ +147,0,77},{13,0,133},{8,10,203},{11,10,823},{11,10,846},{12,10,482},{13,10,277}, +{13,10,302},{13,10,464},{14,10,205},{142,10,221},{4,10,449},{133,10,718},{135,0, +141},{6,0,1842},{136,0,872},{8,11,70},{12,11,171},{141,11,272},{4,10,355},{6,10, +311},{9,10,256},{138,10,404},{132,0,619},{137,0,261},{10,11,233},{10,10,758},{ +139,11,76},{5,0,246},{8,0,189},{9,0,355},{9,0,512},{10,0,124},{10,0,453},{11,0, +143},{11,0,416},{11,0,859},{141,0,341},{134,11,442},{133,10,827},{5,10,64},{140, +10,581},{4,10,442},{7,10,1047},{7,10,1352},{135,10,1643},{134,11,1709},{5,0,678} +,{6,0,305},{7,0,775},{7,0,1065},{133,10,977},{11,11,69},{12,11,105},{12,11,117}, +{13,11,213},{14,11,13},{14,11,62},{14,11,177},{14,11,421},{15,11,19},{146,11,141 +},{137,11,309},{5,0,35},{7,0,862},{7,0,1886},{138,0,179},{136,0,285},{132,0,517} +,{7,11,976},{9,11,146},{10,11,206},{10,11,596},{13,11,218},{142,11,153},{132,10, +254},{6,0,214},{12,0,540},{4,10,275},{7,10,1219},{140,10,376},{8,0,667},{11,0, +403},{146,0,83},{12,0,74},{10,11,648},{11,11,671},{143,11,46},{135,0,125},{134, +10,1753},{133,0,761},{6,0,912},{4,11,518},{6,10,369},{6,10,502},{7,10,1036},{7, +11,1136},{8,10,348},{9,10,452},{10,10,26},{11,10,224},{11,10,387},{11,10,772},{ +12,10,95},{12,10,629},{13,10,195},{13,10,207},{13,10,241},{14,10,260},{14,10,270 +},{143,10,140},{10,0,131},{140,0,72},{132,10,269},{5,10,480},{7,10,532},{7,10, +1197},{7,10,1358},{8,10,291},{11,10,349},{142,10,396},{8,11,689},{137,11,863},{8 +,0,333},{138,0,182},{4,11,18},{7,11,145},{7,11,444},{7,11,1278},{8,11,49},{8,11, +400},{9,11,71},{9,11,250},{10,11,459},{12,11,160},{144,11,24},{14,11,35},{142,11 +,191},{135,11,1864},{135,0,1338},{148,10,15},{14,0,94},{15,0,65},{16,0,4},{16,0, +77},{16,0,80},{145,0,5},{12,11,82},{143,11,36},{133,11,1010},{133,0,449},{133,0, +646},{7,0,86},{8,0,103},{135,10,657},{7,0,2028},{138,0,641},{136,10,533},{134,0, +1},{139,11,970},{5,11,87},{7,11,313},{7,11,1103},{10,11,112},{10,11,582},{11,11, +389},{11,11,813},{12,11,385},{13,11,286},{14,11,124},{146,11,108},{6,0,869},{132 +,11,267},{6,0,277},{7,0,1274},{7,0,1386},{146,0,87},{6,0,187},{7,0,39},{7,0,1203 +},{8,0,380},{14,0,117},{149,0,28},{4,10,211},{4,10,332},{5,10,335},{6,10,238},{7 +,10,269},{7,10,811},{7,10,1797},{8,10,836},{9,10,507},{141,10,242},{4,0,785},{5, +0,368},{6,0,297},{7,0,793},{139,0,938},{7,0,464},{8,0,558},{11,0,105},{12,0,231} +,{14,0,386},{15,0,102},{148,0,75},{133,10,1009},{8,0,877},{140,0,731},{139,11, +289},{10,11,249},{139,11,209},{132,11,561},{134,0,1608},{132,11,760},{134,0,1429 +},{9,11,154},{140,11,485},{5,10,228},{6,10,203},{7,10,156},{8,10,347},{137,10, +265},{7,0,1010},{11,0,733},{11,0,759},{13,0,34},{14,0,427},{146,0,45},{7,10,1131 +},{135,10,1468},{136,11,255},{7,0,1656},{9,0,369},{10,0,338},{10,0,490},{11,0, +154},{11,0,545},{11,0,775},{13,0,77},{141,0,274},{133,11,621},{134,0,1038},{4,11 +,368},{135,11,641},{6,0,2010},{8,0,979},{8,0,985},{10,0,951},{138,0,1011},{134,0 +,1005},{19,0,121},{5,10,291},{5,10,318},{7,10,765},{9,10,389},{140,10,548},{5,0, +20},{6,0,298},{7,0,659},{137,0,219},{7,0,1440},{11,0,854},{11,0,872},{11,0,921}, +{12,0,551},{13,0,472},{142,0,367},{5,0,490},{6,0,615},{6,0,620},{135,0,683},{6,0 +,1070},{134,0,1597},{139,0,522},{132,0,439},{136,0,669},{6,0,766},{6,0,1143},{6, +0,1245},{10,10,525},{139,10,82},{9,11,92},{147,11,91},{6,0,668},{134,0,1218},{6, +11,525},{9,11,876},{140,11,284},{132,0,233},{136,0,547},{132,10,422},{5,10,355}, +{145,10,0},{6,11,300},{135,11,1515},{4,0,482},{137,10,905},{4,0,886},{7,0,346},{ +133,11,594},{133,10,865},{5,10,914},{134,10,1625},{135,0,334},{5,0,795},{6,0, +1741},{133,10,234},{135,10,1383},{6,11,1641},{136,11,820},{135,0,371},{7,11,1313 +},{138,11,660},{135,10,1312},{135,0,622},{7,0,625},{135,0,1750},{135,0,339},{4,0 +,203},{135,0,1936},{15,0,29},{16,0,38},{15,11,29},{144,11,38},{5,0,338},{135,0, +1256},{135,10,1493},{10,0,130},{6,10,421},{7,10,61},{7,10,1540},{138,10,501},{6, +11,389},{7,11,149},{9,11,142},{138,11,94},{137,10,341},{11,0,678},{12,0,307},{ +142,10,98},{6,11,8},{7,11,1881},{136,11,91},{135,0,2044},{6,0,770},{6,0,802},{6, +0,812},{7,0,311},{9,0,308},{12,0,255},{6,10,102},{7,10,72},{15,10,142},{147,10, +67},{151,10,30},{135,10,823},{135,0,1266},{135,11,1746},{135,10,1870},{4,0,400}, +{5,0,267},{135,0,232},{7,11,24},{11,11,542},{139,11,852},{135,11,1739},{4,11,503 +},{135,11,1661},{5,11,130},{7,11,1314},{9,11,610},{10,11,718},{11,11,601},{11,11 +,819},{11,11,946},{140,11,536},{10,11,149},{11,11,280},{142,11,336},{7,0,739},{ +11,0,690},{7,11,1946},{8,10,48},{8,10,88},{8,10,582},{8,10,681},{9,10,373},{9,10 +,864},{11,10,157},{11,10,843},{148,10,27},{134,0,990},{4,10,88},{5,10,137},{5,10 +,174},{5,10,777},{6,10,1664},{6,10,1725},{7,10,77},{7,10,426},{7,10,1317},{7,10, +1355},{8,10,126},{8,10,563},{9,10,523},{9,10,750},{10,10,310},{10,10,836},{11,10 +,42},{11,10,318},{11,10,731},{12,10,68},{12,10,92},{12,10,507},{12,10,692},{13, +10,81},{13,10,238},{13,10,374},{14,10,436},{18,10,138},{19,10,78},{19,10,111},{ +20,10,55},{20,10,77},{148,10,92},{141,10,418},{7,0,1831},{132,10,938},{6,0,776}, +{134,0,915},{138,10,351},{5,11,348},{6,11,522},{6,10,1668},{7,10,1499},{8,10,117 +},{9,10,314},{138,10,174},{135,10,707},{132,0,613},{133,10,403},{132,11,392},{5, +11,433},{9,11,633},{139,11,629},{133,0,763},{132,0,878},{132,0,977},{132,0,100}, +{6,0,463},{4,10,44},{5,10,311},{7,10,639},{7,10,762},{7,10,1827},{9,10,8},{9,10, +462},{148,10,83},{134,11,234},{4,10,346},{7,10,115},{9,10,180},{9,10,456},{138, +10,363},{5,0,362},{5,0,443},{6,0,318},{7,0,1019},{139,0,623},{5,0,463},{8,0,296} +,{7,11,140},{7,11,1950},{8,11,680},{11,11,817},{147,11,88},{7,11,1222},{138,11, +386},{142,0,137},{132,0,454},{7,0,1914},{6,11,5},{7,10,1051},{9,10,545},{11,11, +249},{12,11,313},{16,11,66},{145,11,26},{135,0,1527},{145,0,58},{148,11,59},{5,0 +,48},{5,0,404},{6,0,557},{7,0,458},{8,0,597},{10,0,455},{10,0,606},{11,0,49},{11 +,0,548},{12,0,476},{13,0,18},{141,0,450},{5,11,963},{134,11,1773},{133,0,729},{ +138,11,586},{5,0,442},{135,0,1984},{134,0,449},{144,0,40},{4,0,853},{7,11,180},{ +8,11,509},{136,11,792},{6,10,185},{7,10,1899},{9,10,875},{139,10,673},{134,11, +524},{12,0,227},{4,10,327},{5,10,478},{7,10,1332},{136,10,753},{6,0,1491},{5,10, +1020},{133,10,1022},{4,10,103},{133,10,401},{132,11,931},{4,10,499},{135,10,1421 +},{5,0,55},{7,0,376},{140,0,161},{133,0,450},{6,0,1174},{134,0,1562},{10,0,62},{ +13,0,400},{135,11,1837},{140,0,207},{135,0,869},{4,11,773},{5,11,618},{137,11, +756},{132,10,96},{4,0,213},{7,0,223},{8,0,80},{135,10,968},{4,11,90},{5,11,337}, +{5,11,545},{7,11,754},{9,11,186},{10,11,72},{10,11,782},{11,11,513},{11,11,577}, +{11,11,610},{11,11,889},{11,11,961},{12,11,354},{12,11,362},{12,11,461},{12,11, +595},{13,11,79},{143,11,121},{7,0,381},{7,0,806},{7,0,820},{8,0,354},{8,0,437},{ +8,0,787},{9,0,657},{10,0,58},{10,0,339},{10,0,749},{11,0,914},{12,0,162},{13,0, +75},{14,0,106},{14,0,198},{14,0,320},{14,0,413},{146,0,43},{136,0,747},{136,0, +954},{134,0,1073},{135,0,556},{7,11,151},{9,11,329},{139,11,254},{5,0,692},{134, +0,1395},{6,10,563},{137,10,224},{134,0,191},{132,0,804},{9,11,187},{10,11,36},{ +17,11,44},{146,11,64},{7,11,165},{7,11,919},{136,11,517},{4,11,506},{5,11,295},{ +7,11,1680},{15,11,14},{144,11,5},{4,0,706},{6,0,162},{7,0,1960},{136,0,831},{135 +,11,1376},{7,11,987},{9,11,688},{10,11,522},{11,11,788},{140,11,566},{150,0,35}, +{138,0,426},{135,0,1235},{135,11,1741},{7,11,389},{7,11,700},{7,11,940},{8,11, +514},{9,11,116},{9,11,535},{10,11,118},{11,11,107},{11,11,148},{11,11,922},{12, +11,254},{12,11,421},{142,11,238},{134,0,1234},{132,11,743},{4,10,910},{5,10,832} +,{135,11,1335},{141,0,96},{135,11,185},{146,0,149},{4,0,204},{137,0,902},{4,11, +784},{133,11,745},{136,0,833},{136,0,949},{7,0,366},{9,0,287},{12,0,199},{12,0, +556},{12,0,577},{5,11,81},{7,11,146},{7,11,1342},{7,11,1446},{8,11,53},{8,11,561 +},{8,11,694},{8,11,754},{9,11,97},{9,11,115},{9,11,894},{10,11,462},{10,11,813}, +{11,11,230},{11,11,657},{11,11,699},{11,11,748},{12,11,119},{12,11,200},{12,11, +283},{14,11,273},{145,11,15},{5,11,408},{137,11,747},{9,11,498},{140,11,181},{6, +0,2020},{136,0,992},{5,0,356},{135,0,224},{134,0,784},{7,0,630},{9,0,567},{11,0, +150},{11,0,444},{13,0,119},{8,10,528},{137,10,348},{134,0,539},{4,10,20},{133,10 +,616},{142,0,27},{7,11,30},{8,11,86},{8,11,315},{8,11,700},{9,11,576},{9,11,858} +,{11,11,310},{11,11,888},{11,11,904},{12,11,361},{141,11,248},{138,11,839},{134, +0,755},{134,0,1063},{7,10,1091},{135,10,1765},{134,11,428},{7,11,524},{8,11,169} +,{8,11,234},{9,11,480},{138,11,646},{139,0,814},{7,11,1462},{139,11,659},{4,10, +26},{5,10,429},{6,10,245},{7,10,704},{7,10,1379},{135,10,1474},{7,11,1205},{138, +11,637},{139,11,803},{132,10,621},{136,0,987},{4,11,266},{8,11,4},{9,11,39},{10, +11,166},{11,11,918},{12,11,635},{20,11,10},{22,11,27},{150,11,43},{4,0,235},{135 +,0,255},{4,0,194},{5,0,584},{6,0,384},{7,0,583},{10,0,761},{11,0,760},{139,0,851 +},{133,10,542},{134,0,1086},{133,10,868},{8,0,1016},{136,0,1018},{7,0,1396},{7, +11,1396},{136,10,433},{135,10,1495},{138,10,215},{141,10,124},{7,11,157},{8,11, +279},{9,11,759},{16,11,31},{16,11,39},{16,11,75},{18,11,24},{20,11,42},{152,11,1 +},{5,0,562},{134,11,604},{134,0,913},{5,0,191},{137,0,271},{4,0,470},{6,0,153},{ +7,0,1503},{7,0,1923},{10,0,701},{11,0,132},{11,0,227},{11,0,320},{11,0,436},{11, +0,525},{11,0,855},{11,0,873},{12,0,41},{12,0,286},{13,0,103},{13,0,284},{14,0, +255},{14,0,262},{15,0,117},{143,0,127},{7,0,475},{12,0,45},{147,10,112},{132,11, +567},{137,11,859},{6,0,713},{6,0,969},{6,0,1290},{134,0,1551},{133,0,327},{6,0, +552},{6,0,1292},{7,0,1754},{137,0,604},{4,0,223},{6,0,359},{11,0,3},{13,0,108},{ +14,0,89},{16,0,22},{5,11,762},{7,11,1880},{9,11,680},{139,11,798},{5,0,80},{6,0, +405},{7,0,403},{7,0,1502},{8,0,456},{9,0,487},{9,0,853},{9,0,889},{10,0,309},{11 +,0,721},{11,0,994},{12,0,430},{141,0,165},{133,11,298},{132,10,647},{134,0,2016} +,{18,10,10},{146,11,10},{4,0,453},{5,0,887},{6,0,535},{8,0,6},{8,0,543},{136,0, +826},{136,0,975},{10,0,961},{138,0,962},{138,10,220},{6,0,1891},{6,0,1893},{9,0, +916},{9,0,965},{9,0,972},{12,0,801},{12,0,859},{12,0,883},{15,0,226},{149,0,51}, +{132,10,109},{135,11,267},{7,11,92},{7,11,182},{8,11,453},{9,11,204},{11,11,950} +,{12,11,94},{12,11,644},{16,11,20},{16,11,70},{16,11,90},{147,11,55},{134,10, +1746},{6,11,71},{7,11,845},{7,11,1308},{8,11,160},{137,11,318},{5,0,101},{6,0,88 +},{7,0,263},{7,0,628},{7,0,1677},{8,0,349},{9,0,100},{10,0,677},{14,0,169},{14,0 +,302},{14,0,313},{15,0,48},{15,0,84},{7,11,237},{8,11,664},{9,11,42},{9,11,266}, +{9,11,380},{9,11,645},{10,11,177},{138,11,276},{138,11,69},{4,0,310},{7,0,708},{ +7,0,996},{9,0,795},{10,0,390},{10,0,733},{11,0,451},{12,0,249},{14,0,115},{14,0, +286},{143,0,100},{5,0,587},{4,10,40},{10,10,67},{11,10,117},{11,10,768},{139,10, +935},{6,0,1942},{7,0,512},{136,0,983},{7,10,992},{8,10,301},{9,10,722},{12,10,63 +},{13,10,29},{14,10,161},{143,10,18},{136,11,76},{139,10,923},{134,0,645},{134,0 +,851},{4,0,498},{132,11,293},{7,0,217},{8,0,140},{10,0,610},{14,11,352},{17,11, +53},{18,11,146},{18,11,152},{19,11,11},{150,11,54},{134,0,1448},{138,11,841},{ +133,0,905},{4,11,605},{7,11,518},{7,11,1282},{7,11,1918},{10,11,180},{139,11,218 +},{139,11,917},{135,10,825},{140,10,328},{4,0,456},{7,0,105},{7,0,358},{7,0,1637 +},{8,0,643},{139,0,483},{134,0,792},{6,11,96},{135,11,1426},{137,11,691},{4,11, +651},{133,11,289},{7,11,688},{8,11,35},{9,11,511},{10,11,767},{147,11,118},{150, +0,56},{5,0,243},{5,0,535},{6,10,204},{10,10,320},{10,10,583},{13,10,502},{14,10, +72},{14,10,274},{14,10,312},{14,10,344},{15,10,159},{16,10,62},{16,10,69},{17,10 +,30},{18,10,42},{18,10,53},{18,10,84},{18,10,140},{19,10,68},{19,10,85},{20,10,5 +},{20,10,45},{20,10,101},{22,10,7},{150,10,20},{4,10,558},{6,10,390},{7,10,162}, +{7,10,689},{9,10,360},{138,10,653},{146,11,23},{135,0,1748},{5,10,856},{6,10, +1672},{6,10,1757},{134,10,1781},{5,0,539},{5,0,754},{6,0,876},{132,11,704},{135, +11,1078},{5,10,92},{10,10,736},{140,10,102},{17,0,91},{5,10,590},{137,10,213},{ +134,0,1565},{6,0,91},{135,0,435},{4,0,939},{140,0,792},{134,0,1399},{4,0,16},{5, +0,316},{5,0,842},{6,0,370},{6,0,1778},{8,0,166},{11,0,812},{12,0,206},{12,0,351} +,{14,0,418},{16,0,15},{16,0,34},{18,0,3},{19,0,3},{19,0,7},{20,0,4},{21,0,21},{4 +,11,720},{133,11,306},{144,0,95},{133,11,431},{132,11,234},{135,0,551},{4,0,999} +,{6,0,1966},{134,0,2042},{7,0,619},{10,0,547},{11,0,122},{12,0,601},{15,0,7},{ +148,0,20},{5,11,464},{6,11,236},{7,11,276},{7,11,696},{7,11,914},{7,11,1108},{7, +11,1448},{9,11,15},{9,11,564},{10,11,14},{12,11,565},{13,11,449},{14,11,53},{15, +11,13},{16,11,64},{145,11,41},{6,0,884},{6,0,1019},{134,0,1150},{6,11,1767},{12, +11,194},{145,11,107},{136,10,503},{133,11,840},{7,0,671},{134,10,466},{132,0,888 +},{4,0,149},{138,0,368},{4,0,154},{7,0,1134},{136,0,105},{135,0,983},{9,11,642}, +{11,11,236},{142,11,193},{4,0,31},{6,0,429},{7,0,962},{9,0,458},{139,0,691},{6,0 +,643},{134,0,1102},{132,0,312},{4,11,68},{5,11,634},{6,11,386},{7,11,794},{8,11, +273},{9,11,563},{10,11,105},{10,11,171},{11,11,94},{139,11,354},{133,0,740},{135 +,0,1642},{4,11,95},{7,11,416},{8,11,211},{139,11,830},{132,0,236},{138,10,241},{ +7,11,731},{13,11,20},{143,11,11},{5,0,836},{5,0,857},{6,0,1680},{135,0,59},{10,0 +,68},{11,0,494},{152,11,6},{4,0,81},{139,0,867},{135,0,795},{133,11,689},{4,0, +1001},{5,0,282},{6,0,1932},{6,0,1977},{6,0,1987},{6,0,1992},{8,0,650},{8,0,919}, +{8,0,920},{8,0,923},{8,0,926},{8,0,927},{8,0,931},{8,0,939},{8,0,947},{8,0,956}, +{8,0,997},{9,0,907},{10,0,950},{10,0,953},{10,0,954},{10,0,956},{10,0,958},{10,0 +,959},{10,0,964},{10,0,970},{10,0,972},{10,0,973},{10,0,975},{10,0,976},{10,0, +980},{10,0,981},{10,0,984},{10,0,988},{10,0,990},{10,0,995},{10,0,999},{10,0, +1002},{10,0,1003},{10,0,1005},{10,0,1006},{10,0,1008},{10,0,1009},{10,0,1012},{ +10,0,1014},{10,0,1015},{10,0,1019},{10,0,1020},{10,0,1022},{12,0,959},{12,0,961} +,{12,0,962},{12,0,963},{12,0,964},{12,0,965},{12,0,967},{12,0,968},{12,0,969},{ +12,0,970},{12,0,971},{12,0,972},{12,0,973},{12,0,974},{12,0,975},{12,0,976},{12, +0,977},{12,0,979},{12,0,981},{12,0,982},{12,0,983},{12,0,984},{12,0,985},{12,0, +986},{12,0,987},{12,0,989},{12,0,990},{12,0,992},{12,0,993},{12,0,995},{12,0,998 +},{12,0,999},{12,0,1000},{12,0,1001},{12,0,1002},{12,0,1004},{12,0,1005},{12,0, +1006},{12,0,1007},{12,0,1008},{12,0,1009},{12,0,1010},{12,0,1011},{12,0,1012},{ +12,0,1014},{12,0,1015},{12,0,1016},{12,0,1017},{12,0,1018},{12,0,1019},{12,0, +1022},{12,0,1023},{14,0,475},{14,0,477},{14,0,478},{14,0,479},{14,0,480},{14,0, +482},{14,0,483},{14,0,484},{14,0,485},{14,0,486},{14,0,487},{14,0,488},{14,0,489 +},{14,0,490},{14,0,491},{14,0,492},{14,0,493},{14,0,494},{14,0,495},{14,0,496},{ +14,0,497},{14,0,498},{14,0,499},{14,0,500},{14,0,501},{14,0,502},{14,0,503},{14, +0,504},{14,0,506},{14,0,507},{14,0,508},{14,0,509},{14,0,510},{14,0,511},{16,0, +113},{16,0,114},{16,0,115},{16,0,117},{16,0,118},{16,0,119},{16,0,121},{16,0,122 +},{16,0,123},{16,0,124},{16,0,125},{16,0,126},{16,0,127},{18,0,242},{18,0,243},{ +18,0,244},{18,0,245},{18,0,248},{18,0,249},{18,0,250},{18,0,251},{18,0,252},{18, +0,253},{18,0,254},{18,0,255},{20,0,125},{20,0,126},{148,0,127},{7,11,1717},{7,11 +,1769},{138,11,546},{7,11,1127},{7,11,1572},{10,11,297},{10,11,422},{11,11,764}, +{11,11,810},{12,11,264},{13,11,102},{13,11,300},{13,11,484},{14,11,147},{14,11, +229},{17,11,71},{18,11,118},{147,11,120},{6,0,1148},{134,0,1586},{132,0,775},{ +135,10,954},{133,11,864},{133,11,928},{138,11,189},{135,10,1958},{6,10,549},{8, +10,34},{8,10,283},{9,10,165},{138,10,475},{5,10,652},{5,10,701},{135,10,449},{ +135,11,695},{4,10,655},{7,10,850},{17,10,75},{146,10,137},{140,11,682},{133,11, +523},{8,0,970},{136,10,670},{136,11,555},{7,11,76},{8,11,44},{9,11,884},{10,11, +580},{11,11,399},{11,11,894},{15,11,122},{18,11,144},{147,11,61},{6,10,159},{6, +10,364},{7,10,516},{7,10,1439},{137,10,518},{4,0,71},{5,0,376},{7,0,119},{138,0, +665},{141,10,151},{11,0,827},{14,0,34},{143,0,148},{133,11,518},{4,0,479},{135, +11,1787},{135,11,1852},{135,10,993},{7,0,607},{136,0,99},{134,0,1960},{132,0,793 +},{4,0,41},{5,0,74},{7,0,1627},{11,0,871},{140,0,619},{7,0,94},{11,0,329},{11,0, +965},{12,0,241},{14,0,354},{15,0,22},{148,0,63},{7,10,501},{9,10,111},{10,10,141 +},{11,10,332},{13,10,43},{13,10,429},{14,10,130},{14,10,415},{145,10,102},{9,0, +209},{137,0,300},{134,0,1497},{138,11,255},{4,11,934},{5,11,138},{136,11,610},{ +133,0,98},{6,0,1316},{10,11,804},{138,11,832},{8,11,96},{9,11,36},{10,11,607},{ +11,11,423},{11,11,442},{12,11,309},{14,11,199},{15,11,90},{145,11,110},{132,0, +463},{5,10,149},{136,10,233},{133,10,935},{4,11,652},{8,11,320},{9,11,13},{9,11, +398},{9,11,727},{10,11,75},{10,11,184},{10,11,230},{10,11,564},{10,11,569},{11, +11,973},{12,11,70},{12,11,189},{13,11,57},{13,11,257},{22,11,6},{150,11,16},{142 +,0,291},{12,10,582},{146,10,131},{136,10,801},{133,0,984},{145,11,116},{4,11,692 +},{133,11,321},{4,0,182},{6,0,205},{135,0,220},{4,0,42},{9,0,205},{9,0,786},{138 +,0,659},{6,0,801},{11,11,130},{140,11,609},{132,0,635},{5,11,345},{135,11,1016}, +{139,0,533},{132,0,371},{4,0,272},{135,0,836},{6,0,1282},{135,11,1100},{5,0,825} +,{134,0,1640},{135,11,1325},{133,11,673},{4,11,287},{133,11,1018},{135,0,357},{6 +,0,467},{137,0,879},{7,0,317},{135,0,569},{6,0,924},{134,0,1588},{5,11,34},{5,10 +,406},{10,11,724},{12,11,444},{13,11,354},{18,11,32},{23,11,24},{23,11,31},{152, +11,5},{6,0,1795},{6,0,1835},{6,0,1836},{6,0,1856},{8,0,844},{8,0,849},{8,0,854}, +{8,0,870},{8,0,887},{10,0,852},{138,0,942},{6,10,69},{135,10,117},{137,0,307},{4 +,0,944},{6,0,1799},{6,0,1825},{10,0,848},{10,0,875},{10,0,895},{10,0,899},{10,0, +902},{140,0,773},{11,0,43},{13,0,72},{141,0,142},{135,10,1830},{134,11,382},{4, +10,432},{135,10,824},{132,11,329},{7,0,1820},{139,11,124},{133,10,826},{133,0, +525},{132,11,906},{7,11,1940},{136,11,366},{138,11,10},{4,11,123},{4,11,649},{5, +11,605},{7,11,1509},{136,11,36},{6,0,110},{135,0,1681},{133,0,493},{133,11,767}, +{4,0,174},{135,0,911},{138,11,786},{8,0,417},{137,0,782},{133,10,1000},{7,0,733} +,{137,0,583},{4,10,297},{6,10,529},{7,10,152},{7,10,713},{7,10,1845},{8,10,710}, +{8,10,717},{12,10,639},{140,10,685},{4,0,32},{5,0,215},{6,0,269},{7,0,1782},{7,0 +,1892},{10,0,16},{11,0,822},{11,0,954},{141,0,481},{4,11,273},{5,11,658},{133,11 +,995},{136,0,477},{134,11,72},{135,11,1345},{5,0,308},{7,0,1088},{4,10,520},{135 +,10,575},{133,11,589},{5,0,126},{8,0,297},{9,0,366},{140,0,374},{7,0,1551},{139, +0,361},{5,11,117},{6,11,514},{6,11,541},{7,11,1164},{7,11,1436},{8,11,220},{8,11 +,648},{10,11,688},{139,11,560},{133,11,686},{4,0,946},{6,0,1807},{8,0,871},{10,0 +,854},{10,0,870},{10,0,888},{10,0,897},{10,0,920},{12,0,722},{12,0,761},{12,0, +763},{12,0,764},{14,0,454},{14,0,465},{16,0,107},{18,0,167},{18,0,168},{146,0, +172},{132,0,175},{135,0,1307},{132,0,685},{135,11,1834},{133,0,797},{6,0,745},{6 +,0,858},{134,0,963},{133,0,565},{5,10,397},{6,10,154},{7,11,196},{7,10,676},{8, +10,443},{8,10,609},{9,10,24},{9,10,325},{10,10,35},{10,11,765},{11,11,347},{11, +10,535},{11,11,552},{11,11,576},{11,10,672},{11,11,790},{11,10,1018},{12,11,263} +,{12,10,637},{13,11,246},{13,11,270},{13,11,395},{14,11,74},{14,11,176},{14,11, +190},{14,11,398},{14,11,412},{15,11,32},{15,11,63},{16,10,30},{16,11,88},{147,11 +,105},{13,11,84},{141,11,122},{4,0,252},{7,0,1068},{10,0,434},{11,0,228},{11,0, +426},{13,0,231},{18,0,106},{148,0,87},{137,0,826},{4,11,589},{139,11,282},{5,11, +381},{135,11,1792},{132,0,791},{5,0,231},{10,0,509},{133,10,981},{7,0,601},{9,0, +277},{9,0,674},{10,0,178},{10,0,418},{10,0,571},{11,0,531},{12,0,113},{12,0,475} +,{13,0,99},{142,0,428},{4,10,56},{7,11,616},{7,10,1791},{8,10,607},{8,10,651},{ +10,11,413},{11,10,465},{11,10,835},{12,10,337},{141,10,480},{7,0,1591},{144,0,43 +},{9,10,158},{138,10,411},{135,0,1683},{8,0,289},{11,0,45},{12,0,278},{140,0,537 +},{6,11,120},{7,11,1188},{7,11,1710},{8,11,286},{9,11,667},{11,11,592},{139,11, +730},{136,10,617},{135,0,1120},{135,11,1146},{139,10,563},{4,11,352},{4,10,369}, +{135,11,687},{143,11,38},{4,0,399},{5,0,119},{5,0,494},{7,0,751},{9,0,556},{14, +11,179},{15,11,151},{150,11,11},{4,11,192},{5,11,49},{6,11,200},{6,11,293},{6,11 +,1696},{135,11,488},{4,0,398},{133,0,660},{7,0,1030},{134,10,622},{135,11,595},{ +141,0,168},{132,11,147},{7,0,973},{10,10,624},{142,10,279},{132,10,363},{132,0, +642},{133,11,934},{134,0,1615},{7,11,505},{135,11,523},{7,0,594},{7,0,851},{7,0, +1858},{9,0,411},{9,0,574},{9,0,666},{9,0,737},{10,0,346},{10,0,712},{11,0,246},{ +11,0,432},{11,0,517},{11,0,647},{11,0,679},{11,0,727},{12,0,304},{12,0,305},{12, +0,323},{12,0,483},{12,0,572},{12,0,593},{12,0,602},{13,0,95},{13,0,101},{13,0, +171},{13,0,315},{13,0,378},{13,0,425},{13,0,475},{14,0,63},{14,0,380},{14,0,384} +,{15,0,133},{18,0,112},{148,0,72},{135,0,1093},{132,0,679},{8,0,913},{10,0,903}, +{10,0,915},{12,0,648},{12,0,649},{14,0,455},{16,0,112},{138,11,438},{137,0,203}, +{134,10,292},{134,0,1492},{7,0,1374},{8,0,540},{5,10,177},{6,10,616},{7,10,827}, +{9,10,525},{138,10,656},{135,0,1486},{9,0,714},{138,10,31},{136,0,825},{134,0, +1511},{132,11,637},{134,0,952},{4,10,161},{133,10,631},{5,0,143},{5,0,769},{6,0, +1760},{7,0,682},{7,0,1992},{136,0,736},{132,0,700},{134,0,1540},{132,11,777},{9, +11,867},{138,11,837},{7,0,1557},{135,10,1684},{133,0,860},{6,0,422},{7,0,0},{7,0 +,1544},{9,0,605},{11,0,990},{12,0,235},{12,0,453},{13,0,47},{13,0,266},{9,10,469 +},{9,10,709},{12,10,512},{14,10,65},{145,10,12},{11,0,807},{10,10,229},{11,10,73 +},{139,10,376},{6,11,170},{7,11,1080},{8,11,395},{8,11,487},{11,11,125},{141,11, +147},{5,0,515},{137,0,131},{7,0,1605},{11,0,962},{146,0,139},{132,0,646},{4,0, +396},{7,0,728},{9,0,117},{13,0,202},{148,0,51},{6,0,121},{6,0,124},{6,0,357},{7, +0,1138},{7,0,1295},{8,0,162},{8,0,508},{11,0,655},{4,11,535},{6,10,558},{7,10, +651},{8,11,618},{9,10,0},{10,10,34},{139,10,1008},{135,11,1245},{138,0,357},{150 +,11,23},{133,0,237},{135,0,1784},{7,10,1832},{138,10,374},{132,0,713},{132,11,46 +},{6,0,1536},{10,0,348},{5,11,811},{6,11,1679},{6,11,1714},{135,11,2032},{11,11, +182},{142,11,195},{6,0,523},{7,0,738},{7,10,771},{7,10,1731},{9,10,405},{138,10, +421},{7,11,1458},{9,11,407},{139,11,15},{6,11,34},{7,11,69},{7,11,640},{7,11, +1089},{8,11,708},{8,11,721},{9,11,363},{9,11,643},{10,11,628},{148,11,98},{133,0 +,434},{135,0,1877},{7,0,571},{138,0,366},{5,10,881},{133,10,885},{9,0,513},{10,0 +,25},{10,0,39},{12,0,122},{140,0,187},{132,0,580},{5,10,142},{134,10,546},{132, +11,462},{137,0,873},{5,10,466},{11,10,571},{12,10,198},{13,10,283},{14,10,186},{ +15,10,21},{143,10,103},{7,0,171},{4,10,185},{5,10,257},{5,10,839},{5,10,936},{9, +10,399},{10,10,258},{10,10,395},{10,10,734},{11,10,1014},{12,10,23},{13,10,350}, +{14,10,150},{147,10,6},{134,0,625},{7,0,107},{7,0,838},{8,0,550},{138,0,401},{5, +11,73},{6,11,23},{134,11,338},{4,0,943},{6,0,1850},{12,0,713},{142,0,434},{11,0, +588},{11,0,864},{11,0,936},{11,0,968},{12,0,73},{12,0,343},{12,0,394},{13,0,275} +,{14,0,257},{15,0,160},{7,10,404},{7,10,1377},{7,10,1430},{7,10,2017},{8,10,149} +,{8,10,239},{8,10,512},{8,10,793},{8,10,818},{9,10,474},{9,10,595},{10,10,122},{ +10,10,565},{10,10,649},{10,10,783},{11,10,239},{11,10,295},{11,10,447},{11,10, +528},{11,10,639},{11,10,800},{12,10,25},{12,10,157},{12,10,316},{12,10,390},{12, +10,391},{12,10,395},{12,10,478},{12,10,503},{12,10,592},{12,10,680},{13,10,50},{ +13,10,53},{13,10,132},{13,10,198},{13,10,322},{13,10,415},{13,10,511},{14,10,71} +,{14,10,395},{15,10,71},{15,10,136},{17,10,123},{18,10,93},{147,10,58},{133,0, +768},{11,0,103},{142,0,0},{136,10,712},{132,0,799},{132,0,894},{7,11,725},{8,11, +498},{139,11,268},{135,11,1798},{135,11,773},{141,11,360},{4,10,377},{152,10,13} +,{135,0,1673},{132,11,583},{134,0,1052},{133,11,220},{140,11,69},{132,11,544},{4 +,10,180},{135,10,1906},{134,0,272},{4,0,441},{134,0,1421},{4,0,9},{5,0,128},{7,0 +,368},{11,0,480},{148,0,3},{5,11,176},{6,11,437},{6,11,564},{11,11,181},{141,11, +183},{132,10,491},{7,0,1182},{141,11,67},{6,0,1346},{4,10,171},{138,10,234},{4, +10,586},{7,10,1186},{138,10,631},{136,0,682},{134,0,1004},{15,0,24},{143,11,24}, +{134,0,968},{4,0,2},{6,0,742},{6,0,793},{7,0,545},{7,0,894},{9,10,931},{10,10, +334},{148,10,71},{136,11,600},{133,10,765},{9,0,769},{140,0,185},{4,11,790},{5, +11,273},{134,11,394},{7,0,474},{137,0,578},{4,11,135},{6,11,127},{7,11,1185},{7, +11,1511},{8,11,613},{11,11,5},{12,11,133},{12,11,495},{12,11,586},{14,11,385},{ +15,11,118},{17,11,20},{146,11,98},{133,10,424},{5,0,530},{142,0,113},{6,11,230}, +{7,11,961},{7,11,1085},{136,11,462},{7,11,1954},{137,11,636},{136,10,714},{149, +11,6},{135,10,685},{9,10,420},{10,10,269},{10,10,285},{10,10,576},{11,10,397},{ +13,10,175},{145,10,90},{132,10,429},{5,0,556},{5,11,162},{136,11,68},{132,11,654 +},{4,11,156},{7,11,998},{7,11,1045},{7,11,1860},{9,11,48},{9,11,692},{11,11,419} +,{139,11,602},{6,0,1317},{8,0,16},{9,0,825},{12,0,568},{7,11,1276},{8,11,474},{ +137,11,652},{18,0,97},{7,10,18},{7,10,699},{7,10,1966},{8,10,752},{9,10,273},{9, +10,412},{9,10,703},{10,10,71},{10,10,427},{138,10,508},{10,0,703},{7,11,1454},{ +138,11,703},{4,10,53},{5,10,186},{135,10,752},{134,0,892},{134,0,1571},{8,10,575 +},{10,10,289},{139,10,319},{6,0,186},{137,0,426},{134,0,1101},{132,10,675},{132, +0,585},{6,0,1870},{137,0,937},{152,11,10},{9,11,197},{10,11,300},{12,11,473},{13 +,11,90},{141,11,405},{4,0,93},{5,0,252},{6,0,229},{7,0,291},{9,0,550},{139,0,644 +},{137,0,749},{9,0,162},{6,10,209},{8,10,468},{9,10,210},{11,10,36},{12,10,28},{ +12,10,630},{13,10,21},{13,10,349},{14,10,7},{145,10,13},{132,0,381},{132,11,606} +,{4,10,342},{135,10,1179},{7,11,1587},{7,11,1707},{10,11,528},{139,11,504},{12, +11,39},{13,11,265},{141,11,439},{4,10,928},{133,10,910},{7,10,1838},{7,11,1978}, +{136,11,676},{6,0,762},{6,0,796},{134,0,956},{4,10,318},{4,10,496},{7,10,856},{ +139,10,654},{137,11,242},{4,11,361},{133,11,315},{132,11,461},{132,11,472},{132, +0,857},{5,0,21},{6,0,77},{6,0,157},{7,0,974},{7,0,1301},{7,0,1339},{7,0,1490},{7 +,0,1873},{9,0,628},{7,10,915},{8,10,247},{147,10,0},{4,10,202},{5,10,382},{6,10, +454},{7,10,936},{7,10,1803},{8,10,758},{9,10,375},{9,10,895},{10,10,743},{10,10, +792},{11,10,978},{11,10,1012},{142,10,109},{7,11,617},{10,11,498},{11,11,501},{ +12,11,16},{140,11,150},{7,10,1150},{7,10,1425},{7,10,1453},{10,11,747},{140,10, +513},{133,11,155},{11,0,919},{141,0,409},{138,10,791},{10,0,633},{139,11,729},{7 +,11,163},{8,11,319},{9,11,402},{10,11,24},{10,11,681},{11,11,200},{11,11,567},{ +12,11,253},{12,11,410},{142,11,219},{5,11,475},{7,11,1780},{9,11,230},{11,11,297 +},{11,11,558},{14,11,322},{147,11,76},{7,0,332},{6,10,445},{137,10,909},{135,11, +1956},{136,11,274},{134,10,578},{135,0,1489},{135,11,1848},{5,11,944},{134,11, +1769},{132,11,144},{136,10,766},{4,0,832},{135,10,541},{8,0,398},{9,0,681},{139, +0,632},{136,0,645},{9,0,791},{10,0,93},{16,0,13},{17,0,23},{18,0,135},{19,0,12}, +{20,0,1},{20,0,12},{148,0,14},{6,11,247},{137,11,555},{134,0,20},{132,0,800},{ +135,0,1841},{139,10,983},{137,10,768},{132,10,584},{141,11,51},{6,0,1993},{4,11, +620},{138,11,280},{136,0,769},{11,0,290},{11,0,665},{7,11,1810},{11,11,866},{12, +11,103},{13,11,495},{17,11,67},{147,11,74},{134,0,1426},{139,0,60},{4,10,326},{ +135,10,1770},{7,0,1874},{9,0,641},{132,10,226},{6,0,644},{5,10,426},{8,10,30},{9 +,10,2},{11,10,549},{147,10,122},{5,11,428},{138,11,442},{135,11,1871},{135,0, +1757},{147,10,117},{135,0,937},{135,0,1652},{6,0,654},{134,0,1476},{133,11,99},{ +135,0,527},{132,10,345},{4,10,385},{4,11,397},{7,10,265},{135,10,587},{4,0,579}, +{5,0,226},{5,0,323},{135,0,960},{134,0,1486},{8,11,502},{144,11,9},{4,10,347},{5 +,10,423},{5,10,996},{135,10,1329},{7,11,727},{146,11,73},{4,11,485},{7,11,353},{ +7,10,1259},{7,11,1523},{9,10,125},{139,10,65},{6,0,325},{5,10,136},{6,11,366},{7 +,11,1384},{7,11,1601},{136,10,644},{138,11,160},{6,0,1345},{137,11,282},{18,0,91 +},{147,0,70},{136,0,404},{4,11,157},{133,11,471},{133,0,973},{6,0,135},{135,0, +1176},{8,11,116},{11,11,551},{142,11,159},{4,0,549},{4,10,433},{133,10,719},{136 +,0,976},{5,11,160},{7,11,363},{7,11,589},{10,11,170},{141,11,55},{144,0,21},{144 +,0,51},{135,0,314},{135,10,1363},{4,11,108},{7,11,405},{10,11,491},{139,11,498}, +{146,0,4},{4,10,555},{8,10,536},{10,10,288},{139,10,1005},{135,11,1005},{6,0,281 +},{7,0,6},{8,0,282},{8,0,480},{8,0,499},{9,0,198},{10,0,143},{10,0,169},{10,0, +211},{10,0,417},{10,0,574},{11,0,147},{11,0,395},{12,0,75},{12,0,407},{12,0,608} +,{13,0,500},{142,0,251},{6,0,1093},{6,0,1405},{9,10,370},{138,10,90},{4,11,926}, +{133,11,983},{135,0,1776},{134,0,1528},{132,0,419},{132,11,538},{6,11,294},{7,11 +,1267},{136,11,624},{135,11,1772},{138,11,301},{4,10,257},{135,10,2031},{4,0,138 +},{7,0,1012},{7,0,1280},{9,0,76},{135,10,1768},{132,11,757},{5,0,29},{140,0,638} +,{7,11,655},{135,11,1844},{7,0,1418},{6,11,257},{135,11,1522},{8,11,469},{138,11 +,47},{142,11,278},{6,10,83},{6,10,1733},{135,10,1389},{11,11,204},{11,11,243},{ +140,11,293},{135,11,1875},{6,0,1710},{135,0,2038},{137,11,299},{4,0,17},{5,0,23} +,{7,0,995},{11,0,383},{11,0,437},{12,0,460},{140,0,532},{133,0,862},{137,10,696} +,{6,0,592},{138,0,946},{138,11,599},{7,10,1718},{9,10,95},{9,10,274},{10,10,279} +,{10,10,317},{10,10,420},{11,10,303},{11,10,808},{12,10,134},{12,10,367},{13,10, +149},{13,10,347},{14,10,349},{14,10,406},{18,10,22},{18,10,89},{18,10,122},{147, +10,47},{8,0,70},{12,0,171},{141,0,272},{133,10,26},{132,10,550},{137,0,812},{10, +0,233},{139,0,76},{134,0,988},{134,0,442},{136,10,822},{7,0,896},{4,10,902},{5, +10,809},{134,10,122},{5,11,150},{7,11,106},{8,11,603},{9,11,593},{9,11,634},{10, +11,44},{10,11,173},{11,11,462},{11,11,515},{13,11,216},{13,11,288},{142,11,400}, +{136,0,483},{135,10,262},{6,0,1709},{133,10,620},{4,10,34},{5,10,574},{7,10,279} +,{7,10,1624},{136,10,601},{137,10,170},{147,0,119},{12,11,108},{141,11,291},{11, +0,69},{12,0,105},{12,0,117},{13,0,213},{14,0,13},{14,0,62},{14,0,177},{14,0,421} +,{15,0,19},{146,0,141},{137,0,309},{11,11,278},{142,11,73},{7,0,608},{7,0,976},{ +9,0,146},{10,0,206},{10,0,596},{13,0,218},{142,0,153},{133,10,332},{6,10,261},{8 +,10,182},{139,10,943},{4,11,493},{144,11,55},{134,10,1721},{132,0,768},{4,10,933 +},{133,10,880},{7,11,555},{7,11,1316},{7,11,1412},{7,11,1839},{9,11,192},{9,11, +589},{11,11,241},{11,11,676},{11,11,811},{11,11,891},{12,11,140},{12,11,346},{12 +,11,479},{13,11,30},{13,11,49},{13,11,381},{14,11,188},{15,11,150},{16,11,76},{ +18,11,30},{148,11,52},{4,0,518},{135,0,1136},{6,11,568},{7,11,112},{7,11,1804},{ +8,11,362},{8,11,410},{8,11,830},{9,11,514},{11,11,649},{142,11,157},{135,11,673} +,{8,0,689},{137,0,863},{4,0,18},{7,0,145},{7,0,444},{7,0,1278},{8,0,49},{8,0,400 +},{9,0,71},{9,0,250},{10,0,459},{12,0,160},{16,0,24},{132,11,625},{140,0,1020},{ +4,0,997},{6,0,1946},{6,0,1984},{134,0,1998},{6,11,16},{6,11,158},{7,11,43},{7,11 +,129},{7,11,181},{8,11,276},{8,11,377},{10,11,523},{11,11,816},{12,11,455},{13, +11,303},{142,11,135},{133,10,812},{134,0,658},{4,11,1},{7,11,1143},{7,11,1463},{ +8,11,61},{9,11,207},{9,11,390},{9,11,467},{139,11,836},{150,11,26},{140,0,106},{ +6,0,1827},{10,0,931},{18,0,166},{20,0,114},{4,10,137},{7,10,1178},{7,11,1319},{ +135,10,1520},{133,0,1010},{4,11,723},{5,11,895},{7,11,1031},{8,11,199},{8,11,340 +},{9,11,153},{9,11,215},{10,11,21},{10,11,59},{10,11,80},{10,11,224},{11,11,229} +,{11,11,652},{12,11,192},{13,11,146},{142,11,91},{132,11,295},{6,11,619},{7,11, +898},{7,11,1092},{8,11,485},{18,11,28},{147,11,116},{137,11,51},{6,10,1661},{7, +10,1975},{7,10,2009},{135,10,2011},{5,11,309},{140,11,211},{5,0,87},{7,0,313},{7 +,0,1103},{10,0,208},{10,0,582},{11,0,389},{11,0,813},{12,0,385},{13,0,286},{14,0 +,124},{146,0,108},{5,11,125},{8,11,77},{138,11,15},{132,0,267},{133,0,703},{137, +11,155},{133,11,439},{11,11,164},{140,11,76},{9,0,496},{5,10,89},{7,10,1915},{9, +10,185},{9,10,235},{10,10,64},{10,10,270},{10,10,403},{10,10,469},{10,10,529},{ +10,10,590},{11,10,140},{11,10,860},{13,10,1},{13,10,422},{14,10,341},{14,10,364} +,{17,10,93},{18,10,113},{19,10,97},{147,10,113},{133,10,695},{135,0,1121},{5,10, +6},{6,10,183},{7,10,680},{7,10,978},{7,10,1013},{7,10,1055},{12,10,230},{13,10, +172},{146,10,29},{4,11,8},{7,11,1152},{7,11,1153},{7,11,1715},{9,11,374},{10,11, +478},{139,11,648},{135,11,1099},{6,10,29},{139,10,63},{4,0,561},{10,0,249},{139, +0,209},{132,0,760},{7,11,799},{138,11,511},{136,11,87},{9,0,154},{140,0,485},{ +136,0,255},{132,0,323},{140,0,419},{132,10,311},{134,10,1740},{4,0,368},{135,0, +641},{7,10,170},{8,10,90},{8,10,177},{8,10,415},{11,10,714},{142,10,281},{4,11, +69},{5,11,122},{9,11,656},{138,11,464},{5,11,849},{134,11,1633},{8,0,522},{142,0 +,328},{11,10,91},{13,10,129},{15,10,101},{145,10,125},{7,0,562},{8,0,551},{4,10, +494},{6,10,74},{7,10,44},{11,11,499},{12,10,17},{15,10,5},{148,10,11},{4,10,276} +,{133,10,296},{9,0,92},{147,0,91},{4,10,7},{5,10,90},{5,10,158},{6,10,542},{7,10 +,221},{7,10,1574},{9,10,490},{10,10,540},{11,10,443},{139,10,757},{6,0,525},{6,0 +,1976},{8,0,806},{9,0,876},{140,0,284},{5,11,859},{7,10,588},{7,11,1160},{8,11, +107},{9,10,175},{9,11,291},{9,11,439},{10,10,530},{10,11,663},{11,11,609},{140, +11,197},{7,11,168},{13,11,196},{141,11,237},{139,0,958},{133,0,594},{135,10,580} +,{7,10,88},{136,10,627},{6,0,479},{6,0,562},{7,0,1060},{13,0,6},{5,10,872},{6,10 +,57},{7,10,471},{9,10,447},{137,10,454},{136,11,413},{145,11,19},{4,11,117},{6, +11,372},{7,11,1905},{142,11,323},{4,11,722},{139,11,471},{17,0,61},{5,10,31},{ +134,10,614},{8,10,330},{140,10,477},{7,10,1200},{138,10,460},{6,10,424},{135,10, +1866},{6,0,1641},{136,0,820},{6,0,1556},{134,0,1618},{9,11,5},{12,11,216},{12,11 +,294},{12,11,298},{12,11,400},{12,11,518},{13,11,229},{143,11,139},{15,11,155},{ +144,11,79},{4,0,302},{135,0,1766},{5,10,13},{134,10,142},{6,0,148},{7,0,1313},{7 +,10,116},{8,10,322},{8,10,755},{9,10,548},{10,10,714},{11,10,884},{141,10,324},{ +137,0,676},{9,11,88},{139,11,270},{5,11,12},{7,11,375},{137,11,438},{134,0,1674} +,{7,10,1472},{135,10,1554},{11,0,178},{7,10,1071},{7,10,1541},{7,10,1767},{7,10, +1806},{11,10,162},{11,10,242},{12,10,605},{15,10,26},{144,10,44},{6,0,389},{7,0, +149},{9,0,142},{138,0,94},{140,11,71},{145,10,115},{6,0,8},{7,0,1881},{8,0,91},{ +11,11,966},{12,11,287},{13,11,342},{13,11,402},{15,11,110},{143,11,163},{4,11, +258},{136,11,639},{6,11,22},{7,11,903},{138,11,577},{133,11,681},{135,10,1111},{ +135,11,1286},{9,0,112},{8,10,1},{138,10,326},{5,10,488},{6,10,527},{7,10,489},{7 +,10,1636},{8,10,121},{8,10,144},{8,10,359},{9,10,193},{9,10,241},{9,10,336},{9, +10,882},{11,10,266},{11,10,372},{11,10,944},{12,10,401},{140,10,641},{4,11,664}, +{133,11,804},{6,0,747},{134,0,1015},{135,0,1746},{9,10,31},{10,10,244},{10,10, +699},{12,10,149},{141,10,497},{133,10,377},{135,0,24},{6,0,1352},{5,11,32},{145, +10,101},{7,0,1530},{10,0,158},{13,0,13},{13,0,137},{13,0,258},{14,0,111},{14,0, +225},{14,0,253},{14,0,304},{14,0,339},{14,0,417},{146,0,33},{4,0,503},{135,0, +1661},{5,0,130},{6,0,845},{7,0,1314},{9,0,610},{10,0,718},{11,0,601},{11,0,819}, +{11,0,946},{140,0,536},{10,0,149},{11,0,280},{142,0,336},{134,0,1401},{135,0, +1946},{8,0,663},{144,0,8},{134,0,1607},{135,10,2023},{4,11,289},{7,11,629},{7,11 +,1698},{7,11,1711},{140,11,215},{6,11,450},{136,11,109},{10,0,882},{10,0,883},{ +10,0,914},{138,0,928},{133,10,843},{136,11,705},{132,10,554},{133,10,536},{5,0, +417},{9,10,79},{11,10,625},{145,10,7},{7,11,1238},{142,11,37},{4,0,392},{135,0, +1597},{5,0,433},{9,0,633},{11,0,629},{132,10,424},{7,10,336},{136,10,785},{134, +11,355},{6,0,234},{7,0,769},{9,0,18},{138,0,358},{4,10,896},{134,10,1777},{138, +11,323},{7,0,140},{7,0,1950},{8,0,680},{11,0,817},{147,0,88},{7,0,1222},{138,0, +386},{139,11,908},{11,0,249},{12,0,313},{16,0,66},{145,0,26},{134,0,5},{7,10,750 +},{9,10,223},{11,10,27},{11,10,466},{12,10,624},{14,10,265},{146,10,61},{134,11, +26},{134,0,1216},{5,0,963},{134,0,1773},{4,11,414},{5,11,467},{9,11,654},{10,11, +451},{12,11,59},{141,11,375},{135,11,17},{4,10,603},{133,10,661},{4,10,11},{6,10 +,128},{7,10,231},{7,10,1533},{138,10,725},{135,11,955},{7,0,180},{8,0,509},{136, +0,792},{132,10,476},{132,0,1002},{133,11,538},{135,10,1807},{132,0,931},{7,0,943 +},{11,0,614},{140,0,747},{135,0,1837},{9,10,20},{10,10,324},{10,10,807},{139,10, +488},{134,0,641},{6,11,280},{10,11,502},{11,11,344},{140,11,38},{5,11,45},{7,11, +1161},{11,11,448},{11,11,880},{13,11,139},{13,11,407},{15,11,16},{17,11,95},{18, +11,66},{18,11,88},{18,11,123},{149,11,7},{9,0,280},{138,0,134},{22,0,22},{23,0,5 +},{151,0,29},{136,11,777},{4,0,90},{5,0,545},{7,0,754},{9,0,186},{10,0,72},{10,0 +,782},{11,0,577},{11,0,610},{11,0,960},{12,0,354},{12,0,362},{12,0,595},{4,11, +410},{135,11,521},{135,11,1778},{5,10,112},{6,10,103},{134,10,150},{138,10,356}, +{132,0,742},{7,0,151},{9,0,329},{139,0,254},{8,0,853},{8,0,881},{8,0,911},{8,0, +912},{10,0,872},{12,0,741},{12,0,742},{152,0,18},{4,11,573},{136,11,655},{6,0, +921},{134,0,934},{9,0,187},{10,0,36},{11,0,1016},{17,0,44},{146,0,64},{7,0,833}, +{136,0,517},{4,0,506},{5,0,295},{135,0,1680},{4,10,708},{8,10,15},{9,10,50},{9, +10,386},{11,10,18},{11,10,529},{140,10,228},{7,0,251},{7,0,1701},{8,0,436},{4,10 +,563},{7,10,592},{7,10,637},{7,10,770},{8,10,463},{9,10,60},{9,10,335},{9,10,904 +},{10,10,73},{11,10,434},{12,10,585},{13,10,331},{18,10,110},{148,10,60},{132,10 +,502},{136,0,584},{6,10,347},{138,10,161},{7,0,987},{9,0,688},{10,0,522},{11,0, +788},{12,0,137},{12,0,566},{14,0,9},{14,0,24},{14,0,64},{7,11,899},{142,11,325}, +{4,0,214},{5,0,500},{5,10,102},{6,10,284},{7,10,1079},{7,10,1423},{7,10,1702},{8 +,10,470},{9,10,554},{9,10,723},{139,10,333},{7,10,246},{135,10,840},{6,10,10},{8 +,10,571},{9,10,739},{143,10,91},{133,10,626},{146,0,195},{134,0,1775},{7,0,389}, +{7,0,700},{7,0,940},{8,0,514},{9,0,116},{9,0,535},{10,0,118},{11,0,107},{11,0, +148},{11,0,922},{12,0,254},{12,0,421},{142,0,238},{5,10,18},{6,10,526},{13,10,24 +},{13,10,110},{19,10,5},{147,10,44},{132,0,743},{11,0,292},{4,10,309},{5,10,462} +,{7,10,970},{135,10,1097},{22,10,30},{150,10,33},{139,11,338},{135,11,1598},{7,0 +,1283},{9,0,227},{11,0,325},{11,0,408},{14,0,180},{146,0,47},{4,0,953},{6,0,1805 +},{6,0,1814},{6,0,1862},{140,0,774},{6,11,611},{135,11,1733},{135,11,1464},{5,0, +81},{7,0,146},{7,0,1342},{8,0,53},{8,0,561},{8,0,694},{8,0,754},{9,0,115},{9,0, +179},{9,0,894},{10,0,462},{10,0,813},{11,0,230},{11,0,657},{11,0,699},{11,0,748} +,{12,0,119},{12,0,200},{12,0,283},{142,0,273},{5,0,408},{6,0,789},{6,0,877},{6,0 +,1253},{6,0,1413},{137,0,747},{134,10,1704},{135,11,663},{6,0,1910},{6,0,1915},{ +6,0,1923},{9,0,913},{9,0,928},{9,0,950},{9,0,954},{9,0,978},{9,0,993},{12,0,812} +,{12,0,819},{12,0,831},{12,0,833},{12,0,838},{12,0,909},{12,0,928},{12,0,931},{ +12,0,950},{15,0,186},{15,0,187},{15,0,195},{15,0,196},{15,0,209},{15,0,215},{15, +0,236},{15,0,241},{15,0,249},{15,0,253},{18,0,180},{18,0,221},{18,0,224},{18,0, +227},{18,0,229},{149,0,60},{7,0,1826},{135,0,1938},{11,0,490},{18,0,143},{5,10, +86},{7,10,743},{9,10,85},{10,10,281},{10,10,432},{12,10,251},{13,10,118},{142,10 +,378},{5,10,524},{133,10,744},{141,11,442},{10,10,107},{140,10,436},{135,11,503} +,{134,0,1162},{132,10,927},{7,0,30},{8,0,86},{8,0,315},{8,0,700},{9,0,576},{9,0, +858},{10,0,414},{11,0,310},{11,0,888},{11,0,904},{12,0,361},{13,0,248},{13,0,371 +},{14,0,142},{12,10,670},{146,10,94},{134,0,721},{4,11,113},{5,11,163},{5,11,735 +},{7,11,1009},{7,10,1149},{9,11,9},{9,10,156},{9,11,771},{12,11,90},{13,11,138}, +{13,11,410},{143,11,128},{138,0,839},{133,10,778},{137,0,617},{133,10,502},{8,10 +,196},{10,10,283},{139,10,406},{6,0,428},{7,0,524},{8,0,169},{8,0,234},{9,0,480} +,{138,0,646},{133,10,855},{134,0,1648},{7,0,1205},{138,0,637},{7,0,1596},{4,11, +935},{133,11,823},{5,11,269},{7,11,434},{7,11,891},{8,11,339},{9,11,702},{11,11, +594},{11,11,718},{145,11,100},{7,11,878},{9,11,485},{141,11,264},{4,0,266},{8,0, +4},{9,0,39},{10,0,166},{11,0,918},{12,0,635},{20,0,10},{22,0,27},{22,0,43},{22,0 +,52},{134,11,1713},{7,10,1400},{9,10,446},{138,10,45},{135,11,900},{132,0,862},{ +134,0,1554},{135,11,1033},{19,0,16},{147,11,16},{135,11,1208},{7,0,157},{136,0, +279},{6,0,604},{136,0,391},{13,10,455},{15,10,99},{15,10,129},{144,10,68},{135, +10,172},{7,0,945},{11,0,713},{139,0,744},{4,0,973},{10,0,877},{10,0,937},{10,0, +938},{140,0,711},{139,0,1022},{132,10,568},{142,11,143},{4,0,567},{9,0,859},{132 +,10,732},{7,0,1846},{136,0,628},{136,10,733},{133,0,762},{4,10,428},{135,10,1789 +},{10,0,784},{13,0,191},{7,10,2015},{140,10,665},{133,0,298},{7,0,633},{7,0,905} +,{7,0,909},{7,0,1538},{9,0,767},{140,0,636},{138,10,806},{132,0,795},{139,0,301} +,{135,0,1970},{5,11,625},{135,11,1617},{135,11,275},{7,11,37},{8,11,425},{8,11, +693},{9,11,720},{10,11,380},{10,11,638},{11,11,273},{11,11,307},{11,11,473},{12, +11,61},{143,11,43},{135,11,198},{134,0,1236},{7,0,369},{12,0,644},{12,0,645},{ +144,0,90},{19,0,15},{149,0,27},{6,0,71},{7,0,845},{8,0,160},{9,0,318},{6,10,1623 +},{134,10,1681},{134,0,1447},{134,0,1255},{138,0,735},{8,0,76},{132,11,168},{6, +10,1748},{8,10,715},{9,10,802},{10,10,46},{10,10,819},{13,10,308},{14,10,351},{ +14,10,363},{146,10,67},{135,11,91},{6,0,474},{4,10,63},{133,10,347},{133,10,749} +,{138,0,841},{133,10,366},{6,0,836},{132,11,225},{135,0,1622},{135,10,89},{140,0 +,735},{134,0,1601},{138,11,145},{6,0,1390},{137,0,804},{142,0,394},{6,11,15},{7, +11,70},{10,11,240},{147,11,93},{6,0,96},{135,0,1426},{4,0,651},{133,0,289},{7,11 +,956},{7,10,977},{7,11,1157},{7,11,1506},{7,11,1606},{7,11,1615},{7,11,1619},{7, +11,1736},{7,11,1775},{8,11,590},{9,11,324},{9,11,736},{9,11,774},{9,11,776},{9, +11,784},{10,11,567},{10,11,708},{11,11,518},{11,11,613},{11,11,695},{11,11,716}, +{11,11,739},{11,11,770},{11,11,771},{11,11,848},{11,11,857},{11,11,931},{11,11, +947},{12,11,326},{12,11,387},{12,11,484},{12,11,528},{12,11,552},{12,11,613},{13 +,11,189},{13,11,256},{13,11,340},{13,11,432},{13,11,436},{13,11,440},{13,11,454} +,{14,11,174},{14,11,220},{14,11,284},{14,11,390},{145,11,121},{7,0,688},{8,0,35} +,{9,0,511},{10,0,767},{147,0,118},{134,0,667},{4,0,513},{5,10,824},{133,10,941}, +{7,10,440},{8,10,230},{139,10,106},{134,0,2034},{135,11,1399},{143,11,66},{135, +11,1529},{4,11,145},{6,11,176},{7,11,395},{9,11,562},{144,11,28},{132,11,501},{ +132,0,704},{134,0,1524},{7,0,1078},{134,11,464},{6,11,509},{10,11,82},{20,11,91} +,{151,11,13},{4,0,720},{133,0,306},{133,0,431},{7,0,1196},{4,10,914},{5,10,800}, +{133,10,852},{135,11,1189},{10,0,54},{141,10,115},{7,10,564},{142,10,168},{5,0, +464},{6,0,236},{7,0,696},{7,0,914},{7,0,1108},{7,0,1448},{9,0,15},{9,0,564},{10, +0,14},{12,0,565},{13,0,449},{14,0,53},{15,0,13},{16,0,64},{17,0,41},{4,10,918},{ +133,10,876},{6,0,1418},{134,10,1764},{4,10,92},{133,10,274},{134,0,907},{4,11, +114},{8,10,501},{9,11,492},{13,11,462},{142,11,215},{4,11,77},{5,11,361},{6,11, +139},{6,11,401},{6,11,404},{7,11,413},{7,11,715},{7,11,1716},{11,11,279},{12,11, +179},{12,11,258},{13,11,244},{142,11,358},{6,0,1767},{12,0,194},{145,0,107},{134 +,11,1717},{5,10,743},{142,11,329},{4,10,49},{7,10,280},{135,10,1633},{5,0,840},{ +7,11,1061},{8,11,82},{11,11,250},{12,11,420},{141,11,184},{135,11,724},{134,0, +900},{136,10,47},{134,0,1436},{144,11,0},{6,0,675},{7,0,1008},{7,0,1560},{9,0, +642},{11,0,236},{14,0,193},{5,10,272},{5,10,908},{5,10,942},{8,10,197},{9,10,47} +,{11,10,538},{139,10,742},{4,0,68},{5,0,628},{5,0,634},{6,0,386},{7,0,794},{8,0, +273},{9,0,563},{10,0,105},{10,0,171},{11,0,94},{139,0,354},{135,10,1911},{137,10 +,891},{4,0,95},{6,0,1297},{6,0,1604},{7,0,416},{139,0,830},{6,11,513},{135,11, +1052},{7,0,731},{13,0,20},{143,0,11},{137,11,899},{10,0,850},{140,0,697},{4,0, +662},{7,11,1417},{12,11,382},{17,11,48},{152,11,12},{133,0,736},{132,0,861},{4, +10,407},{132,10,560},{141,10,490},{6,11,545},{7,11,565},{7,11,1669},{10,11,114}, +{11,11,642},{140,11,618},{6,0,871},{134,0,1000},{5,0,864},{10,0,648},{11,0,671}, +{15,0,46},{133,11,5},{133,0,928},{11,0,90},{13,0,7},{4,10,475},{11,10,35},{13,10 +,71},{13,10,177},{142,10,422},{136,0,332},{135,11,192},{134,0,1055},{136,11,763} +,{11,0,986},{140,0,682},{7,0,76},{8,0,44},{9,0,884},{10,0,580},{11,0,399},{11,0, +894},{143,0,122},{135,11,1237},{135,10,636},{11,0,300},{6,10,222},{7,10,1620},{8 +,10,409},{137,10,693},{4,11,87},{5,11,250},{10,11,601},{13,11,298},{13,11,353},{ +141,11,376},{5,0,518},{10,0,340},{11,0,175},{149,0,16},{140,0,771},{6,0,1108},{ +137,0,831},{132,0,836},{135,0,1852},{4,0,957},{6,0,1804},{8,0,842},{8,0,843},{8, +0,851},{8,0,855},{140,0,767},{135,11,814},{4,11,57},{7,11,1195},{7,11,1438},{7, +11,1548},{7,11,1835},{7,11,1904},{9,11,757},{10,11,604},{139,11,519},{133,10,882 +},{138,0,246},{4,0,934},{5,0,202},{8,0,610},{7,11,1897},{12,11,290},{13,11,80},{ +13,11,437},{145,11,74},{8,0,96},{9,0,36},{10,0,607},{10,0,804},{10,0,832},{11,0, +423},{11,0,442},{12,0,309},{14,0,199},{15,0,90},{145,0,110},{132,10,426},{7,0, +654},{8,0,240},{6,10,58},{7,10,745},{7,10,1969},{8,10,675},{9,10,479},{9,10,731} +,{10,10,330},{10,10,593},{10,10,817},{11,10,32},{11,10,133},{11,10,221},{145,10, +68},{9,0,13},{9,0,398},{9,0,727},{10,0,75},{10,0,184},{10,0,230},{10,0,564},{10, +0,569},{11,0,973},{12,0,70},{12,0,189},{13,0,57},{141,0,257},{4,11,209},{135,11, +902},{7,0,391},{137,10,538},{134,0,403},{6,11,303},{7,11,335},{7,11,1437},{7,11, +1668},{8,11,553},{8,11,652},{8,11,656},{9,11,558},{11,11,743},{149,11,18},{132, +11,559},{11,0,75},{142,0,267},{6,0,815},{141,11,2},{141,0,366},{137,0,631},{133, +11,1017},{5,0,345},{135,0,1016},{133,11,709},{134,11,1745},{133,10,566},{7,0,952 +},{6,10,48},{9,10,139},{10,10,399},{11,10,469},{12,10,634},{141,10,223},{133,0, +673},{9,0,850},{7,11,8},{136,11,206},{6,0,662},{149,0,35},{4,0,287},{133,0,1018} +,{6,10,114},{7,10,1224},{7,10,1556},{136,10,3},{8,10,576},{137,10,267},{4,0,884} +,{5,0,34},{10,0,724},{12,0,444},{13,0,354},{18,0,32},{23,0,24},{23,0,31},{152,0, +5},{133,10,933},{132,11,776},{138,0,151},{136,0,427},{134,0,382},{132,0,329},{9, +0,846},{10,0,827},{138,11,33},{9,0,279},{10,0,407},{14,0,84},{22,0,18},{135,11, +1297},{136,11,406},{132,0,906},{136,0,366},{134,0,843},{134,0,1443},{135,0,1372} +,{138,0,992},{4,0,123},{5,0,605},{7,0,1509},{136,0,36},{132,0,649},{8,11,175},{ +10,11,168},{138,11,573},{133,0,767},{134,0,1018},{135,11,1305},{12,10,30},{13,10 +,148},{14,10,87},{14,10,182},{16,10,42},{148,10,70},{134,11,607},{4,0,273},{5,0, +658},{133,0,995},{6,0,72},{139,11,174},{10,0,483},{12,0,368},{7,10,56},{7,10, +1989},{8,10,337},{8,10,738},{9,10,600},{13,10,447},{142,10,92},{5,11,784},{138, +10,666},{135,0,1345},{139,11,882},{134,0,1293},{133,0,589},{134,0,1988},{5,0,117 +},{6,0,514},{6,0,541},{7,0,1164},{7,0,1436},{8,0,220},{8,0,648},{10,0,688},{139, +0,560},{136,0,379},{5,0,686},{7,10,866},{135,10,1163},{132,10,328},{9,11,14},{9, +11,441},{10,11,306},{139,11,9},{4,10,101},{135,10,1171},{5,10,833},{136,10,744}, +{5,11,161},{7,11,839},{135,11,887},{7,0,196},{10,0,765},{11,0,347},{11,0,552},{ +11,0,790},{12,0,263},{13,0,246},{13,0,270},{13,0,395},{14,0,176},{14,0,190},{14, +0,398},{14,0,412},{15,0,32},{15,0,63},{16,0,88},{147,0,105},{6,10,9},{6,10,397}, +{7,10,53},{7,10,1742},{10,10,632},{11,10,828},{140,10,146},{5,0,381},{135,0,1792 +},{134,0,1452},{135,11,429},{8,0,367},{10,0,760},{14,0,79},{20,0,17},{152,0,0},{ +7,0,616},{138,0,413},{11,10,417},{12,10,223},{140,10,265},{7,11,1611},{13,11,14} +,{15,11,44},{19,11,13},{148,11,76},{135,0,1229},{6,0,120},{7,0,1188},{7,0,1710}, +{8,0,286},{9,0,667},{11,0,592},{139,0,730},{135,11,1814},{135,0,1146},{4,10,186} +,{5,10,157},{8,10,168},{138,10,6},{4,0,352},{135,0,687},{4,0,192},{5,0,49},{6,0, +200},{6,0,293},{6,0,1696},{135,0,1151},{133,10,875},{5,10,773},{5,10,991},{6,10, +1635},{134,10,1788},{7,10,111},{136,10,581},{6,0,935},{134,0,1151},{134,0,1050}, +{132,0,650},{132,0,147},{11,0,194},{12,0,62},{12,0,88},{11,11,194},{12,11,62},{ +140,11,88},{6,0,339},{135,0,923},{134,10,1747},{7,11,643},{136,11,236},{133,0, +934},{7,10,1364},{7,10,1907},{141,10,158},{132,10,659},{4,10,404},{135,10,675},{ +7,11,581},{9,11,644},{137,11,699},{13,0,211},{14,0,133},{14,0,204},{15,0,64},{15 +,0,69},{15,0,114},{16,0,10},{19,0,23},{19,0,35},{19,0,39},{19,0,51},{19,0,71},{ +19,0,75},{152,0,15},{133,10,391},{5,11,54},{135,11,1513},{7,0,222},{8,0,341},{5, +10,540},{134,10,1697},{134,10,78},{132,11,744},{136,0,293},{137,11,701},{7,11, +930},{10,11,402},{10,11,476},{13,11,452},{18,11,55},{147,11,104},{132,0,637},{ +133,10,460},{8,11,50},{137,11,624},{132,11,572},{134,0,1159},{4,10,199},{139,10, +34},{134,0,847},{134,10,388},{6,11,43},{7,11,38},{8,11,248},{9,11,504},{138,11, +513},{9,0,683},{4,10,511},{6,10,608},{9,10,333},{10,10,602},{11,10,441},{11,10, +723},{11,10,976},{140,10,357},{9,0,867},{138,0,837},{6,0,944},{135,11,326},{135, +0,1809},{5,10,938},{7,11,783},{136,10,707},{133,11,766},{133,11,363},{6,0,170},{ +7,0,1080},{8,0,395},{8,0,487},{141,0,147},{6,11,258},{140,11,409},{4,0,535},{8,0 +,618},{5,11,249},{148,11,82},{6,0,1379},{149,11,15},{135,0,1625},{150,0,23},{5, +11,393},{6,11,378},{7,11,1981},{9,11,32},{9,11,591},{10,11,685},{10,11,741},{142 +,11,382},{133,11,788},{7,11,1968},{10,11,19},{139,11,911},{7,11,1401},{135,11, +1476},{4,11,61},{5,11,58},{5,11,171},{5,11,635},{5,11,683},{5,11,700},{6,11,291} +,{6,11,566},{7,11,1650},{11,11,523},{12,11,273},{12,11,303},{15,11,39},{143,11, +111},{6,10,469},{7,10,1709},{138,10,515},{4,0,778},{134,11,589},{132,0,46},{5,0, +811},{6,0,1679},{6,0,1714},{135,0,2032},{7,0,1458},{9,0,407},{11,0,15},{12,0,651 +},{149,0,37},{7,0,938},{132,10,500},{6,0,34},{7,0,69},{7,0,1089},{7,0,1281},{8,0 +,708},{8,0,721},{9,0,363},{148,0,98},{10,11,231},{147,11,124},{7,11,726},{152,11 +,9},{5,10,68},{134,10,383},{136,11,583},{4,11,917},{133,11,1005},{11,10,216},{ +139,10,340},{135,11,1675},{8,0,441},{10,0,314},{143,0,3},{132,11,919},{4,10,337} +,{6,10,353},{7,10,1934},{8,10,488},{137,10,429},{7,0,889},{7,10,1795},{8,10,259} +,{9,10,135},{9,10,177},{9,10,860},{10,10,825},{11,10,115},{11,10,370},{11,10,405 +},{11,10,604},{12,10,10},{12,10,667},{12,10,669},{13,10,76},{14,10,310},{15,10, +76},{15,10,147},{148,10,23},{4,10,15},{4,11,255},{5,10,22},{5,11,302},{6,11,132} +,{6,10,244},{7,10,40},{7,11,128},{7,10,200},{7,11,283},{7,10,906},{7,10,1199},{7 +,11,1299},{9,10,616},{10,11,52},{10,11,514},{10,10,716},{11,10,635},{11,10,801}, +{11,11,925},{12,10,458},{13,11,92},{142,11,309},{132,0,462},{137,11,173},{135,10 +,1735},{8,0,525},{5,10,598},{7,10,791},{8,10,108},{137,10,123},{5,0,73},{6,0,23} +,{134,0,338},{132,0,676},{132,10,683},{7,0,725},{8,0,498},{139,0,268},{12,0,21}, +{151,0,7},{135,0,773},{4,10,155},{135,10,1689},{4,0,164},{5,0,730},{5,10,151},{5 +,10,741},{6,11,210},{7,10,498},{7,10,870},{7,10,1542},{12,10,213},{14,10,36},{14 +,10,391},{17,10,111},{18,10,6},{18,10,46},{18,10,151},{19,10,36},{20,10,32},{20, +10,56},{20,10,69},{20,10,102},{21,10,4},{22,10,8},{22,10,10},{22,10,14},{150,10, +31},{4,10,624},{135,10,1752},{4,0,583},{9,0,936},{15,0,214},{18,0,199},{24,0,26} +,{134,11,588},{7,0,1462},{11,0,659},{4,11,284},{134,11,223},{133,0,220},{139,0, +803},{132,0,544},{4,10,492},{133,10,451},{16,0,98},{148,0,119},{4,11,218},{7,11, +526},{143,11,137},{135,10,835},{4,11,270},{5,11,192},{6,11,332},{7,11,1322},{13, +11,9},{13,10,70},{14,11,104},{142,11,311},{132,10,539},{140,11,661},{5,0,176},{6 +,0,437},{6,0,564},{11,0,181},{141,0,183},{135,0,1192},{6,10,113},{135,10,436},{ +136,10,718},{135,10,520},{135,0,1878},{140,11,196},{7,11,379},{8,11,481},{137,11 +,377},{5,11,1003},{6,11,149},{137,11,746},{8,11,262},{9,11,627},{10,11,18},{11, +11,214},{11,11,404},{11,11,457},{11,11,780},{11,11,849},{11,11,913},{13,11,330}, +{13,11,401},{142,11,200},{149,0,26},{136,11,304},{132,11,142},{135,0,944},{4,0, +790},{5,0,273},{134,0,394},{134,0,855},{4,0,135},{6,0,127},{7,0,1185},{7,0,1511} +,{8,0,613},{11,0,5},{12,0,336},{12,0,495},{12,0,586},{12,0,660},{12,0,668},{14,0 +,385},{15,0,118},{17,0,20},{146,0,98},{6,0,230},{9,0,752},{18,0,109},{12,10,610} +,{13,10,431},{144,10,59},{7,0,1954},{135,11,925},{4,11,471},{5,11,51},{6,11,602} +,{8,11,484},{10,11,195},{140,11,159},{132,10,307},{136,11,688},{132,11,697},{7, +11,812},{7,11,1261},{7,11,1360},{9,11,632},{140,11,352},{5,0,162},{8,0,68},{133, +10,964},{4,0,654},{136,11,212},{4,0,156},{7,0,998},{7,0,1045},{7,0,1860},{9,0,48 +},{9,0,692},{11,0,419},{139,0,602},{133,11,221},{4,11,373},{5,11,283},{6,11,480} +,{135,11,609},{142,11,216},{132,0,240},{6,11,192},{9,11,793},{145,11,55},{4,10, +75},{5,10,180},{6,10,500},{7,10,58},{7,10,710},{138,10,645},{4,11,132},{5,11,69} +,{5,10,649},{135,11,1242},{6,10,276},{7,10,282},{7,10,879},{7,10,924},{8,10,459} +,{9,10,599},{9,10,754},{11,10,574},{12,10,128},{12,10,494},{13,10,52},{13,10,301 +},{15,10,30},{143,10,132},{132,10,200},{4,11,111},{135,11,302},{9,0,197},{10,0, +300},{12,0,473},{13,0,90},{141,0,405},{132,11,767},{6,11,42},{7,11,1416},{7,11, +1590},{7,11,2005},{8,11,131},{8,11,466},{9,11,672},{13,11,252},{148,11,103},{8,0 +,958},{8,0,999},{10,0,963},{138,0,1001},{135,10,1621},{135,0,858},{4,0,606},{137 +,11,444},{6,11,44},{136,11,368},{139,11,172},{4,11,570},{133,11,120},{139,11,624 +},{7,0,1978},{8,0,676},{6,10,225},{137,10,211},{7,0,972},{11,0,102},{136,10,687} +,{6,11,227},{135,11,1589},{8,10,58},{9,10,724},{11,10,809},{13,10,113},{145,10, +72},{4,0,361},{133,0,315},{132,0,461},{6,10,345},{135,10,1247},{132,0,472},{8,10 +,767},{8,10,803},{9,10,301},{137,10,903},{135,11,1333},{135,11,477},{7,10,1949}, +{136,10,674},{6,0,905},{138,0,747},{133,0,155},{134,10,259},{7,0,163},{8,0,319}, +{9,0,402},{10,0,24},{10,0,681},{11,0,200},{12,0,253},{12,0,410},{142,0,219},{5,0 +,475},{7,0,1780},{9,0,230},{11,0,297},{11,0,558},{14,0,322},{19,0,76},{6,11,1667 +},{7,11,2036},{138,11,600},{136,10,254},{6,0,848},{135,0,1956},{6,11,511},{140, +11,132},{5,11,568},{6,11,138},{135,11,1293},{6,0,631},{137,0,838},{149,0,36},{4, +11,565},{8,11,23},{136,11,827},{5,0,944},{134,0,1769},{4,0,144},{6,0,842},{6,0, +1400},{4,11,922},{133,11,1023},{133,10,248},{9,10,800},{10,10,693},{11,10,482},{ +11,10,734},{139,10,789},{7,11,1002},{139,11,145},{4,10,116},{5,10,95},{5,10,445} +,{7,10,1688},{8,10,29},{9,10,272},{11,10,509},{139,10,915},{14,0,369},{146,0,72} +,{135,10,1641},{132,11,740},{133,10,543},{140,11,116},{6,0,247},{9,0,555},{5,10, +181},{136,10,41},{133,10,657},{136,0,996},{138,10,709},{7,0,189},{8,10,202},{138 +,10,536},{136,11,402},{4,11,716},{141,11,31},{10,0,280},{138,0,797},{9,10,423},{ +140,10,89},{8,10,113},{9,10,877},{10,10,554},{11,10,83},{12,10,136},{147,10,109} +,{133,10,976},{7,0,746},{132,10,206},{136,0,526},{139,0,345},{136,0,1017},{8,11, +152},{9,11,53},{9,11,268},{9,11,901},{10,11,518},{10,11,829},{11,11,188},{13,11, +74},{14,11,46},{15,11,17},{15,11,33},{17,11,40},{18,11,36},{19,11,20},{22,11,1}, +{152,11,2},{133,11,736},{136,11,532},{5,0,428},{138,0,651},{135,11,681},{135,0, +1162},{7,0,327},{13,0,230},{17,0,113},{8,10,226},{10,10,537},{11,10,570},{11,10, +605},{11,10,799},{11,10,804},{12,10,85},{12,10,516},{12,10,623},{12,11,677},{13, +10,361},{14,10,77},{14,10,78},{147,10,110},{4,0,792},{7,0,1717},{10,0,546},{132, +10,769},{4,11,684},{136,11,384},{132,10,551},{134,0,1203},{9,10,57},{9,10,459},{ +10,10,425},{11,10,119},{12,10,184},{12,10,371},{13,10,358},{145,10,51},{5,0,672} +,{5,10,814},{8,10,10},{9,10,421},{9,10,729},{10,10,609},{139,10,689},{138,0,189} +,{134,10,624},{7,11,110},{7,11,188},{8,11,290},{8,11,591},{9,11,382},{9,11,649}, +{11,11,71},{11,11,155},{11,11,313},{12,11,5},{13,11,325},{142,11,287},{133,0,99} +,{6,0,1053},{135,0,298},{7,11,360},{7,11,425},{9,11,66},{9,11,278},{138,11,644}, +{4,0,397},{136,0,555},{137,10,269},{132,10,528},{4,11,900},{133,11,861},{6,0, +1157},{5,11,254},{7,11,985},{136,11,73},{7,11,1959},{136,11,683},{12,0,398},{20, +0,39},{21,0,11},{150,0,41},{4,0,485},{7,0,353},{135,0,1523},{6,0,366},{7,0,1384} +,{135,0,1601},{138,0,787},{137,0,282},{5,10,104},{6,10,173},{135,10,1631},{139, +11,146},{4,0,157},{133,0,471},{134,0,941},{132,11,725},{7,0,1336},{8,10,138},{8, +10,342},{9,10,84},{10,10,193},{11,10,883},{140,10,359},{134,11,196},{136,0,116}, +{133,11,831},{134,0,787},{134,10,95},{6,10,406},{10,10,409},{10,10,447},{11,10, +44},{140,10,100},{5,0,160},{7,0,363},{7,0,589},{10,0,170},{141,0,55},{134,0,1815 +},{132,0,866},{6,0,889},{6,0,1067},{6,0,1183},{4,11,321},{134,11,569},{5,11,848} +,{134,11,66},{4,11,36},{6,10,1636},{7,11,1387},{10,11,205},{11,11,755},{141,11, +271},{132,0,689},{9,0,820},{4,10,282},{7,10,1034},{11,10,398},{11,10,634},{12,10 +,1},{12,10,79},{12,10,544},{14,10,237},{17,10,10},{146,10,20},{4,0,108},{7,0,804 +},{139,0,498},{132,11,887},{6,0,1119},{135,11,620},{6,11,165},{138,11,388},{5,0, +244},{5,10,499},{6,10,476},{7,10,600},{7,10,888},{135,10,1096},{140,0,609},{135, +0,1005},{4,0,412},{133,0,581},{4,11,719},{135,11,155},{7,10,296},{7,10,596},{8, +10,560},{8,10,586},{9,10,612},{11,10,304},{12,10,46},{13,10,89},{14,10,112},{145 +,10,122},{4,0,895},{133,0,772},{142,11,307},{135,0,1898},{4,0,926},{133,0,983},{ +4,11,353},{6,11,146},{6,11,1789},{7,11,288},{7,11,990},{7,11,1348},{9,11,665},{9 +,11,898},{11,11,893},{142,11,212},{132,0,538},{133,11,532},{6,0,294},{7,0,1267}, +{8,0,624},{141,0,496},{7,0,1325},{4,11,45},{135,11,1257},{138,0,301},{9,0,298},{ +12,0,291},{13,0,276},{14,0,6},{17,0,18},{21,0,32},{7,10,1599},{7,10,1723},{8,10, +79},{8,10,106},{8,10,190},{8,10,302},{8,10,383},{8,10,713},{9,10,119},{9,10,233} +,{9,10,419},{9,10,471},{10,10,181},{10,10,406},{11,10,57},{11,10,85},{11,10,120} +,{11,10,177},{11,10,296},{11,10,382},{11,10,454},{11,10,758},{11,10,999},{12,10, +27},{12,10,131},{12,10,245},{12,10,312},{12,10,446},{12,10,454},{13,10,98},{13, +10,426},{13,10,508},{14,10,163},{14,10,272},{14,10,277},{14,10,370},{15,10,95},{ +15,10,138},{15,10,167},{17,10,38},{148,10,96},{132,0,757},{134,0,1263},{4,0,820} +,{134,10,1759},{133,0,722},{136,11,816},{138,10,372},{145,10,16},{134,0,1039},{4 +,0,991},{134,0,2028},{133,10,258},{7,0,1875},{139,0,124},{6,11,559},{6,11,1691}, +{135,11,586},{5,0,324},{7,0,881},{8,10,134},{9,10,788},{140,10,438},{7,11,1823}, +{139,11,693},{6,0,1348},{134,0,1545},{134,0,911},{132,0,954},{8,0,329},{8,0,414} +,{7,10,1948},{135,10,2004},{5,0,517},{6,10,439},{7,10,780},{135,10,1040},{132,0, +816},{5,10,1},{6,10,81},{138,10,520},{9,0,713},{10,0,222},{5,10,482},{8,10,98},{ +10,10,700},{10,10,822},{11,10,302},{11,10,778},{12,10,50},{12,10,127},{12,10,396 +},{13,10,62},{13,10,328},{14,10,122},{147,10,72},{137,0,33},{5,10,2},{7,10,1494} +,{136,10,589},{6,10,512},{7,10,797},{8,10,253},{9,10,77},{10,10,1},{10,11,108},{ +10,10,129},{10,10,225},{11,11,116},{11,10,118},{11,10,226},{11,10,251},{11,10, +430},{11,10,701},{11,10,974},{11,10,982},{12,10,64},{12,10,260},{12,10,488},{140 +,10,690},{134,11,456},{133,11,925},{5,0,150},{7,0,106},{7,0,774},{8,0,603},{9,0, +593},{9,0,634},{10,0,44},{10,0,173},{11,0,462},{11,0,515},{13,0,216},{13,0,288}, +{142,0,400},{137,10,347},{5,0,748},{134,0,553},{12,0,108},{141,0,291},{7,0,420}, +{4,10,12},{7,10,522},{7,10,809},{8,10,797},{141,10,88},{6,11,193},{7,11,240},{7, +11,1682},{10,11,51},{10,11,640},{11,11,410},{13,11,82},{14,11,247},{14,11,331},{ +142,11,377},{133,10,528},{135,0,1777},{4,0,493},{144,0,55},{136,11,633},{139,0, +81},{6,0,980},{136,0,321},{148,10,109},{5,10,266},{9,10,290},{9,10,364},{10,10, +293},{11,10,606},{142,10,45},{6,0,568},{7,0,112},{7,0,1804},{8,0,362},{8,0,410}, +{8,0,830},{9,0,514},{11,0,649},{142,0,157},{4,0,74},{6,0,510},{6,10,594},{9,10, +121},{10,10,49},{10,10,412},{139,10,834},{134,0,838},{136,10,748},{132,10,466},{ +132,0,625},{135,11,1443},{4,11,237},{135,11,514},{9,10,378},{141,10,162},{6,0,16 +},{6,0,158},{7,0,43},{7,0,129},{7,0,181},{8,0,276},{8,0,377},{10,0,523},{11,0, +816},{12,0,455},{13,0,303},{142,0,135},{135,0,281},{4,0,1},{7,0,1143},{7,0,1463} +,{8,0,61},{9,0,207},{9,0,390},{9,0,467},{139,0,836},{6,11,392},{7,11,65},{135,11 +,2019},{132,10,667},{4,0,723},{5,0,895},{7,0,1031},{8,0,199},{8,0,340},{9,0,153} +,{9,0,215},{10,0,21},{10,0,59},{10,0,80},{10,0,224},{10,0,838},{11,0,229},{11,0, +652},{12,0,192},{13,0,146},{142,0,91},{132,0,295},{137,0,51},{9,11,222},{10,11, +43},{139,11,900},{5,0,309},{140,0,211},{5,0,125},{8,0,77},{138,0,15},{136,11,604 +},{138,0,789},{5,0,173},{4,10,39},{7,10,1843},{8,10,407},{11,10,144},{140,10,523 +},{138,11,265},{133,0,439},{132,10,510},{7,0,648},{7,0,874},{11,0,164},{12,0,76} +,{18,0,9},{7,10,1980},{10,10,487},{138,10,809},{12,0,111},{14,0,294},{19,0,45},{ +13,10,260},{146,10,63},{133,11,549},{134,10,570},{4,0,8},{7,0,1152},{7,0,1153},{ +7,0,1715},{9,0,374},{10,0,478},{139,0,648},{135,0,1099},{5,0,575},{6,0,354},{135 +,0,701},{7,11,36},{8,11,201},{136,11,605},{4,10,787},{136,11,156},{6,0,518},{149 +,11,13},{140,11,224},{134,0,702},{132,10,516},{5,11,724},{10,11,305},{11,11,151} +,{12,11,33},{12,11,121},{12,11,381},{17,11,3},{17,11,27},{17,11,78},{18,11,18},{ +19,11,54},{149,11,5},{8,0,87},{4,11,523},{5,11,638},{11,10,887},{14,10,365},{142 +,10,375},{138,0,438},{136,10,821},{135,11,1908},{6,11,242},{7,11,227},{7,11,1581 +},{8,11,104},{9,11,113},{9,11,220},{9,11,427},{10,11,74},{10,11,239},{11,11,579} +,{11,11,1023},{13,11,4},{13,11,204},{13,11,316},{18,11,95},{148,11,86},{4,0,69}, +{5,0,122},{5,0,849},{6,0,1633},{9,0,656},{138,0,464},{7,0,1802},{4,10,10},{139, +10,786},{135,11,861},{139,0,499},{7,0,476},{7,0,1592},{138,0,87},{133,10,684},{4 +,0,840},{134,10,27},{142,0,283},{6,0,1620},{7,11,1328},{136,11,494},{5,0,859},{7 +,0,1160},{8,0,107},{9,0,291},{9,0,439},{10,0,663},{11,0,609},{140,0,197},{7,11, +1306},{8,11,505},{9,11,482},{10,11,126},{11,11,225},{12,11,347},{12,11,449},{13, +11,19},{142,11,218},{5,11,268},{10,11,764},{12,11,120},{13,11,39},{145,11,127},{ +145,10,56},{7,11,1672},{10,11,472},{11,11,189},{143,11,51},{6,10,342},{6,10,496} +,{8,10,275},{137,10,206},{133,0,600},{4,0,117},{6,0,372},{7,0,1905},{142,0,323}, +{4,10,909},{5,10,940},{135,11,1471},{132,10,891},{4,0,722},{139,0,471},{4,11,384 +},{135,11,1022},{132,10,687},{9,0,5},{12,0,216},{12,0,294},{12,0,298},{12,0,400} +,{12,0,518},{13,0,229},{143,0,139},{135,11,1703},{7,11,1602},{10,11,698},{12,11, +212},{141,11,307},{6,10,41},{141,10,160},{135,11,1077},{9,11,159},{11,11,28},{ +140,11,603},{4,0,514},{7,0,1304},{138,0,477},{134,0,1774},{9,0,88},{139,0,270},{ +5,0,12},{7,0,375},{9,0,438},{134,10,1718},{132,11,515},{136,10,778},{8,11,632},{ +8,11,697},{137,11,854},{6,0,362},{6,0,997},{146,0,51},{7,0,816},{7,0,1241},{9,0, +283},{9,0,520},{10,0,213},{10,0,307},{10,0,463},{10,0,671},{10,0,746},{11,0,401} +,{11,0,794},{12,0,517},{18,0,107},{147,0,115},{133,10,115},{150,11,28},{4,11,136 +},{133,11,551},{142,10,314},{132,0,258},{6,0,22},{7,0,903},{7,0,1963},{8,0,639}, +{138,0,577},{5,0,681},{8,0,782},{13,0,130},{17,0,84},{5,10,193},{140,10,178},{9, +11,17},{138,11,291},{7,11,1287},{9,11,44},{10,11,552},{10,11,642},{11,11,839},{ +12,11,274},{12,11,275},{12,11,372},{13,11,91},{142,11,125},{135,10,174},{4,0,664 +},{5,0,804},{139,0,1013},{134,0,942},{6,0,1349},{6,0,1353},{6,0,1450},{7,11,1518 +},{139,11,694},{11,0,356},{4,10,122},{5,10,796},{5,10,952},{6,10,1660},{6,10, +1671},{8,10,567},{9,10,687},{9,10,742},{10,10,686},{11,10,682},{140,10,281},{5,0 +,32},{6,11,147},{7,11,886},{9,11,753},{138,11,268},{5,10,179},{7,10,1095},{135, +10,1213},{4,10,66},{7,10,722},{135,10,904},{135,10,352},{9,11,245},{138,11,137}, +{4,0,289},{7,0,629},{7,0,1698},{7,0,1711},{12,0,215},{133,11,414},{6,0,1975},{ +135,11,1762},{6,0,450},{136,0,109},{141,10,35},{134,11,599},{136,0,705},{133,0, +664},{134,11,1749},{11,11,402},{12,11,109},{12,11,431},{13,11,179},{13,11,206},{ +14,11,175},{14,11,217},{16,11,3},{148,11,53},{135,0,1238},{134,11,1627},{132,11, +488},{13,0,318},{10,10,592},{10,10,753},{12,10,317},{12,10,355},{12,10,465},{12, +10,469},{12,10,560},{140,10,578},{133,10,564},{132,11,83},{140,11,676},{6,0,1872 +},{6,0,1906},{6,0,1907},{9,0,934},{9,0,956},{9,0,960},{9,0,996},{12,0,794},{12,0 +,876},{12,0,880},{12,0,918},{15,0,230},{18,0,234},{18,0,238},{21,0,38},{149,0,62 +},{134,10,556},{134,11,278},{137,0,103},{7,10,544},{8,10,719},{138,10,61},{4,10, +5},{5,10,498},{8,10,637},{137,10,521},{7,0,777},{12,0,229},{12,0,239},{15,0,12}, +{12,11,229},{12,11,239},{143,11,12},{6,0,26},{7,11,388},{7,11,644},{139,11,781}, +{7,11,229},{8,11,59},{9,11,190},{9,11,257},{10,11,378},{140,11,191},{133,10,927} +,{135,10,1441},{4,10,893},{5,10,780},{133,10,893},{4,0,414},{5,0,467},{9,0,654}, +{10,0,451},{12,0,59},{141,0,375},{142,0,173},{135,0,17},{7,0,1350},{133,10,238}, +{135,0,955},{4,0,960},{10,0,887},{12,0,753},{18,0,161},{18,0,162},{152,0,19},{ +136,11,344},{6,10,1729},{137,11,288},{132,11,660},{4,0,217},{5,0,710},{7,0,760}, +{7,0,1926},{9,0,428},{9,0,708},{10,0,254},{10,0,296},{10,0,720},{11,0,109},{11,0 +,255},{12,0,165},{12,0,315},{13,0,107},{13,0,203},{14,0,54},{14,0,99},{14,0,114} +,{14,0,388},{16,0,85},{17,0,9},{17,0,33},{20,0,25},{20,0,28},{20,0,29},{21,0,9}, +{21,0,10},{21,0,34},{22,0,17},{4,10,60},{7,10,1800},{8,10,314},{9,10,700},{139, +10,487},{7,11,1035},{138,11,737},{7,11,690},{9,11,217},{9,11,587},{140,11,521},{ +6,0,919},{7,11,706},{7,11,1058},{138,11,538},{7,10,1853},{138,10,437},{136,10, +419},{6,0,280},{10,0,502},{11,0,344},{140,0,38},{5,0,45},{7,0,1161},{11,0,448},{ +11,0,880},{13,0,139},{13,0,407},{15,0,16},{17,0,95},{18,0,66},{18,0,88},{18,0, +123},{149,0,7},{11,11,92},{11,11,196},{11,11,409},{11,11,450},{11,11,666},{11,11 +,777},{12,11,262},{13,11,385},{13,11,393},{15,11,115},{16,11,45},{145,11,82},{ +136,0,777},{134,11,1744},{4,0,410},{7,0,521},{133,10,828},{134,0,673},{7,0,1110} +,{7,0,1778},{7,10,176},{135,10,178},{5,10,806},{7,11,268},{7,10,1976},{136,11, +569},{4,11,733},{9,11,194},{10,11,92},{11,11,198},{12,11,84},{12,11,87},{13,11, +128},{144,11,74},{5,0,341},{7,0,1129},{11,0,414},{4,10,51},{6,10,4},{7,10,591},{ +7,10,849},{7,10,951},{7,10,1613},{7,10,1760},{7,10,1988},{9,10,434},{10,10,754}, +{11,10,25},{139,10,37},{133,10,902},{135,10,928},{135,0,787},{132,0,436},{134,10 +,270},{7,0,1587},{135,0,1707},{6,0,377},{7,0,1025},{9,0,613},{145,0,104},{7,11, +982},{7,11,1361},{10,11,32},{143,11,56},{139,0,96},{132,0,451},{132,10,416},{142 +,10,372},{5,10,152},{5,10,197},{7,11,306},{7,10,340},{7,10,867},{10,10,548},{10, +10,581},{11,10,6},{12,10,3},{12,10,19},{14,10,110},{142,10,289},{134,0,680},{134 +,11,609},{7,0,483},{7,10,190},{8,10,28},{8,10,141},{8,10,444},{8,10,811},{9,10, +468},{11,10,334},{12,10,24},{12,10,386},{140,10,576},{10,0,916},{133,10,757},{5, +10,721},{135,10,1553},{133,11,178},{134,0,937},{132,10,898},{133,0,739},{147,0, +82},{135,0,663},{146,0,128},{5,10,277},{141,10,247},{134,0,1087},{132,10,435},{6 +,11,381},{7,11,645},{7,11,694},{136,11,546},{7,0,503},{135,0,1885},{6,0,1965},{8 +,0,925},{138,0,955},{4,0,113},{5,0,163},{5,0,735},{7,0,1009},{9,0,9},{9,0,771},{ +12,0,90},{13,0,138},{13,0,410},{143,0,128},{4,0,324},{138,0,104},{7,0,460},{5,10 +,265},{134,10,212},{133,11,105},{7,11,261},{7,11,1107},{7,11,1115},{7,11,1354},{ +7,11,1588},{7,11,1705},{7,11,1902},{9,11,465},{10,11,248},{10,11,349},{10,11,647 +},{11,11,527},{11,11,660},{11,11,669},{12,11,529},{141,11,305},{5,11,438},{9,11, +694},{12,11,627},{141,11,210},{152,11,11},{4,0,935},{133,0,823},{132,10,702},{5, +0,269},{7,0,434},{7,0,891},{8,0,339},{9,0,702},{11,0,594},{11,0,718},{17,0,100}, +{5,10,808},{135,10,2045},{7,0,1014},{9,0,485},{141,0,264},{134,0,1713},{7,0,1810 +},{11,0,866},{12,0,103},{13,0,495},{140,11,233},{4,0,423},{10,0,949},{138,0,1013 +},{135,0,900},{8,11,25},{138,11,826},{5,10,166},{8,10,739},{140,10,511},{134,0, +2018},{7,11,1270},{139,11,612},{4,10,119},{5,10,170},{5,10,447},{7,10,1708},{7, +10,1889},{9,10,357},{9,10,719},{12,10,486},{140,10,596},{12,0,574},{140,11,574}, +{132,11,308},{6,0,964},{6,0,1206},{134,0,1302},{4,10,450},{135,10,1158},{135,11, +150},{136,11,649},{14,0,213},{148,0,38},{9,11,45},{9,11,311},{141,11,42},{134,11 +,521},{7,10,1375},{7,10,1466},{138,10,331},{132,10,754},{5,11,339},{7,11,1442},{ +14,11,3},{15,11,41},{147,11,66},{136,11,378},{134,0,1022},{5,10,850},{136,10,799 +},{142,0,143},{135,0,2029},{134,11,1628},{8,0,523},{150,0,34},{5,0,625},{135,0, +1617},{7,0,275},{7,10,238},{7,10,2033},{8,10,120},{8,10,188},{8,10,659},{9,10, +598},{10,10,466},{12,10,342},{12,10,588},{13,10,503},{14,10,246},{143,10,92},{7, +0,37},{8,0,425},{8,0,693},{9,0,720},{10,0,380},{10,0,638},{11,0,273},{11,0,473}, +{12,0,61},{143,0,43},{135,11,829},{135,0,1943},{132,0,765},{5,11,486},{135,11, +1349},{7,11,1635},{8,11,17},{10,11,217},{138,11,295},{4,10,201},{7,10,1744},{8, +10,602},{11,10,247},{11,10,826},{145,10,65},{138,11,558},{11,0,551},{142,0,159}, +{8,10,164},{146,10,62},{139,11,176},{132,0,168},{136,0,1010},{134,0,1994},{135,0 +,91},{138,0,532},{135,10,1243},{135,0,1884},{132,10,907},{5,10,100},{10,10,329}, +{12,10,416},{149,10,29},{134,11,447},{132,10,176},{5,10,636},{5,10,998},{7,10,9} +,{7,10,1508},{8,10,26},{9,10,317},{9,10,358},{10,10,210},{10,10,292},{10,10,533} +,{11,10,555},{12,10,526},{12,10,607},{13,10,263},{13,10,459},{142,10,271},{4,11, +609},{135,11,756},{6,0,15},{7,0,70},{10,0,240},{147,0,93},{4,11,930},{133,11,947 +},{134,0,1227},{134,0,1534},{133,11,939},{133,11,962},{5,11,651},{8,11,170},{9, +11,61},{9,11,63},{10,11,23},{10,11,37},{10,11,834},{11,11,4},{11,11,187},{11,11, +281},{11,11,503},{11,11,677},{12,11,96},{12,11,130},{12,11,244},{14,11,5},{14,11 +,40},{14,11,162},{14,11,202},{146,11,133},{4,11,406},{5,11,579},{12,11,492},{150 +,11,15},{139,0,392},{6,10,610},{10,10,127},{141,10,27},{7,0,655},{7,0,1844},{136 +,10,119},{4,0,145},{6,0,176},{7,0,395},{137,0,562},{132,0,501},{140,11,145},{136 +,0,1019},{134,0,509},{139,0,267},{6,11,17},{7,11,16},{7,11,1001},{7,11,1982},{9, +11,886},{10,11,489},{10,11,800},{11,11,782},{12,11,320},{13,11,467},{14,11,145}, +{14,11,387},{143,11,119},{145,11,17},{6,0,1099},{133,11,458},{7,11,1983},{8,11,0 +},{8,11,171},{9,11,120},{9,11,732},{10,11,473},{11,11,656},{11,11,998},{18,11,0} +,{18,11,2},{147,11,21},{12,11,427},{146,11,38},{10,0,948},{138,0,968},{7,10,126} +,{136,10,84},{136,10,790},{4,0,114},{9,0,492},{13,0,462},{142,0,215},{6,10,64},{ +12,10,377},{141,10,309},{4,0,77},{5,0,361},{6,0,139},{6,0,401},{6,0,404},{7,0, +413},{7,0,715},{7,0,1716},{11,0,279},{12,0,179},{12,0,258},{13,0,244},{142,0,358 +},{134,0,1717},{7,0,772},{7,0,1061},{7,0,1647},{8,0,82},{11,0,250},{11,0,607},{ +12,0,311},{12,0,420},{13,0,184},{13,0,367},{7,10,1104},{11,10,269},{11,10,539},{ +11,10,627},{11,10,706},{11,10,975},{12,10,248},{12,10,434},{12,10,600},{12,10, +622},{13,10,297},{13,10,485},{14,10,69},{14,10,409},{143,10,108},{135,0,724},{4, +11,512},{4,11,519},{133,11,342},{134,0,1133},{145,11,29},{11,10,977},{141,10,507 +},{6,0,841},{6,0,1042},{6,0,1194},{10,0,993},{140,0,1021},{6,11,31},{7,11,491},{ +7,11,530},{8,11,592},{9,10,34},{11,11,53},{11,10,484},{11,11,779},{12,11,167},{ +12,11,411},{14,11,14},{14,11,136},{15,11,72},{16,11,17},{144,11,72},{4,0,1021},{ +6,0,2037},{133,11,907},{7,0,373},{8,0,335},{8,0,596},{9,0,488},{6,10,1700},{7,10 +,293},{7,10,382},{7,10,1026},{7,10,1087},{7,10,2027},{8,10,252},{8,10,727},{8,10 +,729},{9,10,30},{9,10,199},{9,10,231},{9,10,251},{9,10,334},{9,10,361},{9,10,712 +},{10,10,55},{10,10,60},{10,10,232},{10,10,332},{10,10,384},{10,10,396},{10,10, +504},{10,10,542},{10,10,652},{11,10,20},{11,10,48},{11,10,207},{11,10,291},{11, +10,298},{11,10,342},{11,10,365},{11,10,394},{11,10,620},{11,10,705},{11,10,1017} +,{12,10,123},{12,10,340},{12,10,406},{12,10,643},{13,10,61},{13,10,269},{13,10, +311},{13,10,319},{13,10,486},{14,10,234},{15,10,62},{15,10,85},{16,10,71},{18,10 +,119},{148,10,105},{150,0,37},{4,11,208},{5,11,106},{6,11,531},{8,11,408},{9,11, +188},{138,11,572},{132,0,564},{6,0,513},{135,0,1052},{132,0,825},{9,0,899},{140, +11,441},{134,0,778},{133,11,379},{7,0,1417},{12,0,382},{17,0,48},{152,0,12},{132 +,11,241},{7,0,1116},{6,10,379},{7,10,270},{8,10,176},{8,10,183},{9,10,432},{9,10 +,661},{12,10,247},{12,10,617},{146,10,125},{5,10,792},{133,10,900},{6,0,545},{7, +0,565},{7,0,1669},{10,0,114},{11,0,642},{140,0,618},{133,0,5},{138,11,7},{132,11 +,259},{135,0,192},{134,0,701},{136,0,763},{135,10,1979},{4,10,901},{133,10,776}, +{10,0,755},{147,0,29},{133,0,759},{4,11,173},{5,11,312},{5,11,512},{135,11,1285} +,{7,11,1603},{7,11,1691},{9,11,464},{11,11,195},{12,11,279},{12,11,448},{14,11, +11},{147,11,102},{7,0,370},{7,0,1007},{7,0,1177},{135,0,1565},{135,0,1237},{4,0, +87},{5,0,250},{141,0,298},{4,11,452},{5,11,583},{5,11,817},{6,11,433},{7,11,593} +,{7,11,720},{7,11,1378},{8,11,161},{9,11,284},{10,11,313},{139,11,886},{4,11,547 +},{135,11,1409},{136,11,722},{4,10,37},{5,10,334},{135,10,1253},{132,10,508},{12 +,0,107},{146,0,31},{8,11,420},{139,11,193},{135,0,814},{135,11,409},{140,0,991}, +{4,0,57},{7,0,1195},{7,0,1438},{7,0,1548},{7,0,1835},{7,0,1904},{9,0,757},{10,0, +604},{139,0,519},{132,0,540},{138,11,308},{132,10,533},{136,0,608},{144,11,65},{ +4,0,1014},{134,0,2029},{4,0,209},{7,0,902},{5,11,1002},{136,11,745},{134,0,2030} +,{6,0,303},{7,0,335},{7,0,1437},{7,0,1668},{8,0,553},{8,0,652},{8,0,656},{9,0, +558},{11,0,743},{149,0,18},{5,11,575},{6,11,354},{135,11,701},{4,11,239},{6,11, +477},{7,11,1607},{11,11,68},{139,11,617},{132,0,559},{8,0,527},{18,0,60},{147,0, +24},{133,10,920},{138,0,511},{133,0,1017},{133,0,675},{138,10,391},{11,0,156},{ +135,10,1952},{138,11,369},{132,11,367},{133,0,709},{6,0,698},{134,0,887},{142,10 +,126},{134,0,1745},{132,10,483},{13,11,299},{142,11,75},{133,0,714},{7,0,8},{136 +,0,206},{138,10,480},{4,11,694},{9,10,495},{146,10,104},{7,11,1248},{11,11,621}, +{139,11,702},{140,11,687},{132,0,776},{139,10,1009},{135,0,1272},{134,0,1059},{8 +,10,653},{13,10,93},{147,10,14},{135,11,213},{136,0,406},{133,10,172},{132,0,947 +},{8,0,175},{10,0,168},{138,0,573},{132,0,870},{6,0,1567},{151,11,28},{134,11, +472},{5,10,260},{136,11,132},{4,11,751},{11,11,390},{140,11,32},{4,11,409},{133, +11,78},{12,0,554},{6,11,473},{145,11,105},{133,0,784},{8,0,908},{136,11,306},{ +139,0,882},{6,0,358},{7,0,1393},{8,0,396},{10,0,263},{14,0,154},{16,0,48},{17,0, +8},{7,11,1759},{8,11,396},{10,11,263},{14,11,154},{16,11,48},{145,11,8},{13,11, +163},{13,11,180},{18,11,78},{148,11,35},{14,0,32},{18,0,85},{20,0,2},{152,0,16}, +{7,0,228},{10,0,770},{8,10,167},{8,10,375},{9,10,82},{9,10,561},{138,10,620},{ +132,0,845},{9,0,14},{9,0,441},{10,0,306},{139,0,9},{11,0,966},{12,0,287},{13,0, +342},{13,0,402},{15,0,110},{15,0,163},{8,10,194},{136,10,756},{134,0,1578},{4,0, +967},{6,0,1820},{6,0,1847},{140,0,716},{136,0,594},{7,0,1428},{7,0,1640},{7,0, +1867},{9,0,169},{9,0,182},{9,0,367},{9,0,478},{9,0,506},{9,0,551},{9,0,557},{9,0 +,648},{9,0,697},{9,0,705},{9,0,725},{9,0,787},{9,0,794},{10,0,198},{10,0,214},{ +10,0,267},{10,0,275},{10,0,456},{10,0,551},{10,0,561},{10,0,613},{10,0,627},{10, +0,668},{10,0,675},{10,0,691},{10,0,695},{10,0,707},{10,0,715},{11,0,183},{11,0, +201},{11,0,244},{11,0,262},{11,0,352},{11,0,439},{11,0,493},{11,0,572},{11,0,591 +},{11,0,608},{11,0,611},{11,0,646},{11,0,674},{11,0,711},{11,0,751},{11,0,761},{ +11,0,776},{11,0,785},{11,0,850},{11,0,853},{11,0,862},{11,0,865},{11,0,868},{11, +0,875},{11,0,898},{11,0,902},{11,0,903},{11,0,910},{11,0,932},{11,0,942},{11,0, +957},{11,0,967},{11,0,972},{12,0,148},{12,0,195},{12,0,220},{12,0,237},{12,0,318 +},{12,0,339},{12,0,393},{12,0,445},{12,0,450},{12,0,474},{12,0,505},{12,0,509},{ +12,0,533},{12,0,591},{12,0,594},{12,0,597},{12,0,621},{12,0,633},{12,0,642},{13, +0,59},{13,0,60},{13,0,145},{13,0,239},{13,0,250},{13,0,329},{13,0,344},{13,0,365 +},{13,0,372},{13,0,387},{13,0,403},{13,0,414},{13,0,456},{13,0,470},{13,0,478},{ +13,0,483},{13,0,489},{14,0,55},{14,0,57},{14,0,81},{14,0,90},{14,0,148},{14,0, +239},{14,0,266},{14,0,321},{14,0,326},{14,0,327},{14,0,330},{14,0,347},{14,0,355 +},{14,0,401},{14,0,404},{14,0,411},{14,0,414},{14,0,416},{14,0,420},{15,0,61},{ +15,0,74},{15,0,87},{15,0,88},{15,0,94},{15,0,96},{15,0,116},{15,0,149},{15,0,154 +},{16,0,50},{16,0,63},{16,0,73},{17,0,2},{17,0,66},{17,0,92},{17,0,103},{17,0, +112},{17,0,120},{18,0,50},{18,0,54},{18,0,82},{18,0,86},{18,0,90},{18,0,111},{18 +,0,115},{18,0,156},{19,0,40},{19,0,79},{20,0,78},{21,0,22},{135,11,883},{5,0,161 +},{135,0,839},{4,0,782},{13,11,293},{142,11,56},{133,11,617},{139,11,50},{135,10 +,22},{145,0,64},{5,10,639},{7,10,1249},{139,10,896},{138,0,998},{135,11,2042},{4 +,11,546},{142,11,233},{6,0,1043},{134,0,1574},{134,0,1496},{4,10,102},{7,10,815} +,{7,10,1699},{139,10,964},{12,0,781},{142,0,461},{4,11,313},{133,11,577},{6,0, +639},{6,0,1114},{137,0,817},{8,11,184},{141,11,433},{7,0,1814},{135,11,935},{10, +0,997},{140,0,958},{4,0,812},{137,11,625},{132,10,899},{136,10,795},{5,11,886},{ +6,11,46},{6,11,1790},{7,11,14},{7,11,732},{7,11,1654},{8,11,95},{8,11,327},{8,11 +,616},{10,11,598},{10,11,769},{11,11,134},{11,11,747},{12,11,378},{142,11,97},{ +136,0,139},{6,10,52},{9,10,104},{9,10,559},{12,10,308},{147,10,87},{133,11,1021} +,{132,10,604},{132,10,301},{136,10,779},{7,0,643},{136,0,236},{132,11,153},{134, +0,1172},{147,10,32},{133,11,798},{6,0,1338},{132,11,587},{6,11,598},{7,11,42},{8 +,11,695},{10,11,212},{11,11,158},{14,11,196},{145,11,85},{135,10,508},{5,11,957} +,{5,11,1008},{135,11,249},{4,11,129},{135,11,465},{5,0,54},{7,11,470},{7,11,1057 +},{7,11,1201},{9,11,755},{11,11,906},{140,11,527},{7,11,908},{146,11,7},{5,11, +148},{136,11,450},{144,11,1},{4,0,256},{135,0,1488},{9,0,351},{6,10,310},{7,10, +1849},{8,10,72},{8,10,272},{8,10,431},{9,10,12},{10,10,563},{10,10,630},{10,10, +796},{10,10,810},{11,10,367},{11,10,599},{11,10,686},{140,10,672},{6,0,1885},{6, +0,1898},{6,0,1899},{140,0,955},{4,0,714},{133,0,469},{6,0,1270},{134,0,1456},{ +132,0,744},{6,0,313},{7,10,537},{8,10,64},{9,10,127},{10,10,496},{12,10,510},{ +141,10,384},{4,11,217},{4,10,244},{5,11,710},{7,10,233},{7,11,1926},{9,11,428},{ +9,11,708},{10,11,254},{10,11,296},{10,11,720},{11,11,109},{11,11,255},{12,11,165 +},{12,11,315},{13,11,107},{13,11,203},{14,11,54},{14,11,99},{14,11,114},{14,11, +388},{16,11,85},{17,11,9},{17,11,33},{20,11,25},{20,11,28},{20,11,29},{21,11,9}, +{21,11,10},{21,11,34},{150,11,17},{138,0,402},{7,0,969},{146,0,55},{8,0,50},{137 +,0,624},{134,0,1355},{132,0,572},{134,10,1650},{10,10,702},{139,10,245},{10,0, +847},{142,0,445},{6,0,43},{7,0,38},{8,0,248},{138,0,513},{133,0,369},{137,10,338 +},{133,0,766},{133,0,363},{133,10,896},{8,11,392},{11,11,54},{13,11,173},{13,11, +294},{148,11,7},{134,0,678},{7,11,1230},{136,11,531},{6,0,258},{140,0,409},{5,0, +249},{148,0,82},{7,10,1117},{136,10,539},{5,0,393},{6,0,378},{7,0,1981},{9,0,32} +,{9,0,591},{10,0,685},{10,0,741},{142,0,382},{133,0,788},{134,0,1281},{134,0, +1295},{7,0,1968},{141,0,509},{4,0,61},{5,0,58},{5,0,171},{5,0,683},{6,0,291},{6, +0,566},{7,0,1650},{11,0,523},{12,0,273},{12,0,303},{15,0,39},{143,0,111},{6,0, +706},{134,0,1283},{134,0,589},{135,11,1433},{133,11,435},{7,0,1059},{13,0,54},{5 +,10,4},{5,10,810},{6,10,13},{6,10,538},{6,10,1690},{6,10,1726},{7,10,1819},{8,10 +,148},{8,10,696},{8,10,791},{12,10,125},{143,10,9},{135,10,1268},{5,11,85},{6,11 +,419},{7,11,134},{7,11,305},{7,11,361},{7,11,1337},{8,11,71},{140,11,519},{137,0 +,824},{140,11,688},{5,11,691},{7,11,345},{7,10,1385},{9,11,94},{11,10,582},{11, +10,650},{11,10,901},{11,10,949},{12,11,169},{12,10,232},{12,10,236},{13,10,413}, +{13,10,501},{146,10,116},{4,0,917},{133,0,1005},{7,0,1598},{5,11,183},{6,11,582} +,{9,11,344},{10,11,679},{140,11,435},{4,10,925},{5,10,803},{8,10,698},{138,10, +828},{132,0,919},{135,11,511},{139,10,992},{4,0,255},{5,0,302},{6,0,132},{7,0, +128},{7,0,283},{7,0,1299},{10,0,52},{10,0,514},{11,0,925},{13,0,92},{142,0,309}, +{134,0,1369},{135,10,1847},{134,0,328},{7,11,1993},{136,11,684},{133,10,383},{ +137,0,173},{134,11,583},{134,0,1411},{19,0,65},{5,11,704},{8,11,357},{10,11,745} +,{14,11,426},{17,11,94},{147,11,57},{9,10,660},{138,10,347},{4,11,179},{5,11,198 +},{133,11,697},{7,11,347},{7,11,971},{8,11,181},{138,11,711},{141,0,442},{11,0, +842},{11,0,924},{13,0,317},{13,0,370},{13,0,469},{13,0,471},{14,0,397},{18,0,69} +,{18,0,145},{7,10,572},{9,10,592},{11,10,680},{12,10,356},{140,10,550},{14,11,19 +},{14,11,28},{144,11,29},{136,0,534},{4,11,243},{5,11,203},{7,11,19},{7,11,71},{ +7,11,113},{10,11,405},{11,11,357},{142,11,240},{6,0,210},{10,0,845},{138,0,862}, +{7,11,1351},{9,11,581},{10,11,639},{11,11,453},{140,11,584},{7,11,1450},{139,11, +99},{10,0,892},{12,0,719},{144,0,105},{4,0,284},{6,0,223},{134,11,492},{5,11,134 +},{6,11,408},{6,11,495},{135,11,1593},{136,0,529},{137,0,807},{4,0,218},{7,0,526 +},{143,0,137},{6,0,1444},{142,11,4},{132,11,665},{4,0,270},{5,0,192},{6,0,332},{ +7,0,1322},{4,11,248},{7,11,137},{137,11,349},{140,0,661},{7,0,1517},{11,0,597},{ +14,0,76},{14,0,335},{20,0,33},{7,10,748},{139,10,700},{5,11,371},{135,11,563},{ +146,11,57},{133,10,127},{133,0,418},{4,11,374},{7,11,547},{7,11,1700},{7,11,1833 +},{139,11,858},{6,10,198},{140,10,83},{7,11,1812},{13,11,259},{13,11,356},{14,11 +,242},{147,11,114},{7,0,379},{8,0,481},{9,0,377},{5,10,276},{6,10,55},{135,10, +1369},{138,11,286},{5,0,1003},{6,0,149},{6,10,1752},{136,10,726},{8,0,262},{9,0, +627},{10,0,18},{11,0,214},{11,0,404},{11,0,457},{11,0,780},{11,0,913},{13,0,401} +,{14,0,200},{6,11,1647},{7,11,1552},{7,11,2010},{9,11,494},{137,11,509},{135,0, +742},{136,0,304},{132,0,142},{133,10,764},{6,10,309},{7,10,331},{138,10,550},{ +135,10,1062},{6,11,123},{7,11,214},{7,10,986},{9,11,728},{10,11,157},{11,11,346} +,{11,11,662},{143,11,106},{135,10,1573},{7,0,925},{137,0,799},{4,0,471},{5,0,51} +,{6,0,602},{8,0,484},{138,0,195},{136,0,688},{132,0,697},{6,0,1169},{6,0,1241},{ +6,10,194},{7,10,133},{10,10,493},{10,10,570},{139,10,664},{140,0,751},{7,0,929}, +{10,0,452},{11,0,878},{16,0,33},{5,10,24},{5,10,569},{6,10,3},{6,10,119},{6,10, +143},{6,10,440},{7,10,599},{7,10,1686},{7,10,1854},{8,10,424},{9,10,43},{9,10, +584},{9,10,760},{10,10,328},{11,10,159},{11,10,253},{12,10,487},{140,10,531},{4, +11,707},{13,11,106},{18,11,49},{147,11,41},{5,0,221},{5,11,588},{134,11,393},{ +134,0,1437},{6,11,211},{7,11,1690},{11,11,486},{140,11,369},{5,10,14},{5,10,892} +,{6,10,283},{7,10,234},{136,10,537},{4,0,988},{136,0,955},{135,0,1251},{4,10,126 +},{8,10,635},{147,10,34},{4,10,316},{135,10,1561},{137,10,861},{4,10,64},{5,10, +352},{5,10,720},{6,10,368},{139,10,359},{134,0,192},{4,0,132},{5,0,69},{135,0, +1242},{7,10,1577},{10,10,304},{10,10,549},{12,10,365},{13,10,220},{13,10,240},{ +142,10,33},{4,0,111},{7,0,865},{134,11,219},{5,11,582},{6,11,1646},{7,11,99},{7, +11,1962},{7,11,1986},{8,11,515},{8,11,773},{9,11,23},{9,11,491},{12,11,620},{14, +11,52},{145,11,50},{132,0,767},{7,11,568},{148,11,21},{6,0,42},{7,0,1416},{7,0, +2005},{8,0,131},{8,0,466},{9,0,672},{13,0,252},{20,0,103},{133,11,851},{135,0, +1050},{6,10,175},{137,10,289},{5,10,432},{133,10,913},{6,0,44},{136,0,368},{135, +11,784},{132,0,570},{133,0,120},{139,10,595},{140,0,29},{6,0,227},{135,0,1589},{ +4,11,98},{7,11,1365},{9,11,422},{9,11,670},{10,11,775},{11,11,210},{13,11,26},{ +13,11,457},{141,11,476},{140,10,80},{5,10,931},{134,10,1698},{133,0,522},{134,0, +1120},{135,0,1529},{12,0,739},{14,0,448},{142,0,467},{11,10,526},{11,10,939},{ +141,10,290},{5,10,774},{6,10,1637},{6,10,1686},{134,10,1751},{6,0,1667},{135,0, +2036},{7,10,1167},{11,10,934},{13,10,391},{145,10,76},{137,11,147},{6,10,260},{7 +,10,1484},{11,11,821},{12,11,110},{12,11,153},{18,11,41},{150,11,19},{6,0,511},{ +12,0,132},{134,10,573},{5,0,568},{6,0,138},{135,0,1293},{132,0,1020},{8,0,258},{ +9,0,208},{137,0,359},{4,0,565},{8,0,23},{136,0,827},{134,0,344},{4,0,922},{5,0, +1023},{13,11,477},{14,11,120},{148,11,61},{134,0,240},{5,11,209},{6,11,30},{11, +11,56},{139,11,305},{6,0,171},{7,0,1002},{7,0,1324},{9,0,415},{14,0,230},{18,0, +68},{4,10,292},{4,10,736},{5,10,871},{6,10,1689},{7,10,1944},{137,10,580},{9,11, +635},{139,11,559},{4,11,150},{5,11,303},{134,11,327},{6,10,63},{135,10,920},{133 +,10,793},{8,11,192},{10,11,78},{10,11,555},{11,11,308},{13,11,359},{147,11,95},{ +135,11,786},{135,11,1712},{136,0,402},{6,0,754},{6,11,1638},{7,11,79},{7,11,496} +,{9,11,138},{10,11,336},{11,11,12},{12,11,412},{12,11,440},{142,11,305},{4,0,716 +},{141,0,31},{133,0,982},{8,0,691},{8,0,731},{5,10,67},{6,10,62},{6,10,374},{135 +,10,1391},{9,10,790},{140,10,47},{139,11,556},{151,11,1},{7,11,204},{7,11,415},{ +8,11,42},{10,11,85},{11,11,33},{11,11,564},{12,11,571},{149,11,1},{8,0,888},{7, +11,610},{135,11,1501},{4,10,391},{135,10,1169},{5,0,847},{9,0,840},{138,0,803},{ +137,0,823},{134,0,785},{8,0,152},{9,0,53},{9,0,268},{9,0,901},{10,0,518},{10,0, +829},{11,0,188},{13,0,74},{14,0,46},{15,0,17},{15,0,33},{17,0,40},{18,0,36},{19, +0,20},{22,0,1},{152,0,2},{4,11,3},{5,11,247},{5,11,644},{7,11,744},{7,11,1207},{ +7,11,1225},{7,11,1909},{146,11,147},{136,0,532},{135,0,681},{132,10,271},{140,0, +314},{140,0,677},{4,0,684},{136,0,384},{5,11,285},{9,11,67},{13,11,473},{143,11, +82},{4,10,253},{5,10,544},{7,10,300},{137,10,340},{7,0,110},{7,0,447},{8,0,290}, +{8,0,591},{9,0,382},{9,0,649},{11,0,71},{11,0,155},{11,0,313},{12,0,5},{13,0,325 +},{142,0,287},{134,0,1818},{136,0,1007},{138,0,321},{7,0,360},{7,0,425},{9,0,66} +,{9,0,278},{138,0,644},{133,10,818},{5,0,385},{5,10,541},{6,10,94},{6,10,499},{7 +,10,230},{139,10,321},{4,10,920},{5,10,25},{5,10,790},{6,10,457},{7,10,853},{136 +,10,788},{4,0,900},{133,0,861},{5,0,254},{7,0,985},{136,0,73},{7,0,1959},{136,0, +683},{134,10,1765},{133,10,822},{132,10,634},{4,11,29},{6,11,532},{7,11,1628},{7 +,11,1648},{9,11,303},{9,11,350},{10,11,433},{11,11,97},{11,11,557},{11,11,745},{ +12,11,289},{12,11,335},{12,11,348},{12,11,606},{13,11,116},{13,11,233},{13,11, +466},{14,11,181},{14,11,209},{14,11,232},{14,11,236},{14,11,300},{16,11,41},{148 +,11,97},{19,0,86},{6,10,36},{7,10,658},{136,10,454},{135,11,1692},{132,0,725},{5 +,11,501},{7,11,1704},{9,11,553},{11,11,520},{12,11,557},{141,11,249},{134,0,196} +,{133,0,831},{136,0,723},{7,0,1897},{13,0,80},{13,0,437},{145,0,74},{4,0,992},{6 +,0,627},{136,0,994},{135,11,1294},{132,10,104},{5,0,848},{6,0,66},{136,0,764},{4 +,0,36},{7,0,1387},{10,0,205},{139,0,755},{6,0,1046},{134,0,1485},{134,0,950},{ +132,0,887},{14,0,450},{148,0,111},{7,0,620},{7,0,831},{9,10,542},{9,10,566},{138 +,10,728},{6,0,165},{138,0,388},{139,10,263},{4,0,719},{135,0,155},{138,10,468},{ +6,11,453},{144,11,36},{134,11,129},{5,0,533},{7,0,755},{138,0,780},{134,0,1465}, +{4,0,353},{6,0,146},{6,0,1789},{7,0,427},{7,0,990},{7,0,1348},{9,0,665},{9,0,898 +},{11,0,893},{142,0,212},{7,10,87},{142,10,288},{4,0,45},{135,0,1257},{12,0,7},{ +7,10,988},{7,10,1939},{9,10,64},{9,10,502},{12,10,34},{13,10,12},{13,10,234},{ +147,10,77},{4,0,607},{5,11,60},{6,11,504},{7,11,614},{7,11,1155},{140,11,0},{135 +,10,141},{8,11,198},{11,11,29},{140,11,534},{140,0,65},{136,0,816},{132,10,619}, +{139,0,88},{5,10,246},{8,10,189},{9,10,355},{9,10,512},{10,10,124},{10,10,453},{ +11,10,143},{11,10,416},{11,10,859},{141,10,341},{4,11,379},{135,11,1397},{4,0, +600},{137,0,621},{133,0,367},{134,0,561},{6,0,559},{134,0,1691},{6,0,585},{134, +11,585},{135,11,1228},{4,11,118},{5,10,678},{6,11,274},{6,11,361},{7,11,75},{141 +,11,441},{135,11,1818},{137,11,841},{5,0,573},{6,0,287},{7,10,862},{7,10,1886},{ +138,10,179},{132,10,517},{140,11,693},{5,11,314},{6,11,221},{7,11,419},{10,11, +650},{11,11,396},{12,11,156},{13,11,369},{14,11,333},{145,11,47},{140,10,540},{ +136,10,667},{11,10,403},{146,10,83},{6,0,672},{133,10,761},{9,0,157},{10,10,131} +,{140,10,72},{7,0,714},{134,11,460},{134,0,456},{133,0,925},{5,11,682},{135,11, +1887},{136,11,510},{136,11,475},{133,11,1016},{9,0,19},{7,11,602},{8,11,179},{10 +,11,781},{140,11,126},{6,11,329},{138,11,111},{6,0,822},{134,0,1473},{144,11,86} +,{11,0,113},{139,11,113},{5,11,821},{134,11,1687},{133,10,449},{7,0,463},{17,0, +69},{136,10,103},{7,10,2028},{138,10,641},{6,0,193},{7,0,240},{7,0,1682},{10,0, +51},{10,0,640},{11,0,410},{13,0,82},{14,0,247},{14,0,331},{142,0,377},{6,0,471}, +{11,0,411},{142,0,2},{5,11,71},{7,11,1407},{9,11,388},{9,11,704},{10,11,261},{10 +,11,619},{11,11,547},{11,11,619},{143,11,157},{136,0,633},{135,0,1148},{6,0,554} +,{7,0,1392},{12,0,129},{7,10,1274},{7,10,1386},{7,11,2008},{9,11,337},{10,11,517 +},{146,10,87},{7,0,803},{8,0,542},{6,10,187},{7,10,1203},{8,10,380},{14,10,117}, +{149,10,28},{6,10,297},{7,10,793},{139,10,938},{8,0,438},{11,0,363},{7,10,464},{ +11,10,105},{12,10,231},{14,10,386},{15,10,102},{148,10,75},{5,11,16},{6,11,86},{ +6,11,603},{7,11,292},{7,11,561},{8,11,257},{8,11,382},{9,11,721},{9,11,778},{11, +11,581},{140,11,466},{6,0,717},{4,11,486},{133,11,491},{132,0,875},{132,11,72},{ +6,11,265},{135,11,847},{4,0,237},{135,0,514},{6,0,392},{7,0,65},{135,0,2019},{ +140,11,261},{135,11,922},{137,11,404},{12,0,563},{14,0,101},{18,0,129},{7,10, +1010},{11,10,733},{11,10,759},{13,10,34},{146,10,45},{7,10,1656},{9,10,369},{10, +10,338},{10,10,490},{11,10,154},{11,10,545},{11,10,775},{13,10,77},{141,10,274}, +{4,0,444},{10,0,146},{140,0,9},{139,11,163},{7,0,1260},{135,0,1790},{9,0,222},{ +10,0,43},{139,0,900},{137,11,234},{138,0,971},{137,0,761},{134,0,699},{136,11, +434},{6,0,1116},{7,0,1366},{5,10,20},{6,11,197},{6,10,298},{7,10,659},{8,11,205} +,{137,10,219},{132,11,490},{11,11,820},{150,11,51},{7,10,1440},{11,10,854},{11, +10,872},{11,10,921},{12,10,551},{13,10,472},{142,10,367},{140,11,13},{132,0,829} +,{12,0,242},{132,10,439},{136,10,669},{6,0,593},{6,11,452},{7,11,312},{138,11, +219},{4,11,333},{9,11,176},{12,11,353},{141,11,187},{7,0,36},{8,0,201},{136,0, +605},{140,0,224},{132,10,233},{134,0,1430},{134,0,1806},{4,0,523},{133,0,638},{6 +,0,1889},{9,0,958},{9,0,971},{9,0,976},{12,0,796},{12,0,799},{12,0,808},{12,0, +835},{12,0,836},{12,0,914},{12,0,946},{15,0,216},{15,0,232},{18,0,183},{18,0,187 +},{18,0,194},{18,0,212},{18,0,232},{149,0,49},{132,10,482},{6,0,827},{134,0,1434 +},{135,10,346},{134,0,2043},{6,0,242},{7,0,227},{7,0,1581},{8,0,104},{9,0,113},{ +9,0,220},{9,0,427},{10,0,136},{10,0,239},{11,0,579},{11,0,1023},{13,0,4},{13,0, +204},{13,0,316},{148,0,86},{134,11,1685},{7,0,148},{8,0,284},{141,0,63},{142,0, +10},{135,11,584},{134,0,1249},{7,0,861},{135,10,334},{5,10,795},{6,10,1741},{137 +,11,70},{132,0,807},{7,11,135},{8,11,7},{8,11,62},{9,11,243},{10,11,658},{10,11, +697},{11,11,456},{139,11,756},{9,11,395},{138,11,79},{137,11,108},{147,0,94},{ +136,0,494},{135,11,631},{135,10,622},{7,0,1510},{135,10,1750},{4,10,203},{135,10 +,1936},{7,11,406},{7,11,459},{8,11,606},{139,11,726},{7,0,1306},{8,0,505},{9,0, +482},{10,0,126},{11,0,225},{12,0,347},{12,0,449},{13,0,19},{14,0,218},{142,0,435 +},{5,0,268},{10,0,764},{12,0,120},{13,0,39},{145,0,127},{142,11,68},{11,10,678}, +{140,10,307},{12,11,268},{12,11,640},{142,11,119},{135,10,2044},{133,11,612},{4, +11,372},{7,11,482},{8,11,158},{9,11,602},{9,11,615},{10,11,245},{10,11,678},{10, +11,744},{11,11,248},{139,11,806},{7,10,311},{9,10,308},{140,10,255},{4,0,384},{ +135,0,1022},{5,11,854},{135,11,1991},{135,10,1266},{4,10,400},{5,10,267},{135,10 +,232},{135,0,1703},{9,0,159},{11,0,661},{140,0,603},{4,0,964},{14,0,438},{14,0, +444},{14,0,456},{22,0,60},{22,0,63},{9,11,106},{9,11,163},{9,11,296},{10,11,167} +,{10,11,172},{10,11,777},{139,11,16},{136,0,583},{132,0,515},{8,0,632},{8,0,697} +,{137,0,854},{5,11,195},{135,11,1685},{6,0,1123},{134,0,1365},{134,11,328},{7,11 +,1997},{8,11,730},{139,11,1006},{4,0,136},{133,0,551},{134,0,1782},{7,0,1287},{9 +,0,44},{10,0,552},{10,0,642},{11,0,839},{12,0,274},{12,0,275},{12,0,372},{13,0, +91},{142,0,125},{5,11,751},{11,11,797},{140,11,203},{133,0,732},{7,0,679},{8,0, +313},{4,10,100},{135,11,821},{10,0,361},{142,0,316},{134,0,595},{6,0,147},{7,0, +886},{9,0,753},{138,0,268},{5,10,362},{5,10,443},{6,10,318},{7,10,1019},{139,10, +623},{5,10,463},{136,10,296},{4,10,454},{5,11,950},{5,11,994},{134,11,351},{138, +0,137},{5,10,48},{5,10,404},{6,10,557},{7,10,458},{8,10,597},{10,10,455},{10,10, +606},{11,10,49},{11,10,548},{12,10,476},{13,10,18},{141,10,450},{133,0,414},{135 +,0,1762},{5,11,421},{135,11,47},{5,10,442},{135,10,1984},{134,0,599},{134,0,1749 +},{134,0,1627},{4,0,488},{132,11,350},{137,11,751},{132,0,83},{140,0,676},{133, +11,967},{7,0,1639},{5,10,55},{140,10,161},{4,11,473},{7,11,623},{8,11,808},{9,11 +,871},{9,11,893},{11,11,38},{11,11,431},{12,11,112},{12,11,217},{12,11,243},{12, +11,562},{12,11,683},{13,11,141},{13,11,197},{13,11,227},{13,11,406},{13,11,487}, +{14,11,156},{14,11,203},{14,11,224},{14,11,256},{18,11,58},{150,11,0},{133,10, +450},{7,11,736},{139,11,264},{134,0,278},{4,11,222},{7,11,286},{136,11,629},{135 +,10,869},{140,0,97},{144,0,14},{134,0,1085},{4,10,213},{7,10,223},{136,10,80},{7 +,0,388},{7,0,644},{139,0,781},{132,0,849},{7,0,229},{8,0,59},{9,0,190},{10,0,378 +},{140,0,191},{7,10,381},{7,10,806},{7,10,820},{8,10,354},{8,10,437},{8,10,787}, +{9,10,657},{10,10,58},{10,10,339},{10,10,749},{11,10,914},{12,10,162},{13,10,75} +,{14,10,106},{14,10,198},{14,10,320},{14,10,413},{146,10,43},{141,11,306},{136, +10,747},{134,0,1115},{16,0,94},{16,0,108},{136,11,146},{6,0,700},{6,0,817},{134, +0,1002},{133,10,692},{4,11,465},{135,11,1663},{134,10,191},{6,0,1414},{135,11, +913},{132,0,660},{7,0,1035},{138,0,737},{6,10,162},{7,10,1960},{136,10,831},{132 +,10,706},{7,0,690},{9,0,217},{9,0,587},{140,0,521},{138,10,426},{135,10,1235},{6 +,11,82},{7,11,138},{7,11,517},{9,11,673},{139,11,238},{138,0,272},{5,11,495},{7, +11,834},{9,11,733},{139,11,378},{134,0,1744},{132,0,1011},{7,11,828},{142,11,116 +},{4,0,733},{9,0,194},{10,0,92},{11,0,198},{12,0,84},{13,0,128},{133,11,559},{10 +,0,57},{10,0,277},{6,11,21},{6,11,1737},{7,11,1444},{136,11,224},{4,10,204},{137 +,10,902},{136,10,833},{11,0,348},{12,0,99},{18,0,1},{18,0,11},{19,0,4},{7,10,366 +},{9,10,287},{12,10,199},{12,10,556},{140,10,577},{6,0,1981},{136,0,936},{21,0, +33},{150,0,40},{5,11,519},{138,11,204},{5,10,356},{135,10,224},{134,0,775},{135, +0,306},{7,10,630},{9,10,567},{11,10,150},{11,10,444},{141,10,119},{5,0,979},{134 +,10,539},{133,0,611},{4,11,402},{135,11,1679},{5,0,178},{7,11,2},{8,11,323},{136 +,11,479},{5,11,59},{135,11,672},{4,0,1010},{6,0,1969},{138,11,237},{133,11,412}, +{146,11,34},{7,11,1740},{146,11,48},{134,0,664},{139,10,814},{4,11,85},{135,11, +549},{133,11,94},{133,11,457},{132,0,390},{134,0,1510},{4,10,235},{135,10,255},{ +4,10,194},{5,10,584},{6,11,11},{6,10,384},{7,11,187},{7,10,583},{10,10,761},{11, +10,760},{139,10,851},{4,11,522},{139,11,802},{135,0,493},{10,11,776},{13,11,345} +,{142,11,425},{146,0,37},{4,11,52},{135,11,661},{134,0,724},{134,0,829},{133,11, +520},{133,10,562},{4,11,281},{5,11,38},{7,11,194},{7,11,668},{7,11,1893},{137,11 +,397},{5,10,191},{137,10,271},{7,0,1537},{14,0,96},{143,0,73},{5,0,473},{11,0, +168},{4,10,470},{6,10,153},{7,10,1503},{7,10,1923},{10,10,701},{11,10,132},{11, +10,227},{11,10,320},{11,10,436},{11,10,525},{11,10,855},{12,10,41},{12,10,286},{ +13,10,103},{13,10,284},{14,10,255},{14,10,262},{15,10,117},{143,10,127},{133,0, +105},{5,0,438},{9,0,694},{12,0,627},{141,0,210},{133,10,327},{6,10,552},{7,10, +1754},{137,10,604},{134,0,1256},{152,0,11},{5,11,448},{11,11,98},{139,11,524},{7 +,0,1626},{5,10,80},{6,10,405},{7,10,403},{7,10,1502},{8,10,456},{9,10,487},{9,10 +,853},{9,10,889},{10,10,309},{11,10,721},{11,10,994},{12,10,430},{13,10,165},{14 +,11,16},{146,11,44},{132,0,779},{8,0,25},{138,0,826},{4,10,453},{5,10,887},{6,10 +,535},{8,10,6},{8,10,543},{136,10,826},{137,11,461},{140,11,632},{132,0,308},{ +135,0,741},{132,0,671},{7,0,150},{8,0,649},{136,0,1020},{9,0,99},{6,11,336},{8, +11,552},{9,11,285},{10,11,99},{139,11,568},{134,0,521},{5,0,339},{14,0,3},{15,0, +41},{15,0,166},{147,0,66},{6,11,423},{7,11,665},{7,11,1210},{9,11,218},{141,11, +222},{6,0,543},{5,10,101},{5,11,256},{6,10,88},{7,10,1677},{9,10,100},{10,10,677 +},{14,10,169},{14,10,302},{14,10,313},{15,10,48},{143,10,84},{4,10,310},{7,10, +708},{7,10,996},{9,10,795},{10,10,390},{10,10,733},{11,10,451},{12,10,249},{14, +10,115},{14,10,286},{143,10,100},{133,10,587},{13,11,417},{14,11,129},{143,11,15 +},{134,0,1358},{136,11,554},{132,10,498},{7,10,217},{8,10,140},{138,10,610},{135 +,11,989},{135,11,634},{6,0,155},{140,0,234},{135,11,462},{132,11,618},{134,0, +1628},{132,0,766},{4,11,339},{5,10,905},{135,11,259},{135,0,829},{4,11,759},{141 +,11,169},{7,0,1445},{4,10,456},{7,10,358},{7,10,1637},{8,10,643},{139,10,483},{5 +,0,486},{135,0,1349},{5,11,688},{135,11,712},{7,0,1635},{8,0,17},{10,0,217},{10, +0,295},{12,0,2},{140,11,2},{138,0,558},{150,10,56},{4,11,278},{5,11,465},{135,11 +,1367},{136,11,482},{133,10,535},{6,0,1362},{6,0,1461},{10,11,274},{10,11,625},{ +139,11,530},{5,0,599},{5,11,336},{6,11,341},{6,11,478},{6,11,1763},{136,11,386}, +{7,10,1748},{137,11,151},{134,0,1376},{133,10,539},{135,11,73},{135,11,1971},{ +139,11,283},{9,0,93},{139,0,474},{6,10,91},{135,10,435},{6,0,447},{5,11,396},{ +134,11,501},{4,10,16},{5,10,316},{5,10,842},{6,10,370},{6,10,1778},{8,10,166},{ +11,10,812},{12,10,206},{12,10,351},{14,10,418},{16,10,15},{16,10,34},{18,10,3},{ +19,10,3},{19,10,7},{20,10,4},{149,10,21},{7,0,577},{7,0,1432},{9,0,475},{9,0,505 +},{9,0,526},{9,0,609},{9,0,689},{9,0,726},{9,0,735},{9,0,738},{10,0,556},{10,0, +674},{10,0,684},{11,0,89},{11,0,202},{11,0,272},{11,0,380},{11,0,415},{11,0,505} +,{11,0,537},{11,0,550},{11,0,562},{11,0,640},{11,0,667},{11,0,688},{11,0,847},{ +11,0,927},{11,0,930},{11,0,940},{12,0,144},{12,0,325},{12,0,329},{12,0,389},{12, +0,403},{12,0,451},{12,0,515},{12,0,604},{12,0,616},{12,0,626},{13,0,66},{13,0, +131},{13,0,167},{13,0,236},{13,0,368},{13,0,411},{13,0,434},{13,0,453},{13,0,461 +},{13,0,474},{14,0,59},{14,0,60},{14,0,139},{14,0,152},{14,0,276},{14,0,353},{14 +,0,402},{15,0,28},{15,0,81},{15,0,123},{15,0,152},{18,0,136},{148,0,88},{4,11, +929},{133,11,799},{136,11,46},{142,0,307},{4,0,609},{7,0,756},{9,0,544},{11,0, +413},{144,0,25},{10,0,687},{7,10,619},{10,10,547},{11,10,122},{140,10,601},{4,0, +930},{133,0,947},{133,0,939},{142,0,21},{4,11,892},{133,11,770},{133,0,962},{5,0 +,651},{8,0,170},{9,0,61},{9,0,63},{10,0,23},{10,0,37},{10,0,834},{11,0,4},{11,0, +187},{11,0,281},{11,0,503},{11,0,677},{12,0,96},{12,0,130},{12,0,244},{14,0,5},{ +14,0,40},{14,0,162},{14,0,202},{146,0,133},{4,0,406},{5,0,579},{12,0,492},{150,0 +,15},{135,11,158},{135,0,597},{132,0,981},{132,10,888},{4,10,149},{138,10,368},{ +132,0,545},{4,10,154},{7,10,1134},{136,10,105},{135,11,2001},{134,0,1558},{4,10, +31},{6,10,429},{7,10,962},{9,10,458},{139,10,691},{132,10,312},{135,10,1642},{6, +0,17},{6,0,1304},{7,0,16},{7,0,1001},{9,0,886},{10,0,489},{10,0,800},{11,0,782}, +{12,0,320},{13,0,467},{14,0,145},{14,0,387},{143,0,119},{135,0,1982},{17,0,17},{ +7,11,1461},{140,11,91},{4,10,236},{132,11,602},{138,0,907},{136,0,110},{7,0,272} +,{19,0,53},{5,10,836},{5,10,857},{134,10,1680},{5,0,458},{7,11,1218},{136,11,303 +},{7,0,1983},{8,0,0},{8,0,171},{9,0,120},{9,0,732},{10,0,473},{11,0,656},{11,0, +998},{18,0,0},{18,0,2},{19,0,21},{10,10,68},{139,10,494},{137,11,662},{4,11,13}, +{5,11,567},{7,11,1498},{9,11,124},{11,11,521},{140,11,405},{4,10,81},{139,10,867 +},{135,11,1006},{7,11,800},{7,11,1783},{138,11,12},{9,0,295},{10,0,443},{5,10, +282},{8,10,650},{137,10,907},{132,11,735},{4,11,170},{4,10,775},{135,11,323},{6, +0,1844},{10,0,924},{11,11,844},{12,11,104},{140,11,625},{5,11,304},{7,11,1403},{ +140,11,498},{134,0,1232},{4,0,519},{10,0,70},{12,0,26},{14,0,17},{14,0,178},{15, +0,34},{149,0,12},{132,0,993},{4,11,148},{133,11,742},{6,0,31},{7,0,491},{7,0,530 +},{8,0,592},{11,0,53},{11,0,779},{12,0,167},{12,0,411},{14,0,14},{14,0,136},{15, +0,72},{16,0,17},{144,0,72},{133,0,907},{134,0,733},{133,11,111},{4,10,71},{5,10, +376},{7,10,119},{138,10,665},{136,0,55},{8,0,430},{136,11,430},{4,0,208},{5,0, +106},{6,0,531},{8,0,408},{9,0,188},{138,0,572},{12,0,56},{11,10,827},{14,10,34}, +{143,10,148},{134,0,1693},{133,11,444},{132,10,479},{140,0,441},{9,0,449},{10,0, +192},{138,0,740},{134,0,928},{4,0,241},{7,10,607},{136,10,99},{8,11,123},{15,11, +6},{144,11,7},{6,11,285},{8,11,654},{11,11,749},{12,11,190},{12,11,327},{13,11, +120},{13,11,121},{13,11,327},{15,11,47},{146,11,40},{4,10,41},{5,10,74},{7,10, +1627},{11,10,871},{140,10,619},{7,0,1525},{11,10,329},{11,10,965},{12,10,241},{ +14,10,354},{15,10,22},{148,10,63},{132,0,259},{135,11,183},{9,10,209},{137,10, +300},{5,11,937},{135,11,100},{133,10,98},{4,0,173},{5,0,312},{5,0,512},{135,0, +1285},{141,0,185},{7,0,1603},{7,0,1691},{9,0,464},{11,0,195},{12,0,279},{12,0, +448},{14,0,11},{147,0,102},{135,0,1113},{133,10,984},{4,0,452},{5,0,583},{135,0, +720},{4,0,547},{5,0,817},{6,0,433},{7,0,593},{7,0,1378},{8,0,161},{9,0,284},{10, +0,313},{139,0,886},{8,0,722},{4,10,182},{6,10,205},{135,10,220},{150,0,13},{4,10 +,42},{9,10,205},{9,10,786},{138,10,659},{6,0,289},{7,0,1670},{12,0,57},{151,0,4} +,{132,10,635},{14,0,43},{146,0,21},{139,10,533},{135,0,1694},{8,0,420},{139,0, +193},{135,0,409},{132,10,371},{4,10,272},{135,10,836},{5,10,825},{134,10,1640},{ +5,11,251},{5,11,956},{8,11,268},{9,11,214},{146,11,142},{138,0,308},{6,0,1863},{ +141,11,37},{137,10,879},{7,10,317},{135,10,569},{132,11,294},{134,0,790},{5,0, +1002},{136,0,745},{5,11,346},{5,11,711},{136,11,390},{135,0,289},{5,0,504},{11,0 +,68},{137,10,307},{4,0,239},{6,0,477},{7,0,1607},{139,0,617},{149,0,13},{133,0, +609},{133,11,624},{5,11,783},{7,11,1998},{135,11,2047},{133,10,525},{132,0,367}, +{132,11,594},{6,0,528},{133,10,493},{4,10,174},{135,10,911},{8,10,417},{137,10, +782},{132,0,694},{7,0,548},{137,0,58},{4,10,32},{5,10,215},{6,10,269},{7,10,1782 +},{7,10,1892},{10,10,16},{11,10,822},{11,10,954},{141,10,481},{140,0,687},{7,0, +1749},{136,10,477},{132,11,569},{133,10,308},{135,10,1088},{4,0,661},{138,0,1004 +},{5,11,37},{6,11,39},{6,11,451},{7,11,218},{7,11,667},{7,11,1166},{7,11,1687},{ +8,11,662},{144,11,2},{9,0,445},{12,0,53},{13,0,492},{5,10,126},{8,10,297},{9,10, +366},{140,10,374},{7,10,1551},{139,10,361},{148,0,74},{134,11,508},{135,0,213},{ +132,10,175},{132,10,685},{6,0,760},{6,0,834},{134,0,1248},{7,11,453},{7,11,635}, +{7,11,796},{8,11,331},{9,11,328},{9,11,330},{9,11,865},{10,11,119},{10,11,235},{ +11,11,111},{11,11,129},{11,11,240},{12,11,31},{12,11,66},{12,11,222},{12,11,269} +,{12,11,599},{12,11,689},{13,11,186},{13,11,364},{142,11,345},{7,0,1672},{139,0, +189},{133,10,797},{133,10,565},{6,0,1548},{6,11,98},{7,11,585},{135,11,702},{9,0 +,968},{15,0,192},{149,0,56},{4,10,252},{6,11,37},{7,11,299},{7,10,1068},{7,11, +1666},{8,11,195},{8,11,316},{9,11,178},{9,11,276},{9,11,339},{9,11,536},{10,11, +102},{10,11,362},{10,10,434},{10,11,785},{11,11,55},{11,11,149},{11,10,228},{11, +10,426},{11,11,773},{13,10,231},{13,11,416},{13,11,419},{14,11,38},{14,11,41},{ +14,11,210},{18,10,106},{148,10,87},{4,0,751},{11,0,390},{140,0,32},{4,0,409},{ +133,0,78},{11,11,458},{12,11,15},{140,11,432},{7,0,1602},{10,0,257},{10,0,698},{ +11,0,544},{11,0,585},{12,0,212},{13,0,307},{5,10,231},{7,10,601},{9,10,277},{9, +10,674},{10,10,178},{10,10,418},{10,10,509},{11,10,531},{12,10,113},{12,10,475}, +{13,10,99},{142,10,428},{6,0,473},{145,0,105},{6,0,1949},{15,0,156},{133,11,645} +,{7,10,1591},{144,10,43},{135,0,1779},{135,10,1683},{4,11,290},{135,11,1356},{ +134,0,763},{6,11,70},{7,11,1292},{10,11,762},{139,11,288},{142,0,29},{140,11,428 +},{7,0,883},{7,11,131},{7,11,422},{8,11,210},{140,11,573},{134,0,488},{4,10,399} +,{5,10,119},{5,10,494},{7,10,751},{137,10,556},{133,0,617},{132,11,936},{139,0, +50},{7,0,1518},{139,0,694},{137,0,785},{4,0,546},{135,0,2042},{7,11,716},{13,11, +97},{141,11,251},{132,11,653},{145,0,22},{134,0,1016},{4,0,313},{133,0,577},{136 +,11,657},{8,0,184},{141,0,433},{135,0,935},{6,0,720},{9,0,114},{146,11,80},{12,0 +,186},{12,0,292},{14,0,100},{18,0,70},{7,10,594},{7,10,851},{7,10,1858},{9,10, +411},{9,10,574},{9,10,666},{9,10,737},{10,10,346},{10,10,712},{11,10,246},{11,10 +,432},{11,10,517},{11,10,647},{11,10,679},{11,10,727},{12,10,304},{12,10,305},{ +12,10,323},{12,10,483},{12,10,572},{12,10,593},{12,10,602},{13,10,95},{13,10,101 +},{13,10,171},{13,10,315},{13,10,378},{13,10,425},{13,10,475},{14,10,63},{14,10, +380},{14,10,384},{15,10,133},{18,10,112},{148,10,72},{135,10,1093},{135,11,1836} +,{132,10,679},{137,10,203},{11,0,402},{12,0,109},{12,0,431},{13,0,179},{13,0,206 +},{14,0,217},{16,0,3},{148,0,53},{7,11,1368},{8,11,232},{8,11,361},{10,11,682},{ +138,11,742},{137,10,714},{5,0,886},{6,0,46},{6,0,1790},{7,0,14},{7,0,732},{7,0, +1654},{8,0,95},{8,0,327},{8,0,616},{9,0,892},{10,0,598},{10,0,769},{11,0,134},{ +11,0,747},{12,0,378},{14,0,97},{137,11,534},{4,0,969},{136,10,825},{137,11,27},{ +6,0,727},{142,11,12},{133,0,1021},{134,0,1190},{134,11,1657},{5,10,143},{5,10, +769},{6,10,1760},{7,10,682},{7,10,1992},{136,10,736},{132,0,153},{135,11,127},{ +133,0,798},{132,0,587},{6,0,598},{7,0,42},{8,0,695},{10,0,212},{11,0,158},{14,0, +196},{145,0,85},{133,10,860},{6,0,1929},{134,0,1933},{5,0,957},{5,0,1008},{9,0, +577},{12,0,141},{6,10,422},{7,10,0},{7,10,1544},{8,11,364},{11,10,990},{12,10, +453},{13,10,47},{141,10,266},{134,0,1319},{4,0,129},{135,0,465},{7,0,470},{7,0, +1057},{7,0,1201},{9,0,755},{11,0,906},{140,0,527},{7,0,908},{146,0,7},{5,0,148}, +{136,0,450},{5,10,515},{137,10,131},{7,10,1605},{11,10,962},{146,10,139},{132,10 +,646},{134,0,1166},{4,10,396},{7,10,728},{9,10,117},{13,10,202},{148,10,51},{6, +10,121},{6,10,124},{6,10,357},{7,10,1138},{7,10,1295},{8,10,162},{139,10,655},{ +14,0,374},{142,11,374},{138,0,253},{139,0,1003},{5,11,909},{9,11,849},{138,11, +805},{133,10,237},{7,11,525},{7,11,1579},{8,11,497},{136,11,573},{137,0,46},{132 +,0,879},{134,0,806},{135,0,1868},{6,0,1837},{134,0,1846},{6,0,730},{134,0,881},{ +7,0,965},{7,0,1460},{7,0,1604},{7,11,193},{7,11,397},{7,11,1105},{8,11,124},{8, +11,619},{9,11,305},{10,11,264},{11,11,40},{12,11,349},{13,11,134},{13,11,295},{ +14,11,155},{15,11,120},{146,11,105},{136,0,506},{143,0,10},{4,11,262},{7,11,342} +,{7,10,571},{7,10,1877},{10,10,366},{141,11,23},{133,11,641},{10,0,22},{9,10,513 +},{10,10,39},{12,10,122},{140,10,187},{135,11,1431},{150,11,49},{4,11,99},{6,11, +250},{6,11,346},{8,11,127},{138,11,81},{6,0,2014},{8,0,928},{10,0,960},{10,0,979 +},{140,0,996},{134,0,296},{132,11,915},{5,11,75},{9,11,517},{10,11,470},{12,11, +155},{141,11,224},{137,10,873},{4,0,854},{140,11,18},{134,0,587},{7,10,107},{7, +10,838},{8,10,550},{138,10,401},{11,0,636},{15,0,145},{17,0,34},{19,0,50},{23,0, +20},{11,10,588},{11,10,864},{11,10,968},{143,10,160},{135,11,216},{7,0,982},{10, +0,32},{143,0,56},{133,10,768},{133,11,954},{6,11,304},{7,11,1114},{8,11,418},{10 +,11,345},{11,11,341},{11,11,675},{141,11,40},{9,11,410},{139,11,425},{136,0,941} +,{5,0,435},{132,10,894},{5,0,85},{6,0,419},{7,0,134},{7,0,305},{7,0,361},{7,0, +1337},{8,0,71},{140,0,519},{140,0,688},{135,0,740},{5,0,691},{7,0,345},{9,0,94}, +{140,0,169},{5,0,183},{6,0,582},{10,0,679},{140,0,435},{134,11,14},{6,0,945},{ +135,0,511},{134,11,1708},{5,11,113},{6,11,243},{7,11,1865},{11,11,161},{16,11,37 +},{145,11,99},{132,11,274},{137,0,539},{7,0,1993},{8,0,684},{134,10,272},{6,0, +659},{134,0,982},{4,10,9},{5,10,128},{7,10,368},{11,10,480},{148,10,3},{134,0, +583},{132,0,803},{133,0,704},{4,0,179},{5,0,198},{133,0,697},{7,0,347},{7,0,971} +,{8,0,181},{10,0,711},{135,11,166},{136,10,682},{4,10,2},{7,10,545},{7,10,894},{ +136,11,521},{135,0,481},{132,0,243},{5,0,203},{7,0,19},{7,0,71},{7,0,113},{10,0, +405},{11,0,357},{142,0,240},{5,11,725},{5,11,727},{135,11,1811},{6,0,826},{137, +11,304},{7,0,1450},{139,0,99},{133,11,654},{134,0,492},{5,0,134},{6,0,408},{6,0, +495},{7,0,1593},{6,11,273},{10,11,188},{13,11,377},{146,11,77},{9,10,769},{140, +10,185},{135,11,410},{142,0,4},{4,0,665},{134,11,1785},{4,0,248},{7,0,137},{137, +0,349},{5,10,530},{142,10,113},{7,0,1270},{139,0,612},{132,11,780},{5,0,371},{ +135,0,563},{135,0,826},{6,0,1535},{23,0,21},{151,0,23},{4,0,374},{7,0,547},{7,0, +1700},{7,0,1833},{139,0,858},{133,10,556},{7,11,612},{8,11,545},{8,11,568},{8,11 +,642},{9,11,717},{10,11,541},{10,11,763},{11,11,449},{12,11,489},{13,11,153},{13 +,11,296},{14,11,138},{14,11,392},{15,11,50},{16,11,6},{16,11,12},{148,11,9},{9,0 +,311},{141,0,42},{8,10,16},{140,10,568},{6,0,1968},{6,0,2027},{138,0,991},{6,0, +1647},{7,0,1552},{7,0,2010},{9,0,494},{137,0,509},{133,11,948},{6,10,186},{137, +10,426},{134,0,769},{134,0,642},{132,10,585},{6,0,123},{7,0,214},{9,0,728},{10,0 +,157},{11,0,346},{11,0,662},{143,0,106},{142,11,381},{135,0,1435},{4,11,532},{5, +11,706},{135,11,662},{5,11,837},{134,11,1651},{4,10,93},{5,10,252},{6,10,229},{7 +,10,291},{9,10,550},{139,10,644},{148,0,79},{137,10,749},{134,0,1425},{137,10, +162},{4,11,362},{7,11,52},{7,11,303},{140,11,166},{132,10,381},{4,11,330},{7,11, +933},{7,11,2012},{136,11,292},{135,11,767},{4,0,707},{5,0,588},{6,0,393},{13,0, +106},{18,0,49},{147,0,41},{6,0,211},{7,0,1690},{11,0,486},{140,0,369},{137,11, +883},{4,11,703},{135,11,207},{4,0,187},{5,0,184},{5,0,690},{7,0,1869},{10,0,756} +,{139,0,783},{132,11,571},{134,0,1382},{5,0,175},{6,10,77},{6,10,157},{7,10,974} +,{7,10,1301},{7,10,1339},{7,10,1490},{7,10,1873},{137,10,628},{134,0,1493},{5,11 +,873},{133,11,960},{134,0,1007},{12,11,93},{12,11,501},{13,11,362},{14,11,151},{ +15,11,40},{15,11,59},{16,11,46},{17,11,25},{18,11,14},{18,11,134},{19,11,25},{19 +,11,69},{20,11,16},{20,11,19},{20,11,66},{21,11,23},{21,11,25},{150,11,42},{11, +10,919},{141,10,409},{134,0,219},{5,0,582},{6,0,1646},{7,0,99},{7,0,1962},{7,0, +1986},{8,0,515},{8,0,773},{9,0,23},{9,0,491},{12,0,620},{142,0,93},{133,0,851},{ +5,11,33},{134,11,470},{135,11,1291},{134,0,1278},{135,11,1882},{135,10,1489},{ +132,0,1000},{138,0,982},{8,0,762},{8,0,812},{137,0,910},{6,11,47},{7,11,90},{7, +11,664},{7,11,830},{7,11,1380},{7,11,2025},{8,11,448},{136,11,828},{4,0,98},{4,0 +,940},{6,0,1819},{6,0,1834},{6,0,1841},{7,0,1365},{8,0,859},{8,0,897},{8,0,918}, +{9,0,422},{9,0,670},{10,0,775},{10,0,894},{10,0,909},{10,0,910},{10,0,935},{11,0 +,210},{12,0,750},{12,0,755},{13,0,26},{13,0,457},{13,0,476},{16,0,100},{16,0,109 +},{18,0,173},{18,0,175},{8,10,398},{9,10,681},{139,10,632},{9,11,417},{137,11, +493},{136,10,645},{138,0,906},{134,0,1730},{134,10,20},{133,11,1019},{134,0,1185 +},{10,0,40},{136,10,769},{9,0,147},{134,11,208},{140,0,650},{5,0,209},{6,0,30},{ +11,0,56},{139,0,305},{132,0,553},{138,11,344},{6,11,68},{7,11,398},{7,11,448},{7 +,11,1629},{7,11,1813},{8,11,387},{8,11,442},{9,11,710},{10,11,282},{138,11,722}, +{5,0,597},{14,0,20},{142,11,20},{135,0,1614},{135,10,1757},{4,0,150},{5,0,303},{ +6,0,327},{135,10,937},{16,0,49},{7,10,1652},{144,11,49},{8,0,192},{10,0,78},{141 +,0,359},{135,0,786},{143,0,134},{6,0,1638},{7,0,79},{7,0,496},{9,0,138},{10,0, +336},{11,0,12},{12,0,412},{12,0,440},{142,0,305},{136,11,491},{4,10,579},{5,10, +226},{5,10,323},{135,10,960},{7,0,204},{7,0,415},{8,0,42},{10,0,85},{139,0,564}, +{132,0,614},{4,11,403},{5,11,441},{7,11,450},{11,11,101},{12,11,193},{141,11,430 +},{135,11,1927},{135,11,1330},{4,0,3},{5,0,247},{5,0,644},{7,0,744},{7,0,1207},{ +7,0,1225},{7,0,1909},{146,0,147},{136,0,942},{4,0,1019},{134,0,2023},{5,11,679}, +{133,10,973},{5,0,285},{9,0,67},{13,0,473},{143,0,82},{7,11,328},{137,11,326},{ +151,0,8},{6,10,135},{135,10,1176},{135,11,1128},{134,0,1309},{135,11,1796},{135, +10,314},{4,11,574},{7,11,350},{7,11,1024},{8,11,338},{9,11,677},{10,11,808},{139 +,11,508},{7,11,818},{17,11,14},{17,11,45},{18,11,75},{148,11,18},{146,10,4},{135 +,11,1081},{4,0,29},{6,0,532},{7,0,1628},{7,0,1648},{9,0,350},{10,0,433},{11,0,97 +},{11,0,557},{11,0,745},{12,0,289},{12,0,335},{12,0,348},{12,0,606},{13,0,116},{ +13,0,233},{13,0,466},{14,0,181},{14,0,209},{14,0,232},{14,0,236},{14,0,300},{16, +0,41},{148,0,97},{7,0,318},{6,10,281},{8,10,282},{8,10,480},{8,10,499},{9,10,198 +},{10,10,143},{10,10,169},{10,10,211},{10,10,417},{10,10,574},{11,10,147},{11,10 +,395},{12,10,75},{12,10,407},{12,10,608},{13,10,500},{142,10,251},{135,11,1676}, +{135,11,2037},{135,0,1692},{5,0,501},{7,0,1704},{9,0,553},{11,0,520},{12,0,557}, +{141,0,249},{6,0,1527},{14,0,324},{15,0,55},{15,0,80},{14,11,324},{15,11,55},{ +143,11,80},{135,10,1776},{8,0,988},{137,11,297},{132,10,419},{142,0,223},{139,11 +,234},{7,0,1123},{12,0,508},{14,0,102},{14,0,226},{144,0,57},{4,10,138},{7,10, +1012},{7,10,1280},{137,10,76},{7,0,1764},{5,10,29},{140,10,638},{134,0,2015},{ +134,0,1599},{138,11,56},{6,11,306},{7,11,1140},{7,11,1340},{8,11,133},{138,11, +449},{139,11,1011},{6,10,1710},{135,10,2038},{7,11,1763},{140,11,310},{6,0,129}, +{4,10,17},{5,10,23},{7,10,995},{11,10,383},{11,10,437},{12,10,460},{140,10,532}, +{5,11,329},{136,11,260},{133,10,862},{132,0,534},{6,0,811},{135,0,626},{132,11, +657},{4,0,25},{5,0,60},{6,0,504},{7,0,614},{7,0,1155},{12,0,0},{152,11,7},{7,0, +1248},{11,0,621},{139,0,702},{137,0,321},{8,10,70},{12,10,171},{141,10,272},{10, +10,233},{139,10,76},{4,0,379},{7,0,1397},{134,10,442},{5,11,66},{7,11,1896},{136 +,11,288},{134,11,1643},{134,10,1709},{4,11,21},{5,11,91},{5,11,570},{5,11,648},{ +5,11,750},{5,11,781},{6,11,54},{6,11,112},{6,11,402},{6,11,1732},{7,11,315},{7, +11,749},{7,11,1347},{7,11,1900},{9,11,78},{9,11,508},{10,11,611},{11,11,510},{11 +,11,728},{13,11,36},{14,11,39},{16,11,83},{17,11,124},{148,11,30},{4,0,118},{6,0 +,274},{6,0,361},{7,0,75},{141,0,441},{10,11,322},{10,11,719},{139,11,407},{147, +10,119},{12,11,549},{14,11,67},{147,11,60},{11,10,69},{12,10,105},{12,10,117},{ +13,10,213},{14,10,13},{14,10,62},{14,10,177},{14,10,421},{15,10,19},{146,10,141} +,{9,0,841},{137,10,309},{7,10,608},{7,10,976},{8,11,125},{8,11,369},{8,11,524},{ +9,10,146},{10,10,206},{10,11,486},{10,10,596},{11,11,13},{11,11,381},{11,11,736} +,{11,11,766},{11,11,845},{13,11,114},{13,10,218},{13,11,292},{14,11,47},{142,10, +153},{12,0,693},{135,11,759},{5,0,314},{6,0,221},{7,0,419},{10,0,650},{11,0,396} +,{12,0,156},{13,0,369},{14,0,333},{145,0,47},{6,11,1684},{6,11,1731},{7,11,356}, +{7,11,1932},{8,11,54},{8,11,221},{9,11,225},{9,11,356},{10,11,77},{10,11,446},{ +10,11,731},{12,11,404},{141,11,491},{132,11,375},{4,10,518},{135,10,1136},{4,0, +913},{4,11,411},{11,11,643},{140,11,115},{4,11,80},{133,11,44},{8,10,689},{137, +10,863},{138,0,880},{4,10,18},{7,10,145},{7,10,444},{7,10,1278},{8,10,49},{8,10, +400},{9,10,71},{9,10,250},{10,10,459},{12,10,160},{144,10,24},{136,0,475},{5,0, +1016},{5,11,299},{135,11,1083},{7,0,602},{8,0,179},{10,0,781},{140,0,126},{6,0, +329},{138,0,111},{135,0,1864},{4,11,219},{7,11,1761},{137,11,86},{6,0,1888},{6,0 +,1892},{6,0,1901},{6,0,1904},{9,0,953},{9,0,985},{9,0,991},{9,0,1001},{12,0,818} +,{12,0,846},{12,0,847},{12,0,861},{12,0,862},{12,0,873},{12,0,875},{12,0,877},{ +12,0,879},{12,0,881},{12,0,884},{12,0,903},{12,0,915},{12,0,926},{12,0,939},{15, +0,182},{15,0,219},{15,0,255},{18,0,191},{18,0,209},{18,0,211},{149,0,41},{5,11, +328},{135,11,918},{137,0,780},{12,0,82},{143,0,36},{133,10,1010},{5,0,821},{134, +0,1687},{133,11,514},{132,0,956},{134,0,1180},{10,0,112},{5,10,87},{7,10,313},{7 +,10,1103},{10,10,582},{11,10,389},{11,10,813},{12,10,385},{13,10,286},{14,10,124 +},{146,10,108},{5,0,71},{7,0,1407},{9,0,704},{10,0,261},{10,0,619},{11,0,547},{ +11,0,619},{143,0,157},{4,0,531},{5,0,455},{5,11,301},{6,11,571},{14,11,49},{146, +11,102},{132,10,267},{6,0,385},{7,0,2008},{9,0,337},{138,0,517},{133,11,726},{ +133,11,364},{4,11,76},{7,11,1550},{9,11,306},{9,11,430},{9,11,663},{10,11,683},{ +11,11,427},{11,11,753},{12,11,334},{12,11,442},{14,11,258},{14,11,366},{143,11, +131},{6,0,1865},{6,0,1879},{6,0,1881},{6,0,1894},{6,0,1908},{9,0,915},{9,0,926}, +{9,0,940},{9,0,943},{9,0,966},{9,0,980},{9,0,989},{9,0,1005},{9,0,1010},{12,0, +813},{12,0,817},{12,0,840},{12,0,843},{12,0,855},{12,0,864},{12,0,871},{12,0,872 +},{12,0,899},{12,0,905},{12,0,924},{15,0,171},{15,0,181},{15,0,224},{15,0,235},{ +15,0,251},{146,0,184},{137,11,52},{5,0,16},{6,0,86},{6,0,603},{7,0,292},{7,0,561 +},{8,0,257},{8,0,382},{9,0,721},{9,0,778},{11,0,581},{140,0,466},{4,0,486},{5,0, +491},{135,10,1121},{4,0,72},{6,0,265},{135,0,1300},{135,11,1183},{10,10,249},{ +139,10,209},{132,10,561},{137,11,519},{4,11,656},{4,10,760},{135,11,779},{9,10, +154},{140,10,485},{135,11,1793},{135,11,144},{136,10,255},{133,0,621},{4,10,368} +,{135,10,641},{135,11,1373},{7,11,554},{7,11,605},{141,11,10},{137,0,234},{5,0, +815},{6,0,1688},{134,0,1755},{5,11,838},{5,11,841},{134,11,1649},{7,0,1987},{7,0 +,2040},{136,0,743},{133,11,1012},{6,0,197},{136,0,205},{6,0,314},{134,11,314},{ +144,11,53},{6,11,251},{7,11,365},{7,11,1357},{7,11,1497},{8,11,154},{141,11,281} +,{133,11,340},{6,0,452},{7,0,312},{138,0,219},{138,0,589},{4,0,333},{9,0,176},{ +12,0,353},{141,0,187},{9,10,92},{147,10,91},{134,0,1110},{11,0,47},{139,11,495}, +{6,10,525},{8,10,806},{9,10,876},{140,10,284},{8,11,261},{9,11,144},{9,11,466},{ +10,11,370},{12,11,470},{13,11,144},{142,11,348},{137,11,897},{8,0,863},{8,0,864} +,{8,0,868},{8,0,884},{10,0,866},{10,0,868},{10,0,873},{10,0,911},{10,0,912},{10, +0,944},{12,0,727},{6,11,248},{9,11,546},{10,11,535},{11,11,681},{141,11,135},{6, +0,300},{135,0,1515},{134,0,1237},{139,10,958},{133,10,594},{140,11,250},{134,0, +1685},{134,11,567},{7,0,135},{8,0,7},{8,0,62},{9,0,243},{10,0,658},{10,0,697},{ +11,0,456},{139,0,756},{9,0,395},{138,0,79},{6,10,1641},{136,10,820},{4,10,302},{ +135,10,1766},{134,11,174},{135,10,1313},{135,0,631},{134,10,1674},{134,11,395},{ +138,0,835},{7,0,406},{7,0,459},{8,0,606},{139,0,726},{134,11,617},{134,0,979},{6 +,10,389},{7,10,149},{9,10,142},{138,10,94},{5,11,878},{133,11,972},{6,10,8},{7, +10,1881},{8,10,91},{136,11,511},{133,0,612},{132,11,351},{4,0,372},{7,0,482},{8, +0,158},{9,0,602},{9,0,615},{10,0,245},{10,0,678},{10,0,744},{11,0,248},{139,0, +806},{5,0,854},{135,0,1991},{132,11,286},{135,11,344},{7,11,438},{7,11,627},{7, +11,1516},{8,11,40},{9,11,56},{9,11,294},{10,11,30},{10,11,259},{11,11,969},{146, +11,148},{135,0,1492},{5,11,259},{7,11,414},{7,11,854},{142,11,107},{135,10,1746} +,{6,0,833},{134,0,998},{135,10,24},{6,0,750},{135,0,1739},{4,10,503},{135,10, +1661},{5,10,130},{7,10,1314},{9,10,610},{10,10,718},{11,10,601},{11,10,819},{11, +10,946},{140,10,536},{10,10,149},{11,10,280},{142,10,336},{132,11,738},{135,10, +1946},{5,0,195},{135,0,1685},{7,0,1997},{8,0,730},{139,0,1006},{151,11,17},{133, +11,866},{14,0,463},{14,0,470},{150,0,61},{5,0,751},{8,0,266},{11,0,578},{4,10, +392},{135,10,1597},{5,10,433},{9,10,633},{139,10,629},{135,0,821},{6,0,715},{134 +,0,1325},{133,11,116},{6,0,868},{132,11,457},{134,0,959},{6,10,234},{138,11,199} +,{7,0,1053},{7,10,1950},{8,10,680},{11,10,817},{147,10,88},{7,10,1222},{138,10, +386},{5,0,950},{5,0,994},{6,0,351},{134,0,1124},{134,0,1081},{7,0,1595},{6,10,5} +,{11,10,249},{12,10,313},{16,10,66},{145,10,26},{148,0,59},{5,11,527},{6,11,189} +,{135,11,859},{5,10,963},{6,10,1773},{11,11,104},{11,11,554},{15,11,60},{143,11, +125},{135,0,47},{137,0,684},{134,11,116},{134,0,1606},{134,0,777},{7,0,1020},{8, +10,509},{136,10,792},{135,0,1094},{132,0,350},{133,11,487},{4,11,86},{5,11,667}, +{5,11,753},{6,11,316},{6,11,455},{135,11,946},{7,0,1812},{13,0,259},{13,0,356},{ +14,0,242},{147,0,114},{132,10,931},{133,0,967},{4,0,473},{7,0,623},{8,0,808},{9, +0,871},{9,0,893},{11,0,38},{11,0,431},{12,0,112},{12,0,217},{12,0,243},{12,0,562 +},{12,0,663},{12,0,683},{13,0,141},{13,0,197},{13,0,227},{13,0,406},{13,0,487},{ +14,0,156},{14,0,203},{14,0,224},{14,0,256},{18,0,58},{150,0,0},{138,0,286},{7,10 +,943},{139,10,614},{135,10,1837},{150,11,45},{132,0,798},{4,0,222},{7,0,286},{ +136,0,629},{4,11,79},{7,11,1773},{10,11,450},{11,11,589},{13,11,332},{13,11,493} +,{14,11,183},{14,11,334},{14,11,362},{14,11,368},{14,11,376},{14,11,379},{19,11, +90},{19,11,103},{19,11,127},{148,11,90},{5,0,337},{11,0,513},{11,0,889},{11,0, +961},{12,0,461},{13,0,79},{15,0,121},{4,10,90},{5,10,545},{7,10,754},{9,10,186}, +{10,10,72},{10,10,782},{11,10,577},{11,10,610},{12,10,354},{12,10,362},{140,10, +595},{141,0,306},{136,0,146},{7,0,1646},{9,10,329},{11,10,254},{141,11,124},{4,0 +,465},{135,0,1663},{132,0,525},{133,11,663},{10,0,299},{18,0,74},{9,10,187},{11, +10,1016},{145,10,44},{7,0,165},{7,0,919},{4,10,506},{136,10,517},{5,10,295},{135 +,10,1680},{133,11,846},{134,0,1064},{5,11,378},{7,11,1402},{7,11,1414},{8,11,465 +},{9,11,286},{10,11,185},{10,11,562},{10,11,635},{11,11,31},{11,11,393},{12,11, +456},{13,11,312},{18,11,65},{18,11,96},{147,11,89},{132,0,596},{7,10,987},{9,10, +688},{10,10,522},{11,10,788},{140,10,566},{6,0,82},{7,0,138},{7,0,517},{7,0,1741 +},{11,0,238},{4,11,648},{134,10,1775},{7,0,1233},{7,10,700},{7,10,940},{8,10,514 +},{9,10,116},{9,10,535},{10,10,118},{11,10,107},{11,10,148},{11,10,922},{12,10, +254},{12,10,421},{142,10,238},{4,0,962},{6,0,1824},{8,0,894},{12,0,708},{12,0, +725},{14,0,451},{20,0,94},{22,0,59},{150,0,62},{5,11,945},{6,11,1656},{6,11,1787 +},{7,11,167},{8,11,824},{9,11,391},{10,11,375},{139,11,185},{5,0,495},{7,0,834}, +{9,0,733},{139,0,378},{4,10,743},{135,11,1273},{6,0,1204},{7,11,1645},{8,11,352} +,{137,11,249},{139,10,292},{133,0,559},{132,11,152},{9,0,499},{10,0,341},{15,0, +144},{19,0,49},{7,10,1283},{9,10,227},{11,10,325},{11,10,408},{14,10,180},{146, +10,47},{6,0,21},{6,0,1737},{7,0,1444},{136,0,224},{133,11,1006},{7,0,1446},{9,0, +97},{17,0,15},{5,10,81},{7,10,146},{7,10,1342},{8,10,53},{8,10,561},{8,10,694},{ +8,10,754},{9,10,115},{9,10,894},{10,10,462},{10,10,813},{11,10,230},{11,10,657}, +{11,10,699},{11,10,748},{12,10,119},{12,10,200},{12,10,283},{142,10,273},{5,10, +408},{137,10,747},{135,11,431},{135,11,832},{6,0,729},{134,0,953},{4,0,727},{8,0 +,565},{5,11,351},{7,11,264},{136,11,565},{134,0,1948},{5,0,519},{5,11,40},{7,11, +598},{7,11,1638},{8,11,78},{9,11,166},{9,11,640},{9,11,685},{9,11,773},{11,11, +215},{13,11,65},{14,11,172},{14,11,317},{145,11,6},{8,11,60},{9,11,343},{139,11, +769},{137,11,455},{134,0,1193},{140,0,790},{7,11,1951},{8,11,765},{8,11,772},{ +140,11,671},{7,11,108},{8,11,219},{8,11,388},{9,11,639},{9,11,775},{11,11,275},{ +140,11,464},{132,11,468},{7,10,30},{8,10,86},{8,10,315},{8,10,700},{9,10,576},{9 +,10,858},{11,10,310},{11,10,888},{11,10,904},{12,10,361},{141,10,248},{5,11,15}, +{6,11,56},{7,11,1758},{8,11,500},{9,11,730},{11,11,331},{13,11,150},{142,11,282} +,{4,0,402},{7,0,2},{8,0,323},{136,0,479},{138,10,839},{11,0,580},{142,0,201},{5, +0,59},{135,0,672},{137,10,617},{146,0,34},{134,11,1886},{4,0,961},{136,0,896},{6 +,0,1285},{5,11,205},{6,11,438},{137,11,711},{134,10,428},{7,10,524},{8,10,169},{ +8,10,234},{9,10,480},{138,10,646},{148,0,46},{141,0,479},{133,11,534},{6,0,2019} +,{134,10,1648},{4,0,85},{7,0,549},{7,10,1205},{138,10,637},{4,0,663},{5,0,94},{7 +,11,235},{7,11,1475},{15,11,68},{146,11,120},{6,11,443},{9,11,237},{9,11,571},{9 +,11,695},{10,11,139},{11,11,715},{12,11,417},{141,11,421},{132,0,783},{4,0,682}, +{8,0,65},{9,10,39},{10,10,166},{11,10,918},{12,10,635},{20,10,10},{22,10,27},{22 +,10,43},{150,10,52},{6,0,11},{135,0,187},{132,0,522},{4,0,52},{135,0,661},{4,0, +383},{133,0,520},{135,11,546},{11,0,343},{142,0,127},{4,11,578},{7,10,157},{7,11 +,624},{7,11,916},{8,10,279},{10,11,256},{11,11,87},{139,11,703},{134,10,604},{4, +0,281},{5,0,38},{7,0,194},{7,0,668},{7,0,1893},{137,0,397},{7,10,945},{11,10,713 +},{139,10,744},{139,10,1022},{9,0,635},{139,0,559},{5,11,923},{7,11,490},{12,11, +553},{13,11,100},{14,11,118},{143,11,75},{132,0,975},{132,10,567},{137,10,859},{ +7,10,1846},{7,11,1846},{8,10,628},{136,11,628},{148,0,116},{138,11,750},{14,0,51 +},{14,11,51},{15,11,7},{148,11,20},{132,0,858},{134,0,1075},{4,11,924},{133,10, +762},{136,0,535},{133,0,448},{10,10,784},{141,10,191},{133,10,298},{7,0,610},{ +135,0,1501},{7,10,633},{7,10,905},{7,10,909},{7,10,1538},{9,10,767},{140,10,636} +,{4,11,265},{7,11,807},{135,11,950},{5,11,93},{12,11,267},{144,11,26},{136,0,191 +},{139,10,301},{135,10,1970},{135,0,267},{4,0,319},{5,0,699},{138,0,673},{6,0, +336},{7,0,92},{7,0,182},{8,0,453},{8,0,552},{9,0,204},{9,0,285},{10,0,99},{11,0, +568},{11,0,950},{12,0,94},{16,0,20},{16,0,70},{19,0,55},{12,10,644},{144,10,90}, +{6,0,551},{7,0,1308},{7,10,845},{7,11,994},{8,10,160},{137,10,318},{19,11,1},{19 +,11,26},{150,11,9},{7,0,1406},{9,0,218},{141,0,222},{5,0,256},{138,0,69},{5,11, +233},{5,11,320},{6,11,140},{7,11,330},{136,11,295},{6,0,1980},{136,0,952},{4,0, +833},{137,11,678},{133,11,978},{4,11,905},{6,11,1701},{137,11,843},{138,10,735}, +{136,10,76},{17,0,39},{148,0,36},{18,0,81},{146,11,81},{14,0,352},{17,0,53},{18, +0,146},{18,0,152},{19,0,11},{150,0,54},{135,0,634},{138,10,841},{132,0,618},{4,0 +,339},{7,0,259},{17,0,73},{4,11,275},{140,11,376},{132,11,509},{7,11,273},{139, +11,377},{4,0,759},{13,0,169},{137,10,804},{6,10,96},{135,10,1426},{4,10,651},{ +133,10,289},{7,0,1075},{8,10,35},{9,10,511},{10,10,767},{147,10,118},{6,0,649},{ +6,0,670},{136,0,482},{5,0,336},{6,0,341},{6,0,478},{6,0,1763},{136,0,386},{5,11, +802},{7,11,2021},{8,11,805},{14,11,94},{15,11,65},{16,11,4},{16,11,77},{16,11,80 +},{145,11,5},{6,0,1035},{5,11,167},{5,11,899},{6,11,410},{137,11,777},{134,11, +1705},{5,0,924},{133,0,969},{132,10,704},{135,0,73},{135,11,10},{135,10,1078},{5 +,11,11},{6,11,117},{6,11,485},{7,11,1133},{9,11,582},{9,11,594},{11,11,21},{11, +11,818},{12,11,535},{141,11,86},{135,0,1971},{4,11,264},{7,11,1067},{8,11,204},{ +8,11,385},{139,11,953},{6,0,1458},{135,0,1344},{5,0,396},{134,0,501},{4,10,720}, +{133,10,306},{4,0,929},{5,0,799},{8,0,46},{8,0,740},{133,10,431},{7,11,646},{7, +11,1730},{11,11,446},{141,11,178},{7,0,276},{5,10,464},{6,10,236},{7,10,696},{7, +10,914},{7,10,1108},{7,10,1448},{9,10,15},{9,10,564},{10,10,14},{12,10,565},{13, +10,449},{14,10,53},{15,10,13},{16,10,64},{145,10,41},{4,0,892},{133,0,770},{6,10 +,1767},{12,10,194},{145,10,107},{135,0,158},{5,10,840},{138,11,608},{134,0,1432} +,{138,11,250},{8,11,794},{9,11,400},{10,11,298},{142,11,228},{151,0,25},{7,11, +1131},{135,11,1468},{135,0,2001},{9,10,642},{11,10,236},{142,10,193},{4,10,68},{ +5,10,634},{6,10,386},{7,10,794},{8,10,273},{9,10,563},{10,10,105},{10,10,171},{ +11,10,94},{139,10,354},{136,11,724},{132,0,478},{11,11,512},{13,11,205},{19,11, +30},{22,11,36},{151,11,19},{7,0,1461},{140,0,91},{6,11,190},{7,11,768},{135,11, +1170},{4,0,602},{8,0,211},{4,10,95},{7,10,416},{139,10,830},{7,10,731},{13,10,20 +},{143,10,11},{6,0,1068},{135,0,1872},{4,0,13},{5,0,567},{7,0,1498},{9,0,124},{ +11,0,521},{12,0,405},{135,11,1023},{135,0,1006},{132,0,735},{138,0,812},{4,0,170 +},{135,0,323},{6,11,137},{9,11,75},{9,11,253},{10,11,194},{138,11,444},{5,0,304} +,{7,0,1403},{5,10,864},{10,10,648},{11,10,671},{143,10,46},{135,11,1180},{133,10 +,928},{4,0,148},{133,0,742},{11,10,986},{140,10,682},{133,0,523},{135,11,1743},{ +7,0,730},{18,0,144},{19,0,61},{8,10,44},{9,10,884},{10,10,580},{11,10,399},{11, +10,894},{143,10,122},{5,11,760},{7,11,542},{8,11,135},{136,11,496},{136,0,981},{ +133,0,111},{10,0,132},{11,0,191},{11,0,358},{139,0,460},{7,11,319},{7,11,355},{7 +,11,763},{10,11,389},{145,11,43},{134,0,890},{134,0,1420},{136,11,557},{133,10, +518},{133,0,444},{135,0,1787},{135,10,1852},{8,0,123},{15,0,6},{144,0,7},{6,0, +2041},{10,11,38},{139,11,784},{136,0,932},{5,0,937},{135,0,100},{6,0,995},{4,11, +58},{5,11,286},{6,11,319},{7,11,402},{7,11,1254},{7,11,1903},{8,11,356},{140,11, +408},{4,11,389},{9,11,181},{9,11,255},{10,11,8},{10,11,29},{10,11,816},{11,11, +311},{11,11,561},{12,11,67},{141,11,181},{138,0,255},{5,0,138},{4,10,934},{136, +10,610},{4,0,965},{10,0,863},{138,0,898},{10,10,804},{138,10,832},{12,0,631},{8, +10,96},{9,10,36},{10,10,607},{11,10,423},{11,10,442},{12,10,309},{14,10,199},{15 +,10,90},{145,10,110},{134,0,1394},{4,0,652},{8,0,320},{22,0,6},{22,0,16},{9,10, +13},{9,10,398},{9,10,727},{10,10,75},{10,10,184},{10,10,230},{10,10,564},{10,10, +569},{11,10,973},{12,10,70},{12,10,189},{13,10,57},{141,10,257},{6,0,897},{134,0 +,1333},{4,0,692},{133,0,321},{133,11,373},{135,0,922},{5,0,619},{133,0,698},{137 +,10,631},{5,10,345},{135,10,1016},{9,0,957},{9,0,1018},{12,0,828},{12,0,844},{12 +,0,897},{12,0,901},{12,0,943},{15,0,180},{18,0,197},{18,0,200},{18,0,213},{18,0, +214},{146,0,226},{5,0,917},{134,0,1659},{135,0,1100},{134,0,1173},{134,0,1930},{ +5,0,251},{5,0,956},{8,0,268},{9,0,214},{146,0,142},{133,10,673},{137,10,850},{4, +10,287},{133,10,1018},{132,11,672},{5,0,346},{5,0,711},{8,0,390},{11,11,752},{ +139,11,885},{5,10,34},{10,10,724},{12,10,444},{13,10,354},{18,10,32},{23,10,24}, +{23,10,31},{152,10,5},{4,11,710},{134,11,606},{134,0,744},{134,10,382},{133,11, +145},{4,10,329},{7,11,884},{140,11,124},{4,11,467},{5,11,405},{134,11,544},{9,10 +,846},{138,10,827},{133,0,624},{9,11,372},{15,11,2},{19,11,10},{147,11,18},{4,11 +,387},{135,11,1288},{5,0,783},{7,0,1998},{135,0,2047},{132,10,906},{136,10,366}, +{135,11,550},{4,10,123},{4,10,649},{5,10,605},{7,10,1509},{136,10,36},{134,0, +1125},{132,0,594},{133,10,767},{135,11,1227},{136,11,467},{4,11,576},{135,11, +1263},{4,0,268},{7,0,1534},{135,11,1534},{4,10,273},{5,10,658},{5,11,919},{5,10, +995},{134,11,1673},{133,0,563},{134,10,72},{135,10,1345},{4,11,82},{5,11,333},{5 +,11,904},{6,11,207},{7,11,325},{7,11,1726},{8,11,101},{10,11,778},{139,11,220},{ +5,0,37},{6,0,39},{6,0,451},{7,0,218},{7,0,667},{7,0,1166},{7,0,1687},{8,0,662},{ +16,0,2},{133,10,589},{134,0,1332},{133,11,903},{134,0,508},{5,10,117},{6,10,514} +,{6,10,541},{7,10,1164},{7,10,1436},{8,10,220},{8,10,648},{10,10,688},{11,10,560 +},{140,11,147},{6,11,555},{135,11,485},{133,10,686},{7,0,453},{7,0,635},{7,0,796 +},{8,0,331},{9,0,330},{9,0,865},{10,0,119},{10,0,235},{11,0,111},{11,0,129},{11, +0,240},{12,0,31},{12,0,66},{12,0,222},{12,0,269},{12,0,599},{12,0,684},{12,0,689 +},{12,0,691},{142,0,345},{135,0,1834},{4,11,705},{7,11,615},{138,11,251},{136,11 +,345},{137,0,527},{6,0,98},{7,0,702},{135,0,991},{11,0,576},{14,0,74},{7,10,196} +,{10,10,765},{11,10,347},{11,10,552},{11,10,790},{12,10,263},{13,10,246},{13,10, +270},{13,10,395},{14,10,176},{14,10,190},{14,10,398},{14,10,412},{15,10,32},{15, +10,63},{16,10,88},{147,10,105},{134,11,90},{13,0,84},{141,0,122},{6,0,37},{7,0, +299},{7,0,1666},{8,0,195},{8,0,316},{9,0,178},{9,0,276},{9,0,339},{9,0,536},{10, +0,102},{10,0,362},{10,0,785},{11,0,55},{11,0,149},{11,0,773},{13,0,416},{13,0, +419},{14,0,38},{14,0,41},{142,0,210},{5,10,381},{135,10,1792},{7,11,813},{12,11, +497},{141,11,56},{7,10,616},{138,10,413},{133,0,645},{6,11,125},{135,11,1277},{ +132,0,290},{6,0,70},{7,0,1292},{10,0,762},{139,0,288},{6,10,120},{7,10,1188},{7, +10,1710},{8,10,286},{9,10,667},{11,10,592},{139,10,730},{135,11,1784},{7,0,1315} +,{135,11,1315},{134,0,1955},{135,10,1146},{7,0,131},{7,0,422},{8,0,210},{140,0, +573},{4,10,352},{135,10,687},{139,0,797},{143,0,38},{14,0,179},{15,0,151},{150,0 +,11},{7,0,488},{4,10,192},{5,10,49},{6,10,200},{6,10,293},{134,10,1696},{132,0, +936},{135,11,703},{6,11,160},{7,11,1106},{9,11,770},{10,11,618},{11,11,112},{140 +,11,413},{5,0,453},{134,0,441},{135,0,595},{132,10,650},{132,10,147},{6,0,991},{ +6,0,1182},{12,11,271},{145,11,109},{133,10,934},{140,11,221},{132,0,653},{7,0, +505},{135,0,523},{134,0,903},{135,11,479},{7,11,304},{9,11,646},{9,11,862},{10, +11,262},{11,11,696},{12,11,208},{15,11,79},{147,11,108},{146,0,80},{135,11,981}, +{142,0,432},{132,0,314},{137,11,152},{7,0,1368},{8,0,232},{8,0,361},{10,0,682},{ +138,0,742},{135,11,1586},{9,0,534},{4,11,434},{11,11,663},{12,11,210},{13,11,166 +},{13,11,310},{14,11,373},{147,11,43},{7,11,1091},{135,11,1765},{6,11,550},{135, +11,652},{137,0,27},{142,0,12},{4,10,637},{5,11,553},{7,11,766},{138,11,824},{7, +11,737},{8,11,298},{136,11,452},{7,0,736},{139,0,264},{134,0,1657},{133,11,292}, +{138,11,135},{6,0,844},{134,0,1117},{135,0,127},{9,10,867},{138,10,837},{6,0, +1184},{134,0,1208},{134,0,1294},{136,0,364},{6,0,1415},{7,0,1334},{11,0,125},{6, +10,170},{7,11,393},{8,10,395},{8,10,487},{10,11,603},{11,11,206},{141,10,147},{ +137,11,748},{4,11,912},{137,11,232},{4,10,535},{136,10,618},{137,0,792},{7,11, +1973},{136,11,716},{135,11,98},{5,0,909},{9,0,849},{138,0,805},{4,0,630},{132,0, +699},{5,11,733},{14,11,103},{150,10,23},{12,11,158},{18,11,8},{19,11,62},{20,11, +6},{22,11,4},{23,11,2},{151,11,9},{132,0,968},{132,10,778},{132,10,46},{5,10,811 +},{6,10,1679},{6,10,1714},{135,10,2032},{6,0,1446},{7,10,1458},{9,10,407},{139, +10,15},{7,0,206},{7,0,397},{7,0,621},{7,0,640},{8,0,124},{8,0,619},{9,0,305},{9, +0,643},{10,0,264},{10,0,628},{11,0,40},{12,0,349},{13,0,134},{13,0,295},{14,0, +155},{15,0,120},{18,0,105},{6,10,34},{7,10,1089},{8,10,708},{8,10,721},{9,10,363 +},{148,10,98},{4,0,262},{5,0,641},{135,0,342},{137,11,72},{4,0,99},{6,0,250},{6, +0,346},{8,0,127},{138,0,81},{132,0,915},{5,0,75},{9,0,517},{10,0,470},{12,0,155} +,{141,0,224},{132,10,462},{11,11,600},{11,11,670},{141,11,245},{142,0,83},{5,10, +73},{6,10,23},{134,10,338},{6,0,1031},{139,11,923},{7,11,164},{7,11,1571},{9,11, +107},{140,11,225},{134,0,1470},{133,0,954},{6,0,304},{8,0,418},{10,0,345},{11,0, +341},{139,0,675},{9,0,410},{139,0,425},{4,11,27},{5,11,484},{5,11,510},{6,11,434 +},{7,11,1000},{7,11,1098},{8,11,2},{136,11,200},{134,0,734},{140,11,257},{7,10, +725},{8,10,498},{139,10,268},{134,0,1822},{135,0,1798},{135,10,773},{132,11,460} +,{4,11,932},{133,11,891},{134,0,14},{132,10,583},{7,10,1462},{8,11,625},{139,10, +659},{5,0,113},{6,0,243},{6,0,1708},{7,0,1865},{11,0,161},{16,0,37},{17,0,99},{ +133,10,220},{134,11,76},{5,11,461},{135,11,1925},{140,0,69},{8,11,92},{137,11, +221},{139,10,803},{132,10,544},{4,0,274},{134,0,922},{132,0,541},{5,0,627},{6,10 +,437},{6,10,564},{11,10,181},{141,10,183},{135,10,1192},{7,0,166},{132,11,763},{ +133,11,253},{134,0,849},{9,11,73},{10,11,110},{14,11,185},{145,11,119},{5,11,212 +},{12,11,35},{141,11,382},{133,0,717},{137,0,304},{136,0,600},{133,0,654},{6,0, +273},{10,0,188},{13,0,377},{146,0,77},{4,10,790},{5,10,273},{134,10,394},{132,0, +543},{135,0,410},{11,0,98},{11,0,524},{141,0,87},{132,0,941},{135,11,1175},{4,0, +250},{7,0,1612},{11,0,186},{12,0,133},{6,10,127},{7,10,1511},{8,10,613},{12,10, +495},{12,10,586},{12,10,660},{12,10,668},{14,10,385},{15,10,118},{17,10,20},{146 +,10,98},{6,0,1785},{133,11,816},{134,0,1339},{7,0,961},{7,0,1085},{7,0,1727},{8, +0,462},{6,10,230},{135,11,1727},{9,0,636},{135,10,1954},{132,0,780},{5,11,869},{ +5,11,968},{6,11,1626},{8,11,734},{136,11,784},{4,11,542},{6,11,1716},{6,11,1727} +,{7,11,1082},{7,11,1545},{8,11,56},{8,11,118},{8,11,412},{8,11,564},{9,11,888},{ +9,11,908},{10,11,50},{10,11,423},{11,11,685},{11,11,697},{11,11,933},{12,11,299} +,{13,11,126},{13,11,136},{13,11,170},{141,11,190},{134,11,226},{4,11,232},{9,11, +202},{10,11,474},{140,11,433},{137,11,500},{5,0,529},{136,10,68},{132,10,654},{4 +,10,156},{7,10,998},{7,10,1045},{7,10,1860},{9,10,48},{9,10,692},{11,10,419},{ +139,10,602},{7,0,1276},{8,0,474},{9,0,652},{6,11,108},{7,11,1003},{7,11,1181},{ +136,11,343},{7,11,1264},{7,11,1678},{11,11,945},{12,11,341},{12,11,471},{140,11, +569},{134,11,1712},{5,0,948},{12,0,468},{19,0,96},{148,0,24},{4,11,133},{7,11, +711},{7,11,1298},{7,11,1585},{135,11,1929},{6,0,753},{140,0,657},{139,0,941},{6, +11,99},{7,11,1808},{145,11,57},{6,11,574},{7,11,428},{7,11,1250},{10,11,669},{11 +,11,485},{11,11,840},{12,11,300},{142,11,250},{4,0,532},{5,0,706},{135,0,662},{5 +,0,837},{6,0,1651},{139,0,985},{7,0,1861},{9,10,197},{10,10,300},{12,10,473},{13 +,10,90},{141,10,405},{137,11,252},{6,11,323},{135,11,1564},{4,0,330},{4,0,863},{ +7,0,933},{7,0,2012},{8,0,292},{7,11,461},{8,11,775},{138,11,435},{132,10,606},{4 +,11,655},{7,11,850},{17,11,75},{146,11,137},{135,0,767},{7,10,1978},{136,10,676} +,{132,0,641},{135,11,1559},{134,0,1233},{137,0,242},{17,0,114},{4,10,361},{133, +10,315},{137,0,883},{132,10,461},{138,0,274},{134,0,2008},{134,0,1794},{4,0,703} +,{135,0,207},{12,0,285},{132,10,472},{132,0,571},{5,0,873},{5,0,960},{8,0,823},{ +9,0,881},{136,11,577},{7,0,617},{10,0,498},{11,0,501},{12,0,16},{140,0,150},{138 +,10,747},{132,0,431},{133,10,155},{11,0,283},{11,0,567},{7,10,163},{8,10,319},{9 +,10,402},{10,10,24},{10,10,681},{11,10,200},{12,10,253},{12,10,410},{142,10,219} +,{4,11,413},{5,11,677},{8,11,432},{140,11,280},{9,0,401},{5,10,475},{7,10,1780}, +{11,10,297},{11,10,558},{14,10,322},{147,10,76},{6,0,781},{9,0,134},{10,0,2},{10 +,0,27},{10,0,333},{11,0,722},{143,0,1},{5,0,33},{6,0,470},{139,0,424},{135,0, +2006},{12,0,783},{135,10,1956},{136,0,274},{135,0,1882},{132,0,794},{135,0,1848} +,{5,10,944},{134,10,1769},{6,0,47},{7,0,90},{7,0,664},{7,0,830},{7,0,1380},{7,0, +2025},{8,0,448},{136,0,828},{132,10,144},{134,0,1199},{4,11,395},{139,11,762},{ +135,11,1504},{9,0,417},{137,0,493},{9,11,174},{10,11,164},{11,11,440},{11,11,841 +},{143,11,98},{134,11,426},{139,11,1002},{134,0,295},{134,0,816},{6,10,247},{137 +,10,555},{133,0,1019},{4,0,620},{5,11,476},{10,10,280},{138,10,797},{139,0,464}, +{5,11,76},{6,11,458},{6,11,497},{7,11,764},{7,11,868},{9,11,658},{10,11,594},{11 +,11,173},{11,11,566},{12,11,20},{12,11,338},{141,11,200},{134,0,208},{4,11,526}, +{7,11,1029},{135,11,1054},{132,11,636},{6,11,233},{7,11,660},{7,11,1124},{17,11, +31},{19,11,22},{151,11,14},{10,0,442},{133,10,428},{10,0,930},{140,0,778},{6,0, +68},{7,0,448},{7,0,1629},{7,0,1769},{7,0,1813},{8,0,442},{8,0,516},{9,0,710},{10 +,0,282},{10,0,722},{7,10,1717},{138,10,546},{134,0,1128},{11,0,844},{12,0,104},{ +140,0,625},{4,11,432},{135,11,824},{138,10,189},{133,0,787},{133,10,99},{4,11, +279},{7,11,301},{137,11,362},{8,0,491},{4,10,397},{136,10,555},{4,11,178},{133, +11,399},{134,0,711},{144,0,9},{4,0,403},{5,0,441},{7,0,450},{10,0,840},{11,0,101 +},{12,0,193},{141,0,430},{135,11,1246},{12,10,398},{20,10,39},{21,10,11},{150,10 +,41},{4,10,485},{7,10,353},{135,10,1523},{6,10,366},{7,10,1384},{7,10,1601},{135 +,11,1912},{7,0,396},{10,0,160},{135,11,396},{137,10,282},{134,11,1692},{4,10,157 +},{5,10,471},{6,11,202},{10,11,448},{11,11,208},{12,11,360},{17,11,117},{17,11, +118},{18,11,27},{148,11,67},{133,0,679},{137,0,326},{136,10,116},{7,11,872},{10, +11,516},{139,11,167},{132,11,224},{5,11,546},{7,11,35},{8,11,11},{8,11,12},{9,11 +,315},{9,11,533},{10,11,802},{11,11,166},{12,11,525},{142,11,243},{7,0,1128},{ +135,11,1920},{5,11,241},{8,11,242},{9,11,451},{10,11,667},{11,11,598},{140,11, +429},{6,0,737},{5,10,160},{7,10,363},{7,10,589},{10,10,170},{141,10,55},{135,0, +1796},{142,11,254},{4,0,574},{7,0,350},{7,0,1024},{8,0,338},{9,0,677},{138,0,808 +},{134,0,1096},{137,11,516},{7,0,405},{10,0,491},{4,10,108},{4,11,366},{139,10, +498},{11,11,337},{142,11,303},{134,11,1736},{7,0,1081},{140,11,364},{7,10,1005}, +{140,10,609},{7,0,1676},{4,10,895},{133,10,772},{135,0,2037},{6,0,1207},{11,11, +916},{142,11,419},{14,11,140},{148,11,41},{6,11,331},{136,11,623},{9,0,944},{9,0 +,969},{9,0,1022},{12,0,913},{12,0,936},{15,0,177},{15,0,193},{4,10,926},{133,10, +983},{5,0,354},{135,11,506},{8,0,598},{9,0,664},{138,0,441},{4,11,640},{133,11, +513},{137,0,297},{132,10,538},{6,10,294},{7,10,1267},{136,10,624},{7,0,1772},{7, +11,1888},{8,11,289},{11,11,45},{12,11,278},{140,11,537},{135,10,1325},{138,0,751 +},{141,0,37},{134,0,1828},{132,10,757},{132,11,394},{6,0,257},{135,0,1522},{4,0, +582},{9,0,191},{135,11,1931},{7,11,574},{7,11,1719},{137,11,145},{132,11,658},{ +10,0,790},{132,11,369},{9,11,781},{10,11,144},{11,11,385},{13,11,161},{13,11,228 +},{13,11,268},{148,11,107},{8,0,469},{10,0,47},{136,11,374},{6,0,306},{7,0,1140} +,{7,0,1340},{8,0,133},{138,0,449},{139,0,1011},{7,10,1875},{139,10,124},{4,11, +344},{6,11,498},{139,11,323},{137,0,299},{132,0,837},{133,11,906},{5,0,329},{8,0 +,260},{138,0,10},{134,0,1320},{4,0,657},{146,0,158},{135,0,1191},{152,0,7},{6,0, +1939},{8,0,974},{138,0,996},{135,0,1665},{11,11,126},{139,11,287},{143,0,8},{14, +11,149},{14,11,399},{143,11,57},{5,0,66},{7,0,1896},{136,0,288},{7,0,175},{10,0, +494},{5,10,150},{8,10,603},{9,10,593},{9,10,634},{10,10,173},{11,10,462},{11,10, +515},{13,10,216},{13,10,288},{142,10,400},{134,0,1643},{136,11,21},{4,0,21},{5,0 +,91},{5,0,648},{5,0,750},{5,0,781},{6,0,54},{6,0,112},{6,0,402},{6,0,1732},{7,0, +315},{7,0,749},{7,0,1427},{7,0,1900},{9,0,78},{9,0,508},{10,0,611},{10,0,811},{ +11,0,510},{11,0,728},{13,0,36},{14,0,39},{16,0,83},{17,0,124},{148,0,30},{4,0, +668},{136,0,570},{10,0,322},{10,0,719},{139,0,407},{135,11,1381},{136,11,193},{ +12,10,108},{141,10,291},{132,11,616},{136,11,692},{8,0,125},{8,0,369},{8,0,524}, +{10,0,486},{11,0,13},{11,0,381},{11,0,736},{11,0,766},{11,0,845},{13,0,114},{13, +0,292},{142,0,47},{134,0,1247},{6,0,1684},{6,0,1731},{7,0,356},{8,0,54},{8,0,221 +},{9,0,225},{9,0,356},{10,0,77},{10,0,446},{10,0,731},{12,0,404},{141,0,491},{ +135,10,1777},{4,11,305},{4,10,493},{144,10,55},{4,0,951},{6,0,1809},{6,0,1849},{ +8,0,846},{8,0,866},{8,0,899},{10,0,896},{12,0,694},{142,0,468},{5,11,214},{7,11, +603},{8,11,611},{9,11,686},{10,11,88},{11,11,459},{11,11,496},{12,11,463},{12,11 +,590},{13,11,0},{142,11,214},{132,0,411},{4,0,80},{133,0,44},{140,11,74},{143,0, +31},{7,0,669},{6,10,568},{7,10,1804},{8,10,362},{8,10,410},{8,10,830},{9,10,514} +,{11,10,649},{142,10,157},{7,0,673},{134,11,1703},{132,10,625},{134,0,1303},{5,0 +,299},{135,0,1083},{138,0,704},{6,0,275},{7,0,408},{6,10,158},{7,10,129},{7,10, +181},{8,10,276},{8,10,377},{10,10,523},{11,10,816},{12,10,455},{13,10,303},{142, +10,135},{4,0,219},{7,0,367},{7,0,1713},{7,0,1761},{9,0,86},{9,0,537},{10,0,165}, +{12,0,219},{140,0,561},{8,0,216},{4,10,1},{4,11,737},{6,11,317},{7,10,1143},{7, +10,1463},{9,10,207},{9,10,390},{9,10,467},{10,11,98},{11,11,294},{11,10,836},{12 +,11,60},{12,11,437},{13,11,64},{13,11,380},{142,11,430},{6,11,1758},{8,11,520},{ +9,11,345},{9,11,403},{142,11,350},{5,11,47},{10,11,242},{138,11,579},{5,11,139}, +{7,11,1168},{138,11,539},{135,0,1319},{4,10,295},{4,10,723},{5,10,895},{7,10, +1031},{8,10,199},{8,10,340},{9,10,153},{9,10,215},{10,10,21},{10,10,59},{10,10, +80},{10,10,224},{10,10,838},{11,10,229},{11,10,652},{12,10,192},{13,10,146},{142 +,10,91},{140,0,428},{137,10,51},{133,0,514},{5,10,309},{140,10,211},{6,0,1010},{ +5,10,125},{8,10,77},{138,10,15},{4,0,55},{5,0,301},{6,0,571},{142,0,49},{146,0, +102},{136,11,370},{4,11,107},{7,11,613},{8,11,358},{8,11,439},{8,11,504},{9,11, +501},{10,11,383},{139,11,477},{132,11,229},{133,0,364},{133,10,439},{4,11,903},{ +135,11,1816},{11,0,379},{140,10,76},{4,0,76},{4,0,971},{7,0,1550},{9,0,306},{9,0 +,430},{9,0,663},{10,0,683},{10,0,921},{11,0,427},{11,0,753},{12,0,334},{12,0,442 +},{14,0,258},{14,0,366},{143,0,131},{137,0,52},{4,11,47},{6,11,373},{7,11,452},{ +7,11,543},{7,11,1714},{7,11,1856},{9,11,6},{11,11,257},{139,11,391},{4,10,8},{7, +10,1152},{7,10,1153},{7,10,1715},{9,10,374},{10,10,478},{139,10,648},{4,11,785}, +{133,11,368},{135,10,1099},{135,11,860},{5,11,980},{134,11,1754},{134,0,1258},{6 +,0,1058},{6,0,1359},{7,11,536},{7,11,1331},{136,11,143},{4,0,656},{135,0,779},{ +136,10,87},{5,11,19},{6,11,533},{146,11,126},{7,0,144},{138,10,438},{5,11,395},{ +5,11,951},{134,11,1776},{135,0,1373},{7,0,554},{7,0,605},{141,0,10},{4,10,69},{5 +,10,122},{9,10,656},{138,10,464},{5,10,849},{134,10,1633},{5,0,838},{5,0,841},{ +134,0,1649},{133,0,1012},{139,10,499},{7,10,476},{7,10,1592},{138,10,87},{6,0, +251},{7,0,365},{7,0,1357},{7,0,1497},{8,0,154},{141,0,281},{132,11,441},{132,11, +695},{7,11,497},{9,11,387},{147,11,81},{133,0,340},{14,10,283},{142,11,283},{134 +,0,810},{135,11,1894},{139,0,495},{5,11,284},{6,11,49},{6,11,350},{7,11,1},{7,11 +,377},{7,11,1693},{8,11,18},{8,11,678},{9,11,161},{9,11,585},{9,11,671},{9,11, +839},{11,11,912},{141,11,427},{5,10,859},{7,10,1160},{8,10,107},{9,10,291},{9,10 +,439},{10,10,663},{11,10,609},{140,10,197},{8,0,261},{9,0,144},{9,0,466},{10,0, +370},{12,0,470},{13,0,144},{142,0,348},{137,0,897},{6,0,248},{9,0,546},{10,0,535 +},{11,0,681},{141,0,135},{4,0,358},{135,0,1496},{134,0,567},{136,0,445},{4,10, +117},{6,10,372},{7,10,1905},{142,10,323},{4,10,722},{139,10,471},{6,0,697},{134, +0,996},{7,11,2007},{9,11,101},{9,11,450},{10,11,66},{10,11,842},{11,11,536},{140 +,11,587},{132,0,577},{134,0,1336},{9,10,5},{12,10,216},{12,10,294},{12,10,298},{ +12,10,400},{12,10,518},{13,10,229},{143,10,139},{6,0,174},{138,0,917},{134,10, +1774},{5,10,12},{7,10,375},{9,10,88},{9,10,438},{11,11,62},{139,10,270},{134,11, +1766},{6,11,0},{7,11,84},{7,10,816},{7,10,1241},{9,10,283},{9,10,520},{10,10,213 +},{10,10,307},{10,10,463},{10,10,671},{10,10,746},{11,10,401},{11,10,794},{11,11 +,895},{12,10,517},{17,11,11},{18,10,107},{147,10,115},{5,0,878},{133,0,972},{6, +11,1665},{7,11,256},{7,11,1388},{138,11,499},{4,10,258},{136,10,639},{4,11,22},{ +5,11,10},{6,10,22},{7,11,848},{7,10,903},{7,10,1963},{8,11,97},{138,10,577},{5, +10,681},{136,10,782},{133,11,481},{132,0,351},{4,10,664},{5,10,804},{139,10,1013 +},{6,11,134},{7,11,437},{7,11,959},{9,11,37},{14,11,285},{14,11,371},{144,11,60} +,{7,11,486},{8,11,155},{11,11,93},{140,11,164},{132,0,286},{7,0,438},{7,0,627},{ +7,0,1516},{8,0,40},{9,0,56},{9,0,294},{10,0,30},{11,0,969},{11,0,995},{146,0,148 +},{5,11,591},{135,11,337},{134,0,1950},{133,10,32},{138,11,500},{5,11,380},{5,11 +,650},{136,11,310},{4,11,364},{7,11,1156},{7,11,1187},{137,11,409},{4,0,738},{ +134,11,482},{4,11,781},{6,11,487},{7,11,926},{8,11,263},{139,11,500},{135,11,418 +},{6,0,2047},{10,0,969},{4,10,289},{7,10,629},{7,10,1698},{7,10,1711},{140,10, +215},{6,10,450},{136,10,109},{134,0,818},{136,10,705},{133,0,866},{4,11,94},{135 +,11,1265},{132,11,417},{134,0,1467},{135,10,1238},{4,0,972},{6,0,1851},{134,0, +1857},{134,0,355},{133,0,116},{132,0,457},{135,11,1411},{4,11,408},{4,11,741},{ +135,11,500},{134,10,26},{142,11,137},{5,0,527},{6,0,189},{7,0,859},{136,0,267},{ +11,0,104},{11,0,554},{15,0,60},{143,0,125},{134,0,1613},{4,10,414},{5,10,467},{9 +,10,654},{10,10,451},{12,10,59},{141,10,375},{135,10,17},{134,0,116},{135,11,541 +},{135,10,955},{6,11,73},{135,11,177},{133,11,576},{134,0,886},{133,0,487},{4,0, +86},{5,0,667},{5,0,753},{6,0,316},{6,0,455},{135,0,946},{142,11,231},{150,0,45}, +{134,0,863},{134,0,1953},{6,10,280},{10,10,502},{11,10,344},{140,10,38},{4,0,79} +,{7,0,1773},{10,0,450},{11,0,589},{13,0,332},{13,0,493},{14,0,183},{14,0,334},{ +14,0,362},{14,0,368},{14,0,376},{14,0,379},{19,0,90},{19,0,103},{19,0,127},{148, +0,90},{5,10,45},{7,10,1161},{11,10,448},{11,10,880},{13,10,139},{13,10,407},{15, +10,16},{17,10,95},{18,10,66},{18,10,88},{18,10,123},{149,10,7},{136,10,777},{4, +10,410},{135,10,521},{135,10,1778},{135,11,538},{142,0,381},{133,11,413},{134,0, +1142},{6,0,1189},{136,11,495},{5,0,663},{6,0,1962},{134,0,2003},{7,11,54},{8,11, +312},{10,11,191},{10,11,614},{140,11,567},{132,10,436},{133,0,846},{10,0,528},{ +11,0,504},{7,10,1587},{135,10,1707},{5,0,378},{8,0,465},{9,0,286},{10,0,185},{10 +,0,562},{10,0,635},{11,0,31},{11,0,393},{13,0,312},{18,0,65},{18,0,96},{147,0,89 +},{7,0,899},{14,0,325},{6,11,468},{7,11,567},{7,11,1478},{8,11,530},{142,11,290} +,{7,0,1880},{9,0,680},{139,0,798},{134,0,1770},{132,0,648},{150,11,35},{5,0,945} +,{6,0,1656},{6,0,1787},{7,0,167},{8,0,824},{9,0,391},{10,0,375},{139,0,185},{6, +11,484},{135,11,822},{134,0,2046},{7,0,1645},{8,0,352},{137,0,249},{132,0,152},{ +6,0,611},{135,0,1733},{6,11,1724},{135,11,2022},{133,0,1006},{141,11,96},{5,0, +420},{135,0,1449},{146,11,149},{135,0,832},{135,10,663},{133,0,351},{5,0,40},{7, +0,598},{7,0,1638},{8,0,78},{9,0,166},{9,0,640},{9,0,685},{9,0,773},{11,0,215},{ +13,0,65},{14,0,172},{14,0,317},{145,0,6},{8,0,60},{9,0,343},{139,0,769},{134,0, +1354},{132,0,724},{137,0,745},{132,11,474},{7,0,1951},{8,0,765},{8,0,772},{140,0 +,671},{7,0,108},{8,0,219},{8,0,388},{9,0,775},{11,0,275},{140,0,464},{137,0,639} +,{135,10,503},{133,11,366},{5,0,15},{6,0,56},{7,0,1758},{8,0,500},{9,0,730},{11, +0,331},{13,0,150},{14,0,282},{5,11,305},{9,11,560},{141,11,208},{4,10,113},{5,10 +,163},{5,10,735},{7,10,1009},{9,10,9},{9,10,771},{12,10,90},{13,10,138},{13,10, +410},{143,10,128},{4,10,324},{138,10,104},{135,11,466},{142,11,27},{134,0,1886}, +{5,0,205},{6,0,438},{9,0,711},{4,11,480},{6,11,167},{6,11,302},{6,11,1642},{7,11 +,130},{7,11,656},{7,11,837},{7,11,1547},{7,11,1657},{8,11,429},{9,11,228},{10,11 +,643},{13,11,289},{13,11,343},{147,11,101},{134,0,865},{6,0,2025},{136,0,965},{7 +,11,278},{10,11,739},{11,11,708},{141,11,348},{133,0,534},{135,11,1922},{137,0, +691},{4,10,935},{133,10,823},{6,0,443},{9,0,237},{9,0,571},{9,0,695},{10,0,139}, +{11,0,715},{12,0,417},{141,0,421},{5,10,269},{7,10,434},{7,10,891},{8,10,339},{9 +,10,702},{11,10,594},{11,10,718},{145,10,100},{6,0,1555},{7,0,878},{9,10,485},{ +141,10,264},{134,10,1713},{7,10,1810},{11,10,866},{12,10,103},{141,10,495},{135, +10,900},{6,0,1410},{9,11,316},{139,11,256},{4,0,995},{135,0,1033},{132,0,578},{ +10,0,881},{12,0,740},{12,0,743},{140,0,759},{132,0,822},{133,0,923},{142,10,143} +,{135,11,1696},{6,11,363},{7,11,1955},{136,11,725},{132,0,924},{133,0,665},{135, +10,2029},{135,0,1901},{4,0,265},{6,0,1092},{6,0,1417},{7,0,807},{135,0,950},{5,0 +,93},{12,0,267},{141,0,498},{135,0,1451},{5,11,813},{135,11,2046},{5,10,625},{ +135,10,1617},{135,0,747},{6,0,788},{137,0,828},{7,0,184},{11,0,307},{11,0,400},{ +15,0,130},{5,11,712},{7,11,1855},{8,10,425},{8,10,693},{9,10,720},{10,10,380},{ +10,10,638},{11,11,17},{11,10,473},{12,10,61},{13,11,321},{144,11,67},{135,0,198} +,{6,11,320},{7,11,781},{7,11,1921},{9,11,55},{10,11,186},{10,11,273},{10,11,664} +,{10,11,801},{11,11,996},{11,11,997},{13,11,157},{142,11,170},{136,11,271},{135, +0,994},{7,11,103},{7,11,863},{11,11,184},{14,11,299},{145,11,62},{11,10,551},{ +142,10,159},{5,0,233},{5,0,320},{6,0,140},{8,0,295},{8,0,615},{136,11,615},{133, +0,978},{4,0,905},{6,0,1701},{137,0,843},{132,10,168},{4,0,974},{8,0,850},{12,0, +709},{12,0,768},{140,0,786},{135,10,91},{152,0,6},{138,10,532},{135,10,1884},{ +132,0,509},{6,0,1307},{135,0,273},{5,11,77},{7,11,1455},{10,11,843},{19,11,73},{ +150,11,5},{132,11,458},{135,11,1420},{6,11,109},{138,11,382},{6,0,201},{6,11,330 +},{7,10,70},{7,11,1084},{10,10,240},{11,11,142},{147,10,93},{7,0,1041},{140,11, +328},{133,11,354},{134,0,1040},{133,0,693},{134,0,774},{139,0,234},{132,0,336},{ +7,0,1399},{139,10,392},{20,0,22},{148,11,22},{5,0,802},{7,0,2021},{136,0,805},{5 +,0,167},{5,0,899},{6,0,410},{137,0,777},{137,0,789},{134,0,1705},{7,10,655},{135 +,10,1844},{4,10,145},{6,10,176},{7,10,395},{137,10,562},{132,10,501},{135,0,10}, +{5,0,11},{6,0,117},{6,0,485},{7,0,1133},{9,0,582},{9,0,594},{10,0,82},{11,0,21}, +{11,0,818},{12,0,535},{13,0,86},{20,0,91},{23,0,13},{134,10,509},{4,0,264},{7,0, +1067},{8,0,204},{8,0,385},{139,0,953},{139,11,737},{138,0,56},{134,0,1917},{133, +0,470},{10,11,657},{14,11,297},{142,11,361},{135,11,412},{7,0,1198},{7,11,1198}, +{8,11,556},{14,11,123},{14,11,192},{143,11,27},{7,11,1985},{14,11,146},{15,11,42 +},{16,11,23},{17,11,86},{146,11,17},{11,0,1015},{136,11,122},{4,10,114},{9,10, +492},{13,10,462},{142,10,215},{4,10,77},{5,10,361},{6,10,139},{6,10,401},{6,10, +404},{7,10,413},{7,10,715},{7,10,1716},{11,10,279},{12,10,179},{12,10,258},{13, +10,244},{142,10,358},{134,10,1717},{7,10,1061},{8,10,82},{11,10,250},{12,10,420} +,{141,10,184},{133,0,715},{135,10,724},{9,0,919},{9,0,922},{9,0,927},{9,0,933},{ +9,0,962},{9,0,1000},{9,0,1002},{9,0,1021},{12,0,890},{12,0,907},{12,0,930},{15,0 +,207},{15,0,228},{15,0,238},{149,0,61},{8,0,794},{9,0,400},{10,0,298},{142,0,228 +},{5,11,430},{5,11,932},{6,11,131},{7,11,417},{9,11,522},{11,11,314},{141,11,390 +},{132,0,867},{8,0,724},{132,11,507},{137,11,261},{4,11,343},{133,11,511},{6,0, +190},{7,0,768},{135,0,1170},{6,10,513},{135,10,1052},{7,11,455},{138,11,591},{ +134,0,1066},{137,10,899},{14,0,67},{147,0,60},{4,0,948},{18,0,174},{146,0,176},{ +135,0,1023},{7,10,1417},{12,10,382},{17,10,48},{152,10,12},{134,11,575},{132,0, +764},{6,10,545},{7,10,565},{7,10,1669},{10,10,114},{11,10,642},{140,10,618},{6,0 +,137},{9,0,75},{9,0,253},{10,0,194},{138,0,444},{4,0,756},{133,10,5},{8,0,1008}, +{135,10,192},{132,0,842},{11,0,643},{12,0,115},{136,10,763},{139,0,67},{133,10, +759},{4,0,821},{5,0,760},{7,0,542},{8,0,135},{8,0,496},{135,11,580},{7,10,370},{ +7,10,1007},{7,10,1177},{135,10,1565},{135,10,1237},{140,0,736},{7,0,319},{7,0, +355},{7,0,763},{10,0,389},{145,0,43},{8,11,333},{138,11,182},{4,10,87},{5,10,250 +},{141,10,298},{138,0,786},{134,0,2044},{8,11,330},{140,11,477},{135,11,1338},{ +132,11,125},{134,0,1030},{134,0,1083},{132,11,721},{135,10,814},{7,11,776},{8,11 +,145},{147,11,56},{134,0,1226},{4,10,57},{7,10,1195},{7,10,1438},{7,10,1548},{7, +10,1835},{7,10,1904},{9,10,757},{10,10,604},{139,10,519},{7,11,792},{8,11,147},{ +10,11,821},{139,11,1021},{137,11,797},{4,0,58},{5,0,286},{6,0,319},{7,0,402},{7, +0,1254},{7,0,1903},{8,0,356},{140,0,408},{4,0,389},{4,0,815},{9,0,181},{9,0,255} +,{10,0,8},{10,0,29},{10,0,816},{11,0,311},{11,0,561},{12,0,67},{141,0,181},{7,11 +,1472},{135,11,1554},{7,11,1071},{7,11,1541},{7,11,1767},{7,11,1806},{7,11,1999} +,{9,11,248},{10,11,400},{11,11,162},{11,11,178},{11,11,242},{12,11,605},{15,11, +26},{144,11,44},{5,11,168},{5,11,930},{8,11,74},{9,11,623},{12,11,500},{12,11, +579},{13,11,41},{143,11,93},{6,11,220},{7,11,1101},{141,11,105},{5,0,474},{7,0, +507},{4,10,209},{7,11,507},{135,10,902},{132,0,427},{6,0,413},{7,10,335},{7,10, +1437},{7,10,1668},{8,10,553},{8,10,652},{8,10,656},{9,10,558},{11,10,743},{149, +10,18},{132,0,730},{6,11,19},{7,11,1413},{139,11,428},{133,0,373},{132,10,559},{ +7,11,96},{8,11,401},{137,11,896},{7,0,799},{7,0,1972},{5,10,1017},{138,10,511},{ +135,0,1793},{7,11,1961},{7,11,1965},{8,11,702},{136,11,750},{8,11,150},{8,11,737 +},{140,11,366},{132,0,322},{133,10,709},{8,11,800},{9,11,148},{9,11,872},{9,11, +890},{11,11,309},{11,11,1001},{13,11,267},{141,11,323},{134,10,1745},{7,0,290},{ +136,10,206},{7,0,1651},{145,0,89},{139,0,2},{132,0,672},{6,0,1860},{8,0,905},{10 +,0,844},{10,0,846},{10,0,858},{12,0,699},{12,0,746},{140,0,772},{135,11,424},{ +133,11,547},{133,0,737},{5,11,490},{6,11,615},{6,11,620},{135,11,683},{6,0,746}, +{134,0,1612},{132,10,776},{9,11,385},{149,11,17},{133,0,145},{135,10,1272},{7,0, +884},{140,0,124},{4,0,387},{135,0,1288},{5,11,133},{136,10,406},{136,11,187},{6, +0,679},{8,11,8},{138,11,0},{135,0,550},{135,11,798},{136,11,685},{7,11,1086},{ +145,11,46},{8,10,175},{10,10,168},{138,10,573},{135,0,1305},{4,0,576},{135,0, +1263},{6,0,686},{134,0,1563},{134,0,607},{5,0,919},{134,0,1673},{148,0,37},{8,11 +,774},{10,11,670},{140,11,51},{133,10,784},{139,10,882},{4,0,82},{5,0,333},{5,0, +904},{6,0,207},{7,0,325},{7,0,1726},{8,0,101},{10,0,778},{139,0,220},{135,11,371 +},{132,0,958},{133,0,903},{4,11,127},{5,11,350},{6,11,356},{8,11,426},{9,11,572} +,{10,11,247},{139,11,312},{140,0,147},{6,11,59},{7,11,885},{9,11,603},{141,11, +397},{10,0,367},{9,10,14},{9,10,441},{139,10,9},{11,10,966},{12,10,287},{13,10, +342},{13,10,402},{15,10,110},{143,10,163},{134,0,690},{132,0,705},{9,0,651},{11, +0,971},{13,0,273},{7,10,1428},{7,10,1640},{7,10,1867},{9,10,169},{9,10,182},{9, +10,367},{9,10,478},{9,10,506},{9,10,551},{9,10,557},{9,10,648},{9,10,697},{9,10, +705},{9,10,725},{9,10,787},{9,10,794},{10,10,198},{10,10,214},{10,10,267},{10,10 +,275},{10,10,456},{10,10,551},{10,10,561},{10,10,613},{10,10,627},{10,10,668},{ +10,10,675},{10,10,691},{10,10,695},{10,10,707},{10,10,715},{11,10,183},{11,10, +201},{11,10,262},{11,10,352},{11,10,439},{11,10,493},{11,10,572},{11,10,591},{11 +,10,608},{11,10,611},{11,10,646},{11,10,674},{11,10,711},{11,10,751},{11,10,761} +,{11,10,776},{11,10,785},{11,10,850},{11,10,853},{11,10,862},{11,10,865},{11,10, +868},{11,10,875},{11,10,898},{11,10,902},{11,10,903},{11,10,910},{11,10,932},{11 +,10,942},{11,10,957},{11,10,967},{11,10,972},{12,10,148},{12,10,195},{12,10,220} +,{12,10,237},{12,10,318},{12,10,339},{12,10,393},{12,10,445},{12,10,450},{12,10, +474},{12,10,505},{12,10,509},{12,10,533},{12,10,591},{12,10,594},{12,10,597},{12 +,10,621},{12,10,633},{12,10,642},{13,10,59},{13,10,60},{13,10,145},{13,10,239},{ +13,10,250},{13,10,329},{13,10,344},{13,10,365},{13,10,372},{13,10,387},{13,10, +403},{13,10,414},{13,10,456},{13,10,470},{13,10,478},{13,10,483},{13,10,489},{14 +,10,55},{14,10,57},{14,10,81},{14,10,90},{14,10,148},{14,10,239},{14,10,266},{14 +,10,321},{14,10,326},{14,10,327},{14,10,330},{14,10,347},{14,10,355},{14,10,401} +,{14,10,404},{14,10,411},{14,10,414},{14,10,416},{14,10,420},{15,10,61},{15,10, +74},{15,10,87},{15,10,88},{15,10,94},{15,10,96},{15,10,116},{15,10,149},{15,10, +154},{16,10,50},{16,10,63},{16,10,73},{17,10,2},{17,10,66},{17,10,92},{17,10,103 +},{17,10,112},{17,10,120},{18,10,50},{18,10,54},{18,10,82},{18,10,86},{18,10,90} +,{18,10,111},{18,10,115},{18,10,156},{19,10,40},{19,10,79},{20,10,78},{149,10,22 +},{7,0,887},{5,10,161},{135,10,839},{142,11,98},{134,0,90},{138,11,356},{135,11, +441},{6,11,111},{7,11,4},{8,11,163},{8,11,776},{138,11,566},{134,0,908},{134,0, +1261},{7,0,813},{12,0,497},{141,0,56},{134,0,1235},{135,0,429},{135,11,1994},{ +138,0,904},{6,0,125},{7,0,1277},{137,0,772},{151,0,12},{4,0,841},{5,0,386},{133, +11,386},{5,11,297},{135,11,1038},{6,0,860},{6,0,1069},{135,11,309},{136,0,946},{ +135,10,1814},{141,11,418},{136,11,363},{10,0,768},{139,0,787},{22,11,30},{150,11 +,33},{6,0,160},{7,0,1106},{9,0,770},{11,0,112},{140,0,413},{11,11,216},{139,11, +340},{136,10,139},{135,11,1390},{135,11,808},{132,11,280},{12,0,271},{17,0,109}, +{7,10,643},{136,10,236},{140,11,54},{4,11,421},{133,11,548},{11,0,719},{12,0,36} +,{141,0,337},{7,0,581},{9,0,644},{137,0,699},{11,11,511},{13,11,394},{14,11,298} +,{14,11,318},{146,11,103},{7,0,304},{9,0,646},{9,0,862},{11,0,696},{12,0,208},{ +15,0,79},{147,0,108},{4,0,631},{7,0,1126},{135,0,1536},{135,11,1527},{8,0,880},{ +10,0,869},{138,0,913},{7,0,1513},{5,10,54},{6,11,254},{9,11,109},{138,11,103},{ +135,0,981},{133,11,729},{132,10,744},{132,0,434},{134,0,550},{7,0,930},{10,0,476 +},{13,0,452},{19,0,104},{6,11,1630},{10,10,402},{146,10,55},{5,0,553},{138,0,824 +},{136,0,452},{8,0,151},{137,10,624},{132,10,572},{132,0,772},{133,11,671},{133, +0,292},{138,0,135},{132,11,889},{140,11,207},{9,0,504},{6,10,43},{7,10,38},{8,10 +,248},{138,10,513},{6,0,1089},{135,11,1910},{4,11,627},{133,11,775},{135,0,783}, +{133,10,766},{133,10,363},{7,0,387},{135,11,387},{7,0,393},{10,0,603},{11,0,206} +,{7,11,202},{11,11,362},{11,11,948},{140,11,388},{6,11,507},{7,11,451},{8,11,389 +},{12,11,490},{13,11,16},{13,11,215},{13,11,351},{18,11,132},{147,11,125},{4,0, +912},{9,0,232},{135,11,841},{6,10,258},{140,10,409},{5,10,249},{148,10,82},{136, +11,566},{6,0,977},{135,11,1214},{7,0,1973},{136,0,716},{135,0,98},{133,0,733},{5 +,11,912},{134,11,1695},{5,10,393},{6,10,378},{7,10,1981},{9,10,32},{9,10,591},{ +10,10,685},{10,10,741},{142,10,382},{133,10,788},{10,0,19},{11,0,911},{7,10,1968 +},{141,10,509},{5,0,668},{5,11,236},{6,11,572},{8,11,492},{11,11,618},{144,11,56 +},{135,11,1789},{4,0,360},{5,0,635},{5,0,700},{5,10,58},{5,10,171},{5,10,683},{6 +,10,291},{6,10,566},{7,10,1650},{11,10,523},{12,10,273},{12,10,303},{15,10,39},{ +143,10,111},{133,0,901},{134,10,589},{5,11,190},{136,11,318},{140,0,656},{7,0, +726},{152,0,9},{4,10,917},{133,10,1005},{135,10,1598},{134,11,491},{4,10,919},{ +133,11,434},{137,0,72},{6,0,1269},{6,0,1566},{134,0,1621},{9,0,463},{10,0,595},{ +4,10,255},{5,10,302},{6,10,132},{7,10,128},{7,10,283},{7,10,1299},{10,10,52},{10 +,10,514},{11,10,925},{13,10,92},{142,10,309},{135,0,1454},{134,0,1287},{11,0,600 +},{13,0,245},{137,10,173},{136,0,989},{7,0,164},{7,0,1571},{9,0,107},{140,0,225} +,{6,0,1061},{141,10,442},{4,0,27},{5,0,484},{5,0,510},{6,0,434},{7,0,1000},{7,0, +1098},{136,0,2},{7,11,85},{7,11,247},{8,11,585},{10,11,163},{138,11,316},{11,11, +103},{142,11,0},{134,0,1127},{4,0,460},{134,0,852},{134,10,210},{4,0,932},{133,0 +,891},{6,0,588},{147,11,83},{8,0,625},{4,10,284},{134,10,223},{134,0,76},{8,0,92 +},{137,0,221},{4,11,124},{10,11,457},{11,11,121},{11,11,169},{11,11,422},{11,11, +870},{12,11,214},{13,11,389},{14,11,187},{143,11,77},{9,11,618},{138,11,482},{4, +10,218},{7,10,526},{143,10,137},{13,0,9},{14,0,104},{14,0,311},{4,10,270},{5,10, +192},{6,10,332},{135,10,1322},{140,10,661},{135,11,1193},{6,11,107},{7,11,638},{ +7,11,1632},{137,11,396},{132,0,763},{4,0,622},{5,11,370},{134,11,1756},{133,0, +253},{135,0,546},{9,0,73},{10,0,110},{14,0,185},{17,0,119},{133,11,204},{7,0,624 +},{7,0,916},{10,0,256},{139,0,87},{7,10,379},{8,10,481},{137,10,377},{5,0,212},{ +12,0,35},{13,0,382},{5,11,970},{134,11,1706},{9,0,746},{5,10,1003},{134,10,149}, +{10,0,150},{11,0,849},{13,0,330},{8,10,262},{9,10,627},{11,10,214},{11,10,404},{ +11,10,457},{11,10,780},{11,10,913},{13,10,401},{142,10,200},{134,0,1466},{135,11 +,3},{6,0,1299},{4,11,35},{5,11,121},{5,11,483},{5,11,685},{6,11,489},{7,11,1204} +,{136,11,394},{135,10,742},{4,10,142},{136,10,304},{4,11,921},{133,11,1007},{134 +,0,1518},{6,0,1229},{135,0,1175},{133,0,816},{12,0,159},{4,10,471},{4,11,712},{5 +,10,51},{6,10,602},{7,10,925},{8,10,484},{138,10,195},{134,11,1629},{5,0,869},{5 +,0,968},{6,0,1626},{8,0,734},{136,0,784},{4,0,542},{6,0,1716},{6,0,1727},{7,0, +1082},{7,0,1545},{8,0,56},{8,0,118},{8,0,412},{8,0,564},{9,0,888},{9,0,908},{10, +0,50},{10,0,423},{11,0,685},{11,0,697},{11,0,933},{12,0,299},{13,0,126},{13,0, +136},{13,0,170},{13,0,190},{136,10,688},{132,10,697},{4,0,232},{9,0,202},{10,0, +474},{140,0,433},{136,0,212},{6,0,108},{7,0,1003},{7,0,1181},{8,0,111},{136,0, +343},{5,10,221},{135,11,1255},{133,11,485},{134,0,1712},{142,0,216},{5,0,643},{6 +,0,516},{4,11,285},{5,11,317},{6,11,301},{7,11,7},{8,11,153},{10,11,766},{11,11, +468},{12,11,467},{141,11,143},{4,0,133},{7,0,711},{7,0,1298},{135,0,1585},{134,0 +,650},{135,11,512},{6,0,99},{7,0,1808},{145,0,57},{6,0,246},{6,0,574},{7,0,428}, +{9,0,793},{10,0,669},{11,0,485},{11,0,840},{12,0,300},{14,0,250},{145,0,55},{4, +10,132},{5,10,69},{135,10,1242},{136,0,1023},{7,0,302},{132,10,111},{135,0,1871} +,{132,0,728},{9,0,252},{132,10,767},{6,0,461},{7,0,1590},{7,10,1416},{7,10,2005} +,{8,10,131},{8,10,466},{9,10,672},{13,10,252},{148,10,103},{6,0,323},{135,0,1564 +},{7,0,461},{136,0,775},{6,10,44},{136,10,368},{139,0,172},{132,0,464},{4,10,570 +},{133,10,120},{137,11,269},{6,10,227},{135,10,1589},{6,11,1719},{6,11,1735},{7, +11,2016},{7,11,2020},{8,11,837},{137,11,852},{7,0,727},{146,0,73},{132,0,1023},{ +135,11,852},{135,10,1529},{136,0,577},{138,11,568},{134,0,1037},{8,11,67},{138, +11,419},{4,0,413},{5,0,677},{8,0,432},{140,0,280},{10,0,600},{6,10,1667},{7,11, +967},{7,10,2036},{141,11,11},{6,10,511},{140,10,132},{6,0,799},{5,10,568},{6,10, +138},{135,10,1293},{8,0,159},{4,10,565},{136,10,827},{7,0,646},{7,0,1730},{11,0, +446},{141,0,178},{4,10,922},{133,10,1023},{135,11,11},{132,0,395},{11,0,145},{ +135,10,1002},{9,0,174},{10,0,164},{11,0,440},{11,0,514},{11,0,841},{15,0,98},{ +149,0,20},{134,0,426},{10,0,608},{139,0,1002},{7,11,320},{8,11,51},{12,11,481},{ +12,11,570},{148,11,106},{9,0,977},{9,0,983},{132,11,445},{138,0,250},{139,0,100} +,{6,0,1982},{136,10,402},{133,11,239},{4,10,716},{141,10,31},{5,0,476},{7,11,83} +,{7,11,1990},{8,11,130},{139,11,720},{8,10,691},{136,10,731},{5,11,123},{6,11, +530},{7,11,348},{135,11,1419},{5,0,76},{6,0,458},{6,0,497},{7,0,868},{9,0,658},{ +10,0,594},{11,0,173},{11,0,566},{12,0,20},{12,0,338},{141,0,200},{9,11,139},{10, +11,399},{11,11,469},{12,11,634},{141,11,223},{9,10,840},{138,10,803},{133,10,847 +},{11,11,223},{140,11,168},{132,11,210},{8,0,447},{9,10,53},{9,10,268},{9,10,901 +},{10,10,518},{10,10,829},{11,10,188},{13,10,74},{14,10,46},{15,10,17},{15,10,33 +},{17,10,40},{18,10,36},{19,10,20},{22,10,1},{152,10,2},{4,0,526},{7,0,1029},{ +135,0,1054},{19,11,59},{150,11,2},{4,0,636},{6,0,1875},{6,0,1920},{9,0,999},{12, +0,807},{12,0,825},{15,0,179},{15,0,190},{18,0,182},{136,10,532},{6,0,1699},{7,0, +660},{7,0,1124},{17,0,31},{19,0,22},{151,0,14},{135,10,681},{132,11,430},{140,10 +,677},{4,10,684},{136,10,384},{132,11,756},{133,11,213},{7,0,188},{7,10,110},{8, +10,290},{8,10,591},{9,10,382},{9,10,649},{11,10,71},{11,10,155},{11,10,313},{12, +10,5},{13,10,325},{142,10,287},{7,10,360},{7,10,425},{9,10,66},{9,10,278},{138, +10,644},{142,11,164},{4,0,279},{7,0,301},{137,0,362},{134,11,586},{135,0,1743},{ +4,0,178},{133,0,399},{4,10,900},{133,10,861},{5,10,254},{7,10,985},{136,10,73},{ +133,11,108},{7,10,1959},{136,10,683},{133,11,219},{4,11,193},{5,11,916},{7,11, +364},{10,11,398},{10,11,726},{11,11,317},{11,11,626},{12,11,142},{12,11,288},{12 +,11,678},{13,11,313},{15,11,113},{18,11,114},{21,11,30},{150,11,53},{6,11,241},{ +7,11,907},{8,11,832},{9,11,342},{10,11,729},{11,11,284},{11,11,445},{11,11,651}, +{11,11,863},{13,11,398},{146,11,99},{132,0,872},{134,0,831},{134,0,1692},{6,0, +202},{6,0,1006},{9,0,832},{10,0,636},{11,0,208},{12,0,360},{17,0,118},{18,0,27}, +{20,0,67},{137,11,734},{132,10,725},{7,11,993},{138,11,666},{134,0,1954},{134,10 +,196},{7,0,872},{10,0,516},{139,0,167},{133,10,831},{4,11,562},{9,11,254},{139, +11,879},{137,0,313},{4,0,224},{132,11,786},{11,0,24},{12,0,170},{136,10,723},{5, +0,546},{7,0,35},{8,0,11},{8,0,12},{9,0,315},{9,0,533},{10,0,802},{11,0,166},{12, +0,525},{142,0,243},{7,0,1937},{13,10,80},{13,10,437},{145,10,74},{5,0,241},{8,0, +242},{9,0,451},{10,0,667},{11,0,598},{140,0,429},{150,0,46},{6,0,1273},{137,0, +830},{5,10,848},{6,10,66},{136,10,764},{6,0,825},{134,0,993},{4,0,1006},{10,0, +327},{13,0,271},{4,10,36},{7,10,1387},{139,10,755},{134,0,1023},{135,0,1580},{4, +0,366},{137,0,516},{132,10,887},{6,0,1736},{135,0,1891},{6,11,216},{7,11,901},{7 +,11,1343},{136,11,493},{6,10,165},{138,10,388},{7,11,341},{139,11,219},{4,10,719 +},{135,10,155},{134,0,1935},{132,0,826},{6,0,331},{6,0,1605},{8,0,623},{11,0,139 +},{139,0,171},{135,11,1734},{10,11,115},{11,11,420},{12,11,154},{13,11,404},{14, +11,346},{15,11,54},{143,11,112},{7,0,288},{4,10,353},{6,10,146},{6,10,1789},{7, +10,990},{7,10,1348},{9,10,665},{9,10,898},{11,10,893},{142,10,212},{6,0,916},{ +134,0,1592},{7,0,1888},{4,10,45},{135,10,1257},{5,11,1011},{136,11,701},{139,11, +596},{4,11,54},{5,11,666},{7,11,1039},{7,11,1130},{9,11,195},{138,11,302},{134,0 +,1471},{134,0,1570},{132,0,394},{140,10,65},{136,10,816},{135,0,1931},{7,0,574}, +{135,0,1719},{134,11,467},{132,0,658},{9,0,781},{10,0,144},{11,0,385},{13,0,161} +,{13,0,228},{13,0,268},{20,0,107},{134,11,1669},{136,0,374},{135,0,735},{4,0,344 +},{6,0,498},{139,0,323},{7,0,586},{7,0,1063},{6,10,559},{134,10,1691},{137,0,155 +},{133,0,906},{7,11,122},{9,11,259},{10,11,84},{11,11,470},{12,11,541},{141,11, +379},{134,0,1139},{10,0,108},{139,0,116},{134,10,456},{133,10,925},{5,11,82},{5, +11,131},{7,11,1755},{8,11,31},{9,11,168},{9,11,764},{139,11,869},{134,11,605},{5 +,11,278},{137,11,68},{4,11,163},{5,11,201},{5,11,307},{5,11,310},{6,11,335},{7, +11,284},{136,11,165},{135,11,1660},{6,11,33},{135,11,1244},{4,0,616},{136,11,483 +},{8,0,857},{8,0,902},{8,0,910},{10,0,879},{12,0,726},{4,11,199},{139,11,34},{ +136,0,692},{6,10,193},{7,10,240},{7,10,1682},{10,10,51},{10,10,640},{11,10,410}, +{13,10,82},{14,10,247},{14,10,331},{142,10,377},{6,0,823},{134,0,983},{139,10, +411},{132,0,305},{136,10,633},{138,11,203},{134,0,681},{6,11,326},{7,11,677},{ +137,11,425},{5,0,214},{7,0,603},{8,0,611},{9,0,686},{10,0,88},{11,0,459},{11,0, +496},{12,0,463},{12,0,590},{141,0,0},{136,0,1004},{142,0,23},{134,0,1703},{147, +11,8},{145,11,56},{135,0,1443},{4,10,237},{135,10,514},{6,0,714},{145,0,19},{5, +11,358},{7,11,473},{7,11,1184},{10,11,662},{13,11,212},{13,11,304},{13,11,333},{ +145,11,98},{4,0,737},{10,0,98},{11,0,294},{12,0,60},{12,0,437},{13,0,64},{13,0, +380},{142,0,430},{6,10,392},{7,10,65},{135,10,2019},{6,0,1758},{8,0,520},{9,0, +345},{9,0,403},{142,0,350},{5,0,47},{10,0,242},{138,0,579},{5,0,139},{7,0,1168}, +{138,0,539},{134,0,1459},{13,0,388},{141,11,388},{134,0,253},{7,10,1260},{135,10 +,1790},{10,0,252},{9,10,222},{139,10,900},{140,0,745},{133,11,946},{4,0,107},{7, +0,613},{8,0,439},{8,0,504},{9,0,501},{10,0,383},{139,0,477},{135,11,1485},{132,0 +,871},{7,11,411},{7,11,590},{8,11,631},{9,11,323},{10,11,355},{11,11,491},{12,11 +,143},{12,11,402},{13,11,73},{14,11,408},{15,11,107},{146,11,71},{132,0,229},{ +132,0,903},{140,0,71},{133,0,549},{4,0,47},{6,0,373},{7,0,452},{7,0,543},{7,0, +1828},{7,0,1856},{9,0,6},{11,0,257},{139,0,391},{7,11,1467},{8,11,328},{10,11, +544},{11,11,955},{13,11,320},{145,11,83},{5,0,980},{134,0,1754},{136,0,865},{5,0 +,705},{137,0,606},{7,0,161},{8,10,201},{136,10,605},{143,11,35},{5,11,835},{6,11 +,483},{140,10,224},{7,0,536},{7,0,1331},{136,0,143},{134,0,1388},{5,0,724},{10,0 +,305},{11,0,151},{12,0,33},{12,0,121},{12,0,381},{17,0,3},{17,0,27},{17,0,78},{ +18,0,18},{19,0,54},{149,0,5},{4,10,523},{133,10,638},{5,0,19},{134,0,533},{5,0, +395},{5,0,951},{134,0,1776},{135,0,1908},{132,0,846},{10,0,74},{11,0,663},{12,0, +210},{13,0,166},{13,0,310},{14,0,373},{18,0,95},{19,0,43},{6,10,242},{7,10,227}, +{7,10,1581},{8,10,104},{9,10,113},{9,10,220},{9,10,427},{10,10,239},{11,10,579}, +{11,10,1023},{13,10,4},{13,10,204},{13,10,316},{148,10,86},{9,11,716},{11,11,108 +},{13,11,123},{14,11,252},{19,11,38},{21,11,3},{151,11,11},{8,0,372},{9,0,122},{ +138,0,175},{132,11,677},{7,11,1374},{136,11,540},{135,10,861},{132,0,695},{7,0, +497},{9,0,387},{147,0,81},{136,0,937},{134,0,718},{7,0,1328},{136,10,494},{132, +11,331},{6,0,1581},{133,11,747},{5,0,284},{6,0,49},{6,0,350},{7,0,1},{7,0,377},{ +7,0,1693},{8,0,18},{8,0,678},{9,0,161},{9,0,585},{9,0,671},{9,0,839},{11,0,912}, +{141,0,427},{7,10,1306},{8,10,505},{9,10,482},{10,10,126},{11,10,225},{12,10,347 +},{12,10,449},{13,10,19},{14,10,218},{142,10,435},{10,10,764},{12,10,120},{13,10 +,39},{145,10,127},{4,0,597},{133,10,268},{134,0,1094},{4,0,1008},{134,0,1973},{ +132,0,811},{139,0,908},{135,0,1471},{133,11,326},{4,10,384},{135,10,1022},{7,0, +1935},{8,0,324},{12,0,42},{4,11,691},{7,11,1935},{8,11,324},{9,11,35},{10,11,680 +},{11,11,364},{12,11,42},{13,11,357},{146,11,16},{135,0,2014},{7,0,2007},{9,0, +101},{9,0,450},{10,0,66},{10,0,842},{11,0,536},{12,0,587},{6,11,32},{7,11,385},{ +7,11,757},{7,11,1916},{8,11,37},{8,11,94},{8,11,711},{9,11,541},{10,11,162},{10, +11,795},{11,11,989},{11,11,1010},{12,11,14},{142,11,308},{139,0,586},{135,10, +1703},{7,0,1077},{11,0,28},{9,10,159},{140,10,603},{6,0,1221},{136,10,583},{6,11 +,152},{6,11,349},{6,11,1682},{7,11,1252},{8,11,112},{9,11,435},{9,11,668},{10,11 +,290},{10,11,319},{10,11,815},{11,11,180},{11,11,837},{12,11,240},{13,11,152},{ +13,11,219},{142,11,158},{139,0,62},{132,10,515},{8,10,632},{8,10,697},{137,10, +854},{134,0,1766},{132,11,581},{6,11,126},{7,11,573},{8,11,397},{142,11,44},{150 +,0,28},{11,0,670},{22,0,25},{4,10,136},{133,10,551},{6,0,1665},{7,0,256},{7,0, +1388},{138,0,499},{4,0,22},{5,0,10},{7,0,1576},{136,0,97},{134,10,1782},{5,0,481 +},{7,10,1287},{9,10,44},{10,10,552},{10,10,642},{11,10,839},{12,10,274},{12,10, +275},{12,10,372},{13,10,91},{142,10,125},{133,11,926},{7,11,1232},{137,11,531},{ +6,0,134},{7,0,437},{7,0,1824},{9,0,37},{14,0,285},{142,0,371},{7,0,486},{8,0,155 +},{11,0,93},{140,0,164},{6,0,1391},{134,0,1442},{133,11,670},{133,0,591},{6,10, +147},{7,10,886},{7,11,1957},{9,10,753},{138,10,268},{5,0,380},{5,0,650},{7,0, +1173},{136,0,310},{4,0,364},{7,0,1156},{7,0,1187},{137,0,409},{135,11,1621},{134 +,0,482},{133,11,506},{4,0,781},{6,0,487},{7,0,926},{8,0,263},{139,0,500},{138,10 +,137},{135,11,242},{139,11,96},{133,10,414},{135,10,1762},{134,0,804},{5,11,834} +,{7,11,1202},{8,11,14},{9,11,481},{137,11,880},{134,10,599},{4,0,94},{135,0,1265 +},{4,0,415},{132,0,417},{5,0,348},{6,0,522},{6,10,1749},{7,11,1526},{138,11,465} +,{134,10,1627},{132,0,1012},{132,10,488},{4,11,357},{6,11,172},{7,11,143},{137, +11,413},{4,10,83},{4,11,590},{146,11,76},{140,10,676},{7,11,287},{8,11,355},{9, +11,293},{137,11,743},{134,10,278},{6,0,1803},{18,0,165},{24,0,21},{5,11,169},{7, +11,333},{136,11,45},{12,10,97},{140,11,97},{4,0,408},{4,0,741},{135,0,500},{132, +11,198},{7,10,388},{7,10,644},{139,10,781},{4,11,24},{5,11,140},{5,11,185},{7,11 +,1500},{11,11,565},{139,11,838},{6,0,1321},{9,0,257},{7,10,229},{8,10,59},{9,10, +190},{10,10,378},{140,10,191},{4,11,334},{133,11,593},{135,11,1885},{134,0,1138} +,{4,0,249},{6,0,73},{135,0,177},{133,0,576},{142,0,231},{137,0,288},{132,10,660} +,{7,10,1035},{138,10,737},{135,0,1487},{6,0,989},{9,0,433},{7,10,690},{9,10,587} +,{140,10,521},{7,0,1264},{7,0,1678},{11,0,945},{12,0,341},{12,0,471},{140,0,569} +,{132,11,709},{133,11,897},{5,11,224},{13,11,174},{146,11,52},{135,11,1840},{134 +,10,1744},{12,0,87},{16,0,74},{4,10,733},{9,10,194},{10,10,92},{11,10,198},{12, +10,84},{141,10,128},{140,0,779},{135,0,538},{4,11,608},{133,11,497},{133,0,413}, +{7,11,1375},{7,11,1466},{138,11,331},{136,0,495},{6,11,540},{136,11,136},{7,0,54 +},{8,0,312},{10,0,191},{10,0,614},{140,0,567},{6,0,468},{7,0,567},{7,0,1478},{8, +0,530},{14,0,290},{133,11,999},{4,11,299},{7,10,306},{135,11,1004},{142,11,296}, +{134,0,1484},{133,10,979},{6,0,609},{9,0,815},{12,11,137},{14,11,9},{14,11,24},{ +142,11,64},{133,11,456},{6,0,484},{135,0,822},{133,10,178},{136,11,180},{132,11, +755},{137,0,900},{135,0,1335},{6,0,1724},{135,0,2022},{135,11,1139},{5,0,640},{ +132,10,390},{6,0,1831},{138,11,633},{135,11,566},{4,11,890},{5,11,805},{5,11,819 +},{5,11,961},{6,11,396},{6,11,1631},{6,11,1678},{7,11,1967},{7,11,2041},{9,11, +630},{11,11,8},{11,11,1019},{12,11,176},{13,11,225},{14,11,292},{149,11,24},{132 +,0,474},{134,0,1103},{135,0,1504},{134,0,1576},{6,0,961},{6,0,1034},{140,0,655}, +{11,11,514},{149,11,20},{5,0,305},{135,11,1815},{7,11,1505},{10,11,190},{10,11, +634},{11,11,792},{12,11,358},{140,11,447},{5,11,0},{6,11,536},{7,11,604},{13,11, +445},{145,11,126},{7,0,1236},{133,10,105},{4,0,480},{6,0,217},{6,0,302},{6,0, +1642},{7,0,130},{7,0,837},{7,0,1321},{7,0,1547},{7,0,1657},{8,0,429},{9,0,228},{ +13,0,289},{13,0,343},{19,0,101},{6,11,232},{6,11,412},{7,11,1074},{8,11,9},{8,11 +,157},{8,11,786},{9,11,196},{9,11,352},{9,11,457},{10,11,337},{11,11,232},{11,11 +,877},{12,11,480},{140,11,546},{5,10,438},{7,11,958},{9,10,694},{12,10,627},{13, +11,38},{141,10,210},{4,11,382},{136,11,579},{7,0,278},{10,0,739},{11,0,708},{141 +,0,348},{4,11,212},{135,11,1206},{135,11,1898},{6,0,708},{6,0,1344},{152,10,11}, +{137,11,768},{134,0,1840},{140,0,233},{8,10,25},{138,10,826},{6,0,2017},{133,11, +655},{6,0,1488},{139,11,290},{132,10,308},{134,0,1590},{134,0,1800},{134,0,1259} +,{16,0,28},{6,11,231},{7,11,95},{136,11,423},{133,11,300},{135,10,150},{136,10, +649},{7,11,1874},{137,11,641},{6,11,237},{7,11,611},{8,11,100},{9,11,416},{11,11 +,335},{12,11,173},{146,11,101},{137,0,45},{134,10,521},{17,0,36},{14,11,26},{146 +,11,150},{7,0,1442},{14,0,22},{5,10,339},{15,10,41},{15,10,166},{147,10,66},{8,0 +,378},{6,11,581},{135,11,1119},{134,0,1507},{147,11,117},{139,0,39},{134,0,1054} +,{6,0,363},{7,0,1955},{136,0,725},{134,0,2036},{133,11,199},{6,0,1871},{9,0,935} +,{9,0,961},{9,0,1004},{9,0,1016},{12,0,805},{12,0,852},{12,0,853},{12,0,869},{12 +,0,882},{12,0,896},{12,0,906},{12,0,917},{12,0,940},{15,0,170},{15,0,176},{15,0, +188},{15,0,201},{15,0,205},{15,0,212},{15,0,234},{15,0,244},{18,0,181},{18,0,193 +},{18,0,196},{18,0,201},{18,0,202},{18,0,210},{18,0,217},{18,0,235},{18,0,236},{ +18,0,237},{21,0,54},{21,0,55},{21,0,58},{21,0,59},{152,0,22},{134,10,1628},{137, +0,805},{5,0,813},{135,0,2046},{142,11,42},{5,0,712},{6,0,1240},{11,0,17},{13,0, +321},{144,0,67},{132,0,617},{135,10,829},{6,0,320},{7,0,781},{7,0,1921},{9,0,55} +,{10,0,186},{10,0,273},{10,0,664},{10,0,801},{11,0,996},{11,0,997},{13,0,157},{ +142,0,170},{136,0,271},{5,10,486},{135,10,1349},{18,11,91},{147,11,70},{10,0,445 +},{7,10,1635},{8,10,17},{138,10,295},{136,11,404},{7,0,103},{7,0,863},{11,0,184} +,{145,0,62},{138,10,558},{137,0,659},{6,11,312},{6,11,1715},{10,11,584},{11,11, +546},{11,11,692},{12,11,259},{12,11,295},{13,11,46},{141,11,154},{134,0,676},{ +132,11,588},{4,11,231},{5,11,61},{6,11,104},{7,11,729},{7,11,964},{7,11,1658},{ +140,11,414},{6,11,263},{138,11,757},{11,0,337},{142,0,303},{135,11,1363},{132,11 +,320},{140,0,506},{134,10,447},{5,0,77},{7,0,1455},{10,0,843},{147,0,73},{7,10, +577},{7,10,1432},{9,10,475},{9,10,505},{9,10,526},{9,10,609},{9,10,689},{9,10, +726},{9,10,735},{9,10,738},{10,10,556},{10,10,674},{10,10,684},{11,10,89},{11,10 +,202},{11,10,272},{11,10,380},{11,10,415},{11,10,505},{11,10,537},{11,10,550},{ +11,10,562},{11,10,640},{11,10,667},{11,10,688},{11,10,847},{11,10,927},{11,10, +930},{11,10,940},{12,10,144},{12,10,325},{12,10,329},{12,10,389},{12,10,403},{12 +,10,451},{12,10,515},{12,10,604},{12,10,616},{12,10,626},{13,10,66},{13,10,131}, +{13,10,167},{13,10,236},{13,10,368},{13,10,411},{13,10,434},{13,10,453},{13,10, +461},{13,10,474},{14,10,59},{14,10,60},{14,10,139},{14,10,152},{14,10,276},{14, +10,353},{14,10,402},{15,10,28},{15,10,81},{15,10,123},{15,10,152},{18,10,136},{ +148,10,88},{132,0,458},{135,0,1420},{6,0,109},{10,0,382},{4,11,405},{4,10,609},{ +7,10,756},{7,11,817},{9,10,544},{11,10,413},{14,11,58},{14,10,307},{16,10,25},{ +17,11,37},{146,11,124},{6,0,330},{7,0,1084},{11,0,142},{133,11,974},{4,10,930},{ +133,10,947},{5,10,939},{142,11,394},{16,0,91},{145,0,87},{5,11,235},{5,10,962},{ +7,11,1239},{11,11,131},{140,11,370},{11,0,492},{5,10,651},{8,10,170},{9,10,61},{ +9,10,63},{10,10,23},{10,10,37},{10,10,834},{11,10,4},{11,10,281},{11,10,503},{11 +,10,677},{12,10,96},{12,10,130},{12,10,244},{14,10,5},{14,10,40},{14,10,162},{14 +,10,202},{146,10,133},{4,10,406},{5,10,579},{12,10,492},{150,10,15},{9,11,137},{ +138,11,221},{134,0,1239},{11,0,211},{140,0,145},{7,11,390},{138,11,140},{135,11, +1418},{135,11,1144},{134,0,1049},{7,0,321},{6,10,17},{7,10,1001},{7,10,1982},{9, +10,886},{10,10,489},{10,10,800},{11,10,782},{12,10,320},{13,10,467},{14,10,145}, +{14,10,387},{143,10,119},{145,10,17},{5,11,407},{11,11,489},{19,11,37},{20,11,73 +},{150,11,38},{133,10,458},{135,0,1985},{7,10,1983},{8,10,0},{8,10,171},{9,10, +120},{9,10,732},{10,10,473},{11,10,656},{11,10,998},{18,10,0},{18,10,2},{147,10, +21},{5,11,325},{7,11,1483},{8,11,5},{8,11,227},{9,11,105},{10,11,585},{140,11, +614},{136,0,122},{132,0,234},{135,11,1196},{6,0,976},{6,0,1098},{134,0,1441},{7, +0,253},{136,0,549},{6,11,621},{13,11,504},{144,11,19},{132,10,519},{5,0,430},{5, +0,932},{6,0,131},{7,0,417},{9,0,522},{11,0,314},{141,0,390},{14,0,149},{14,0,399 +},{143,0,57},{5,10,907},{6,10,31},{6,11,218},{7,10,491},{7,10,530},{8,10,592},{ +11,10,53},{11,10,779},{12,10,167},{12,10,411},{14,10,14},{14,10,136},{15,10,72}, +{16,10,17},{144,10,72},{140,11,330},{7,11,454},{7,11,782},{136,11,768},{132,0, +507},{10,11,676},{140,11,462},{6,0,630},{9,0,811},{4,10,208},{5,10,106},{6,10, +531},{8,10,408},{9,10,188},{138,10,572},{4,0,343},{5,0,511},{134,10,1693},{134, +11,164},{132,0,448},{7,0,455},{138,0,591},{135,0,1381},{12,10,441},{150,11,50},{ +9,10,449},{10,10,192},{138,10,740},{6,0,575},{132,10,241},{134,0,1175},{134,0, +653},{134,0,1761},{134,0,1198},{132,10,259},{6,11,343},{7,11,195},{9,11,226},{10 +,11,197},{10,11,575},{11,11,502},{139,11,899},{7,0,1127},{7,0,1572},{10,0,297},{ +10,0,422},{11,0,764},{11,0,810},{12,0,264},{13,0,102},{13,0,300},{13,0,484},{14, +0,147},{14,0,229},{17,0,71},{18,0,118},{147,0,120},{135,11,666},{132,0,678},{4, +10,173},{5,10,312},{5,10,512},{135,10,1285},{7,10,1603},{7,10,1691},{9,10,464},{ +11,10,195},{12,10,279},{12,10,448},{14,10,11},{147,10,102},{16,0,99},{146,0,164} +,{7,11,1125},{9,11,143},{11,11,61},{14,11,405},{150,11,21},{137,11,260},{4,10, +452},{5,10,583},{5,10,817},{6,10,433},{7,10,593},{7,10,720},{7,10,1378},{8,10, +161},{9,10,284},{10,10,313},{139,10,886},{132,10,547},{136,10,722},{14,0,35},{ +142,0,191},{141,0,45},{138,0,121},{132,0,125},{134,0,1622},{133,11,959},{8,10, +420},{139,10,193},{132,0,721},{135,10,409},{136,0,145},{7,0,792},{8,0,147},{10,0 +,821},{11,0,970},{11,0,1021},{136,11,173},{134,11,266},{132,0,715},{7,0,1999},{ +138,10,308},{133,0,531},{5,0,168},{5,0,930},{8,0,74},{9,0,623},{12,0,500},{140,0 +,579},{144,0,65},{138,11,246},{6,0,220},{7,0,1101},{13,0,105},{142,11,314},{5,10 +,1002},{136,10,745},{134,0,960},{20,0,0},{148,11,0},{4,0,1005},{4,10,239},{6,10, +477},{7,10,1607},{11,10,68},{139,10,617},{6,0,19},{7,0,1413},{139,0,428},{149,10 +,13},{7,0,96},{8,0,401},{8,0,703},{9,0,896},{136,11,300},{134,0,1595},{145,0,116 +},{136,0,1021},{7,0,1961},{7,0,1965},{7,0,2030},{8,0,150},{8,0,702},{8,0,737},{8 +,0,750},{140,0,366},{11,11,75},{142,11,267},{132,10,367},{8,0,800},{9,0,148},{9, +0,872},{9,0,890},{11,0,309},{11,0,1001},{13,0,267},{13,0,323},{5,11,427},{5,11, +734},{7,11,478},{136,11,52},{7,11,239},{11,11,217},{142,11,165},{132,11,323},{ +140,11,419},{13,0,299},{142,0,75},{6,11,87},{6,11,1734},{7,11,20},{7,11,1056},{8 +,11,732},{9,11,406},{9,11,911},{138,11,694},{134,0,1383},{132,10,694},{133,11, +613},{137,0,779},{4,0,598},{140,10,687},{6,0,970},{135,0,424},{133,0,547},{7,11, +32},{7,11,984},{8,11,85},{8,11,709},{9,11,579},{9,11,847},{9,11,856},{10,11,799} +,{11,11,258},{11,11,1007},{12,11,331},{12,11,615},{13,11,188},{13,11,435},{14,11 +,8},{15,11,165},{16,11,27},{148,11,40},{6,0,1222},{134,0,1385},{132,0,876},{138, +11,151},{135,10,213},{4,11,167},{135,11,82},{133,0,133},{6,11,24},{7,11,74},{7, +11,678},{137,11,258},{5,11,62},{6,11,534},{7,11,684},{7,11,1043},{7,11,1072},{8, +11,280},{8,11,541},{8,11,686},{10,11,519},{11,11,252},{140,11,282},{136,0,187},{ +8,0,8},{10,0,0},{10,0,818},{139,0,988},{132,11,359},{11,0,429},{15,0,51},{135,10 +,1672},{136,0,685},{5,11,211},{7,11,88},{136,11,627},{134,0,472},{136,0,132},{6, +11,145},{141,11,336},{4,10,751},{11,10,390},{140,10,32},{6,0,938},{6,0,1060},{4, +11,263},{4,10,409},{133,10,78},{137,0,874},{8,0,774},{10,0,670},{12,0,51},{4,11, +916},{6,10,473},{7,10,1602},{10,10,698},{12,10,212},{13,10,307},{145,10,105},{ +146,0,92},{143,10,156},{132,0,830},{137,0,701},{4,11,599},{6,11,1634},{7,11,5},{ +7,11,55},{7,11,67},{7,11,97},{7,11,691},{7,11,979},{7,11,1697},{8,11,207},{8,11, +214},{8,11,231},{8,11,294},{8,11,336},{8,11,428},{8,11,451},{8,11,460},{8,11,471 +},{8,11,622},{8,11,626},{8,11,679},{8,11,759},{8,11,829},{9,11,11},{9,11,246},{9 +,11,484},{9,11,573},{9,11,706},{9,11,762},{9,11,798},{9,11,855},{9,11,870},{9,11 +,912},{10,11,303},{10,11,335},{10,11,424},{10,11,461},{10,11,543},{10,11,759},{ +10,11,814},{11,11,59},{11,11,199},{11,11,235},{11,11,475},{11,11,590},{11,11,929 +},{11,11,963},{12,11,114},{12,11,182},{12,11,226},{12,11,332},{12,11,439},{12,11 +,575},{12,11,598},{13,11,8},{13,11,125},{13,11,194},{13,11,287},{14,11,197},{14, +11,383},{15,11,53},{17,11,63},{19,11,46},{19,11,98},{19,11,106},{148,11,85},{4,0 +,127},{5,0,350},{6,0,356},{8,0,426},{9,0,572},{10,0,247},{139,0,312},{134,0,1215 +},{6,0,59},{9,0,603},{13,0,397},{7,11,1853},{138,11,437},{134,0,1762},{147,11, +126},{135,10,883},{13,0,293},{142,0,56},{133,10,617},{139,10,50},{5,11,187},{7, +10,1518},{139,10,694},{135,0,441},{6,0,111},{7,0,4},{8,0,163},{8,0,776},{138,0, +566},{132,0,806},{4,11,215},{9,11,38},{10,11,3},{11,11,23},{11,11,127},{139,11, +796},{14,0,233},{4,10,546},{135,10,2042},{135,0,1994},{134,0,1739},{135,11,1530} +,{136,0,393},{5,0,297},{7,0,1038},{14,0,359},{19,0,52},{148,0,47},{135,0,309},{4 +,10,313},{133,10,577},{8,10,184},{141,10,433},{135,10,935},{12,10,186},{12,10, +292},{14,10,100},{146,10,70},{136,0,363},{14,0,175},{11,10,402},{12,10,109},{12, +10,431},{13,10,179},{13,10,206},{14,10,217},{16,10,3},{148,10,53},{5,10,886},{6, +10,46},{6,10,1790},{7,10,14},{7,10,732},{7,10,1654},{8,10,95},{8,10,327},{8,10, +616},{9,10,892},{10,10,598},{10,10,769},{11,10,134},{11,10,747},{12,10,378},{142 +,10,97},{136,0,666},{135,0,1675},{6,0,655},{134,0,1600},{135,0,808},{133,10,1021 +},{4,11,28},{5,11,440},{7,11,248},{11,11,833},{140,11,344},{134,11,1654},{132,0, +280},{140,0,54},{4,0,421},{133,0,548},{132,10,153},{6,11,339},{135,11,923},{133, +11,853},{133,10,798},{132,10,587},{6,11,249},{7,11,1234},{139,11,573},{6,10,598} +,{7,10,42},{8,10,695},{10,10,212},{11,10,158},{14,10,196},{145,10,85},{7,0,249}, +{5,10,957},{133,10,1008},{4,10,129},{135,10,465},{6,0,254},{7,0,842},{7,0,1659}, +{9,0,109},{10,0,103},{7,10,908},{7,10,1201},{9,10,755},{11,10,906},{12,10,527},{ +146,10,7},{5,0,262},{136,10,450},{144,0,1},{10,11,201},{142,11,319},{7,11,49},{7 +,11,392},{8,11,20},{8,11,172},{8,11,690},{9,11,383},{9,11,845},{10,11,48},{11,11 +,293},{11,11,832},{11,11,920},{141,11,221},{5,11,858},{133,11,992},{134,0,805},{ +139,10,1003},{6,0,1630},{134,11,307},{7,11,1512},{135,11,1794},{6,11,268},{137, +11,62},{135,10,1868},{133,0,671},{4,0,989},{8,0,972},{136,0,998},{132,11,423},{ +132,0,889},{135,0,1382},{135,0,1910},{7,10,965},{7,10,1460},{135,10,1604},{4,0, +627},{5,0,775},{138,11,106},{134,11,348},{7,0,202},{11,0,362},{11,0,948},{140,0, +388},{138,11,771},{6,11,613},{136,11,223},{6,0,560},{7,0,451},{8,0,389},{12,0, +490},{13,0,16},{13,0,215},{13,0,351},{18,0,132},{147,0,125},{135,0,841},{136,0, +566},{136,0,938},{132,11,670},{5,0,912},{6,0,1695},{140,11,55},{9,11,40},{139,11 +,136},{7,0,1361},{7,10,982},{10,10,32},{143,10,56},{11,11,259},{140,11,270},{5,0 +,236},{6,0,572},{8,0,492},{11,0,618},{144,0,56},{8,11,572},{9,11,310},{9,11,682} +,{137,11,698},{134,0,1854},{5,0,190},{136,0,318},{133,10,435},{135,0,1376},{4,11 +,296},{6,11,352},{7,11,401},{7,11,1410},{7,11,1594},{7,11,1674},{8,11,63},{8,11, +660},{137,11,74},{7,0,349},{5,10,85},{6,10,419},{7,10,305},{7,10,361},{7,10,1337 +},{8,10,71},{140,10,519},{4,11,139},{4,11,388},{140,11,188},{6,0,1972},{6,0,2013 +},{8,0,951},{10,0,947},{10,0,974},{10,0,1018},{142,0,476},{140,10,688},{135,10, +740},{5,10,691},{7,10,345},{9,10,94},{140,10,169},{9,0,344},{5,10,183},{6,10,582 +},{10,10,679},{140,10,435},{135,10,511},{132,0,850},{8,11,441},{10,11,314},{143, +11,3},{7,10,1993},{136,10,684},{4,11,747},{6,11,290},{6,10,583},{7,11,649},{7,11 +,1479},{135,11,1583},{133,11,232},{133,10,704},{134,0,910},{4,10,179},{5,10,198} +,{133,10,697},{7,10,347},{7,10,971},{8,10,181},{138,10,711},{136,11,525},{14,0, +19},{14,0,28},{144,0,29},{7,0,85},{7,0,247},{8,0,585},{138,0,163},{4,0,487},{7, +11,472},{7,11,1801},{10,11,748},{141,11,458},{4,10,243},{5,10,203},{7,10,19},{7, +10,71},{7,10,113},{10,10,405},{11,10,357},{142,10,240},{7,10,1450},{139,10,99},{ +132,11,425},{138,0,145},{147,0,83},{6,10,492},{137,11,247},{4,0,1013},{134,0, +2033},{5,10,134},{6,10,408},{6,10,495},{135,10,1593},{135,0,1922},{134,11,1768}, +{4,0,124},{10,0,457},{11,0,121},{11,0,169},{11,0,870},{11,0,874},{12,0,214},{14, +0,187},{143,0,77},{5,0,557},{135,0,1457},{139,0,66},{5,11,943},{6,11,1779},{142, +10,4},{4,10,248},{4,10,665},{7,10,137},{137,10,349},{7,0,1193},{5,11,245},{6,11, +576},{7,11,582},{136,11,225},{144,0,82},{7,10,1270},{139,10,612},{5,0,454},{10,0 +,352},{138,11,352},{18,0,57},{5,10,371},{135,10,563},{135,0,1333},{6,0,107},{7,0 +,638},{7,0,1632},{9,0,396},{134,11,610},{5,0,370},{134,0,1756},{4,10,374},{7,10, +547},{7,10,1700},{7,10,1833},{139,10,858},{133,0,204},{6,0,1305},{9,10,311},{141 +,10,42},{5,0,970},{134,0,1706},{6,10,1647},{7,10,1552},{7,10,2010},{9,10,494},{ +137,10,509},{13,11,455},{15,11,99},{15,11,129},{144,11,68},{135,0,3},{4,0,35},{5 +,0,121},{5,0,483},{5,0,685},{6,0,489},{6,0,782},{6,0,1032},{7,0,1204},{136,0,394 +},{4,0,921},{133,0,1007},{8,11,360},{138,11,63},{135,0,1696},{134,0,1519},{132, +11,443},{135,11,944},{6,10,123},{7,10,214},{9,10,728},{10,10,157},{11,10,346},{ +11,10,662},{143,10,106},{137,0,981},{135,10,1435},{134,0,1072},{132,0,712},{134, +0,1629},{134,0,728},{4,11,298},{137,11,483},{6,0,1177},{6,0,1271},{5,11,164},{7, +11,121},{142,11,189},{7,0,1608},{4,10,707},{5,10,588},{6,10,393},{13,10,106},{18 +,10,49},{147,10,41},{23,0,16},{151,11,16},{6,10,211},{7,10,1690},{11,10,486},{ +140,10,369},{133,0,485},{19,11,15},{149,11,27},{4,11,172},{9,11,611},{10,11,436} +,{12,11,673},{141,11,255},{5,11,844},{10,11,484},{11,11,754},{12,11,457},{14,11, +171},{14,11,389},{146,11,153},{4,0,285},{5,0,27},{5,0,317},{6,0,301},{7,0,7},{8, +0,153},{10,0,766},{11,0,468},{12,0,467},{141,0,143},{134,0,1462},{9,11,263},{10, +11,147},{138,11,492},{133,11,537},{6,0,1945},{6,0,1986},{6,0,1991},{134,0,2038}, +{134,10,219},{137,11,842},{14,0,52},{17,0,50},{5,10,582},{6,10,1646},{7,10,99},{ +7,10,1962},{7,10,1986},{8,10,515},{8,10,773},{9,10,23},{9,10,491},{12,10,620},{ +142,10,93},{138,11,97},{20,0,21},{20,0,44},{133,10,851},{136,0,819},{139,0,917}, +{5,11,230},{5,11,392},{6,11,420},{8,10,762},{8,10,812},{9,11,568},{9,10,910},{ +140,11,612},{135,0,784},{15,0,135},{143,11,135},{10,0,454},{140,0,324},{4,11,0}, +{5,11,41},{7,11,1459},{7,11,1469},{7,11,1618},{7,11,1859},{9,11,549},{139,11,905 +},{4,10,98},{7,10,1365},{9,10,422},{9,10,670},{10,10,775},{11,10,210},{13,10,26} +,{13,10,457},{141,10,476},{6,0,1719},{6,0,1735},{7,0,2016},{7,0,2020},{8,0,837}, +{137,0,852},{133,11,696},{135,0,852},{132,0,952},{134,10,1730},{132,11,771},{138 +,0,568},{137,0,448},{139,0,146},{8,0,67},{138,0,419},{133,11,921},{137,10,147},{ +134,0,1826},{10,0,657},{14,0,297},{142,0,361},{6,0,666},{6,0,767},{134,0,1542},{ +139,0,729},{6,11,180},{7,11,1137},{8,11,751},{139,11,805},{4,11,183},{7,11,271}, +{11,11,824},{11,11,952},{13,11,278},{13,11,339},{13,11,482},{14,11,424},{148,11, +99},{4,0,669},{5,11,477},{5,11,596},{6,11,505},{7,11,1221},{11,11,907},{12,11, +209},{141,11,214},{135,11,1215},{5,0,402},{6,10,30},{11,10,56},{139,10,305},{7, +11,564},{142,11,168},{139,0,152},{7,0,912},{135,10,1614},{4,10,150},{5,10,303},{ +134,10,327},{7,0,320},{8,0,51},{9,0,868},{10,0,833},{12,0,481},{12,0,570},{148,0 +,106},{132,0,445},{7,11,274},{11,11,263},{11,11,479},{11,11,507},{140,11,277},{ +10,0,555},{11,0,308},{19,0,95},{6,11,1645},{8,10,192},{10,10,78},{141,10,359},{ +135,10,786},{6,11,92},{6,11,188},{7,11,1269},{7,11,1524},{7,11,1876},{10,11,228} +,{139,11,1020},{4,11,459},{133,11,966},{11,0,386},{6,10,1638},{7,10,79},{7,10, +496},{9,10,138},{10,10,336},{12,10,412},{12,10,440},{142,10,305},{133,0,239},{7, +0,83},{7,0,1990},{8,0,130},{139,0,720},{138,11,709},{4,0,143},{5,0,550},{133,0, +752},{5,0,123},{6,0,530},{7,0,348},{135,0,1419},{135,0,2024},{6,11,18},{7,11,179 +},{7,11,721},{7,11,932},{8,11,548},{8,11,757},{9,11,54},{9,11,65},{9,11,532},{9, +11,844},{10,11,113},{10,11,117},{10,11,236},{10,11,315},{10,11,430},{10,11,798}, +{11,11,153},{11,11,351},{11,11,375},{12,11,78},{12,11,151},{12,11,392},{14,11, +248},{143,11,23},{7,10,204},{7,10,415},{8,10,42},{10,10,85},{139,10,564},{134,0, +958},{133,11,965},{132,0,210},{135,11,1429},{138,11,480},{134,11,182},{139,11, +345},{10,11,65},{10,11,488},{138,11,497},{4,10,3},{5,10,247},{5,10,644},{7,10, +744},{7,10,1207},{7,10,1225},{7,10,1909},{146,10,147},{132,0,430},{5,10,285},{9, +10,67},{13,10,473},{143,10,82},{144,11,16},{7,11,1162},{9,11,588},{10,11,260},{ +151,10,8},{133,0,213},{138,0,7},{135,0,801},{134,11,1786},{135,11,308},{6,0,936} +,{134,0,1289},{133,0,108},{132,0,885},{133,0,219},{139,0,587},{4,0,193},{5,0,916 +},{6,0,1041},{7,0,364},{10,0,398},{10,0,726},{11,0,317},{11,0,626},{12,0,142},{ +12,0,288},{12,0,678},{13,0,313},{15,0,113},{146,0,114},{135,0,1165},{6,0,241},{9 +,0,342},{10,0,729},{11,0,284},{11,0,445},{11,0,651},{11,0,863},{13,0,398},{146,0 +,99},{7,0,907},{136,0,832},{9,0,303},{4,10,29},{6,10,532},{7,10,1628},{7,10,1648 +},{9,10,350},{10,10,433},{11,10,97},{11,10,557},{11,10,745},{12,10,289},{12,10, +335},{12,10,348},{12,10,606},{13,10,116},{13,10,233},{13,10,466},{14,10,181},{14 +,10,209},{14,10,232},{14,10,236},{14,10,300},{16,10,41},{148,10,97},{7,11,423},{ +7,10,1692},{136,11,588},{6,0,931},{134,0,1454},{5,10,501},{7,10,1704},{9,10,553} +,{11,10,520},{12,10,557},{141,10,249},{136,11,287},{4,0,562},{9,0,254},{139,0, +879},{132,0,786},{14,11,32},{18,11,85},{20,11,2},{152,11,16},{135,0,1294},{7,11, +723},{135,11,1135},{6,0,216},{7,0,901},{7,0,1343},{8,0,493},{134,11,403},{7,11, +719},{8,11,809},{136,11,834},{5,11,210},{6,11,213},{7,11,60},{10,11,364},{139,11 +,135},{7,0,341},{11,0,219},{5,11,607},{8,11,326},{136,11,490},{4,11,701},{5,11, +472},{5,11,639},{7,11,1249},{9,11,758},{139,11,896},{135,11,380},{135,11,1947},{ +139,0,130},{135,0,1734},{10,0,115},{11,0,420},{12,0,154},{13,0,404},{14,0,346},{ +143,0,54},{134,10,129},{4,11,386},{7,11,41},{8,11,405},{9,11,497},{11,11,110},{ +11,11,360},{15,11,37},{144,11,84},{141,11,282},{5,11,46},{7,11,1452},{7,11,1480} +,{8,11,634},{140,11,472},{4,11,524},{136,11,810},{10,11,238},{141,11,33},{133,0, +604},{5,0,1011},{136,0,701},{8,0,856},{8,0,858},{8,0,879},{12,0,702},{142,0,447} +,{4,0,54},{5,0,666},{7,0,1039},{7,0,1130},{9,0,195},{138,0,302},{4,10,25},{5,10, +60},{6,10,504},{7,10,614},{7,10,1155},{140,10,0},{7,10,1248},{11,10,621},{139,10 +,702},{133,11,997},{137,10,321},{134,0,1669},{134,0,1791},{4,10,379},{135,10, +1397},{138,11,372},{5,11,782},{5,11,829},{134,11,1738},{135,0,1228},{4,10,118},{ +6,10,274},{6,10,361},{7,10,75},{141,10,441},{132,0,623},{9,11,279},{10,11,407},{ +14,11,84},{150,11,18},{137,10,841},{135,0,798},{140,10,693},{5,10,314},{6,10,221 +},{7,10,419},{10,10,650},{11,10,396},{12,10,156},{13,10,369},{14,10,333},{145,10 +,47},{135,11,1372},{7,0,122},{9,0,259},{10,0,84},{11,0,470},{12,0,541},{141,0, +379},{134,0,837},{8,0,1013},{4,11,78},{5,11,96},{5,11,182},{7,11,1724},{7,11, +1825},{10,11,394},{10,11,471},{11,11,532},{14,11,340},{145,11,88},{134,0,577},{ +135,11,1964},{132,10,913},{134,0,460},{8,0,891},{10,0,901},{10,0,919},{10,0,932} +,{12,0,715},{12,0,728},{12,0,777},{14,0,457},{144,0,103},{5,0,82},{5,0,131},{7,0 +,1755},{8,0,31},{9,0,168},{9,0,764},{139,0,869},{136,10,475},{6,0,605},{5,10, +1016},{9,11,601},{9,11,619},{10,11,505},{10,11,732},{11,11,355},{140,11,139},{7, +10,602},{8,10,179},{10,10,781},{140,10,126},{134,0,1246},{6,10,329},{138,10,111} +,{6,11,215},{7,11,1028},{7,11,1473},{7,11,1721},{9,11,424},{138,11,779},{5,0,278 +},{137,0,68},{6,0,932},{6,0,1084},{144,0,86},{4,0,163},{5,0,201},{5,0,307},{5,0, +310},{6,0,335},{7,0,284},{7,0,1660},{136,0,165},{136,0,781},{134,0,707},{6,0,33} +,{135,0,1244},{5,10,821},{6,11,67},{6,10,1687},{7,11,258},{7,11,1630},{9,11,354} +,{9,11,675},{10,11,830},{14,11,80},{145,11,80},{6,11,141},{7,11,225},{9,11,59},{ +9,11,607},{10,11,312},{11,11,687},{12,11,555},{13,11,373},{13,11,494},{148,11,58 +},{134,0,1113},{9,0,388},{5,10,71},{7,10,1407},{9,10,704},{10,10,261},{10,10,619 +},{11,10,547},{11,10,619},{143,10,157},{7,0,1953},{136,0,720},{138,0,203},{7,10, +2008},{9,10,337},{138,10,517},{6,0,326},{7,0,677},{137,0,425},{139,11,81},{7,0, +1316},{7,0,1412},{7,0,1839},{9,0,589},{11,0,241},{11,0,676},{11,0,811},{11,0,891 +},{12,0,140},{12,0,346},{12,0,479},{13,0,140},{13,0,381},{14,0,188},{18,0,30},{ +148,0,108},{5,0,416},{6,10,86},{6,10,603},{7,10,292},{7,10,561},{8,10,257},{8,10 +,382},{9,10,721},{9,10,778},{11,10,581},{140,10,466},{4,10,486},{133,10,491},{ +134,0,1300},{132,10,72},{7,0,847},{6,10,265},{7,11,430},{139,11,46},{5,11,602},{ +6,11,106},{7,11,1786},{7,11,1821},{7,11,2018},{9,11,418},{137,11,763},{5,0,358}, +{7,0,535},{7,0,1184},{10,0,662},{13,0,212},{13,0,304},{13,0,333},{145,0,98},{5, +11,65},{6,11,416},{7,11,1720},{7,11,1924},{8,11,677},{10,11,109},{11,11,14},{11, +11,70},{11,11,569},{11,11,735},{15,11,153},{148,11,80},{6,0,1823},{8,0,839},{8,0 +,852},{8,0,903},{10,0,940},{12,0,707},{140,0,775},{135,11,1229},{6,0,1522},{140, +0,654},{136,11,595},{139,0,163},{141,0,314},{132,0,978},{4,0,601},{6,0,2035},{ +137,10,234},{5,10,815},{6,10,1688},{134,10,1755},{133,0,946},{136,0,434},{6,10, +197},{136,10,205},{7,0,411},{7,0,590},{8,0,631},{9,0,323},{10,0,355},{11,0,491}, +{12,0,143},{12,0,402},{13,0,73},{14,0,408},{15,0,107},{146,0,71},{7,0,1467},{8,0 +,328},{10,0,544},{11,0,955},{12,0,13},{13,0,320},{145,0,83},{142,0,410},{11,0, +511},{13,0,394},{14,0,298},{14,0,318},{146,0,103},{6,10,452},{7,10,312},{138,10, +219},{138,10,589},{4,10,333},{9,10,176},{12,10,353},{141,10,187},{135,11,329},{ +132,11,469},{5,0,835},{134,0,483},{134,11,1743},{5,11,929},{6,11,340},{8,11,376} +,{136,11,807},{134,10,1685},{132,0,677},{5,11,218},{7,11,1610},{138,11,83},{5,11 +,571},{135,11,1842},{132,11,455},{137,0,70},{135,0,1405},{7,10,135},{8,10,7},{8, +10,62},{9,10,243},{10,10,658},{10,10,697},{11,10,456},{139,10,756},{9,10,395},{ +138,10,79},{137,0,108},{6,11,161},{7,11,372},{137,11,597},{132,11,349},{132,0, +777},{132,0,331},{135,10,631},{133,0,747},{6,11,432},{6,11,608},{139,11,322},{ +138,10,835},{5,11,468},{7,11,1809},{10,11,325},{11,11,856},{12,11,345},{143,11, +104},{133,11,223},{7,10,406},{7,10,459},{8,10,606},{139,10,726},{132,11,566},{ +142,0,68},{4,11,59},{135,11,1394},{6,11,436},{139,11,481},{4,11,48},{5,11,271},{ +135,11,953},{139,11,170},{5,11,610},{136,11,457},{133,11,755},{135,11,1217},{133 +,10,612},{132,11,197},{132,0,505},{4,10,372},{7,10,482},{8,10,158},{9,10,602},{9 +,10,615},{10,10,245},{10,10,678},{10,10,744},{11,10,248},{139,10,806},{133,0,326 +},{5,10,854},{135,10,1991},{4,0,691},{146,0,16},{6,0,628},{9,0,35},{10,0,680},{ +10,0,793},{11,0,364},{13,0,357},{143,0,164},{138,0,654},{6,0,32},{7,0,385},{7,0, +757},{7,0,1916},{8,0,37},{8,0,94},{8,0,711},{9,0,541},{10,0,162},{10,0,795},{11, +0,989},{11,0,1010},{12,0,14},{142,0,308},{133,11,217},{6,0,152},{6,0,349},{6,0, +1682},{7,0,1252},{8,0,112},{9,0,435},{9,0,668},{10,0,290},{10,0,319},{10,0,815}, +{11,0,180},{11,0,837},{12,0,240},{13,0,152},{13,0,219},{142,0,158},{4,0,581},{ +134,0,726},{5,10,195},{135,10,1685},{6,0,126},{7,0,573},{8,0,397},{142,0,44},{ +138,0,89},{7,10,1997},{8,10,730},{139,10,1006},{134,0,1531},{134,0,1167},{5,0, +926},{12,0,203},{133,10,751},{4,11,165},{7,11,1398},{135,11,1829},{7,0,1232},{ +137,0,531},{135,10,821},{134,0,943},{133,0,670},{4,0,880},{139,0,231},{134,0, +1617},{135,0,1957},{5,11,9},{7,11,297},{7,11,966},{140,11,306},{6,0,975},{134,0, +985},{5,10,950},{5,10,994},{134,10,351},{12,11,21},{151,11,7},{5,11,146},{6,11, +411},{138,11,721},{7,0,242},{135,0,1942},{6,11,177},{135,11,467},{5,0,421},{7,10 +,47},{137,10,684},{5,0,834},{7,0,1202},{8,0,14},{9,0,481},{137,0,880},{138,0,465 +},{6,0,688},{9,0,834},{132,10,350},{132,0,855},{4,0,357},{6,0,172},{7,0,143},{ +137,0,413},{133,11,200},{132,0,590},{7,10,1812},{13,10,259},{13,10,356},{14,10, +242},{147,10,114},{133,10,967},{11,0,114},{4,10,473},{7,10,623},{8,10,808},{9,10 +,871},{9,10,893},{11,10,431},{12,10,112},{12,10,217},{12,10,243},{12,10,562},{12 +,10,663},{12,10,683},{13,10,141},{13,10,197},{13,10,227},{13,10,406},{13,10,487} +,{14,10,156},{14,10,203},{14,10,224},{14,10,256},{18,10,58},{150,10,0},{138,10, +286},{4,10,222},{7,10,286},{136,10,629},{5,0,169},{7,0,333},{136,0,45},{134,11, +481},{132,0,198},{4,0,24},{5,0,140},{5,0,185},{7,0,1500},{11,0,565},{11,0,838},{ +4,11,84},{7,11,1482},{10,11,76},{138,11,142},{133,0,585},{141,10,306},{133,11, +1015},{4,11,315},{5,11,507},{135,11,1370},{136,10,146},{6,0,691},{134,0,1503},{4 +,0,334},{133,0,593},{4,10,465},{135,10,1663},{142,11,173},{135,0,913},{12,0,116} +,{134,11,1722},{134,0,1360},{132,0,802},{8,11,222},{8,11,476},{9,11,238},{11,11, +516},{11,11,575},{15,11,109},{146,11,100},{6,0,308},{9,0,673},{7,10,138},{7,10, +517},{139,10,238},{132,0,709},{6,0,1876},{6,0,1895},{9,0,994},{9,0,1006},{12,0, +829},{12,0,888},{12,0,891},{146,0,185},{148,10,94},{4,0,228},{133,0,897},{7,0, +1840},{5,10,495},{7,10,834},{9,10,733},{139,10,378},{133,10,559},{6,10,21},{6,10 +,1737},{7,10,1444},{136,10,224},{4,0,608},{133,0,497},{6,11,40},{135,11,1781},{ +134,0,1573},{135,0,2039},{6,0,540},{136,0,136},{4,0,897},{5,0,786},{133,10,519}, +{6,0,1878},{6,0,1884},{9,0,938},{9,0,948},{9,0,955},{9,0,973},{9,0,1012},{12,0, +895},{12,0,927},{143,0,254},{134,0,1469},{133,0,999},{4,0,299},{135,0,1004},{4,0 +,745},{133,0,578},{136,11,574},{133,0,456},{134,0,1457},{7,0,1679},{132,10,402}, +{7,0,693},{8,0,180},{12,0,163},{8,10,323},{136,10,479},{11,10,580},{142,10,201}, +{5,10,59},{135,10,672},{132,11,354},{146,10,34},{4,0,755},{135,11,1558},{7,0, +1740},{146,0,48},{4,10,85},{135,10,549},{139,0,338},{133,10,94},{134,0,1091},{ +135,11,469},{12,0,695},{12,0,704},{20,0,113},{5,11,830},{14,11,338},{148,11,81}, +{135,0,1464},{6,10,11},{135,10,187},{135,0,975},{13,0,335},{132,10,522},{134,0, +1979},{5,11,496},{135,11,203},{4,10,52},{135,10,661},{7,0,1566},{8,0,269},{9,0, +212},{9,0,718},{14,0,15},{14,0,132},{142,0,227},{4,0,890},{5,0,805},{5,0,819},{5 +,0,961},{6,0,396},{6,0,1631},{6,0,1678},{7,0,1967},{7,0,2041},{9,0,630},{11,0,8} +,{11,0,1019},{12,0,176},{13,0,225},{14,0,292},{21,0,24},{4,10,383},{133,10,520}, +{134,11,547},{135,11,1748},{5,11,88},{137,11,239},{146,11,128},{7,11,650},{135, +11,1310},{4,10,281},{5,10,38},{7,10,194},{7,10,668},{7,10,1893},{137,10,397},{ +135,0,1815},{9,10,635},{139,10,559},{7,0,1505},{10,0,190},{10,0,634},{11,0,792}, +{12,0,358},{140,0,447},{5,0,0},{6,0,536},{7,0,604},{13,0,445},{145,0,126},{7,11, +1076},{9,11,80},{11,11,78},{11,11,421},{11,11,534},{140,11,545},{8,0,966},{10,0, +1023},{14,11,369},{146,11,72},{135,11,1641},{6,0,232},{6,0,412},{7,0,1074},{8,0, +9},{8,0,157},{8,0,786},{9,0,196},{9,0,352},{9,0,457},{10,0,337},{11,0,232},{11,0 +,877},{12,0,480},{140,0,546},{135,0,958},{4,0,382},{136,0,579},{4,0,212},{135,0, +1206},{4,11,497},{5,11,657},{135,11,1584},{132,0,681},{8,0,971},{138,0,965},{5, +10,448},{136,10,535},{14,0,16},{146,0,44},{11,0,584},{11,0,616},{14,0,275},{11, +11,584},{11,11,616},{142,11,275},{136,11,13},{7,10,610},{135,10,1501},{7,11,642} +,{8,11,250},{11,11,123},{11,11,137},{13,11,48},{142,11,95},{133,0,655},{17,0,67} +,{147,0,74},{134,0,751},{134,0,1967},{6,0,231},{136,0,423},{5,0,300},{138,0,1016 +},{4,10,319},{5,10,699},{138,10,673},{6,0,237},{7,0,611},{8,0,100},{9,0,416},{11 +,0,335},{12,0,173},{18,0,101},{6,10,336},{8,10,552},{9,10,285},{10,10,99},{139, +10,568},{134,0,1370},{7,10,1406},{9,10,218},{141,10,222},{133,10,256},{135,0, +1208},{14,11,213},{148,11,38},{6,0,1219},{135,11,1642},{13,0,417},{14,0,129},{ +143,0,15},{10,11,545},{140,11,301},{17,10,39},{148,10,36},{133,0,199},{4,11,904} +,{133,11,794},{12,0,427},{146,0,38},{134,0,949},{8,0,665},{135,10,634},{132,10, +618},{135,10,259},{132,10,339},{133,11,761},{141,10,169},{132,10,759},{5,0,688}, +{7,0,539},{135,0,712},{7,11,386},{138,11,713},{134,0,1186},{6,11,7},{6,11,35},{7 +,11,147},{7,11,1069},{7,11,1568},{7,11,1575},{7,11,1917},{8,11,43},{8,11,208},{9 +,11,128},{9,11,866},{10,11,20},{11,11,981},{147,11,33},{7,11,893},{8,10,482},{ +141,11,424},{6,0,312},{6,0,1715},{10,0,584},{11,0,546},{11,0,692},{12,0,259},{12 +,0,295},{13,0,46},{141,0,154},{5,10,336},{6,10,341},{6,10,478},{6,10,1763},{136, +10,386},{137,0,151},{132,0,588},{152,0,4},{6,11,322},{9,11,552},{11,11,274},{13, +11,209},{13,11,499},{14,11,85},{15,11,126},{145,11,70},{135,10,73},{4,0,231},{5, +0,61},{6,0,104},{7,0,729},{7,0,964},{7,0,1658},{140,0,414},{6,0,263},{138,0,757} +,{135,10,1971},{4,0,612},{133,0,561},{132,0,320},{135,10,1344},{8,11,83},{8,11, +817},{9,11,28},{9,11,29},{9,11,885},{10,11,387},{11,11,633},{11,11,740},{13,11, +235},{13,11,254},{15,11,143},{143,11,146},{5,10,396},{134,10,501},{140,11,49},{ +132,0,225},{4,10,929},{5,10,799},{8,10,46},{136,10,740},{4,0,405},{7,0,817},{14, +0,58},{17,0,37},{146,0,124},{133,0,974},{4,11,412},{133,11,581},{4,10,892},{133, +10,770},{4,0,996},{134,0,2026},{4,0,527},{5,0,235},{7,0,1239},{11,0,131},{140,0, +370},{9,0,16},{13,0,386},{135,11,421},{7,0,956},{7,0,1157},{7,0,1506},{7,0,1606} +,{7,0,1615},{7,0,1619},{7,0,1736},{7,0,1775},{8,0,590},{9,0,324},{9,0,736},{9,0, +774},{9,0,776},{9,0,784},{10,0,567},{10,0,708},{11,0,518},{11,0,613},{11,0,695}, +{11,0,716},{11,0,739},{11,0,770},{11,0,771},{11,0,848},{11,0,857},{11,0,931},{11 +,0,947},{12,0,326},{12,0,387},{12,0,484},{12,0,528},{12,0,552},{12,0,613},{13,0, +189},{13,0,256},{13,0,340},{13,0,432},{13,0,436},{13,0,440},{13,0,454},{14,0,174 +},{14,0,220},{14,0,284},{14,0,390},{145,0,121},{135,10,158},{9,0,137},{138,0,221 +},{4,11,110},{10,11,415},{10,11,597},{142,11,206},{141,11,496},{135,11,205},{151 +,10,25},{135,11,778},{7,11,1656},{7,10,2001},{9,11,369},{10,11,338},{10,11,490}, +{11,11,154},{11,11,545},{11,11,775},{13,11,77},{141,11,274},{4,11,444},{10,11, +146},{140,11,9},{7,0,390},{138,0,140},{135,0,1144},{134,0,464},{7,10,1461},{140, +10,91},{132,10,602},{4,11,283},{135,11,1194},{5,0,407},{11,0,204},{11,0,243},{11 +,0,489},{12,0,293},{19,0,37},{20,0,73},{150,0,38},{7,0,1218},{136,0,303},{5,0, +325},{8,0,5},{8,0,227},{9,0,105},{10,0,585},{12,0,614},{4,10,13},{5,10,567},{7, +10,1498},{9,10,124},{11,10,521},{140,10,405},{135,10,1006},{7,0,800},{10,0,12},{ +134,11,1720},{135,0,1783},{132,10,735},{138,10,812},{4,10,170},{135,10,323},{6,0 +,621},{13,0,504},{144,0,89},{5,10,304},{135,10,1403},{137,11,216},{6,0,920},{6,0 +,1104},{9,11,183},{139,11,286},{4,0,376},{133,10,742},{134,0,218},{8,0,641},{11, +0,388},{140,0,580},{7,0,454},{7,0,782},{8,0,768},{140,0,686},{137,11,33},{133,10 +,111},{144,0,0},{10,0,676},{140,0,462},{6,0,164},{136,11,735},{133,10,444},{150, +0,50},{7,11,1862},{12,11,491},{12,11,520},{13,11,383},{14,11,244},{146,11,12},{5 +,11,132},{9,11,486},{9,11,715},{10,11,458},{11,11,373},{11,11,668},{11,11,795},{ +11,11,897},{12,11,272},{12,11,424},{12,11,539},{12,11,558},{14,11,245},{14,11, +263},{14,11,264},{14,11,393},{142,11,403},{8,10,123},{15,10,6},{144,10,7},{6,0, +285},{8,0,654},{11,0,749},{12,0,190},{12,0,327},{13,0,120},{13,0,121},{13,0,327} +,{15,0,47},{146,0,40},{5,11,8},{6,11,89},{6,11,400},{7,11,1569},{7,11,1623},{7, +11,1850},{8,11,218},{8,11,422},{9,11,570},{138,11,626},{6,11,387},{7,11,882},{ +141,11,111},{6,0,343},{7,0,195},{9,0,226},{10,0,197},{10,0,575},{11,0,502},{11,0 +,899},{6,11,224},{7,11,877},{137,11,647},{5,10,937},{135,10,100},{135,11,790},{ +150,0,29},{147,0,8},{134,0,1812},{149,0,8},{135,11,394},{7,0,1125},{9,0,143},{11 +,0,61},{14,0,405},{150,0,21},{10,11,755},{147,11,29},{9,11,378},{141,11,162},{ +135,10,922},{5,10,619},{133,10,698},{134,0,1327},{6,0,1598},{137,0,575},{9,11, +569},{12,11,12},{12,11,81},{12,11,319},{13,11,69},{14,11,259},{16,11,87},{17,11, +1},{17,11,21},{17,11,24},{18,11,15},{18,11,56},{18,11,59},{18,11,127},{18,11,154 +},{19,11,19},{148,11,31},{6,0,895},{135,11,1231},{5,0,959},{7,11,124},{136,11,38 +},{5,11,261},{7,11,78},{7,11,199},{8,11,815},{9,11,126},{138,11,342},{5,10,917}, +{134,10,1659},{7,0,1759},{5,11,595},{135,11,1863},{136,0,173},{134,0,266},{142,0 +,261},{132,11,628},{5,10,251},{5,10,956},{8,10,268},{9,10,214},{146,10,142},{7, +11,266},{136,11,804},{135,11,208},{6,11,79},{7,11,1021},{135,11,1519},{11,11,704 +},{141,11,396},{5,10,346},{5,10,711},{136,10,390},{136,11,741},{134,11,376},{134 +,0,1427},{6,0,1033},{6,0,1217},{136,0,300},{133,10,624},{6,11,100},{7,11,244},{7 +,11,632},{7,11,1609},{8,11,178},{8,11,638},{141,11,58},{6,0,584},{5,10,783},{7, +10,1998},{135,10,2047},{5,0,427},{5,0,734},{7,0,478},{136,0,52},{7,0,239},{11,0, +217},{142,0,165},{134,0,1129},{6,0,168},{6,0,1734},{7,0,20},{7,0,1056},{8,0,732} +,{9,0,406},{9,0,911},{138,0,694},{132,10,594},{133,11,791},{7,11,686},{8,11,33}, +{8,11,238},{10,11,616},{11,11,467},{11,11,881},{13,11,217},{13,11,253},{142,11, +268},{137,11,476},{134,0,418},{133,0,613},{132,0,632},{132,11,447},{7,0,32},{7,0 +,984},{8,0,85},{8,0,709},{9,0,579},{9,0,847},{9,0,856},{10,0,799},{11,0,258},{11 +,0,1007},{12,0,331},{12,0,615},{13,0,188},{13,0,435},{14,0,8},{15,0,165},{16,0, +27},{20,0,40},{144,11,35},{4,11,128},{5,11,415},{6,11,462},{7,11,294},{7,11,578} +,{10,11,710},{139,11,86},{5,0,694},{136,0,909},{7,0,1109},{11,0,7},{5,10,37},{6, +10,39},{6,10,451},{7,10,218},{7,10,1166},{7,10,1687},{8,10,662},{144,10,2},{136, +11,587},{6,11,427},{7,11,1018},{138,11,692},{4,11,195},{6,10,508},{135,11,802},{ +4,0,167},{135,0,82},{5,0,62},{6,0,24},{6,0,534},{7,0,74},{7,0,678},{7,0,684},{7, +0,1043},{7,0,1072},{8,0,280},{8,0,541},{8,0,686},{9,0,258},{10,0,519},{11,0,252} +,{140,0,282},{138,0,33},{4,0,359},{133,11,738},{7,0,980},{9,0,328},{13,0,186},{ +13,0,364},{7,10,635},{7,10,796},{8,10,331},{9,10,330},{9,10,865},{10,10,119},{10 +,10,235},{11,10,111},{11,10,129},{11,10,240},{12,10,31},{12,10,66},{12,10,222},{ +12,10,269},{12,10,599},{12,10,684},{12,10,689},{12,10,691},{142,10,345},{137,10, +527},{6,0,596},{7,0,585},{135,10,702},{134,11,1683},{133,0,211},{6,0,145},{141,0 +,336},{134,0,1130},{7,0,873},{6,10,37},{7,10,1666},{8,10,195},{8,10,316},{9,10, +178},{9,10,276},{9,10,339},{9,10,536},{10,10,102},{10,10,362},{10,10,785},{11,10 +,55},{11,10,149},{11,10,773},{13,10,416},{13,10,419},{14,10,38},{14,10,41},{142, +10,210},{8,0,840},{136,0,841},{132,0,263},{5,11,3},{8,11,578},{9,11,118},{10,11, +705},{12,11,383},{141,11,279},{132,0,916},{133,11,229},{133,10,645},{15,0,155},{ +16,0,79},{8,11,102},{10,11,578},{10,11,672},{12,11,496},{13,11,408},{14,11,121}, +{145,11,106},{4,0,599},{5,0,592},{6,0,1634},{7,0,5},{7,0,55},{7,0,67},{7,0,97},{ +7,0,691},{7,0,979},{7,0,1600},{7,0,1697},{8,0,207},{8,0,214},{8,0,231},{8,0,294} +,{8,0,336},{8,0,428},{8,0,471},{8,0,622},{8,0,626},{8,0,679},{8,0,759},{8,0,829} +,{9,0,11},{9,0,246},{9,0,484},{9,0,573},{9,0,706},{9,0,762},{9,0,798},{9,0,855}, +{9,0,870},{9,0,912},{10,0,303},{10,0,335},{10,0,424},{10,0,461},{10,0,543},{10,0 +,759},{10,0,814},{11,0,59},{11,0,199},{11,0,235},{11,0,590},{11,0,631},{11,0,929 +},{11,0,963},{11,0,987},{12,0,114},{12,0,182},{12,0,226},{12,0,332},{12,0,439},{ +12,0,575},{12,0,598},{12,0,675},{13,0,8},{13,0,125},{13,0,194},{13,0,287},{14,0, +197},{14,0,383},{15,0,53},{17,0,63},{19,0,46},{19,0,98},{19,0,106},{148,0,85},{7 +,0,1356},{132,10,290},{6,10,70},{7,10,1292},{10,10,762},{139,10,288},{150,11,55} +,{4,0,593},{8,11,115},{8,11,350},{9,11,489},{10,11,128},{11,11,306},{12,11,373}, +{14,11,30},{17,11,79},{147,11,80},{135,11,1235},{134,0,1392},{4,11,230},{133,11, +702},{147,0,126},{7,10,131},{7,10,422},{8,10,210},{140,10,573},{134,0,1179},{139 +,11,435},{139,10,797},{134,11,1728},{4,0,162},{18,11,26},{19,11,42},{20,11,43},{ +21,11,0},{23,11,27},{152,11,14},{132,10,936},{6,0,765},{5,10,453},{134,10,441},{ +133,0,187},{135,0,1286},{6,0,635},{6,0,904},{6,0,1210},{134,0,1489},{4,0,215},{8 +,0,890},{9,0,38},{10,0,923},{11,0,23},{11,0,127},{139,0,796},{6,0,1165},{134,0, +1306},{7,0,716},{13,0,97},{141,0,251},{132,10,653},{136,0,657},{146,10,80},{5,11 +,622},{7,11,1032},{11,11,26},{11,11,213},{11,11,707},{12,11,380},{13,11,226},{ +141,11,355},{6,0,299},{5,11,70},{6,11,334},{9,11,171},{11,11,637},{12,11,202},{ +14,11,222},{145,11,42},{142,0,134},{4,11,23},{5,11,313},{5,11,1014},{6,11,50},{6 +,11,51},{7,11,142},{7,11,384},{9,11,783},{139,11,741},{4,11,141},{7,11,559},{8, +11,640},{9,11,460},{12,11,183},{141,11,488},{136,11,614},{7,10,1368},{8,10,232}, +{8,10,361},{10,10,682},{138,10,742},{137,10,534},{6,0,1082},{140,0,658},{137,10, +27},{135,0,2002},{142,10,12},{4,0,28},{5,0,440},{7,0,248},{11,0,833},{140,0,344} +,{7,10,736},{139,10,264},{134,10,1657},{134,0,1654},{138,0,531},{5,11,222},{9,11 +,140},{138,11,534},{6,0,634},{6,0,798},{134,0,840},{138,11,503},{135,10,127},{ +133,0,853},{5,11,154},{7,11,1491},{10,11,379},{138,11,485},{6,0,249},{7,0,1234}, +{139,0,573},{133,11,716},{7,11,1570},{140,11,542},{136,10,364},{138,0,527},{4,11 +,91},{5,11,388},{5,11,845},{6,11,206},{6,11,252},{6,11,365},{7,11,136},{7,11,531 +},{8,11,264},{136,11,621},{134,0,1419},{135,11,1441},{7,0,49},{7,0,392},{8,0,20} +,{8,0,172},{8,0,690},{9,0,383},{9,0,845},{10,0,48},{11,0,293},{11,0,832},{11,0, +920},{11,0,984},{141,0,221},{5,0,858},{133,0,992},{5,0,728},{137,10,792},{5,10, +909},{9,10,849},{138,10,805},{7,0,525},{7,0,1579},{8,0,497},{136,0,573},{6,0,268 +},{137,0,62},{135,11,576},{134,0,1201},{5,11,771},{5,11,863},{5,11,898},{6,11, +1632},{6,11,1644},{134,11,1780},{133,11,331},{7,0,193},{7,0,1105},{10,0,495},{7, +10,397},{8,10,124},{8,10,619},{9,10,305},{11,10,40},{12,10,349},{13,10,134},{13, +10,295},{14,10,155},{15,10,120},{146,10,105},{138,0,106},{6,0,859},{5,11,107},{7 +,11,201},{136,11,518},{6,11,446},{135,11,1817},{13,0,23},{4,10,262},{135,10,342} +,{133,10,641},{137,11,851},{6,0,925},{137,0,813},{132,11,504},{6,0,613},{136,0, +223},{4,10,99},{6,10,250},{6,10,346},{8,10,127},{138,10,81},{136,0,953},{132,10, +915},{139,11,892},{5,10,75},{9,10,517},{10,10,470},{12,10,155},{141,10,224},{4,0 +,666},{7,0,1017},{7,11,996},{138,11,390},{5,11,883},{133,11,975},{14,10,83},{142 +,11,83},{4,0,670},{5,11,922},{134,11,1707},{135,0,216},{9,0,40},{11,0,136},{135, +11,787},{5,10,954},{5,11,993},{7,11,515},{137,11,91},{139,0,259},{7,0,1114},{9,0 +,310},{9,0,682},{10,0,440},{13,0,40},{6,10,304},{8,10,418},{11,10,341},{139,10, +675},{14,0,296},{9,10,410},{139,10,425},{10,11,377},{12,11,363},{13,11,68},{13, +11,94},{14,11,108},{142,11,306},{7,0,1401},{135,0,1476},{4,0,296},{6,0,475},{7,0 +,401},{7,0,1410},{7,0,1594},{7,0,1674},{8,0,63},{8,0,660},{137,0,74},{4,0,139},{ +4,0,388},{140,0,188},{132,0,797},{132,11,766},{5,11,103},{7,11,921},{8,11,580},{ +8,11,593},{8,11,630},{138,11,28},{4,11,911},{5,11,867},{133,11,1013},{134,10,14} +,{134,0,1572},{134,10,1708},{21,0,39},{5,10,113},{6,10,243},{7,10,1865},{11,10, +161},{16,10,37},{145,10,99},{7,11,1563},{141,11,182},{5,11,135},{6,11,519},{7,11 +,1722},{10,11,271},{11,11,261},{145,11,54},{132,10,274},{134,0,1594},{4,11,300}, +{5,11,436},{135,11,484},{4,0,747},{6,0,290},{7,0,649},{7,0,1479},{135,0,1583},{ +133,11,535},{147,11,82},{133,0,232},{137,0,887},{135,10,166},{136,0,521},{4,0,14 +},{7,0,472},{7,0,1801},{10,0,748},{141,0,458},{134,0,741},{134,0,992},{16,0,111} +,{137,10,304},{4,0,425},{5,11,387},{7,11,557},{12,11,547},{142,11,86},{135,11, +1747},{5,10,654},{135,11,1489},{7,0,789},{4,11,6},{5,11,708},{136,11,75},{6,10, +273},{10,10,188},{13,10,377},{146,10,77},{6,0,1593},{4,11,303},{7,11,619},{10,11 +,547},{10,11,687},{11,11,122},{140,11,601},{134,0,1768},{135,10,410},{138,11,772 +},{11,0,233},{139,10,524},{5,0,943},{134,0,1779},{134,10,1785},{136,11,529},{132 +,0,955},{5,0,245},{6,0,576},{7,0,582},{136,0,225},{132,10,780},{142,0,241},{134, +0,1943},{4,11,106},{7,11,310},{7,11,1785},{10,11,690},{139,11,717},{134,0,1284}, +{5,11,890},{133,11,988},{6,11,626},{142,11,431},{10,11,706},{145,11,32},{137,11, +332},{132,11,698},{135,0,709},{5,10,948},{138,11,17},{136,0,554},{134,0,1564},{ +139,10,941},{132,0,443},{134,0,909},{134,11,84},{142,0,280},{4,10,532},{5,10,706 +},{135,10,662},{132,0,729},{5,10,837},{6,10,1651},{139,10,985},{135,10,1861},{4, +0,348},{152,11,3},{5,11,986},{6,11,130},{7,11,1582},{8,11,458},{10,11,101},{10, +11,318},{138,11,823},{134,0,758},{4,0,298},{137,0,848},{4,10,330},{7,10,933},{7, +10,2012},{136,10,292},{7,11,1644},{137,11,129},{6,0,1422},{9,0,829},{135,10,767} +,{5,0,164},{7,0,121},{142,0,189},{7,0,812},{7,0,1261},{7,0,1360},{9,0,632},{140, +0,352},{135,11,1788},{139,0,556},{135,11,997},{145,10,114},{4,0,172},{9,0,611},{ +10,0,436},{12,0,673},{13,0,255},{137,10,883},{11,0,530},{138,10,274},{133,0,844} +,{134,0,984},{13,0,232},{18,0,35},{4,10,703},{135,10,207},{132,10,571},{9,0,263} +,{10,0,147},{138,0,492},{7,11,1756},{137,11,98},{5,10,873},{5,10,960},{8,10,823} +,{137,10,881},{133,0,537},{132,0,859},{7,11,1046},{139,11,160},{137,0,842},{139, +10,283},{5,10,33},{6,10,470},{139,10,424},{6,11,45},{7,11,433},{8,11,129},{9,11, +21},{10,11,392},{11,11,79},{12,11,499},{13,11,199},{141,11,451},{135,0,1291},{ +135,10,1882},{7,11,558},{136,11,353},{134,0,1482},{5,0,230},{5,0,392},{6,0,420}, +{9,0,568},{140,0,612},{6,0,262},{7,10,90},{7,10,664},{7,10,830},{7,10,1380},{7, +10,2025},{8,11,81},{8,10,448},{8,10,828},{9,11,189},{9,11,201},{11,11,478},{11, +11,712},{141,11,338},{142,0,31},{5,11,353},{151,11,26},{132,0,753},{4,0,0},{5,0, +41},{7,0,1459},{7,0,1469},{7,0,1859},{9,0,549},{139,0,905},{9,10,417},{137,10, +493},{135,11,1113},{133,0,696},{141,11,448},{134,10,295},{132,0,834},{4,0,771},{ +5,10,1019},{6,11,25},{7,11,855},{7,11,1258},{144,11,32},{134,0,1076},{133,0,921} +,{133,0,674},{4,11,4},{7,11,1118},{7,11,1320},{7,11,1706},{8,11,277},{9,11,622}, +{10,11,9},{11,11,724},{12,11,350},{12,11,397},{13,11,28},{13,11,159},{15,11,89}, +{18,11,5},{19,11,9},{20,11,34},{150,11,47},{134,10,208},{6,0,444},{136,0,308},{6 +,0,180},{7,0,1137},{8,0,751},{139,0,805},{4,0,183},{7,0,271},{11,0,824},{11,0, +952},{13,0,278},{13,0,339},{13,0,482},{14,0,424},{148,0,99},{7,11,317},{135,11, +569},{4,0,19},{5,0,477},{5,0,596},{6,0,505},{7,0,1221},{11,0,907},{12,0,209},{ +141,0,214},{135,0,1215},{6,0,271},{7,0,398},{8,0,387},{10,0,344},{7,10,448},{7, +10,1629},{7,10,1813},{8,10,442},{9,10,710},{10,10,282},{138,10,722},{11,10,844}, +{12,10,104},{140,10,625},{134,11,255},{133,10,787},{134,0,1645},{11,11,956},{151 +,11,3},{6,0,92},{6,0,188},{7,0,209},{7,0,1269},{7,0,1524},{7,0,1876},{8,0,661},{ +10,0,42},{10,0,228},{11,0,58},{11,0,1020},{12,0,58},{12,0,118},{141,0,32},{4,0, +459},{133,0,966},{4,11,536},{7,11,1141},{10,11,723},{139,11,371},{140,0,330},{ +134,0,1557},{7,11,285},{135,11,876},{136,10,491},{135,11,560},{6,0,18},{7,0,179} +,{7,0,932},{8,0,548},{8,0,757},{9,0,54},{9,0,65},{9,0,532},{9,0,844},{10,0,113}, +{10,0,117},{10,0,315},{10,0,560},{10,0,622},{10,0,798},{11,0,153},{11,0,351},{11 +,0,375},{12,0,78},{12,0,151},{12,0,392},{12,0,666},{14,0,248},{143,0,23},{6,0, +1742},{132,11,690},{4,10,403},{5,10,441},{7,10,450},{10,10,840},{11,10,101},{12, +10,193},{141,10,430},{133,0,965},{134,0,182},{10,0,65},{10,0,488},{138,0,497},{ +135,11,1346},{6,0,973},{6,0,1158},{10,11,200},{19,11,2},{151,11,22},{4,11,190},{ +133,11,554},{133,10,679},{7,0,328},{137,10,326},{133,11,1001},{9,0,588},{138,0, +260},{133,11,446},{135,10,1128},{135,10,1796},{147,11,119},{134,0,1786},{6,0, +1328},{6,0,1985},{8,0,962},{138,0,1017},{135,0,308},{11,0,508},{4,10,574},{7,10, +350},{7,10,1024},{8,10,338},{9,10,677},{138,10,808},{138,11,752},{135,10,1081},{ +137,11,96},{7,10,1676},{135,10,2037},{136,0,588},{132,11,304},{133,0,614},{140,0 +,793},{136,0,287},{137,10,297},{141,10,37},{6,11,53},{6,11,199},{7,11,1408},{8, +11,32},{8,11,93},{9,11,437},{10,11,397},{10,11,629},{11,11,593},{11,11,763},{13, +11,326},{145,11,35},{134,11,105},{9,11,320},{10,11,506},{138,11,794},{5,11,114}, +{5,11,255},{141,11,285},{140,0,290},{7,11,2035},{8,11,19},{9,11,89},{138,11,831} +,{134,0,1136},{7,0,719},{8,0,796},{8,0,809},{8,0,834},{6,10,306},{7,10,1140},{7, +10,1340},{8,10,133},{138,10,449},{139,10,1011},{5,0,210},{6,0,213},{7,0,60},{10, +0,364},{139,0,135},{5,0,607},{8,0,326},{136,0,490},{138,11,176},{132,0,701},{5,0 +,472},{7,0,380},{137,0,758},{135,0,1947},{6,0,1079},{138,0,278},{138,11,391},{5, +10,329},{8,10,260},{139,11,156},{4,0,386},{7,0,41},{8,0,405},{8,0,728},{9,0,497} +,{11,0,110},{11,0,360},{15,0,37},{144,0,84},{5,0,46},{7,0,1452},{7,0,1480},{8,0, +634},{140,0,472},{136,0,961},{4,0,524},{136,0,810},{10,0,238},{141,0,33},{132,10 +,657},{152,10,7},{133,0,532},{5,0,997},{135,10,1665},{7,11,594},{7,11,851},{7,11 +,1858},{9,11,411},{9,11,574},{9,11,666},{9,11,737},{10,11,346},{10,11,712},{11, +11,246},{11,11,432},{11,11,517},{11,11,647},{11,11,679},{11,11,727},{12,11,304}, +{12,11,305},{12,11,323},{12,11,483},{12,11,572},{12,11,593},{12,11,602},{13,11, +95},{13,11,101},{13,11,171},{13,11,315},{13,11,378},{13,11,425},{13,11,475},{14, +11,63},{14,11,380},{14,11,384},{15,11,133},{18,11,112},{148,11,72},{5,11,955},{ +136,11,814},{134,0,1301},{5,10,66},{7,10,1896},{136,10,288},{133,11,56},{134,10, +1643},{6,0,1298},{148,11,100},{5,0,782},{5,0,829},{6,0,671},{6,0,1156},{6,0,1738 +},{137,11,621},{4,0,306},{5,0,570},{7,0,1347},{5,10,91},{5,10,648},{5,10,750},{5 +,10,781},{6,10,54},{6,10,112},{6,10,402},{6,10,1732},{7,10,315},{7,10,749},{7,10 +,1900},{9,10,78},{9,10,508},{10,10,611},{10,10,811},{11,10,510},{11,10,728},{13, +10,36},{14,10,39},{16,10,83},{17,10,124},{148,10,30},{8,10,570},{9,11,477},{141, +11,78},{4,11,639},{10,11,4},{10,10,322},{10,10,719},{11,10,407},{11,11,638},{12, +11,177},{148,11,57},{7,0,1823},{139,0,693},{7,0,759},{5,11,758},{8,10,125},{8,10 +,369},{8,10,524},{10,10,486},{11,10,13},{11,10,381},{11,10,736},{11,10,766},{11, +10,845},{13,10,114},{13,10,292},{142,10,47},{7,0,1932},{6,10,1684},{6,10,1731},{ +7,10,356},{8,10,54},{8,10,221},{9,10,225},{9,10,356},{10,10,77},{10,10,446},{10, +10,731},{12,10,404},{141,10,491},{135,11,552},{135,11,1112},{4,0,78},{5,0,96},{5 +,0,182},{6,0,1257},{7,0,1724},{7,0,1825},{10,0,394},{10,0,471},{11,0,532},{14,0, +340},{145,0,88},{139,11,328},{135,0,1964},{132,10,411},{4,10,80},{5,10,44},{137, +11,133},{5,11,110},{6,11,169},{6,11,1702},{7,11,400},{8,11,538},{9,11,184},{9,11 +,524},{140,11,218},{4,0,521},{5,10,299},{7,10,1083},{140,11,554},{6,11,133},{9, +11,353},{12,11,628},{146,11,79},{6,0,215},{7,0,584},{7,0,1028},{7,0,1473},{7,0, +1721},{9,0,424},{138,0,779},{7,0,857},{7,0,1209},{7,10,1713},{9,10,537},{10,10, +165},{12,10,219},{140,10,561},{4,10,219},{6,11,93},{7,11,1422},{7,10,1761},{7,11 +,1851},{8,11,673},{9,10,86},{9,11,529},{140,11,43},{137,11,371},{136,0,671},{5,0 +,328},{135,0,918},{132,0,529},{9,11,25},{10,11,467},{138,11,559},{4,11,335},{135 +,11,942},{134,0,716},{134,0,1509},{6,0,67},{7,0,258},{7,0,1630},{9,0,354},{9,0, +675},{10,0,830},{14,0,80},{17,0,80},{140,10,428},{134,0,1112},{6,0,141},{7,0,225 +},{9,0,59},{9,0,607},{10,0,312},{11,0,687},{12,0,555},{13,0,373},{13,0,494},{148 +,0,58},{133,10,514},{8,11,39},{10,11,773},{11,11,84},{12,11,205},{142,11,1},{8,0 +,783},{5,11,601},{133,11,870},{136,11,594},{4,10,55},{5,10,301},{6,10,571},{14, +10,49},{146,10,102},{132,11,181},{134,11,1652},{133,10,364},{4,11,97},{5,11,147} +,{6,11,286},{7,11,1362},{141,11,176},{4,10,76},{7,10,1550},{9,10,306},{9,10,430} +,{9,10,663},{10,10,683},{11,10,427},{11,10,753},{12,10,334},{12,10,442},{14,10, +258},{14,10,366},{143,10,131},{137,10,52},{6,0,955},{134,0,1498},{6,11,375},{7, +11,169},{7,11,254},{136,11,780},{7,0,430},{11,0,46},{14,0,343},{142,11,343},{135 +,0,1183},{5,0,602},{7,0,2018},{9,0,418},{9,0,803},{135,11,1447},{8,0,677},{135, +11,1044},{139,11,285},{4,10,656},{135,10,779},{135,10,144},{5,11,629},{135,11, +1549},{135,10,1373},{138,11,209},{7,10,554},{7,10,605},{141,10,10},{5,10,838},{5 +,10,841},{134,10,1649},{133,10,1012},{6,0,1357},{134,0,1380},{144,0,53},{6,0,590 +},{7,10,365},{7,10,1357},{7,10,1497},{8,10,154},{141,10,281},{133,10,340},{132, +11,420},{135,0,329},{147,11,32},{4,0,469},{10,11,429},{139,10,495},{8,10,261},{9 +,10,144},{9,10,466},{10,10,370},{12,10,470},{13,10,144},{142,10,348},{142,0,460} +,{4,11,325},{9,10,897},{138,11,125},{6,0,1743},{6,10,248},{9,10,546},{10,10,535} +,{11,10,681},{141,10,135},{4,0,990},{5,0,929},{6,0,340},{8,0,376},{8,0,807},{8,0 +,963},{8,0,980},{138,0,1007},{134,0,1603},{140,0,250},{4,11,714},{133,11,469},{ +134,10,567},{136,10,445},{5,0,218},{7,0,1610},{8,0,646},{10,0,83},{11,11,138},{ +140,11,40},{7,0,1512},{135,0,1794},{135,11,1216},{11,0,0},{16,0,78},{132,11,718} +,{133,0,571},{132,0,455},{134,0,1012},{5,11,124},{5,11,144},{6,11,548},{7,11,15} +,{7,11,153},{137,11,629},{142,11,10},{6,11,75},{7,11,1531},{8,11,416},{9,11,240} +,{9,11,275},{10,11,100},{11,11,658},{11,11,979},{12,11,86},{13,11,468},{14,11,66 +},{14,11,207},{15,11,20},{15,11,25},{144,11,58},{132,10,577},{5,11,141},{5,11, +915},{6,11,1783},{7,11,211},{7,11,698},{7,11,1353},{9,11,83},{9,11,281},{10,11, +376},{10,11,431},{11,11,543},{12,11,664},{13,11,280},{13,11,428},{14,11,61},{14, +11,128},{17,11,52},{145,11,81},{6,0,161},{7,0,372},{137,0,597},{132,0,349},{10, +11,702},{139,11,245},{134,0,524},{134,10,174},{6,0,432},{9,0,751},{139,0,322},{ +147,11,94},{4,11,338},{133,11,400},{5,0,468},{10,0,325},{11,0,856},{12,0,345},{ +143,0,104},{133,0,223},{132,0,566},{4,11,221},{5,11,659},{5,11,989},{7,11,697},{ +7,11,1211},{138,11,284},{135,11,1070},{4,0,59},{135,0,1394},{6,0,436},{11,0,481} +,{5,10,878},{133,10,972},{4,0,48},{5,0,271},{135,0,953},{5,0,610},{136,0,457},{4 +,0,773},{5,0,618},{137,0,756},{133,0,755},{135,0,1217},{138,11,507},{132,10,351} +,{132,0,197},{143,11,78},{4,11,188},{7,11,805},{11,11,276},{142,11,293},{5,11, +884},{139,11,991},{132,10,286},{10,0,259},{10,0,428},{7,10,438},{7,10,627},{7,10 +,1516},{8,10,40},{9,10,56},{9,10,294},{11,10,969},{11,10,995},{146,10,148},{4,0, +356},{5,0,217},{5,0,492},{5,0,656},{8,0,544},{136,11,544},{5,0,259},{6,0,1230},{ +7,0,414},{7,0,854},{142,0,107},{132,0,1007},{15,0,14},{144,0,5},{6,0,1580},{132, +10,738},{132,11,596},{132,0,673},{133,10,866},{6,0,1843},{135,11,1847},{4,0,165} +,{7,0,1398},{135,0,1829},{135,11,1634},{147,11,65},{6,0,885},{6,0,1009},{137,0, +809},{133,10,116},{132,10,457},{136,11,770},{9,0,498},{12,0,181},{10,11,361},{ +142,11,316},{134,11,595},{5,0,9},{7,0,297},{7,0,966},{140,0,306},{4,11,89},{5,11 +,489},{6,11,315},{7,11,553},{7,11,1745},{138,11,243},{134,0,1487},{132,0,437},{5 +,0,146},{6,0,411},{138,0,721},{5,10,527},{6,10,189},{135,10,859},{11,10,104},{11 +,10,554},{15,10,60},{143,10,125},{6,11,1658},{9,11,3},{10,11,154},{11,11,641},{ +13,11,85},{13,11,201},{141,11,346},{6,0,177},{135,0,467},{134,0,1377},{134,10, +116},{136,11,645},{4,11,166},{5,11,505},{6,11,1670},{137,11,110},{133,10,487},{4 +,10,86},{5,10,667},{5,10,753},{6,10,316},{6,10,455},{135,10,946},{133,0,200},{ +132,0,959},{6,0,1928},{134,0,1957},{139,11,203},{150,10,45},{4,10,79},{7,10,1773 +},{10,10,450},{11,10,589},{13,10,332},{13,10,493},{14,10,183},{14,10,334},{14,10 +,362},{14,10,368},{14,10,376},{14,10,379},{19,10,90},{19,10,103},{19,10,127},{ +148,10,90},{6,0,1435},{135,11,1275},{134,0,481},{7,11,445},{8,11,307},{8,11,704} +,{10,11,41},{10,11,439},{11,11,237},{11,11,622},{140,11,201},{135,11,869},{4,0, +84},{7,0,1482},{10,0,76},{138,0,142},{11,11,277},{144,11,14},{135,11,1977},{4,11 +,189},{5,11,713},{136,11,57},{133,0,1015},{138,11,371},{4,0,315},{5,0,507},{135, +0,1370},{4,11,552},{142,10,381},{9,0,759},{16,0,31},{16,0,39},{16,0,75},{18,0,24 +},{20,0,42},{152,0,1},{134,0,712},{134,0,1722},{133,10,663},{133,10,846},{8,0, +222},{8,0,476},{9,0,238},{11,0,516},{11,0,575},{15,0,109},{146,0,100},{7,0,1402} +,{7,0,1414},{12,0,456},{5,10,378},{8,10,465},{9,10,286},{10,10,185},{10,10,562}, +{10,10,635},{11,10,31},{11,10,393},{13,10,312},{18,10,65},{18,10,96},{147,10,89} +,{4,0,986},{6,0,1958},{6,0,2032},{8,0,934},{138,0,985},{7,10,1880},{9,10,680},{ +139,10,798},{134,10,1770},{145,11,49},{132,11,614},{132,10,648},{5,10,945},{6,10 +,1656},{6,10,1787},{7,10,167},{8,10,824},{9,10,391},{10,10,375},{139,10,185},{ +138,11,661},{7,0,1273},{135,11,1945},{7,0,706},{7,0,1058},{138,0,538},{7,10,1645 +},{8,10,352},{137,10,249},{132,10,152},{11,0,92},{11,0,196},{11,0,409},{11,0,450 +},{11,0,666},{11,0,777},{12,0,262},{13,0,385},{13,0,393},{15,0,115},{16,0,45},{ +145,0,82},{133,10,1006},{6,0,40},{135,0,1781},{9,11,614},{139,11,327},{5,10,420} +,{135,10,1449},{135,0,431},{10,0,97},{135,10,832},{6,0,423},{7,0,665},{135,0, +1210},{7,0,237},{8,0,664},{9,0,42},{9,0,266},{9,0,380},{9,0,645},{10,0,177},{138 +,0,276},{7,0,264},{133,10,351},{8,0,213},{5,10,40},{7,10,598},{7,10,1638},{9,10, +166},{9,10,640},{9,10,685},{9,10,773},{11,10,215},{13,10,65},{14,10,172},{14,10, +317},{145,10,6},{5,11,84},{134,11,163},{8,10,60},{9,10,343},{139,10,769},{137,0, +455},{133,11,410},{8,0,906},{12,0,700},{12,0,706},{140,0,729},{21,11,33},{150,11 +,40},{7,10,1951},{8,10,765},{8,10,772},{140,10,671},{7,10,108},{8,10,219},{8,10, +388},{9,10,639},{9,10,775},{11,10,275},{140,10,464},{5,11,322},{7,11,1941},{8,11 +,186},{9,11,262},{10,11,187},{14,11,208},{146,11,130},{139,0,624},{8,0,574},{5, +11,227},{140,11,29},{7,11,1546},{11,11,299},{142,11,407},{5,10,15},{6,10,56},{7, +10,1758},{8,10,500},{9,10,730},{11,10,331},{13,10,150},{142,10,282},{7,11,1395}, +{8,11,486},{9,11,236},{9,11,878},{10,11,218},{11,11,95},{19,11,17},{147,11,31},{ +135,11,2043},{4,0,354},{146,11,4},{140,11,80},{135,0,1558},{134,10,1886},{5,10, +205},{6,10,438},{137,10,711},{133,11,522},{133,10,534},{7,0,235},{7,0,1475},{15, +0,68},{146,0,120},{137,10,691},{4,0,942},{6,0,1813},{8,0,917},{10,0,884},{12,0, +696},{12,0,717},{12,0,723},{12,0,738},{12,0,749},{12,0,780},{16,0,97},{146,0,169 +},{6,10,443},{8,11,562},{9,10,237},{9,10,571},{9,10,695},{10,10,139},{11,10,715} +,{12,10,417},{141,10,421},{135,0,957},{133,0,830},{134,11,1771},{146,0,23},{5,0, +496},{6,0,694},{7,0,203},{7,11,1190},{137,11,620},{137,11,132},{6,0,547},{134,0, +1549},{8,11,258},{9,11,208},{137,11,359},{4,0,864},{5,0,88},{137,0,239},{135,11, +493},{4,11,317},{135,11,1279},{132,11,477},{4,10,578},{5,11,63},{133,11,509},{7, +0,650},{135,0,1310},{7,0,1076},{9,0,80},{11,0,78},{11,0,421},{11,0,534},{140,0, +545},{132,11,288},{12,0,553},{14,0,118},{133,10,923},{7,0,274},{11,0,479},{139,0 +,507},{8,11,89},{8,11,620},{9,11,49},{10,11,774},{11,11,628},{12,11,322},{143,11 +,124},{4,0,497},{135,0,1584},{7,0,261},{7,0,1115},{7,0,1354},{7,0,1404},{7,0, +1588},{7,0,1705},{7,0,1902},{9,0,465},{10,0,248},{10,0,349},{10,0,647},{11,0,527 +},{11,0,660},{11,0,669},{12,0,529},{13,0,305},{132,10,924},{133,10,665},{136,0, +13},{6,0,791},{138,11,120},{7,0,642},{8,0,250},{11,0,123},{11,0,137},{13,0,48},{ +142,0,95},{4,10,265},{7,10,807},{135,10,950},{5,10,93},{140,10,267},{135,0,1429} +,{4,0,949},{10,0,885},{10,0,891},{10,0,900},{10,0,939},{12,0,760},{142,0,449},{ +139,11,366},{132,0,818},{134,11,85},{135,10,994},{7,0,330},{5,10,233},{5,10,320} +,{6,10,140},{136,10,295},{4,0,1004},{8,0,982},{136,0,993},{133,10,978},{4,10,905 +},{6,10,1701},{137,10,843},{10,0,545},{140,0,301},{6,0,947},{134,0,1062},{134,0, +1188},{4,0,904},{5,0,794},{152,10,6},{134,0,1372},{135,11,608},{5,11,279},{6,11, +235},{7,11,468},{8,11,446},{9,11,637},{10,11,717},{11,11,738},{140,11,514},{132, +10,509},{5,11,17},{6,11,371},{137,11,528},{132,0,693},{4,11,115},{5,11,669},{6, +11,407},{8,11,311},{11,11,10},{141,11,5},{11,0,377},{7,10,273},{137,11,381},{135 +,0,695},{7,0,386},{138,0,713},{135,10,1041},{134,0,1291},{6,0,7},{6,0,35},{7,0, +147},{7,0,1069},{7,0,1568},{7,0,1575},{7,0,1917},{8,0,43},{8,0,208},{9,0,128},{9 +,0,866},{10,0,20},{11,0,981},{147,0,33},{7,0,893},{141,0,424},{139,10,234},{150, +11,56},{5,11,779},{5,11,807},{6,11,1655},{134,11,1676},{5,10,802},{7,10,2021},{ +136,10,805},{4,11,196},{5,10,167},{5,11,558},{5,10,899},{5,11,949},{6,10,410},{ +137,10,777},{137,10,789},{134,10,1705},{8,0,904},{140,0,787},{6,0,322},{9,0,552} +,{11,0,274},{13,0,209},{13,0,499},{14,0,85},{15,0,126},{145,0,70},{135,10,10},{5 +,10,11},{6,10,117},{6,10,485},{7,10,1133},{9,10,582},{9,10,594},{11,10,21},{11, +10,818},{12,10,535},{141,10,86},{4,10,264},{7,10,1067},{8,10,204},{8,10,385},{ +139,10,953},{132,11,752},{138,10,56},{133,10,470},{6,0,1808},{8,0,83},{8,0,742}, +{8,0,817},{9,0,28},{9,0,29},{9,0,885},{10,0,387},{11,0,633},{11,0,740},{13,0,235 +},{13,0,254},{15,0,143},{143,0,146},{140,0,49},{134,0,1832},{4,11,227},{5,11,159 +},{5,11,409},{7,11,80},{10,11,294},{10,11,479},{12,11,418},{14,11,50},{14,11,249 +},{142,11,295},{7,11,1470},{8,11,66},{8,11,137},{8,11,761},{9,11,638},{11,11,80} +,{11,11,212},{11,11,368},{11,11,418},{12,11,8},{13,11,15},{16,11,61},{17,11,59}, +{19,11,28},{148,11,84},{139,10,1015},{138,11,468},{135,0,421},{6,0,415},{7,0, +1049},{137,0,442},{6,11,38},{7,11,1220},{8,11,185},{8,11,256},{9,11,22},{9,11, +331},{10,11,738},{11,11,205},{11,11,540},{11,11,746},{13,11,399},{13,11,465},{14 +,11,88},{142,11,194},{139,0,289},{133,10,715},{4,0,110},{10,0,415},{10,0,597},{ +142,0,206},{4,11,159},{6,11,115},{7,11,252},{7,11,257},{7,11,1928},{8,11,69},{9, +11,384},{10,11,91},{10,11,615},{12,11,375},{14,11,235},{18,11,117},{147,11,123}, +{5,11,911},{136,11,278},{7,0,205},{7,0,2000},{8,10,794},{9,10,400},{10,10,298},{ +142,10,228},{135,11,1774},{4,11,151},{7,11,1567},{8,11,351},{137,11,322},{136,10 +,724},{133,11,990},{7,0,1539},{11,0,512},{13,0,205},{19,0,30},{22,0,36},{23,0,19 +},{135,11,1539},{5,11,194},{7,11,1662},{9,11,90},{140,11,180},{6,10,190},{7,10, +768},{135,10,1170},{134,0,1340},{4,0,283},{135,0,1194},{133,11,425},{133,11,971} +,{12,0,549},{14,10,67},{147,10,60},{135,10,1023},{134,0,1720},{138,11,587},{5,11 +,72},{6,11,264},{7,11,21},{7,11,46},{7,11,2013},{8,11,215},{8,11,513},{10,11,266 +},{139,11,22},{5,0,319},{135,0,534},{6,10,137},{9,10,75},{9,10,253},{10,10,194}, +{138,10,444},{7,0,1180},{20,0,112},{6,11,239},{7,11,118},{10,11,95},{11,11,603}, +{13,11,443},{14,11,160},{143,11,4},{134,11,431},{5,11,874},{6,11,1677},{11,10, +643},{12,10,115},{143,11,0},{134,0,967},{6,11,65},{7,11,939},{7,11,1172},{7,11, +1671},{9,11,540},{10,11,696},{11,11,265},{11,11,732},{11,11,928},{11,11,937},{12 +,11,399},{13,11,438},{149,11,19},{137,11,200},{135,0,1940},{5,10,760},{7,10,542} +,{8,10,135},{136,10,496},{140,11,44},{7,11,1655},{136,11,305},{7,10,319},{7,10, +355},{7,10,763},{10,10,389},{145,10,43},{136,0,735},{138,10,786},{137,11,19},{ +132,11,696},{5,0,132},{9,0,486},{9,0,715},{10,0,458},{11,0,373},{11,0,668},{11,0 +,795},{11,0,897},{12,0,272},{12,0,424},{12,0,539},{12,0,558},{14,0,245},{14,0, +263},{14,0,264},{14,0,393},{142,0,403},{10,0,38},{139,0,784},{132,0,838},{4,11, +302},{135,11,1766},{133,0,379},{5,0,8},{6,0,89},{6,0,400},{7,0,1569},{7,0,1623}, +{7,0,1850},{8,0,218},{8,0,422},{9,0,570},{10,0,626},{4,11,726},{133,11,630},{4,0 +,1017},{138,0,660},{6,0,387},{7,0,882},{141,0,111},{6,0,224},{7,0,877},{137,0, +647},{4,10,58},{5,10,286},{6,10,319},{7,10,402},{7,10,1254},{7,10,1903},{8,10, +356},{140,10,408},{135,0,790},{9,0,510},{10,0,53},{4,10,389},{9,10,181},{10,10, +29},{10,10,816},{11,10,311},{11,10,561},{12,10,67},{141,10,181},{142,0,458},{6, +11,118},{7,11,215},{7,11,1521},{140,11,11},{134,0,954},{135,0,394},{134,0,1367}, +{5,11,225},{133,10,373},{132,0,882},{7,0,1409},{135,10,1972},{135,10,1793},{4,11 +,370},{5,11,756},{135,11,1326},{150,11,13},{7,11,354},{10,11,410},{139,11,815},{ +6,11,1662},{7,11,48},{8,11,771},{10,11,116},{13,11,104},{14,11,105},{14,11,184}, +{15,11,168},{19,11,92},{148,11,68},{7,0,124},{136,0,38},{5,0,261},{7,0,78},{7,0, +199},{8,0,815},{9,0,126},{10,0,342},{140,0,647},{4,0,628},{140,0,724},{7,0,266}, +{8,0,804},{7,10,1651},{145,10,89},{135,0,208},{134,0,1178},{6,0,79},{135,0,1519} +,{132,10,672},{133,10,737},{136,0,741},{132,11,120},{4,0,710},{6,0,376},{134,0, +606},{134,0,1347},{134,0,1494},{6,0,850},{6,0,1553},{137,0,821},{5,10,145},{134, +11,593},{7,0,1311},{140,0,135},{4,0,467},{5,0,405},{134,0,544},{5,11,820},{135, +11,931},{6,0,100},{7,0,244},{7,0,632},{7,0,1609},{8,0,178},{8,0,638},{141,0,58}, +{4,10,387},{135,10,1288},{6,11,151},{6,11,1675},{7,11,383},{151,11,10},{132,0, +481},{135,10,550},{134,0,1378},{6,11,1624},{11,11,11},{12,11,422},{13,11,262},{ +142,11,360},{133,0,791},{4,11,43},{5,11,344},{133,11,357},{7,0,1227},{140,0,978} +,{7,0,686},{8,0,33},{8,0,238},{10,0,616},{11,0,467},{11,0,881},{13,0,217},{13,0, +253},{142,0,268},{137,0,857},{8,0,467},{8,0,1006},{7,11,148},{8,11,284},{141,11, +63},{4,10,576},{135,10,1263},{133,11,888},{5,10,919},{134,10,1673},{20,10,37},{ +148,11,37},{132,0,447},{132,11,711},{4,0,128},{5,0,415},{6,0,462},{7,0,294},{7,0 +,578},{10,0,710},{139,0,86},{4,10,82},{5,10,333},{5,10,904},{6,10,207},{7,10,325 +},{7,10,1726},{8,10,101},{10,10,778},{139,10,220},{136,0,587},{137,11,440},{133, +10,903},{6,0,427},{7,0,1018},{138,0,692},{4,0,195},{135,0,802},{140,10,147},{134 +,0,1546},{134,0,684},{132,10,705},{136,0,345},{11,11,678},{140,11,307},{133,0, +365},{134,0,1683},{4,11,65},{5,11,479},{5,11,1004},{7,11,1913},{8,11,317},{9,11, +302},{10,11,612},{141,11,22},{138,0,472},{4,11,261},{135,11,510},{134,10,90},{ +142,0,433},{151,0,28},{4,11,291},{7,11,101},{9,11,515},{12,11,152},{12,11,443},{ +13,11,392},{142,11,357},{140,0,997},{5,0,3},{8,0,578},{9,0,118},{10,0,705},{141, +0,279},{135,11,1266},{7,10,813},{12,10,497},{141,10,56},{133,0,229},{6,10,125},{ +135,10,1277},{8,0,102},{10,0,578},{10,0,672},{12,0,496},{13,0,408},{14,0,121},{ +17,0,106},{151,10,12},{6,0,866},{134,0,1080},{136,0,1022},{4,11,130},{135,11,843 +},{5,11,42},{5,11,879},{7,11,245},{7,11,324},{7,11,1532},{11,11,463},{11,11,472} +,{13,11,363},{144,11,52},{150,0,55},{8,0,115},{8,0,350},{9,0,489},{10,0,128},{11 +,0,306},{12,0,373},{14,0,30},{17,0,79},{19,0,80},{4,11,134},{133,11,372},{134,0, +657},{134,0,933},{135,11,1147},{4,0,230},{133,0,702},{134,0,1728},{4,0,484},{18, +0,26},{19,0,42},{20,0,43},{21,0,0},{23,0,27},{152,0,14},{7,0,185},{135,0,703},{6 +,0,417},{10,0,618},{7,10,1106},{9,10,770},{11,10,112},{140,10,413},{134,0,803},{ +132,11,644},{134,0,1262},{7,11,540},{12,10,271},{145,10,109},{135,11,123},{132,0 +,633},{134,11,623},{4,11,908},{5,11,359},{5,11,508},{6,11,1723},{7,11,343},{7,11 +,1996},{135,11,2026},{135,0,479},{10,0,262},{7,10,304},{9,10,646},{9,10,862},{11 +,10,696},{12,10,208},{15,10,79},{147,10,108},{4,11,341},{135,11,480},{134,0,830} +,{5,0,70},{5,0,622},{6,0,334},{7,0,1032},{9,0,171},{11,0,26},{11,0,213},{11,0, +637},{11,0,707},{12,0,202},{12,0,380},{13,0,226},{13,0,355},{14,0,222},{145,0,42 +},{135,10,981},{143,0,217},{137,11,114},{4,0,23},{4,0,141},{5,0,313},{5,0,1014}, +{6,0,50},{6,0,51},{7,0,142},{7,0,384},{7,0,559},{8,0,640},{9,0,460},{9,0,783},{ +11,0,741},{12,0,183},{141,0,488},{141,0,360},{7,0,1586},{7,11,1995},{8,11,299},{ +11,11,890},{140,11,674},{132,10,434},{7,0,652},{134,10,550},{7,0,766},{5,10,553} +,{138,10,824},{7,0,737},{8,0,298},{136,10,452},{4,11,238},{5,11,503},{6,11,179}, +{7,11,2003},{8,11,381},{8,11,473},{9,11,149},{10,11,183},{15,11,45},{143,11,86}, +{133,10,292},{5,0,222},{9,0,655},{138,0,534},{138,10,135},{4,11,121},{5,11,156}, +{5,11,349},{9,11,136},{10,11,605},{14,11,342},{147,11,107},{137,0,906},{6,0,1013 +},{134,0,1250},{6,0,1956},{6,0,2009},{8,0,991},{144,0,120},{135,11,1192},{138,0, +503},{5,0,154},{7,0,1491},{10,0,379},{138,0,485},{6,0,1867},{6,0,1914},{6,0,1925 +},{9,0,917},{9,0,925},{9,0,932},{9,0,951},{9,0,1007},{9,0,1013},{12,0,806},{12,0 +,810},{12,0,814},{12,0,816},{12,0,824},{12,0,832},{12,0,837},{12,0,863},{12,0, +868},{12,0,870},{12,0,889},{12,0,892},{12,0,900},{12,0,902},{12,0,908},{12,0,933 +},{12,0,942},{12,0,949},{12,0,954},{15,0,175},{15,0,203},{15,0,213},{15,0,218},{ +15,0,225},{15,0,231},{15,0,239},{15,0,248},{15,0,252},{18,0,190},{18,0,204},{18, +0,215},{18,0,216},{18,0,222},{18,0,225},{18,0,230},{18,0,239},{18,0,241},{21,0, +42},{21,0,43},{21,0,44},{21,0,45},{21,0,46},{21,0,53},{24,0,27},{152,0,31},{133, +0,716},{135,0,844},{4,0,91},{5,0,388},{5,0,845},{6,0,206},{6,0,252},{6,0,365},{7 +,0,136},{7,0,531},{136,0,621},{7,10,393},{10,10,603},{139,10,206},{6,11,80},{6, +11,1694},{7,11,173},{7,11,1974},{9,11,547},{10,11,730},{14,11,18},{150,11,39},{ +137,0,748},{4,11,923},{134,11,1711},{4,10,912},{137,10,232},{7,10,98},{7,10,1973 +},{136,10,716},{14,0,103},{133,10,733},{132,11,595},{12,0,158},{18,0,8},{19,0,62 +},{20,0,6},{22,0,4},{23,0,2},{23,0,9},{5,11,240},{6,11,459},{7,11,12},{7,11,114} +,{7,11,502},{7,11,1751},{7,11,1753},{7,11,1805},{8,11,658},{9,11,1},{11,11,959}, +{13,11,446},{142,11,211},{135,0,576},{5,0,771},{5,0,863},{5,0,898},{6,0,648},{6, +0,1632},{6,0,1644},{134,0,1780},{133,0,331},{7,11,633},{7,11,905},{7,11,909},{7, +11,1538},{9,11,767},{140,11,636},{140,0,632},{5,0,107},{7,0,201},{136,0,518},{6, +0,446},{7,0,1817},{134,11,490},{9,0,851},{141,0,510},{7,11,250},{8,11,506},{136, +11,507},{4,0,504},{137,10,72},{132,11,158},{4,11,140},{7,11,362},{8,11,209},{9, +11,10},{9,11,160},{9,11,503},{10,11,689},{11,11,350},{11,11,553},{11,11,725},{12 +,11,252},{12,11,583},{13,11,192},{13,11,352},{14,11,269},{14,11,356},{148,11,50} +,{6,11,597},{135,11,1318},{135,10,1454},{5,0,883},{5,0,975},{8,0,392},{148,0,7}, +{6,11,228},{7,11,1341},{9,11,408},{138,11,343},{11,11,348},{11,10,600},{12,11,99 +},{13,10,245},{18,11,1},{18,11,11},{147,11,4},{134,11,296},{5,0,922},{134,0,1707 +},{132,11,557},{4,11,548},{7,10,164},{7,10,1571},{9,10,107},{140,10,225},{7,11, +197},{8,11,142},{8,11,325},{9,11,150},{9,11,596},{10,11,350},{10,11,353},{11,11, +74},{11,11,315},{14,11,423},{143,11,141},{5,0,993},{7,0,515},{137,0,91},{4,0,131 +},{8,0,200},{5,10,484},{5,10,510},{6,10,434},{7,10,1000},{7,10,1098},{136,10,2}, +{152,0,10},{4,11,62},{5,11,83},{6,11,399},{6,11,579},{7,11,692},{7,11,846},{7,11 +,1015},{7,11,1799},{8,11,403},{9,11,394},{10,11,133},{12,11,4},{12,11,297},{12, +11,452},{16,11,81},{18,11,19},{18,11,25},{21,11,14},{22,11,12},{151,11,18},{140, +11,459},{132,11,177},{7,0,1433},{9,0,365},{137,11,365},{132,10,460},{5,0,103},{6 +,0,2004},{7,0,921},{8,0,580},{8,0,593},{8,0,630},{10,0,28},{5,11,411},{135,11, +653},{4,10,932},{133,10,891},{4,0,911},{5,0,867},{5,0,1013},{7,0,2034},{8,0,798} +,{136,0,813},{7,11,439},{10,11,727},{11,11,260},{139,11,684},{136,10,625},{5,11, +208},{7,11,753},{135,11,1528},{5,0,461},{7,0,1925},{12,0,39},{13,0,265},{13,0, +439},{134,10,76},{6,0,853},{8,10,92},{137,10,221},{5,0,135},{6,0,519},{7,0,1722} +,{10,0,271},{11,0,261},{145,0,54},{139,11,814},{14,0,338},{148,0,81},{4,0,300},{ +133,0,436},{5,0,419},{5,0,687},{7,0,864},{9,0,470},{135,11,864},{9,0,836},{133, +11,242},{134,0,1937},{4,10,763},{133,11,953},{132,10,622},{132,0,393},{133,10, +253},{8,0,357},{10,0,745},{14,0,426},{17,0,94},{19,0,57},{135,10,546},{5,11,615} +,{146,11,37},{9,10,73},{10,10,110},{14,10,185},{145,10,119},{11,0,703},{7,10,624 +},{7,10,916},{10,10,256},{139,10,87},{133,11,290},{5,10,212},{12,10,35},{141,10, +382},{132,11,380},{5,11,52},{7,11,277},{9,11,368},{139,11,791},{133,0,387},{10, +11,138},{139,11,476},{4,0,6},{5,0,708},{136,0,75},{7,0,1351},{9,0,581},{10,0,639 +},{11,0,453},{140,0,584},{132,0,303},{138,0,772},{135,10,1175},{4,0,749},{5,10, +816},{6,11,256},{7,11,307},{7,11,999},{7,11,1481},{7,11,1732},{7,11,1738},{8,11, +265},{9,11,414},{11,11,316},{12,11,52},{13,11,420},{147,11,100},{135,11,1296},{6 +,0,1065},{5,10,869},{5,10,968},{6,10,1626},{8,10,734},{136,10,784},{4,10,542},{6 +,10,1716},{6,10,1727},{7,10,1082},{7,10,1545},{8,10,56},{8,10,118},{8,10,412},{8 +,10,564},{9,10,888},{9,10,908},{10,10,50},{10,10,423},{11,10,685},{11,10,697},{ +11,10,933},{12,10,299},{13,10,126},{13,10,136},{13,10,170},{141,10,190},{134,0, +226},{4,0,106},{7,0,310},{11,0,717},{133,11,723},{5,0,890},{5,0,988},{4,10,232}, +{9,10,202},{10,10,474},{140,10,433},{6,0,626},{142,0,431},{10,0,706},{150,0,44}, +{13,0,51},{6,10,108},{7,10,1003},{7,10,1181},{8,10,111},{136,10,343},{132,0,698} +,{5,11,109},{6,11,1784},{7,11,1895},{12,11,296},{140,11,302},{134,0,828},{134,10 +,1712},{138,0,17},{7,0,1929},{4,10,133},{5,11,216},{7,10,711},{7,10,1298},{7,10, +1585},{7,11,1879},{9,11,141},{9,11,270},{9,11,679},{10,11,159},{10,11,553},{11, +11,197},{11,11,438},{12,11,538},{12,11,559},{13,11,193},{13,11,423},{14,11,144}, +{14,11,166},{14,11,167},{15,11,67},{147,11,84},{141,11,127},{7,11,1872},{137,11, +81},{6,10,99},{7,10,1808},{145,10,57},{134,11,391},{5,0,689},{6,0,84},{7,0,1250} +,{6,10,574},{7,10,428},{10,10,669},{11,10,485},{11,10,840},{12,10,300},{142,10, +250},{7,11,322},{136,11,249},{7,11,432},{135,11,1649},{135,10,1871},{137,10,252} +,{6,11,155},{140,11,234},{7,0,871},{19,0,27},{147,11,27},{140,0,498},{5,0,986},{ +6,0,130},{138,0,823},{6,0,1793},{7,0,1582},{8,0,458},{10,0,101},{10,0,318},{10,0 +,945},{12,0,734},{16,0,104},{18,0,177},{6,10,323},{135,10,1564},{5,11,632},{138, +11,526},{10,0,435},{7,10,461},{136,10,775},{6,11,144},{7,11,948},{7,11,1042},{7, +11,1857},{8,11,235},{8,11,461},{9,11,453},{9,11,530},{10,11,354},{17,11,77},{19, +11,99},{148,11,79},{138,0,966},{7,0,1644},{137,0,129},{135,0,997},{136,0,502},{5 +,11,196},{6,11,486},{7,11,212},{8,11,309},{136,11,346},{7,10,727},{146,10,73},{ +132,0,823},{132,11,686},{135,0,1927},{4,0,762},{7,0,1756},{137,0,98},{136,10,577 +},{24,0,8},{4,11,30},{5,11,43},{152,11,8},{7,0,1046},{139,0,160},{7,0,492},{4,10 +,413},{5,10,677},{7,11,492},{8,10,432},{140,10,280},{6,0,45},{7,0,433},{8,0,129} +,{9,0,21},{10,0,392},{11,0,79},{12,0,499},{13,0,199},{141,0,451},{7,0,558},{136, +0,353},{4,11,220},{7,11,1535},{9,11,93},{139,11,474},{7,10,646},{7,10,1730},{11, +10,446},{141,10,178},{133,0,785},{134,0,1145},{8,0,81},{9,0,189},{9,0,201},{11,0 +,478},{11,0,712},{141,0,338},{5,0,353},{151,0,26},{11,0,762},{132,10,395},{134,0 +,2024},{4,0,611},{133,0,606},{9,10,174},{10,10,164},{11,10,440},{11,10,841},{143 +,10,98},{134,10,426},{10,10,608},{139,10,1002},{138,10,250},{6,0,25},{7,0,855},{ +7,0,1258},{144,0,32},{7,11,1725},{138,11,393},{5,11,263},{134,11,414},{6,0,2011} +,{133,10,476},{4,0,4},{7,0,1118},{7,0,1320},{7,0,1706},{8,0,277},{9,0,622},{10,0 +,9},{11,0,724},{12,0,350},{12,0,397},{13,0,28},{13,0,159},{15,0,89},{18,0,5},{19 +,0,9},{20,0,34},{22,0,47},{6,11,178},{6,11,1750},{8,11,251},{9,11,690},{10,11, +155},{10,11,196},{10,11,373},{11,11,698},{13,11,155},{148,11,93},{5,11,97},{137, +11,393},{7,0,764},{11,0,461},{12,0,172},{5,10,76},{6,10,458},{6,10,497},{7,10, +868},{9,10,658},{10,10,594},{11,10,566},{12,10,338},{141,10,200},{134,0,1449},{ +138,11,40},{134,11,1639},{134,0,1445},{6,0,1168},{4,10,526},{7,10,1029},{135,10, +1054},{4,11,191},{7,11,934},{8,11,647},{145,11,97},{132,10,636},{6,0,233},{7,10, +660},{7,10,1124},{17,10,31},{19,10,22},{151,10,14},{6,10,1699},{136,11,110},{12, +11,246},{15,11,162},{19,11,64},{20,11,8},{20,11,95},{22,11,24},{152,11,17},{5,11 +,165},{9,11,346},{138,11,655},{5,11,319},{135,11,534},{134,0,255},{9,0,216},{8, +11,128},{139,11,179},{9,0,183},{139,0,286},{11,0,956},{151,0,3},{4,0,536},{7,0, +1141},{10,0,723},{139,0,371},{4,10,279},{7,10,301},{137,10,362},{7,0,285},{5,11, +57},{6,11,101},{6,11,1663},{7,11,132},{7,11,1048},{7,11,1154},{7,11,1415},{7,11, +1507},{12,11,493},{15,11,105},{151,11,15},{5,11,459},{7,11,1073},{7,10,1743},{8, +11,241},{136,11,334},{4,10,178},{133,10,399},{135,0,560},{132,0,690},{135,0,1246 +},{18,0,157},{147,0,63},{10,0,599},{11,0,33},{12,0,571},{149,0,1},{6,11,324},{6, +11,520},{7,11,338},{7,11,1616},{7,11,1729},{8,11,228},{9,11,69},{139,11,750},{7, +0,1862},{12,0,491},{12,0,520},{13,0,383},{142,0,244},{135,11,734},{134,10,1692}, +{10,0,448},{11,0,630},{17,0,117},{6,10,202},{7,11,705},{12,10,360},{17,10,118},{ +18,10,27},{148,10,67},{4,11,73},{6,11,612},{7,11,927},{7,11,1822},{8,11,217},{9, +11,472},{9,11,765},{9,11,766},{10,11,408},{11,11,51},{11,11,793},{12,11,266},{15 +,11,158},{20,11,89},{150,11,32},{4,0,190},{133,0,554},{133,0,1001},{5,11,389},{8 +,11,636},{137,11,229},{5,0,446},{7,10,872},{10,10,516},{139,10,167},{137,10,313} +,{132,10,224},{134,0,1313},{5,10,546},{7,10,35},{8,10,11},{8,10,12},{9,10,315},{ +9,10,533},{10,10,802},{11,10,166},{12,10,525},{142,10,243},{6,0,636},{137,0,837} +,{5,10,241},{8,10,242},{9,10,451},{10,10,667},{11,10,598},{140,10,429},{22,10,46 +},{150,11,46},{136,11,472},{11,0,278},{142,0,73},{141,11,185},{132,0,868},{134,0 +,972},{4,10,366},{137,10,516},{138,0,1010},{5,11,189},{6,10,1736},{7,11,442},{7, +11,443},{8,11,281},{12,11,174},{13,11,83},{141,11,261},{139,11,384},{6,11,2},{7, +11,191},{7,11,446},{7,11,758},{7,11,1262},{7,11,1737},{8,11,22},{8,11,270},{8,11 +,612},{9,11,4},{9,11,167},{9,11,312},{9,11,436},{10,11,156},{10,11,216},{10,11, +311},{10,11,623},{11,11,72},{11,11,330},{11,11,455},{12,11,101},{12,11,321},{12, +11,504},{12,11,530},{12,11,543},{13,11,17},{13,11,156},{13,11,334},{14,11,48},{ +15,11,70},{17,11,60},{148,11,64},{6,10,331},{136,10,623},{135,0,1231},{132,0,304 +},{6,11,60},{7,11,670},{7,11,1327},{8,11,411},{8,11,435},{9,11,653},{9,11,740},{ +10,11,385},{11,11,222},{11,11,324},{11,11,829},{140,11,611},{7,0,506},{6,11,166} +,{7,11,374},{135,11,1174},{14,11,43},{146,11,21},{135,11,1694},{135,10,1888},{5, +11,206},{134,11,398},{135,11,50},{150,0,26},{6,0,53},{6,0,199},{7,0,1408},{8,0, +32},{8,0,93},{10,0,397},{10,0,629},{11,0,593},{11,0,763},{13,0,326},{145,0,35},{ +134,0,105},{132,10,394},{4,0,843},{138,0,794},{11,0,704},{141,0,396},{5,0,114},{ +5,0,255},{141,0,285},{6,0,619},{7,0,898},{7,0,1092},{8,0,485},{18,0,28},{19,0, +116},{135,10,1931},{9,0,145},{7,10,574},{135,10,1719},{7,0,2035},{8,0,19},{9,0, +89},{138,0,831},{132,10,658},{6,11,517},{7,11,1159},{10,11,621},{139,11,192},{7, +0,1933},{7,11,1933},{9,10,781},{10,10,144},{11,10,385},{13,10,161},{13,10,228},{ +13,10,268},{148,10,107},{136,10,374},{10,11,223},{139,11,645},{135,0,1728},{7,11 +,64},{7,11,289},{136,11,245},{4,10,344},{6,10,498},{139,10,323},{136,0,746},{135 +,10,1063},{137,10,155},{4,0,987},{6,0,1964},{6,0,1974},{6,0,1990},{136,0,995},{ +133,11,609},{133,10,906},{134,0,1550},{134,0,874},{5,11,129},{6,11,61},{135,11, +947},{4,0,1018},{6,0,1938},{6,0,2021},{134,0,2039},{132,0,814},{11,0,126},{139,0 +,287},{134,0,1264},{5,0,955},{136,0,814},{141,11,506},{132,11,314},{6,0,981},{ +139,11,1000},{5,0,56},{8,0,892},{8,0,915},{140,0,776},{148,0,100},{10,0,4},{10,0 +,13},{11,0,638},{148,0,57},{148,11,74},{5,0,738},{132,10,616},{133,11,637},{136, +10,692},{133,0,758},{132,10,305},{137,11,590},{5,11,280},{135,11,1226},{134,11, +494},{135,0,1112},{133,11,281},{13,0,44},{14,0,214},{5,10,214},{7,10,603},{8,10, +611},{9,10,686},{10,10,88},{11,10,459},{11,10,496},{12,10,463},{140,10,590},{139 +,0,328},{135,11,1064},{137,0,133},{7,0,168},{13,0,196},{141,0,237},{134,10,1703} +,{134,0,1152},{135,0,1245},{5,0,110},{6,0,169},{6,0,1702},{7,0,400},{8,0,538},{9 +,0,184},{9,0,524},{140,0,218},{6,0,1816},{10,0,871},{12,0,769},{140,0,785},{132, +11,630},{7,11,33},{7,11,120},{8,11,489},{9,11,319},{10,11,820},{11,11,1004},{12, +11,379},{13,11,117},{13,11,412},{14,11,25},{15,11,52},{15,11,161},{16,11,47},{ +149,11,2},{6,0,133},{8,0,413},{9,0,353},{139,0,993},{145,10,19},{4,11,937},{133, +11,801},{134,0,978},{6,0,93},{6,0,1508},{7,0,1422},{7,0,1851},{8,0,673},{9,0,529 +},{140,0,43},{6,0,317},{10,0,512},{4,10,737},{11,10,294},{12,10,60},{12,10,437}, +{13,10,64},{13,10,380},{142,10,430},{9,0,371},{7,11,1591},{144,11,43},{6,10,1758 +},{8,10,520},{9,10,345},{9,10,403},{142,10,350},{5,0,526},{10,10,242},{138,10, +579},{9,0,25},{10,0,467},{138,0,559},{5,10,139},{7,10,1168},{138,10,539},{4,0, +335},{135,0,942},{140,0,754},{132,11,365},{11,0,182},{142,0,195},{142,11,29},{5, +11,7},{139,11,774},{4,11,746},{135,11,1090},{8,0,39},{10,0,773},{11,0,84},{12,0, +205},{142,0,1},{5,0,601},{5,0,870},{5,11,360},{136,11,237},{132,0,181},{136,0, +370},{134,0,1652},{8,0,358},{4,10,107},{7,10,613},{8,10,439},{8,10,504},{9,10, +501},{10,10,383},{139,10,477},{132,10,229},{137,11,785},{4,0,97},{5,0,147},{6,0, +286},{7,0,1362},{141,0,176},{6,0,537},{7,0,788},{7,0,1816},{132,10,903},{140,10, +71},{6,0,743},{134,0,1223},{6,0,375},{7,0,169},{7,0,254},{8,0,780},{135,11,1493} +,{7,0,1714},{4,10,47},{6,10,373},{7,10,452},{7,10,543},{7,10,1856},{9,10,6},{11, +10,257},{139,10,391},{6,0,896},{136,0,1003},{135,0,1447},{137,11,341},{5,10,980} +,{134,10,1754},{145,11,22},{4,11,277},{5,11,608},{6,11,493},{7,11,457},{140,11, +384},{7,10,536},{7,10,1331},{136,10,143},{140,0,744},{7,11,27},{135,11,316},{18, +0,126},{5,10,19},{134,10,533},{4,0,788},{11,0,41},{5,11,552},{5,11,586},{5,11, +676},{6,11,448},{8,11,244},{11,11,1},{11,11,41},{13,11,3},{16,11,54},{17,11,4},{ +146,11,13},{4,0,985},{6,0,1801},{4,11,401},{137,11,264},{5,10,395},{5,10,951},{ +134,10,1776},{5,0,629},{135,0,1549},{11,10,663},{12,10,210},{13,10,166},{13,10, +310},{14,10,373},{147,10,43},{9,11,543},{10,11,524},{11,11,30},{12,11,524},{14, +11,315},{16,11,18},{20,11,26},{148,11,65},{4,11,205},{5,11,623},{7,11,104},{136, +11,519},{5,0,293},{134,0,601},{7,11,579},{9,11,41},{9,11,244},{9,11,669},{10,11, +5},{11,11,861},{11,11,951},{139,11,980},{132,11,717},{132,10,695},{7,10,497},{9, +10,387},{147,10,81},{132,0,420},{142,0,37},{6,0,1134},{6,0,1900},{12,0,830},{12, +0,878},{12,0,894},{15,0,221},{143,0,245},{132,11,489},{7,0,1570},{140,0,542},{8, +0,933},{136,0,957},{6,0,1371},{7,0,31},{8,0,373},{5,10,284},{6,10,49},{6,10,350} +,{7,10,377},{7,10,1693},{8,10,678},{9,10,161},{9,10,585},{9,10,671},{9,10,839},{ +11,10,912},{141,10,427},{135,11,892},{4,0,325},{138,0,125},{139,11,47},{132,10, +597},{138,0,323},{6,0,1547},{7,11,1605},{9,11,473},{11,11,962},{146,11,139},{139 +,10,908},{7,11,819},{9,11,26},{9,11,392},{10,11,152},{10,11,226},{11,11,19},{12, +11,276},{12,11,426},{12,11,589},{13,11,460},{15,11,97},{19,11,48},{148,11,104},{ +135,11,51},{4,0,718},{135,0,1216},{6,0,1896},{6,0,1905},{6,0,1912},{9,0,947},{9, +0,974},{12,0,809},{12,0,850},{12,0,858},{12,0,874},{12,0,887},{12,0,904},{12,0, +929},{12,0,948},{12,0,952},{15,0,198},{15,0,206},{15,0,220},{15,0,227},{15,0,247 +},{18,0,188},{21,0,48},{21,0,50},{24,0,25},{24,0,29},{7,11,761},{7,11,1051},{137 +,11,545},{5,0,124},{5,0,144},{6,0,548},{7,0,15},{7,0,153},{137,0,629},{135,11, +606},{135,10,2014},{7,10,2007},{9,11,46},{9,10,101},{9,10,450},{10,10,66},{10,10 +,842},{11,10,536},{140,10,587},{6,0,75},{7,0,1531},{8,0,416},{9,0,240},{9,0,275} +,{10,0,100},{11,0,658},{11,0,979},{12,0,86},{14,0,207},{15,0,20},{143,0,25},{5,0 +,141},{5,0,915},{6,0,1783},{7,0,211},{7,0,698},{7,0,1353},{9,0,83},{9,0,281},{10 +,0,376},{10,0,431},{11,0,543},{12,0,664},{13,0,280},{13,0,428},{14,0,61},{14,0, +128},{17,0,52},{145,0,81},{132,11,674},{135,0,533},{149,0,6},{132,11,770},{133,0 +,538},{5,11,79},{7,11,1027},{7,11,1477},{139,11,52},{139,10,62},{4,0,338},{133,0 +,400},{5,11,789},{134,11,195},{4,11,251},{4,11,688},{7,11,513},{7,11,1284},{9,11 +,87},{138,11,365},{134,10,1766},{6,0,0},{7,0,84},{11,0,895},{145,0,11},{139,0, +892},{4,0,221},{5,0,659},{7,0,697},{7,0,1211},{138,0,284},{133,0,989},{133,11, +889},{4,11,160},{5,11,330},{7,11,1434},{136,11,174},{6,10,1665},{7,10,256},{7,10 +,1388},{10,10,499},{139,10,670},{7,0,848},{4,10,22},{5,10,10},{136,10,97},{138,0 +,507},{133,10,481},{4,0,188},{135,0,805},{5,0,884},{6,0,732},{139,0,991},{135,11 +,968},{11,11,636},{15,11,145},{17,11,34},{19,11,50},{151,11,20},{7,0,959},{16,0, +60},{6,10,134},{7,10,437},{9,10,37},{14,10,285},{142,10,371},{7,10,486},{8,10, +155},{11,10,93},{140,10,164},{134,0,1653},{7,0,337},{133,10,591},{6,0,1989},{8,0 +,922},{8,0,978},{133,11,374},{132,0,638},{138,0,500},{133,11,731},{5,10,380},{5, +10,650},{136,10,310},{138,11,381},{4,10,364},{7,10,1156},{7,10,1187},{137,10,409 +},{137,11,224},{140,0,166},{134,10,482},{4,11,626},{5,11,642},{6,11,425},{10,11, +202},{139,11,141},{4,10,781},{6,10,487},{7,10,926},{8,10,263},{139,10,500},{135, +0,418},{4,10,94},{135,10,1265},{136,0,760},{132,10,417},{136,11,835},{5,10,348}, +{134,10,522},{6,0,1277},{134,0,1538},{139,11,541},{135,11,1597},{5,11,384},{8,11 +,455},{140,11,48},{136,0,770},{5,11,264},{134,11,184},{4,0,89},{5,0,489},{6,0, +315},{7,0,553},{7,0,1745},{138,0,243},{4,10,408},{4,10,741},{135,10,500},{134,0, +1396},{133,0,560},{6,0,1658},{9,0,3},{10,0,154},{11,0,641},{13,0,85},{13,0,201}, +{141,0,346},{135,11,1595},{5,11,633},{6,11,28},{7,11,219},{135,11,1323},{9,11, +769},{140,11,185},{135,11,785},{7,11,359},{8,11,243},{140,11,175},{138,0,586},{7 +,0,1271},{134,10,73},{132,11,105},{4,0,166},{5,0,505},{134,0,1670},{133,10,576}, +{4,11,324},{138,11,104},{142,10,231},{6,0,637},{7,10,1264},{7,10,1678},{11,10, +945},{12,10,341},{12,10,471},{12,10,569},{23,11,21},{151,11,23},{8,11,559},{141, +11,109},{134,0,1947},{7,0,445},{8,0,307},{8,0,704},{10,0,41},{10,0,439},{11,0, +237},{11,0,622},{140,0,201},{135,11,963},{135,0,1977},{4,0,189},{5,0,713},{136,0 +,57},{138,0,371},{135,10,538},{132,0,552},{6,0,883},{133,10,413},{6,0,923},{132, +11,758},{138,11,215},{136,10,495},{7,10,54},{8,10,312},{10,10,191},{10,10,614},{ +140,10,567},{7,11,351},{139,11,128},{7,0,875},{6,10,468},{7,10,1478},{8,10,530}, +{142,10,290},{135,0,1788},{17,0,49},{133,11,918},{12,11,398},{20,11,39},{21,11, +11},{150,11,41},{10,0,661},{6,10,484},{135,10,822},{135,0,1945},{134,0,794},{137 +,10,900},{135,10,1335},{6,10,1724},{135,10,2022},{132,11,340},{134,0,1135},{4,0, +784},{133,0,745},{5,0,84},{134,0,163},{133,0,410},{4,0,976},{5,11,985},{7,11,509 +},{7,11,529},{145,11,96},{132,10,474},{134,0,703},{135,11,1919},{5,0,322},{8,0, +186},{9,0,262},{10,0,187},{142,0,208},{135,10,1504},{133,0,227},{9,0,560},{13,0, +208},{133,10,305},{132,11,247},{7,0,1395},{8,0,486},{9,0,236},{9,0,878},{10,0, +218},{11,0,95},{19,0,17},{147,0,31},{7,0,2043},{8,0,672},{141,0,448},{4,11,184}, +{5,11,390},{6,11,337},{7,11,23},{7,11,494},{7,11,618},{7,11,1456},{8,11,27},{8, +11,599},{10,11,153},{139,11,710},{135,0,466},{135,10,1236},{6,0,167},{7,0,186},{ +7,0,656},{10,0,643},{4,10,480},{6,10,302},{6,10,1642},{7,10,837},{7,10,1547},{7, +10,1657},{8,10,429},{9,10,228},{13,10,289},{13,10,343},{147,10,101},{134,0,1428} +,{134,0,1440},{5,0,412},{7,10,278},{10,10,739},{11,10,708},{141,10,348},{134,0, +1118},{136,0,562},{148,11,46},{9,0,316},{139,0,256},{134,0,1771},{135,0,1190},{ +137,0,132},{10,11,227},{11,11,497},{11,11,709},{140,11,415},{143,0,66},{6,11,360 +},{7,11,1664},{136,11,478},{144,10,28},{4,0,317},{135,0,1279},{5,0,63},{133,0, +509},{136,11,699},{145,10,36},{134,0,1475},{11,11,343},{142,11,127},{132,11,739} +,{132,0,288},{135,11,1757},{8,0,89},{8,0,620},{9,0,608},{11,0,628},{12,0,322},{ +143,0,124},{134,0,1225},{7,0,1189},{4,11,67},{5,11,422},{6,10,363},{7,11,1037},{ +7,11,1289},{7,11,1555},{7,10,1955},{8,10,725},{9,11,741},{145,11,108},{134,0, +1468},{6,0,689},{134,0,1451},{138,0,120},{151,0,1},{137,10,805},{142,0,329},{5, +10,813},{135,10,2046},{135,0,226},{138,11,96},{7,0,1855},{5,10,712},{11,10,17},{ +13,10,321},{144,10,67},{9,0,461},{6,10,320},{7,10,781},{7,10,1921},{9,10,55},{10 +,10,186},{10,10,273},{10,10,664},{10,10,801},{11,10,996},{11,10,997},{13,10,157} +,{142,10,170},{8,11,203},{8,10,271},{11,11,823},{11,11,846},{12,11,482},{13,11, +133},{13,11,277},{13,11,302},{13,11,464},{14,11,205},{142,11,221},{135,0,1346},{ +4,11,449},{133,11,718},{134,0,85},{14,0,299},{7,10,103},{7,10,863},{11,10,184},{ +145,10,62},{4,11,355},{6,11,311},{9,11,256},{138,11,404},{137,10,659},{138,11, +758},{133,11,827},{5,11,64},{140,11,581},{134,0,1171},{4,11,442},{7,11,1047},{7, +11,1352},{135,11,1643},{132,0,980},{5,11,977},{6,11,288},{7,11,528},{135,11,1065 +},{5,0,279},{6,0,235},{7,0,468},{8,0,446},{9,0,637},{10,0,717},{11,0,738},{140,0 +,514},{132,0,293},{11,10,337},{142,10,303},{136,11,285},{5,0,17},{6,0,371},{9,0, +528},{12,0,364},{132,11,254},{5,10,77},{7,10,1455},{10,10,843},{147,10,73},{150, +0,5},{132,10,458},{6,11,12},{7,11,1219},{145,11,73},{135,10,1420},{6,10,109},{ +138,10,382},{135,11,125},{6,10,330},{7,10,1084},{139,10,142},{6,11,369},{6,11, +502},{7,11,1036},{8,11,348},{9,11,452},{10,11,26},{11,11,224},{11,11,387},{11,11 +,772},{12,11,95},{12,11,629},{13,11,195},{13,11,207},{13,11,241},{14,11,260},{14 +,11,270},{143,11,140},{132,11,269},{5,11,480},{7,11,532},{7,11,1197},{7,11,1358} +,{8,11,291},{11,11,349},{142,11,396},{150,0,48},{10,0,601},{13,0,353},{141,0,376 +},{5,0,779},{5,0,807},{6,0,1655},{134,0,1676},{142,11,223},{4,0,196},{5,0,558},{ +133,0,949},{148,11,15},{135,11,1764},{134,0,1322},{132,0,752},{139,0,737},{135, +11,657},{136,11,533},{135,0,412},{4,0,227},{5,0,159},{5,0,409},{7,0,80},{8,0,556 +},{10,0,479},{12,0,418},{14,0,50},{14,0,123},{14,0,192},{14,0,249},{14,0,295},{ +143,0,27},{7,0,1470},{8,0,66},{8,0,137},{8,0,761},{9,0,638},{11,0,80},{11,0,212} +,{11,0,368},{11,0,418},{12,0,8},{13,0,15},{16,0,61},{17,0,59},{19,0,28},{148,0, +84},{135,10,1985},{4,11,211},{4,11,332},{5,11,335},{6,11,238},{7,11,269},{7,11, +811},{7,11,1797},{8,10,122},{8,11,836},{9,11,507},{141,11,242},{6,0,683},{134,0, +1252},{4,0,873},{132,10,234},{134,0,835},{6,0,38},{7,0,1220},{8,0,185},{8,0,256} +,{9,0,22},{9,0,331},{10,0,738},{11,0,205},{11,0,540},{11,0,746},{13,0,465},{14,0 +,88},{142,0,194},{138,0,986},{5,11,1009},{12,11,582},{146,11,131},{4,0,159},{6,0 +,115},{7,0,252},{7,0,257},{7,0,1928},{8,0,69},{9,0,384},{10,0,91},{10,0,615},{12 +,0,375},{14,0,235},{18,0,117},{147,0,123},{133,0,911},{136,0,278},{5,10,430},{5, +10,932},{6,10,131},{7,10,417},{9,10,522},{11,10,314},{141,10,390},{14,10,149},{ +14,10,399},{143,10,57},{4,0,151},{7,0,1567},{136,0,749},{5,11,228},{6,11,203},{7 +,11,156},{8,11,347},{137,11,265},{132,10,507},{10,0,989},{140,0,956},{133,0,990} +,{5,0,194},{6,0,927},{7,0,1662},{9,0,90},{140,0,564},{4,10,343},{133,10,511},{ +133,0,425},{7,10,455},{138,10,591},{4,0,774},{7,11,476},{7,11,1592},{138,11,87}, +{5,0,971},{135,10,1381},{5,11,318},{147,11,121},{5,11,291},{7,11,765},{9,11,389} +,{140,11,548},{134,10,575},{4,0,827},{12,0,646},{12,0,705},{12,0,712},{140,0,714 +},{139,0,752},{137,0,662},{5,0,72},{6,0,264},{7,0,21},{7,0,46},{7,0,2013},{8,0, +215},{8,0,513},{10,0,266},{139,0,22},{139,11,522},{6,0,239},{7,0,118},{10,0,95}, +{11,0,603},{13,0,443},{14,0,160},{143,0,4},{6,0,431},{134,0,669},{7,10,1127},{7, +10,1572},{10,10,297},{10,10,422},{11,10,764},{11,10,810},{12,10,264},{13,10,102} +,{13,10,300},{13,10,484},{14,10,147},{14,10,229},{17,10,71},{18,10,118},{147,10, +120},{5,0,874},{6,0,1677},{15,0,0},{10,11,525},{139,11,82},{6,0,65},{7,0,939},{7 +,0,1172},{7,0,1671},{9,0,540},{10,0,696},{11,0,265},{11,0,732},{11,0,928},{11,0, +937},{141,0,438},{134,0,1350},{136,11,547},{132,11,422},{5,11,355},{145,11,0},{ +137,11,905},{5,0,682},{135,0,1887},{132,0,809},{4,0,696},{133,11,865},{6,0,1074} +,{6,0,1472},{14,10,35},{142,10,191},{5,11,914},{134,11,1625},{133,11,234},{135, +11,1383},{137,11,780},{132,10,125},{4,0,726},{133,0,630},{8,0,802},{136,0,838},{ +132,10,721},{6,0,1337},{7,0,776},{19,0,56},{136,10,145},{132,0,970},{7,10,792},{ +8,10,147},{10,10,821},{139,10,1021},{139,10,970},{8,0,940},{137,0,797},{135,11, +1312},{9,0,248},{10,0,400},{7,11,816},{7,11,1241},{7,10,1999},{9,11,283},{9,11, +520},{10,11,213},{10,11,307},{10,11,463},{10,11,671},{10,11,746},{11,11,401},{11 +,11,794},{12,11,517},{18,11,107},{147,11,115},{6,0,1951},{134,0,2040},{135,11, +339},{13,0,41},{15,0,93},{5,10,168},{5,10,930},{8,10,74},{9,10,623},{12,10,500}, +{140,10,579},{6,0,118},{7,0,215},{7,0,1521},{140,0,11},{6,10,220},{7,10,1101},{ +141,10,105},{6,11,421},{7,11,61},{7,11,1540},{10,11,11},{138,11,501},{7,0,615},{ +138,0,251},{140,11,631},{135,0,1044},{6,10,19},{7,10,1413},{139,10,428},{133,0, +225},{7,10,96},{8,10,401},{8,10,703},{137,10,896},{145,10,116},{6,11,102},{7,11, +72},{15,11,142},{147,11,67},{7,10,1961},{7,10,1965},{8,10,702},{136,10,750},{7, +10,2030},{8,10,150},{8,10,737},{12,10,366},{151,11,30},{4,0,370},{5,0,756},{7,0, +1326},{135,11,823},{8,10,800},{9,10,148},{9,10,872},{9,10,890},{11,10,309},{11, +10,1001},{13,10,267},{141,10,323},{6,0,1662},{7,0,48},{8,0,771},{10,0,116},{13,0 +,104},{14,0,105},{14,0,184},{15,0,168},{19,0,92},{148,0,68},{10,0,209},{135,11, +1870},{7,11,68},{8,11,48},{8,11,88},{8,11,582},{8,11,681},{9,11,373},{9,11,864}, +{11,11,157},{11,11,336},{11,11,843},{148,11,27},{134,0,930},{4,11,88},{5,11,137} +,{5,11,174},{5,11,777},{6,11,1664},{6,11,1725},{7,11,77},{7,11,426},{7,11,1317}, +{7,11,1355},{8,11,126},{8,11,563},{9,11,523},{9,11,750},{10,11,310},{10,11,836}, +{11,11,42},{11,11,318},{11,11,731},{12,11,68},{12,11,92},{12,11,507},{12,11,692} +,{13,11,81},{13,11,238},{13,11,374},{18,11,138},{19,11,78},{19,11,111},{20,11,55 +},{20,11,77},{148,11,92},{4,11,938},{135,11,1831},{5,10,547},{7,10,424},{8,11, +617},{138,11,351},{6,0,1286},{6,11,1668},{7,11,1499},{8,11,117},{9,11,314},{138, +11,174},{6,0,759},{6,0,894},{7,11,707},{139,11,563},{4,0,120},{135,0,1894},{9,0, +385},{149,0,17},{138,0,429},{133,11,403},{5,0,820},{135,0,931},{10,0,199},{133, +10,133},{6,0,151},{6,0,1675},{7,0,383},{151,0,10},{6,0,761},{136,10,187},{8,0, +365},{10,10,0},{10,10,818},{139,10,988},{4,11,44},{5,11,311},{6,11,156},{7,11, +639},{7,11,762},{7,11,1827},{9,11,8},{9,11,462},{148,11,83},{4,11,346},{7,11,115 +},{9,11,180},{9,11,456},{138,11,363},{136,10,685},{7,0,1086},{145,0,46},{6,0, +1624},{11,0,11},{12,0,422},{13,0,444},{142,0,360},{6,0,1020},{6,0,1260},{134,0, +1589},{4,0,43},{5,0,344},{5,0,357},{14,0,472},{150,0,58},{6,0,1864},{6,0,1866},{ +6,0,1868},{6,0,1869},{6,0,1874},{6,0,1877},{6,0,1903},{6,0,1911},{9,0,920},{9,0, +921},{9,0,924},{9,0,946},{9,0,959},{9,0,963},{9,0,970},{9,0,997},{9,0,1008},{9,0 +,1017},{12,0,795},{12,0,797},{12,0,798},{12,0,800},{12,0,803},{12,0,811},{12,0, +820},{12,0,821},{12,0,839},{12,0,841},{12,0,848},{12,0,911},{12,0,921},{12,0,922 +},{12,0,925},{12,0,937},{12,0,944},{12,0,945},{12,0,953},{15,0,184},{15,0,191},{ +15,0,199},{15,0,237},{15,0,240},{15,0,243},{15,0,246},{18,0,203},{21,0,40},{21,0 +,52},{21,0,57},{24,0,23},{24,0,28},{152,0,30},{134,0,725},{145,11,58},{133,0,888 +},{137,10,874},{4,0,711},{8,10,774},{10,10,670},{140,10,51},{144,11,40},{6,11, +185},{7,11,1899},{139,11,673},{137,10,701},{137,0,440},{4,11,327},{5,11,478},{7, +11,1332},{8,11,753},{140,11,227},{4,10,127},{5,10,350},{6,10,356},{8,10,426},{9, +10,572},{10,10,247},{139,10,312},{5,11,1020},{133,11,1022},{4,11,103},{133,11, +401},{6,0,1913},{6,0,1926},{6,0,1959},{9,0,914},{9,0,939},{9,0,952},{9,0,979},{9 +,0,990},{9,0,998},{9,0,1003},{9,0,1023},{12,0,827},{12,0,834},{12,0,845},{12,0, +912},{12,0,935},{12,0,951},{15,0,172},{15,0,174},{18,0,198},{149,0,63},{5,0,958} +,{5,0,987},{4,11,499},{135,11,1421},{7,0,885},{6,10,59},{6,10,1762},{9,10,603},{ +141,10,397},{10,11,62},{141,11,164},{4,0,847},{135,0,326},{11,0,276},{142,0,293} +,{4,0,65},{5,0,479},{5,0,1004},{7,0,1913},{8,0,317},{9,0,302},{10,0,612},{13,0, +22},{132,11,96},{4,0,261},{135,0,510},{135,0,1514},{6,10,111},{7,10,4},{8,10,163 +},{8,10,776},{138,10,566},{4,0,291},{9,0,515},{12,0,152},{12,0,443},{13,0,392},{ +142,0,357},{7,11,399},{135,11,1492},{4,0,589},{139,0,282},{6,11,563},{135,10, +1994},{5,10,297},{135,10,1038},{4,0,130},{7,0,843},{135,0,1562},{5,0,42},{5,0, +879},{7,0,245},{7,0,324},{7,0,1532},{11,0,463},{11,0,472},{13,0,363},{144,0,52}, +{4,0,134},{133,0,372},{133,0,680},{136,10,363},{6,0,1997},{8,0,935},{136,0,977}, +{4,0,810},{135,0,1634},{135,10,1675},{7,0,1390},{4,11,910},{133,11,832},{7,10, +808},{8,11,266},{139,11,578},{132,0,644},{4,0,982},{138,0,867},{132,10,280},{135 +,0,540},{140,10,54},{135,0,123},{134,0,1978},{4,10,421},{133,10,548},{6,0,623},{ +136,0,789},{4,0,908},{5,0,359},{5,0,508},{6,0,1723},{7,0,343},{7,0,1996},{135,0, +2026},{134,0,1220},{4,0,341},{135,0,480},{6,10,254},{9,10,109},{138,10,103},{134 +,0,888},{8,11,528},{137,11,348},{7,0,1995},{8,0,299},{11,0,890},{12,0,674},{4,11 +,20},{133,11,616},{135,11,1094},{134,10,1630},{4,0,238},{5,0,503},{6,0,179},{7,0 +,2003},{8,0,381},{8,0,473},{9,0,149},{10,0,788},{15,0,45},{15,0,86},{20,0,110},{ +150,0,57},{133,10,671},{4,11,26},{5,11,429},{6,11,245},{7,11,704},{7,11,1379},{ +135,11,1474},{4,0,121},{5,0,156},{5,0,349},{9,0,431},{10,0,605},{142,0,342},{7, +11,943},{139,11,614},{132,10,889},{132,11,621},{7,10,1382},{7,11,1382},{135,10, +1910},{132,10,627},{133,10,775},{133,11,542},{133,11,868},{136,11,433},{6,0,1373 +},{7,0,1011},{11,10,362},{11,10,948},{140,10,388},{6,0,80},{7,0,173},{9,0,547},{ +10,0,730},{14,0,18},{22,0,39},{135,11,1495},{6,0,1694},{135,0,1974},{140,0,196}, +{4,0,923},{6,0,507},{6,0,1711},{7,10,451},{8,10,389},{12,10,490},{13,10,16},{13, +10,215},{13,10,351},{18,10,132},{147,10,125},{6,0,646},{134,0,1047},{135,10,841} +,{136,10,566},{6,0,1611},{135,0,1214},{139,0,926},{132,11,525},{132,0,595},{5,0, +240},{6,0,459},{7,0,12},{7,0,114},{7,0,949},{7,0,1753},{7,0,1805},{8,0,658},{9,0 +,1},{11,0,959},{141,0,446},{5,10,912},{134,10,1695},{132,0,446},{7,11,62},{12,11 +,45},{147,11,112},{5,10,236},{6,10,572},{8,10,492},{11,10,618},{144,10,56},{5,10 +,190},{136,10,318},{135,10,1376},{4,11,223},{6,11,359},{11,11,3},{13,11,108},{14 +,11,89},{144,11,22},{132,11,647},{134,0,490},{134,0,491},{134,0,1584},{135,11, +685},{138,11,220},{7,0,250},{136,0,507},{132,0,158},{4,0,140},{7,0,362},{8,0,209 +},{9,0,10},{9,0,160},{9,0,503},{9,0,614},{10,0,689},{11,0,327},{11,0,553},{11,0, +725},{11,0,767},{12,0,252},{12,0,583},{13,0,192},{14,0,269},{14,0,356},{148,0,50 +},{19,0,1},{19,0,26},{150,0,9},{132,11,109},{6,0,228},{7,0,1341},{9,0,408},{138, +0,343},{4,0,373},{5,0,283},{6,0,480},{7,0,609},{10,0,860},{138,0,878},{6,0,779}, +{134,0,1209},{4,0,557},{7,11,263},{7,11,628},{136,11,349},{132,0,548},{7,0,197}, +{8,0,142},{8,0,325},{9,0,150},{9,0,596},{10,0,350},{10,0,353},{11,0,74},{11,0, +315},{12,0,662},{12,0,681},{14,0,423},{143,0,141},{4,11,40},{10,11,67},{11,11, +117},{11,11,768},{139,11,935},{7,11,992},{8,11,301},{9,11,722},{12,11,63},{13,11 +,29},{14,11,161},{143,11,18},{6,0,1490},{138,11,532},{5,0,580},{7,0,378},{7,0, +674},{7,0,1424},{15,0,83},{16,0,11},{15,11,83},{144,11,11},{6,0,1057},{6,0,1335} +,{10,0,316},{7,10,85},{7,10,247},{8,10,585},{138,10,163},{4,0,169},{5,0,83},{6,0 +,399},{6,0,579},{6,0,1513},{7,0,692},{7,0,846},{7,0,1015},{7,0,1799},{8,0,403},{ +9,0,394},{10,0,133},{12,0,4},{12,0,297},{12,0,452},{16,0,81},{18,0,25},{21,0,14} +,{22,0,12},{151,0,18},{134,0,1106},{7,0,1546},{11,0,299},{142,0,407},{134,0,1192 +},{132,0,177},{5,0,411},{135,0,653},{7,0,439},{10,0,727},{11,0,260},{139,0,684}, +{138,10,145},{147,10,83},{5,0,208},{7,0,753},{135,0,1528},{137,11,617},{135,10, +1922},{135,11,825},{11,0,422},{13,0,389},{4,10,124},{10,10,457},{11,10,121},{11, +10,169},{11,10,870},{12,10,214},{14,10,187},{143,10,77},{11,0,615},{15,0,58},{11 +,11,615},{143,11,58},{9,0,618},{138,0,482},{6,0,1952},{6,0,1970},{142,0,505},{7, +10,1193},{135,11,1838},{133,0,242},{135,10,1333},{6,10,107},{7,10,638},{7,10, +1632},{137,10,396},{133,0,953},{5,10,370},{134,10,1756},{5,11,28},{6,11,204},{10 +,11,320},{10,11,583},{13,11,502},{14,11,72},{14,11,274},{14,11,312},{14,11,344}, +{15,11,159},{16,11,62},{16,11,69},{17,11,30},{18,11,42},{18,11,53},{18,11,84},{ +18,11,140},{19,11,68},{19,11,85},{20,11,5},{20,11,45},{20,11,101},{22,11,7},{150 +,11,20},{4,11,558},{6,11,390},{7,11,162},{7,11,689},{9,11,360},{138,11,653},{11, +0,802},{141,0,67},{133,10,204},{133,0,290},{5,10,970},{134,10,1706},{132,0,380}, +{5,0,52},{7,0,277},{9,0,368},{139,0,791},{5,11,856},{6,11,1672},{6,11,1757},{6, +11,1781},{7,11,1150},{7,11,1425},{7,11,1453},{140,11,513},{5,11,92},{7,10,3},{10 +,11,736},{140,11,102},{4,0,112},{5,0,653},{5,10,483},{5,10,685},{6,10,489},{7,10 +,1204},{136,10,394},{132,10,921},{6,0,1028},{133,10,1007},{5,11,590},{9,11,213}, +{145,11,91},{135,10,1696},{10,0,138},{139,0,476},{5,0,725},{5,0,727},{135,0,1811 +},{4,0,979},{6,0,1821},{6,0,1838},{8,0,876},{8,0,883},{8,0,889},{8,0,893},{8,0, +895},{10,0,934},{12,0,720},{14,0,459},{148,0,123},{135,11,551},{4,0,38},{6,0,435 +},{7,0,307},{7,0,999},{7,0,1481},{7,0,1732},{7,0,1738},{8,0,371},{9,0,414},{11,0 +,316},{12,0,52},{13,0,420},{147,0,100},{135,0,1296},{132,10,712},{134,10,1629},{ +133,0,723},{134,0,651},{136,11,191},{9,11,791},{10,11,93},{11,11,301},{16,11,13} +,{17,11,23},{18,11,135},{19,11,12},{20,11,1},{20,11,12},{148,11,14},{136,11,503} +,{6,11,466},{135,11,671},{6,0,1200},{134,0,1330},{135,0,1255},{134,0,986},{5,0, +109},{6,0,1784},{7,0,1895},{12,0,296},{140,0,302},{135,11,983},{133,10,485},{134 +,0,660},{134,0,800},{5,0,216},{5,0,294},{6,0,591},{7,0,1879},{9,0,141},{9,0,270} +,{9,0,679},{10,0,159},{11,0,197},{11,0,438},{12,0,538},{12,0,559},{14,0,144},{14 +,0,167},{15,0,67},{4,10,285},{5,10,317},{6,10,301},{7,10,7},{8,10,153},{10,10, +766},{11,10,468},{12,10,467},{141,10,143},{136,0,945},{134,0,1090},{137,0,81},{ +12,11,468},{19,11,96},{148,11,24},{134,0,391},{138,11,241},{7,0,322},{136,0,249} +,{134,0,1412},{135,11,795},{5,0,632},{138,0,526},{136,10,819},{6,0,144},{7,0,948 +},{7,0,1042},{8,0,235},{8,0,461},{9,0,453},{9,0,796},{10,0,354},{17,0,77},{135, +11,954},{139,10,917},{6,0,940},{134,0,1228},{4,0,362},{7,0,52},{135,0,303},{6,11 +,549},{8,11,34},{8,11,283},{9,11,165},{138,11,475},{7,11,370},{7,11,1007},{7,11, +1177},{135,11,1565},{5,11,652},{5,11,701},{135,11,449},{5,0,196},{6,0,486},{7,0, +212},{8,0,309},{136,0,346},{6,10,1719},{6,10,1735},{7,10,2016},{7,10,2020},{8,10 +,837},{137,10,852},{6,11,159},{6,11,364},{7,11,516},{7,11,1439},{137,11,518},{ +135,0,1912},{135,0,1290},{132,0,686},{141,11,151},{138,0,625},{136,0,706},{138, +10,568},{139,0,412},{4,0,30},{133,0,43},{8,10,67},{138,10,419},{7,0,967},{141,0, +11},{12,0,758},{14,0,441},{142,0,462},{10,10,657},{14,10,297},{142,10,361},{139, +10,729},{4,0,220},{135,0,1535},{7,11,501},{9,11,111},{10,11,141},{11,11,332},{13 +,11,43},{13,11,429},{14,11,130},{14,11,415},{145,11,102},{4,0,950},{6,0,1859},{7 +,0,11},{8,0,873},{12,0,710},{12,0,718},{12,0,748},{12,0,765},{148,0,124},{5,11, +149},{5,11,935},{136,11,233},{142,11,291},{134,0,1579},{7,0,890},{8,10,51},{9,10 +,868},{10,10,833},{12,10,481},{12,10,570},{148,10,106},{141,0,2},{132,10,445},{ +136,11,801},{135,0,1774},{7,0,1725},{138,0,393},{5,0,263},{134,0,414},{132,11, +322},{133,10,239},{7,0,456},{7,10,1990},{8,10,130},{139,10,720},{137,0,818},{5, +10,123},{6,10,530},{7,10,348},{135,10,1419},{135,10,2024},{6,0,178},{6,0,1750},{ +8,0,251},{9,0,690},{10,0,155},{10,0,196},{10,0,373},{11,0,698},{13,0,155},{148,0 +,93},{5,0,97},{137,0,393},{134,0,674},{11,0,223},{140,0,168},{132,10,210},{139, +11,464},{6,0,1639},{146,0,159},{139,11,2},{7,0,934},{8,0,647},{17,0,97},{19,0,59 +},{150,0,2},{132,0,191},{5,0,165},{9,0,346},{10,0,655},{11,0,885},{4,10,430},{ +135,11,357},{133,0,877},{5,10,213},{133,11,406},{8,0,128},{139,0,179},{6,11,69}, +{135,11,117},{135,0,1297},{11,11,43},{13,11,72},{141,11,142},{135,11,1830},{142, +0,164},{5,0,57},{6,0,101},{6,0,586},{6,0,1663},{7,0,132},{7,0,1154},{7,0,1415},{ +7,0,1507},{12,0,493},{15,0,105},{151,0,15},{5,0,459},{7,0,1073},{8,0,241},{136,0 +,334},{133,11,826},{133,10,108},{5,10,219},{10,11,132},{11,11,191},{11,11,358},{ +139,11,460},{6,0,324},{6,0,520},{7,0,338},{7,0,1729},{8,0,228},{139,0,750},{21,0 +,30},{22,0,53},{4,10,193},{5,10,916},{7,10,364},{10,10,398},{10,10,726},{11,10, +317},{11,10,626},{12,10,142},{12,10,288},{12,10,678},{13,10,313},{15,10,113},{ +146,10,114},{6,11,110},{135,11,1681},{135,0,910},{6,10,241},{7,10,907},{8,10,832 +},{9,10,342},{10,10,729},{11,10,284},{11,10,445},{11,10,651},{11,10,863},{13,10, +398},{146,10,99},{7,0,705},{9,0,734},{5,11,1000},{7,11,733},{137,11,583},{4,0,73 +},{6,0,612},{7,0,927},{7,0,1822},{8,0,217},{9,0,765},{9,0,766},{10,0,408},{11,0, +51},{11,0,793},{12,0,266},{15,0,158},{20,0,89},{150,0,32},{7,0,1330},{4,11,297}, +{6,11,529},{7,11,152},{7,11,713},{7,11,1845},{8,11,710},{8,11,717},{140,11,639}, +{5,0,389},{136,0,636},{134,0,1409},{4,10,562},{9,10,254},{139,10,879},{134,0,893 +},{132,10,786},{4,11,520},{135,11,575},{136,0,21},{140,0,721},{136,0,959},{7,11, +1428},{7,11,1640},{9,11,169},{9,11,182},{9,11,367},{9,11,478},{9,11,506},{9,11, +551},{9,11,648},{9,11,651},{9,11,697},{9,11,705},{9,11,725},{9,11,787},{9,11,794 +},{10,11,198},{10,11,214},{10,11,267},{10,11,275},{10,11,456},{10,11,551},{10,11 +,561},{10,11,613},{10,11,627},{10,11,668},{10,11,675},{10,11,691},{10,11,695},{ +10,11,707},{10,11,715},{11,11,183},{11,11,201},{11,11,244},{11,11,262},{11,11, +352},{11,11,439},{11,11,493},{11,11,572},{11,11,591},{11,11,608},{11,11,611},{11 +,11,646},{11,11,674},{11,11,711},{11,11,751},{11,11,761},{11,11,776},{11,11,785} +,{11,11,850},{11,11,853},{11,11,862},{11,11,865},{11,11,868},{11,11,898},{11,11, +902},{11,11,903},{11,11,910},{11,11,932},{11,11,942},{11,11,957},{11,11,967},{11 +,11,972},{12,11,148},{12,11,195},{12,11,220},{12,11,237},{12,11,318},{12,11,339} +,{12,11,393},{12,11,445},{12,11,450},{12,11,474},{12,11,509},{12,11,533},{12,11, +591},{12,11,594},{12,11,597},{12,11,621},{12,11,633},{12,11,642},{13,11,59},{13, +11,60},{13,11,145},{13,11,239},{13,11,250},{13,11,273},{13,11,329},{13,11,344},{ +13,11,365},{13,11,372},{13,11,387},{13,11,403},{13,11,414},{13,11,456},{13,11, +478},{13,11,483},{13,11,489},{14,11,55},{14,11,57},{14,11,81},{14,11,90},{14,11, +148},{14,11,239},{14,11,266},{14,11,321},{14,11,326},{14,11,327},{14,11,330},{14 +,11,347},{14,11,355},{14,11,401},{14,11,411},{14,11,414},{14,11,416},{14,11,420} +,{15,11,61},{15,11,74},{15,11,87},{15,11,88},{15,11,94},{15,11,96},{15,11,116},{ +15,11,149},{15,11,154},{16,11,50},{16,11,63},{16,11,73},{17,11,2},{17,11,66},{17 +,11,92},{17,11,103},{17,11,112},{18,11,50},{18,11,54},{18,11,82},{18,11,86},{18, +11,90},{18,11,111},{18,11,115},{18,11,156},{19,11,40},{19,11,79},{20,11,78},{149 +,11,22},{137,11,170},{134,0,1433},{135,11,1307},{139,11,411},{5,0,189},{7,0,442} +,{7,0,443},{8,0,281},{12,0,174},{141,0,261},{6,10,216},{7,10,901},{7,10,1343},{ +136,10,493},{5,11,397},{6,11,154},{7,10,341},{7,11,676},{8,11,443},{8,11,609},{9 +,11,24},{9,11,325},{10,11,35},{11,10,219},{11,11,535},{11,11,672},{11,11,1018},{ +12,11,637},{144,11,30},{6,0,2},{7,0,191},{7,0,446},{7,0,1262},{7,0,1737},{8,0,22 +},{8,0,270},{8,0,612},{9,0,4},{9,0,312},{9,0,436},{9,0,626},{10,0,216},{10,0,311 +},{10,0,521},{10,0,623},{11,0,72},{11,0,330},{11,0,455},{12,0,321},{12,0,504},{ +12,0,530},{12,0,543},{13,0,17},{13,0,156},{13,0,334},{14,0,131},{17,0,60},{148,0 +,64},{7,0,354},{10,0,410},{139,0,815},{139,10,130},{7,10,1734},{137,11,631},{12, +0,425},{15,0,112},{10,10,115},{11,10,420},{13,10,404},{14,10,346},{143,10,54},{6 +,0,60},{6,0,166},{7,0,374},{7,0,670},{7,0,1327},{8,0,411},{8,0,435},{9,0,653},{9 +,0,740},{10,0,385},{11,0,222},{11,0,324},{11,0,829},{140,0,611},{7,0,1611},{13,0 +,14},{15,0,44},{19,0,13},{148,0,76},{133,11,981},{4,11,56},{7,11,1791},{8,11,607 +},{8,11,651},{11,11,465},{11,11,835},{12,11,337},{141,11,480},{6,0,1478},{5,10, +1011},{136,10,701},{139,0,596},{5,0,206},{134,0,398},{4,10,54},{5,10,666},{7,10, +1039},{7,10,1130},{9,10,195},{138,10,302},{7,0,50},{9,11,158},{138,11,411},{135, +11,1120},{6,0,517},{7,0,1159},{10,0,621},{11,0,192},{134,10,1669},{4,0,592},{6,0 +,600},{135,0,1653},{10,0,223},{139,0,645},{136,11,139},{7,0,64},{136,0,245},{142 +,0,278},{6,11,622},{135,11,1030},{136,0,604},{134,0,1502},{138,0,265},{141,11, +168},{7,0,1763},{140,0,310},{7,10,798},{139,11,719},{7,11,160},{10,11,624},{142, +11,279},{132,11,363},{7,10,122},{9,10,259},{10,10,84},{11,10,470},{12,10,541},{ +141,10,379},{5,0,129},{6,0,61},{135,0,947},{134,0,1356},{135,11,1191},{13,0,505} +,{141,0,506},{11,0,1000},{5,10,82},{5,10,131},{7,10,1755},{8,10,31},{9,10,168},{ +9,10,764},{139,10,869},{134,0,966},{134,10,605},{134,11,292},{5,11,177},{6,11, +616},{7,11,827},{9,11,525},{138,11,656},{135,11,1486},{138,11,31},{5,10,278},{ +137,10,68},{4,10,163},{5,10,201},{5,10,307},{5,10,310},{6,10,335},{7,10,284},{ +136,10,165},{6,0,839},{135,10,1660},{136,10,781},{6,10,33},{135,10,1244},{133,0, +637},{4,11,161},{133,11,631},{137,0,590},{7,10,1953},{136,10,720},{5,0,280},{7,0 +,1226},{138,10,203},{134,0,1386},{5,0,281},{6,0,1026},{6,10,326},{7,10,677},{137 +,10,425},{7,11,1557},{135,11,1684},{135,0,1064},{9,11,469},{9,11,709},{12,11,512 +},{14,11,65},{145,11,12},{134,0,917},{10,11,229},{11,11,73},{11,11,376},{139,11, +433},{7,0,555},{9,0,192},{13,0,30},{13,0,49},{15,0,150},{16,0,76},{20,0,52},{7, +10,1316},{7,10,1412},{7,10,1839},{9,10,589},{11,10,241},{11,10,676},{11,10,811}, +{11,10,891},{12,10,140},{12,10,346},{12,10,479},{13,10,381},{14,10,188},{146,10, +30},{149,0,15},{6,0,1882},{6,0,1883},{6,0,1897},{9,0,945},{9,0,1014},{9,0,1020}, +{12,0,823},{12,0,842},{12,0,866},{12,0,934},{15,0,242},{146,0,208},{6,0,965},{ +134,0,1499},{7,0,33},{7,0,120},{8,0,489},{9,0,319},{10,0,820},{11,0,1004},{12,0, +379},{12,0,679},{13,0,117},{13,0,412},{14,0,25},{15,0,52},{15,0,161},{16,0,47},{ +149,0,2},{6,11,558},{7,11,651},{8,11,421},{9,11,0},{138,11,34},{4,0,937},{5,0, +801},{7,0,473},{5,10,358},{7,10,1184},{10,10,662},{13,10,212},{13,10,304},{13,10 +,333},{145,10,98},{132,0,877},{6,0,693},{134,0,824},{132,0,365},{7,11,1832},{138 +,11,374},{5,0,7},{139,0,774},{4,0,734},{5,0,662},{134,0,430},{4,0,746},{135,0, +1090},{5,0,360},{8,0,237},{10,0,231},{147,0,124},{138,11,348},{6,11,6},{7,11,81} +,{7,11,771},{7,11,1731},{9,11,405},{138,11,421},{6,0,740},{137,0,822},{133,10, +946},{7,0,1485},{136,0,929},{7,10,411},{8,10,631},{9,10,323},{10,10,355},{11,10, +491},{12,10,143},{12,10,402},{13,10,73},{14,10,408},{15,10,107},{146,10,71},{135 +,10,590},{5,11,881},{133,11,885},{150,11,25},{4,0,852},{5,11,142},{134,11,546},{ +7,10,1467},{8,10,328},{10,10,544},{11,10,955},{13,10,320},{145,10,83},{9,0,17},{ +10,0,291},{11,10,511},{13,10,394},{14,10,298},{14,10,318},{146,10,103},{5,11,466 +},{11,11,571},{12,11,198},{13,11,283},{14,11,186},{15,11,21},{143,11,103},{134,0 +,1001},{4,11,185},{5,11,257},{5,11,839},{5,11,936},{7,11,171},{9,11,399},{10,11, +258},{10,11,395},{10,11,734},{11,11,1014},{12,11,23},{13,11,350},{14,11,150},{ +147,11,6},{143,0,35},{132,0,831},{5,10,835},{134,10,483},{4,0,277},{5,0,608},{6, +0,493},{7,0,457},{12,0,384},{7,11,404},{7,11,1377},{7,11,1430},{7,11,2017},{8,11 +,149},{8,11,239},{8,11,512},{8,11,793},{8,11,818},{9,11,474},{9,11,595},{10,11, +122},{10,11,565},{10,11,649},{10,11,783},{11,11,239},{11,11,295},{11,11,447},{11 +,11,528},{11,11,639},{11,11,800},{11,11,936},{12,11,25},{12,11,73},{12,11,77},{ +12,11,157},{12,11,316},{12,11,390},{12,11,391},{12,11,394},{12,11,395},{12,11, +478},{12,11,503},{12,11,592},{12,11,680},{13,11,50},{13,11,53},{13,11,132},{13, +11,198},{13,11,275},{13,11,322},{13,11,415},{14,11,71},{14,11,257},{14,11,395},{ +15,11,71},{15,11,136},{17,11,123},{18,11,93},{147,11,58},{134,0,1351},{7,0,27},{ +135,0,316},{136,11,712},{136,0,984},{133,0,552},{137,0,264},{132,0,401},{6,0,710 +},{6,0,1111},{134,0,1343},{134,0,1211},{9,0,543},{10,0,524},{11,0,108},{11,0,653 +},{12,0,524},{13,0,123},{14,0,252},{16,0,18},{19,0,38},{20,0,26},{20,0,65},{21,0 +,3},{151,0,11},{4,0,205},{5,0,623},{7,0,104},{8,0,519},{137,0,716},{132,10,677}, +{4,11,377},{152,11,13},{135,11,1673},{7,0,579},{9,0,41},{9,0,244},{9,0,669},{10, +0,5},{11,0,861},{11,0,951},{139,0,980},{132,0,717},{136,0,1011},{132,0,805},{4, +11,180},{135,11,1906},{132,10,777},{132,10,331},{132,0,489},{6,0,1024},{4,11,491 +},{133,10,747},{135,11,1182},{4,11,171},{138,11,234},{4,11,586},{7,11,1186},{138 +,11,631},{135,0,892},{135,11,336},{9,11,931},{10,11,334},{148,11,71},{137,0,473} +,{6,0,864},{12,0,659},{139,11,926},{7,0,819},{9,0,26},{9,0,392},{10,0,152},{10,0 +,226},{11,0,19},{12,0,276},{12,0,426},{12,0,589},{13,0,460},{15,0,97},{19,0,48}, +{148,0,104},{135,0,51},{133,10,326},{4,10,691},{146,10,16},{9,0,130},{11,0,765}, +{10,10,680},{10,10,793},{141,10,357},{133,11,765},{8,0,229},{6,10,32},{7,10,385} +,{7,10,757},{7,10,1916},{8,10,94},{8,10,711},{9,10,541},{10,10,162},{10,10,795}, +{11,10,989},{11,10,1010},{12,10,14},{142,10,308},{7,11,474},{137,11,578},{132,0, +674},{132,0,770},{5,0,79},{7,0,1027},{7,0,1477},{139,0,52},{133,11,424},{134,0, +1666},{6,0,409},{6,10,349},{6,10,1682},{7,10,1252},{8,10,112},{8,11,714},{9,10, +435},{9,10,668},{10,10,290},{10,10,319},{10,10,815},{11,10,180},{11,10,837},{12, +10,240},{13,10,152},{13,10,219},{142,10,158},{5,0,789},{134,0,195},{4,0,251},{4, +0,688},{7,0,513},{135,0,1284},{132,10,581},{9,11,420},{10,11,269},{10,11,285},{ +10,11,576},{11,11,397},{13,11,175},{145,11,90},{6,10,126},{7,10,573},{8,10,397}, +{142,10,44},{132,11,429},{133,0,889},{4,0,160},{5,0,330},{7,0,1434},{136,0,174}, +{7,11,18},{7,11,699},{7,11,1966},{8,11,752},{9,11,273},{9,11,412},{9,11,703},{10 +,11,71},{10,11,427},{10,11,508},{146,11,97},{6,0,872},{134,0,899},{133,10,926},{ +134,0,1126},{134,0,918},{4,11,53},{5,11,186},{135,11,752},{7,0,268},{136,0,569}, +{134,0,1224},{6,0,1361},{7,10,1232},{137,10,531},{8,11,575},{10,11,289},{139,11, +319},{133,10,670},{132,11,675},{133,0,374},{135,10,1957},{133,0,731},{11,0,190}, +{15,0,49},{11,11,190},{143,11,49},{4,0,626},{5,0,506},{5,0,642},{6,0,425},{10,0, +202},{139,0,141},{137,0,444},{7,10,242},{135,10,1942},{6,11,209},{8,11,468},{9, +11,210},{11,11,36},{12,11,28},{12,11,630},{13,11,21},{13,11,349},{14,11,7},{145, +11,13},{4,11,342},{135,11,1179},{5,10,834},{7,10,1202},{8,10,14},{9,10,481},{137 +,10,880},{4,11,928},{133,11,910},{4,11,318},{4,11,496},{7,11,856},{139,11,654},{ +136,0,835},{7,0,1526},{138,10,465},{151,0,17},{135,0,477},{4,10,357},{6,10,172}, +{7,10,143},{137,10,413},{6,0,1374},{138,0,994},{18,0,76},{132,10,590},{7,0,287}, +{8,0,355},{9,0,293},{137,0,743},{134,0,1389},{7,11,915},{8,11,247},{147,11,0},{4 +,11,202},{5,11,382},{6,11,454},{7,11,936},{7,11,1803},{8,11,758},{9,11,375},{9, +11,895},{10,11,743},{10,11,792},{11,11,978},{11,11,1012},{142,11,109},{5,0,384}, +{8,0,455},{140,0,48},{132,11,390},{5,10,169},{7,10,333},{136,10,45},{5,0,264},{ +134,0,184},{138,11,791},{133,11,717},{132,10,198},{6,11,445},{7,11,332},{137,11, +909},{136,0,1001},{4,10,24},{5,10,140},{5,10,185},{7,10,1500},{11,10,565},{139, +10,838},{134,11,578},{5,0,633},{6,0,28},{135,0,1323},{132,0,851},{136,11,267},{7 +,0,359},{8,0,243},{140,0,175},{4,10,334},{133,10,593},{141,11,87},{136,11,766},{ +10,0,287},{12,0,138},{10,11,287},{140,11,138},{4,0,105},{132,0,740},{140,10,116} +,{134,0,857},{135,11,1841},{6,0,1402},{137,0,819},{132,11,584},{132,10,709},{133 +,10,897},{5,0,224},{13,0,174},{146,0,52},{135,10,1840},{4,10,608},{133,10,497},{ +139,11,60},{4,0,758},{135,0,1649},{4,11,226},{4,11,326},{135,11,1770},{5,11,426} +,{8,11,30},{9,11,2},{11,11,549},{147,11,122},{135,10,2039},{6,10,540},{136,10, +136},{4,0,573},{8,0,655},{4,10,897},{133,10,786},{7,0,351},{139,0,128},{133,10, +999},{4,10,299},{135,10,1004},{133,0,918},{132,11,345},{4,11,385},{7,11,265},{ +135,11,587},{133,10,456},{136,10,180},{6,0,687},{134,0,1537},{4,11,347},{5,11, +423},{5,11,996},{135,11,1329},{132,10,755},{7,11,1259},{9,11,125},{11,11,65},{ +140,11,285},{5,11,136},{6,11,136},{136,11,644},{134,0,1525},{4,0,1009},{135,0, +1139},{139,10,338},{132,0,340},{135,10,1464},{8,0,847},{10,0,861},{10,0,876},{10 +,0,889},{10,0,922},{10,0,929},{10,0,933},{12,0,784},{140,0,791},{139,0,176},{9, +11,134},{10,11,2},{10,11,27},{10,11,333},{11,11,722},{143,11,1},{4,11,433},{133, +11,719},{5,0,985},{7,0,509},{7,0,529},{145,0,96},{132,0,615},{4,10,890},{5,10, +805},{5,10,819},{5,10,961},{6,10,396},{6,10,1631},{6,10,1678},{7,10,1967},{7,10, +2041},{9,10,630},{11,10,8},{11,10,1019},{12,10,176},{13,10,225},{14,10,292},{149 +,10,24},{135,0,1919},{134,0,1131},{144,11,21},{144,11,51},{135,10,1815},{4,0,247 +},{7,10,1505},{10,10,190},{10,10,634},{11,10,792},{12,10,358},{140,10,447},{5,10 +,0},{6,10,536},{7,10,604},{13,10,445},{145,10,126},{4,0,184},{5,0,390},{6,0,337} +,{7,0,23},{7,0,494},{7,0,618},{7,0,1456},{8,0,27},{8,0,599},{10,0,153},{139,0, +710},{6,10,232},{6,10,412},{7,10,1074},{8,10,9},{8,10,157},{8,10,786},{9,10,196} +,{9,10,352},{9,10,457},{10,10,337},{11,10,232},{11,10,877},{12,10,480},{140,10, +546},{13,0,38},{135,10,958},{4,10,382},{136,10,579},{4,10,212},{135,10,1206},{4, +11,555},{8,11,536},{138,11,288},{11,11,139},{139,11,171},{9,11,370},{138,11,90}, +{132,0,1015},{134,0,1088},{5,10,655},{135,11,977},{134,0,1585},{17,10,67},{147, +10,74},{10,0,227},{11,0,497},{11,0,709},{140,0,415},{6,0,360},{7,0,1664},{136,0, +478},{7,0,95},{6,10,231},{136,10,423},{140,11,65},{4,11,257},{135,11,2031},{135, +11,1768},{133,10,300},{139,11,211},{136,0,699},{6,10,237},{7,10,611},{8,10,100}, +{9,10,416},{11,10,335},{12,10,173},{146,10,101},{14,0,26},{146,0,150},{6,0,581}, +{135,0,1119},{135,10,1208},{132,0,739},{6,11,83},{6,11,1733},{135,11,1389},{137, +0,869},{4,0,67},{5,0,422},{7,0,1037},{7,0,1289},{7,0,1555},{9,0,741},{145,0,108} +,{133,10,199},{12,10,427},{146,10,38},{136,0,464},{142,0,42},{10,0,96},{8,11,501 +},{137,11,696},{134,11,592},{4,0,512},{4,0,966},{5,0,342},{6,0,1855},{8,0,869},{ +8,0,875},{8,0,901},{144,0,26},{8,0,203},{11,0,823},{11,0,846},{12,0,482},{13,0, +277},{13,0,302},{13,0,464},{14,0,205},{142,0,221},{4,0,449},{133,0,718},{7,11, +1718},{9,11,95},{9,11,274},{10,11,279},{10,11,317},{10,11,420},{11,11,303},{11, +11,808},{12,11,134},{12,11,367},{13,11,149},{13,11,347},{14,11,349},{14,11,406}, +{18,11,22},{18,11,89},{18,11,122},{147,11,47},{133,11,26},{4,0,355},{6,0,311},{9 +,0,256},{138,0,404},{132,11,550},{10,0,758},{6,10,312},{6,10,1715},{10,10,584},{ +11,10,546},{11,10,692},{12,10,259},{12,10,295},{13,10,46},{141,10,154},{136,11, +822},{5,0,827},{4,11,902},{5,11,809},{6,11,122},{135,11,896},{5,0,64},{140,0,581 +},{4,0,442},{6,0,739},{7,0,1047},{7,0,1352},{7,0,1643},{7,11,1911},{9,11,449},{ +10,11,192},{138,11,740},{135,11,262},{132,10,588},{133,11,620},{5,0,977},{6,0, +288},{7,0,528},{4,11,34},{5,11,574},{7,11,279},{7,11,1624},{136,11,601},{6,0, +1375},{4,10,231},{5,10,61},{6,10,104},{7,10,729},{7,10,964},{7,10,1658},{140,10, +414},{6,10,263},{138,10,757},{132,10,320},{4,0,254},{7,0,1309},{5,11,332},{135, +11,1309},{6,11,261},{8,11,182},{139,11,943},{132,10,225},{6,0,12},{135,0,1219},{ +4,0,275},{12,0,376},{6,11,1721},{141,11,490},{4,11,933},{133,11,880},{6,0,951},{ +6,0,1109},{6,0,1181},{7,0,154},{4,10,405},{7,10,817},{14,10,58},{17,10,37},{146, +10,124},{6,0,1520},{133,10,974},{134,0,1753},{6,0,369},{6,0,502},{7,0,1036},{8,0 +,348},{9,0,452},{10,0,26},{11,0,224},{11,0,387},{11,0,772},{12,0,95},{12,0,629}, +{13,0,195},{13,0,207},{13,0,241},{14,0,260},{14,0,270},{143,0,140},{132,0,269},{ +5,0,480},{7,0,532},{7,0,1197},{7,0,1358},{8,0,291},{11,0,349},{142,0,396},{5,10, +235},{7,10,1239},{11,10,131},{140,10,370},{7,10,956},{7,10,1157},{7,10,1506},{7, +10,1606},{7,10,1615},{7,10,1619},{7,10,1736},{7,10,1775},{8,10,590},{9,10,324},{ +9,10,736},{9,10,774},{9,10,776},{9,10,784},{10,10,567},{10,10,708},{11,10,518},{ +11,10,613},{11,10,695},{11,10,716},{11,10,739},{11,10,770},{11,10,771},{11,10, +848},{11,10,857},{11,10,931},{11,10,947},{12,10,326},{12,10,387},{12,10,484},{12 +,10,528},{12,10,552},{12,10,613},{13,10,189},{13,10,256},{13,10,340},{13,10,432} +,{13,10,436},{13,10,440},{13,10,454},{14,10,174},{14,10,220},{14,10,284},{14,10, +390},{145,10,121},{8,11,598},{9,11,664},{138,11,441},{9,10,137},{138,10,221},{ +133,11,812},{148,0,15},{134,0,1341},{6,0,1017},{4,11,137},{7,11,1178},{135,11, +1520},{7,10,390},{138,10,140},{7,11,1260},{135,11,1790},{137,11,191},{135,10, +1144},{6,0,1810},{7,0,657},{8,0,886},{10,0,857},{14,0,440},{144,0,96},{8,0,533}, +{6,11,1661},{7,11,1975},{7,11,2009},{135,11,2011},{6,0,1453},{134,10,464},{132, +11,715},{5,10,407},{11,10,204},{11,10,243},{11,10,489},{12,10,293},{19,10,37},{ +20,10,73},{150,10,38},{133,11,703},{4,0,211},{7,0,1483},{5,10,325},{8,10,5},{8, +10,227},{9,10,105},{10,10,585},{140,10,614},{4,0,332},{5,0,335},{6,0,238},{7,0, +269},{7,0,811},{7,0,1797},{8,0,836},{9,0,507},{141,0,242},{5,11,89},{7,11,1915}, +{9,11,185},{9,11,235},{9,11,496},{10,11,64},{10,11,270},{10,11,403},{10,11,469}, +{10,11,529},{10,11,590},{11,11,140},{11,11,860},{13,11,1},{13,11,422},{14,11,341 +},{14,11,364},{17,11,93},{18,11,113},{19,11,97},{147,11,113},{133,11,695},{16,0, +19},{5,11,6},{6,11,183},{6,10,621},{7,11,680},{7,11,978},{7,11,1013},{7,11,1055} +,{12,11,230},{13,11,172},{13,10,504},{146,11,29},{136,0,156},{133,0,1009},{6,11, +29},{139,11,63},{134,0,820},{134,10,218},{7,10,454},{7,10,782},{8,10,768},{140, +10,686},{5,0,228},{6,0,203},{7,0,156},{8,0,347},{9,0,265},{18,0,39},{20,0,54},{ +21,0,31},{22,0,3},{23,0,0},{15,11,8},{18,11,39},{20,11,54},{21,11,31},{22,11,3}, +{151,11,0},{7,0,1131},{135,0,1468},{144,10,0},{134,0,1276},{10,10,676},{140,10, +462},{132,11,311},{134,11,1740},{7,11,170},{8,11,90},{8,11,177},{8,11,415},{11, +11,714},{142,11,281},{134,10,164},{6,0,1792},{138,0,849},{150,10,50},{5,0,291},{ +5,0,318},{7,0,765},{9,0,389},{12,0,548},{8,11,522},{142,11,328},{11,11,91},{13, +11,129},{15,11,101},{145,11,125},{4,11,494},{6,11,74},{7,11,44},{7,11,407},{8,11 +,551},{12,11,17},{15,11,5},{148,11,11},{4,11,276},{133,11,296},{6,10,343},{7,10, +195},{7,11,1777},{9,10,226},{10,10,197},{10,10,575},{11,10,502},{139,10,899},{10 +,0,525},{139,0,82},{14,0,453},{4,11,7},{5,11,90},{5,11,158},{6,11,542},{7,11,221 +},{7,11,1574},{9,11,490},{10,11,540},{11,11,443},{139,11,757},{135,0,666},{22,10 +,29},{150,11,29},{4,0,422},{147,10,8},{5,0,355},{145,0,0},{6,0,1873},{9,0,918},{ +7,11,588},{9,11,175},{138,11,530},{143,11,31},{11,0,165},{7,10,1125},{9,10,143}, +{14,10,405},{150,10,21},{9,0,260},{137,0,905},{5,11,872},{6,11,57},{6,11,479},{6 +,11,562},{7,11,471},{7,11,1060},{9,11,447},{9,11,454},{141,11,6},{138,11,704},{ +133,0,865},{5,0,914},{134,0,1625},{133,0,234},{7,0,1383},{5,11,31},{6,11,614},{ +145,11,61},{7,11,1200},{138,11,460},{6,11,424},{135,11,1866},{136,0,306},{5,10, +959},{12,11,30},{13,11,148},{14,11,87},{14,11,182},{16,11,42},{18,11,92},{148,11 +,70},{6,0,1919},{6,0,1921},{9,0,923},{9,0,930},{9,0,941},{9,0,949},{9,0,987},{9, +0,988},{9,0,992},{12,0,802},{12,0,815},{12,0,856},{12,0,885},{12,0,893},{12,0, +898},{12,0,919},{12,0,920},{12,0,941},{12,0,947},{15,0,183},{15,0,185},{15,0,189 +},{15,0,197},{15,0,202},{15,0,233},{18,0,218},{18,0,219},{18,0,233},{143,11,156} +,{135,10,1759},{136,10,173},{13,0,163},{13,0,180},{18,0,78},{20,0,35},{5,11,13}, +{134,11,142},{134,10,266},{6,11,97},{7,11,116},{8,11,322},{8,11,755},{9,11,548}, +{10,11,714},{11,11,884},{141,11,324},{135,0,1312},{9,0,814},{137,11,676},{133,0, +707},{135,0,1493},{6,0,421},{7,0,61},{7,0,1540},{10,0,11},{138,0,501},{12,0,733} +,{12,0,766},{7,11,866},{135,11,1163},{137,0,341},{142,0,98},{145,11,115},{135,11 +,1111},{136,10,300},{136,0,1014},{8,11,1},{9,11,112},{138,11,326},{132,11,730},{ +5,11,488},{6,11,527},{7,11,489},{7,11,1636},{8,11,121},{8,11,144},{8,11,359},{9, +11,193},{9,11,241},{9,11,336},{9,11,882},{11,11,266},{11,11,372},{11,11,944},{12 +,11,401},{140,11,641},{6,0,971},{134,0,1121},{6,0,102},{7,0,72},{15,0,142},{147, +0,67},{151,0,30},{135,0,823},{134,0,1045},{5,10,427},{5,10,734},{7,10,478},{136, +10,52},{7,0,1930},{11,10,217},{142,10,165},{6,0,1512},{135,0,1870},{9,11,31},{10 +,11,244},{10,11,699},{12,11,149},{141,11,497},{133,11,377},{145,11,101},{10,11, +158},{13,11,13},{13,11,137},{13,11,258},{14,11,111},{14,11,225},{14,11,253},{14, +11,304},{14,11,339},{14,11,417},{146,11,33},{6,0,87},{6,10,1734},{7,10,20},{7,10 +,1056},{8,10,732},{9,10,406},{9,10,911},{138,10,694},{134,0,1243},{137,0,245},{7 +,0,68},{8,0,48},{8,0,88},{8,0,582},{8,0,681},{9,0,373},{9,0,864},{11,0,157},{11, +0,336},{11,0,843},{148,0,27},{8,11,663},{144,11,8},{133,10,613},{4,0,88},{5,0, +137},{5,0,174},{5,0,777},{6,0,1664},{6,0,1725},{7,0,77},{7,0,426},{7,0,1317},{7, +0,1355},{8,0,126},{8,0,563},{9,0,523},{9,0,750},{10,0,310},{10,0,836},{11,0,42}, +{11,0,318},{11,0,731},{12,0,68},{12,0,92},{12,0,507},{12,0,692},{13,0,81},{13,0, +238},{13,0,374},{14,0,436},{18,0,138},{19,0,78},{19,0,111},{20,0,55},{20,0,77},{ +148,0,92},{141,0,418},{4,0,938},{137,0,625},{138,0,351},{5,11,843},{7,10,32},{7, +10,984},{8,10,85},{8,10,709},{9,10,579},{9,10,847},{9,10,856},{10,10,799},{11,10 +,258},{11,10,1007},{12,10,331},{12,10,615},{13,10,188},{13,10,435},{14,10,8},{15 +,10,165},{16,10,27},{148,10,40},{6,0,1668},{7,0,1499},{8,0,117},{9,0,314},{138,0 +,174},{135,0,707},{132,11,554},{133,11,536},{5,0,403},{5,11,207},{9,11,79},{11, +11,625},{145,11,7},{132,11,424},{136,11,785},{4,10,167},{135,10,82},{9,0,7},{23, +0,6},{9,11,7},{151,11,6},{6,0,282},{5,10,62},{6,10,534},{7,10,74},{7,10,678},{7, +10,684},{7,10,1043},{7,10,1072},{8,10,280},{8,10,541},{8,10,686},{9,10,258},{10, +10,519},{11,10,252},{140,10,282},{138,10,33},{132,10,359},{4,0,44},{5,0,311},{6, +0,156},{7,0,639},{7,0,762},{7,0,1827},{9,0,8},{9,0,462},{148,0,83},{7,11,769},{9 +,11,18},{138,11,358},{4,0,346},{7,0,115},{9,0,180},{9,0,456},{10,0,363},{4,11, +896},{134,11,1777},{133,10,211},{7,0,761},{7,0,1051},{137,0,545},{6,10,145},{141 +,10,336},{7,11,750},{9,11,223},{11,11,27},{11,11,466},{12,11,624},{14,11,265},{ +146,11,61},{6,0,752},{6,0,768},{6,0,1195},{6,0,1254},{6,0,1619},{137,0,835},{6,0 +,1936},{8,0,930},{136,0,960},{132,10,263},{132,11,249},{12,0,653},{132,10,916},{ +4,11,603},{133,11,661},{8,0,344},{4,11,11},{6,11,128},{7,11,231},{7,11,1533},{ +138,11,725},{134,0,1483},{134,0,875},{6,0,185},{7,0,1899},{9,0,875},{139,0,673}, +{15,10,155},{144,10,79},{7,0,93},{7,0,210},{7,0,1223},{8,0,451},{8,0,460},{11,0, +353},{11,0,475},{4,10,599},{6,10,1634},{7,10,67},{7,10,691},{7,10,979},{7,10, +1697},{8,10,207},{8,10,214},{8,10,231},{8,10,294},{8,10,336},{8,10,428},{8,10, +471},{8,10,622},{8,10,626},{8,10,679},{8,10,759},{8,10,829},{9,10,11},{9,10,246} +,{9,10,484},{9,10,573},{9,10,706},{9,10,762},{9,10,798},{9,10,855},{9,10,870},{9 +,10,912},{10,10,303},{10,10,335},{10,10,424},{10,10,461},{10,10,543},{10,10,759} +,{10,10,814},{11,10,59},{11,10,235},{11,10,590},{11,10,929},{11,10,963},{11,10, +987},{12,10,114},{12,10,182},{12,10,226},{12,10,332},{12,10,439},{12,10,575},{12 +,10,598},{12,10,675},{13,10,8},{13,10,125},{13,10,194},{13,10,287},{14,10,197},{ +14,10,383},{15,10,53},{17,10,63},{19,10,46},{19,10,98},{19,10,106},{148,10,85},{ +132,11,476},{4,0,327},{5,0,478},{7,0,1332},{136,0,753},{5,0,1020},{133,0,1022},{ +135,11,1807},{4,0,103},{133,0,401},{4,0,499},{135,0,1421},{10,0,207},{13,0,164}, +{147,10,126},{9,11,20},{10,11,324},{139,11,488},{132,0,96},{9,11,280},{138,11, +134},{135,0,968},{133,10,187},{135,10,1286},{5,11,112},{6,11,103},{134,11,150},{ +8,0,914},{10,0,3},{4,10,215},{9,10,38},{11,10,23},{11,10,127},{139,10,796},{135, +0,399},{6,0,563},{137,0,224},{6,0,704},{134,0,1214},{4,11,708},{8,11,15},{9,11, +50},{9,11,386},{11,11,18},{11,11,529},{140,11,228},{4,11,563},{7,11,109},{7,11, +592},{7,11,637},{7,11,770},{7,11,1701},{8,11,436},{8,11,463},{9,11,60},{9,11,335 +},{9,11,904},{10,11,73},{11,11,434},{12,11,585},{13,11,331},{18,11,110},{148,11, +60},{134,0,1559},{132,11,502},{6,11,347},{138,11,161},{4,11,33},{5,11,102},{5,11 +,500},{6,11,284},{7,11,1079},{7,11,1423},{7,11,1702},{8,11,470},{9,11,554},{9,11 +,723},{139,11,333},{7,11,246},{135,11,840},{6,11,10},{8,11,571},{9,11,739},{143, +11,91},{8,0,861},{10,0,905},{12,0,730},{12,0,789},{133,11,626},{134,0,946},{5,0, +746},{12,0,333},{14,0,332},{12,11,333},{142,11,332},{5,11,18},{6,11,526},{13,11, +24},{13,11,110},{19,11,5},{147,11,44},{4,0,910},{5,0,832},{135,10,2002},{10,11, +768},{139,11,787},{4,11,309},{5,11,462},{7,11,970},{135,11,1097},{4,10,28},{5,10 +,440},{7,10,248},{11,10,833},{140,10,344},{134,10,1654},{6,0,632},{6,0,652},{6,0 +,1272},{6,0,1384},{134,0,1560},{134,11,1704},{6,0,1393},{133,10,853},{6,10,249}, +{7,10,1234},{139,10,573},{5,11,86},{7,11,743},{9,11,85},{10,11,281},{10,11,432}, +{11,11,490},{12,11,251},{13,11,118},{14,11,378},{146,11,143},{5,11,524},{133,11, +744},{134,0,1514},{10,0,201},{142,0,319},{7,0,717},{10,0,510},{7,10,392},{8,10, +20},{8,10,172},{8,10,690},{9,10,383},{9,10,845},{11,10,293},{11,10,832},{11,10, +920},{11,10,984},{141,10,221},{134,0,1381},{5,10,858},{133,10,992},{8,0,528},{ +137,0,348},{10,11,107},{140,11,436},{4,0,20},{133,0,616},{134,0,1251},{132,11, +927},{10,11,123},{12,11,670},{13,11,371},{14,11,142},{146,11,94},{134,0,1163},{7 +,11,1149},{137,11,156},{134,0,307},{133,11,778},{7,0,1091},{135,0,1765},{5,11, +502},{6,10,268},{137,10,62},{8,11,196},{10,11,283},{139,11,406},{4,0,26},{5,0, +429},{6,0,245},{7,0,704},{7,0,1379},{135,0,1474},{133,11,855},{132,0,881},{4,0, +621},{135,11,1596},{7,11,1400},{9,11,446},{138,11,45},{6,0,736},{138,10,106},{ +133,0,542},{134,0,348},{133,0,868},{136,0,433},{135,0,1495},{138,0,771},{6,10, +613},{136,10,223},{138,0,215},{141,0,124},{136,11,391},{135,11,172},{132,10,670} +,{140,0,55},{9,10,40},{139,10,136},{7,0,62},{147,0,112},{132,0,856},{132,11,568} +,{12,0,270},{139,10,259},{8,0,572},{137,0,698},{4,11,732},{9,10,310},{137,10,682 +},{142,10,296},{134,0,939},{136,11,733},{135,11,1435},{7,10,1401},{135,10,1476}, +{6,0,352},{4,10,296},{7,10,401},{7,10,1410},{7,10,1594},{7,10,1674},{8,10,63},{8 +,10,660},{137,10,74},{4,11,428},{133,11,668},{4,10,139},{4,10,388},{140,10,188}, +{7,11,2015},{140,11,665},{132,0,647},{146,0,10},{138,0,220},{142,0,464},{132,0, +109},{134,0,1746},{6,0,515},{4,10,747},{6,11,1623},{6,11,1681},{7,10,649},{7,10, +1479},{135,10,1583},{133,10,232},{135,0,566},{137,10,887},{4,0,40},{10,0,67},{11 +,0,117},{11,0,768},{139,0,935},{132,0,801},{7,0,992},{8,0,301},{9,0,722},{12,0, +63},{13,0,29},{14,0,161},{143,0,18},{139,0,923},{6,11,1748},{8,11,715},{9,11,802 +},{10,11,46},{10,11,819},{13,11,308},{14,11,351},{14,11,363},{146,11,67},{137,11 +,745},{7,0,1145},{4,10,14},{7,10,1801},{10,10,748},{141,10,458},{4,11,63},{5,11, +347},{134,11,474},{135,0,568},{4,10,425},{7,11,577},{7,11,1432},{9,11,475},{9,11 +,505},{9,11,526},{9,11,609},{9,11,689},{9,11,726},{9,11,735},{9,11,738},{10,11, +556},{10,11,674},{10,11,684},{11,11,89},{11,11,202},{11,11,272},{11,11,380},{11, +11,415},{11,11,505},{11,11,537},{11,11,550},{11,11,562},{11,11,640},{11,11,667}, +{11,11,688},{11,11,847},{11,11,927},{11,11,930},{11,11,940},{12,11,144},{12,11, +325},{12,11,329},{12,11,389},{12,11,403},{12,11,451},{12,11,515},{12,11,604},{12 +,11,616},{12,11,626},{13,11,66},{13,11,131},{13,11,167},{13,11,236},{13,11,368}, +{13,11,411},{13,11,434},{13,11,453},{13,11,461},{13,11,474},{14,11,59},{14,11,60 +},{14,11,139},{14,11,152},{14,11,276},{14,11,353},{14,11,402},{15,11,28},{15,11, +81},{15,11,123},{15,11,152},{18,11,136},{148,11,88},{137,0,247},{135,11,1622},{9 +,11,544},{11,11,413},{144,11,25},{4,0,645},{7,0,825},{6,10,1768},{135,11,89},{ +140,0,328},{5,10,943},{134,10,1779},{134,0,1363},{5,10,245},{6,10,576},{7,10,582 +},{136,10,225},{134,0,1280},{5,11,824},{133,11,941},{7,11,440},{8,11,230},{139, +11,106},{5,0,28},{6,0,204},{10,0,320},{10,0,583},{13,0,502},{14,0,72},{14,0,274} +,{14,0,312},{14,0,344},{15,0,159},{16,0,62},{16,0,69},{17,0,30},{18,0,42},{18,0, +53},{18,0,84},{18,0,140},{19,0,68},{19,0,85},{20,0,5},{20,0,45},{20,0,101},{22,0 +,7},{150,0,20},{4,0,558},{6,0,390},{7,0,162},{7,0,689},{9,0,360},{138,0,653},{ +134,0,764},{6,0,862},{137,0,833},{5,0,856},{6,0,1672},{6,0,1757},{134,0,1781},{5 +,0,92},{10,0,736},{140,0,102},{6,0,1927},{6,0,1944},{8,0,924},{8,0,948},{10,0, +967},{138,0,978},{134,0,1479},{5,0,590},{8,0,360},{9,0,213},{138,0,63},{134,0, +1521},{6,0,709},{134,0,891},{132,10,443},{13,0,477},{14,0,120},{148,0,61},{4,11, +914},{5,11,800},{133,11,852},{10,11,54},{141,11,115},{4,11,918},{133,11,876},{ +139,11,152},{4,11,92},{133,11,274},{135,11,1901},{9,11,800},{10,11,693},{11,11, +482},{11,11,734},{139,11,789},{9,0,483},{132,10,298},{6,0,1213},{141,11,498},{ +135,11,1451},{133,11,743},{4,0,1022},{10,0,1000},{12,0,957},{12,0,980},{12,0, +1013},{14,0,481},{144,0,116},{8,0,503},{17,0,29},{4,11,49},{7,11,280},{135,11, +1633},{135,0,1712},{134,0,466},{136,11,47},{5,10,164},{7,10,121},{142,10,189},{7 +,10,812},{7,10,1261},{7,10,1360},{9,10,632},{140,10,352},{139,10,556},{132,0,731 +},{5,11,272},{5,11,908},{5,11,942},{7,11,1008},{7,11,1560},{8,11,197},{9,11,47}, +{11,11,538},{139,11,742},{4,10,172},{9,10,611},{10,10,436},{12,10,673},{141,10, +255},{133,10,844},{10,0,484},{11,0,754},{12,0,457},{14,0,171},{14,0,389},{146,0, +153},{9,10,263},{10,10,147},{138,10,492},{137,11,891},{138,0,241},{133,10,537},{ +6,0,2005},{136,0,964},{137,10,842},{151,11,8},{4,11,407},{132,11,560},{135,11, +1884},{6,0,1100},{134,0,1242},{135,0,954},{5,10,230},{5,10,392},{6,10,420},{9,10 +,568},{140,10,612},{4,11,475},{11,11,35},{11,11,90},{13,11,7},{13,11,71},{13,11, +177},{142,11,422},{136,11,332},{135,0,1958},{6,0,549},{8,0,34},{8,0,283},{9,0, +165},{138,0,475},{10,0,952},{12,0,966},{140,0,994},{5,0,652},{5,0,701},{135,0, +449},{4,0,655},{7,0,850},{17,0,75},{146,0,137},{4,0,146},{7,0,1618},{8,0,670},{5 +,10,41},{7,10,1459},{7,10,1469},{7,10,1859},{9,10,549},{139,10,905},{133,10,696} +,{6,0,159},{6,0,364},{7,0,516},{137,0,518},{135,0,1439},{6,11,222},{7,11,636},{7 +,11,1620},{8,11,409},{9,11,693},{139,11,77},{13,0,151},{141,11,45},{6,0,1027},{4 +,11,336},{132,10,771},{139,11,392},{10,11,121},{11,11,175},{149,11,16},{8,0,950} +,{138,0,983},{133,10,921},{135,0,993},{6,10,180},{7,10,1137},{8,10,751},{139,10, +805},{7,0,501},{9,0,111},{10,0,141},{11,0,332},{13,0,43},{13,0,429},{14,0,130},{ +14,0,415},{145,0,102},{4,10,183},{5,11,882},{7,10,271},{11,10,824},{11,10,952},{ +13,10,278},{13,10,339},{13,10,482},{14,10,424},{148,10,99},{4,10,19},{5,10,477}, +{5,10,596},{6,10,505},{7,10,1221},{11,10,907},{12,10,209},{141,10,214},{135,10, +1215},{133,0,452},{132,11,426},{5,0,149},{136,0,233},{133,0,935},{6,11,58},{7,11 +,654},{7,11,745},{7,11,1969},{8,11,240},{8,11,675},{9,11,479},{9,11,731},{10,11, +330},{10,11,593},{10,11,817},{11,11,32},{11,11,133},{11,11,221},{145,11,68},{12, +0,582},{18,0,131},{7,11,102},{137,11,538},{136,0,801},{134,10,1645},{132,0,70},{ +6,10,92},{6,10,188},{7,10,1269},{7,10,1524},{7,10,1876},{10,10,228},{139,10,1020 +},{4,10,459},{133,10,966},{138,0,369},{16,0,36},{140,10,330},{141,11,366},{7,0, +721},{10,0,236},{12,0,204},{6,10,18},{7,10,932},{8,10,757},{9,10,54},{9,10,65},{ +9,10,844},{10,10,113},{10,10,315},{10,10,798},{11,10,153},{12,10,151},{12,10,392 +},{12,10,666},{142,10,248},{7,0,241},{10,0,430},{8,10,548},{9,10,532},{10,10,117 +},{11,10,351},{11,10,375},{143,10,23},{134,10,1742},{133,10,965},{133,11,566},{6 +,11,48},{135,11,63},{134,10,182},{10,10,65},{10,10,488},{138,10,497},{6,11,114}, +{7,11,1224},{7,11,1556},{136,11,3},{134,0,1817},{8,11,576},{137,11,267},{6,0, +1078},{144,0,16},{9,10,588},{138,10,260},{138,0,1021},{5,0,406},{134,0,2022},{ +133,11,933},{6,0,69},{135,0,117},{7,0,1830},{136,11,427},{4,0,432},{135,0,824},{ +134,10,1786},{133,0,826},{139,11,67},{133,11,759},{135,10,308},{137,0,816},{133, +0,1000},{4,0,297},{6,0,529},{7,0,152},{7,0,713},{7,0,1845},{8,0,710},{8,0,717},{ +12,0,639},{140,0,685},{7,0,423},{136,10,588},{136,10,287},{136,0,510},{134,0, +1048},{6,0,618},{7,11,56},{7,11,1989},{8,11,337},{8,11,738},{9,11,600},{10,11, +483},{12,11,37},{13,11,447},{142,11,92},{4,0,520},{135,0,575},{8,0,990},{138,0, +977},{135,11,774},{9,11,347},{11,11,24},{140,11,170},{136,11,379},{140,10,290},{ +132,11,328},{4,0,321},{134,0,569},{4,11,101},{135,11,1171},{7,0,723},{7,0,1135}, +{5,11,833},{136,11,744},{7,10,719},{8,10,809},{136,10,834},{8,0,921},{136,10,796 +},{5,10,210},{6,10,213},{7,10,60},{10,10,364},{139,10,135},{5,0,397},{6,0,154},{ +7,0,676},{8,0,443},{8,0,609},{9,0,24},{9,0,325},{10,0,35},{11,0,535},{11,0,672}, +{11,0,1018},{12,0,637},{16,0,30},{5,10,607},{8,10,326},{136,10,490},{4,10,701},{ +5,10,472},{6,11,9},{6,11,397},{7,11,53},{7,11,1742},{9,10,758},{10,11,632},{11, +11,828},{140,11,146},{135,10,380},{135,10,1947},{148,11,109},{10,10,278},{138,11 +,278},{134,0,856},{7,0,139},{4,10,386},{8,10,405},{8,10,728},{9,10,497},{11,10, +110},{11,10,360},{15,10,37},{144,10,84},{141,0,282},{133,0,981},{5,0,288},{7,10, +1452},{7,10,1480},{8,10,634},{140,10,472},{7,0,1890},{8,11,367},{10,11,760},{14, +11,79},{20,11,17},{152,11,0},{4,10,524},{136,10,810},{4,0,56},{7,0,1791},{8,0, +607},{8,0,651},{11,0,465},{11,0,835},{12,0,337},{141,0,480},{10,10,238},{141,10, +33},{11,11,417},{12,11,223},{140,11,265},{9,0,158},{10,0,411},{140,0,261},{133, +10,532},{133,10,997},{12,11,186},{12,11,292},{14,11,100},{146,11,70},{6,0,1403}, +{136,0,617},{134,0,1205},{139,0,563},{4,0,242},{134,0,333},{4,11,186},{5,11,157} +,{8,11,168},{138,11,6},{132,0,369},{133,11,875},{5,10,782},{5,10,829},{134,10, +1738},{134,0,622},{135,11,1272},{6,0,1407},{7,11,111},{136,11,581},{7,10,1823},{ +139,10,693},{7,0,160},{10,0,624},{142,0,279},{132,0,363},{10,11,589},{12,11,111} +,{13,11,260},{14,11,82},{18,11,63},{147,11,45},{7,11,1364},{7,11,1907},{141,11, +158},{4,11,404},{4,11,659},{135,11,675},{13,11,211},{14,11,133},{14,11,204},{15, +11,64},{15,11,69},{15,11,114},{16,11,10},{19,11,23},{19,11,35},{19,11,39},{19,11 +,51},{19,11,71},{19,11,75},{152,11,15},{4,10,78},{5,10,96},{5,10,182},{7,10,1724 +},{7,10,1825},{10,10,394},{10,10,471},{11,10,532},{14,10,340},{145,10,88},{135, +10,1964},{133,11,391},{11,11,887},{14,11,365},{142,11,375},{5,11,540},{6,11,1697 +},{7,11,222},{136,11,341},{134,11,78},{9,0,601},{9,0,619},{10,0,505},{10,0,732}, +{11,0,355},{140,0,139},{134,0,292},{139,0,174},{5,0,177},{6,0,616},{7,0,827},{9, +0,525},{138,0,656},{10,0,31},{6,10,215},{7,10,1028},{7,10,1473},{7,10,1721},{9, +10,424},{138,10,779},{135,10,584},{136,11,293},{134,0,685},{135,11,1868},{133,11 +,460},{7,0,647},{6,10,67},{7,10,1630},{9,10,354},{9,10,675},{10,10,830},{14,10, +80},{145,10,80},{4,0,161},{133,0,631},{6,10,141},{7,10,225},{9,10,59},{9,10,607} +,{10,10,312},{11,10,687},{12,10,555},{13,10,373},{13,10,494},{148,10,58},{7,11, +965},{7,11,1460},{135,11,1604},{136,10,783},{134,11,388},{6,0,722},{6,0,1267},{4 +,11,511},{9,11,333},{9,11,379},{10,11,602},{11,11,441},{11,11,723},{11,11,976},{ +140,11,357},{134,0,1797},{135,0,1684},{9,0,469},{9,0,709},{12,0,512},{14,0,65},{ +17,0,12},{5,11,938},{136,11,707},{7,0,1230},{136,0,531},{10,0,229},{11,0,73},{11 +,0,376},{139,0,433},{12,0,268},{12,0,640},{142,0,119},{7,10,430},{139,10,46},{6, +0,558},{7,0,651},{8,0,421},{9,0,0},{10,0,34},{139,0,1008},{6,0,106},{7,0,1786},{ +7,0,1821},{9,0,102},{9,0,763},{5,10,602},{7,10,2018},{137,10,418},{5,0,65},{6,0, +416},{7,0,1720},{7,0,1924},{10,0,109},{11,0,14},{11,0,70},{11,0,569},{11,0,735}, +{15,0,153},{20,0,80},{136,10,677},{135,11,1625},{137,11,772},{136,0,595},{6,11, +469},{7,11,1709},{138,11,515},{7,0,1832},{138,0,374},{9,0,106},{9,0,163},{9,0, +296},{10,0,167},{10,0,172},{10,0,777},{139,0,16},{6,0,6},{7,0,81},{7,0,771},{7,0 +,1731},{9,0,405},{138,0,421},{4,11,500},{135,11,938},{5,11,68},{134,11,383},{5,0 +,881},{133,0,885},{6,0,854},{6,0,1132},{6,0,1495},{6,0,1526},{6,0,1533},{134,0, +1577},{4,11,337},{6,11,353},{7,11,1934},{8,11,488},{137,11,429},{7,11,236},{7,11 +,1795},{8,11,259},{9,11,135},{9,11,177},{10,11,825},{11,11,115},{11,11,370},{11, +11,405},{11,11,604},{12,11,10},{12,11,667},{12,11,669},{13,11,76},{14,11,310},{ +15,11,76},{15,11,147},{148,11,23},{5,0,142},{134,0,546},{4,11,15},{5,11,22},{6, +11,244},{7,11,40},{7,11,200},{7,11,906},{7,11,1199},{9,11,616},{10,11,716},{11, +11,635},{11,11,801},{140,11,458},{5,0,466},{11,0,571},{12,0,198},{13,0,283},{14, +0,186},{15,0,21},{15,0,103},{135,10,329},{4,0,185},{5,0,257},{5,0,839},{5,0,936} +,{9,0,399},{10,0,258},{10,0,395},{10,0,734},{11,0,1014},{12,0,23},{13,0,350},{14 +,0,150},{19,0,6},{135,11,1735},{12,11,36},{141,11,337},{5,11,598},{7,11,791},{8, +11,108},{137,11,123},{132,10,469},{7,0,404},{7,0,1377},{7,0,1430},{7,0,2017},{8, +0,149},{8,0,239},{8,0,512},{8,0,793},{8,0,818},{9,0,474},{9,0,595},{10,0,122},{ +10,0,565},{10,0,649},{10,0,783},{11,0,239},{11,0,295},{11,0,447},{11,0,528},{11, +0,639},{11,0,800},{12,0,25},{12,0,77},{12,0,157},{12,0,256},{12,0,316},{12,0,390 +},{12,0,391},{12,0,395},{12,0,478},{12,0,503},{12,0,592},{12,0,680},{13,0,50},{ +13,0,53},{13,0,132},{13,0,198},{13,0,322},{13,0,415},{13,0,511},{14,0,71},{14,0, +395},{15,0,71},{15,0,136},{17,0,123},{18,0,93},{147,0,58},{136,0,712},{134,10, +1743},{5,10,929},{6,10,340},{8,10,376},{136,10,807},{6,0,1848},{8,0,860},{10,0, +856},{10,0,859},{10,0,925},{10,0,941},{140,0,762},{6,0,629},{6,0,906},{9,0,810}, +{140,0,652},{5,10,218},{7,10,1610},{138,10,83},{7,10,1512},{135,10,1794},{4,0, +377},{24,0,13},{4,11,155},{7,11,1689},{11,10,0},{144,10,78},{4,11,164},{5,11,151 +},{5,11,730},{5,11,741},{7,11,498},{7,11,870},{7,11,1542},{12,11,213},{14,11,36} +,{14,11,391},{17,11,111},{18,11,6},{18,11,46},{18,11,151},{19,11,36},{20,11,32}, +{20,11,56},{20,11,69},{20,11,102},{21,11,4},{22,11,8},{22,11,10},{22,11,14},{150 +,11,31},{7,0,1842},{133,10,571},{4,10,455},{4,11,624},{135,11,1752},{134,0,1501} +,{4,11,492},{5,11,451},{6,10,161},{7,10,372},{137,10,597},{132,10,349},{4,0,180} +,{135,0,1906},{135,11,835},{141,11,70},{132,0,491},{137,10,751},{6,10,432},{139, +10,322},{4,0,171},{138,0,234},{6,11,113},{135,11,436},{4,0,586},{7,0,1186},{138, +0,631},{5,10,468},{10,10,325},{11,10,856},{12,10,345},{143,10,104},{5,10,223},{ +10,11,592},{10,11,753},{12,11,317},{12,11,355},{12,11,465},{12,11,469},{12,11, +560},{12,11,578},{141,11,243},{132,10,566},{135,11,520},{4,10,59},{135,10,1394}, +{6,10,436},{139,10,481},{9,0,931},{10,0,334},{20,0,71},{4,10,48},{5,10,271},{7, +10,953},{135,11,1878},{11,0,170},{5,10,610},{136,10,457},{133,10,755},{6,0,1587} +,{135,10,1217},{4,10,197},{149,11,26},{133,11,585},{137,11,521},{133,0,765},{133 +,10,217},{139,11,586},{133,0,424},{9,11,752},{12,11,610},{13,11,431},{16,11,59}, +{146,11,109},{136,0,714},{7,0,685},{132,11,307},{9,0,420},{10,0,269},{10,0,285}, +{10,0,576},{11,0,397},{13,0,175},{145,0,90},{132,0,429},{133,11,964},{9,11,463}, +{138,11,595},{7,0,18},{7,0,699},{7,0,1966},{8,0,752},{9,0,273},{9,0,412},{9,0, +703},{10,0,71},{10,0,427},{138,0,508},{4,10,165},{7,10,1398},{135,10,1829},{4,0, +53},{5,0,186},{7,0,752},{7,0,828},{142,0,116},{8,0,575},{10,0,289},{139,0,319},{ +132,0,675},{134,0,1424},{4,11,75},{5,11,180},{6,11,500},{7,11,58},{7,11,710},{ +138,11,645},{133,11,649},{6,11,276},{7,11,282},{7,11,879},{7,11,924},{8,11,459}, +{9,11,599},{9,11,754},{11,11,574},{12,11,128},{12,11,494},{13,11,52},{13,11,301} +,{15,11,30},{143,11,132},{6,0,647},{134,0,1095},{5,10,9},{7,10,297},{7,10,966},{ +140,10,306},{132,11,200},{134,0,1334},{5,10,146},{6,10,411},{138,10,721},{6,0, +209},{6,0,1141},{6,0,1288},{8,0,468},{9,0,210},{11,0,36},{12,0,28},{12,0,630},{ +13,0,21},{13,0,349},{14,0,7},{145,0,13},{6,10,177},{135,10,467},{4,0,342},{135,0 +,1179},{10,11,454},{140,11,324},{4,0,928},{133,0,910},{7,0,1838},{6,11,225},{137 +,11,211},{16,0,101},{20,0,115},{20,0,118},{148,0,122},{4,0,496},{135,0,856},{4,0 +,318},{11,0,654},{7,11,718},{139,11,102},{8,11,58},{9,11,724},{11,11,809},{13,11 +,113},{145,11,72},{5,10,200},{6,11,345},{135,11,1247},{8,11,767},{8,11,803},{9, +11,301},{137,11,903},{7,0,915},{8,0,247},{19,0,0},{7,11,1949},{136,11,674},{4,0, +202},{5,0,382},{6,0,454},{7,0,936},{7,0,1803},{8,0,758},{9,0,375},{9,0,895},{10, +0,743},{10,0,792},{11,0,978},{11,0,1012},{142,0,109},{7,0,1150},{7,0,1425},{7,0, +1453},{140,0,513},{134,11,259},{138,0,791},{11,0,821},{12,0,110},{12,0,153},{18, +0,41},{150,0,19},{134,10,481},{132,0,796},{6,0,445},{9,0,909},{136,11,254},{10,0 +,776},{13,0,345},{142,0,425},{4,10,84},{7,10,1482},{10,10,76},{138,10,142},{135, +11,742},{6,0,578},{133,10,1015},{6,0,1387},{4,10,315},{5,10,507},{135,10,1370},{ +4,0,438},{133,0,555},{136,0,766},{133,11,248},{134,10,1722},{4,11,116},{5,11,95} +,{5,11,445},{7,11,1688},{8,11,29},{9,11,272},{11,11,509},{139,11,915},{135,0,541 +},{133,11,543},{8,10,222},{8,10,476},{9,10,238},{11,10,516},{11,10,575},{15,10, +109},{146,10,100},{6,0,880},{134,0,1191},{5,11,181},{136,11,41},{134,0,1506},{ +132,11,681},{7,11,25},{8,11,202},{138,11,536},{139,0,983},{137,0,768},{132,0,584 +},{9,11,423},{140,11,89},{8,11,113},{9,11,877},{10,11,554},{11,11,83},{12,11,136 +},{147,11,109},{7,10,706},{7,10,1058},{138,10,538},{133,11,976},{4,11,206},{135, +11,746},{136,11,526},{140,0,737},{11,10,92},{11,10,196},{11,10,409},{11,10,450}, +{11,10,666},{11,10,777},{12,10,262},{13,10,385},{13,10,393},{15,10,115},{16,10, +45},{145,10,82},{4,0,226},{4,0,326},{7,0,1770},{4,11,319},{5,11,699},{138,11,673 +},{6,10,40},{135,10,1781},{5,0,426},{8,0,30},{9,0,2},{11,0,549},{147,0,122},{6,0 +,1161},{134,0,1329},{138,10,97},{6,10,423},{7,10,665},{135,10,1210},{7,11,13},{8 +,11,226},{10,11,537},{11,11,570},{11,11,605},{11,11,799},{11,11,804},{12,11,85}, +{12,11,516},{12,11,623},{13,11,112},{13,11,361},{14,11,77},{14,11,78},{17,11,28} +,{147,11,110},{132,11,769},{132,11,551},{132,11,728},{147,0,117},{9,11,57},{9,11 +,459},{10,11,425},{11,11,119},{12,11,184},{12,11,371},{13,11,358},{145,11,51},{5 +,11,188},{5,11,814},{8,11,10},{9,11,421},{9,11,729},{10,11,609},{139,11,689},{ +134,11,624},{135,11,298},{135,0,462},{4,0,345},{139,10,624},{136,10,574},{4,0, +385},{7,0,265},{135,0,587},{6,0,808},{132,11,528},{133,0,398},{132,10,354},{4,0, +347},{5,0,423},{5,0,996},{135,0,1329},{135,10,1558},{7,0,1259},{9,0,125},{139,0, +65},{5,0,136},{6,0,136},{136,0,644},{5,11,104},{6,11,173},{135,11,1631},{135,0, +469},{133,10,830},{4,0,278},{5,0,465},{135,0,1367},{7,11,810},{8,11,138},{8,11, +342},{9,11,84},{10,11,193},{11,11,883},{140,11,359},{5,10,496},{135,10,203},{4,0 +,433},{133,0,719},{6,11,95},{134,10,547},{5,10,88},{137,10,239},{6,11,406},{10, +11,409},{10,11,447},{11,11,44},{140,11,100},{134,0,1423},{7,10,650},{135,10,1310 +},{134,0,749},{135,11,1243},{135,0,1363},{6,0,381},{7,0,645},{7,0,694},{8,0,546} +,{7,10,1076},{9,10,80},{11,10,78},{11,10,421},{11,10,534},{140,10,545},{134,11, +1636},{135,11,1344},{12,0,277},{7,10,274},{11,10,479},{139,10,507},{6,0,705},{6, +0,783},{6,0,1275},{6,0,1481},{4,11,282},{7,11,1034},{11,11,398},{11,11,634},{12, +11,1},{12,11,79},{12,11,544},{14,11,237},{17,11,10},{146,11,20},{134,0,453},{4,0 +,555},{8,0,536},{10,0,288},{11,0,1005},{4,10,497},{135,10,1584},{5,11,118},{5,11 +,499},{6,11,476},{7,11,600},{7,11,888},{135,11,1096},{138,0,987},{7,0,1107},{7, +10,261},{7,10,1115},{7,10,1354},{7,10,1588},{7,10,1705},{7,10,1902},{9,10,465},{ +10,10,248},{10,10,349},{10,10,647},{11,10,527},{11,10,660},{11,10,669},{12,10, +529},{141,10,305},{7,11,296},{7,11,596},{8,11,560},{8,11,586},{9,11,612},{11,11, +100},{11,11,304},{12,11,46},{13,11,89},{14,11,112},{145,11,122},{9,0,370},{138,0 +,90},{136,10,13},{132,0,860},{7,10,642},{8,10,250},{11,10,123},{11,10,137},{13, +10,48},{142,10,95},{135,10,1429},{137,11,321},{132,0,257},{135,0,2031},{7,0,1768 +},{7,11,1599},{7,11,1723},{8,11,79},{8,11,106},{8,11,190},{8,11,302},{8,11,383}, +{9,11,119},{9,11,233},{9,11,298},{9,11,419},{9,11,471},{10,11,181},{10,11,406},{ +11,11,57},{11,11,85},{11,11,120},{11,11,177},{11,11,296},{11,11,382},{11,11,454} +,{11,11,758},{11,11,999},{12,11,27},{12,11,98},{12,11,131},{12,11,245},{12,11, +312},{12,11,446},{12,11,454},{13,11,25},{13,11,98},{13,11,426},{13,11,508},{14, +11,6},{14,11,163},{14,11,272},{14,11,277},{14,11,370},{15,11,95},{15,11,138},{15 +,11,167},{17,11,18},{17,11,38},{20,11,96},{149,11,32},{5,11,722},{134,11,1759},{ +145,11,16},{6,0,1071},{134,0,1561},{10,10,545},{140,10,301},{6,0,83},{6,0,1733}, +{135,0,1389},{4,0,835},{135,0,1818},{133,11,258},{4,10,904},{133,10,794},{134,0, +2006},{5,11,30},{7,11,495},{8,11,134},{9,11,788},{140,11,438},{135,11,2004},{137 +,0,696},{5,11,50},{6,11,439},{7,11,780},{135,11,1040},{7,11,772},{7,11,1104},{7, +11,1647},{11,11,269},{11,11,539},{11,11,607},{11,11,627},{11,11,706},{11,11,975} +,{12,11,248},{12,11,311},{12,11,434},{12,11,600},{12,11,622},{13,11,297},{13,11, +367},{13,11,485},{14,11,69},{14,11,409},{143,11,108},{5,11,1},{6,11,81},{138,11, +520},{7,0,1718},{9,0,95},{9,0,274},{10,0,279},{10,0,317},{10,0,420},{11,0,303},{ +11,0,808},{12,0,134},{12,0,367},{13,0,149},{13,0,347},{14,0,349},{14,0,406},{18, +0,22},{18,0,89},{18,0,122},{147,0,47},{5,11,482},{8,11,98},{9,11,172},{10,11,222 +},{10,11,700},{10,11,822},{11,11,302},{11,11,778},{12,11,50},{12,11,127},{12,11, +396},{13,11,62},{13,11,328},{14,11,122},{147,11,72},{7,10,386},{138,10,713},{6, +10,7},{6,10,35},{7,10,147},{7,10,1069},{7,10,1568},{7,10,1575},{7,10,1917},{8,10 +,43},{8,10,208},{9,10,128},{9,10,866},{10,10,20},{11,10,981},{147,10,33},{133,0, +26},{132,0,550},{5,11,2},{7,11,1494},{136,11,589},{6,11,512},{7,11,797},{8,11, +253},{9,11,77},{10,11,1},{10,11,129},{10,11,225},{11,11,118},{11,11,226},{11,11, +251},{11,11,430},{11,11,701},{11,11,974},{11,11,982},{12,11,64},{12,11,260},{12, +11,488},{140,11,690},{7,10,893},{141,10,424},{134,0,901},{136,0,822},{4,0,902},{ +5,0,809},{134,0,122},{6,0,807},{134,0,1366},{7,0,262},{5,11,748},{134,11,553},{ +133,0,620},{4,0,34},{5,0,574},{7,0,279},{7,0,1624},{136,0,601},{9,0,170},{6,10, +322},{9,10,552},{11,10,274},{13,10,209},{13,10,499},{14,10,85},{15,10,126},{145, +10,70},{132,0,537},{4,11,12},{7,11,420},{7,11,522},{7,11,809},{8,11,797},{141,11 +,88},{133,0,332},{8,10,83},{8,10,742},{8,10,817},{9,10,28},{9,10,29},{9,10,885}, +{10,10,387},{11,10,633},{11,10,740},{13,10,235},{13,10,254},{15,10,143},{143,10, +146},{6,0,1909},{9,0,964},{12,0,822},{12,0,854},{12,0,865},{12,0,910},{12,0,938} +,{15,0,169},{15,0,208},{15,0,211},{18,0,205},{18,0,206},{18,0,220},{18,0,223},{ +152,0,24},{140,10,49},{5,11,528},{135,11,1580},{6,0,261},{8,0,182},{139,0,943},{ +134,0,1721},{4,0,933},{133,0,880},{136,11,321},{5,11,266},{9,11,290},{9,11,364}, +{10,11,293},{11,11,606},{142,11,45},{6,0,1609},{4,11,50},{6,11,510},{6,11,594},{ +9,11,121},{10,11,49},{10,11,412},{139,11,834},{7,0,895},{136,11,748},{132,11,466 +},{4,10,110},{10,10,415},{10,10,597},{142,10,206},{133,0,812},{135,11,281},{6,0, +1890},{6,0,1902},{6,0,1916},{9,0,929},{9,0,942},{9,0,975},{9,0,984},{9,0,986},{9 +,0,1011},{9,0,1019},{12,0,804},{12,0,851},{12,0,867},{12,0,916},{12,0,923},{15,0 +,194},{15,0,204},{15,0,210},{15,0,222},{15,0,223},{15,0,229},{15,0,250},{18,0, +179},{18,0,186},{18,0,192},{7,10,205},{135,10,2000},{132,11,667},{135,0,778},{4, +0,137},{7,0,1178},{135,0,1520},{134,0,1314},{4,11,242},{134,11,333},{6,0,1661},{ +7,0,1975},{7,0,2009},{135,0,2011},{134,0,1591},{4,10,283},{135,10,1194},{11,0, +820},{150,0,51},{4,11,39},{5,11,36},{7,11,1843},{8,11,407},{11,11,144},{140,11, +523},{134,10,1720},{4,11,510},{7,11,29},{7,11,66},{7,11,1980},{10,11,487},{10,11 +,809},{146,11,9},{5,0,89},{7,0,1915},{9,0,185},{9,0,235},{10,0,64},{10,0,270},{ +10,0,403},{10,0,469},{10,0,529},{10,0,590},{11,0,140},{11,0,860},{13,0,1},{13,0, +422},{14,0,341},{14,0,364},{17,0,93},{18,0,113},{19,0,97},{147,0,113},{133,0,695 +},{6,0,987},{134,0,1160},{5,0,6},{6,0,183},{7,0,680},{7,0,978},{7,0,1013},{7,0, +1055},{12,0,230},{13,0,172},{146,0,29},{134,11,570},{132,11,787},{134,11,518},{6 +,0,29},{139,0,63},{132,11,516},{136,11,821},{132,0,311},{134,0,1740},{7,0,170},{ +8,0,90},{8,0,177},{8,0,415},{11,0,714},{14,0,281},{136,10,735},{134,0,1961},{135 +,11,1405},{4,11,10},{7,11,917},{139,11,786},{5,10,132},{9,10,486},{9,10,715},{10 +,10,458},{11,10,373},{11,10,668},{11,10,795},{11,10,897},{12,10,272},{12,10,424} +,{12,10,539},{12,10,558},{14,10,245},{14,10,263},{14,10,264},{14,10,393},{142,10 +,403},{11,0,91},{13,0,129},{15,0,101},{145,0,125},{135,0,1132},{4,0,494},{6,0,74 +},{7,0,44},{7,0,407},{12,0,17},{15,0,5},{148,0,11},{133,10,379},{5,0,270},{5,11, +684},{6,10,89},{6,10,400},{7,10,1569},{7,10,1623},{7,10,1850},{8,10,218},{8,10, +422},{9,10,570},{138,10,626},{4,0,276},{133,0,296},{6,0,1523},{134,11,27},{6,10, +387},{7,10,882},{141,10,111},{6,10,224},{7,10,877},{137,10,647},{135,10,790},{4, +0,7},{5,0,90},{5,0,158},{6,0,542},{7,0,221},{7,0,1574},{9,0,490},{10,0,540},{11, +0,443},{139,0,757},{7,0,588},{9,0,175},{138,0,530},{135,10,394},{142,11,23},{134 +,0,786},{135,0,580},{7,0,88},{136,0,627},{5,0,872},{6,0,57},{7,0,471},{9,0,447}, +{137,0,454},{6,11,342},{6,11,496},{8,11,275},{137,11,206},{4,11,909},{133,11,940 +},{6,0,735},{132,11,891},{8,0,845},{8,0,916},{135,10,1409},{5,0,31},{134,0,614}, +{11,0,458},{12,0,15},{140,0,432},{8,0,330},{140,0,477},{4,0,530},{5,0,521},{7,0, +1200},{10,0,460},{132,11,687},{6,0,424},{135,0,1866},{9,0,569},{12,0,12},{12,0, +81},{12,0,319},{13,0,69},{14,0,259},{16,0,87},{17,0,1},{17,0,21},{17,0,24},{18,0 +,15},{18,0,56},{18,0,59},{18,0,127},{18,0,154},{19,0,19},{148,0,31},{7,0,1302},{ +136,10,38},{134,11,253},{5,10,261},{7,10,78},{7,10,199},{8,10,815},{9,10,126},{ +138,10,342},{5,0,595},{135,0,1863},{6,11,41},{141,11,160},{5,0,13},{134,0,142},{ +6,0,97},{7,0,116},{8,0,322},{8,0,755},{9,0,548},{10,0,714},{11,0,884},{13,0,324} +,{7,11,1304},{138,11,477},{132,10,628},{134,11,1718},{7,10,266},{136,10,804},{ +135,10,208},{7,0,1021},{6,10,79},{135,10,1519},{7,0,1472},{135,0,1554},{6,11,362 +},{146,11,51},{7,0,1071},{7,0,1541},{7,0,1767},{7,0,1806},{11,0,162},{11,0,242}, +{11,0,452},{12,0,605},{15,0,26},{144,0,44},{136,10,741},{133,11,115},{145,0,115} +,{134,10,376},{6,0,1406},{134,0,1543},{5,11,193},{12,11,178},{13,11,130},{145,11 +,84},{135,0,1111},{8,0,1},{9,0,650},{10,0,326},{5,11,705},{137,11,606},{5,0,488} +,{6,0,527},{7,0,489},{7,0,1636},{8,0,121},{8,0,144},{8,0,359},{9,0,193},{9,0,241 +},{9,0,336},{9,0,882},{11,0,266},{11,0,372},{11,0,944},{12,0,401},{140,0,641},{ +135,11,174},{6,0,267},{7,10,244},{7,10,632},{7,10,1609},{8,10,178},{8,10,638},{ +141,10,58},{134,0,1983},{134,0,1155},{134,0,1575},{134,0,1438},{9,0,31},{10,0, +244},{10,0,699},{12,0,149},{141,0,497},{133,0,377},{4,11,122},{5,11,796},{5,11, +952},{6,11,1660},{6,11,1671},{8,11,567},{9,11,687},{9,11,742},{10,11,686},{11,11 +,356},{11,11,682},{140,11,281},{145,0,101},{11,11,0},{144,11,78},{5,11,179},{5, +10,791},{7,11,1095},{135,11,1213},{8,11,372},{9,11,122},{138,11,175},{7,10,686}, +{8,10,33},{8,10,238},{10,10,616},{11,10,467},{11,10,881},{13,10,217},{13,10,253} +,{142,10,268},{9,0,476},{4,11,66},{7,11,722},{135,11,904},{7,11,352},{137,11,684 +},{135,0,2023},{135,0,1836},{132,10,447},{5,0,843},{144,0,35},{137,11,779},{141, +11,35},{4,10,128},{5,10,415},{6,10,462},{7,10,294},{7,10,578},{10,10,710},{139, +10,86},{132,0,554},{133,0,536},{136,10,587},{5,0,207},{9,0,79},{11,0,625},{145,0 +,7},{7,0,1371},{6,10,427},{138,10,692},{4,0,424},{4,10,195},{135,10,802},{8,0, +785},{133,11,564},{135,0,336},{4,0,896},{6,0,1777},{134,11,556},{137,11,103},{ +134,10,1683},{7,11,544},{8,11,719},{138,11,61},{138,10,472},{4,11,5},{5,11,498}, +{136,11,637},{7,0,750},{9,0,223},{11,0,27},{11,0,466},{12,0,624},{14,0,265},{146 +,0,61},{12,0,238},{18,0,155},{12,11,238},{146,11,155},{151,10,28},{133,11,927},{ +12,0,383},{5,10,3},{8,10,578},{9,10,118},{10,10,705},{141,10,279},{4,11,893},{5, +11,780},{133,11,893},{4,0,603},{133,0,661},{4,0,11},{6,0,128},{7,0,231},{7,0, +1533},{10,0,725},{5,10,229},{5,11,238},{135,11,1350},{8,10,102},{10,10,578},{10, +10,672},{12,10,496},{13,10,408},{14,10,121},{145,10,106},{132,0,476},{134,0,1552 +},{134,11,1729},{8,10,115},{8,10,350},{9,10,489},{10,10,128},{11,10,306},{12,10, +373},{14,10,30},{17,10,79},{19,10,80},{150,10,55},{135,0,1807},{4,0,680},{4,11, +60},{7,11,760},{7,11,1800},{8,11,314},{9,11,700},{139,11,487},{4,10,230},{5,10, +702},{148,11,94},{132,11,228},{139,0,435},{9,0,20},{10,0,324},{10,0,807},{139,0, +488},{6,10,1728},{136,11,419},{4,10,484},{18,10,26},{19,10,42},{20,10,43},{21,10 +,0},{23,10,27},{152,10,14},{135,0,1431},{133,11,828},{5,0,112},{6,0,103},{6,0, +150},{7,0,1303},{9,0,292},{10,0,481},{20,0,13},{7,11,176},{7,11,178},{7,11,1110} +,{10,11,481},{148,11,13},{138,0,356},{4,11,51},{5,11,39},{6,11,4},{7,11,591},{7, +11,849},{7,11,951},{7,11,1129},{7,11,1613},{7,11,1760},{7,11,1988},{9,11,434},{ +10,11,754},{11,11,25},{11,11,37},{139,11,414},{6,0,1963},{134,0,2000},{132,10, +633},{6,0,1244},{133,11,902},{135,11,928},{140,0,18},{138,0,204},{135,11,1173},{ +134,0,867},{4,0,708},{8,0,15},{9,0,50},{9,0,386},{11,0,18},{11,0,529},{140,0,228 +},{134,11,270},{4,0,563},{7,0,109},{7,0,592},{7,0,637},{7,0,770},{8,0,463},{9,0, +60},{9,0,335},{9,0,904},{10,0,73},{11,0,434},{12,0,585},{13,0,331},{18,0,110},{ +148,0,60},{132,0,502},{14,11,359},{19,11,52},{148,11,47},{6,11,377},{7,11,1025}, +{9,11,613},{145,11,104},{6,0,347},{10,0,161},{5,10,70},{5,10,622},{6,10,334},{7, +10,1032},{9,10,171},{11,10,26},{11,10,213},{11,10,637},{11,10,707},{12,10,202},{ +12,10,380},{13,10,226},{13,10,355},{14,10,222},{145,10,42},{132,11,416},{4,0,33} +,{5,0,102},{6,0,284},{7,0,1079},{7,0,1423},{7,0,1702},{8,0,470},{9,0,554},{9,0, +723},{11,0,333},{142,11,372},{5,11,152},{5,11,197},{7,11,340},{7,11,867},{10,11, +548},{10,11,581},{11,11,6},{12,11,3},{12,11,19},{14,11,110},{142,11,289},{7,0, +246},{135,0,840},{6,0,10},{8,0,571},{9,0,739},{143,0,91},{6,0,465},{7,0,1465},{4 +,10,23},{4,10,141},{5,10,313},{5,10,1014},{6,10,50},{7,10,142},{7,10,559},{8,10, +640},{9,10,460},{9,10,783},{11,10,741},{12,10,183},{141,10,488},{133,0,626},{136 +,0,614},{138,0,237},{7,11,34},{7,11,190},{8,11,28},{8,11,141},{8,11,444},{8,11, +811},{9,11,468},{11,11,334},{12,11,24},{12,11,386},{140,11,576},{133,11,757},{5, +0,18},{6,0,526},{13,0,24},{13,0,110},{19,0,5},{147,0,44},{6,0,506},{134,11,506}, +{135,11,1553},{4,0,309},{5,0,462},{7,0,970},{7,0,1097},{22,0,30},{22,0,33},{7,11 +,1385},{11,11,582},{11,11,650},{11,11,901},{11,11,949},{12,11,232},{12,11,236},{ +13,11,413},{13,11,501},{146,11,116},{9,0,140},{5,10,222},{138,10,534},{6,0,1056} +,{137,10,906},{134,0,1704},{138,10,503},{134,0,1036},{5,10,154},{7,10,1491},{10, +10,379},{138,10,485},{4,11,383},{133,10,716},{134,0,1315},{5,0,86},{7,0,743},{9, +0,85},{10,0,281},{10,0,432},{11,0,825},{12,0,251},{13,0,118},{142,0,378},{8,0, +264},{4,10,91},{5,10,388},{5,10,845},{6,10,206},{6,10,252},{6,10,365},{7,10,136} +,{7,10,531},{136,10,621},{5,0,524},{133,0,744},{5,11,277},{141,11,247},{132,11, +435},{10,0,107},{140,0,436},{132,0,927},{10,0,123},{12,0,670},{146,0,94},{7,0, +1149},{9,0,156},{138,0,957},{5,11,265},{6,11,212},{135,11,28},{133,0,778},{133,0 +,502},{8,0,196},{10,0,283},{139,0,406},{135,10,576},{136,11,535},{134,0,1312},{5 +,10,771},{5,10,863},{5,10,898},{6,10,1632},{6,10,1644},{134,10,1780},{5,0,855},{ +5,10,331},{135,11,1487},{132,11,702},{5,11,808},{135,11,2045},{7,0,1400},{9,0, +446},{138,0,45},{140,10,632},{132,0,1003},{5,11,166},{8,11,739},{140,11,511},{5, +10,107},{7,10,201},{136,10,518},{6,10,446},{135,10,1817},{134,0,1532},{134,0, +1097},{4,11,119},{5,11,170},{5,11,447},{7,11,1708},{7,11,1889},{9,11,357},{9,11, +719},{12,11,486},{140,11,596},{9,10,851},{141,10,510},{7,0,612},{8,0,545},{8,0, +568},{8,0,642},{9,0,717},{10,0,541},{10,0,763},{11,0,449},{12,0,489},{13,0,153}, +{13,0,296},{14,0,138},{14,0,392},{15,0,50},{16,0,6},{16,0,12},{20,0,9},{132,10, +504},{4,11,450},{135,11,1158},{11,0,54},{13,0,173},{13,0,294},{5,10,883},{5,10, +975},{8,10,392},{148,10,7},{13,0,455},{15,0,99},{15,0,129},{144,0,68},{135,0,172 +},{132,11,754},{5,10,922},{134,10,1707},{134,0,1029},{17,11,39},{148,11,36},{4,0 +,568},{5,10,993},{7,10,515},{137,10,91},{132,0,732},{10,0,617},{138,11,617},{134 +,0,974},{7,0,989},{10,0,377},{12,0,363},{13,0,68},{13,0,94},{14,0,108},{142,0, +306},{136,0,733},{132,0,428},{7,0,1789},{135,11,1062},{7,0,2015},{140,0,665},{ +135,10,1433},{5,0,287},{7,10,921},{8,10,580},{8,10,593},{8,10,630},{138,10,28},{ +138,0,806},{4,10,911},{5,10,867},{5,10,1013},{7,10,2034},{8,10,798},{136,10,813} +,{134,0,1539},{8,11,523},{150,11,34},{135,11,740},{7,11,238},{7,11,2033},{8,11, +120},{8,11,188},{8,11,659},{9,11,598},{10,11,466},{12,11,342},{12,11,588},{13,11 +,503},{14,11,246},{143,11,92},{7,0,1563},{141,0,182},{5,10,135},{6,10,519},{7,10 +,1722},{10,10,271},{11,10,261},{145,10,54},{14,10,338},{148,10,81},{7,0,484},{4, +10,300},{133,10,436},{145,11,114},{6,0,1623},{134,0,1681},{133,11,640},{4,11,201 +},{7,11,1744},{8,11,602},{11,11,247},{11,11,826},{145,11,65},{8,11,164},{146,11, +62},{6,0,1833},{6,0,1861},{136,0,878},{134,0,1569},{8,10,357},{10,10,745},{14,10 +,426},{17,10,94},{147,10,57},{12,0,93},{12,0,501},{13,0,362},{14,0,151},{15,0,40 +},{15,0,59},{16,0,46},{17,0,25},{18,0,14},{18,0,134},{19,0,25},{19,0,69},{20,0, +16},{20,0,19},{20,0,66},{21,0,23},{21,0,25},{150,0,42},{6,0,1748},{8,0,715},{9,0 +,802},{10,0,46},{10,0,819},{13,0,308},{14,0,351},{14,0,363},{146,0,67},{132,0, +994},{4,0,63},{133,0,347},{132,0,591},{133,0,749},{7,11,1577},{10,11,304},{10,11 +,549},{11,11,424},{12,11,365},{13,11,220},{13,11,240},{142,11,33},{133,0,366},{7 +,0,557},{12,0,547},{14,0,86},{133,10,387},{135,0,1747},{132,11,907},{5,11,100},{ +10,11,329},{12,11,416},{149,11,29},{4,10,6},{5,10,708},{136,10,75},{7,10,1351},{ +9,10,581},{10,10,639},{11,10,453},{140,10,584},{7,0,89},{132,10,303},{138,10,772 +},{132,11,176},{5,11,636},{5,11,998},{8,11,26},{137,11,358},{7,11,9},{7,11,1508} +,{9,11,317},{10,11,210},{10,11,292},{10,11,533},{11,11,555},{12,11,526},{12,11, +607},{13,11,263},{13,11,459},{142,11,271},{134,0,1463},{6,0,772},{6,0,1137},{139 +,11,595},{7,0,977},{139,11,66},{138,0,893},{20,0,48},{148,11,48},{5,0,824},{133, +0,941},{134,11,295},{7,0,1543},{7,0,1785},{10,0,690},{4,10,106},{139,10,717},{7, +0,440},{8,0,230},{139,0,106},{5,10,890},{133,10,988},{6,10,626},{142,10,431},{10 +,11,127},{141,11,27},{17,0,32},{10,10,706},{150,10,44},{132,0,216},{137,0,332},{ +4,10,698},{136,11,119},{139,11,267},{138,10,17},{11,11,526},{11,11,939},{141,11, +290},{7,11,1167},{11,11,934},{13,11,391},{145,11,76},{139,11,39},{134,10,84},{4, +0,914},{5,0,800},{133,0,852},{10,0,416},{141,0,115},{7,0,564},{142,0,168},{4,0, +918},{133,0,876},{134,0,1764},{152,0,3},{4,0,92},{5,0,274},{7,11,126},{136,11,84 +},{140,10,498},{136,11,790},{8,0,501},{5,10,986},{6,10,130},{7,10,1582},{8,10, +458},{10,10,101},{10,10,318},{138,10,823},{6,11,64},{12,11,377},{141,11,309},{5, +0,743},{138,0,851},{4,0,49},{7,0,280},{135,0,1633},{134,0,879},{136,0,47},{7,10, +1644},{137,10,129},{132,0,865},{134,0,1202},{9,11,34},{139,11,484},{135,10,997}, +{5,0,272},{5,0,908},{5,0,942},{8,0,197},{9,0,47},{11,0,538},{139,0,742},{6,11, +1700},{7,11,26},{7,11,293},{7,11,382},{7,11,1026},{7,11,1087},{7,11,2027},{8,11, +24},{8,11,114},{8,11,252},{8,11,727},{8,11,729},{9,11,30},{9,11,199},{9,11,231}, +{9,11,251},{9,11,334},{9,11,361},{9,11,488},{9,11,712},{10,11,55},{10,11,60},{10 +,11,232},{10,11,332},{10,11,384},{10,11,396},{10,11,504},{10,11,542},{10,11,652} +,{11,11,20},{11,11,48},{11,11,207},{11,11,291},{11,11,298},{11,11,342},{11,11, +365},{11,11,394},{11,11,620},{11,11,705},{11,11,1017},{12,11,123},{12,11,340},{ +12,11,406},{12,11,643},{13,11,61},{13,11,269},{13,11,311},{13,11,319},{13,11,486 +},{14,11,234},{15,11,62},{15,11,85},{16,11,71},{18,11,119},{148,11,105},{6,0, +1455},{150,11,37},{135,10,1927},{135,0,1911},{137,0,891},{7,10,1756},{137,10,98} +,{7,10,1046},{139,10,160},{132,0,761},{6,11,379},{7,11,270},{7,11,1116},{8,11, +176},{8,11,183},{9,11,432},{9,11,661},{12,11,247},{12,11,617},{146,11,125},{6,10 +,45},{7,10,433},{8,10,129},{9,10,21},{10,10,392},{11,10,79},{12,10,499},{13,10, +199},{141,10,451},{4,0,407},{5,11,792},{133,11,900},{132,0,560},{135,0,183},{13, +0,490},{7,10,558},{136,10,353},{4,0,475},{6,0,731},{11,0,35},{13,0,71},{13,0,177 +},{14,0,422},{133,10,785},{8,10,81},{9,10,189},{9,10,201},{11,10,478},{11,10,712 +},{141,10,338},{4,0,418},{4,0,819},{133,10,353},{151,10,26},{4,11,901},{133,11, +776},{132,0,575},{7,0,818},{16,0,92},{17,0,14},{17,0,45},{18,0,75},{148,0,18},{6 +,0,222},{7,0,636},{7,0,1620},{8,0,409},{9,0,693},{139,0,77},{6,10,25},{7,10,855} +,{7,10,1258},{144,10,32},{6,0,1880},{6,0,1887},{6,0,1918},{6,0,1924},{9,0,967},{ +9,0,995},{9,0,1015},{12,0,826},{12,0,849},{12,0,857},{12,0,860},{12,0,886},{12,0 +,932},{18,0,228},{18,0,231},{146,0,240},{134,0,633},{134,0,1308},{4,11,37},{5,11 +,334},{135,11,1253},{10,0,86},{4,10,4},{7,10,1118},{7,10,1320},{7,10,1706},{8,10 +,277},{9,10,622},{11,10,724},{12,10,350},{12,10,397},{13,10,28},{13,10,159},{15, +10,89},{18,10,5},{19,10,9},{20,10,34},{150,10,47},{132,11,508},{137,11,448},{12, +11,107},{146,11,31},{132,0,817},{134,0,663},{133,0,882},{134,0,914},{132,11,540} +,{132,11,533},{136,11,608},{8,0,885},{138,0,865},{132,0,426},{6,0,58},{7,0,745}, +{7,0,1969},{8,0,399},{8,0,675},{9,0,479},{9,0,731},{10,0,330},{10,0,593},{10,0, +817},{11,0,32},{11,0,133},{11,0,221},{145,0,68},{134,10,255},{7,0,102},{137,0, +538},{137,10,216},{7,11,253},{136,11,549},{135,11,912},{9,10,183},{139,10,286},{ +11,10,956},{151,10,3},{8,11,527},{18,11,60},{147,11,24},{4,10,536},{7,10,1141},{ +10,10,723},{139,10,371},{133,11,920},{7,0,876},{135,10,285},{135,10,560},{132,10 +,690},{142,11,126},{11,10,33},{12,10,571},{149,10,1},{133,0,566},{9,0,139},{10,0 +,399},{11,0,469},{12,0,634},{13,0,223},{132,11,483},{6,0,48},{135,0,63},{18,0,12 +},{7,10,1862},{12,10,491},{12,10,520},{13,10,383},{142,10,244},{135,11,1665},{ +132,11,448},{9,11,495},{146,11,104},{6,0,114},{7,0,1224},{7,0,1556},{136,0,3},{4 +,10,190},{133,10,554},{8,0,576},{9,0,267},{133,10,1001},{133,10,446},{133,0,933} +,{139,11,1009},{8,11,653},{13,11,93},{147,11,14},{6,0,692},{6,0,821},{134,0,1077 +},{5,11,172},{135,11,801},{138,0,752},{4,0,375},{134,0,638},{134,0,1011},{140,11 +,540},{9,0,96},{133,11,260},{139,11,587},{135,10,1231},{12,0,30},{13,0,148},{14, +0,87},{14,0,182},{16,0,42},{20,0,70},{132,10,304},{6,0,1398},{7,0,56},{7,0,1989} +,{8,0,337},{8,0,738},{9,0,600},{12,0,37},{13,0,447},{142,0,92},{138,0,666},{5,0, +394},{7,0,487},{136,0,246},{9,0,437},{6,10,53},{6,10,199},{7,10,1408},{8,10,32}, +{8,10,93},{10,10,397},{10,10,629},{11,10,593},{11,10,763},{13,10,326},{145,10,35 +},{134,10,105},{9,0,320},{10,0,506},{138,10,794},{7,11,57},{8,11,167},{8,11,375} +,{9,11,82},{9,11,561},{10,11,620},{10,11,770},{11,10,704},{141,10,396},{6,0,1003 +},{5,10,114},{5,10,255},{141,10,285},{7,0,866},{135,0,1163},{133,11,531},{132,0, +328},{7,10,2035},{8,10,19},{9,10,89},{138,10,831},{8,11,194},{136,11,756},{136,0 +,1000},{5,11,453},{134,11,441},{4,0,101},{5,0,833},{7,0,1171},{136,0,744},{133,0 +,726},{136,10,746},{138,0,176},{6,0,9},{6,0,397},{7,0,53},{7,0,1742},{10,0,632}, +{11,0,828},{140,0,146},{135,11,22},{145,11,64},{132,0,839},{11,0,417},{12,0,223} +,{140,0,265},{4,11,102},{7,11,815},{7,11,1699},{139,11,964},{5,10,955},{136,10, +814},{6,0,1931},{6,0,2007},{18,0,246},{146,0,247},{8,0,198},{11,0,29},{140,0,534 +},{135,0,1771},{6,0,846},{7,11,1010},{11,11,733},{11,11,759},{12,11,563},{13,11, +34},{14,11,101},{18,11,45},{146,11,129},{4,0,186},{5,0,157},{8,0,168},{138,0,6}, +{132,11,899},{133,10,56},{148,10,100},{133,0,875},{5,0,773},{5,0,991},{6,0,1635} +,{134,0,1788},{6,0,1274},{9,0,477},{141,0,78},{4,0,639},{7,0,111},{8,0,581},{12, +0,177},{6,11,52},{9,11,104},{9,11,559},{10,10,4},{10,10,13},{11,10,638},{12,11, +308},{19,11,87},{148,10,57},{132,11,604},{4,11,301},{133,10,738},{133,10,758},{ +134,0,1747},{7,11,1440},{11,11,854},{11,11,872},{11,11,921},{12,11,551},{13,11, +472},{142,11,367},{7,0,1364},{7,0,1907},{141,0,158},{134,0,873},{4,0,404},{4,0, +659},{7,0,552},{135,0,675},{135,10,1112},{139,10,328},{7,11,508},{137,10,133},{ +133,0,391},{5,10,110},{6,10,169},{6,10,1702},{7,10,400},{8,10,538},{9,10,184},{9 +,10,524},{140,10,218},{6,11,310},{7,11,1849},{8,11,72},{8,11,272},{8,11,431},{9, +11,12},{9,11,351},{10,11,563},{10,11,630},{10,11,810},{11,11,367},{11,11,599},{ +11,11,686},{140,11,672},{5,0,540},{6,0,1697},{136,0,668},{132,0,883},{134,0,78}, +{12,0,628},{18,0,79},{6,10,133},{9,10,353},{139,10,993},{6,11,181},{7,11,537},{8 +,11,64},{9,11,127},{10,11,496},{12,11,510},{141,11,384},{6,10,93},{7,10,1422},{7 +,10,1851},{8,10,673},{9,10,529},{140,10,43},{137,10,371},{134,0,1460},{134,0,962 +},{4,11,244},{135,11,233},{9,10,25},{10,10,467},{138,10,559},{4,10,335},{135,10, +942},{133,0,460},{135,11,334},{134,11,1650},{4,0,199},{139,0,34},{5,10,601},{8, +10,39},{10,10,773},{11,10,84},{12,10,205},{142,10,1},{133,10,870},{134,0,388},{ +14,0,474},{148,0,120},{133,11,369},{139,0,271},{4,0,511},{9,0,333},{9,0,379},{10 +,0,602},{11,0,441},{11,0,723},{11,0,976},{12,0,357},{132,10,181},{134,0,608},{ +134,10,1652},{22,0,49},{137,11,338},{140,0,988},{134,0,617},{5,0,938},{136,0,707 +},{132,10,97},{5,10,147},{6,10,286},{7,10,1362},{141,10,176},{6,0,756},{134,0, +1149},{133,11,896},{6,10,375},{7,10,169},{7,10,254},{136,10,780},{134,0,1583},{ +135,10,1447},{139,0,285},{7,11,1117},{8,11,393},{136,11,539},{135,0,344},{6,0, +469},{7,0,1709},{138,0,515},{5,10,629},{135,10,1549},{5,11,4},{5,11,810},{6,11, +13},{6,11,538},{6,11,1690},{6,11,1726},{7,11,499},{7,11,1819},{8,11,148},{8,11, +696},{8,11,791},{12,11,125},{13,11,54},{143,11,9},{135,11,1268},{137,0,404},{132 +,0,500},{5,0,68},{134,0,383},{11,0,216},{139,0,340},{4,11,925},{5,11,803},{8,11, +698},{138,11,828},{4,0,337},{6,0,353},{7,0,1934},{8,0,488},{137,0,429},{7,0,236} +,{7,0,1795},{8,0,259},{9,0,135},{9,0,177},{9,0,860},{10,0,825},{11,0,115},{11,0, +370},{11,0,405},{11,0,604},{12,0,10},{12,0,667},{12,0,669},{13,0,76},{14,0,310}, +{15,0,76},{15,0,147},{148,0,23},{4,0,15},{4,0,490},{5,0,22},{6,0,244},{7,0,40},{ +7,0,200},{7,0,906},{7,0,1199},{9,0,616},{10,0,716},{11,0,635},{11,0,801},{140,0, +458},{12,0,756},{132,10,420},{134,0,1504},{6,0,757},{133,11,383},{6,0,1266},{135 +,0,1735},{5,0,598},{7,0,791},{8,0,108},{9,0,123},{7,10,1570},{140,10,542},{142, +11,410},{9,11,660},{138,11,347} +}; + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_STATIC_DICT_LUT_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/utf8_util.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/utf8_util.c index a2b5c3a6776..a334927f369 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/utf8_util.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/utf8_util.c @@ -4,25 +4,26 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Heuristics for deciding about the UTF8-ness of strings. +/* Heuristics for deciding about the UTF8-ness of strings. */ #include "./utf8_util.h" -#include "./types.h" +#include <brotli/types.h> -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -namespace { - -size_t ParseAsUTF8(int* symbol, const uint8_t* input, size_t size) { - // ASCII +static size_t BrotliParseAsUTF8( + int* symbol, const uint8_t* input, size_t size) { + /* ASCII */ if ((input[0] & 0x80) == 0) { *symbol = input[0]; if (*symbol > 0) { return 1; } } - // 2-byte UTF8 + /* 2-byte UTF8 */ if (size > 1u && (input[0] & 0xe0) == 0xc0 && (input[1] & 0xc0) == 0x80) { @@ -32,7 +33,7 @@ size_t ParseAsUTF8(int* symbol, const uint8_t* input, size_t size) { return 2; } } - // 3-byte UFT8 + /* 3-byte UFT8 */ if (size > 2u && (input[0] & 0xf0) == 0xe0 && (input[1] & 0xc0) == 0x80 && @@ -44,7 +45,7 @@ size_t ParseAsUTF8(int* symbol, const uint8_t* input, size_t size) { return 3; } } - // 4-byte UFT8 + /* 4-byte UFT8 */ if (size > 3u && (input[0] & 0xf8) == 0xf0 && (input[1] & 0xc0) == 0x80 && @@ -58,26 +59,27 @@ size_t ParseAsUTF8(int* symbol, const uint8_t* input, size_t size) { return 4; } } - // Not UTF8, emit a special symbol above the UTF8-code space + /* Not UTF8, emit a special symbol above the UTF8-code space */ *symbol = 0x110000 | input[0]; return 1; } -} // namespace - -// Returns true if at least min_fraction of the data is UTF8-encoded. -bool IsMostlyUTF8(const uint8_t* data, const size_t pos, const size_t mask, - const size_t length, const double min_fraction) { +/* Returns 1 if at least min_fraction of the data is UTF8-encoded.*/ +BROTLI_BOOL BrotliIsMostlyUTF8( + const uint8_t* data, const size_t pos, const size_t mask, + const size_t length, const double min_fraction) { size_t size_utf8 = 0; size_t i = 0; while (i < length) { int symbol; - size_t bytes_read = ParseAsUTF8( - &symbol, &data[(pos + i) & mask], length - i); + size_t bytes_read = + BrotliParseAsUTF8(&symbol, &data[(pos + i) & mask], length - i); i += bytes_read; if (symbol < 0x110000) size_utf8 += bytes_read; } - return size_utf8 > min_fraction * static_cast<double>(length); + return TO_BROTLI_BOOL(size_utf8 > min_fraction * (double)length); } -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/utf8_util.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/utf8_util.h new file mode 100644 index 00000000000..2ede131ed30 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/utf8_util.h @@ -0,0 +1,32 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Heuristics for deciding about the UTF8-ness of strings. */ + +#ifndef BROTLI_ENC_UTF8_UTIL_H_ +#define BROTLI_ENC_UTF8_UTIL_H_ + +#include <brotli/types.h> +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static const double kMinUTF8Ratio = 0.75; + +/* Returns 1 if at least min_fraction of the bytes between pos and + pos + length in the (data, mask) ring-buffer is UTF8-encoded, otherwise + returns 0. */ +BROTLI_INTERNAL BROTLI_BOOL BrotliIsMostlyUTF8( + const uint8_t* data, const size_t pos, const size_t mask, + const size_t length, const double min_fraction); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_UTF8_UTIL_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/write_bits.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/write_bits.h new file mode 100644 index 00000000000..83fdddc26f6 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/enc/write_bits.h @@ -0,0 +1,90 @@ +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Write bits into a byte array. */ + +#ifndef BROTLI_ENC_WRITE_BITS_H_ +#define BROTLI_ENC_WRITE_BITS_H_ + +#include <assert.h> +#include <stdio.h> /* printf */ + +#include <brotli/types.h> +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/*#define BIT_WRITER_DEBUG */ + +/* This function writes bits into bytes in increasing addresses, and within + a byte least-significant-bit first. + + The function can write up to 56 bits in one go with WriteBits + Example: let's assume that 3 bits (Rs below) have been written already: + + BYTE-0 BYTE+1 BYTE+2 + + 0000 0RRR 0000 0000 0000 0000 + + Now, we could write 5 or less bits in MSB by just sifting by 3 + and OR'ing to BYTE-0. + + For n bits, we take the last 5 bits, OR that with high bits in BYTE-0, + and locate the rest in BYTE+1, BYTE+2, etc. */ +static BROTLI_INLINE void BrotliWriteBits(size_t n_bits, + uint64_t bits, + size_t * BROTLI_RESTRICT pos, + uint8_t * BROTLI_RESTRICT array) { +#ifdef BROTLI_LITTLE_ENDIAN + /* This branch of the code can write up to 56 bits at a time, + 7 bits are lost by being perhaps already in *p and at least + 1 bit is needed to initialize the bit-stream ahead (i.e. if 7 + bits are in *p and we write 57 bits, then the next write will + access a byte that was never initialized). */ + uint8_t *p = &array[*pos >> 3]; + uint64_t v = *p; +#ifdef BIT_WRITER_DEBUG + printf("WriteBits %2d 0x%016llx %10d\n", n_bits, bits, *pos); +#endif + assert((bits >> n_bits) == 0); + assert(n_bits <= 56); + v |= bits << (*pos & 7); + BROTLI_UNALIGNED_STORE64LE(p, v); /* Set some bits. */ + *pos += n_bits; +#else + /* implicit & 0xff is assumed for uint8_t arithmetics */ + uint8_t *array_pos = &array[*pos >> 3]; + const size_t bits_reserved_in_first_byte = (*pos & 7); + size_t bits_left_to_write; + bits <<= bits_reserved_in_first_byte; + *array_pos++ |= (uint8_t)bits; + for (bits_left_to_write = n_bits + bits_reserved_in_first_byte; + bits_left_to_write >= 9; + bits_left_to_write -= 8) { + bits >>= 8; + *array_pos++ = (uint8_t)bits; + } + *array_pos = 0; + *pos += n_bits; +#endif +} + +static BROTLI_INLINE void BrotliWriteBitsPrepareStorage( + size_t pos, uint8_t *array) { +#ifdef BIT_WRITER_DEBUG + printf("WriteBitsPrepareStorage %10d\n", pos); +#endif + assert((pos & 7) == 0); + array[pos >> 3] = 0; +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_WRITE_BITS_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/include/brotli/decode.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/include/brotli/decode.h new file mode 100644 index 00000000000..ac4fe905a2b --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/include/brotli/decode.h @@ -0,0 +1,340 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/** + * @file + * API for Brotli decompression. + */ + +#ifndef BROTLI_DEC_DECODE_H_ +#define BROTLI_DEC_DECODE_H_ + +#include <brotli/port.h> +#include <brotli/types.h> + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/** + * Opaque structure that holds decoder state. + * + * Allocated and initialized with ::BrotliDecoderCreateInstance. + * Cleaned up and deallocated with ::BrotliDecoderDestroyInstance. + */ +typedef struct BrotliDecoderStateStruct BrotliDecoderState; + +/** + * Result type for ::BrotliDecoderDecompress and + * ::BrotliDecoderDecompressStream functions. + */ +typedef enum { + /** Decoding error, e.g. corrupted input or memory allocation problem. */ + BROTLI_DECODER_RESULT_ERROR = 0, + /** Decoding successfully completed */ + BROTLI_DECODER_RESULT_SUCCESS = 1, + /** Partially done; should be called again with more input */ + BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT = 2, + /** Partially done; should be called again with more output */ + BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT = 3 +} BrotliDecoderResult; + +/** + * Template that evaluates items of ::BrotliDecoderErrorCode. + * + * Example: @code {.cpp} + * // Log Brotli error code. + * switch (brotliDecoderErrorCode) { + * #define CASE_(PREFIX, NAME, CODE) \ + * case BROTLI_DECODER ## PREFIX ## NAME: \ + * LOG(INFO) << "error code:" << #NAME; \ + * break; + * #define NEWLINE_ + * BROTLI_DECODER_ERROR_CODES_LIST(CASE_, NEWLINE_) + * #undef CASE_ + * #undef NEWLINE_ + * default: LOG(FATAL) << "unknown brotli error code"; + * } + * @endcode + */ +#define BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE, SEPARATOR) \ + BROTLI_ERROR_CODE(_, NO_ERROR, 0) SEPARATOR \ + /* Same as BrotliDecoderResult values */ \ + BROTLI_ERROR_CODE(_, SUCCESS, 1) SEPARATOR \ + BROTLI_ERROR_CODE(_, NEEDS_MORE_INPUT, 2) SEPARATOR \ + BROTLI_ERROR_CODE(_, NEEDS_MORE_OUTPUT, 3) SEPARATOR \ + \ + /* Errors caused by invalid input */ \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_NIBBLE, -1) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, RESERVED, -2) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_META_NIBBLE, -3) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_ALPHABET, -4) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_SAME, -5) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, CL_SPACE, -6) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, HUFFMAN_SPACE, -7) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, CONTEXT_MAP_REPEAT, -8) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_1, -9) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_2, -10) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, TRANSFORM, -11) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, DICTIONARY, -12) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, WINDOW_BITS, -13) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_1, -14) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_2, -15) SEPARATOR \ + \ + /* -16..-17 codes are reserved */ \ + \ + BROTLI_ERROR_CODE(_ERROR_, COMPOUND_DICTIONARY, -18) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_, DICTIONARY_NOT_SET, -19) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_, INVALID_ARGUMENTS, -20) SEPARATOR \ + \ + /* Memory allocation problems */ \ + BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MODES, -21) SEPARATOR \ + /* Literal, insert and distance trees together */ \ + BROTLI_ERROR_CODE(_ERROR_ALLOC_, TREE_GROUPS, -22) SEPARATOR \ + /* -23..-24 codes are reserved for distinct tree groups */ \ + BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MAP, -25) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_1, -26) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_2, -27) SEPARATOR \ + /* -28..-29 codes are reserved for dynamic ring-buffer allocation */ \ + BROTLI_ERROR_CODE(_ERROR_ALLOC_, BLOCK_TYPE_TREES, -30) SEPARATOR \ + \ + /* "Impossible" states */ \ + BROTLI_ERROR_CODE(_ERROR_, UNREACHABLE, -31) + +/** + * Error code for detailed logging / production debugging. + * + * See ::BrotliDecoderGetErrorCode and ::BROTLI_LAST_ERROR_CODE. + */ +typedef enum { +#define BROTLI_COMMA_ , +#define BROTLI_ERROR_CODE_ENUM_ITEM_(PREFIX, NAME, CODE) \ + BROTLI_DECODER ## PREFIX ## NAME = CODE + BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_ENUM_ITEM_, BROTLI_COMMA_) +} BrotliDecoderErrorCode; +#undef BROTLI_ERROR_CODE_ENUM_ITEM_ +#undef BROTLI_COMMA_ + +/** + * The value of the last error code, negative integer. + * + * All other error code values are in the range from ::BROTLI_LAST_ERROR_CODE + * to @c -1. There are also 4 other possible non-error codes @c 0 .. @c 3 in + * ::BrotliDecoderErrorCode enumeration. + */ +#define BROTLI_LAST_ERROR_CODE BROTLI_DECODER_ERROR_UNREACHABLE + +/** Options to be used with ::BrotliDecoderSetParameter. */ +typedef enum BrotliDecoderParameter { + /** + * Disable "canny" ring buffer allocation strategy. + * + * Ring buffer is allocated according to window size, despite the real size of + * the content. + */ + BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION = 0 +} BrotliDecoderParameter; + +/** + * Sets the specified parameter to the given decoder instance. + * + * @param state decoder instance + * @param param parameter to set + * @param value new parameter value + * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid + * @returns ::BROTLI_TRUE if value is accepted + */ +BROTLI_DEC_API BROTLI_BOOL BrotliDecoderSetParameter( + BrotliDecoderState* state, BrotliDecoderParameter param, uint32_t value); + +/** + * Creates an instance of ::BrotliDecoderState and initializes it. + * + * The instance can be used once for decoding and should then be destroyed with + * ::BrotliDecoderDestroyInstance, it cannot be reused for a new decoding + * session. + * + * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the + * case they are both zero, default memory allocators are used. @p opaque is + * passed to @p alloc_func and @p free_func when they are called. @p free_func + * should return without doing anything when asked to free a NULL pointer. + * + * @param alloc_func custom memory allocation function + * @param free_func custom memory free function + * @param opaque custom memory manager handle + * @returns @c 0 if instance can not be allocated or initialized + * @returns pointer to initialized ::BrotliDecoderState otherwise + */ +BROTLI_DEC_API BrotliDecoderState* BrotliDecoderCreateInstance( + brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque); + +/** + * Deinitializes and frees ::BrotliDecoderState instance. + * + * @param state decoder instance to be cleaned up and deallocated + */ +BROTLI_DEC_API void BrotliDecoderDestroyInstance(BrotliDecoderState* state); + +/** + * Performs one-shot memory-to-memory decompression. + * + * Decompresses the data in @p encoded_buffer into @p decoded_buffer, and sets + * @p *decoded_size to the decompressed length. + * + * @param encoded_size size of @p encoded_buffer + * @param encoded_buffer compressed data buffer with at least @p encoded_size + * addressable bytes + * @param[in, out] decoded_size @b in: size of @p decoded_buffer; \n + * @b out: length of decompressed data written to + * @p decoded_buffer + * @param decoded_buffer decompressed data destination buffer + * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory + * allocation failed, or @p decoded_buffer is not large enough; + * @returns ::BROTLI_DECODER_RESULT_SUCCESS otherwise + */ +BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompress( + size_t encoded_size, + const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)], + size_t* decoded_size, + uint8_t decoded_buffer[BROTLI_ARRAY_PARAM(*decoded_size)]); + +/** + * Decompresses the input stream to the output stream. + * + * The values @p *available_in and @p *available_out must specify the number of + * bytes addressable at @p *next_in and @p *next_out respectively. + * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL. + * + * After each call, @p *available_in will be decremented by the amount of input + * bytes consumed, and the @p *next_in pointer will be incremented by that + * amount. Similarly, @p *available_out will be decremented by the amount of + * output bytes written, and the @p *next_out pointer will be incremented by + * that amount. + * + * @p total_out, if it is not a null-pointer, will be set to the number + * of bytes decompressed since the last @p state initialization. + * + * @note Input is never overconsumed, so @p next_in and @p available_in could be + * passed to the next consumer after decoding is complete. + * + * @param state decoder instance + * @param[in, out] available_in @b in: amount of available input; \n + * @b out: amount of unused input + * @param[in, out] next_in pointer to the next compressed byte + * @param[in, out] available_out @b in: length of output buffer; \n + * @b out: remaining size of output buffer + * @param[in, out] next_out output buffer cursor; + * can be @c NULL if @p available_out is @c 0 + * @param[out] total_out number of bytes decompressed so far; can be @c NULL + * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory + * allocation failed, arguments were invalid, etc.; + * use ::BrotliDecoderGetErrorCode to get detailed error code + * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT decoding is blocked until + * more input data is provided + * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT decoding is blocked until + * more output space is provided + * @returns ::BROTLI_DECODER_RESULT_SUCCESS decoding is finished, no more + * input might be consumed and no more output will be produced + */ +BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompressStream( + BrotliDecoderState* state, size_t* available_in, const uint8_t** next_in, + size_t* available_out, uint8_t** next_out, size_t* total_out); + +/** + * Checks if decoder has more output. + * + * @param state decoder instance + * @returns ::BROTLI_TRUE, if decoder has some unconsumed output + * @returns ::BROTLI_FALSE otherwise + */ +BROTLI_DEC_API BROTLI_BOOL BrotliDecoderHasMoreOutput( + const BrotliDecoderState* state); + +/** + * Acquires pointer to internal output buffer. + * + * This method is used to make language bindings easier and more efficient: + * -# push data to ::BrotliDecoderDecompressStream, + * until ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT is reported + * -# use ::BrotliDecoderTakeOutput to peek bytes and copy to language-specific + * entity + * + * Also this could be useful if there is an output stream that is able to + * consume all the provided data (e.g. when data is saved to file system). + * + * @attention After every call to ::BrotliDecoderTakeOutput @p *size bytes of + * output are considered consumed for all consecutive calls to the + * instance methods; returned pointer becomes invalidated as well. + * + * @note Decoder output is not guaranteed to be contiguous. This means that + * after the size-unrestricted call to ::BrotliDecoderTakeOutput, + * immediate next call to ::BrotliDecoderTakeOutput may return more data. + * + * @param state decoder instance + * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if + * any amount could be handled; \n + * @b out: amount of data pointed by returned pointer and + * considered consumed; \n + * out value is never greater than in value, unless it is @c 0 + * @returns pointer to output data + */ +BROTLI_DEC_API const uint8_t* BrotliDecoderTakeOutput( + BrotliDecoderState* state, size_t* size); + +/** + * Checks if instance has already consumed input. + * + * Instance that returns ::BROTLI_FALSE is considered "fresh" and could be + * reused. + * + * @param state decoder instance + * @returns ::BROTLI_TRUE if decoder has already used some input bytes + * @returns ::BROTLI_FALSE otherwise + */ +BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* state); + +/** + * Checks if decoder instance reached the final state. + * + * @param state decoder instance + * @returns ::BROTLI_TRUE if decoder is in a state where it reached the end of + * the input and produced all of the output + * @returns ::BROTLI_FALSE otherwise + */ +BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsFinished( + const BrotliDecoderState* state); + +/** + * Acquires a detailed error code. + * + * Should be used only after ::BrotliDecoderDecompressStream returns + * ::BROTLI_DECODER_RESULT_ERROR. + * + * See also ::BrotliDecoderErrorString + * + * @param state decoder instance + * @returns last saved error code + */ +BROTLI_DEC_API BrotliDecoderErrorCode BrotliDecoderGetErrorCode( + const BrotliDecoderState* state); + +/** + * Converts error code to a c-string. + */ +BROTLI_DEC_API const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c); + +/** + * Gets a decoder library version. + * + * Look at BROTLI_VERSION for more information. + */ +BROTLI_DEC_API uint32_t BrotliDecoderVersion(void); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_DEC_DECODE_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/include/brotli/encode.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/include/brotli/encode.h new file mode 100644 index 00000000000..8849de2fbd6 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/include/brotli/encode.h @@ -0,0 +1,403 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/** + * @file + * API for Brotli compression. + */ + +#ifndef BROTLI_ENC_ENCODE_H_ +#define BROTLI_ENC_ENCODE_H_ + +#include <brotli/port.h> +#include <brotli/types.h> + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/** Minimal value for ::BROTLI_PARAM_LGWIN parameter. */ +#define BROTLI_MIN_WINDOW_BITS 10 +/** + * Maximal value for ::BROTLI_PARAM_LGWIN parameter. + * + * @note equal to @c BROTLI_MAX_DISTANCE_BITS constant. + */ +#define BROTLI_MAX_WINDOW_BITS 24 +/** Minimal value for ::BROTLI_PARAM_LGBLOCK parameter. */ +#define BROTLI_MIN_INPUT_BLOCK_BITS 16 +/** Maximal value for ::BROTLI_PARAM_LGBLOCK parameter. */ +#define BROTLI_MAX_INPUT_BLOCK_BITS 24 +/** Minimal value for ::BROTLI_PARAM_QUALITY parameter. */ +#define BROTLI_MIN_QUALITY 0 +/** Maximal value for ::BROTLI_PARAM_QUALITY parameter. */ +#define BROTLI_MAX_QUALITY 11 + +/** Options for ::BROTLI_PARAM_MODE parameter. */ +typedef enum BrotliEncoderMode { + /** + * Default compression mode. + * + * In this mode compressor does not know anything in advance about the + * properties of the input. + */ + BROTLI_MODE_GENERIC = 0, + /** Compression mode for UTF-8 formatted text input. */ + BROTLI_MODE_TEXT = 1, + /** Compression mode used in WOFF 2.0. */ + BROTLI_MODE_FONT = 2 +} BrotliEncoderMode; + +/** Default value for ::BROTLI_PARAM_QUALITY parameter. */ +#define BROTLI_DEFAULT_QUALITY 11 +/** Default value for ::BROTLI_PARAM_LGWIN parameter. */ +#define BROTLI_DEFAULT_WINDOW 22 +/** Default value for ::BROTLI_PARAM_MODE parameter. */ +#define BROTLI_DEFAULT_MODE BROTLI_MODE_GENERIC + +/** Operations that can be performed by streaming encoder. */ +typedef enum BrotliEncoderOperation { + /** + * Process input. + * + * Encoder may postpone producing output, until it has processed enough input. + */ + BROTLI_OPERATION_PROCESS = 0, + /** + * Produce output for all processed input. + * + * Actual flush is performed when input stream is depleted and there is enough + * space in output stream. This means that client should repeat + * ::BROTLI_OPERATION_FLUSH operation until @p available_in becomes @c 0, and + * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired + * via ::BrotliEncoderTakeOutput, then operation should be repeated after + * output buffer is drained. + * + * @warning Until flush is complete, client @b SHOULD @b NOT swap, + * reduce or extend input stream. + * + * When flush is complete, output data will be sufficient for decoder to + * reproduce all the given input. + */ + BROTLI_OPERATION_FLUSH = 1, + /** + * Finalize the stream. + * + * Actual finalization is performed when input stream is depleted and there is + * enough space in output stream. This means that client should repeat + * ::BROTLI_OPERATION_FINISH operation until @p available_in becomes @c 0, and + * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired + * via ::BrotliEncoderTakeOutput, then operation should be repeated after + * output buffer is drained. + * + * @warning Until finalization is complete, client @b SHOULD @b NOT swap, + * reduce or extend input stream. + * + * Helper function ::BrotliEncoderIsFinished checks if stream is finalized and + * output fully dumped. + * + * Adding more input data to finalized stream is impossible. + */ + BROTLI_OPERATION_FINISH = 2, + /** + * Emit metadata block to stream. + * + * Metadata is opaque to Brotli: neither encoder, nor decoder processes this + * data or relies on it. It may be used to pass some extra information from + * encoder client to decoder client without interfering with main data stream. + * + * @note Encoder may emit empty metadata blocks internally, to pad encoded + * stream to byte boundary. + * + * @warning Until emitting metadata is complete client @b SHOULD @b NOT swap, + * reduce or extend input stream. + * + * @warning The whole content of input buffer is considered to be the content + * of metadata block. Do @b NOT @e append metadata to input stream, + * before it is depleted with other operations. + * + * Stream is soft-flushed before metadata block is emitted. Metadata block + * @b MUST be no longer than than 16MiB. + */ + BROTLI_OPERATION_EMIT_METADATA = 3 +} BrotliEncoderOperation; + +/** Options to be used with ::BrotliEncoderSetParameter. */ +typedef enum BrotliEncoderParameter { + /** + * Tune encoder for specific input. + * + * ::BrotliEncoderMode enumerates all available values. + */ + BROTLI_PARAM_MODE = 0, + /** + * The main compression speed-density lever. + * + * The higher the quality, the slower the compression. Range is + * from ::BROTLI_MIN_QUALITY to ::BROTLI_MAX_QUALITY. + */ + BROTLI_PARAM_QUALITY = 1, + /** + * Recommended sliding LZ77 window size. + * + * Encoder may reduce this value, e.g. if input is much smaller than + * window size. + * + * Window size is `(1 << value) - 16`. + * + * Range is from ::BROTLI_MIN_WINDOW_BITS to ::BROTLI_MAX_WINDOW_BITS. + */ + BROTLI_PARAM_LGWIN = 2, + /** + * Recommended input block size. + * + * Encoder may reduce this value, e.g. if input is much smaller than input + * block size. + * + * Range is from ::BROTLI_MIN_INPUT_BLOCK_BITS to + * ::BROTLI_MAX_INPUT_BLOCK_BITS. + * + * @note Bigger input block size allows better compression, but consumes more + * memory. \n The rough formula of memory used for temporary input + * storage is `3 << lgBlock`. + */ + BROTLI_PARAM_LGBLOCK = 3, + /** + * Flag that affects usage of "literal context modeling" format feature. + * + * This flag is a "decoding-speed vs compression ratio" trade-off. + */ + BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING = 4, + /** + * Estimated total input size for all ::BrotliEncoderCompressStream calls. + * + * The default value is 0, which means that the total input size is unknown. + */ + BROTLI_PARAM_SIZE_HINT = 5 +} BrotliEncoderParameter; + +/** + * Opaque structure that holds encoder state. + * + * Allocated and initialized with ::BrotliEncoderCreateInstance. + * Cleaned up and deallocated with ::BrotliEncoderDestroyInstance. + */ +typedef struct BrotliEncoderStateStruct BrotliEncoderState; + +/** + * Sets the specified parameter to the given encoder instance. + * + * @param state encoder instance + * @param param parameter to set + * @param value new parameter value + * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid + * @returns ::BROTLI_FALSE if value of parameter can not be changed at current + * encoder state (e.g. when encoding is started, window size might be + * already encoded and therefore it is impossible to change it) + * @returns ::BROTLI_TRUE if value is accepted + * @warning invalid values might be accepted in case they would not break + * encoding process. + */ +BROTLI_ENC_API BROTLI_BOOL BrotliEncoderSetParameter( + BrotliEncoderState* state, BrotliEncoderParameter param, uint32_t value); + +/** + * Creates an instance of ::BrotliEncoderState and initializes it. + * + * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the + * case they are both zero, default memory allocators are used. @p opaque is + * passed to @p alloc_func and @p free_func when they are called. @p free_func + * should return without doing anything when asked to free a NULL pointer. + * + * @param alloc_func custom memory allocation function + * @param free_func custom memory free function + * @param opaque custom memory manager handle + * @returns @c 0 if instance can not be allocated or initialized + * @returns pointer to initialized ::BrotliEncoderState otherwise + */ +BROTLI_ENC_API BrotliEncoderState* BrotliEncoderCreateInstance( + brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque); + +/** + * Deinitializes and frees ::BrotliEncoderState instance. + * + * @param state decoder instance to be cleaned up and deallocated + */ +BROTLI_ENC_API void BrotliEncoderDestroyInstance(BrotliEncoderState* state); + +/** + * Calculates the output size bound for the given @p input_size. + * + * @warning Result is not applicable to ::BrotliEncoderCompressStream output, + * because every "flush" adds extra overhead bytes, and some encoder + * settings (e.g. quality @c 0 and @c 1) might imply a "soft flush" + * after every chunk of input. + * + * @param input_size size of projected input + * @returns @c 0 if result does not fit @c size_t + */ +BROTLI_ENC_API size_t BrotliEncoderMaxCompressedSize(size_t input_size); + +/** + * Performs one-shot memory-to-memory compression. + * + * Compresses the data in @p input_buffer into @p encoded_buffer, and sets + * @p *encoded_size to the compressed length. + * + * @note If ::BrotliEncoderMaxCompressedSize(@p input_size) returns non-zero + * value, then output is guaranteed to be no longer than that. + * + * @param quality quality parameter value, e.g. ::BROTLI_DEFAULT_QUALITY + * @param lgwin lgwin parameter value, e.g. ::BROTLI_DEFAULT_WINDOW + * @param mode mode parameter value, e.g. ::BROTLI_DEFAULT_MODE + * @param input_size size of @p input_buffer + * @param input_buffer input data buffer with at least @p input_size + * addressable bytes + * @param[in, out] encoded_size @b in: size of @p encoded_buffer; \n + * @b out: length of compressed data written to + * @p encoded_buffer, or @c 0 if compression fails + * @param encoded_buffer compressed data destination buffer + * @returns ::BROTLI_FALSE in case of compression error + * @returns ::BROTLI_FALSE if output buffer is too small + * @returns ::BROTLI_TRUE otherwise + */ +BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompress( + int quality, int lgwin, BrotliEncoderMode mode, size_t input_size, + const uint8_t input_buffer[BROTLI_ARRAY_PARAM(input_size)], + size_t* encoded_size, + uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(*encoded_size)]); + +/** + * Compresses input stream to output stream. + * + * The values @p *available_in and @p *available_out must specify the number of + * bytes addressable at @p *next_in and @p *next_out respectively. + * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL. + * + * After each call, @p *available_in will be decremented by the amount of input + * bytes consumed, and the @p *next_in pointer will be incremented by that + * amount. Similarly, @p *available_out will be decremented by the amount of + * output bytes written, and the @p *next_out pointer will be incremented by + * that amount. + * + * @p total_out, if it is not a null-pointer, will be set to the number + * of bytes compressed since the last @p state initialization. + * + * + * + * Internally workflow consists of 3 tasks: + * -# (optionally) copy input data to internal buffer + * -# actually compress data and (optionally) store it to internal buffer + * -# (optionally) copy compressed bytes from internal buffer to output stream + * + * Whenever all 3 tasks can't move forward anymore, or error occurs, this + * method returns the control flow to caller. + * + * @p op is used to perform flush, finish the stream, or inject metadata block. + * See ::BrotliEncoderOperation for more information. + * + * Flushing the stream means forcing encoding of all input passed to encoder and + * completing the current output block, so it could be fully decoded by stream + * decoder. To perform flush set @p op to ::BROTLI_OPERATION_FLUSH. + * Under some circumstances (e.g. lack of output stream capacity) this operation + * would require several calls to ::BrotliEncoderCompressStream. The method must + * be called again until both input stream is depleted and encoder has no more + * output (see ::BrotliEncoderHasMoreOutput) after the method is called. + * + * Finishing the stream means encoding of all input passed to encoder and + * adding specific "final" marks, so stream decoder could determine that stream + * is complete. To perform finish set @p op to ::BROTLI_OPERATION_FINISH. + * Under some circumstances (e.g. lack of output stream capacity) this operation + * would require several calls to ::BrotliEncoderCompressStream. The method must + * be called again until both input stream is depleted and encoder has no more + * output (see ::BrotliEncoderHasMoreOutput) after the method is called. + * + * @warning When flushing and finishing, @p op should not change until operation + * is complete; input stream should not be swapped, reduced or + * extended as well. + * + * @param state encoder instance + * @param op requested operation + * @param[in, out] available_in @b in: amount of available input; \n + * @b out: amount of unused input + * @param[in, out] next_in pointer to the next input byte + * @param[in, out] available_out @b in: length of output buffer; \n + * @b out: remaining size of output buffer + * @param[in, out] next_out compressed output buffer cursor; + * can be @c NULL if @p available_out is @c 0 + * @param[out] total_out number of bytes produced so far; can be @c NULL + * @returns ::BROTLI_FALSE if there was an error + * @returns ::BROTLI_TRUE otherwise + */ +BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompressStream( + BrotliEncoderState* state, BrotliEncoderOperation op, size_t* available_in, + const uint8_t** next_in, size_t* available_out, uint8_t** next_out, + size_t* total_out); + +/** + * Checks if encoder instance reached the final state. + * + * @param state encoder instance + * @returns ::BROTLI_TRUE if encoder is in a state where it reached the end of + * the input and produced all of the output + * @returns ::BROTLI_FALSE otherwise + */ +BROTLI_ENC_API BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* state); + +/** + * Checks if encoder has more output. + * + * @param state encoder instance + * @returns ::BROTLI_TRUE, if encoder has some unconsumed output + * @returns ::BROTLI_FALSE otherwise + */ +BROTLI_ENC_API BROTLI_BOOL BrotliEncoderHasMoreOutput( + BrotliEncoderState* state); + +/** + * Acquires pointer to internal output buffer. + * + * This method is used to make language bindings easier and more efficient: + * -# push data to ::BrotliEncoderCompressStream, + * until ::BrotliEncoderHasMoreOutput returns BROTL_TRUE + * -# use ::BrotliEncoderTakeOutput to peek bytes and copy to language-specific + * entity + * + * Also this could be useful if there is an output stream that is able to + * consume all the provided data (e.g. when data is saved to file system). + * + * @attention After every call to ::BrotliEncoderTakeOutput @p *size bytes of + * output are considered consumed for all consecutive calls to the + * instance methods; returned pointer becomes invalidated as well. + * + * @note Encoder output is not guaranteed to be contiguous. This means that + * after the size-unrestricted call to ::BrotliEncoderTakeOutput, + * immediate next call to ::BrotliEncoderTakeOutput may return more data. + * + * @param state encoder instance + * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if + * any amount could be handled; \n + * @b out: amount of data pointed by returned pointer and + * considered consumed; \n + * out value is never greater than in value, unless it is @c 0 + * @returns pointer to output data + */ +BROTLI_ENC_API const uint8_t* BrotliEncoderTakeOutput( + BrotliEncoderState* state, size_t* size); + + +/** + * Gets an encoder library version. + * + * Look at BROTLI_VERSION for more information. + */ +BROTLI_ENC_API uint32_t BrotliEncoderVersion(void); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_ENCODE_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/include/brotli/port.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/include/brotli/port.h new file mode 100644 index 00000000000..16c31d426d7 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/include/brotli/port.h @@ -0,0 +1,146 @@ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Macros for compiler / platform specific features and build options. */ + +#ifndef BROTLI_COMMON_PORT_H_ +#define BROTLI_COMMON_PORT_H_ + +/* Compatibility with non-clang compilers. */ +#ifndef __has_builtin +#define __has_builtin(x) 0 +#endif + +#ifndef __has_attribute +#define __has_attribute(x) 0 +#endif + +#ifndef __has_feature +#define __has_feature(x) 0 +#endif + +#if defined(__GNUC__) && defined(__GNUC_MINOR__) +#define BROTLI_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) +#else +#define BROTLI_GCC_VERSION 0 +#endif + +#if defined(__ICC) +#define BROTLI_ICC_VERSION __ICC +#else +#define BROTLI_ICC_VERSION 0 +#endif + +#if defined(BROTLI_BUILD_MODERN_COMPILER) +#define BROTLI_MODERN_COMPILER 1 +#elif BROTLI_GCC_VERSION >= 304 || BROTLI_ICC_VERSION >= 1600 +#define BROTLI_MODERN_COMPILER 1 +#else +#define BROTLI_MODERN_COMPILER 0 +#endif + +/* Define "BROTLI_PREDICT_TRUE" and "BROTLI_PREDICT_FALSE" macros for capable + compilers. + +To apply compiler hint, enclose the branching condition into macros, like this: + + if (BROTLI_PREDICT_TRUE(zero == 0)) { + // main execution path + } else { + // compiler should place this code outside of main execution path + } + +OR: + + if (BROTLI_PREDICT_FALSE(something_rare_or_unexpected_happens)) { + // compiler should place this code outside of main execution path + } + +*/ +#if BROTLI_MODERN_COMPILER || __has_builtin(__builtin_expect) +#define BROTLI_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1)) +#define BROTLI_PREDICT_FALSE(x) (__builtin_expect(x, 0)) +#else +#define BROTLI_PREDICT_FALSE(x) (x) +#define BROTLI_PREDICT_TRUE(x) (x) +#endif + +#if BROTLI_MODERN_COMPILER || __has_attribute(always_inline) +#define BROTLI_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((always_inline)) +#else +#define BROTLI_ATTRIBUTE_ALWAYS_INLINE +#endif + +#if defined(_WIN32) || defined(__CYGWIN__) +#define BROTLI_ATTRIBUTE_VISIBILITY_HIDDEN +#elif BROTLI_MODERN_COMPILER || __has_attribute(visibility) +#define BROTLI_ATTRIBUTE_VISIBILITY_HIDDEN \ + __attribute__ ((visibility ("hidden"))) +#else +#define BROTLI_ATTRIBUTE_VISIBILITY_HIDDEN +#endif + +#ifndef BROTLI_INTERNAL +#define BROTLI_INTERNAL BROTLI_ATTRIBUTE_VISIBILITY_HIDDEN +#endif + +#if defined(BROTLI_SHARED_COMPILATION) && defined(_WIN32) +#if defined(BROTLICOMMON_SHARED_COMPILATION) +#define BROTLI_COMMON_API __declspec(dllexport) +#else +#define BROTLI_COMMON_API __declspec(dllimport) +#endif /* BROTLICOMMON_SHARED_COMPILATION */ +#if defined(BROTLIDEC_SHARED_COMPILATION) +#define BROTLI_DEC_API __declspec(dllexport) +#else +#define BROTLI_DEC_API __declspec(dllimport) +#endif /* BROTLIDEC_SHARED_COMPILATION */ +#if defined(BROTLIENC_SHARED_COMPILATION) +#define BROTLI_ENC_API __declspec(dllexport) +#else +#define BROTLI_ENC_API __declspec(dllimport) +#endif /* BROTLIENC_SHARED_COMPILATION */ +#else /* BROTLI_SHARED_COMPILATION && _WIN32 */ +#define BROTLI_COMMON_API +#define BROTLI_DEC_API +#define BROTLI_ENC_API +#endif + +#ifndef _MSC_VER +#if defined(__cplusplus) || !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) +#define BROTLI_INLINE inline BROTLI_ATTRIBUTE_ALWAYS_INLINE +#else +#define BROTLI_INLINE +#endif +#else /* _MSC_VER */ +#define BROTLI_INLINE __forceinline +#endif /* _MSC_VER */ + +#if !defined(__cplusplus) && !defined(c_plusplus) && \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) +#define BROTLI_RESTRICT restrict +#elif BROTLI_GCC_VERSION > 295 || defined(__llvm__) +#define BROTLI_RESTRICT __restrict +#else +#define BROTLI_RESTRICT +#endif + +#if BROTLI_MODERN_COMPILER || __has_attribute(noinline) +#define BROTLI_NOINLINE __attribute__((noinline)) +#else +#define BROTLI_NOINLINE +#endif + +#if BROTLI_MODERN_COMPILER || __has_attribute(deprecated) +#define BROTLI_DEPRECATED __attribute__((deprecated)) +#else +#define BROTLI_DEPRECATED +#endif + +#define BROTLI_UNUSED(X) (void)(X) + +#endif /* BROTLI_COMMON_PORT_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/include/brotli/types.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/include/brotli/types.h new file mode 100644 index 00000000000..fcb2710289e --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/include/brotli/types.h @@ -0,0 +1,90 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/** + * @file + * Common types used in decoder and encoder API. + */ + +#ifndef BROTLI_COMMON_TYPES_H_ +#define BROTLI_COMMON_TYPES_H_ + +#include <stddef.h> /* for size_t */ + +#if defined(_MSC_VER) && (_MSC_VER < 1600) +typedef __int8 int8_t; +typedef unsigned __int8 uint8_t; +typedef __int16 int16_t; +typedef unsigned __int16 uint16_t; +typedef __int32 int32_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int64 uint64_t; +typedef __int64 int64_t; +#else +#include <stdint.h> +#endif /* defined(_MSC_VER) && (_MSC_VER < 1600) */ + +/** + * A portable @c bool replacement. + * + * ::BROTLI_BOOL is a "documentation" type: actually it is @c int, but in API it + * denotes a type, whose only values are ::BROTLI_TRUE and ::BROTLI_FALSE. + * + * ::BROTLI_BOOL values passed to Brotli should either be ::BROTLI_TRUE or + * ::BROTLI_FALSE, or be a result of ::TO_BROTLI_BOOL macros. + * + * ::BROTLI_BOOL values returned by Brotli should not be tested for equality + * with @c true, @c false, ::BROTLI_TRUE, ::BROTLI_FALSE, but rather should be + * evaluated, for example: @code{.cpp} + * if (SomeBrotliFunction(encoder, BROTLI_TRUE) && + * !OtherBrotliFunction(decoder, BROTLI_FALSE)) { + * bool x = !!YetAnotherBrotliFunction(encoder, TO_BROLTI_BOOL(2 * 2 == 4)); + * DoSomething(x); + * } + * @endcode + */ +#define BROTLI_BOOL int +/** Portable @c true replacement. */ +#define BROTLI_TRUE 1 +/** Portable @c false replacement. */ +#define BROTLI_FALSE 0 +/** @c bool to ::BROTLI_BOOL conversion macros. */ +#define TO_BROTLI_BOOL(X) (!!(X) ? BROTLI_TRUE : BROTLI_FALSE) + +#define BROTLI_MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low) + +#define BROTLI_UINT32_MAX (~((uint32_t)0)) +#define BROTLI_SIZE_MAX (~((size_t)0)) + +/** + * Allocating function pointer type. + * + * @param opaque custom memory manager handle provided by client + * @param size requested memory region size; can not be @c 0 + * @returns @c 0 in the case of failure + * @returns a valid pointer to a memory region of at least @p size bytes + * long otherwise + */ +typedef void* (*brotli_alloc_func)(void* opaque, size_t size); + +/** + * Deallocating function pointer type. + * + * This function @b SHOULD do nothing if @p address is @c 0. + * + * @param opaque custom memory manager handle provided by client + * @param address memory region pointer returned by ::brotli_alloc_func, or @c 0 + */ +typedef void (*brotli_free_func)(void* opaque, void* address); + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__cplusplus) && !defined(__PGI) +#define BROTLI_ARRAY_PARAM(L) L +#else +#define BROTLI_ARRAY_PARAM(L) +#endif + +#endif /* BROTLI_COMMON_TYPES_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/macbinary.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/macbinary.c index de63210774d..85df7c5971e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/macbinary.c +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/macbinary.c @@ -90,7 +90,7 @@ /* is followed by the resource section (padded to a mult of 128 bytes) */ /* Crc code taken from: */ -/* http://www.ctan.org/tex-archive/tools/macutils/crc/ */ +/* http:// mirror.ctan.org/tools/macutils/crc */ /* MacBinary files use the same CRC that binhex does (in the MacBinary header) */ /* ******************************** Creation ******************************** */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/nowakowskittfinstr.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/nowakowskittfinstr.c index 774f302d95b..e56cc7a0092 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/nowakowskittfinstr.c +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/nowakowskittfinstr.c @@ -382,8 +382,7 @@ static int GetBlueScale(SplineFont *sf) { char *str, *end; double bs; int result; - - if ( sf->private==NULL) + if ( sf->private==NULL || (str=PSDictHasEntry(sf->private,"BlueScale"))==NULL ) return 42; bs = strtod(str, &end); @@ -4383,11 +4382,9 @@ return( false ); static uint8 *FixDStemPoint ( InstrCt *ct,StemData *stem, int pt,int refpt,int firstedge,int cvt,BasePoint *fv ) { uint8 *instrs, *touched; - int ptcnt; DiagPointInfo *diagpts; diagpts = ct->diagpts; - ptcnt = ct->gd->realcnt; touched = ct->touched; instrs = ct->pt; @@ -4494,7 +4491,7 @@ return( instrs ); * line's starting point without special exceptions. */ static uint8 *FixDstem( InstrCt *ct, StemData *ds, BasePoint *fv ) { - int startnum, a1, a2, b1, b2, ptcnt, firstedge, cvt; + int startnum, a1, a2, b1, b2, firstedge, cvt; int x_ldup, y_ldup, x_edup, y_edup, dsc1, dsc2; PointData *v1, *v2; uint8 *touched; @@ -4503,7 +4500,6 @@ static uint8 *FixDstem( InstrCt *ct, StemData *ds, BasePoint *fv ) { if ( ds->ldone && ds->rdone ) return( ct->pt ); - ptcnt = ct->ptcnt; touched = ct->touched; dsc1 = DStemHasSnappableCorners( ct,ds,ds->keypts[0],ds->keypts[2] ); @@ -4590,12 +4586,10 @@ static uint8 *FixPointOnLine ( DiagPointInfo *diagpts,PointVector *line, uint8 *instrs, *touched; BasePoint newpv; - int ptcnt; int pushpts[4]; touched = ct->touched; instrs = ct->pt; - ptcnt = ct->ptcnt; newpv = GetVector( &line->pd1->base,&line->pd2->base,true ); @@ -4641,12 +4635,10 @@ static uint8 *InterpolateAlongDiag ( DiagPointInfo *diagpts,PointVector *line, uint8 *instrs, *touched; BasePoint newpv; - int ptcnt; int pushpts[3]; touched = ct->touched; instrs = ct->pt; - ptcnt = ct->ptcnt; if (diagpts[pd->ttfindex].count != 1 || touched[pd->ttfindex] & ( tf_x|tf_y ) || diagpts[pd->ttfindex].line[0].done > 1 ) @@ -4817,13 +4809,11 @@ static uint8 *TouchDStemPoints( InstrCt *ct,BasePoint *fv ) { int i, ptcnt, numx=0, numy=0, idx; int *tobefixedy, *tobefixedx; uint8 *instrs, *touched; - DiagPointInfo *diagpts; PointData *pd; touched = ct->touched; instrs = ct->pt; ptcnt = ct->gd->pcnt; - diagpts = ct->diagpts; tobefixedy = calloc( ptcnt,sizeof( int )); tobefixedx = calloc( ptcnt,sizeof( int )); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/tmpfile2.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/tmpfile2.cpp index 704207b1927..ac5684fdb53 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/tmpfile2.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/tmpfile2.cpp @@ -3,7 +3,7 @@ * works on POSIX and Windows systems. * License: Revised BSD license used by FontForge * https://github.com/fontforge/fontforge/blob/master/LICENSE -* (C) 2017 Martin Gieseking <martin.gieseking@uos.de> */ +* (C) 2017-2018 Martin Gieseking <martin.gieseking@uos.de> */ #include <cstdio> #include <cstdlib> diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/LICENSE.md b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/LICENSE.md new file mode 100644 index 00000000000..36b7cd93cdf --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/LICENSE.md @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +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, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.am new file mode 100644 index 00000000000..ff07a8cfb93 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.am @@ -0,0 +1,7 @@ +noinst_HEADERS = \ + include/mpark/config.hpp \ + include/mpark/in_place.hpp \ + include/mpark/lib.hpp \ + include/mpark/variant.hpp + +EXTRA_DIST = LICENSE.md diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.in new file mode 100644 index 00000000000..e8956784d3c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.in @@ -0,0 +1,549 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = dvisvgm-src/libs/variant +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \ + $(top_srcdir)/../../m4/kpse-common.m4 \ + $(top_srcdir)/../../m4/kpse-cxx-hack.m4 \ + $(top_srcdir)/../../m4/kpse-freetype2-flags.m4 \ + $(top_srcdir)/../../m4/kpse-kpathsea-flags.m4 \ + $(top_srcdir)/../../m4/kpse-potrace-flags.m4 \ + $(top_srcdir)/../../m4/kpse-warnings.m4 \ + $(top_srcdir)/../../m4/kpse-win32.m4 \ + $(top_srcdir)/../../m4/kpse-zlib-flags.m4 \ + $(top_srcdir)/../../m4/libtool.m4 \ + $(top_srcdir)/../../m4/ltoptions.m4 \ + $(top_srcdir)/../../m4/ltsugar.m4 \ + $(top_srcdir)/../../m4/ltversion.m4 \ + $(top_srcdir)/../../m4/lt~obsolete.m4 $(top_srcdir)/version.ac \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CODE_COVERAGE_RULES = @CODE_COVERAGE_RULES@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXXLD = @CXXLD@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DVISVGM_TREE = @DVISVGM_TREE@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FREETYPE2_DEPEND = @FREETYPE2_DEPEND@ +FREETYPE2_INCLUDES = @FREETYPE2_INCLUDES@ +FREETYPE2_LIBS = @FREETYPE2_LIBS@ +FT2_CONFIG = @FT2_CONFIG@ +GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KPATHSEA_DEPEND = @KPATHSEA_DEPEND@ +KPATHSEA_INCLUDES = @KPATHSEA_INCLUDES@ +KPATHSEA_LIBS = @KPATHSEA_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGS_INCLUDES = @LIBGS_INCLUDES@ +LIBGS_LIBS = @LIBGS_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POTRACE_DEPEND = @POTRACE_DEPEND@ +POTRACE_INCLUDES = @POTRACE_INCLUDES@ +POTRACE_LIBS = @POTRACE_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ +ZLIB_DEPEND = @ZLIB_DEPEND@ +ZLIB_INCLUDES = @ZLIB_INCLUDES@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_HEADERS = \ + include/mpark/config.hpp \ + include/mpark/in_place.hpp \ + include/mpark/lib.hpp \ + include/mpark/variant.hpp + +EXTRA_DIST = LICENSE.md +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign dvisvgm-src/libs/variant/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign dvisvgm-src/libs/variant/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/include/mpark/config.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/include/mpark/config.hpp new file mode 100644 index 00000000000..0d6f4adc3b4 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/include/mpark/config.hpp @@ -0,0 +1,74 @@ +// MPark.Variant +// +// Copyright Michael Park, 2015-2017 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) + +#ifndef MPARK_CONFIG_HPP +#define MPARK_CONFIG_HPP + +// MSVC 2015 Update 3. +#if __cplusplus < 201103L && (!defined(_MSC_VER) || _MSC_FULL_VER < 190024210) +#error "MPark.Variant requires C++11 support." +#endif + +#ifndef __has_builtin +#define __has_builtin(x) 0 +#endif + +#ifndef __has_include +#define __has_include(x) 0 +#endif + +#ifndef __has_feature +#define __has_feature(x) 0 +#endif + +#if __has_builtin(__builtin_addressof) || \ + (defined(__GNUC__) && __GNUC__ >= 7) || defined(_MSC_VER) +#define MPARK_BUILTIN_ADDRESSOF +#endif + +#if __has_builtin(__builtin_unreachable) +#define MPARK_BUILTIN_UNREACHABLE +#endif + +#if __has_builtin(__type_pack_element) +#define MPARK_TYPE_PACK_ELEMENT +#endif + +#if defined(__cpp_constexpr) && __cpp_constexpr >= 201304 +#define MPARK_CPP14_CONSTEXPR +#endif + +#if __has_feature(cxx_exceptions) || defined(__cpp_exceptions) || \ + (defined(_MSC_VER) && defined(_CPPUNWIND)) +#define MPARK_EXCEPTIONS +#endif + +#if defined(__cpp_generic_lambdas) || defined(_MSC_VER) +#define MPARK_GENERIC_LAMBDAS +#endif + +#if defined(__cpp_lib_integer_sequence) +#define MPARK_INTEGER_SEQUENCE +#endif + +#if defined(__cpp_return_type_deduction) || defined(_MSC_VER) +#define MPARK_RETURN_TYPE_DEDUCTION +#endif + +#if defined(__cpp_lib_transparent_operators) || defined(_MSC_VER) +#define MPARK_TRANSPARENT_OPERATORS +#endif + +#if defined(__cpp_variable_templates) || defined(_MSC_VER) +#define MPARK_VARIABLE_TEMPLATES +#endif + +#if !defined(__GLIBCXX__) || __has_include(<codecvt>) // >= libstdc++-5 +#define MPARK_TRIVIALITY_TYPE_TRAITS +#endif + +#endif // MPARK_CONFIG_HPP diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/include/mpark/in_place.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/include/mpark/in_place.hpp new file mode 100644 index 00000000000..56cae131131 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/include/mpark/in_place.hpp @@ -0,0 +1,35 @@ +// MPark.Variant +// +// Copyright Michael Park, 2015-2017 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) + +#ifndef MPARK_IN_PLACE_HPP +#define MPARK_IN_PLACE_HPP + +#include <cstddef> + +#include "config.hpp" + +namespace mpark { + + struct in_place_t { explicit in_place_t() = default; }; + + template <std::size_t I> + struct in_place_index_t { explicit in_place_index_t() = default; }; + + template <typename T> + struct in_place_type_t { explicit in_place_type_t() = default; }; + +#ifdef MPARK_VARIABLE_TEMPLATES + constexpr in_place_t in_place{}; + + template <std::size_t I> constexpr in_place_index_t<I> in_place_index{}; + + template <typename T> constexpr in_place_type_t<T> in_place_type{}; +#endif + +} // namespace mpark + +#endif // MPARK_IN_PLACE_HPP diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/include/mpark/lib.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/include/mpark/lib.hpp new file mode 100644 index 00000000000..c3efdd99617 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/include/mpark/lib.hpp @@ -0,0 +1,442 @@ +// MPark.Variant +// +// Copyright Michael Park, 2015-2017 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) + +#ifndef MPARK_LIB_HPP +#define MPARK_LIB_HPP + +#include <memory> +#include <functional> +#include <type_traits> +#include <utility> + +#include "config.hpp" + +#define RETURN(...) \ + noexcept(noexcept(__VA_ARGS__)) -> decltype(__VA_ARGS__) { \ + return __VA_ARGS__; \ + } + +namespace mpark { + namespace lib { + template <typename T> + struct identity { using type = T; }; + + inline namespace cpp14 { + template <typename T, std::size_t N> + struct array { + constexpr const T &operator[](std::size_t index) const { + return data[index]; + } + + T data[N == 0 ? 1 : N]; + }; + + template <typename T> + using add_pointer_t = typename std::add_pointer<T>::type; + + template <typename... Ts> + using common_type_t = typename std::common_type<Ts...>::type; + + template <typename T> + using decay_t = typename std::decay<T>::type; + + template <bool B, typename T = void> + using enable_if_t = typename std::enable_if<B, T>::type; + + template <typename T> + using remove_const_t = typename std::remove_const<T>::type; + + template <typename T> + using remove_reference_t = typename std::remove_reference<T>::type; + + template <typename T> + inline constexpr T &&forward(remove_reference_t<T> &t) noexcept { + return static_cast<T &&>(t); + } + + template <typename T> + inline constexpr T &&forward(remove_reference_t<T> &&t) noexcept { + static_assert(!std::is_lvalue_reference<T>::value, + "can not forward an rvalue as an lvalue"); + return static_cast<T &&>(t); + } + + template <typename T> + inline constexpr remove_reference_t<T> &&move(T &&t) noexcept { + return static_cast<remove_reference_t<T> &&>(t); + } + +#ifdef MPARK_INTEGER_SEQUENCE + using std::integer_sequence; + using std::index_sequence; + using std::make_index_sequence; + using std::index_sequence_for; +#else + template <typename T, T... Is> + struct integer_sequence { + using value_type = T; + static constexpr std::size_t size() noexcept { return sizeof...(Is); } + }; + + template <std::size_t... Is> + using index_sequence = integer_sequence<std::size_t, Is...>; + + template <typename Lhs, typename Rhs> + struct make_index_sequence_concat; + + template <std::size_t... Lhs, std::size_t... Rhs> + struct make_index_sequence_concat<index_sequence<Lhs...>, + index_sequence<Rhs...>> + : identity<index_sequence<Lhs..., (sizeof...(Lhs) + Rhs)...>> {}; + + template <std::size_t N> + struct make_index_sequence_impl; + + template <std::size_t N> + using make_index_sequence = typename make_index_sequence_impl<N>::type; + + template <std::size_t N> + struct make_index_sequence_impl + : make_index_sequence_concat<make_index_sequence<N / 2>, + make_index_sequence<N - (N / 2)>> {}; + + template <> + struct make_index_sequence_impl<0> : identity<index_sequence<>> {}; + + template <> + struct make_index_sequence_impl<1> : identity<index_sequence<0>> {}; + + template <typename... Ts> + using index_sequence_for = make_index_sequence<sizeof...(Ts)>; +#endif + + // <functional> +#ifdef MPARK_TRANSPARENT_OPERATORS + using equal_to = std::equal_to<>; +#else + struct equal_to { + template <typename Lhs, typename Rhs> + inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const + RETURN(lib::forward<Lhs>(lhs) == lib::forward<Rhs>(rhs)) + }; +#endif + +#ifdef MPARK_TRANSPARENT_OPERATORS + using not_equal_to = std::not_equal_to<>; +#else + struct not_equal_to { + template <typename Lhs, typename Rhs> + inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const + RETURN(lib::forward<Lhs>(lhs) != lib::forward<Rhs>(rhs)) + }; +#endif + +#ifdef MPARK_TRANSPARENT_OPERATORS + using less = std::less<>; +#else + struct less { + template <typename Lhs, typename Rhs> + inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const + RETURN(lib::forward<Lhs>(lhs) < lib::forward<Rhs>(rhs)) + }; +#endif + +#ifdef MPARK_TRANSPARENT_OPERATORS + using greater = std::greater<>; +#else + struct greater { + template <typename Lhs, typename Rhs> + inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const + RETURN(lib::forward<Lhs>(lhs) > lib::forward<Rhs>(rhs)) + }; +#endif + +#ifdef MPARK_TRANSPARENT_OPERATORS + using less_equal = std::less_equal<>; +#else + struct less_equal { + template <typename Lhs, typename Rhs> + inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const + RETURN(lib::forward<Lhs>(lhs) <= lib::forward<Rhs>(rhs)) + }; +#endif + +#ifdef MPARK_TRANSPARENT_OPERATORS + using greater_equal = std::greater_equal<>; +#else + struct greater_equal { + template <typename Lhs, typename Rhs> + inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const + RETURN(lib::forward<Lhs>(lhs) >= lib::forward<Rhs>(rhs)) + }; +#endif + } // namespace cpp14 + + inline namespace cpp17 { + + // <type_traits> + template <bool B> + using bool_constant = std::integral_constant<bool, B>; + + template <typename...> + struct voider : identity<void> {}; + + template <typename... Ts> + using void_t = typename voider<Ts...>::type; + + namespace detail { + namespace swappable { + + using std::swap; + + template <typename T> + struct is_swappable { + private: + template <typename U, + typename = decltype(swap(std::declval<U &>(), + std::declval<U &>()))> + inline static std::true_type test(int); + + template <typename U> + inline static std::false_type test(...); + + public: + static constexpr bool value = decltype(test<T>(0))::value; + }; + + template <typename T, bool = is_swappable<T>::value> + struct is_nothrow_swappable { + static constexpr bool value = + noexcept(swap(std::declval<T &>(), std::declval<T &>())); + }; + + template <typename T> + struct is_nothrow_swappable<T, false> : std::false_type {}; + + } // namespace swappable + } // namespace detail + + using detail::swappable::is_swappable; + using detail::swappable::is_nothrow_swappable; + + // <functional> +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4100) +#endif + template <typename F, typename... As> + inline constexpr auto invoke(F &&f, As &&... as) + RETURN(lib::forward<F>(f)(lib::forward<As>(as)...)) +#ifdef _MSC_VER +#pragma warning(pop) +#endif + + template <typename B, typename T, typename D> + inline constexpr auto invoke(T B::*pmv, D &&d) + RETURN(lib::forward<D>(d).*pmv) + + template <typename Pmv, typename Ptr> + inline constexpr auto invoke(Pmv pmv, Ptr &&ptr) + RETURN((*lib::forward<Ptr>(ptr)).*pmv) + + template <typename B, typename T, typename D, typename... As> + inline constexpr auto invoke(T B::*pmf, D &&d, As &&... as) + RETURN((lib::forward<D>(d).*pmf)(lib::forward<As>(as)...)) + + template <typename Pmf, typename Ptr, typename... As> + inline constexpr auto invoke(Pmf pmf, Ptr &&ptr, As &&... as) + RETURN(((*lib::forward<Ptr>(ptr)).*pmf)(lib::forward<As>(as)...)) + + namespace detail { + + template <typename Void, typename, typename...> + struct invoke_result {}; + + template <typename F, typename... Args> + struct invoke_result<void_t<decltype(lib::invoke( + std::declval<F>(), std::declval<Args>()...))>, + F, + Args...> + : identity<decltype( + lib::invoke(std::declval<F>(), std::declval<Args>()...))> {}; + + } // namespace detail + + template <typename F, typename... Args> + using invoke_result = detail::invoke_result<void, F, Args...>; + + template <typename F, typename... Args> + using invoke_result_t = typename invoke_result<F, Args...>::type; + + namespace detail { + + template <typename Void, typename, typename...> + struct is_invocable : std::false_type {}; + + template <typename F, typename... Args> + struct is_invocable<void_t<invoke_result_t<F, Args...>>, F, Args...> + : std::true_type {}; + + template <typename Void, typename, typename, typename...> + struct is_invocable_r : std::false_type {}; + + template <typename R, typename F, typename... Args> + struct is_invocable_r<void_t<invoke_result_t<F, Args...>>, + R, + F, + Args...> + : std::is_convertible<invoke_result_t<F, Args...>, R> {}; + + } // namespace detail + + template <typename F, typename... Args> + using is_invocable = detail::is_invocable<void, F, Args...>; + + template <typename R, typename F, typename... Args> + using is_invocable_r = detail::is_invocable_r<void, R, F, Args...>; + + // <memory> +#ifdef MPARK_BUILTIN_ADDRESSOF + template <typename T> + inline constexpr T *addressof(T &arg) { + return __builtin_addressof(arg); + } +#else + namespace detail { + + namespace has_addressof_impl { + + struct fail; + + template <typename T> + inline fail operator&(T &&); + + template <typename T> + inline static constexpr bool impl() { + return (std::is_class<T>::value || std::is_union<T>::value) && + !std::is_same<decltype(&std::declval<T &>()), fail>::value; + } + + } // namespace has_addressof_impl + + template <typename T> + using has_addressof = bool_constant<has_addressof_impl::impl<T>()>; + + template <typename T> + inline constexpr T *addressof(T &arg, std::true_type) { + return std::addressof(arg); + } + + template <typename T> + inline constexpr T *addressof(T &arg, std::false_type) { + return &arg; + } + + } // namespace detail + + template <typename T> + inline constexpr T *addressof(T &arg) { + return detail::addressof(arg, detail::has_addressof<T>{}); + } +#endif + + template <typename T> + inline constexpr T *addressof(const T &&) = delete; + + } // namespace cpp17 + + template <typename T> + struct remove_all_extents : identity<T> {}; + + template <typename T, std::size_t N> + struct remove_all_extents<array<T, N>> : remove_all_extents<T> {}; + + template <typename T> + using remove_all_extents_t = typename remove_all_extents<T>::type; + + template <std::size_t N> + using size_constant = std::integral_constant<std::size_t, N>; + + template <std::size_t I, typename T> + struct indexed_type : size_constant<I>, identity<T> {}; + + template <bool... Bs> + using all = std::is_same<integer_sequence<bool, true, Bs...>, + integer_sequence<bool, Bs..., true>>; + +#ifdef MPARK_TYPE_PACK_ELEMENT + template <std::size_t I, typename... Ts> + using type_pack_element_t = __type_pack_element<I, Ts...>; +#else + template <std::size_t I, typename... Ts> + struct type_pack_element_impl { + private: + template <typename> + struct set; + + template <std::size_t... Is> + struct set<index_sequence<Is...>> : indexed_type<Is, Ts>... {}; + + template <typename T> + inline static std::enable_if<true, T> impl(indexed_type<I, T>); + + inline static std::enable_if<false> impl(...); + + public: + using type = decltype(impl(set<index_sequence_for<Ts...>>{})); + }; + + template <std::size_t I, typename... Ts> + using type_pack_element = typename type_pack_element_impl<I, Ts...>::type; + + template <std::size_t I, typename... Ts> + using type_pack_element_t = typename type_pack_element<I, Ts...>::type; +#endif + +#ifdef MPARK_TRIVIALITY_TYPE_TRAITS + using std::is_trivially_copy_constructible; + using std::is_trivially_move_constructible; + using std::is_trivially_copy_assignable; + using std::is_trivially_move_assignable; +#else + template <typename T> + struct is_trivially_copy_constructible + : bool_constant< + std::is_copy_constructible<T>::value && __has_trivial_copy(T)> {}; + + template <typename T> + struct is_trivially_move_constructible : bool_constant<__is_trivial(T)> {}; + + template <typename T> + struct is_trivially_copy_assignable + : bool_constant< + std::is_copy_assignable<T>::value && __has_trivial_assign(T)> {}; + + template <typename T> + struct is_trivially_move_assignable : bool_constant<__is_trivial(T)> {}; +#endif + + template <typename T, bool> + struct dependent_type : T {}; + + template <typename Is, std::size_t J> + struct push_back; + + template <typename Is, std::size_t J> + using push_back_t = typename push_back<Is, J>::type; + + template <std::size_t... Is, std::size_t J> + struct push_back<index_sequence<Is...>, J> { + using type = index_sequence<Is..., J>; + }; + + } // namespace lib +} // namespace mpark + +#undef RETURN + +#endif // MPARK_LIB_HPP diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/include/mpark/variant.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/include/mpark/variant.hpp new file mode 100644 index 00000000000..09ad6445bd3 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/include/mpark/variant.hpp @@ -0,0 +1,1908 @@ +// MPark.Variant +// +// Copyright Michael Park, 2015-2017 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) + +#ifndef MPARK_VARIANT_HPP +#define MPARK_VARIANT_HPP + +/* + variant synopsis + +namespace std { + + // 20.7.2, class template variant + template <class... Types> + class variant { + public: + + // 20.7.2.1, constructors + constexpr variant() noexcept(see below); + variant(const variant&); + variant(variant&&) noexcept(see below); + + template <class T> constexpr variant(T&&) noexcept(see below); + + template <class T, class... Args> + constexpr explicit variant(in_place_type_t<T>, Args&&...); + + template <class T, class U, class... Args> + constexpr explicit variant( + in_place_type_t<T>, initializer_list<U>, Args&&...); + + template <size_t I, class... Args> + constexpr explicit variant(in_place_index_t<I>, Args&&...); + + template <size_t I, class U, class... Args> + constexpr explicit variant( + in_place_index_t<I>, initializer_list<U>, Args&&...); + + // 20.7.2.2, destructor + ~variant(); + + // 20.7.2.3, assignment + variant& operator=(const variant&); + variant& operator=(variant&&) noexcept(see below); + + template <class T> variant& operator=(T&&) noexcept(see below); + + // 20.7.2.4, modifiers + template <class T, class... Args> + T& emplace(Args&&...); + + template <class T, class U, class... Args> + T& emplace(initializer_list<U>, Args&&...); + + template <size_t I, class... Args> + variant_alternative<I, variant>& emplace(Args&&...); + + template <size_t I, class U, class... Args> + variant_alternative<I, variant>& emplace(initializer_list<U>, Args&&...); + + // 20.7.2.5, value status + constexpr bool valueless_by_exception() const noexcept; + constexpr size_t index() const noexcept; + + // 20.7.2.6, swap + void swap(variant&) noexcept(see below); + }; + + // 20.7.3, variant helper classes + template <class T> struct variant_size; // undefined + + template <class T> + constexpr size_t variant_size_v = variant_size<T>::value; + + template <class T> struct variant_size<const T>; + template <class T> struct variant_size<volatile T>; + template <class T> struct variant_size<const volatile T>; + + template <class... Types> + struct variant_size<variant<Types...>>; + + template <size_t I, class T> struct variant_alternative; // undefined + + template <size_t I, class T> + using variant_alternative_t = typename variant_alternative<I, T>::type; + + template <size_t I, class T> struct variant_alternative<I, const T>; + template <size_t I, class T> struct variant_alternative<I, volatile T>; + template <size_t I, class T> struct variant_alternative<I, const volatile T>; + + template <size_t I, class... Types> + struct variant_alternative<I, variant<Types...>>; + + constexpr size_t variant_npos = -1; + + // 20.7.4, value access + template <class T, class... Types> + constexpr bool holds_alternative(const variant<Types...>&) noexcept; + + template <size_t I, class... Types> + constexpr variant_alternative_t<I, variant<Types...>>& + get(variant<Types...>&); + + template <size_t I, class... Types> + constexpr variant_alternative_t<I, variant<Types...>>&& + get(variant<Types...>&&); + + template <size_t I, class... Types> + constexpr variant_alternative_t<I, variant<Types...>> const& + get(const variant<Types...>&); + + template <size_t I, class... Types> + constexpr variant_alternative_t<I, variant<Types...>> const&& + get(const variant<Types...>&&); + + template <class T, class... Types> + constexpr T& get(variant<Types...>&); + + template <class T, class... Types> + constexpr T&& get(variant<Types...>&&); + + template <class T, class... Types> + constexpr const T& get(const variant<Types...>&); + + template <class T, class... Types> + constexpr const T&& get(const variant<Types...>&&); + + template <size_t I, class... Types> + constexpr add_pointer_t<variant_alternative_t<I, variant<Types...>>> + get_if(variant<Types...>*) noexcept; + + template <size_t I, class... Types> + constexpr add_pointer_t<const variant_alternative_t<I, variant<Types...>>> + get_if(const variant<Types...>*) noexcept; + + template <class T, class... Types> + constexpr add_pointer_t<T> + get_if(variant<Types...>*) noexcept; + + template <class T, class... Types> + constexpr add_pointer_t<const T> + get_if(const variant<Types...>*) noexcept; + + // 20.7.5, relational operators + template <class... Types> + constexpr bool operator==(const variant<Types...>&, const variant<Types...>&); + + template <class... Types> + constexpr bool operator!=(const variant<Types...>&, const variant<Types...>&); + + template <class... Types> + constexpr bool operator<(const variant<Types...>&, const variant<Types...>&); + + template <class... Types> + constexpr bool operator>(const variant<Types...>&, const variant<Types...>&); + + template <class... Types> + constexpr bool operator<=(const variant<Types...>&, const variant<Types...>&); + + template <class... Types> + constexpr bool operator>=(const variant<Types...>&, const variant<Types...>&); + + // 20.7.6, visitation + template <class Visitor, class... Variants> + constexpr see below visit(Visitor&&, Variants&&...); + + // 20.7.7, class monostate + struct monostate; + + // 20.7.8, monostate relational operators + constexpr bool operator<(monostate, monostate) noexcept; + constexpr bool operator>(monostate, monostate) noexcept; + constexpr bool operator<=(monostate, monostate) noexcept; + constexpr bool operator>=(monostate, monostate) noexcept; + constexpr bool operator==(monostate, monostate) noexcept; + constexpr bool operator!=(monostate, monostate) noexcept; + + // 20.7.9, specialized algorithms + template <class... Types> + void swap(variant<Types...>&, variant<Types...>&) noexcept(see below); + + // 20.7.10, class bad_variant_access + class bad_variant_access; + + // 20.7.11, hash support + template <class T> struct hash; + template <class... Types> struct hash<variant<Types...>>; + template <> struct hash<monostate>; + +} // namespace std + +*/ + +#include <cstddef> +#include <exception> +#include <functional> +#include <initializer_list> +#include <new> +#include <type_traits> +#include <utility> + +#include "config.hpp" +#include "in_place.hpp" +#include "lib.hpp" + +namespace mpark { + +#ifdef MPARK_RETURN_TYPE_DEDUCTION + +#define AUTO auto +#define AUTO_RETURN(...) { return __VA_ARGS__; } + +#define AUTO_REFREF auto && +#define AUTO_REFREF_RETURN(...) { return __VA_ARGS__; } + +#define DECLTYPE_AUTO decltype(auto) +#define DECLTYPE_AUTO_RETURN(...) { return __VA_ARGS__; } + +#else + +#define AUTO auto +#define AUTO_RETURN(...) \ + -> lib::decay_t<decltype(__VA_ARGS__)> { return __VA_ARGS__; } + +#define AUTO_REFREF auto +#define AUTO_REFREF_RETURN(...) \ + -> decltype((__VA_ARGS__)) { \ + static_assert(std::is_reference<decltype((__VA_ARGS__))>::value, ""); \ + return __VA_ARGS__; \ + } + +#define DECLTYPE_AUTO auto +#define DECLTYPE_AUTO_RETURN(...) \ + -> decltype(__VA_ARGS__) { return __VA_ARGS__; } + +#endif + + class bad_variant_access : public std::exception { + public: + virtual const char *what() const noexcept { return "bad_variant_access"; } + }; + + [[noreturn]] inline void throw_bad_variant_access() { +#ifdef MPARK_EXCEPTIONS + throw bad_variant_access{}; +#else + std::terminate(); +#ifdef MPARK_BUILTIN_UNREACHABLE + __builtin_unreachable(); +#endif +#endif + } + + template <typename... Ts> + class variant; + + template <typename T> + struct variant_size; + +#ifdef MPARK_VARIABLE_TEMPLATES + template <typename T> + constexpr std::size_t variant_size_v = variant_size<T>::value; +#endif + + template <typename T> + struct variant_size<const T> : variant_size<T> {}; + + template <typename T> + struct variant_size<volatile T> : variant_size<T> {}; + + template <typename T> + struct variant_size<const volatile T> : variant_size<T> {}; + + template <typename... Ts> + struct variant_size<variant<Ts...>> : lib::size_constant<sizeof...(Ts)> {}; + + template <std::size_t I, typename T> + struct variant_alternative; + + template <std::size_t I, typename T> + using variant_alternative_t = typename variant_alternative<I, T>::type; + + template <std::size_t I, typename T> + struct variant_alternative<I, const T> + : std::add_const<variant_alternative_t<I, T>> {}; + + template <std::size_t I, typename T> + struct variant_alternative<I, volatile T> + : std::add_volatile<variant_alternative_t<I, T>> {}; + + template <std::size_t I, typename T> + struct variant_alternative<I, const volatile T> + : std::add_cv<variant_alternative_t<I, T>> {}; + + template <std::size_t I, typename... Ts> + struct variant_alternative<I, variant<Ts...>> { + static_assert(I < sizeof...(Ts), + "Index out of bounds in std::variant_alternative<>"); + using type = lib::type_pack_element_t<I, Ts...>; + }; + + constexpr std::size_t variant_npos = static_cast<std::size_t>(-1); + + namespace detail { + + constexpr std::size_t not_found = static_cast<std::size_t>(-1); + constexpr std::size_t ambiguous = static_cast<std::size_t>(-2); + +#ifdef MPARK_CPP14_CONSTEXPR + template <typename T, typename... Ts> + inline constexpr std::size_t find_index() { + constexpr lib::array<bool, sizeof...(Ts)> matches = { + {std::is_same<T, Ts>::value...} + }; + std::size_t result = not_found; + for (std::size_t i = 0; i < sizeof...(Ts); ++i) { + if (matches[i]) { + if (result != not_found) { + return ambiguous; + } + result = i; + } + } + return result; + } +#else + inline constexpr std::size_t find_index_impl(std::size_t result, + std::size_t) { + return result; + } + + template <typename... Bs> + inline constexpr std::size_t find_index_impl(std::size_t result, + std::size_t idx, + bool b, + Bs... bs) { + return b ? (result != not_found ? ambiguous + : find_index_impl(idx, idx + 1, bs...)) + : find_index_impl(result, idx + 1, bs...); + } + + template <typename T, typename... Ts> + inline constexpr std::size_t find_index() { + return find_index_impl(not_found, 0, std::is_same<T, Ts>::value...); + } +#endif + + template <std::size_t I> + using find_index_sfinae_impl = + lib::enable_if_t<I != not_found && I != ambiguous, + lib::size_constant<I>>; + + template <typename T, typename... Ts> + using find_index_sfinae = find_index_sfinae_impl<find_index<T, Ts...>()>; + + template <std::size_t I> + struct find_index_checked_impl : lib::size_constant<I> { + static_assert(I != not_found, "the specified type is not found."); + static_assert(I != ambiguous, "the specified type is ambiguous."); + }; + + template <typename T, typename... Ts> + using find_index_checked = find_index_checked_impl<find_index<T, Ts...>()>; + + struct valueless_t {}; + + enum class Trait { TriviallyAvailable, Available, Unavailable }; + + template <typename T, + template <typename> class IsTriviallyAvailable, + template <typename> class IsAvailable> + inline constexpr Trait trait() { + return IsTriviallyAvailable<T>::value + ? Trait::TriviallyAvailable + : IsAvailable<T>::value ? Trait::Available + : Trait::Unavailable; + } + +#ifdef MPARK_CPP14_CONSTEXPR + template <typename... Traits> + inline constexpr Trait common_trait(Traits... traits) { + Trait result = Trait::TriviallyAvailable; + for (Trait t : {traits...}) { + if (static_cast<int>(t) > static_cast<int>(result)) { + result = t; + } + } + return result; + } +#else + inline constexpr Trait common_trait_impl(Trait result) { return result; } + + template <typename... Traits> + inline constexpr Trait common_trait_impl(Trait result, + Trait t, + Traits... ts) { + return static_cast<int>(t) > static_cast<int>(result) + ? common_trait_impl(t, ts...) + : common_trait_impl(result, ts...); + } + + template <typename... Traits> + inline constexpr Trait common_trait(Traits... ts) { + return common_trait_impl(Trait::TriviallyAvailable, ts...); + } +#endif + + template <typename... Ts> + struct traits { + static constexpr Trait copy_constructible_trait = + common_trait(trait<Ts, + lib::is_trivially_copy_constructible, + std::is_copy_constructible>()...); + + static constexpr Trait move_constructible_trait = + common_trait(trait<Ts, + lib::is_trivially_move_constructible, + std::is_move_constructible>()...); + + static constexpr Trait copy_assignable_trait = + common_trait(copy_constructible_trait, + trait<Ts, + lib::is_trivially_copy_assignable, + std::is_copy_assignable>()...); + + static constexpr Trait move_assignable_trait = + common_trait(move_constructible_trait, + trait<Ts, + lib::is_trivially_move_assignable, + std::is_move_assignable>()...); + + static constexpr Trait destructible_trait = + common_trait(trait<Ts, + std::is_trivially_destructible, + std::is_destructible>()...); + }; + + namespace access { + + struct recursive_union { +#ifdef MPARK_RETURN_TYPE_DEDUCTION + template <typename V> + inline static constexpr auto &&get_alt(V &&v, in_place_index_t<0>) { + return lib::forward<V>(v).head_; + } + + template <typename V, std::size_t I> + inline static constexpr auto &&get_alt(V &&v, in_place_index_t<I>) { + return get_alt(lib::forward<V>(v).tail_, in_place_index_t<I - 1>{}); + } +#else + template <std::size_t I, bool Dummy = true> + struct get_alt_impl { + template <typename V> + inline constexpr AUTO_REFREF operator()(V &&v) const + AUTO_REFREF_RETURN(get_alt_impl<I - 1>{}(lib::forward<V>(v).tail_)) + }; + + template <bool Dummy> + struct get_alt_impl<0, Dummy> { + template <typename V> + inline constexpr AUTO_REFREF operator()(V &&v) const + AUTO_REFREF_RETURN(lib::forward<V>(v).head_) + }; + + template <typename V, std::size_t I> + inline static constexpr AUTO_REFREF get_alt(V &&v, in_place_index_t<I>) + AUTO_REFREF_RETURN(get_alt_impl<I>{}(lib::forward<V>(v))) +#endif + }; + + struct base { + template <std::size_t I, typename V> + inline static constexpr AUTO_REFREF get_alt(V &&v) + AUTO_REFREF_RETURN(recursive_union::get_alt( + data(lib::forward<V>(v)), in_place_index_t<I>{})) + }; + + struct variant { + template <std::size_t I, typename V> + inline static constexpr AUTO_REFREF get_alt(V &&v) + AUTO_REFREF_RETURN(base::get_alt<I>(lib::forward<V>(v).impl_)) + }; + + } // namespace access + + namespace visitation { + + struct base { + template <typename T> + inline static constexpr const T &at(const T &elem) { + return elem; + } + + template <typename T, std::size_t N, typename... Is> + inline static constexpr const lib::remove_all_extents_t<T> &at( + const lib::array<T, N> &elems, std::size_t i, Is... is) { + return at(elems[i], is...); + } + + template <typename F, typename... Fs> + inline static constexpr int visit_visitor_return_type_check() { + static_assert(lib::all<std::is_same<F, Fs>::value...>::value, + "`mpark::visit` requires the visitor to have a single " + "return type."); + return 0; + } + + template <typename... Fs> + inline static constexpr lib::array< + lib::common_type_t<lib::decay_t<Fs>...>, + sizeof...(Fs)> + make_farray(Fs &&... fs) { + using result = lib::array<lib::common_type_t<lib::decay_t<Fs>...>, + sizeof...(Fs)>; + return visit_visitor_return_type_check<lib::decay_t<Fs>...>(), + result{{lib::forward<Fs>(fs)...}}; + } + + template <std::size_t... Is> + struct dispatcher { + template <typename F, typename... Vs> + struct impl { + inline static constexpr DECLTYPE_AUTO dispatch(F f, Vs... vs) + DECLTYPE_AUTO_RETURN(lib::invoke( + static_cast<F>(f), + access::base::get_alt<Is>(static_cast<Vs>(vs))...)) + }; + }; + + template <typename F, typename... Vs, std::size_t... Is> + inline static constexpr AUTO make_dispatch(lib::index_sequence<Is...>) + AUTO_RETURN(&dispatcher<Is...>::template impl<F, Vs...>::dispatch) + + template <std::size_t I, typename F, typename... Vs> + inline static constexpr AUTO make_fdiagonal_impl() + AUTO_RETURN(make_dispatch<F, Vs...>( + lib::index_sequence<lib::indexed_type<I, Vs>::value...>{})) + + template <typename F, typename... Vs, std::size_t... Is> + inline static constexpr AUTO make_fdiagonal_impl( + lib::index_sequence<Is...>) + AUTO_RETURN(make_farray(make_fdiagonal_impl<Is, F, Vs...>()...)) + + template <typename F, typename V, typename... Vs> + inline static constexpr /* auto * */ auto make_fdiagonal() + -> decltype(make_fdiagonal_impl<F, V, Vs...>( + lib::make_index_sequence<lib::decay_t<V>::size()>{})) { + static_assert(lib::all<(lib::decay_t<V>::size() == + lib::decay_t<Vs>::size())...>::value, + "all of the variants must be the same size."); + return make_fdiagonal_impl<F, V, Vs...>( + lib::make_index_sequence<lib::decay_t<V>::size()>{}); + } + +#ifdef MPARK_RETURN_TYPE_DEDUCTION + template <typename F, typename... Vs, typename Is> + inline static constexpr auto make_fmatrix_impl(Is is) { + return make_dispatch<F, Vs...>(is); + } + + template <typename F, + typename... Vs, + typename Is, + std::size_t... Js, + typename... Ls> + inline static constexpr auto make_fmatrix_impl( + Is, lib::index_sequence<Js...>, Ls... ls) { + return make_farray(make_fmatrix_impl<F, Vs...>( + lib::push_back_t<Is, Js>{}, ls...)...); + } + + template <typename F, typename... Vs> + inline static constexpr auto make_fmatrix() { + return make_fmatrix_impl<F, Vs...>( + lib::index_sequence<>{}, + lib::make_index_sequence<lib::decay_t<Vs>::size()>{}...); + } +#else + template <typename F, typename... Vs> + struct make_fmatrix_impl { + template <typename...> + struct impl; + + template <typename Is> + struct impl<Is> { + inline constexpr AUTO operator()() const + AUTO_RETURN(make_dispatch<F, Vs...>(Is{})) + }; + + template <typename Is, std::size_t... Js, typename... Ls> + struct impl<Is, lib::index_sequence<Js...>, Ls...> { + inline constexpr AUTO operator()() const + AUTO_RETURN( + make_farray(impl<lib::push_back_t<Is, Js>, Ls...>{}()...)) + }; + }; + + template <typename F, typename... Vs> + inline static constexpr AUTO make_fmatrix() + AUTO_RETURN( + typename make_fmatrix_impl<F, Vs...>::template impl< + lib::index_sequence<>, + lib::make_index_sequence<lib::decay_t<Vs>::size()>...>{}()) +#endif + }; // namespace base + + template <typename F, typename... Vs> + using FDiagonal = decltype(base::make_fdiagonal<F, Vs...>()); + + template <typename F, typename... Vs> + struct fdiagonal { +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4268) +#endif + static constexpr FDiagonal<F, Vs...> value = + base::make_fdiagonal<F, Vs...>(); +#ifdef _MSC_VER +#pragma warning(pop) +#endif + }; + + template <typename F, typename... Vs> + constexpr FDiagonal<F, Vs...> fdiagonal<F, Vs...>::value; + + template <typename F, typename... Vs> + using FMatrix = decltype(base::make_fmatrix<F, Vs...>()); + + template <typename F, typename... Vs> + struct fmatrix { +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4268) +#endif + static constexpr FMatrix<F, Vs...> value = + base::make_fmatrix<F, Vs...>(); +#ifdef _MSC_VER +#pragma warning(pop) +#endif + }; + + template <typename F, typename... Vs> + constexpr FMatrix<F, Vs...> fmatrix<F, Vs...>::value; + + struct alt { + template <typename Visitor, typename... Vs> + inline static constexpr DECLTYPE_AUTO visit_alt_at(std::size_t index, + Visitor &&visitor, + Vs &&... vs) + DECLTYPE_AUTO_RETURN(base::at( + fdiagonal<Visitor &&, + decltype(as_base(lib::forward<Vs>(vs)))...>::value, + index)(lib::forward<Visitor>(visitor), + as_base(lib::forward<Vs>(vs))...)) + + template <typename Visitor, typename... Vs> + inline static constexpr DECLTYPE_AUTO visit_alt(Visitor &&visitor, + Vs &&... vs) + DECLTYPE_AUTO_RETURN(base::at( + fmatrix<Visitor &&, + decltype(as_base(lib::forward<Vs>(vs)))...>::value, + vs.index()...)(lib::forward<Visitor>(visitor), + as_base(lib::forward<Vs>(vs))...)) + }; + + struct variant { + private: + template <typename Visitor, typename... Values> + struct visit_exhaustive_visitor_check { + static_assert( + lib::is_invocable<Visitor, Values...>::value, + "`mpark::visit` requires the visitor to be exhaustive."); + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4100) +#endif + inline constexpr DECLTYPE_AUTO operator()(Visitor &&visitor, + Values &&... values) const + DECLTYPE_AUTO_RETURN(lib::invoke(lib::forward<Visitor>(visitor), + lib::forward<Values>(values)...)) +#ifdef _MSC_VER +#pragma warning(pop) +#endif + }; + + template <typename Visitor> + struct value_visitor { + Visitor &&visitor_; + + template <typename... Alts> + inline constexpr DECLTYPE_AUTO operator()(Alts &&... alts) const + DECLTYPE_AUTO_RETURN( + visit_exhaustive_visitor_check< + Visitor, + decltype((lib::forward<Alts>(alts).value))...>{}( + lib::forward<Visitor>(visitor_), + lib::forward<Alts>(alts).value...)) + }; + + template <typename Visitor> + inline static constexpr AUTO make_value_visitor(Visitor &&visitor) + AUTO_RETURN(value_visitor<Visitor>{lib::forward<Visitor>(visitor)}) + + public: + template <typename Visitor, typename... Vs> + inline static constexpr DECLTYPE_AUTO visit_alt_at(std::size_t index, + Visitor &&visitor, + Vs &&... vs) + DECLTYPE_AUTO_RETURN( + alt::visit_alt_at(index, + lib::forward<Visitor>(visitor), + lib::forward<Vs>(vs).impl_...)) + + template <typename Visitor, typename... Vs> + inline static constexpr DECLTYPE_AUTO visit_alt(Visitor &&visitor, + Vs &&... vs) + DECLTYPE_AUTO_RETURN(alt::visit_alt(lib::forward<Visitor>(visitor), + lib::forward<Vs>(vs).impl_...)) + + template <typename Visitor, typename... Vs> + inline static constexpr DECLTYPE_AUTO visit_value_at(std::size_t index, + Visitor &&visitor, + Vs &&... vs) + DECLTYPE_AUTO_RETURN( + visit_alt_at(index, + make_value_visitor(lib::forward<Visitor>(visitor)), + lib::forward<Vs>(vs)...)) + + template <typename Visitor, typename... Vs> + inline static constexpr DECLTYPE_AUTO visit_value(Visitor &&visitor, + Vs &&... vs) + DECLTYPE_AUTO_RETURN( + visit_alt(make_value_visitor(lib::forward<Visitor>(visitor)), + lib::forward<Vs>(vs)...)) + }; + + } // namespace visitation + + template <std::size_t Index, typename T> + struct alt { + using value_type = T; + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4244) +#endif + template <typename... Args> + inline explicit constexpr alt(in_place_t, Args &&... args) + : value(lib::forward<Args>(args)...) {} +#ifdef _MSC_VER +#pragma warning(pop) +#endif + + T value; + }; + + template <Trait DestructibleTrait, std::size_t Index, typename... Ts> + union recursive_union; + + template <Trait DestructibleTrait, std::size_t Index> + union recursive_union<DestructibleTrait, Index> {}; + +#define MPARK_VARIANT_RECURSIVE_UNION(destructible_trait, destructor) \ + template <std::size_t Index, typename T, typename... Ts> \ + union recursive_union<destructible_trait, Index, T, Ts...> { \ + public: \ + inline explicit constexpr recursive_union(valueless_t) noexcept \ + : dummy_{} {} \ + \ + template <typename... Args> \ + inline explicit constexpr recursive_union(in_place_index_t<0>, \ + Args &&... args) \ + : head_(in_place_t{}, lib::forward<Args>(args)...) {} \ + \ + template <std::size_t I, typename... Args> \ + inline explicit constexpr recursive_union(in_place_index_t<I>, \ + Args &&... args) \ + : tail_(in_place_index_t<I - 1>{}, lib::forward<Args>(args)...) {} \ + \ + recursive_union(const recursive_union &) = default; \ + recursive_union(recursive_union &&) = default; \ + \ + destructor \ + \ + recursive_union &operator=(const recursive_union &) = default; \ + recursive_union &operator=(recursive_union &&) = default; \ + \ + private: \ + char dummy_; \ + alt<Index, T> head_; \ + recursive_union<destructible_trait, Index + 1, Ts...> tail_; \ + \ + friend struct access::recursive_union; \ + } + + MPARK_VARIANT_RECURSIVE_UNION(Trait::TriviallyAvailable, + ~recursive_union() = default;); + MPARK_VARIANT_RECURSIVE_UNION(Trait::Available, + ~recursive_union() {}); + MPARK_VARIANT_RECURSIVE_UNION(Trait::Unavailable, + ~recursive_union() = delete;); + +#undef MPARK_VARIANT_RECURSIVE_UNION + + using index_t = unsigned int; + + template <Trait DestructibleTrait, typename... Ts> + class base { + public: + inline explicit constexpr base(valueless_t tag) noexcept + : data_(tag), index_(static_cast<index_t>(-1)) {} + + template <std::size_t I, typename... Args> + inline explicit constexpr base(in_place_index_t<I>, Args &&... args) + : data_(in_place_index_t<I>{}, lib::forward<Args>(args)...), + index_(I) {} + + inline constexpr bool valueless_by_exception() const noexcept { + return index_ == static_cast<index_t>(-1); + } + + inline constexpr std::size_t index() const noexcept { + return valueless_by_exception() ? variant_npos : index_; + } + + protected: + using data_t = recursive_union<DestructibleTrait, 0, Ts...>; + + friend inline constexpr base &as_base(base &b) { return b; } + friend inline constexpr const base &as_base(const base &b) { return b; } + friend inline constexpr base &&as_base(base &&b) { return lib::move(b); } + friend inline constexpr const base &&as_base(const base &&b) { return lib::move(b); } + + friend inline constexpr data_t &data(base &b) { return b.data_; } + friend inline constexpr const data_t &data(const base &b) { return b.data_; } + friend inline constexpr data_t &&data(base &&b) { return lib::move(b).data_; } + friend inline constexpr const data_t &&data(const base &&b) { return lib::move(b).data_; } + + inline static constexpr std::size_t size() { return sizeof...(Ts); } + + data_t data_; + index_t index_; + + friend struct access::base; + friend struct visitation::base; + }; + + struct dtor { +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4100) +#endif + template <typename Alt> + inline void operator()(Alt &alt) const noexcept { alt.~Alt(); } +#ifdef _MSC_VER +#pragma warning(pop) +#endif + }; + +#if defined(_MSC_VER) && _MSC_VER < 1910 +#define INHERITING_CTOR(type, base) \ + template <typename... Args> \ + inline explicit constexpr type(Args &&... args) \ + : base(lib::forward<Args>(args)...) {} +#else +#define INHERITING_CTOR(type, base) using base::base; +#endif + + template <typename Traits, Trait = Traits::destructible_trait> + class destructor; + +#define MPARK_VARIANT_DESTRUCTOR(destructible_trait, definition, destroy) \ + template <typename... Ts> \ + class destructor<traits<Ts...>, destructible_trait> \ + : public base<destructible_trait, Ts...> { \ + using super = base<destructible_trait, Ts...>; \ + \ + public: \ + INHERITING_CTOR(destructor, super) \ + using super::operator=; \ + \ + destructor(const destructor &) = default; \ + destructor(destructor &&) = default; \ + definition \ + destructor &operator=(const destructor &) = default; \ + destructor &operator=(destructor &&) = default; \ + \ + protected: \ + destroy \ + } + + MPARK_VARIANT_DESTRUCTOR( + Trait::TriviallyAvailable, + ~destructor() = default;, + inline void destroy() noexcept { + this->index_ = static_cast<index_t>(-1); + }); + + MPARK_VARIANT_DESTRUCTOR( + Trait::Available, + ~destructor() { destroy(); }, + inline void destroy() noexcept { + if (!this->valueless_by_exception()) { + visitation::alt::visit_alt(dtor{}, *this); + } + this->index_ = static_cast<index_t>(-1); + }); + + MPARK_VARIANT_DESTRUCTOR( + Trait::Unavailable, + ~destructor() = delete;, + inline void destroy() noexcept = delete;); + +#undef MPARK_VARIANT_DESTRUCTOR + + template <typename Traits> + class constructor : public destructor<Traits> { + using super = destructor<Traits>; + + public: + INHERITING_CTOR(constructor, super) + using super::operator=; + + protected: +#ifndef MPARK_GENERIC_LAMBDAS + struct ctor { + template <typename LhsAlt, typename RhsAlt> + inline void operator()(LhsAlt &lhs_alt, RhsAlt &&rhs_alt) const { + constructor::construct_alt(lhs_alt, + lib::forward<RhsAlt>(rhs_alt).value); + } + }; +#endif + + template <std::size_t I, typename T, typename... Args> + inline static T &construct_alt(alt<I, T> &a, Args &&... args) { + ::new (static_cast<void *>(lib::addressof(a))) + alt<I, T>(in_place_t{}, lib::forward<Args>(args)...); + return a.value; + } + + template <typename Rhs> + inline static void generic_construct(constructor &lhs, Rhs &&rhs) { + lhs.destroy(); + if (!rhs.valueless_by_exception()) { + visitation::alt::visit_alt_at( + rhs.index(), +#ifdef MPARK_GENERIC_LAMBDAS + [](auto &lhs_alt, auto &&rhs_alt) { + constructor::construct_alt( + lhs_alt, lib::forward<decltype(rhs_alt)>(rhs_alt).value); + } +#else + ctor{} +#endif + , + lhs, + lib::forward<Rhs>(rhs)); + lhs.index_ = rhs.index_; + } + } + }; + + template <typename Traits, Trait = Traits::move_constructible_trait> + class move_constructor; + +#define MPARK_VARIANT_MOVE_CONSTRUCTOR(move_constructible_trait, definition) \ + template <typename... Ts> \ + class move_constructor<traits<Ts...>, move_constructible_trait> \ + : public constructor<traits<Ts...>> { \ + using super = constructor<traits<Ts...>>; \ + \ + public: \ + INHERITING_CTOR(move_constructor, super) \ + using super::operator=; \ + \ + move_constructor(const move_constructor &) = default; \ + definition \ + ~move_constructor() = default; \ + move_constructor &operator=(const move_constructor &) = default; \ + move_constructor &operator=(move_constructor &&) = default; \ + } + + MPARK_VARIANT_MOVE_CONSTRUCTOR( + Trait::TriviallyAvailable, + move_constructor(move_constructor &&that) = default;); + + MPARK_VARIANT_MOVE_CONSTRUCTOR( + Trait::Available, + move_constructor(move_constructor &&that) noexcept( + lib::all<std::is_nothrow_move_constructible<Ts>::value...>::value) + : move_constructor(valueless_t{}) { + this->generic_construct(*this, lib::move(that)); + }); + + MPARK_VARIANT_MOVE_CONSTRUCTOR( + Trait::Unavailable, + move_constructor(move_constructor &&) = delete;); + +#undef MPARK_VARIANT_MOVE_CONSTRUCTOR + + template <typename Traits, Trait = Traits::copy_constructible_trait> + class copy_constructor; + +#define MPARK_VARIANT_COPY_CONSTRUCTOR(copy_constructible_trait, definition) \ + template <typename... Ts> \ + class copy_constructor<traits<Ts...>, copy_constructible_trait> \ + : public move_constructor<traits<Ts...>> { \ + using super = move_constructor<traits<Ts...>>; \ + \ + public: \ + INHERITING_CTOR(copy_constructor, super) \ + using super::operator=; \ + \ + definition \ + copy_constructor(copy_constructor &&) = default; \ + ~copy_constructor() = default; \ + copy_constructor &operator=(const copy_constructor &) = default; \ + copy_constructor &operator=(copy_constructor &&) = default; \ + } + + MPARK_VARIANT_COPY_CONSTRUCTOR( + Trait::TriviallyAvailable, + copy_constructor(const copy_constructor &that) = default;); + + MPARK_VARIANT_COPY_CONSTRUCTOR( + Trait::Available, + copy_constructor(const copy_constructor &that) + : copy_constructor(valueless_t{}) { + this->generic_construct(*this, that); + }); + + MPARK_VARIANT_COPY_CONSTRUCTOR( + Trait::Unavailable, + copy_constructor(const copy_constructor &) = delete;); + +#undef MPARK_VARIANT_COPY_CONSTRUCTOR + + template <typename Traits> + class assignment : public copy_constructor<Traits> { + using super = copy_constructor<Traits>; + + public: + INHERITING_CTOR(assignment, super) + using super::operator=; + + template <std::size_t I, typename... Args> + inline /* auto & */ auto emplace(Args &&... args) + -> decltype(this->construct_alt(access::base::get_alt<I>(*this), + lib::forward<Args>(args)...)) { + this->destroy(); + auto &result = this->construct_alt(access::base::get_alt<I>(*this), + lib::forward<Args>(args)...); + this->index_ = I; + return result; + } + + protected: +#ifndef MPARK_GENERIC_LAMBDAS + template <typename That> + struct assigner { + template <typename ThisAlt, typename ThatAlt> + inline void operator()(ThisAlt &this_alt, ThatAlt &&that_alt) const { + self->assign_alt(this_alt, lib::forward<ThatAlt>(that_alt).value); + } + assignment *self; + }; +#endif + + template <std::size_t I, typename T, typename Arg> + inline void assign_alt(alt<I, T> &a, Arg &&arg) { + if (this->index() == I) { +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4244) +#endif + a.value = lib::forward<Arg>(arg); +#ifdef _MSC_VER +#pragma warning(pop) +#endif + } else { + struct { + void operator()(std::true_type) const { + this_->emplace<I>(lib::forward<Arg>(arg_)); + } + void operator()(std::false_type) const { + this_->emplace<I>(T(lib::forward<Arg>(arg_))); + } + assignment *this_; + Arg &&arg_; + } impl{this, lib::forward<Arg>(arg)}; + impl(lib::bool_constant< + std::is_nothrow_constructible<T, Arg>::value || + !std::is_nothrow_move_constructible<T>::value>{}); + } + } + + template <typename That> + inline void generic_assign(That &&that) { + if (this->valueless_by_exception() && that.valueless_by_exception()) { + // do nothing. + } else if (that.valueless_by_exception()) { + this->destroy(); + } else { + visitation::alt::visit_alt_at( + that.index(), +#ifdef MPARK_GENERIC_LAMBDAS + [this](auto &this_alt, auto &&that_alt) { + this->assign_alt( + this_alt, lib::forward<decltype(that_alt)>(that_alt).value); + } +#else + assigner<That>{this} +#endif + , + *this, + lib::forward<That>(that)); + } + } + }; + + template <typename Traits, Trait = Traits::move_assignable_trait> + class move_assignment; + +#define MPARK_VARIANT_MOVE_ASSIGNMENT(move_assignable_trait, definition) \ + template <typename... Ts> \ + class move_assignment<traits<Ts...>, move_assignable_trait> \ + : public assignment<traits<Ts...>> { \ + using super = assignment<traits<Ts...>>; \ + \ + public: \ + INHERITING_CTOR(move_assignment, super) \ + using super::operator=; \ + \ + move_assignment(const move_assignment &) = default; \ + move_assignment(move_assignment &&) = default; \ + ~move_assignment() = default; \ + move_assignment &operator=(const move_assignment &) = default; \ + definition \ + } + + MPARK_VARIANT_MOVE_ASSIGNMENT( + Trait::TriviallyAvailable, + move_assignment &operator=(move_assignment &&that) = default;); + + MPARK_VARIANT_MOVE_ASSIGNMENT( + Trait::Available, + move_assignment & + operator=(move_assignment &&that) noexcept( + lib::all<(std::is_nothrow_move_constructible<Ts>::value && + std::is_nothrow_move_assignable<Ts>::value)...>::value) { + this->generic_assign(lib::move(that)); + return *this; + }); + + MPARK_VARIANT_MOVE_ASSIGNMENT( + Trait::Unavailable, + move_assignment &operator=(move_assignment &&) = delete;); + +#undef MPARK_VARIANT_MOVE_ASSIGNMENT + + template <typename Traits, Trait = Traits::copy_assignable_trait> + class copy_assignment; + +#define MPARK_VARIANT_COPY_ASSIGNMENT(copy_assignable_trait, definition) \ + template <typename... Ts> \ + class copy_assignment<traits<Ts...>, copy_assignable_trait> \ + : public move_assignment<traits<Ts...>> { \ + using super = move_assignment<traits<Ts...>>; \ + \ + public: \ + INHERITING_CTOR(copy_assignment, super) \ + using super::operator=; \ + \ + copy_assignment(const copy_assignment &) = default; \ + copy_assignment(copy_assignment &&) = default; \ + ~copy_assignment() = default; \ + definition \ + copy_assignment &operator=(copy_assignment &&) = default; \ + } + + MPARK_VARIANT_COPY_ASSIGNMENT( + Trait::TriviallyAvailable, + copy_assignment &operator=(const copy_assignment &that) = default;); + + MPARK_VARIANT_COPY_ASSIGNMENT( + Trait::Available, + copy_assignment &operator=(const copy_assignment &that) { + this->generic_assign(that); + return *this; + }); + + MPARK_VARIANT_COPY_ASSIGNMENT( + Trait::Unavailable, + copy_assignment &operator=(const copy_assignment &) = delete;); + +#undef MPARK_VARIANT_COPY_ASSIGNMENT + + template <typename... Ts> + class impl : public copy_assignment<traits<Ts...>> { + using super = copy_assignment<traits<Ts...>>; + + public: + INHERITING_CTOR(impl, super) + using super::operator=; + + template <std::size_t I, typename Arg> + inline void assign(Arg &&arg) { + this->assign_alt(access::base::get_alt<I>(*this), + lib::forward<Arg>(arg)); + } + + inline void swap(impl &that) { + if (this->valueless_by_exception() && that.valueless_by_exception()) { + // do nothing. + } else if (this->index() == that.index()) { + visitation::alt::visit_alt_at(this->index(), +#ifdef MPARK_GENERIC_LAMBDAS + [](auto &this_alt, auto &that_alt) { + using std::swap; + swap(this_alt.value, + that_alt.value); + } +#else + swapper{} +#endif + , + *this, + that); + } else { + impl *lhs = this; + impl *rhs = lib::addressof(that); + if (lhs->move_nothrow() && !rhs->move_nothrow()) { + std::swap(lhs, rhs); + } + impl tmp(lib::move(*rhs)); +#ifdef MPARK_EXCEPTIONS + // EXTENSION: When the move construction of `lhs` into `rhs` throws + // and `tmp` is nothrow move constructible then we move `tmp` back + // into `rhs` and provide the strong exception safety guarantee. + try { + this->generic_construct(*rhs, lib::move(*lhs)); + } catch (...) { + if (tmp.move_nothrow()) { + this->generic_construct(*rhs, lib::move(tmp)); + } + throw; + } +#else + this->generic_construct(*rhs, lib::move(*lhs)); +#endif + this->generic_construct(*lhs, lib::move(tmp)); + } + } + + private: +#ifndef MPARK_GENERIC_LAMBDAS + struct swapper { + template <typename ThisAlt, typename ThatAlt> + inline void operator()(ThisAlt &this_alt, ThatAlt &that_alt) const { + using std::swap; + swap(this_alt.value, that_alt.value); + } + }; +#endif + + inline constexpr bool move_nothrow() const { + return this->valueless_by_exception() || + lib::array<bool, sizeof...(Ts)>{ + {std::is_nothrow_move_constructible<Ts>::value...} + }[this->index()]; + } + }; + + template <std::size_t I, typename T> + struct overload_leaf { + using F = lib::size_constant<I> (*)(T); + operator F() const { return nullptr; } + }; + + template <typename... Ts> + struct overload_impl { + private: + template <typename> + struct impl; + + template <std::size_t... Is> + struct impl<lib::index_sequence<Is...>> : overload_leaf<Is, Ts>... {}; + + public: + using type = impl<lib::index_sequence_for<Ts...>>; + }; + + template <typename... Ts> + using overload = typename overload_impl<Ts...>::type; + + template <typename T, typename... Ts> + using best_match = lib::invoke_result_t<overload<Ts...>, T &&>; + + template <typename T> + struct is_in_place_index : std::false_type {}; + + template <std::size_t I> + struct is_in_place_index<in_place_index_t<I>> : std::true_type {}; + + template <typename T> + struct is_in_place_type : std::false_type {}; + + template <typename T> + struct is_in_place_type<in_place_type_t<T>> : std::true_type {}; + + } // detail + + template <typename... Ts> + class variant { + static_assert(0 < sizeof...(Ts), + "variant must consist of at least one alternative."); + + static_assert(lib::all<!std::is_array<Ts>::value...>::value, + "variant can not have an array type as an alternative."); + + static_assert(lib::all<!std::is_reference<Ts>::value...>::value, + "variant can not have a reference type as an alternative."); + + static_assert(lib::all<!std::is_void<Ts>::value...>::value, + "variant can not have a void type as an alternative."); + + public: + template < + typename Front = lib::type_pack_element_t<0, Ts...>, + lib::enable_if_t<std::is_default_constructible<Front>::value, int> = 0> + inline constexpr variant() noexcept( + std::is_nothrow_default_constructible<Front>::value) + : impl_(in_place_index_t<0>{}) {} + + variant(const variant &) = default; + variant(variant &&) = default; + + template < + typename Arg, + typename Decayed = lib::decay_t<Arg>, + lib::enable_if_t<!std::is_same<Decayed, variant>::value, int> = 0, + lib::enable_if_t<!detail::is_in_place_index<Decayed>::value, int> = 0, + lib::enable_if_t<!detail::is_in_place_type<Decayed>::value, int> = 0, + std::size_t I = detail::best_match<Arg, Ts...>::value, + typename T = lib::type_pack_element_t<I, Ts...>, + lib::enable_if_t<std::is_constructible<T, Arg>::value, int> = 0> + inline constexpr variant(Arg &&arg) noexcept( + std::is_nothrow_constructible<T, Arg>::value) + : impl_(in_place_index_t<I>{}, lib::forward<Arg>(arg)) {} + + template < + std::size_t I, + typename... Args, + typename T = lib::type_pack_element_t<I, Ts...>, + lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0> + inline explicit constexpr variant( + in_place_index_t<I>, + Args &&... args) noexcept(std::is_nothrow_constructible<T, + Args...>::value) + : impl_(in_place_index_t<I>{}, lib::forward<Args>(args)...) {} + + template < + std::size_t I, + typename Up, + typename... Args, + typename T = lib::type_pack_element_t<I, Ts...>, + lib::enable_if_t<std::is_constructible<T, + std::initializer_list<Up> &, + Args...>::value, + int> = 0> + inline explicit constexpr variant( + in_place_index_t<I>, + std::initializer_list<Up> il, + Args &&... args) noexcept(std:: + is_nothrow_constructible< + T, + std::initializer_list<Up> &, + Args...>::value) + : impl_(in_place_index_t<I>{}, il, lib::forward<Args>(args)...) {} + + template < + typename T, + typename... Args, + std::size_t I = detail::find_index_sfinae<T, Ts...>::value, + lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0> + inline explicit constexpr variant( + in_place_type_t<T>, + Args &&... args) noexcept(std::is_nothrow_constructible<T, + Args...>::value) + : impl_(in_place_index_t<I>{}, lib::forward<Args>(args)...) {} + + template < + typename T, + typename Up, + typename... Args, + std::size_t I = detail::find_index_sfinae<T, Ts...>::value, + lib::enable_if_t<std::is_constructible<T, + std::initializer_list<Up> &, + Args...>::value, + int> = 0> + inline explicit constexpr variant( + in_place_type_t<T>, + std::initializer_list<Up> il, + Args &&... args) noexcept(std:: + is_nothrow_constructible< + T, + std::initializer_list<Up> &, + Args...>::value) + : impl_(in_place_index_t<I>{}, il, lib::forward<Args>(args)...) {} + + ~variant() = default; + + variant &operator=(const variant &) = default; + variant &operator=(variant &&) = default; + + template <typename Arg, + lib::enable_if_t<!std::is_same<lib::decay_t<Arg>, variant>::value, + int> = 0, + std::size_t I = detail::best_match<Arg, Ts...>::value, + typename T = lib::type_pack_element_t<I, Ts...>, + lib::enable_if_t<(std::is_assignable<T &, Arg>::value && + std::is_constructible<T, Arg>::value), + int> = 0> + inline variant &operator=(Arg &&arg) noexcept( + (std::is_nothrow_assignable<T &, Arg>::value && + std::is_nothrow_constructible<T, Arg>::value)) { + impl_.template assign<I>(lib::forward<Arg>(arg)); + return *this; + } + + template < + std::size_t I, + typename... Args, + typename T = lib::type_pack_element_t<I, Ts...>, + lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0> + inline T &emplace(Args &&... args) { + return impl_.template emplace<I>(lib::forward<Args>(args)...); + } + + template < + std::size_t I, + typename Up, + typename... Args, + typename T = lib::type_pack_element_t<I, Ts...>, + lib::enable_if_t<std::is_constructible<T, + std::initializer_list<Up> &, + Args...>::value, + int> = 0> + inline T &emplace(std::initializer_list<Up> il, Args &&... args) { + return impl_.template emplace<I>(il, lib::forward<Args>(args)...); + } + + template < + typename T, + typename... Args, + std::size_t I = detail::find_index_sfinae<T, Ts...>::value, + lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0> + inline T &emplace(Args &&... args) { + return impl_.template emplace<I>(lib::forward<Args>(args)...); + } + + template < + typename T, + typename Up, + typename... Args, + std::size_t I = detail::find_index_sfinae<T, Ts...>::value, + lib::enable_if_t<std::is_constructible<T, + std::initializer_list<Up> &, + Args...>::value, + int> = 0> + inline T &emplace(std::initializer_list<Up> il, Args &&... args) { + return impl_.template emplace<I>(il, lib::forward<Args>(args)...); + } + + inline constexpr bool valueless_by_exception() const noexcept { + return impl_.valueless_by_exception(); + } + + inline constexpr std::size_t index() const noexcept { + return impl_.index(); + } + + template <bool Dummy = true, + lib::enable_if_t< + lib::all<Dummy, + (lib::dependent_type<std::is_move_constructible<Ts>, + Dummy>::value && + lib::dependent_type<lib::is_swappable<Ts>, + Dummy>::value)...>::value, + int> = 0> + inline void swap(variant &that) noexcept( + lib::all<(std::is_nothrow_move_constructible<Ts>::value && + lib::is_nothrow_swappable<Ts>::value)...>::value) { + impl_.swap(that.impl_); + } + + private: + detail::impl<Ts...> impl_; + + friend struct detail::access::variant; + friend struct detail::visitation::variant; + }; + + template <std::size_t I, typename... Ts> + inline constexpr bool holds_alternative(const variant<Ts...> &v) noexcept { + return v.index() == I; + } + + template <typename T, typename... Ts> + inline constexpr bool holds_alternative(const variant<Ts...> &v) noexcept { + return holds_alternative<detail::find_index_checked<T, Ts...>::value>(v); + } + + namespace detail { + template <std::size_t I, typename V> + struct generic_get_impl { + constexpr generic_get_impl(int) {} + + constexpr AUTO_REFREF operator()(V &&v) const + AUTO_REFREF_RETURN( + access::variant::get_alt<I>(lib::forward<V>(v)).value) + }; + + template <std::size_t I, typename V> + inline constexpr AUTO_REFREF generic_get(V &&v) + AUTO_REFREF_RETURN(generic_get_impl<I, V>( + holds_alternative<I>(v) ? 0 : (throw_bad_variant_access(), 0))( + lib::forward<V>(v))) + } // namespace detail + + template <std::size_t I, typename... Ts> + inline constexpr variant_alternative_t<I, variant<Ts...>> &get( + variant<Ts...> &v) { + return detail::generic_get<I>(v); + } + + template <std::size_t I, typename... Ts> + inline constexpr variant_alternative_t<I, variant<Ts...>> &&get( + variant<Ts...> &&v) { + return detail::generic_get<I>(lib::move(v)); + } + + template <std::size_t I, typename... Ts> + inline constexpr const variant_alternative_t<I, variant<Ts...>> &get( + const variant<Ts...> &v) { + return detail::generic_get<I>(v); + } + + template <std::size_t I, typename... Ts> + inline constexpr const variant_alternative_t<I, variant<Ts...>> &&get( + const variant<Ts...> &&v) { + return detail::generic_get<I>(lib::move(v)); + } + + template <typename T, typename... Ts> + inline constexpr T &get(variant<Ts...> &v) { + return get<detail::find_index_checked<T, Ts...>::value>(v); + } + + template <typename T, typename... Ts> + inline constexpr T &&get(variant<Ts...> &&v) { + return get<detail::find_index_checked<T, Ts...>::value>(lib::move(v)); + } + + template <typename T, typename... Ts> + inline constexpr const T &get(const variant<Ts...> &v) { + return get<detail::find_index_checked<T, Ts...>::value>(v); + } + + template <typename T, typename... Ts> + inline constexpr const T &&get(const variant<Ts...> &&v) { + return get<detail::find_index_checked<T, Ts...>::value>(lib::move(v)); + } + + namespace detail { + + template <std::size_t I, typename V> + inline constexpr /* auto * */ AUTO generic_get_if(V *v) noexcept + AUTO_RETURN(v && holds_alternative<I>(*v) + ? lib::addressof(access::variant::get_alt<I>(*v).value) + : nullptr) + + } // namespace detail + + template <std::size_t I, typename... Ts> + inline constexpr lib::add_pointer_t<variant_alternative_t<I, variant<Ts...>>> + get_if(variant<Ts...> *v) noexcept { + return detail::generic_get_if<I>(v); + } + + template <std::size_t I, typename... Ts> + inline constexpr lib::add_pointer_t< + const variant_alternative_t<I, variant<Ts...>>> + get_if(const variant<Ts...> *v) noexcept { + return detail::generic_get_if<I>(v); + } + + template <typename T, typename... Ts> + inline constexpr lib::add_pointer_t<T> + get_if(variant<Ts...> *v) noexcept { + return get_if<detail::find_index_checked<T, Ts...>::value>(v); + } + + template <typename T, typename... Ts> + inline constexpr lib::add_pointer_t<const T> + get_if(const variant<Ts...> *v) noexcept { + return get_if<detail::find_index_checked<T, Ts...>::value>(v); + } + + template <typename... Ts> + inline constexpr bool operator==(const variant<Ts...> &lhs, + const variant<Ts...> &rhs) { + using detail::visitation::variant; + using lib::equal_to; +#ifdef MPARK_CPP14_CONSTEXPR + if (lhs.index() != rhs.index()) return false; + if (lhs.valueless_by_exception()) return true; + return variant::visit_value_at(lhs.index(), equal_to{}, lhs, rhs); +#else + return lhs.index() == rhs.index() && + (lhs.valueless_by_exception() || + variant::visit_value_at(lhs.index(), equal_to{}, lhs, rhs)); +#endif + } + + template <typename... Ts> + inline constexpr bool operator!=(const variant<Ts...> &lhs, + const variant<Ts...> &rhs) { + using detail::visitation::variant; + using lib::not_equal_to; +#ifdef MPARK_CPP14_CONSTEXPR + if (lhs.index() != rhs.index()) return true; + if (lhs.valueless_by_exception()) return false; + return variant::visit_value_at(lhs.index(), not_equal_to{}, lhs, rhs); +#else + return lhs.index() != rhs.index() || + (!lhs.valueless_by_exception() && + variant::visit_value_at(lhs.index(), not_equal_to{}, lhs, rhs)); +#endif + } + + template <typename... Ts> + inline constexpr bool operator<(const variant<Ts...> &lhs, + const variant<Ts...> &rhs) { + using detail::visitation::variant; + using lib::less; +#ifdef MPARK_CPP14_CONSTEXPR + if (rhs.valueless_by_exception()) return false; + if (lhs.valueless_by_exception()) return true; + if (lhs.index() < rhs.index()) return true; + if (lhs.index() > rhs.index()) return false; + return variant::visit_value_at(lhs.index(), less{}, lhs, rhs); +#else + return !rhs.valueless_by_exception() && + (lhs.valueless_by_exception() || lhs.index() < rhs.index() || + (lhs.index() == rhs.index() && + variant::visit_value_at(lhs.index(), less{}, lhs, rhs))); +#endif + } + + template <typename... Ts> + inline constexpr bool operator>(const variant<Ts...> &lhs, + const variant<Ts...> &rhs) { + using detail::visitation::variant; + using lib::greater; +#ifdef MPARK_CPP14_CONSTEXPR + if (lhs.valueless_by_exception()) return false; + if (rhs.valueless_by_exception()) return true; + if (lhs.index() > rhs.index()) return true; + if (lhs.index() < rhs.index()) return false; + return variant::visit_value_at(lhs.index(), greater{}, lhs, rhs); +#else + return !lhs.valueless_by_exception() && + (rhs.valueless_by_exception() || lhs.index() > rhs.index() || + (lhs.index() == rhs.index() && + variant::visit_value_at(lhs.index(), greater{}, lhs, rhs))); +#endif + } + + template <typename... Ts> + inline constexpr bool operator<=(const variant<Ts...> &lhs, + const variant<Ts...> &rhs) { + using detail::visitation::variant; + using lib::less_equal; +#ifdef MPARK_CPP14_CONSTEXPR + if (lhs.valueless_by_exception()) return true; + if (rhs.valueless_by_exception()) return false; + if (lhs.index() < rhs.index()) return true; + if (lhs.index() > rhs.index()) return false; + return variant::visit_value_at(lhs.index(), less_equal{}, lhs, rhs); +#else + return lhs.valueless_by_exception() || + (!rhs.valueless_by_exception() && + (lhs.index() < rhs.index() || + (lhs.index() == rhs.index() && + variant::visit_value_at(lhs.index(), less_equal{}, lhs, rhs)))); +#endif + } + + template <typename... Ts> + inline constexpr bool operator>=(const variant<Ts...> &lhs, + const variant<Ts...> &rhs) { + using detail::visitation::variant; + using lib::greater_equal; +#ifdef MPARK_CPP14_CONSTEXPR + if (rhs.valueless_by_exception()) return true; + if (lhs.valueless_by_exception()) return false; + if (lhs.index() > rhs.index()) return true; + if (lhs.index() < rhs.index()) return false; + return variant::visit_value_at(lhs.index(), greater_equal{}, lhs, rhs); +#else + return rhs.valueless_by_exception() || + (!lhs.valueless_by_exception() && + (lhs.index() > rhs.index() || + (lhs.index() == rhs.index() && + variant::visit_value_at( + lhs.index(), greater_equal{}, lhs, rhs)))); +#endif + } + + struct monostate {}; + + inline constexpr bool operator<(monostate, monostate) noexcept { + return false; + } + + inline constexpr bool operator>(monostate, monostate) noexcept { + return false; + } + + inline constexpr bool operator<=(monostate, monostate) noexcept { + return true; + } + + inline constexpr bool operator>=(monostate, monostate) noexcept { + return true; + } + + inline constexpr bool operator==(monostate, monostate) noexcept { + return true; + } + + inline constexpr bool operator!=(monostate, monostate) noexcept { + return false; + } + +#ifdef MPARK_CPP14_CONSTEXPR + namespace detail { + + inline constexpr bool all(std::initializer_list<bool> bs) { + for (bool b : bs) { + if (!b) { + return false; + } + } + return true; + } + + } // namespace detail + + template <typename Visitor, typename... Vs> + inline constexpr decltype(auto) visit(Visitor &&visitor, Vs &&... vs) { + return (detail::all({!vs.valueless_by_exception()...}) + ? (void)0 + : throw_bad_variant_access()), + detail::visitation::variant::visit_value( + lib::forward<Visitor>(visitor), lib::forward<Vs>(vs)...); + } +#else + namespace detail { + + template <std::size_t N> + inline constexpr bool all_impl(const lib::array<bool, N> &bs, + std::size_t idx) { + return idx >= N || (bs[idx] && all_impl(bs, idx + 1)); + } + + template <std::size_t N> + inline constexpr bool all(const lib::array<bool, N> &bs) { + return all_impl(bs, 0); + } + + } // namespace detail + + template <typename Visitor, typename... Vs> + inline constexpr DECLTYPE_AUTO visit(Visitor &&visitor, Vs &&... vs) + DECLTYPE_AUTO_RETURN( + (detail::all( + lib::array<bool, sizeof...(Vs)>{{!vs.valueless_by_exception()...}}) + ? (void)0 + : throw_bad_variant_access()), + detail::visitation::variant::visit_value(lib::forward<Visitor>(visitor), + lib::forward<Vs>(vs)...)) +#endif + + template <typename... Ts> + inline auto swap(variant<Ts...> &lhs, + variant<Ts...> &rhs) noexcept(noexcept(lhs.swap(rhs))) + -> decltype(lhs.swap(rhs)) { + lhs.swap(rhs); + } + + namespace detail { + + template <typename T, typename...> + using enabled_type = T; + + namespace hash { + + template <typename H, typename K> + constexpr bool meets_requirements() { + return std::is_copy_constructible<H>::value && + std::is_move_constructible<H>::value && + lib::is_invocable_r<std::size_t, H, const K &>::value; + } + + template <typename K> + constexpr bool is_enabled() { + using H = std::hash<K>; + return meets_requirements<H, K>() && + std::is_default_constructible<H>::value && + std::is_copy_assignable<H>::value && + std::is_move_assignable<H>::value; + } + + } // namespace hash + + } // namespace detail + +#undef AUTO +#undef AUTO_RETURN + +#undef AUTO_REFREF +#undef AUTO_REFREF_RETURN + +#undef DECLTYPE_AUTO +#undef DECLTYPE_AUTO_RETURN + +} // namespace mpark + +namespace std { + + template <typename... Ts> + struct hash<mpark::detail::enabled_type< + mpark::variant<Ts...>, + mpark::lib::enable_if_t<mpark::lib::all<mpark::detail::hash::is_enabled< + mpark::lib::remove_const_t<Ts>>()...>::value>>> { + using argument_type = mpark::variant<Ts...>; + using result_type = std::size_t; + + inline result_type operator()(const argument_type &v) const { + using mpark::detail::visitation::variant; + std::size_t result = + v.valueless_by_exception() + ? 299792458 // Random value chosen by the universe upon creation + : variant::visit_alt( +#ifdef MPARK_GENERIC_LAMBDAS + [](const auto &alt) { + using alt_type = mpark::lib::decay_t<decltype(alt)>; + using value_type = mpark::lib::remove_const_t< + typename alt_type::value_type>; + return hash<value_type>{}(alt.value); + } +#else + hasher{} +#endif + , + v); + return hash_combine(result, hash<std::size_t>{}(v.index())); + } + + private: +#ifndef MPARK_GENERIC_LAMBDAS + struct hasher { + template <typename Alt> + inline std::size_t operator()(const Alt &alt) const { + using alt_type = mpark::lib::decay_t<Alt>; + using value_type = + mpark::lib::remove_const_t<typename alt_type::value_type>; + return hash<value_type>{}(alt.value); + } + }; +#endif + + static std::size_t hash_combine(std::size_t lhs, std::size_t rhs) { + return lhs ^= rhs + 0x9e3779b9 + (lhs << 6) + (lhs >> 2); + } + }; + + template <> + struct hash<mpark::monostate> { + using argument_type = mpark::monostate; + using result_type = std::size_t; + + inline result_type operator()(const argument_type &) const noexcept { + return 66740831; // return a fundamentally attractive random value. + } + }; + +} // namespace std + +#endif // MPARK_VARIANT_HPP diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.am index 322e6d449dd..386b805a403 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.am +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.am @@ -1,7 +1,10 @@ noinst_LIBRARIES = libwoff2.a libwoff2_a_SOURCES = \ + include/woff2/decode.h \ + include/woff2/encode.h \ + include/woff2/output.h \ + include/woff2/version.h \ src/buffer.h \ - src/file.h \ src/font.cc \ src/font.h \ src/glyph.cc \ @@ -19,17 +22,12 @@ libwoff2_a_SOURCES = \ src/variable_length.h \ src/woff2_common.cc \ src/woff2_common.h \ - src/woff2_dec.h \ src/woff2_enc.cc \ - src/woff2_enc.h \ - src/woff2_out.cc \ - src/woff2_out.h + src/woff2_out.cc EXTRA_DIST = LICENSE -AM_CXXFLAGS = -Wall -I$(srcdir)/brotli/enc - -SUBDIRS = brotli +AM_CXXFLAGS = -Wall -I$(srcdir)/include -I$(srcdir)/../brotli/include @CODE_COVERAGE_RULES@ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.in index 1e952f8501d..f294279d745 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.in @@ -184,27 +184,11 @@ am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libwoff2_a_SOURCES) DIST_SOURCES = $(libwoff2_a_SOURCES) -RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ - ctags-recursive dvi-recursive html-recursive info-recursive \ - install-data-recursive install-dvi-recursive \ - install-exec-recursive install-html-recursive \ - install-info-recursive install-pdf-recursive \ - install-ps-recursive install-recursive installcheck-recursive \ - installdirs-recursive pdf-recursive ps-recursive \ - tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -am__recursive_targets = \ - $(RECURSIVE_TARGETS) \ - $(RECURSIVE_CLEAN_TARGETS) \ - $(am__extra_recursive_targets) -AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is @@ -224,35 +208,9 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/../../build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ @@ -399,8 +357,11 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libwoff2.a libwoff2_a_SOURCES = \ + include/woff2/decode.h \ + include/woff2/encode.h \ + include/woff2/output.h \ + include/woff2/version.h \ src/buffer.h \ - src/file.h \ src/font.cc \ src/font.h \ src/glyph.cc \ @@ -418,17 +379,13 @@ libwoff2_a_SOURCES = \ src/variable_length.h \ src/woff2_common.cc \ src/woff2_common.h \ - src/woff2_dec.h \ src/woff2_enc.cc \ - src/woff2_enc.h \ - src/woff2_out.cc \ - src/woff2_out.h + src/woff2_out.cc EXTRA_DIST = LICENSE -AM_CXXFLAGS = -Wall -I$(srcdir)/brotli/enc -SUBDIRS = brotli +AM_CXXFLAGS = -Wall -I$(srcdir)/include -I$(srcdir)/../brotli/include CLEANFILES = *.gcda *.gcno -all: all-recursive +all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj @@ -539,61 +496,14 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -# This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. -$(am__recursive_targets): - @fail=; \ - if $(am__make_keepgoing); then \ - failcom='fail=yes'; \ - else \ - failcom='exit 1'; \ - fi; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-recursive +tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ @@ -606,7 +516,7 @@ tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $$unique; \ fi; \ fi -ctags: ctags-recursive +ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) @@ -619,7 +529,7 @@ GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-recursive +cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ @@ -668,45 +578,19 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - $(am__make_dryrun) \ - || test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done check-am: all-am -check: check-recursive +check: check-am all-am: Makefile $(LIBRARIES) -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -installcheck: installcheck-recursive +installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ @@ -731,93 +615,92 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive +clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ mostlyclean-am -distclean: distclean-recursive +distclean: distclean-am -rm -rf src/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags -dvi: dvi-recursive +dvi: dvi-am dvi-am: -html: html-recursive +html: html-am html-am: -info: info-recursive +info: info-am info-am: install-data-am: -install-dvi: install-dvi-recursive +install-dvi: install-dvi-am install-dvi-am: install-exec-am: -install-html: install-html-recursive +install-html: install-html-am install-html-am: -install-info: install-info-recursive +install-info: install-info-am install-info-am: install-man: -install-pdf: install-pdf-recursive +install-pdf: install-pdf-am install-pdf-am: -install-ps: install-ps-recursive +install-ps: install-ps-am install-ps-am: installcheck-am: -maintainer-clean: maintainer-clean-recursive +maintainer-clean: maintainer-clean-am -rm -rf src/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic -mostlyclean: mostlyclean-recursive +mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool -pdf: pdf-recursive +pdf: pdf-am pdf-am: -ps: ps-recursive +ps: ps-am ps-am: uninstall-am: -.MAKE: $(am__recursive_targets) install-am install-strip - -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ - check-am clean clean-generic clean-libtool \ - clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am .PRECIOUS: Makefile diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/Makefile.am deleted file mode 100644 index 0684ff2c794..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/Makefile.am +++ /dev/null @@ -1,57 +0,0 @@ -noinst_LIBRARIES = libbrotli.a -libbrotli_a_SOURCES = \ - enc/backward_references.cc \ - enc/backward_references.h \ - enc/bit_cost.h \ - enc/block_splitter.cc \ - enc/block_splitter.h \ - enc/brotli_bit_stream.cc \ - enc/brotli_bit_stream.h \ - enc/cluster.h \ - enc/command.h \ - enc/compress_fragment.cc \ - enc/compress_fragment.h \ - enc/compress_fragment_two_pass.cc \ - enc/compress_fragment_two_pass.h \ - enc/compressor.h \ - enc/context.h \ - enc/dictionary.cc \ - enc/dictionary.h \ - enc/dictionary_hash.h \ - enc/encode.cc \ - enc/encode.h \ - enc/encode_parallel.cc \ - enc/encode_parallel.h \ - enc/entropy_encode.cc \ - enc/entropy_encode.h \ - enc/entropy_encode_static.h \ - enc/fast_log.h \ - enc/find_match_length.h \ - enc/hash.h \ - enc/histogram.cc \ - enc/histogram.h \ - enc/literal_cost.cc \ - enc/literal_cost.h \ - enc/metablock.cc \ - enc/metablock.h \ - enc/port.h \ - enc/prefix.h \ - enc/ringbuffer.h \ - enc/static_dict.cc \ - enc/static_dict.h \ - enc/static_dict_lut.h \ - enc/streams.cc \ - enc/streams.h \ - enc/transform.h \ - enc/types.h \ - enc/utf8_util.cc \ - enc/utf8_util.h \ - enc/write_bits.h - -EXTRA_DIST = LICENSE - -AM_CXXFLAGS = -Wall - -@CODE_COVERAGE_RULES@ - -CLEANFILES = *.gcda *.gcno diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/backward_references.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/backward_references.cc deleted file mode 100644 index 539c1e76237..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/backward_references.cc +++ /dev/null @@ -1,858 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Function to find backward reference copies. - -#include "./backward_references.h" - -#include <algorithm> -#include <limits> -#include <vector> - -#include "./command.h" -#include "./fast_log.h" -#include "./literal_cost.h" - -namespace brotli { - -// The maximum length for which the zopflification uses distinct distances. -static const uint16_t kMaxZopfliLen = 325; - -// Histogram based cost model for zopflification. -class ZopfliCostModel { - public: - ZopfliCostModel(void) : min_cost_cmd_(kInfinity) {} - - void SetFromCommands(size_t num_bytes, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const Command* commands, - size_t num_commands, - size_t last_insert_len) { - std::vector<uint32_t> histogram_literal(256, 0); - std::vector<uint32_t> histogram_cmd(kNumCommandPrefixes, 0); - std::vector<uint32_t> histogram_dist(kNumDistancePrefixes, 0); - - size_t pos = position - last_insert_len; - for (size_t i = 0; i < num_commands; i++) { - size_t inslength = commands[i].insert_len_; - size_t copylength = commands[i].copy_len(); - size_t distcode = commands[i].dist_prefix_; - size_t cmdcode = commands[i].cmd_prefix_; - - histogram_cmd[cmdcode]++; - if (cmdcode >= 128) histogram_dist[distcode]++; - - for (size_t j = 0; j < inslength; j++) { - histogram_literal[ringbuffer[(pos + j) & ringbuffer_mask]]++; - } - - pos += inslength + copylength; - } - - std::vector<float> cost_literal; - Set(histogram_literal, &cost_literal); - Set(histogram_cmd, &cost_cmd_); - Set(histogram_dist, &cost_dist_); - - for (uint32_t i = 0; i < kNumCommandPrefixes; ++i) { - min_cost_cmd_ = std::min(min_cost_cmd_, cost_cmd_[i]); - } - - literal_costs_.resize(num_bytes + 1); - literal_costs_[0] = 0.0; - for (size_t i = 0; i < num_bytes; ++i) { - literal_costs_[i + 1] = literal_costs_[i] + - cost_literal[ringbuffer[(position + i) & ringbuffer_mask]]; - } - } - - void SetFromLiteralCosts(size_t num_bytes, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask) { - literal_costs_.resize(num_bytes + 2); - EstimateBitCostsForLiterals(position, num_bytes, ringbuffer_mask, - ringbuffer, &literal_costs_[1]); - literal_costs_[0] = 0.0; - for (size_t i = 0; i < num_bytes; ++i) { - literal_costs_[i + 1] += literal_costs_[i]; - } - cost_cmd_.resize(kNumCommandPrefixes); - cost_dist_.resize(kNumDistancePrefixes); - for (uint32_t i = 0; i < kNumCommandPrefixes; ++i) { - cost_cmd_[i] = static_cast<float>(FastLog2(11 + i)); - } - for (uint32_t i = 0; i < kNumDistancePrefixes; ++i) { - cost_dist_[i] = static_cast<float>(FastLog2(20 + i)); - } - min_cost_cmd_ = static_cast<float>(FastLog2(11)); - } - - float GetCommandCost( - size_t dist_code, size_t length_code, size_t insert_length) const { - uint16_t inscode = GetInsertLengthCode(insert_length); - uint16_t copycode = GetCopyLengthCode(length_code); - uint16_t cmdcode = CombineLengthCodes(inscode, copycode, dist_code == 0); - uint16_t dist_symbol; - uint32_t distextra; - PrefixEncodeCopyDistance(dist_code, 0, 0, &dist_symbol, &distextra); - uint32_t distnumextra = distextra >> 24; - - float result = static_cast<float>( - GetInsertExtra(inscode) + GetCopyExtra(copycode) + distnumextra); - result += cost_cmd_[cmdcode]; - if (cmdcode >= 128) result += cost_dist_[dist_symbol]; - return result; - } - - float GetLiteralCosts(size_t from, size_t to) const { - return literal_costs_[to] - literal_costs_[from]; - } - - float GetMinCostCmd(void) const { - return min_cost_cmd_; - } - - private: - void Set(const std::vector<uint32_t>& histogram, std::vector<float>* cost) { - cost->resize(histogram.size()); - size_t sum = 0; - for (size_t i = 0; i < histogram.size(); i++) { - sum += histogram[i]; - } - float log2sum = static_cast<float>(FastLog2(sum)); - for (size_t i = 0; i < histogram.size(); i++) { - if (histogram[i] == 0) { - (*cost)[i] = log2sum + 2; - continue; - } - - // Shannon bits for this symbol. - (*cost)[i] = log2sum - static_cast<float>(FastLog2(histogram[i])); - - // Cannot be coded with less than 1 bit - if ((*cost)[i] < 1) (*cost)[i] = 1; - } - } - - std::vector<float> cost_cmd_; // The insert and copy length symbols. - std::vector<float> cost_dist_; - // Cumulative costs of literals per position in the stream. - std::vector<float> literal_costs_; - float min_cost_cmd_; -}; - -inline size_t ComputeDistanceCode(size_t distance, - size_t max_distance, - int quality, - const int* dist_cache) { - if (distance <= max_distance) { - if (distance == static_cast<size_t>(dist_cache[0])) { - return 0; - } else if (distance == static_cast<size_t>(dist_cache[1])) { - return 1; - } else if (distance == static_cast<size_t>(dist_cache[2])) { - return 2; - } else if (distance == static_cast<size_t>(dist_cache[3])) { - return 3; - } else if (quality > 3 && distance >= 6) { - for (size_t k = 4; k < kNumDistanceShortCodes; ++k) { - size_t idx = kDistanceCacheIndex[k]; - size_t candidate = - static_cast<size_t>(dist_cache[idx] + kDistanceCacheOffset[k]); - static const size_t kLimits[16] = { 0, 0, 0, 0, - 6, 6, 11, 11, - 11, 11, 11, 11, - 12, 12, 12, 12 }; - if (distance == candidate && distance >= kLimits[k]) { - return k; - } - } - } - } - return distance + 15; -} - -// REQUIRES: len >= 2, start_pos <= pos -// REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity -// Maintains the "ZopfliNode array invariant". -inline void UpdateZopfliNode(ZopfliNode* nodes, size_t pos, size_t start_pos, - size_t len, size_t len_code, size_t dist, - size_t short_code, float cost) { - ZopfliNode& next = nodes[pos + len]; - next.length = static_cast<uint32_t>(len | ((len + 9u - len_code) << 24)); - next.distance = static_cast<uint32_t>(dist | (short_code << 25)); - next.insert_length = static_cast<uint32_t>(pos - start_pos); - next.cost = cost; -} - -// Maintains the smallest 2^k cost difference together with their positions -class StartPosQueue { - public: - struct PosData { - size_t pos; - int distance_cache[4]; - float costdiff; - }; - - explicit StartPosQueue(int bits) - : mask_((1u << bits) - 1), q_(1 << bits), idx_(0) {} - - void Clear(void) { - idx_ = 0; - } - - void Push(const StartPosQueue::PosData& posdata) { - size_t offset = ~idx_ & mask_; - ++idx_; - size_t len = size(); - q_[offset] = posdata; - /* Restore the sorted order. In the list of |len| items at most |len - 1| - adjacent element comparisons / swaps are required. */ - for (size_t i = 1; i < len; ++i) { - if (q_[offset & mask_].costdiff > q_[(offset + 1) & mask_].costdiff) { - std::swap(q_[offset & mask_], q_[(offset + 1) & mask_]); - } - ++offset; - } - } - - size_t size(void) const { return std::min(idx_, mask_ + 1); } - - const StartPosQueue::PosData& GetStartPosData(size_t k) const { - return q_[(k - idx_) & mask_]; - } - - private: - const size_t mask_; - std::vector<PosData> q_; - size_t idx_; -}; - -// Returns the minimum possible copy length that can improve the cost of any -// future position. -static size_t ComputeMinimumCopyLength(const StartPosQueue& queue, - const ZopfliNode* nodes, - const ZopfliCostModel& model, - const size_t num_bytes, - const size_t pos) { - // Compute the minimum possible cost of reaching any future position. - const size_t start0 = queue.GetStartPosData(0).pos; - float min_cost = (nodes[start0].cost + - model.GetLiteralCosts(start0, pos) + - model.GetMinCostCmd()); - size_t len = 2; - size_t next_len_bucket = 4; - size_t next_len_offset = 10; - while (pos + len <= num_bytes && nodes[pos + len].cost <= min_cost) { - // We already reached (pos + len) with no more cost than the minimum - // possible cost of reaching anything from this pos, so there is no point in - // looking for lengths <= len. - ++len; - if (len == next_len_offset) { - // We reached the next copy length code bucket, so we add one more - // extra bit to the minimum cost. - min_cost += static_cast<float>(1.0); - next_len_offset += next_len_bucket; - next_len_bucket *= 2; - } - } - return len; -} - -// Fills in dist_cache[0..3] with the last four distances (as defined by -// Section 4. of the Spec) that would be used at (block_start + pos) if we -// used the shortest path of commands from block_start, computed from -// nodes[0..pos]. The last four distances at block_start are in -// starting_dist_cach[0..3]. -// REQUIRES: nodes[pos].cost < kInfinity -// REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". -static void ComputeDistanceCache(const size_t block_start, - const size_t pos, - const size_t max_backward, - const int* starting_dist_cache, - const ZopfliNode* nodes, - int* dist_cache) { - int idx = 0; - size_t p = pos; - // Because of prerequisite, does at most (pos + 1) / 2 iterations. - while (idx < 4 && p > 0) { - const size_t clen = nodes[p].copy_length(); - const size_t ilen = nodes[p].insert_length; - const size_t dist = nodes[p].copy_distance(); - // Since block_start + p is the end position of the command, the copy part - // starts from block_start + p - clen. Distances that are greater than this - // or greater than max_backward are static dictionary references, and do - // not update the last distances. Also distance code 0 (last distance) - // does not update the last distances. - if (dist + clen <= block_start + p && dist <= max_backward && - nodes[p].distance_code() > 0) { - dist_cache[idx++] = static_cast<int>(dist); - } - // Because of prerequisite, p >= clen + ilen >= 2. - p -= clen + ilen; - } - for (; idx < 4; ++idx) { - dist_cache[idx] = *starting_dist_cache++; - } -} - -static void UpdateNodes(const size_t num_bytes, - const size_t block_start, - const size_t pos, - const uint8_t* ringbuffer, - const size_t ringbuffer_mask, - const size_t max_backward_limit, - const int* starting_dist_cache, - const size_t num_matches, - const BackwardMatch* matches, - const ZopfliCostModel* model, - StartPosQueue* queue, - ZopfliNode* nodes) { - size_t cur_ix = block_start + pos; - size_t cur_ix_masked = cur_ix & ringbuffer_mask; - size_t max_distance = std::min(cur_ix, max_backward_limit); - - if (nodes[pos].cost <= model->GetLiteralCosts(0, pos)) { - StartPosQueue::PosData posdata; - posdata.pos = pos; - posdata.costdiff = nodes[pos].cost - model->GetLiteralCosts(0, pos); - ComputeDistanceCache(block_start, pos, max_backward_limit, - starting_dist_cache, nodes, posdata.distance_cache); - queue->Push(posdata); - } - - const size_t min_len = ComputeMinimumCopyLength( - *queue, nodes, *model, num_bytes, pos); - - // Go over the command starting positions in order of increasing cost - // difference. - for (size_t k = 0; k < 5 && k < queue->size(); ++k) { - const StartPosQueue::PosData& posdata = queue->GetStartPosData(k); - const size_t start = posdata.pos; - const float start_costdiff = posdata.costdiff; - - // Look for last distance matches using the distance cache from this - // starting position. - size_t best_len = min_len - 1; - for (size_t j = 0; j < kNumDistanceShortCodes; ++j) { - const size_t idx = kDistanceCacheIndex[j]; - const size_t backward = static_cast<size_t>(posdata.distance_cache[idx] + - kDistanceCacheOffset[j]); - size_t prev_ix = cur_ix - backward; - if (prev_ix >= cur_ix) { - continue; - } - if (PREDICT_FALSE(backward > max_distance)) { - continue; - } - prev_ix &= ringbuffer_mask; - - if (cur_ix_masked + best_len > ringbuffer_mask || - prev_ix + best_len > ringbuffer_mask || - ringbuffer[cur_ix_masked + best_len] != - ringbuffer[prev_ix + best_len]) { - continue; - } - const size_t len = - FindMatchLengthWithLimit(&ringbuffer[prev_ix], - &ringbuffer[cur_ix_masked], - num_bytes - pos); - for (size_t l = best_len + 1; l <= len; ++l) { - const size_t inslen = pos - start; - float cmd_cost = model->GetCommandCost(j, l, inslen); - float cost = start_costdiff + cmd_cost + model->GetLiteralCosts(0, pos); - if (cost < nodes[pos + l].cost) { - UpdateZopfliNode(&nodes[0], pos, start, l, l, backward, j + 1, cost); - } - best_len = l; - } - } - - // At higher iterations look only for new last distance matches, since - // looking only for new command start positions with the same distances - // does not help much. - if (k >= 2) continue; - - // Loop through all possible copy lengths at this position. - size_t len = min_len; - for (size_t j = 0; j < num_matches; ++j) { - BackwardMatch match = matches[j]; - size_t dist = match.distance; - bool is_dictionary_match = dist > max_distance; - // We already tried all possible last distance matches, so we can use - // normal distance code here. - size_t dist_code = dist + 15; - // Try all copy lengths up until the maximum copy length corresponding - // to this distance. If the distance refers to the static dictionary, or - // the maximum length is long enough, try only one maximum length. - size_t max_len = match.length(); - if (len < max_len && (is_dictionary_match || max_len > kMaxZopfliLen)) { - len = max_len; - } - for (; len <= max_len; ++len) { - size_t len_code = is_dictionary_match ? match.length_code() : len; - const size_t inslen = pos - start; - float cmd_cost = model->GetCommandCost(dist_code, len_code, inslen); - float cost = start_costdiff + cmd_cost + model->GetLiteralCosts(0, pos); - if (cost < nodes[pos + len].cost) { - UpdateZopfliNode(&nodes[0], pos, start, len, len_code, dist, 0, cost); - } - } - } - } -} - -static void ComputeShortestPathFromNodes(size_t num_bytes, - const ZopfliNode* nodes, - std::vector<uint32_t>* path) { - std::vector<uint32_t> backwards(num_bytes / 2 + 1); - size_t index = num_bytes; - while (nodes[index].cost == kInfinity) --index; - size_t num_commands = 0; - while (index != 0) { - size_t len = nodes[index].command_length(); - backwards[num_commands++] = static_cast<uint32_t>(len); - index -= len; - } - path->resize(num_commands); - for (size_t i = num_commands, j = 0; i > 0; --i, ++j) { - (*path)[j] = backwards[i - 1]; - } -} - -void ZopfliCreateCommands(const size_t num_bytes, - const size_t block_start, - const size_t max_backward_limit, - const std::vector<uint32_t>& path, - const ZopfliNode* nodes, - int* dist_cache, - size_t* last_insert_len, - Command* commands, - size_t* num_literals) { - size_t pos = 0; - for (size_t i = 0; i < path.size(); i++) { - const ZopfliNode& next = nodes[pos + path[i]]; - size_t copy_length = next.copy_length(); - size_t insert_length = next.insert_length; - pos += insert_length; - if (i == 0) { - insert_length += *last_insert_len; - *last_insert_len = 0; - } - size_t distance = next.copy_distance(); - size_t len_code = next.length_code(); - size_t max_distance = std::min(block_start + pos, max_backward_limit); - bool is_dictionary = (distance > max_distance); - size_t dist_code = next.distance_code(); - - Command cmd(insert_length, copy_length, len_code, dist_code); - commands[i] = cmd; - - if (!is_dictionary && dist_code > 0) { - dist_cache[3] = dist_cache[2]; - dist_cache[2] = dist_cache[1]; - dist_cache[1] = dist_cache[0]; - dist_cache[0] = static_cast<int>(distance); - } - - *num_literals += insert_length; - pos += copy_length; - } - *last_insert_len += num_bytes - pos; -} - -static void ZopfliIterate(size_t num_bytes, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const size_t max_backward_limit, - const int* dist_cache, - const ZopfliCostModel& model, - const std::vector<uint32_t>& num_matches, - const std::vector<BackwardMatch>& matches, - ZopfliNode* nodes, - std::vector<uint32_t>* path) { - nodes[0].length = 0; - nodes[0].cost = 0; - StartPosQueue queue(3); - size_t cur_match_pos = 0; - for (size_t i = 0; i + 3 < num_bytes; i++) { - UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask, - max_backward_limit, dist_cache, num_matches[i], - &matches[cur_match_pos], &model, &queue, &nodes[0]); - cur_match_pos += num_matches[i]; - // The zopflification can be too slow in case of very long lengths, so in - // such case skip it all, it does not cost a lot of compression ratio. - if (num_matches[i] == 1 && - matches[cur_match_pos - 1].length() > kMaxZopfliLen) { - i += matches[cur_match_pos - 1].length() - 1; - queue.Clear(); - } - } - ComputeShortestPathFromNodes(num_bytes, &nodes[0], path); -} - - -void ZopfliComputeShortestPath(size_t num_bytes, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const size_t max_backward_limit, - const int* dist_cache, - Hashers::H10* hasher, - ZopfliNode* nodes, - std::vector<uint32_t>* path) { - nodes[0].length = 0; - nodes[0].cost = 0; - ZopfliCostModel* model = new ZopfliCostModel; - model->SetFromLiteralCosts(num_bytes, position, - ringbuffer, ringbuffer_mask); - StartPosQueue queue(3); - BackwardMatch matches[Hashers::H10::kMaxNumMatches]; - for (size_t i = 0; i + 3 < num_bytes; i++) { - const size_t max_distance = std::min(position + i, max_backward_limit); - size_t num_matches = hasher->FindAllMatches( - ringbuffer, ringbuffer_mask, position + i, num_bytes - i, max_distance, - matches); - if (num_matches > 0 && - matches[num_matches - 1].length() > kMaxZopfliLen) { - matches[0] = matches[num_matches - 1]; - num_matches = 1; - } - UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask, - max_backward_limit, dist_cache, num_matches, matches, - model, &queue, nodes); - if (num_matches == 1 && matches[0].length() > kMaxZopfliLen) { - for (size_t j = 1; j < matches[0].length() && i + 4 < num_bytes; ++j) { - ++i; - if (matches[0].length() - j < 64 && - num_bytes - i >= kMaxTreeCompLength) { - hasher->Store(ringbuffer, ringbuffer_mask, position + i); - } - } - queue.Clear(); - } - } - delete model; - ComputeShortestPathFromNodes(num_bytes, nodes, path); -} - -template<typename Hasher> -void CreateBackwardReferences(size_t num_bytes, - size_t position, - bool is_last, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const int quality, - const int lgwin, - Hasher* hasher, - int* dist_cache, - size_t* last_insert_len, - Command* commands, - size_t* num_commands, - size_t* num_literals) { - // Set maximum distance, see section 9.1. of the spec. - const size_t max_backward_limit = (1 << lgwin) - 16; - - // Choose which init method is faster. - // memset is about 100 times faster than hasher->InitForData(). - const size_t kMaxBytesForPartialHashInit = Hasher::kHashMapSize >> 7; - if (position == 0 && is_last && num_bytes <= kMaxBytesForPartialHashInit) { - hasher->InitForData(ringbuffer, num_bytes); - } else { - hasher->Init(); - } - if (num_bytes >= 3 && position >= 3) { - // Prepare the hashes for three last bytes of the last write. - // These could not be calculated before, since they require knowledge - // of both the previous and the current block. - hasher->Store(&ringbuffer[(position - 3) & ringbuffer_mask], - static_cast<uint32_t>(position - 3)); - hasher->Store(&ringbuffer[(position - 2) & ringbuffer_mask], - static_cast<uint32_t>(position - 2)); - hasher->Store(&ringbuffer[(position - 1) & ringbuffer_mask], - static_cast<uint32_t>(position - 1)); - } - const Command * const orig_commands = commands; - size_t insert_length = *last_insert_len; - size_t i = position & ringbuffer_mask; - const size_t i_diff = position - i; - const size_t i_end = i + num_bytes; - - // For speed up heuristics for random data. - const size_t random_heuristics_window_size = quality < 9 ? 64 : 512; - size_t apply_random_heuristics = i + random_heuristics_window_size; - - // Minimum score to accept a backward reference. - const double kMinScore = 4.0; - - while (i + Hasher::kHashTypeLength - 1 < i_end) { - size_t max_length = i_end - i; - size_t max_distance = std::min(i + i_diff, max_backward_limit); - size_t best_len = 0; - size_t best_len_code = 0; - size_t best_dist = 0; - double best_score = kMinScore; - bool match_found = hasher->FindLongestMatch( - ringbuffer, ringbuffer_mask, - dist_cache, static_cast<uint32_t>(i + i_diff), max_length, max_distance, - &best_len, &best_len_code, &best_dist, &best_score); - if (match_found) { - // Found a match. Let's look for something even better ahead. - int delayed_backward_references_in_row = 0; - for (;;) { - --max_length; - size_t best_len_2 = - quality < 5 ? std::min(best_len - 1, max_length) : 0; - size_t best_len_code_2 = 0; - size_t best_dist_2 = 0; - double best_score_2 = kMinScore; - max_distance = std::min(i + i_diff + 1, max_backward_limit); - match_found = hasher->FindLongestMatch( - ringbuffer, ringbuffer_mask, - dist_cache, static_cast<uint32_t>(i + i_diff + 1), - max_length, max_distance, - &best_len_2, &best_len_code_2, &best_dist_2, &best_score_2); - double cost_diff_lazy = 7.0; - if (match_found && best_score_2 >= best_score + cost_diff_lazy) { - // Ok, let's just write one byte for now and start a match from the - // next byte. - ++i; - ++insert_length; - best_len = best_len_2; - best_len_code = best_len_code_2; - best_dist = best_dist_2; - best_score = best_score_2; - if (++delayed_backward_references_in_row < 4) { - continue; - } - } - break; - } - apply_random_heuristics = - i + 2 * best_len + random_heuristics_window_size; - max_distance = std::min(i + i_diff, max_backward_limit); - // The first 16 codes are special shortcodes, and the minimum offset is 1. - size_t distance_code = - ComputeDistanceCode(best_dist, max_distance, quality, dist_cache); - if (best_dist <= max_distance && distance_code > 0) { - dist_cache[3] = dist_cache[2]; - dist_cache[2] = dist_cache[1]; - dist_cache[1] = dist_cache[0]; - dist_cache[0] = static_cast<int>(best_dist); - } - Command cmd(insert_length, best_len, best_len_code, distance_code); - *commands++ = cmd; - *num_literals += insert_length; - insert_length = 0; - // Put the hash keys into the table, if there are enough - // bytes left. - for (size_t j = 2; j < best_len; ++j) { - hasher->Store(&ringbuffer[i + j], - static_cast<uint32_t>(i + i_diff + j)); - } - i += best_len; - } else { - ++insert_length; - ++i; - // If we have not seen matches for a long time, we can skip some - // match lookups. Unsuccessful match lookups are very very expensive - // and this kind of a heuristic speeds up compression quite - // a lot. - if (i > apply_random_heuristics) { - // Going through uncompressible data, jump. - if (i > apply_random_heuristics + 4 * random_heuristics_window_size) { - // It is quite a long time since we saw a copy, so we assume - // that this data is not compressible, and store hashes less - // often. Hashes of non compressible data are less likely to - // turn out to be useful in the future, too, so we store less of - // them to not to flood out the hash table of good compressible - // data. - size_t i_jump = std::min(i + 16, i_end - 4); - for (; i < i_jump; i += 4) { - hasher->Store(ringbuffer + i, static_cast<uint32_t>(i + i_diff)); - insert_length += 4; - } - } else { - size_t i_jump = std::min(i + 8, i_end - 3); - for (; i < i_jump; i += 2) { - hasher->Store(ringbuffer + i, static_cast<uint32_t>(i + i_diff)); - insert_length += 2; - } - } - } - } - } - insert_length += i_end - i; - *last_insert_len = insert_length; - *num_commands += static_cast<size_t>(commands - orig_commands); -} - -void CreateBackwardReferences(size_t num_bytes, - size_t position, - bool is_last, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const int quality, - const int lgwin, - Hashers* hashers, - int hash_type, - int* dist_cache, - size_t* last_insert_len, - Command* commands, - size_t* num_commands, - size_t* num_literals) { - bool zopflify = quality > 9; - if (zopflify) { - Hashers::H10* hasher = hashers->hash_h10; - hasher->Init(lgwin, position, num_bytes, is_last); - hasher->StitchToPreviousBlock(num_bytes, position, - ringbuffer, ringbuffer_mask); - // Set maximum distance, see section 9.1. of the spec. - const size_t max_backward_limit = (1 << lgwin) - 16; - if (quality == 10) { - std::vector<ZopfliNode> nodes(num_bytes + 1); - std::vector<uint32_t> path; - ZopfliComputeShortestPath(num_bytes, position, - ringbuffer, ringbuffer_mask, - max_backward_limit, dist_cache, hasher, - &nodes[0], &path); - ZopfliCreateCommands(num_bytes, position, max_backward_limit, path, - &nodes[0], dist_cache, last_insert_len, commands, - num_literals); - *num_commands += path.size(); - return; - } - std::vector<uint32_t> num_matches(num_bytes); - std::vector<BackwardMatch> matches(4 * num_bytes); - size_t cur_match_pos = 0; - for (size_t i = 0; i + 3 < num_bytes; ++i) { - size_t max_distance = std::min(position + i, max_backward_limit); - size_t max_length = num_bytes - i; - // Ensure that we have enough free slots. - if (matches.size() < cur_match_pos + Hashers::H10::kMaxNumMatches) { - matches.resize(cur_match_pos + Hashers::H10::kMaxNumMatches); - } - size_t num_found_matches = hasher->FindAllMatches( - ringbuffer, ringbuffer_mask, position + i, max_length, max_distance, - &matches[cur_match_pos]); - const size_t cur_match_end = cur_match_pos + num_found_matches; - for (size_t j = cur_match_pos; j + 1 < cur_match_end; ++j) { - assert(matches[j].length() < matches[j + 1].length()); - assert(matches[j].distance > max_distance || - matches[j].distance <= matches[j + 1].distance); - } - num_matches[i] = static_cast<uint32_t>(num_found_matches); - if (num_found_matches > 0) { - const size_t match_len = matches[cur_match_end - 1].length(); - if (match_len > kMaxZopfliLen) { - matches[cur_match_pos++] = matches[cur_match_end - 1]; - num_matches[i] = 1; - for (size_t j = 1; j < match_len; ++j) { - ++i; - if (match_len - j < 64 && num_bytes - i >= kMaxTreeCompLength) { - hasher->Store(ringbuffer, ringbuffer_mask, position + i); - } - num_matches[i] = 0; - } - } else { - cur_match_pos = cur_match_end; - } - } - } - size_t orig_num_literals = *num_literals; - size_t orig_last_insert_len = *last_insert_len; - int orig_dist_cache[4] = { - dist_cache[0], dist_cache[1], dist_cache[2], dist_cache[3] - }; - size_t orig_num_commands = *num_commands; - static const size_t kIterations = 2; - for (size_t i = 0; i < kIterations; i++) { - ZopfliCostModel model; - if (i == 0) { - model.SetFromLiteralCosts(num_bytes, position, - ringbuffer, ringbuffer_mask); - } else { - model.SetFromCommands(num_bytes, position, - ringbuffer, ringbuffer_mask, - commands, *num_commands - orig_num_commands, - orig_last_insert_len); - } - *num_commands = orig_num_commands; - *num_literals = orig_num_literals; - *last_insert_len = orig_last_insert_len; - memcpy(dist_cache, orig_dist_cache, 4 * sizeof(dist_cache[0])); - std::vector<ZopfliNode> nodes(num_bytes + 1); - std::vector<uint32_t> path; - ZopfliIterate(num_bytes, position, ringbuffer, ringbuffer_mask, - max_backward_limit, dist_cache, model, num_matches, matches, - &nodes[0], &path); - ZopfliCreateCommands(num_bytes, position, max_backward_limit, path, - &nodes[0], dist_cache, last_insert_len, commands, - num_literals); - *num_commands += path.size(); - } - return; - } - - switch (hash_type) { - case 2: - CreateBackwardReferences<Hashers::H2>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h2, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 3: - CreateBackwardReferences<Hashers::H3>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h3, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 4: - CreateBackwardReferences<Hashers::H4>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h4, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 5: - CreateBackwardReferences<Hashers::H5>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h5, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 6: - CreateBackwardReferences<Hashers::H6>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h6, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 7: - CreateBackwardReferences<Hashers::H7>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h7, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 8: - CreateBackwardReferences<Hashers::H8>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h8, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 9: - CreateBackwardReferences<Hashers::H9>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h9, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - default: - break; - } -} - -} // namespace brotli diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/backward_references.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/backward_references.h deleted file mode 100644 index f60667f725f..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/backward_references.h +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Function to find backward reference copies. - -#ifndef BROTLI_ENC_BACKWARD_REFERENCES_H_ -#define BROTLI_ENC_BACKWARD_REFERENCES_H_ - -#include <vector> - -#include "./hash.h" -#include "./command.h" -#include "./types.h" - -namespace brotli { - -// "commands" points to the next output command to write to, "*num_commands" is -// initially the total amount of commands output by previous -// CreateBackwardReferences calls, and must be incremented by the amount written -// by this call. -void CreateBackwardReferences(size_t num_bytes, - size_t position, - bool is_last, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const int quality, - const int lgwin, - Hashers* hashers, - int hash_type, - int* dist_cache, - size_t* last_insert_len, - Command* commands, - size_t* num_commands, - size_t* num_literals); - -static const float kInfinity = std::numeric_limits<float>::infinity(); - -struct ZopfliNode { - ZopfliNode(void) : length(1), - distance(0), - insert_length(0), - cost(kInfinity) {} - - inline uint32_t copy_length() const { - return length & 0xffffff; - } - - inline uint32_t length_code() const { - const uint32_t modifier = length >> 24; - return copy_length() + 9u - modifier; - } - - inline uint32_t copy_distance() const { - return distance & 0x1ffffff; - } - - inline uint32_t distance_code() const { - const uint32_t short_code = distance >> 25; - return short_code == 0 ? copy_distance() + 15 : short_code - 1; - } - - inline uint32_t command_length() const { - return copy_length() + insert_length; - } - - // best length to get up to this byte (not including this byte itself) - // highest 8 bit is used to reconstruct the length code - uint32_t length; - // distance associated with the length - // highest 7 bit contains distance short code + 1 (or zero if no short code) - uint32_t distance; - // number of literal inserts before this copy - uint32_t insert_length; - // smallest cost to get to this byte from the beginning, as found so far - float cost; -}; - -// Computes the shortest path of commands from position to at most -// position + num_bytes. -// -// On return, path->size() is the number of commands found and path[i] is the -// length of the ith command (copy length plus insert length). -// Note that the sum of the lengths of all commands can be less than num_bytes. -// -// On return, the nodes[0..num_bytes] array will have the following -// "ZopfliNode array invariant": -// For each i in [1..num_bytes], if nodes[i].cost < kInfinity, then -// (1) nodes[i].copy_length() >= 2 -// (2) nodes[i].command_length() <= i and -// (3) nodes[i - nodes[i].command_length()].cost < kInfinity -void ZopfliComputeShortestPath(size_t num_bytes, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const size_t max_backward_limit, - const int* dist_cache, - Hashers::H10* hasher, - ZopfliNode* nodes, - std::vector<uint32_t>* path); - -void ZopfliCreateCommands(const size_t num_bytes, - const size_t block_start, - const size_t max_backward_limit, - const std::vector<uint32_t>& path, - const ZopfliNode* nodes, - int* dist_cache, - size_t* last_insert_len, - Command* commands, - size_t* num_literals); - -} // namespace brotli - -#endif // BROTLI_ENC_BACKWARD_REFERENCES_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/bit_cost.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/bit_cost.h deleted file mode 100644 index 4652006864c..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/bit_cost.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Functions to estimate the bit cost of Huffman trees. - -#ifndef BROTLI_ENC_BIT_COST_H_ -#define BROTLI_ENC_BIT_COST_H_ - -#include "./entropy_encode.h" -#include "./fast_log.h" -#include "./types.h" - -namespace brotli { - -static inline double ShannonEntropy(const uint32_t *population, size_t size, - size_t *total) { - size_t sum = 0; - double retval = 0; - const uint32_t *population_end = population + size; - size_t p; - if (size & 1) { - goto odd_number_of_elements_left; - } - while (population < population_end) { - p = *population++; - sum += p; - retval -= static_cast<double>(p) * FastLog2(p); - odd_number_of_elements_left: - p = *population++; - sum += p; - retval -= static_cast<double>(p) * FastLog2(p); - } - if (sum) retval += static_cast<double>(sum) * FastLog2(sum); - *total = sum; - return retval; -} - -static inline double BitsEntropy(const uint32_t *population, size_t size) { - size_t sum; - double retval = ShannonEntropy(population, size, &sum); - if (retval < sum) { - // At least one bit per literal is needed. - retval = static_cast<double>(sum); - } - return retval; -} - -template<int kSize> -double PopulationCost(const Histogram<kSize>& histogram) { - static const double kOneSymbolHistogramCost = 12; - static const double kTwoSymbolHistogramCost = 20; - static const double kThreeSymbolHistogramCost = 28; - static const double kFourSymbolHistogramCost = 37; - if (histogram.total_count_ == 0) { - return kOneSymbolHistogramCost; - } - int count = 0; - int s[5]; - for (int i = 0; i < kSize; ++i) { - if (histogram.data_[i] > 0) { - s[count] = i; - ++count; - if (count > 4) break; - } - } - if (count == 1) { - return kOneSymbolHistogramCost; - } - if (count == 2) { - return (kTwoSymbolHistogramCost + - static_cast<double>(histogram.total_count_)); - } - if (count == 3) { - const uint32_t histo0 = histogram.data_[s[0]]; - const uint32_t histo1 = histogram.data_[s[1]]; - const uint32_t histo2 = histogram.data_[s[2]]; - const uint32_t histomax = std::max(histo0, std::max(histo1, histo2)); - return (kThreeSymbolHistogramCost + - 2 * (histo0 + histo1 + histo2) - histomax); - } - if (count == 4) { - uint32_t histo[4]; - for (int i = 0; i < 4; ++i) { - histo[i] = histogram.data_[s[i]]; - } - // Sort - for (int i = 0; i < 4; ++i) { - for (int j = i + 1; j < 4; ++j) { - if (histo[j] > histo[i]) { - std::swap(histo[j], histo[i]); - } - } - } - const uint32_t h23 = histo[2] + histo[3]; - const uint32_t histomax = std::max(h23, histo[0]); - return (kFourSymbolHistogramCost + - 3 * h23 + 2 * (histo[0] + histo[1]) - histomax); - } - - // In this loop we compute the entropy of the histogram and simultaneously - // build a simplified histogram of the code length codes where we use the - // zero repeat code 17, but we don't use the non-zero repeat code 16. - double bits = 0; - size_t max_depth = 1; - uint32_t depth_histo[kCodeLengthCodes] = { 0 }; - const double log2total = FastLog2(histogram.total_count_); - for (size_t i = 0; i < kSize;) { - if (histogram.data_[i] > 0) { - // Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) = - // = log2(total_count) - log2(count(symbol)) - double log2p = log2total - FastLog2(histogram.data_[i]); - // Approximate the bit depth by round(-log2(P(symbol))) - size_t depth = static_cast<size_t>(log2p + 0.5); - bits += histogram.data_[i] * log2p; - if (depth > 15) { - depth = 15; - } - if (depth > max_depth) { - max_depth = depth; - } - ++depth_histo[depth]; - ++i; - } else { - // Compute the run length of zeros and add the appropriate number of 0 and - // 17 code length codes to the code length code histogram. - uint32_t reps = 1; - for (size_t k = i + 1; k < kSize && histogram.data_[k] == 0; ++k) { - ++reps; - } - i += reps; - if (i == kSize) { - // Don't add any cost for the last zero run, since these are encoded - // only implicitly. - break; - } - if (reps < 3) { - depth_histo[0] += reps; - } else { - reps -= 2; - while (reps > 0) { - ++depth_histo[17]; - // Add the 3 extra bits for the 17 code length code. - bits += 3; - reps >>= 3; - } - } - } - } - // Add the estimated encoding cost of the code length code histogram. - bits += static_cast<double>(18 + 2 * max_depth); - // Add the entropy of the code length code histogram. - bits += BitsEntropy(depth_histo, kCodeLengthCodes); - return bits; -} - -} // namespace brotli - -#endif // BROTLI_ENC_BIT_COST_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/block_splitter.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/block_splitter.cc deleted file mode 100644 index db8d9c606d6..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/block_splitter.cc +++ /dev/null @@ -1,505 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Block split point selection utilities. - -#include "./block_splitter.h" - -#include <assert.h> -#include <math.h> - -#include <algorithm> -#include <cstring> -#include <vector> - -#include "./cluster.h" -#include "./command.h" -#include "./fast_log.h" -#include "./histogram.h" - -namespace brotli { - -static const size_t kMaxLiteralHistograms = 100; -static const size_t kMaxCommandHistograms = 50; -static const double kLiteralBlockSwitchCost = 28.1; -static const double kCommandBlockSwitchCost = 13.5; -static const double kDistanceBlockSwitchCost = 14.6; -static const size_t kLiteralStrideLength = 70; -static const size_t kCommandStrideLength = 40; -static const size_t kSymbolsPerLiteralHistogram = 544; -static const size_t kSymbolsPerCommandHistogram = 530; -static const size_t kSymbolsPerDistanceHistogram = 544; -static const size_t kMinLengthForBlockSplitting = 128; -static const size_t kIterMulForRefining = 2; -static const size_t kMinItersForRefining = 100; - -void CopyLiteralsToByteArray(const Command* cmds, - const size_t num_commands, - const uint8_t* data, - const size_t offset, - const size_t mask, - std::vector<uint8_t>* literals) { - // Count how many we have. - size_t total_length = 0; - for (size_t i = 0; i < num_commands; ++i) { - total_length += cmds[i].insert_len_; - } - if (total_length == 0) { - return; - } - - // Allocate. - literals->resize(total_length); - - // Loop again, and copy this time. - size_t pos = 0; - size_t from_pos = offset & mask; - for (size_t i = 0; i < num_commands && pos < total_length; ++i) { - size_t insert_len = cmds[i].insert_len_; - if (from_pos + insert_len > mask) { - size_t head_size = mask + 1 - from_pos; - memcpy(&(*literals)[pos], data + from_pos, head_size); - from_pos = 0; - pos += head_size; - insert_len -= head_size; - } - if (insert_len > 0) { - memcpy(&(*literals)[pos], data + from_pos, insert_len); - pos += insert_len; - } - from_pos = (from_pos + insert_len + cmds[i].copy_len()) & mask; - } -} - -inline static unsigned int MyRand(unsigned int* seed) { - *seed *= 16807U; - if (*seed == 0) { - *seed = 1; - } - return *seed; -} - -template<typename HistogramType, typename DataType> -void InitialEntropyCodes(const DataType* data, size_t length, - size_t stride, - size_t num_histograms, - HistogramType* histograms) { - for (size_t i = 0; i < num_histograms; ++i) { - histograms[i].Clear(); - } - unsigned int seed = 7; - size_t block_length = length / num_histograms; - for (size_t i = 0; i < num_histograms; ++i) { - size_t pos = length * i / num_histograms; - if (i != 0) { - pos += MyRand(&seed) % block_length; - } - if (pos + stride >= length) { - pos = length - stride - 1; - } - histograms[i].Add(data + pos, stride); - } -} - -template<typename HistogramType, typename DataType> -void RandomSample(unsigned int* seed, - const DataType* data, - size_t length, - size_t stride, - HistogramType* sample) { - size_t pos = 0; - if (stride >= length) { - pos = 0; - stride = length; - } else { - pos = MyRand(seed) % (length - stride + 1); - } - sample->Add(data + pos, stride); -} - -template<typename HistogramType, typename DataType> -void RefineEntropyCodes(const DataType* data, size_t length, - size_t stride, - size_t num_histograms, - HistogramType* histograms) { - size_t iters = - kIterMulForRefining * length / stride + kMinItersForRefining; - unsigned int seed = 7; - iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms; - for (size_t iter = 0; iter < iters; ++iter) { - HistogramType sample; - RandomSample(&seed, data, length, stride, &sample); - size_t ix = iter % num_histograms; - histograms[ix].AddHistogram(sample); - } -} - -inline static double BitCost(size_t count) { - return count == 0 ? -2.0 : FastLog2(count); -} - -// Assigns a block id from the range [0, vec.size()) to each data element -// in data[0..length) and fills in block_id[0..length) with the assigned values. -// Returns the number of blocks, i.e. one plus the number of block switches. -template<typename DataType, int kSize> -size_t FindBlocks(const DataType* data, const size_t length, - const double block_switch_bitcost, - const size_t num_histograms, - const Histogram<kSize>* histograms, - double* insert_cost, - double* cost, - uint8_t* switch_signal, - uint8_t *block_id) { - if (num_histograms <= 1) { - for (size_t i = 0; i < length; ++i) { - block_id[i] = 0; - } - return 1; - } - const size_t bitmaplen = (num_histograms + 7) >> 3; - assert(num_histograms <= 256); - memset(insert_cost, 0, sizeof(insert_cost[0]) * kSize * num_histograms); - for (size_t j = 0; j < num_histograms; ++j) { - insert_cost[j] = FastLog2(static_cast<uint32_t>( - histograms[j].total_count_)); - } - for (size_t i = kSize; i != 0;) { - --i; - for (size_t j = 0; j < num_histograms; ++j) { - insert_cost[i * num_histograms + j] = - insert_cost[j] - BitCost(histograms[j].data_[i]); - } - } - memset(cost, 0, sizeof(cost[0]) * num_histograms); - memset(switch_signal, 0, sizeof(switch_signal[0]) * length * bitmaplen); - // After each iteration of this loop, cost[k] will contain the difference - // between the minimum cost of arriving at the current byte position using - // entropy code k, and the minimum cost of arriving at the current byte - // position. This difference is capped at the block switch cost, and if it - // reaches block switch cost, it means that when we trace back from the last - // position, we need to switch here. - for (size_t byte_ix = 0; byte_ix < length; ++byte_ix) { - size_t ix = byte_ix * bitmaplen; - size_t insert_cost_ix = data[byte_ix] * num_histograms; - double min_cost = 1e99; - for (size_t k = 0; k < num_histograms; ++k) { - // We are coding the symbol in data[byte_ix] with entropy code k. - cost[k] += insert_cost[insert_cost_ix + k]; - if (cost[k] < min_cost) { - min_cost = cost[k]; - block_id[byte_ix] = static_cast<uint8_t>(k); - } - } - double block_switch_cost = block_switch_bitcost; - // More blocks for the beginning. - if (byte_ix < 2000) { - block_switch_cost *= 0.77 + 0.07 * static_cast<double>(byte_ix) / 2000; - } - for (size_t k = 0; k < num_histograms; ++k) { - cost[k] -= min_cost; - if (cost[k] >= block_switch_cost) { - cost[k] = block_switch_cost; - const uint8_t mask = static_cast<uint8_t>(1u << (k & 7)); - assert((k >> 3) < bitmaplen); - switch_signal[ix + (k >> 3)] |= mask; - } - } - } - // Now trace back from the last position and switch at the marked places. - size_t byte_ix = length - 1; - size_t ix = byte_ix * bitmaplen; - uint8_t cur_id = block_id[byte_ix]; - size_t num_blocks = 1; - while (byte_ix > 0) { - --byte_ix; - ix -= bitmaplen; - const uint8_t mask = static_cast<uint8_t>(1u << (cur_id & 7)); - assert((static_cast<size_t>(cur_id) >> 3) < bitmaplen); - if (switch_signal[ix + (cur_id >> 3)] & mask) { - if (cur_id != block_id[byte_ix]) { - cur_id = block_id[byte_ix]; - ++num_blocks; - } - } - block_id[byte_ix] = cur_id; - } - return num_blocks; -} - -static size_t RemapBlockIds(uint8_t* block_ids, const size_t length, - uint16_t* new_id, const size_t num_histograms) { - static const uint16_t kInvalidId = 256; - for (size_t i = 0; i < num_histograms; ++i) { - new_id[i] = kInvalidId; - } - uint16_t next_id = 0; - for (size_t i = 0; i < length; ++i) { - assert(block_ids[i] < num_histograms); - if (new_id[block_ids[i]] == kInvalidId) { - new_id[block_ids[i]] = next_id++; - } - } - for (size_t i = 0; i < length; ++i) { - block_ids[i] = static_cast<uint8_t>(new_id[block_ids[i]]); - assert(block_ids[i] < num_histograms); - } - assert(next_id <= num_histograms); - return next_id; -} - -template<typename HistogramType, typename DataType> -void BuildBlockHistograms(const DataType* data, const size_t length, - const uint8_t* block_ids, - const size_t num_histograms, - HistogramType* histograms) { - for (size_t i = 0; i < num_histograms; ++i) { - histograms[i].Clear(); - } - for (size_t i = 0; i < length; ++i) { - histograms[block_ids[i]].Add(data[i]); - } -} - -template<typename HistogramType, typename DataType> -void ClusterBlocks(const DataType* data, const size_t length, - const size_t num_blocks, - uint8_t* block_ids, - BlockSplit* split) { - static const size_t kMaxNumberOfBlockTypes = 256; - static const size_t kHistogramsPerBatch = 64; - static const size_t kClustersPerBatch = 16; - std::vector<uint32_t> histogram_symbols(num_blocks); - std::vector<uint32_t> block_lengths(num_blocks); - - size_t block_idx = 0; - for (size_t i = 0; i < length; ++i) { - assert(block_idx < num_blocks); - ++block_lengths[block_idx]; - if (i + 1 == length || block_ids[i] != block_ids[i + 1]) { - ++block_idx; - } - } - assert(block_idx == num_blocks); - - const size_t expected_num_clusters = - kClustersPerBatch * - (num_blocks + kHistogramsPerBatch - 1) / kHistogramsPerBatch; - std::vector<HistogramType> all_histograms; - std::vector<uint32_t> cluster_size; - all_histograms.reserve(expected_num_clusters); - cluster_size.reserve(expected_num_clusters); - size_t num_clusters = 0; - std::vector<HistogramType> histograms( - std::min(num_blocks, kHistogramsPerBatch)); - size_t max_num_pairs = kHistogramsPerBatch * kHistogramsPerBatch / 2; - std::vector<HistogramPair> pairs(max_num_pairs + 1); - size_t pos = 0; - for (size_t i = 0; i < num_blocks; i += kHistogramsPerBatch) { - const size_t num_to_combine = std::min(num_blocks - i, kHistogramsPerBatch); - uint32_t sizes[kHistogramsPerBatch]; - uint32_t clusters[kHistogramsPerBatch]; - uint32_t symbols[kHistogramsPerBatch]; - uint32_t remap[kHistogramsPerBatch]; - for (size_t j = 0; j < num_to_combine; ++j) { - histograms[j].Clear(); - for (size_t k = 0; k < block_lengths[i + j]; ++k) { - histograms[j].Add(data[pos++]); - } - histograms[j].bit_cost_ = PopulationCost(histograms[j]); - symbols[j] = clusters[j] = static_cast<uint32_t>(j); - sizes[j] = 1; - } - size_t num_new_clusters = HistogramCombine( - &histograms[0], sizes, symbols, clusters, &pairs[0], num_to_combine, - num_to_combine, kHistogramsPerBatch, max_num_pairs); - for (size_t j = 0; j < num_new_clusters; ++j) { - all_histograms.push_back(histograms[clusters[j]]); - cluster_size.push_back(sizes[clusters[j]]); - remap[clusters[j]] = static_cast<uint32_t>(j); - } - for (size_t j = 0; j < num_to_combine; ++j) { - histogram_symbols[i + j] = - static_cast<uint32_t>(num_clusters) + remap[symbols[j]]; - } - num_clusters += num_new_clusters; - assert(num_clusters == cluster_size.size()); - assert(num_clusters == all_histograms.size()); - } - - max_num_pairs = - std::min(64 * num_clusters, (num_clusters / 2) * num_clusters); - pairs.resize(max_num_pairs + 1); - - std::vector<uint32_t> clusters(num_clusters); - for (size_t i = 0; i < num_clusters; ++i) { - clusters[i] = static_cast<uint32_t>(i); - } - size_t num_final_clusters = - HistogramCombine(&all_histograms[0], &cluster_size[0], - &histogram_symbols[0], - &clusters[0], &pairs[0], num_clusters, - num_blocks, kMaxNumberOfBlockTypes, max_num_pairs); - - static const uint32_t kInvalidIndex = std::numeric_limits<uint32_t>::max(); - std::vector<uint32_t> new_index(num_clusters, kInvalidIndex); - uint32_t next_index = 0; - pos = 0; - for (size_t i = 0; i < num_blocks; ++i) { - HistogramType histo; - for (size_t j = 0; j < block_lengths[i]; ++j) { - histo.Add(data[pos++]); - } - uint32_t best_out = - i == 0 ? histogram_symbols[0] : histogram_symbols[i - 1]; - double best_bits = HistogramBitCostDistance( - histo, all_histograms[best_out]); - for (size_t j = 0; j < num_final_clusters; ++j) { - const double cur_bits = HistogramBitCostDistance( - histo, all_histograms[clusters[j]]); - if (cur_bits < best_bits) { - best_bits = cur_bits; - best_out = clusters[j]; - } - } - histogram_symbols[i] = best_out; - if (new_index[best_out] == kInvalidIndex) { - new_index[best_out] = next_index++; - } - } - uint8_t max_type = 0; - uint32_t cur_length = 0; - block_idx = 0; - split->types.resize(num_blocks); - split->lengths.resize(num_blocks); - for (size_t i = 0; i < num_blocks; ++i) { - cur_length += block_lengths[i]; - if (i + 1 == num_blocks || - histogram_symbols[i] != histogram_symbols[i + 1]) { - const uint8_t id = static_cast<uint8_t>(new_index[histogram_symbols[i]]); - split->types[block_idx] = id; - split->lengths[block_idx] = cur_length; - max_type = std::max(max_type, id); - cur_length = 0; - ++block_idx; - } - } - split->types.resize(block_idx); - split->lengths.resize(block_idx); - split->num_types = static_cast<size_t>(max_type) + 1; -} - -template<int kSize, typename DataType> -void SplitByteVector(const std::vector<DataType>& data, - const size_t literals_per_histogram, - const size_t max_histograms, - const size_t sampling_stride_length, - const double block_switch_cost, - BlockSplit* split) { - if (data.empty()) { - split->num_types = 1; - return; - } else if (data.size() < kMinLengthForBlockSplitting) { - split->num_types = 1; - split->types.push_back(0); - split->lengths.push_back(static_cast<uint32_t>(data.size())); - return; - } - size_t num_histograms = data.size() / literals_per_histogram + 1; - if (num_histograms > max_histograms) { - num_histograms = max_histograms; - } - Histogram<kSize>* histograms = new Histogram<kSize>[num_histograms]; - // Find good entropy codes. - InitialEntropyCodes(&data[0], data.size(), - sampling_stride_length, - num_histograms, histograms); - RefineEntropyCodes(&data[0], data.size(), - sampling_stride_length, - num_histograms, histograms); - // Find a good path through literals with the good entropy codes. - std::vector<uint8_t> block_ids(data.size()); - size_t num_blocks; - const size_t bitmaplen = (num_histograms + 7) >> 3; - double* insert_cost = new double[kSize * num_histograms]; - double *cost = new double[num_histograms]; - uint8_t* switch_signal = new uint8_t[data.size() * bitmaplen]; - uint16_t* new_id = new uint16_t[num_histograms]; - for (size_t i = 0; i < 10; ++i) { - num_blocks = FindBlocks(&data[0], data.size(), - block_switch_cost, - num_histograms, histograms, - insert_cost, cost, switch_signal, - &block_ids[0]); - num_histograms = RemapBlockIds(&block_ids[0], data.size(), - new_id, num_histograms); - BuildBlockHistograms(&data[0], data.size(), &block_ids[0], - num_histograms, histograms); - } - delete[] insert_cost; - delete[] cost; - delete[] switch_signal; - delete[] new_id; - delete[] histograms; - ClusterBlocks<Histogram<kSize> >(&data[0], data.size(), num_blocks, - &block_ids[0], split); -} - -void SplitBlock(const Command* cmds, - const size_t num_commands, - const uint8_t* data, - const size_t pos, - const size_t mask, - BlockSplit* literal_split, - BlockSplit* insert_and_copy_split, - BlockSplit* dist_split) { - { - // Create a continuous array of literals. - std::vector<uint8_t> literals; - CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, &literals); - // Create the block split on the array of literals. - // Literal histograms have alphabet size 256. - SplitByteVector<256>( - literals, - kSymbolsPerLiteralHistogram, kMaxLiteralHistograms, - kLiteralStrideLength, kLiteralBlockSwitchCost, - literal_split); - } - - { - // Compute prefix codes for commands. - std::vector<uint16_t> insert_and_copy_codes(num_commands); - for (size_t i = 0; i < num_commands; ++i) { - insert_and_copy_codes[i] = cmds[i].cmd_prefix_; - } - // Create the block split on the array of command prefixes. - SplitByteVector<kNumCommandPrefixes>( - insert_and_copy_codes, - kSymbolsPerCommandHistogram, kMaxCommandHistograms, - kCommandStrideLength, kCommandBlockSwitchCost, - insert_and_copy_split); - } - - { - // Create a continuous array of distance prefixes. - std::vector<uint16_t> distance_prefixes(num_commands); - size_t pos = 0; - for (size_t i = 0; i < num_commands; ++i) { - const Command& cmd = cmds[i]; - if (cmd.copy_len() && cmd.cmd_prefix_ >= 128) { - distance_prefixes[pos++] = cmd.dist_prefix_; - } - } - distance_prefixes.resize(pos); - // Create the block split on the array of distance prefixes. - SplitByteVector<kNumDistancePrefixes>( - distance_prefixes, - kSymbolsPerDistanceHistogram, kMaxCommandHistograms, - kCommandStrideLength, kDistanceBlockSwitchCost, - dist_split); - } -} - -} // namespace brotli diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/block_splitter.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/block_splitter.h deleted file mode 100644 index 4f69296808e..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/block_splitter.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Block split point selection utilities. - -#ifndef BROTLI_ENC_BLOCK_SPLITTER_H_ -#define BROTLI_ENC_BLOCK_SPLITTER_H_ - -#include <vector> - -#include "./command.h" -#include "./metablock.h" -#include "./types.h" - -namespace brotli { - -struct BlockSplitIterator { - explicit BlockSplitIterator(const BlockSplit& split) - : split_(split), idx_(0), type_(0), length_(0) { - if (!split.lengths.empty()) { - length_ = split.lengths[0]; - } - } - - void Next(void) { - if (length_ == 0) { - ++idx_; - type_ = split_.types[idx_]; - length_ = split_.lengths[idx_]; - } - --length_; - } - - const BlockSplit& split_; - size_t idx_; - size_t type_; - size_t length_; -}; - -void CopyLiteralsToByteArray(const Command* cmds, - const size_t num_commands, - const uint8_t* data, - const size_t offset, - const size_t mask, - std::vector<uint8_t>* literals); - -void SplitBlock(const Command* cmds, - const size_t num_commands, - const uint8_t* data, - const size_t offset, - const size_t mask, - BlockSplit* literal_split, - BlockSplit* insert_and_copy_split, - BlockSplit* dist_split); - -} // namespace brotli - -#endif // BROTLI_ENC_BLOCK_SPLITTER_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/brotli_bit_stream.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/brotli_bit_stream.cc deleted file mode 100644 index 43f12107af9..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/brotli_bit_stream.cc +++ /dev/null @@ -1,1181 +0,0 @@ -/* Copyright 2014 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Brotli bit stream functions to support the low level format. There are no -// compression algorithms here, just the right ordering of bits to match the -// specs. - -#include "./brotli_bit_stream.h" - -#include <algorithm> -#include <cstdlib> /* free, malloc */ -#include <cstring> -#include <limits> -#include <vector> - -#include "./bit_cost.h" -#include "./context.h" -#include "./entropy_encode.h" -#include "./entropy_encode_static.h" -#include "./fast_log.h" -#include "./prefix.h" -#include "./write_bits.h" - -namespace brotli { - -namespace { - -static const size_t kMaxHuffmanTreeSize = 2 * kNumCommandPrefixes + 1; -// Context map alphabet has 256 context id symbols plus max 16 rle symbols. -static const size_t kContextMapAlphabetSize = 256 + 16; -// Block type alphabet has 256 block id symbols plus 2 special symbols. -static const size_t kBlockTypeAlphabetSize = 256 + 2; - -// nibblesbits represents the 2 bits to encode MNIBBLES (0-3) -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void EncodeMlen(size_t length, uint64_t* bits, - size_t* numbits, uint64_t* nibblesbits) { - assert(length > 0); - assert(length <= (1 << 24)); - length--; // MLEN - 1 is encoded - size_t lg = length == 0 ? 1 : Log2FloorNonZero( - static_cast<uint32_t>(length)) + 1; - assert(lg <= 24); - size_t mnibbles = (lg < 16 ? 16 : (lg + 3)) / 4; - *nibblesbits = mnibbles - 4; - *numbits = mnibbles * 4; - *bits = length; -} - -static inline void StoreCommandExtra( - const Command& cmd, size_t* storage_ix, uint8_t* storage) { - uint32_t copylen_code = cmd.copy_len_code(); - uint16_t inscode = GetInsertLengthCode(cmd.insert_len_); - uint16_t copycode = GetCopyLengthCode(copylen_code); - uint32_t insnumextra = GetInsertExtra(inscode); - uint64_t insextraval = cmd.insert_len_ - GetInsertBase(inscode); - uint64_t copyextraval = copylen_code - GetCopyBase(copycode); - uint64_t bits = (copyextraval << insnumextra) | insextraval; - WriteBits(insnumextra + GetCopyExtra(copycode), bits, storage_ix, storage); -} - -} // namespace - -void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage) { - if (n == 0) { - WriteBits(1, 0, storage_ix, storage); - } else { - WriteBits(1, 1, storage_ix, storage); - size_t nbits = Log2FloorNonZero(n); - WriteBits(3, nbits, storage_ix, storage); - WriteBits(nbits, n - (1 << nbits), storage_ix, storage); - } -} - -void StoreCompressedMetaBlockHeader(bool final_block, - size_t length, - size_t* storage_ix, - uint8_t* storage) { - // Write ISLAST bit. - WriteBits(1, final_block, storage_ix, storage); - // Write ISEMPTY bit. - if (final_block) { - WriteBits(1, 0, storage_ix, storage); - } - - uint64_t lenbits; - size_t nlenbits; - uint64_t nibblesbits; - EncodeMlen(length, &lenbits, &nlenbits, &nibblesbits); - WriteBits(2, nibblesbits, storage_ix, storage); - WriteBits(nlenbits, lenbits, storage_ix, storage); - - if (!final_block) { - // Write ISUNCOMPRESSED bit. - WriteBits(1, 0, storage_ix, storage); - } -} - -void StoreUncompressedMetaBlockHeader(size_t length, - size_t* storage_ix, - uint8_t* storage) { - // Write ISLAST bit. Uncompressed block cannot be the last one, so set to 0. - WriteBits(1, 0, storage_ix, storage); - uint64_t lenbits; - size_t nlenbits; - uint64_t nibblesbits; - EncodeMlen(length, &lenbits, &nlenbits, &nibblesbits); - WriteBits(2, nibblesbits, storage_ix, storage); - WriteBits(nlenbits, lenbits, storage_ix, storage); - // Write ISUNCOMPRESSED bit. - WriteBits(1, 1, storage_ix, storage); -} - -void StoreHuffmanTreeOfHuffmanTreeToBitMask( - const int num_codes, - const uint8_t *code_length_bitdepth, - size_t *storage_ix, - uint8_t *storage) { - static const uint8_t kStorageOrder[kCodeLengthCodes] = { - 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15 - }; - // The bit lengths of the Huffman code over the code length alphabet - // are compressed with the following static Huffman code: - // Symbol Code - // ------ ---- - // 0 00 - // 1 1110 - // 2 110 - // 3 01 - // 4 10 - // 5 1111 - static const uint8_t kHuffmanBitLengthHuffmanCodeSymbols[6] = { - 0, 7, 3, 2, 1, 15 - }; - static const uint8_t kHuffmanBitLengthHuffmanCodeBitLengths[6] = { - 2, 4, 3, 2, 2, 4 - }; - - // Throw away trailing zeros: - size_t codes_to_store = kCodeLengthCodes; - if (num_codes > 1) { - for (; codes_to_store > 0; --codes_to_store) { - if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] != 0) { - break; - } - } - } - size_t skip_some = 0; // skips none. - if (code_length_bitdepth[kStorageOrder[0]] == 0 && - code_length_bitdepth[kStorageOrder[1]] == 0) { - skip_some = 2; // skips two. - if (code_length_bitdepth[kStorageOrder[2]] == 0) { - skip_some = 3; // skips three. - } - } - WriteBits(2, skip_some, storage_ix, storage); - for (size_t i = skip_some; i < codes_to_store; ++i) { - size_t l = code_length_bitdepth[kStorageOrder[i]]; - WriteBits(kHuffmanBitLengthHuffmanCodeBitLengths[l], - kHuffmanBitLengthHuffmanCodeSymbols[l], storage_ix, storage); - } -} - -static void StoreHuffmanTreeToBitMask( - const size_t huffman_tree_size, - const uint8_t* huffman_tree, - const uint8_t* huffman_tree_extra_bits, - const uint8_t* code_length_bitdepth, - const uint16_t* code_length_bitdepth_symbols, - size_t * __restrict storage_ix, - uint8_t * __restrict storage) { - for (size_t i = 0; i < huffman_tree_size; ++i) { - size_t ix = huffman_tree[i]; - WriteBits(code_length_bitdepth[ix], code_length_bitdepth_symbols[ix], - storage_ix, storage); - // Extra bits - switch (ix) { - case 16: - WriteBits(2, huffman_tree_extra_bits[i], storage_ix, storage); - break; - case 17: - WriteBits(3, huffman_tree_extra_bits[i], storage_ix, storage); - break; - } - } -} - -static void StoreSimpleHuffmanTree(const uint8_t* depths, - size_t symbols[4], - size_t num_symbols, - size_t max_bits, - size_t *storage_ix, uint8_t *storage) { - // value of 1 indicates a simple Huffman code - WriteBits(2, 1, storage_ix, storage); - WriteBits(2, num_symbols - 1, storage_ix, storage); // NSYM - 1 - - // Sort - for (size_t i = 0; i < num_symbols; i++) { - for (size_t j = i + 1; j < num_symbols; j++) { - if (depths[symbols[j]] < depths[symbols[i]]) { - std::swap(symbols[j], symbols[i]); - } - } - } - - if (num_symbols == 2) { - WriteBits(max_bits, symbols[0], storage_ix, storage); - WriteBits(max_bits, symbols[1], storage_ix, storage); - } else if (num_symbols == 3) { - WriteBits(max_bits, symbols[0], storage_ix, storage); - WriteBits(max_bits, symbols[1], storage_ix, storage); - WriteBits(max_bits, symbols[2], storage_ix, storage); - } else { - WriteBits(max_bits, symbols[0], storage_ix, storage); - WriteBits(max_bits, symbols[1], storage_ix, storage); - WriteBits(max_bits, symbols[2], storage_ix, storage); - WriteBits(max_bits, symbols[3], storage_ix, storage); - // tree-select - WriteBits(1, depths[symbols[0]] == 1 ? 1 : 0, storage_ix, storage); - } -} - -// num = alphabet size -// depths = symbol depths -void StoreHuffmanTree(const uint8_t* depths, size_t num, - HuffmanTree* tree, - size_t *storage_ix, uint8_t *storage) { - // Write the Huffman tree into the brotli-representation. - // The command alphabet is the largest, so this allocation will fit all - // alphabets. - assert(num <= kNumCommandPrefixes); - uint8_t huffman_tree[kNumCommandPrefixes]; - uint8_t huffman_tree_extra_bits[kNumCommandPrefixes]; - size_t huffman_tree_size = 0; - WriteHuffmanTree(depths, num, &huffman_tree_size, huffman_tree, - huffman_tree_extra_bits); - - // Calculate the statistics of the Huffman tree in brotli-representation. - uint32_t huffman_tree_histogram[kCodeLengthCodes] = { 0 }; - for (size_t i = 0; i < huffman_tree_size; ++i) { - ++huffman_tree_histogram[huffman_tree[i]]; - } - - int num_codes = 0; - int code = 0; - for (int i = 0; i < kCodeLengthCodes; ++i) { - if (huffman_tree_histogram[i]) { - if (num_codes == 0) { - code = i; - num_codes = 1; - } else if (num_codes == 1) { - num_codes = 2; - break; - } - } - } - - // Calculate another Huffman tree to use for compressing both the - // earlier Huffman tree with. - uint8_t code_length_bitdepth[kCodeLengthCodes] = { 0 }; - uint16_t code_length_bitdepth_symbols[kCodeLengthCodes] = { 0 }; - CreateHuffmanTree(&huffman_tree_histogram[0], kCodeLengthCodes, - 5, tree, &code_length_bitdepth[0]); - ConvertBitDepthsToSymbols(code_length_bitdepth, kCodeLengthCodes, - &code_length_bitdepth_symbols[0]); - - // Now, we have all the data, let's start storing it - StoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes, code_length_bitdepth, - storage_ix, storage); - - if (num_codes == 1) { - code_length_bitdepth[code] = 0; - } - - // Store the real huffman tree now. - StoreHuffmanTreeToBitMask(huffman_tree_size, - huffman_tree, - huffman_tree_extra_bits, - &code_length_bitdepth[0], - code_length_bitdepth_symbols, - storage_ix, storage); -} - -void BuildAndStoreHuffmanTree(const uint32_t *histogram, - const size_t length, - HuffmanTree* tree, - uint8_t* depth, - uint16_t* bits, - size_t* storage_ix, - uint8_t* storage) { - size_t count = 0; - size_t s4[4] = { 0 }; - for (size_t i = 0; i < length; i++) { - if (histogram[i]) { - if (count < 4) { - s4[count] = i; - } else if (count > 4) { - break; - } - count++; - } - } - - size_t max_bits_counter = length - 1; - size_t max_bits = 0; - while (max_bits_counter) { - max_bits_counter >>= 1; - ++max_bits; - } - - if (count <= 1) { - WriteBits(4, 1, storage_ix, storage); - WriteBits(max_bits, s4[0], storage_ix, storage); - return; - } - - CreateHuffmanTree(histogram, length, 15, tree, depth); - ConvertBitDepthsToSymbols(depth, length, bits); - - if (count <= 4) { - StoreSimpleHuffmanTree(depth, s4, count, max_bits, storage_ix, storage); - } else { - StoreHuffmanTree(depth, length, tree, storage_ix, storage); - } -} - -static inline bool SortHuffmanTree(const HuffmanTree& v0, - const HuffmanTree& v1) { - return v0.total_count_ < v1.total_count_; -} - -void BuildAndStoreHuffmanTreeFast(const uint32_t *histogram, - const size_t histogram_total, - const size_t max_bits, - uint8_t* depth, - uint16_t* bits, - size_t* storage_ix, - uint8_t* storage) { - size_t count = 0; - size_t symbols[4] = { 0 }; - size_t length = 0; - size_t total = histogram_total; - while (total != 0) { - if (histogram[length]) { - if (count < 4) { - symbols[count] = length; - } - ++count; - total -= histogram[length]; - } - ++length; - } - - if (count <= 1) { - WriteBits(4, 1, storage_ix, storage); - WriteBits(max_bits, symbols[0], storage_ix, storage); - return; - } - - const size_t max_tree_size = 2 * length + 1; - HuffmanTree* const tree = - static_cast<HuffmanTree*>(malloc(max_tree_size * sizeof(HuffmanTree))); - for (uint32_t count_limit = 1; ; count_limit *= 2) { - HuffmanTree* node = tree; - for (size_t i = length; i != 0;) { - --i; - if (histogram[i]) { - if (PREDICT_TRUE(histogram[i] >= count_limit)) { - *node = HuffmanTree(histogram[i], -1, static_cast<int16_t>(i)); - } else { - *node = HuffmanTree(count_limit, -1, static_cast<int16_t>(i)); - } - ++node; - } - } - const int n = static_cast<int>(node - tree); - std::sort(tree, node, SortHuffmanTree); - // The nodes are: - // [0, n): the sorted leaf nodes that we start with. - // [n]: we add a sentinel here. - // [n + 1, 2n): new parent nodes are added here, starting from - // (n+1). These are naturally in ascending order. - // [2n]: we add a sentinel at the end as well. - // There will be (2n+1) elements at the end. - const HuffmanTree sentinel(std::numeric_limits<int>::max(), -1, -1); - *node++ = sentinel; - *node++ = sentinel; - - int i = 0; // Points to the next leaf node. - int j = n + 1; // Points to the next non-leaf node. - for (int k = n - 1; k > 0; --k) { - int left, right; - if (tree[i].total_count_ <= tree[j].total_count_) { - left = i; - ++i; - } else { - left = j; - ++j; - } - if (tree[i].total_count_ <= tree[j].total_count_) { - right = i; - ++i; - } else { - right = j; - ++j; - } - // The sentinel node becomes the parent node. - node[-1].total_count_ = - tree[left].total_count_ + tree[right].total_count_; - node[-1].index_left_ = static_cast<int16_t>(left); - node[-1].index_right_or_value_ = static_cast<int16_t>(right); - // Add back the last sentinel node. - *node++ = sentinel; - } - SetDepth(tree[2 * n - 1], &tree[0], depth, 0); - // We need to pack the Huffman tree in 14 bits. - // If this was not successful, add fake entities to the lowest values - // and retry. - if (PREDICT_TRUE(*std::max_element(&depth[0], &depth[length]) <= 14)) { - break; - } - } - free(tree); - ConvertBitDepthsToSymbols(depth, length, bits); - if (count <= 4) { - // value of 1 indicates a simple Huffman code - WriteBits(2, 1, storage_ix, storage); - WriteBits(2, count - 1, storage_ix, storage); // NSYM - 1 - - // Sort - for (size_t i = 0; i < count; i++) { - for (size_t j = i + 1; j < count; j++) { - if (depth[symbols[j]] < depth[symbols[i]]) { - std::swap(symbols[j], symbols[i]); - } - } - } - - if (count == 2) { - WriteBits(max_bits, symbols[0], storage_ix, storage); - WriteBits(max_bits, symbols[1], storage_ix, storage); - } else if (count == 3) { - WriteBits(max_bits, symbols[0], storage_ix, storage); - WriteBits(max_bits, symbols[1], storage_ix, storage); - WriteBits(max_bits, symbols[2], storage_ix, storage); - } else { - WriteBits(max_bits, symbols[0], storage_ix, storage); - WriteBits(max_bits, symbols[1], storage_ix, storage); - WriteBits(max_bits, symbols[2], storage_ix, storage); - WriteBits(max_bits, symbols[3], storage_ix, storage); - // tree-select - WriteBits(1, depth[symbols[0]] == 1 ? 1 : 0, storage_ix, storage); - } - } else { - // Complex Huffman Tree - StoreStaticCodeLengthCode(storage_ix, storage); - - // Actual rle coding. - uint8_t previous_value = 8; - for (size_t i = 0; i < length;) { - const uint8_t value = depth[i]; - size_t reps = 1; - for (size_t k = i + 1; k < length && depth[k] == value; ++k) { - ++reps; - } - i += reps; - if (value == 0) { - WriteBits(kZeroRepsDepth[reps], kZeroRepsBits[reps], - storage_ix, storage); - } else { - if (previous_value != value) { - WriteBits(kCodeLengthDepth[value], kCodeLengthBits[value], - storage_ix, storage); - --reps; - } - if (reps < 3) { - while (reps != 0) { - reps--; - WriteBits(kCodeLengthDepth[value], kCodeLengthBits[value], - storage_ix, storage); - } - } else { - reps -= 3; - WriteBits(kNonZeroRepsDepth[reps], kNonZeroRepsBits[reps], - storage_ix, storage); - } - previous_value = value; - } - } - } -} - -static size_t IndexOf(const uint8_t* v, size_t v_size, uint8_t value) { - size_t i = 0; - for (; i < v_size; ++i) { - if (v[i] == value) return i; - } - return i; -} - -static void MoveToFront(uint8_t* v, size_t index) { - uint8_t value = v[index]; - for (size_t i = index; i != 0; --i) { - v[i] = v[i - 1]; - } - v[0] = value; -} - -static void MoveToFrontTransform(const uint32_t* __restrict v_in, - const size_t v_size, - uint32_t* v_out) { - if (v_size == 0) { - return; - } - uint32_t max_value = *std::max_element(v_in, v_in + v_size); - assert(max_value < 256u); - uint8_t mtf[256]; - size_t mtf_size = max_value + 1; - for (uint32_t i = 0; i <= max_value; ++i) { - mtf[i] = static_cast<uint8_t>(i); - } - for (size_t i = 0; i < v_size; ++i) { - size_t index = IndexOf(mtf, mtf_size, static_cast<uint8_t>(v_in[i])); - assert(index < mtf_size); - v_out[i] = static_cast<uint32_t>(index); - MoveToFront(mtf, index); - } -} - -// Finds runs of zeros in v[0..in_size) and replaces them with a prefix code of -// the run length plus extra bits (lower 9 bits is the prefix code and the rest -// are the extra bits). Non-zero values in v[] are shifted by -// *max_length_prefix. Will not create prefix codes bigger than the initial -// value of *max_run_length_prefix. The prefix code of run length L is simply -// Log2Floor(L) and the number of extra bits is the same as the prefix code. -static void RunLengthCodeZeros(const size_t in_size, - uint32_t* __restrict v, - size_t* __restrict out_size, - uint32_t* __restrict max_run_length_prefix) { - uint32_t max_reps = 0; - for (size_t i = 0; i < in_size;) { - for (; i < in_size && v[i] != 0; ++i) ; - uint32_t reps = 0; - for (; i < in_size && v[i] == 0; ++i) { - ++reps; - } - max_reps = std::max(reps, max_reps); - } - uint32_t max_prefix = max_reps > 0 ? Log2FloorNonZero(max_reps) : 0; - max_prefix = std::min(max_prefix, *max_run_length_prefix); - *max_run_length_prefix = max_prefix; - *out_size = 0; - for (size_t i = 0; i < in_size;) { - assert(*out_size <= i); - if (v[i] != 0) { - v[*out_size] = v[i] + *max_run_length_prefix; - ++i; - ++(*out_size); - } else { - uint32_t reps = 1; - for (size_t k = i + 1; k < in_size && v[k] == 0; ++k) { - ++reps; - } - i += reps; - while (reps != 0) { - if (reps < (2u << max_prefix)) { - uint32_t run_length_prefix = Log2FloorNonZero(reps); - const uint32_t extra_bits = reps - (1u << run_length_prefix); - v[*out_size] = run_length_prefix + (extra_bits << 9); - ++(*out_size); - break; - } else { - const uint32_t extra_bits = (1u << max_prefix) - 1u; - v[*out_size] = max_prefix + (extra_bits << 9); - reps -= (2u << max_prefix) - 1u; - ++(*out_size); - } - } - } - } -} - -void EncodeContextMap(const std::vector<uint32_t>& context_map, - size_t num_clusters, - HuffmanTree* tree, - size_t* storage_ix, uint8_t* storage) { - StoreVarLenUint8(num_clusters - 1, storage_ix, storage); - - if (num_clusters == 1) { - return; - } - - uint32_t* rle_symbols = new uint32_t[context_map.size()]; - MoveToFrontTransform(&context_map[0], context_map.size(), rle_symbols); - uint32_t max_run_length_prefix = 6; - size_t num_rle_symbols = 0; - RunLengthCodeZeros(context_map.size(), rle_symbols, - &num_rle_symbols, &max_run_length_prefix); - uint32_t histogram[kContextMapAlphabetSize]; - memset(histogram, 0, sizeof(histogram)); - static const int kSymbolBits = 9; - static const uint32_t kSymbolMask = (1u << kSymbolBits) - 1u; - for (size_t i = 0; i < num_rle_symbols; ++i) { - ++histogram[rle_symbols[i] & kSymbolMask]; - } - bool use_rle = max_run_length_prefix > 0; - WriteBits(1, use_rle, storage_ix, storage); - if (use_rle) { - WriteBits(4, max_run_length_prefix - 1, storage_ix, storage); - } - uint8_t depths[kContextMapAlphabetSize]; - uint16_t bits[kContextMapAlphabetSize]; - memset(depths, 0, sizeof(depths)); - memset(bits, 0, sizeof(bits)); - BuildAndStoreHuffmanTree(histogram, num_clusters + max_run_length_prefix, - tree, depths, bits, storage_ix, storage); - for (size_t i = 0; i < num_rle_symbols; ++i) { - const uint32_t rle_symbol = rle_symbols[i] & kSymbolMask; - const uint32_t extra_bits_val = rle_symbols[i] >> kSymbolBits; - WriteBits(depths[rle_symbol], bits[rle_symbol], storage_ix, storage); - if (rle_symbol > 0 && rle_symbol <= max_run_length_prefix) { - WriteBits(rle_symbol, extra_bits_val, storage_ix, storage); - } - } - WriteBits(1, 1, storage_ix, storage); // use move-to-front - delete[] rle_symbols; -} - -void StoreBlockSwitch(const BlockSplitCode& code, - const size_t block_ix, - size_t* storage_ix, - uint8_t* storage) { - if (block_ix > 0) { - size_t typecode = code.type_code[block_ix]; - WriteBits(code.type_depths[typecode], code.type_bits[typecode], - storage_ix, storage); - } - size_t lencode = code.length_prefix[block_ix]; - WriteBits(code.length_depths[lencode], code.length_bits[lencode], - storage_ix, storage); - WriteBits(code.length_nextra[block_ix], code.length_extra[block_ix], - storage_ix, storage); -} - -static void BuildAndStoreBlockSplitCode(const std::vector<uint8_t>& types, - const std::vector<uint32_t>& lengths, - const size_t num_types, - HuffmanTree* tree, - BlockSplitCode* code, - size_t* storage_ix, - uint8_t* storage) { - const size_t num_blocks = types.size(); - uint32_t type_histo[kBlockTypeAlphabetSize]; - uint32_t length_histo[kNumBlockLenPrefixes]; - memset(type_histo, 0, (num_types + 2) * sizeof(type_histo[0])); - memset(length_histo, 0, sizeof(length_histo)); - size_t last_type = 1; - size_t second_last_type = 0; - code->type_code.resize(num_blocks); - code->length_prefix.resize(num_blocks); - code->length_nextra.resize(num_blocks); - code->length_extra.resize(num_blocks); - code->type_depths.resize(num_types + 2); - code->type_bits.resize(num_types + 2); - memset(code->length_depths, 0, sizeof(code->length_depths)); - memset(code->length_bits, 0, sizeof(code->length_bits)); - for (size_t i = 0; i < num_blocks; ++i) { - size_t type = types[i]; - size_t type_code = (type == last_type + 1 ? 1 : - type == second_last_type ? 0 : - type + 2); - second_last_type = last_type; - last_type = type; - code->type_code[i] = static_cast<uint32_t>(type_code); - if (i != 0) ++type_histo[type_code]; - GetBlockLengthPrefixCode(lengths[i], - &code->length_prefix[i], - &code->length_nextra[i], - &code->length_extra[i]); - ++length_histo[code->length_prefix[i]]; - } - StoreVarLenUint8(num_types - 1, storage_ix, storage); - if (num_types > 1) { - BuildAndStoreHuffmanTree(&type_histo[0], num_types + 2, tree, - &code->type_depths[0], &code->type_bits[0], - storage_ix, storage); - BuildAndStoreHuffmanTree(&length_histo[0], kNumBlockLenPrefixes, tree, - &code->length_depths[0], &code->length_bits[0], - storage_ix, storage); - StoreBlockSwitch(*code, 0, storage_ix, storage); - } -} - -void StoreTrivialContextMap(size_t num_types, - size_t context_bits, - HuffmanTree* tree, - size_t* storage_ix, - uint8_t* storage) { - StoreVarLenUint8(num_types - 1, storage_ix, storage); - if (num_types > 1) { - size_t repeat_code = context_bits - 1u; - size_t repeat_bits = (1u << repeat_code) - 1u; - size_t alphabet_size = num_types + repeat_code; - uint32_t histogram[kContextMapAlphabetSize]; - uint8_t depths[kContextMapAlphabetSize]; - uint16_t bits[kContextMapAlphabetSize]; - memset(histogram, 0, alphabet_size * sizeof(histogram[0])); - memset(depths, 0, alphabet_size * sizeof(depths[0])); - memset(bits, 0, alphabet_size * sizeof(bits[0])); - // Write RLEMAX. - WriteBits(1, 1, storage_ix, storage); - WriteBits(4, repeat_code - 1, storage_ix, storage); - histogram[repeat_code] = static_cast<uint32_t>(num_types); - histogram[0] = 1; - for (size_t i = context_bits; i < alphabet_size; ++i) { - histogram[i] = 1; - } - BuildAndStoreHuffmanTree(&histogram[0], alphabet_size, tree, - &depths[0], &bits[0], - storage_ix, storage); - for (size_t i = 0; i < num_types; ++i) { - size_t code = (i == 0 ? 0 : i + context_bits - 1); - WriteBits(depths[code], bits[code], storage_ix, storage); - WriteBits(depths[repeat_code], bits[repeat_code], storage_ix, storage); - WriteBits(repeat_code, repeat_bits, storage_ix, storage); - } - // Write IMTF (inverse-move-to-front) bit. - WriteBits(1, 1, storage_ix, storage); - } -} - -// Manages the encoding of one block category (literal, command or distance). -class BlockEncoder { - public: - BlockEncoder(size_t alphabet_size, - size_t num_block_types, - const std::vector<uint8_t>& block_types, - const std::vector<uint32_t>& block_lengths) - : alphabet_size_(alphabet_size), - num_block_types_(num_block_types), - block_types_(block_types), - block_lengths_(block_lengths), - block_ix_(0), - block_len_(block_lengths.empty() ? 0 : block_lengths[0]), - entropy_ix_(0) {} - - // Creates entropy codes of block lengths and block types and stores them - // to the bit stream. - void BuildAndStoreBlockSwitchEntropyCodes(HuffmanTree* tree, - size_t* storage_ix, - uint8_t* storage) { - BuildAndStoreBlockSplitCode( - block_types_, block_lengths_, num_block_types_, - tree, &block_split_code_, storage_ix, storage); - } - - // Creates entropy codes for all block types and stores them to the bit - // stream. - template<int kSize> - void BuildAndStoreEntropyCodes( - const std::vector<Histogram<kSize> >& histograms, - HuffmanTree* tree, - size_t* storage_ix, uint8_t* storage) { - depths_.resize(histograms.size() * alphabet_size_); - bits_.resize(histograms.size() * alphabet_size_); - for (size_t i = 0; i < histograms.size(); ++i) { - size_t ix = i * alphabet_size_; - BuildAndStoreHuffmanTree(&histograms[i].data_[0], alphabet_size_, - tree, - &depths_[ix], &bits_[ix], - storage_ix, storage); - } - } - - // Stores the next symbol with the entropy code of the current block type. - // Updates the block type and block length at block boundaries. - void StoreSymbol(size_t symbol, size_t* storage_ix, uint8_t* storage) { - if (block_len_ == 0) { - ++block_ix_; - block_len_ = block_lengths_[block_ix_]; - entropy_ix_ = block_types_[block_ix_] * alphabet_size_; - StoreBlockSwitch(block_split_code_, block_ix_, storage_ix, storage); - } - --block_len_; - size_t ix = entropy_ix_ + symbol; - WriteBits(depths_[ix], bits_[ix], storage_ix, storage); - } - - // Stores the next symbol with the entropy code of the current block type and - // context value. - // Updates the block type and block length at block boundaries. - template<int kContextBits> - void StoreSymbolWithContext(size_t symbol, size_t context, - const std::vector<uint32_t>& context_map, - size_t* storage_ix, uint8_t* storage) { - if (block_len_ == 0) { - ++block_ix_; - block_len_ = block_lengths_[block_ix_]; - size_t block_type = block_types_[block_ix_]; - entropy_ix_ = block_type << kContextBits; - StoreBlockSwitch(block_split_code_, block_ix_, storage_ix, storage); - } - --block_len_; - size_t histo_ix = context_map[entropy_ix_ + context]; - size_t ix = histo_ix * alphabet_size_ + symbol; - WriteBits(depths_[ix], bits_[ix], storage_ix, storage); - } - - private: - const size_t alphabet_size_; - const size_t num_block_types_; - const std::vector<uint8_t>& block_types_; - const std::vector<uint32_t>& block_lengths_; - BlockSplitCode block_split_code_; - size_t block_ix_; - size_t block_len_; - size_t entropy_ix_; - std::vector<uint8_t> depths_; - std::vector<uint16_t> bits_; -}; - -static void JumpToByteBoundary(size_t* storage_ix, uint8_t* storage) { - *storage_ix = (*storage_ix + 7u) & ~7u; - storage[*storage_ix >> 3] = 0; -} - -void StoreMetaBlock(const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - bool is_last, - uint32_t num_direct_distance_codes, - uint32_t distance_postfix_bits, - ContextType literal_context_mode, - const brotli::Command *commands, - size_t n_commands, - const MetaBlockSplit& mb, - size_t *storage_ix, - uint8_t *storage) { - StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); - - size_t num_distance_codes = - kNumDistanceShortCodes + num_direct_distance_codes + - (48u << distance_postfix_bits); - - HuffmanTree* tree = static_cast<HuffmanTree*>( - malloc(kMaxHuffmanTreeSize * sizeof(HuffmanTree))); - BlockEncoder literal_enc(256, - mb.literal_split.num_types, - mb.literal_split.types, - mb.literal_split.lengths); - BlockEncoder command_enc(kNumCommandPrefixes, - mb.command_split.num_types, - mb.command_split.types, - mb.command_split.lengths); - BlockEncoder distance_enc(num_distance_codes, - mb.distance_split.num_types, - mb.distance_split.types, - mb.distance_split.lengths); - - literal_enc.BuildAndStoreBlockSwitchEntropyCodes(tree, storage_ix, storage); - command_enc.BuildAndStoreBlockSwitchEntropyCodes(tree, storage_ix, storage); - distance_enc.BuildAndStoreBlockSwitchEntropyCodes(tree, storage_ix, storage); - - WriteBits(2, distance_postfix_bits, storage_ix, storage); - WriteBits(4, num_direct_distance_codes >> distance_postfix_bits, - storage_ix, storage); - for (size_t i = 0; i < mb.literal_split.num_types; ++i) { - WriteBits(2, literal_context_mode, storage_ix, storage); - } - - size_t num_literal_histograms = mb.literal_histograms.size(); - if (mb.literal_context_map.empty()) { - StoreTrivialContextMap(num_literal_histograms, kLiteralContextBits, tree, - storage_ix, storage); - } else { - EncodeContextMap(mb.literal_context_map, num_literal_histograms, tree, - storage_ix, storage); - } - - size_t num_dist_histograms = mb.distance_histograms.size(); - if (mb.distance_context_map.empty()) { - StoreTrivialContextMap(num_dist_histograms, kDistanceContextBits, tree, - storage_ix, storage); - } else { - EncodeContextMap(mb.distance_context_map, num_dist_histograms, tree, - storage_ix, storage); - } - - literal_enc.BuildAndStoreEntropyCodes(mb.literal_histograms, tree, - storage_ix, storage); - command_enc.BuildAndStoreEntropyCodes(mb.command_histograms, tree, - storage_ix, storage); - distance_enc.BuildAndStoreEntropyCodes(mb.distance_histograms, tree, - storage_ix, storage); - free(tree); - - size_t pos = start_pos; - for (size_t i = 0; i < n_commands; ++i) { - const Command cmd = commands[i]; - size_t cmd_code = cmd.cmd_prefix_; - command_enc.StoreSymbol(cmd_code, storage_ix, storage); - StoreCommandExtra(cmd, storage_ix, storage); - if (mb.literal_context_map.empty()) { - for (size_t j = cmd.insert_len_; j != 0; --j) { - literal_enc.StoreSymbol(input[pos & mask], storage_ix, storage); - ++pos; - } - } else { - for (size_t j = cmd.insert_len_; j != 0; --j) { - size_t context = Context(prev_byte, prev_byte2, literal_context_mode); - uint8_t literal = input[pos & mask]; - literal_enc.StoreSymbolWithContext<kLiteralContextBits>( - literal, context, mb.literal_context_map, storage_ix, storage); - prev_byte2 = prev_byte; - prev_byte = literal; - ++pos; - } - } - pos += cmd.copy_len(); - if (cmd.copy_len()) { - prev_byte2 = input[(pos - 2) & mask]; - prev_byte = input[(pos - 1) & mask]; - if (cmd.cmd_prefix_ >= 128) { - size_t dist_code = cmd.dist_prefix_; - uint32_t distnumextra = cmd.dist_extra_ >> 24; - uint64_t distextra = cmd.dist_extra_ & 0xffffff; - if (mb.distance_context_map.empty()) { - distance_enc.StoreSymbol(dist_code, storage_ix, storage); - } else { - size_t context = cmd.DistanceContext(); - distance_enc.StoreSymbolWithContext<kDistanceContextBits>( - dist_code, context, mb.distance_context_map, storage_ix, storage); - } - brotli::WriteBits(distnumextra, distextra, storage_ix, storage); - } - } - } - if (is_last) { - JumpToByteBoundary(storage_ix, storage); - } -} - -static void BuildHistograms(const uint8_t* input, - size_t start_pos, - size_t mask, - const brotli::Command *commands, - size_t n_commands, - HistogramLiteral* lit_histo, - HistogramCommand* cmd_histo, - HistogramDistance* dist_histo) { - size_t pos = start_pos; - for (size_t i = 0; i < n_commands; ++i) { - const Command cmd = commands[i]; - cmd_histo->Add(cmd.cmd_prefix_); - for (size_t j = cmd.insert_len_; j != 0; --j) { - lit_histo->Add(input[pos & mask]); - ++pos; - } - pos += cmd.copy_len(); - if (cmd.copy_len() && cmd.cmd_prefix_ >= 128) { - dist_histo->Add(cmd.dist_prefix_); - } - } -} - -static void StoreDataWithHuffmanCodes(const uint8_t* input, - size_t start_pos, - size_t mask, - const brotli::Command *commands, - size_t n_commands, - const uint8_t* lit_depth, - const uint16_t* lit_bits, - const uint8_t* cmd_depth, - const uint16_t* cmd_bits, - const uint8_t* dist_depth, - const uint16_t* dist_bits, - size_t* storage_ix, - uint8_t* storage) { - size_t pos = start_pos; - for (size_t i = 0; i < n_commands; ++i) { - const Command cmd = commands[i]; - const size_t cmd_code = cmd.cmd_prefix_; - WriteBits(cmd_depth[cmd_code], cmd_bits[cmd_code], storage_ix, storage); - StoreCommandExtra(cmd, storage_ix, storage); - for (size_t j = cmd.insert_len_; j != 0; --j) { - const uint8_t literal = input[pos & mask]; - WriteBits(lit_depth[literal], lit_bits[literal], storage_ix, storage); - ++pos; - } - pos += cmd.copy_len(); - if (cmd.copy_len() && cmd.cmd_prefix_ >= 128) { - const size_t dist_code = cmd.dist_prefix_; - const uint32_t distnumextra = cmd.dist_extra_ >> 24; - const uint32_t distextra = cmd.dist_extra_ & 0xffffff; - WriteBits(dist_depth[dist_code], dist_bits[dist_code], - storage_ix, storage); - WriteBits(distnumextra, distextra, storage_ix, storage); - } - } -} - -void StoreMetaBlockTrivial(const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - bool is_last, - const brotli::Command *commands, - size_t n_commands, - size_t *storage_ix, - uint8_t *storage) { - StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); - - HistogramLiteral lit_histo; - HistogramCommand cmd_histo; - HistogramDistance dist_histo; - - BuildHistograms(input, start_pos, mask, commands, n_commands, - &lit_histo, &cmd_histo, &dist_histo); - - WriteBits(13, 0, storage_ix, storage); - - std::vector<uint8_t> lit_depth(256); - std::vector<uint16_t> lit_bits(256); - std::vector<uint8_t> cmd_depth(kNumCommandPrefixes); - std::vector<uint16_t> cmd_bits(kNumCommandPrefixes); - std::vector<uint8_t> dist_depth(64); - std::vector<uint16_t> dist_bits(64); - - HuffmanTree* tree = static_cast<HuffmanTree*>( - malloc(kMaxHuffmanTreeSize * sizeof(HuffmanTree))); - BuildAndStoreHuffmanTree(&lit_histo.data_[0], 256, tree, - &lit_depth[0], &lit_bits[0], - storage_ix, storage); - BuildAndStoreHuffmanTree(&cmd_histo.data_[0], kNumCommandPrefixes, tree, - &cmd_depth[0], &cmd_bits[0], - storage_ix, storage); - BuildAndStoreHuffmanTree(&dist_histo.data_[0], 64, tree, - &dist_depth[0], &dist_bits[0], - storage_ix, storage); - free(tree); - StoreDataWithHuffmanCodes(input, start_pos, mask, commands, - n_commands, &lit_depth[0], &lit_bits[0], - &cmd_depth[0], &cmd_bits[0], - &dist_depth[0], &dist_bits[0], - storage_ix, storage); - if (is_last) { - JumpToByteBoundary(storage_ix, storage); - } -} - -void StoreMetaBlockFast(const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - bool is_last, - const brotli::Command *commands, - size_t n_commands, - size_t *storage_ix, - uint8_t *storage) { - StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); - - WriteBits(13, 0, storage_ix, storage); - - if (n_commands <= 128) { - uint32_t histogram[256] = { 0 }; - size_t pos = start_pos; - size_t num_literals = 0; - for (size_t i = 0; i < n_commands; ++i) { - const Command cmd = commands[i]; - for (size_t j = cmd.insert_len_; j != 0; --j) { - ++histogram[input[pos & mask]]; - ++pos; - } - num_literals += cmd.insert_len_; - pos += cmd.copy_len(); - } - uint8_t lit_depth[256] = { 0 }; - uint16_t lit_bits[256] = { 0 }; - BuildAndStoreHuffmanTreeFast(histogram, num_literals, - /* max_bits = */ 8, - lit_depth, lit_bits, - storage_ix, storage); - StoreStaticCommandHuffmanTree(storage_ix, storage); - StoreStaticDistanceHuffmanTree(storage_ix, storage); - StoreDataWithHuffmanCodes(input, start_pos, mask, commands, - n_commands, &lit_depth[0], &lit_bits[0], - kStaticCommandCodeDepth, - kStaticCommandCodeBits, - kStaticDistanceCodeDepth, - kStaticDistanceCodeBits, - storage_ix, storage); - } else { - HistogramLiteral lit_histo; - HistogramCommand cmd_histo; - HistogramDistance dist_histo; - BuildHistograms(input, start_pos, mask, commands, n_commands, - &lit_histo, &cmd_histo, &dist_histo); - std::vector<uint8_t> lit_depth(256); - std::vector<uint16_t> lit_bits(256); - std::vector<uint8_t> cmd_depth(kNumCommandPrefixes); - std::vector<uint16_t> cmd_bits(kNumCommandPrefixes); - std::vector<uint8_t> dist_depth(64); - std::vector<uint16_t> dist_bits(64); - BuildAndStoreHuffmanTreeFast(&lit_histo.data_[0], lit_histo.total_count_, - /* max_bits = */ 8, - &lit_depth[0], &lit_bits[0], - storage_ix, storage); - BuildAndStoreHuffmanTreeFast(&cmd_histo.data_[0], cmd_histo.total_count_, - /* max_bits = */ 10, - &cmd_depth[0], &cmd_bits[0], - storage_ix, storage); - BuildAndStoreHuffmanTreeFast(&dist_histo.data_[0], dist_histo.total_count_, - /* max_bits = */ 6, - &dist_depth[0], &dist_bits[0], - storage_ix, storage); - StoreDataWithHuffmanCodes(input, start_pos, mask, commands, - n_commands, &lit_depth[0], &lit_bits[0], - &cmd_depth[0], &cmd_bits[0], - &dist_depth[0], &dist_bits[0], - storage_ix, storage); - } - - if (is_last) { - JumpToByteBoundary(storage_ix, storage); - } -} - -// This is for storing uncompressed blocks (simple raw storage of -// bytes-as-bytes). -void StoreUncompressedMetaBlock(bool final_block, - const uint8_t * __restrict input, - size_t position, size_t mask, - size_t len, - size_t * __restrict storage_ix, - uint8_t * __restrict storage) { - StoreUncompressedMetaBlockHeader(len, storage_ix, storage); - JumpToByteBoundary(storage_ix, storage); - - size_t masked_pos = position & mask; - if (masked_pos + len > mask + 1) { - size_t len1 = mask + 1 - masked_pos; - memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len1); - *storage_ix += len1 << 3; - len -= len1; - masked_pos = 0; - } - memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len); - *storage_ix += len << 3; - - // We need to clear the next 4 bytes to continue to be - // compatible with WriteBits. - brotli::WriteBitsPrepareStorage(*storage_ix, storage); - - // Since the uncompressed block itself may not be the final block, add an - // empty one after this. - if (final_block) { - brotli::WriteBits(1, 1, storage_ix, storage); // islast - brotli::WriteBits(1, 1, storage_ix, storage); // isempty - JumpToByteBoundary(storage_ix, storage); - } -} - -void StoreSyncMetaBlock(size_t * __restrict storage_ix, - uint8_t * __restrict storage) { - // Empty metadata meta-block bit pattern: - // 1 bit: is_last (0) - // 2 bits: num nibbles (3) - // 1 bit: reserved (0) - // 2 bits: metadata length bytes (0) - WriteBits(6, 6, storage_ix, storage); - JumpToByteBoundary(storage_ix, storage); -} - -} // namespace brotli diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/brotli_bit_stream.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/brotli_bit_stream.h deleted file mode 100644 index 6c706535c80..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/brotli_bit_stream.h +++ /dev/null @@ -1,179 +0,0 @@ -/* Copyright 2014 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Functions to convert brotli-related data structures into the -// brotli bit stream. The functions here operate under -// assumption that there is enough space in the storage, i.e., there are -// no out-of-range checks anywhere. -// -// These functions do bit addressing into a byte array. The byte array -// is called "storage" and the index to the bit is called storage_ix -// in function arguments. - -#ifndef BROTLI_ENC_BROTLI_BIT_STREAM_H_ -#define BROTLI_ENC_BROTLI_BIT_STREAM_H_ - -#include <vector> - -#include "./entropy_encode.h" -#include "./metablock.h" -#include "./types.h" - -namespace brotli { - -// All Store functions here will use a storage_ix, which is always the bit -// position for the current storage. - -// Stores a number between 0 and 255. -void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage); - -// Stores the compressed meta-block header. -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void StoreCompressedMetaBlockHeader(bool final_block, - size_t length, - size_t* storage_ix, - uint8_t* storage); - -// Stores the uncompressed meta-block header. -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void StoreUncompressedMetaBlockHeader(size_t length, - size_t* storage_ix, - uint8_t* storage); - -// Stores a context map where the histogram type is always the block type. -void StoreTrivialContextMap(size_t num_types, - size_t context_bits, - HuffmanTree* tree, - size_t* storage_ix, - uint8_t* storage); - -void StoreHuffmanTreeOfHuffmanTreeToBitMask( - const int num_codes, - const uint8_t *code_length_bitdepth, - size_t *storage_ix, - uint8_t *storage); - -void StoreHuffmanTree(const uint8_t* depths, size_t num, HuffmanTree* tree, - size_t *storage_ix, uint8_t *storage); - -// Builds a Huffman tree from histogram[0:length] into depth[0:length] and -// bits[0:length] and stores the encoded tree to the bit stream. -void BuildAndStoreHuffmanTree(const uint32_t *histogram, - const size_t length, - HuffmanTree* tree, - uint8_t* depth, - uint16_t* bits, - size_t* storage_ix, - uint8_t* storage); - -void BuildAndStoreHuffmanTreeFast(const uint32_t *histogram, - const size_t histogram_total, - const size_t max_bits, - uint8_t* depth, - uint16_t* bits, - size_t* storage_ix, - uint8_t* storage); - -// Encodes the given context map to the bit stream. The number of different -// histogram ids is given by num_clusters. -void EncodeContextMap(const std::vector<uint32_t>& context_map, - size_t num_clusters, - HuffmanTree* tree, - size_t* storage_ix, uint8_t* storage); - -// Data structure that stores everything that is needed to encode each block -// switch command. -struct BlockSplitCode { - std::vector<uint32_t> type_code; - std::vector<uint32_t> length_prefix; - std::vector<uint32_t> length_nextra; - std::vector<uint32_t> length_extra; - std::vector<uint8_t> type_depths; - std::vector<uint16_t> type_bits; - uint8_t length_depths[kNumBlockLenPrefixes]; - uint16_t length_bits[kNumBlockLenPrefixes]; -}; - -// Builds a BlockSplitCode data structure from the block split given by the -// vector of block types and block lengths and stores it to the bit stream. -void BuildAndStoreBlockSplitCode(const std::vector<uint8_t>& types, - const std::vector<uint32_t>& lengths, - const size_t num_types, - BlockSplitCode* code, - size_t* storage_ix, - uint8_t* storage); - -// Stores the block switch command with index block_ix to the bit stream. -void StoreBlockSwitch(const BlockSplitCode& code, - const size_t block_ix, - size_t* storage_ix, - uint8_t* storage); - -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void StoreMetaBlock(const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - bool final_block, - uint32_t num_direct_distance_codes, - uint32_t distance_postfix_bits, - ContextType literal_context_mode, - const brotli::Command *commands, - size_t n_commands, - const MetaBlockSplit& mb, - size_t *storage_ix, - uint8_t *storage); - -// Stores the meta-block without doing any block splitting, just collects -// one histogram per block category and uses that for entropy coding. -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void StoreMetaBlockTrivial(const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - bool is_last, - const brotli::Command *commands, - size_t n_commands, - size_t *storage_ix, - uint8_t *storage); - -// Same as above, but uses static prefix codes for histograms with a only a few -// symbols, and uses static code length prefix codes for all other histograms. -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void StoreMetaBlockFast(const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - bool is_last, - const brotli::Command *commands, - size_t n_commands, - size_t *storage_ix, - uint8_t *storage); - -// This is for storing uncompressed blocks (simple raw storage of -// bytes-as-bytes). -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void StoreUncompressedMetaBlock(bool final_block, - const uint8_t* input, - size_t position, size_t mask, - size_t len, - size_t* storage_ix, - uint8_t* storage); - -// Stores an empty metadata meta-block and syncs to a byte boundary. -void StoreSyncMetaBlock(size_t* storage_ix, uint8_t* storage); - -} // namespace brotli - -#endif // BROTLI_ENC_BROTLI_BIT_STREAM_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/cluster.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/cluster.h deleted file mode 100644 index 5054faf791d..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/cluster.h +++ /dev/null @@ -1,330 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Functions for clustering similar histograms together. - -#ifndef BROTLI_ENC_CLUSTER_H_ -#define BROTLI_ENC_CLUSTER_H_ - -#include <math.h> -#include <algorithm> -#include <utility> -#include <vector> - -#include "./bit_cost.h" -#include "./entropy_encode.h" -#include "./fast_log.h" -#include "./histogram.h" -#include "./port.h" -#include "./types.h" - -namespace brotli { - -struct HistogramPair { - uint32_t idx1; - uint32_t idx2; - double cost_combo; - double cost_diff; -}; - -inline bool operator<(const HistogramPair& p1, const HistogramPair& p2) { - if (p1.cost_diff != p2.cost_diff) { - return p1.cost_diff > p2.cost_diff; - } - return (p1.idx2 - p1.idx1) > (p2.idx2 - p2.idx1); -} - -// Returns entropy reduction of the context map when we combine two clusters. -inline double ClusterCostDiff(size_t size_a, size_t size_b) { - size_t size_c = size_a + size_b; - return static_cast<double>(size_a) * FastLog2(size_a) + - static_cast<double>(size_b) * FastLog2(size_b) - - static_cast<double>(size_c) * FastLog2(size_c); -} - -// Computes the bit cost reduction by combining out[idx1] and out[idx2] and if -// it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. -template<typename HistogramType> -void CompareAndPushToQueue(const HistogramType* out, - const uint32_t* cluster_size, - uint32_t idx1, uint32_t idx2, - size_t max_num_pairs, - HistogramPair* pairs, - size_t* num_pairs) { - if (idx1 == idx2) { - return; - } - if (idx2 < idx1) { - uint32_t t = idx2; - idx2 = idx1; - idx1 = t; - } - bool store_pair = false; - HistogramPair p; - p.idx1 = idx1; - p.idx2 = idx2; - p.cost_diff = 0.5 * ClusterCostDiff(cluster_size[idx1], cluster_size[idx2]); - p.cost_diff -= out[idx1].bit_cost_; - p.cost_diff -= out[idx2].bit_cost_; - - if (out[idx1].total_count_ == 0) { - p.cost_combo = out[idx2].bit_cost_; - store_pair = true; - } else if (out[idx2].total_count_ == 0) { - p.cost_combo = out[idx1].bit_cost_; - store_pair = true; - } else { - double threshold = *num_pairs == 0 ? 1e99 : - std::max(0.0, pairs[0].cost_diff); - HistogramType combo = out[idx1]; - combo.AddHistogram(out[idx2]); - double cost_combo = PopulationCost(combo); - if (cost_combo < threshold - p.cost_diff) { - p.cost_combo = cost_combo; - store_pair = true; - } - } - if (store_pair) { - p.cost_diff += p.cost_combo; - if (*num_pairs > 0 && pairs[0] < p) { - // Replace the top of the queue if needed. - if (*num_pairs < max_num_pairs) { - pairs[*num_pairs] = pairs[0]; - ++(*num_pairs); - } - pairs[0] = p; - } else if (*num_pairs < max_num_pairs) { - pairs[*num_pairs] = p; - ++(*num_pairs); - } - } -} - -template<typename HistogramType> -size_t HistogramCombine(HistogramType* out, - uint32_t* cluster_size, - uint32_t* symbols, - uint32_t* clusters, - HistogramPair* pairs, - size_t num_clusters, - size_t symbols_size, - size_t max_clusters, - size_t max_num_pairs) { - double cost_diff_threshold = 0.0; - size_t min_cluster_size = 1; - - // We maintain a vector of histogram pairs, with the property that the pair - // with the maximum bit cost reduction is the first. - size_t num_pairs = 0; - for (size_t idx1 = 0; idx1 < num_clusters; ++idx1) { - for (size_t idx2 = idx1 + 1; idx2 < num_clusters; ++idx2) { - CompareAndPushToQueue(out, cluster_size, clusters[idx1], clusters[idx2], - max_num_pairs, &pairs[0], &num_pairs); - } - } - - while (num_clusters > min_cluster_size) { - if (pairs[0].cost_diff >= cost_diff_threshold) { - cost_diff_threshold = 1e99; - min_cluster_size = max_clusters; - continue; - } - // Take the best pair from the top of heap. - uint32_t best_idx1 = pairs[0].idx1; - uint32_t best_idx2 = pairs[0].idx2; - out[best_idx1].AddHistogram(out[best_idx2]); - out[best_idx1].bit_cost_ = pairs[0].cost_combo; - cluster_size[best_idx1] += cluster_size[best_idx2]; - for (size_t i = 0; i < symbols_size; ++i) { - if (symbols[i] == best_idx2) { - symbols[i] = best_idx1; - } - } - for (size_t i = 0; i < num_clusters; ++i) { - if (clusters[i] == best_idx2) { - memmove(&clusters[i], &clusters[i + 1], - (num_clusters - i - 1) * sizeof(clusters[0])); - break; - } - } - --num_clusters; - // Remove pairs intersecting the just combined best pair. - size_t copy_to_idx = 0; - for (size_t i = 0; i < num_pairs; ++i) { - HistogramPair& p = pairs[i]; - if (p.idx1 == best_idx1 || p.idx2 == best_idx1 || - p.idx1 == best_idx2 || p.idx2 == best_idx2) { - // Remove invalid pair from the queue. - continue; - } - if (pairs[0] < p) { - // Replace the top of the queue if needed. - HistogramPair front = pairs[0]; - pairs[0] = p; - pairs[copy_to_idx] = front; - } else { - pairs[copy_to_idx] = p; - } - ++copy_to_idx; - } - num_pairs = copy_to_idx; - - // Push new pairs formed with the combined histogram to the heap. - for (size_t i = 0; i < num_clusters; ++i) { - CompareAndPushToQueue(out, cluster_size, best_idx1, clusters[i], - max_num_pairs, &pairs[0], &num_pairs); - } - } - return num_clusters; -} - -// ----------------------------------------------------------------------------- -// Histogram refinement - -// What is the bit cost of moving histogram from cur_symbol to candidate. -template<typename HistogramType> -double HistogramBitCostDistance(const HistogramType& histogram, - const HistogramType& candidate) { - if (histogram.total_count_ == 0) { - return 0.0; - } - HistogramType tmp = histogram; - tmp.AddHistogram(candidate); - return PopulationCost(tmp) - candidate.bit_cost_; -} - -// Find the best 'out' histogram for each of the 'in' histograms. -// When called, clusters[0..num_clusters) contains the unique values from -// symbols[0..in_size), but this property is not preserved in this function. -// Note: we assume that out[]->bit_cost_ is already up-to-date. -template<typename HistogramType> -void HistogramRemap(const HistogramType* in, size_t in_size, - const uint32_t* clusters, size_t num_clusters, - HistogramType* out, uint32_t* symbols) { - for (size_t i = 0; i < in_size; ++i) { - uint32_t best_out = i == 0 ? symbols[0] : symbols[i - 1]; - double best_bits = HistogramBitCostDistance(in[i], out[best_out]); - for (size_t j = 0; j < num_clusters; ++j) { - const double cur_bits = HistogramBitCostDistance(in[i], out[clusters[j]]); - if (cur_bits < best_bits) { - best_bits = cur_bits; - best_out = clusters[j]; - } - } - symbols[i] = best_out; - } - - // Recompute each out based on raw and symbols. - for (size_t j = 0; j < num_clusters; ++j) { - out[clusters[j]].Clear(); - } - for (size_t i = 0; i < in_size; ++i) { - out[symbols[i]].AddHistogram(in[i]); - } -} - -// Reorders elements of the out[0..length) array and changes values in -// symbols[0..length) array in the following way: -// * when called, symbols[] contains indexes into out[], and has N unique -// values (possibly N < length) -// * on return, symbols'[i] = f(symbols[i]) and -// out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length, -// where f is a bijection between the range of symbols[] and [0..N), and -// the first occurrences of values in symbols'[i] come in consecutive -// increasing order. -// Returns N, the number of unique values in symbols[]. -template<typename HistogramType> -size_t HistogramReindex(HistogramType* out, uint32_t* symbols, size_t length) { - static const uint32_t kInvalidIndex = std::numeric_limits<uint32_t>::max(); - std::vector<uint32_t> new_index(length, kInvalidIndex); - uint32_t next_index = 0; - for (size_t i = 0; i < length; ++i) { - if (new_index[symbols[i]] == kInvalidIndex) { - new_index[symbols[i]] = next_index; - ++next_index; - } - } - std::vector<HistogramType> tmp(next_index); - next_index = 0; - for (size_t i = 0; i < length; ++i) { - if (new_index[symbols[i]] == next_index) { - tmp[next_index] = out[symbols[i]]; - ++next_index; - } - symbols[i] = new_index[symbols[i]]; - } - for (size_t i = 0; i < next_index; ++i) { - out[i] = tmp[i]; - } - return next_index; -} - -// Clusters similar histograms in 'in' together, the selected histograms are -// placed in 'out', and for each index in 'in', *histogram_symbols will -// indicate which of the 'out' histograms is the best approximation. -template<typename HistogramType> -void ClusterHistograms(const std::vector<HistogramType>& in, - size_t num_contexts, size_t num_blocks, - size_t max_histograms, - std::vector<HistogramType>* out, - std::vector<uint32_t>* histogram_symbols) { - const size_t in_size = num_contexts * num_blocks; - assert(in_size == in.size()); - std::vector<uint32_t> cluster_size(in_size, 1); - std::vector<uint32_t> clusters(in_size); - size_t num_clusters = 0; - out->resize(in_size); - histogram_symbols->resize(in_size); - for (size_t i = 0; i < in_size; ++i) { - (*out)[i] = in[i]; - (*out)[i].bit_cost_ = PopulationCost(in[i]); - (*histogram_symbols)[i] = static_cast<uint32_t>(i); - } - - const size_t max_input_histograms = 64; - // For the first pass of clustering, we allow all pairs. - size_t max_num_pairs = max_input_histograms * max_input_histograms / 2; - std::vector<HistogramPair> pairs(max_num_pairs + 1); - - for (size_t i = 0; i < in_size; i += max_input_histograms) { - size_t num_to_combine = std::min(in_size - i, max_input_histograms); - for (size_t j = 0; j < num_to_combine; ++j) { - clusters[num_clusters + j] = static_cast<uint32_t>(i + j); - } - size_t num_new_clusters = - HistogramCombine(&(*out)[0], &cluster_size[0], - &(*histogram_symbols)[i], - &clusters[num_clusters], &pairs[0], - num_to_combine, num_to_combine, - max_histograms, max_num_pairs); - num_clusters += num_new_clusters; - } - - // For the second pass, we limit the total number of histogram pairs. - // After this limit is reached, we only keep searching for the best pair. - max_num_pairs = - std::min(64 * num_clusters, (num_clusters / 2) * num_clusters); - pairs.resize(max_num_pairs + 1); - - // Collapse similar histograms. - num_clusters = HistogramCombine(&(*out)[0], &cluster_size[0], - &(*histogram_symbols)[0], &clusters[0], - &pairs[0], num_clusters, in_size, - max_histograms, max_num_pairs); - - // Find the optimal map from original histograms to the final ones. - HistogramRemap(&in[0], in_size, &clusters[0], num_clusters, - &(*out)[0], &(*histogram_symbols)[0]); - - // Convert the context map to a canonical form. - size_t num_histograms = - HistogramReindex(&(*out)[0], &(*histogram_symbols)[0], in_size); - out->resize(num_histograms); -} - -} // namespace brotli - -#endif // BROTLI_ENC_CLUSTER_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/command.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/command.h deleted file mode 100644 index b5cc872bfca..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/command.h +++ /dev/null @@ -1,156 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// This class models a sequence of literals and a backward reference copy. - -#ifndef BROTLI_ENC_COMMAND_H_ -#define BROTLI_ENC_COMMAND_H_ - -#include "./fast_log.h" -#include "./prefix.h" -#include "./types.h" - -namespace brotli { - -static uint32_t kInsBase[] = { 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, - 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594 }; -static uint32_t kInsExtra[] = { 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, - 5, 5, 6, 7, 8, 9, 10, 12, 14, 24 }; -static uint32_t kCopyBase[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18, 22, 30, - 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118 }; -static uint32_t kCopyExtra[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, - 4, 4, 5, 5, 6, 7, 8, 9, 10, 24 }; - -static inline uint16_t GetInsertLengthCode(size_t insertlen) { - if (insertlen < 6) { - return static_cast<uint16_t>(insertlen); - } else if (insertlen < 130) { - insertlen -= 2; - uint32_t nbits = Log2FloorNonZero(insertlen) - 1u; - return static_cast<uint16_t>((nbits << 1) + (insertlen >> nbits) + 2); - } else if (insertlen < 2114) { - return static_cast<uint16_t>(Log2FloorNonZero(insertlen - 66) + 10); - } else if (insertlen < 6210) { - return 21u; - } else if (insertlen < 22594) { - return 22u; - } else { - return 23u; - } -} - -static inline uint16_t GetCopyLengthCode(size_t copylen) { - if (copylen < 10) { - return static_cast<uint16_t>(copylen - 2); - } else if (copylen < 134) { - copylen -= 6; - uint32_t nbits = Log2FloorNonZero(copylen) - 1u; - return static_cast<uint16_t>((nbits << 1) + (copylen >> nbits) + 4); - } else if (copylen < 2118) { - return static_cast<uint16_t>(Log2FloorNonZero(copylen - 70) + 12); - } else { - return 23u; - } -} - -static inline uint16_t CombineLengthCodes( - uint16_t inscode, uint16_t copycode, bool use_last_distance) { - uint16_t bits64 = - static_cast<uint16_t>((copycode & 0x7u) | ((inscode & 0x7u) << 3)); - if (use_last_distance && inscode < 8 && copycode < 16) { - return (copycode < 8) ? bits64 : (bits64 | 64); - } else { - // "To convert an insert-and-copy length code to an insert length code and - // a copy length code, the following table can be used" - static const uint16_t cells[9] = { 128u, 192u, 384u, 256u, 320u, 512u, - 448u, 576u, 640u }; - return cells[(copycode >> 3) + 3 * (inscode >> 3)] | bits64; - } -} - -static inline void GetLengthCode(size_t insertlen, size_t copylen, - bool use_last_distance, - uint16_t* code) { - uint16_t inscode = GetInsertLengthCode(insertlen); - uint16_t copycode = GetCopyLengthCode(copylen); - *code = CombineLengthCodes(inscode, copycode, use_last_distance); -} - -static inline uint32_t GetInsertBase(uint16_t inscode) { - return kInsBase[inscode]; -} - -static inline uint32_t GetInsertExtra(uint16_t inscode) { - return kInsExtra[inscode]; -} - -static inline uint32_t GetCopyBase(uint16_t copycode) { - return kCopyBase[copycode]; -} - -static inline uint32_t GetCopyExtra(uint16_t copycode) { - return kCopyExtra[copycode]; -} - -struct Command { - // distance_code is e.g. 0 for same-as-last short code, or 16 for offset 1. - Command(size_t insertlen, size_t copylen, size_t copylen_code, - size_t distance_code) - : insert_len_(static_cast<uint32_t>(insertlen)) { - copy_len_ = static_cast<uint32_t>( - copylen | ((copylen_code ^ copylen) << 24)); - // The distance prefix and extra bits are stored in this Command as if - // npostfix and ndirect were 0, they are only recomputed later after the - // clustering if needed. - PrefixEncodeCopyDistance(distance_code, 0, 0, &dist_prefix_, &dist_extra_); - GetLengthCode(insertlen, copylen_code, dist_prefix_ == 0, - &cmd_prefix_); - } - - explicit Command(size_t insertlen) - : insert_len_(static_cast<uint32_t>(insertlen)) - , copy_len_(4 << 24), dist_extra_(0), dist_prefix_(16) { - GetLengthCode(insertlen, 4, dist_prefix_ == 0, &cmd_prefix_); - } - - uint32_t DistanceCode(void) const { - if (dist_prefix_ < 16) { - return dist_prefix_; - } - uint32_t nbits = dist_extra_ >> 24; - uint32_t extra = dist_extra_ & 0xffffff; - uint32_t prefix = dist_prefix_ - 12 - 2 * nbits; - return (prefix << nbits) + extra + 12; - } - - uint32_t DistanceContext(void) const { - uint32_t r = cmd_prefix_ >> 6; - uint32_t c = cmd_prefix_ & 7; - if ((r == 0 || r == 2 || r == 4 || r == 7) && (c <= 2)) { - return c; - } - return 3; - } - - inline uint32_t copy_len(void) const { - return copy_len_ & 0xFFFFFF; - } - - inline uint32_t copy_len_code(void) const { - return (copy_len_ & 0xFFFFFF) ^ (copy_len_ >> 24); - } - - uint32_t insert_len_; - /* Stores copy_len in low 24 bits and copy_len XOR copy_code in high 8 bit. */ - uint32_t copy_len_; - uint32_t dist_extra_; - uint16_t cmd_prefix_; - uint16_t dist_prefix_; -}; - -} // namespace brotli - -#endif // BROTLI_ENC_COMMAND_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compress_fragment.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compress_fragment.cc deleted file mode 100644 index 5620112ac02..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compress_fragment.cc +++ /dev/null @@ -1,701 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Function for fast encoding of an input fragment, independently from the input -// history. This function uses one-pass processing: when we find a backward -// match, we immediately emit the corresponding command and literal codes to -// the bit stream. -// -// Adapted from the CompressFragment() function in -// https://github.com/google/snappy/blob/master/snappy.cc - -#include "./compress_fragment.h" - -#include <algorithm> -#include <cstring> - -#include "./brotli_bit_stream.h" -#include "./entropy_encode.h" -#include "./fast_log.h" -#include "./find_match_length.h" -#include "./port.h" -#include "./types.h" -#include "./write_bits.h" - -namespace brotli { - -// kHashMul32 multiplier has these properties: -// * The multiplier must be odd. Otherwise we may lose the highest bit. -// * No long streaks of 1s or 0s. -// * There is no effort to ensure that it is a prime, the oddity is enough -// for this use. -// * The number has been tuned heuristically against compression benchmarks. -static const uint32_t kHashMul32 = 0x1e35a7bd; - -static inline uint32_t Hash(const uint8_t* p, size_t shift) { - const uint64_t h = (BROTLI_UNALIGNED_LOAD64(p) << 24) * kHashMul32; - return static_cast<uint32_t>(h >> shift); -} - -static inline uint32_t HashBytesAtOffset(uint64_t v, int offset, size_t shift) { - assert(offset >= 0); - assert(offset <= 3); - const uint64_t h = ((v >> (8 * offset)) << 24) * kHashMul32; - return static_cast<uint32_t>(h >> shift); -} - -static inline int IsMatch(const uint8_t* p1, const uint8_t* p2) { - return (BROTLI_UNALIGNED_LOAD32(p1) == BROTLI_UNALIGNED_LOAD32(p2) && - p1[4] == p2[4]); -} - -// Builds a literal prefix code into "depths" and "bits" based on the statistics -// of the "input" string and stores it into the bit stream. -// Note that the prefix code here is built from the pre-LZ77 input, therefore -// we can only approximate the statistics of the actual literal stream. -// Moreover, for long inputs we build a histogram from a sample of the input -// and thus have to assign a non-zero depth for each literal. -static void BuildAndStoreLiteralPrefixCode(const uint8_t* input, - const size_t input_size, - uint8_t depths[256], - uint16_t bits[256], - size_t* storage_ix, - uint8_t* storage) { - uint32_t histogram[256] = { 0 }; - size_t histogram_total; - if (input_size < (1 << 15)) { - for (size_t i = 0; i < input_size; ++i) { - ++histogram[input[i]]; - } - histogram_total = input_size; - for (size_t i = 0; i < 256; ++i) { - // We weigh the first 11 samples with weight 3 to account for the - // balancing effect of the LZ77 phase on the histogram. - const uint32_t adjust = 2 * std::min(histogram[i], 11u); - histogram[i] += adjust; - histogram_total += adjust; - } - } else { - static const size_t kSampleRate = 29; - for (size_t i = 0; i < input_size; i += kSampleRate) { - ++histogram[input[i]]; - } - histogram_total = (input_size + kSampleRate - 1) / kSampleRate; - for (size_t i = 0; i < 256; ++i) { - // We add 1 to each population count to avoid 0 bit depths (since this is - // only a sample and we don't know if the symbol appears or not), and we - // weigh the first 11 samples with weight 3 to account for the balancing - // effect of the LZ77 phase on the histogram (more frequent symbols are - // more likely to be in backward references instead as literals). - const uint32_t adjust = 1 + 2 * std::min(histogram[i], 11u); - histogram[i] += adjust; - histogram_total += adjust; - } - } - BuildAndStoreHuffmanTreeFast(histogram, histogram_total, - /* max_bits = */ 8, - depths, bits, storage_ix, storage); -} - -// Builds a command and distance prefix code (each 64 symbols) into "depth" and -// "bits" based on "histogram" and stores it into the bit stream. -static void BuildAndStoreCommandPrefixCode(const uint32_t histogram[128], - uint8_t depth[128], - uint16_t bits[128], - size_t* storage_ix, - uint8_t* storage) { - // Tree size for building a tree over 64 symbols is 2 * 64 + 1. - static const size_t kTreeSize = 129; - HuffmanTree tree[kTreeSize]; - CreateHuffmanTree(histogram, 64, 15, tree, depth); - CreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]); - // We have to jump through a few hoopes here in order to compute - // the command bits because the symbols are in a different order than in - // the full alphabet. This looks complicated, but having the symbols - // in this order in the command bits saves a few branches in the Emit* - // functions. - uint8_t cmd_depth[64]; - uint16_t cmd_bits[64]; - memcpy(cmd_depth, depth, 24); - memcpy(cmd_depth + 24, depth + 40, 8); - memcpy(cmd_depth + 32, depth + 24, 8); - memcpy(cmd_depth + 40, depth + 48, 8); - memcpy(cmd_depth + 48, depth + 32, 8); - memcpy(cmd_depth + 56, depth + 56, 8); - ConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits); - memcpy(bits, cmd_bits, 48); - memcpy(bits + 24, cmd_bits + 32, 16); - memcpy(bits + 32, cmd_bits + 48, 16); - memcpy(bits + 40, cmd_bits + 24, 16); - memcpy(bits + 48, cmd_bits + 40, 16); - memcpy(bits + 56, cmd_bits + 56, 16); - ConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]); - { - // Create the bit length array for the full command alphabet. - uint8_t cmd_depth[704] = { 0 }; - memcpy(cmd_depth, depth, 8); - memcpy(cmd_depth + 64, depth + 8, 8); - memcpy(cmd_depth + 128, depth + 16, 8); - memcpy(cmd_depth + 192, depth + 24, 8); - memcpy(cmd_depth + 384, depth + 32, 8); - for (size_t i = 0; i < 8; ++i) { - cmd_depth[128 + 8 * i] = depth[40 + i]; - cmd_depth[256 + 8 * i] = depth[48 + i]; - cmd_depth[448 + 8 * i] = depth[56 + i]; - } - StoreHuffmanTree(cmd_depth, 704, tree, storage_ix, storage); - } - StoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage); -} - -// REQUIRES: insertlen < 6210 -inline void EmitInsertLen(size_t insertlen, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, - uint8_t* storage) { - if (insertlen < 6) { - const size_t code = insertlen + 40; - WriteBits(depth[code], bits[code], storage_ix, storage); - ++histo[code]; - } else if (insertlen < 130) { - insertlen -= 2; - const uint32_t nbits = Log2FloorNonZero(insertlen) - 1u; - const size_t prefix = insertlen >> nbits; - const size_t inscode = (nbits << 1) + prefix + 42; - WriteBits(depth[inscode], bits[inscode], storage_ix, storage); - WriteBits(nbits, insertlen - (prefix << nbits), storage_ix, storage); - ++histo[inscode]; - } else if (insertlen < 2114) { - insertlen -= 66; - const uint32_t nbits = Log2FloorNonZero(insertlen); - const size_t code = nbits + 50; - WriteBits(depth[code], bits[code], storage_ix, storage); - WriteBits(nbits, insertlen - (1 << nbits), storage_ix, storage); - ++histo[code]; - } else { - WriteBits(depth[61], bits[61], storage_ix, storage); - WriteBits(12, insertlen - 2114, storage_ix, storage); - ++histo[21]; - } -} - -inline void EmitLongInsertLen(size_t insertlen, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, - uint8_t* storage) { - if (insertlen < 22594) { - WriteBits(depth[62], bits[62], storage_ix, storage); - WriteBits(14, insertlen - 6210, storage_ix, storage); - ++histo[22]; - } else { - WriteBits(depth[63], bits[63], storage_ix, storage); - WriteBits(24, insertlen - 22594, storage_ix, storage); - ++histo[23]; - } -} - -inline void EmitCopyLen(size_t copylen, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, - uint8_t* storage) { - if (copylen < 10) { - WriteBits(depth[copylen + 14], bits[copylen + 14], storage_ix, storage); - ++histo[copylen + 14]; - } else if (copylen < 134) { - copylen -= 6; - const uint32_t nbits = Log2FloorNonZero(copylen) - 1u; - const size_t prefix = copylen >> nbits; - const size_t code = (nbits << 1) + prefix + 20; - WriteBits(depth[code], bits[code], storage_ix, storage); - WriteBits(nbits, copylen - (prefix << nbits), storage_ix, storage); - ++histo[code]; - } else if (copylen < 2118) { - copylen -= 70; - const uint32_t nbits = Log2FloorNonZero(copylen); - const size_t code = nbits + 28; - WriteBits(depth[code], bits[code], storage_ix, storage); - WriteBits(nbits, copylen - (1 << nbits), storage_ix, storage); - ++histo[code]; - } else { - WriteBits(depth[39], bits[39], storage_ix, storage); - WriteBits(24, copylen - 2118, storage_ix, storage); - ++histo[47]; - } -} - -inline void EmitCopyLenLastDistance(size_t copylen, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, - uint8_t* storage) { - if (copylen < 12) { - WriteBits(depth[copylen - 4], bits[copylen - 4], storage_ix, storage); - ++histo[copylen - 4]; - } else if (copylen < 72) { - copylen -= 8; - const uint32_t nbits = Log2FloorNonZero(copylen) - 1; - const size_t prefix = copylen >> nbits; - const size_t code = (nbits << 1) + prefix + 4; - WriteBits(depth[code], bits[code], storage_ix, storage); - WriteBits(nbits, copylen - (prefix << nbits), storage_ix, storage); - ++histo[code]; - } else if (copylen < 136) { - copylen -= 8; - const size_t code = (copylen >> 5) + 30; - WriteBits(depth[code], bits[code], storage_ix, storage); - WriteBits(5, copylen & 31, storage_ix, storage); - WriteBits(depth[64], bits[64], storage_ix, storage); - ++histo[code]; - ++histo[64]; - } else if (copylen < 2120) { - copylen -= 72; - const uint32_t nbits = Log2FloorNonZero(copylen); - const size_t code = nbits + 28; - WriteBits(depth[code], bits[code], storage_ix, storage); - WriteBits(nbits, copylen - (1 << nbits), storage_ix, storage); - WriteBits(depth[64], bits[64], storage_ix, storage); - ++histo[code]; - ++histo[64]; - } else { - WriteBits(depth[39], bits[39], storage_ix, storage); - WriteBits(24, copylen - 2120, storage_ix, storage); - WriteBits(depth[64], bits[64], storage_ix, storage); - ++histo[47]; - ++histo[64]; - } -} - -inline void EmitDistance(size_t distance, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, uint8_t* storage) { - distance += 3; - const uint32_t nbits = Log2FloorNonZero(distance) - 1u; - const size_t prefix = (distance >> nbits) & 1; - const size_t offset = (2 + prefix) << nbits; - const size_t distcode = 2 * (nbits - 1) + prefix + 80; - WriteBits(depth[distcode], bits[distcode], storage_ix, storage); - WriteBits(nbits, distance - offset, storage_ix, storage); - ++histo[distcode]; -} - -inline void EmitLiterals(const uint8_t* input, const size_t len, - const uint8_t depth[256], const uint16_t bits[256], - size_t* storage_ix, uint8_t* storage) { - for (size_t j = 0; j < len; j++) { - const uint8_t lit = input[j]; - WriteBits(depth[lit], bits[lit], storage_ix, storage); - } -} - -// REQUIRES: len <= 1 << 20. -static void StoreMetaBlockHeader( - size_t len, bool is_uncompressed, size_t* storage_ix, uint8_t* storage) { - // ISLAST - WriteBits(1, 0, storage_ix, storage); - if (len <= (1U << 16)) { - // MNIBBLES is 4 - WriteBits(2, 0, storage_ix, storage); - WriteBits(16, len - 1, storage_ix, storage); - } else { - // MNIBBLES is 5 - WriteBits(2, 1, storage_ix, storage); - WriteBits(20, len - 1, storage_ix, storage); - } - // ISUNCOMPRESSED - WriteBits(1, is_uncompressed, storage_ix, storage); -} - -static void UpdateBits(size_t n_bits, - uint32_t bits, - size_t pos, - uint8_t *array) { - while (n_bits > 0) { - size_t byte_pos = pos >> 3; - size_t n_unchanged_bits = pos & 7; - size_t n_changed_bits = std::min(n_bits, 8 - n_unchanged_bits); - size_t total_bits = n_unchanged_bits + n_changed_bits; - uint32_t mask = (~((1 << total_bits) - 1)) | ((1 << n_unchanged_bits) - 1); - uint32_t unchanged_bits = array[byte_pos] & mask; - uint32_t changed_bits = bits & ((1 << n_changed_bits) - 1); - array[byte_pos] = - static_cast<uint8_t>((changed_bits << n_unchanged_bits) | - unchanged_bits); - n_bits -= n_changed_bits; - bits >>= n_changed_bits; - pos += n_changed_bits; - } -} - -static void RewindBitPosition(const size_t new_storage_ix, - size_t* storage_ix, uint8_t* storage) { - const size_t bitpos = new_storage_ix & 7; - const size_t mask = (1u << bitpos) - 1; - storage[new_storage_ix >> 3] &= static_cast<uint8_t>(mask); - *storage_ix = new_storage_ix; -} - -static bool ShouldMergeBlock(const uint8_t* data, size_t len, - const uint8_t* depths) { - size_t histo[256] = { 0 }; - static const size_t kSampleRate = 43; - for (size_t i = 0; i < len; i += kSampleRate) { - ++histo[data[i]]; - } - const size_t total = (len + kSampleRate - 1) / kSampleRate; - double r = (FastLog2(total) + 0.5) * static_cast<double>(total) + 200; - for (size_t i = 0; i < 256; ++i) { - r -= static_cast<double>(histo[i]) * (depths[i] + FastLog2(histo[i])); - } - return r >= 0.0; -} - -inline bool ShouldUseUncompressedMode(const uint8_t* metablock_start, - const uint8_t* next_emit, - const size_t insertlen, - const uint8_t literal_depths[256]) { - const size_t compressed = static_cast<size_t>(next_emit - metablock_start); - if (compressed * 50 > insertlen) { - return false; - } - static const double kAcceptableLossForUncompressibleSpeedup = 0.02; - static const double kMinEntropy = - 8 * (1.0 - kAcceptableLossForUncompressibleSpeedup); - uint32_t sum = 0; - for (int i = 0; i < 256; ++i) { - const uint32_t n = literal_depths[i]; - sum += n << (15 - n); - } - return sum > static_cast<uint32_t>((1 << 15) * kMinEntropy); -} - -static void EmitUncompressedMetaBlock(const uint8_t* begin, const uint8_t* end, - const size_t storage_ix_start, - size_t* storage_ix, uint8_t* storage) { - const size_t len = static_cast<size_t>(end - begin); - RewindBitPosition(storage_ix_start, storage_ix, storage); - StoreMetaBlockHeader(len, 1, storage_ix, storage); - *storage_ix = (*storage_ix + 7u) & ~7u; - memcpy(&storage[*storage_ix >> 3], begin, len); - *storage_ix += len << 3; - storage[*storage_ix >> 3] = 0; -} - -void BrotliCompressFragmentFast(const uint8_t* input, size_t input_size, - bool is_last, - int* table, size_t table_size, - uint8_t cmd_depth[128], uint16_t cmd_bits[128], - size_t* cmd_code_numbits, uint8_t* cmd_code, - size_t* storage_ix, uint8_t* storage) { - if (input_size == 0) { - assert(is_last); - WriteBits(1, 1, storage_ix, storage); // islast - WriteBits(1, 1, storage_ix, storage); // isempty - *storage_ix = (*storage_ix + 7u) & ~7u; - return; - } - - // "next_emit" is a pointer to the first byte that is not covered by a - // previous copy. Bytes between "next_emit" and the start of the next copy or - // the end of the input will be emitted as literal bytes. - const uint8_t* next_emit = input; - // Save the start of the first block for position and distance computations. - const uint8_t* base_ip = input; - - static const size_t kFirstBlockSize = 3 << 15; - static const size_t kMergeBlockSize = 1 << 16; - - const uint8_t* metablock_start = input; - size_t block_size = std::min(input_size, kFirstBlockSize); - size_t total_block_size = block_size; - // Save the bit position of the MLEN field of the meta-block header, so that - // we can update it later if we decide to extend this meta-block. - size_t mlen_storage_ix = *storage_ix + 3; - StoreMetaBlockHeader(block_size, 0, storage_ix, storage); - // No block splits, no contexts. - WriteBits(13, 0, storage_ix, storage); - - uint8_t lit_depth[256] = { 0 }; - uint16_t lit_bits[256] = { 0 }; - BuildAndStoreLiteralPrefixCode(input, block_size, lit_depth, lit_bits, - storage_ix, storage); - - // Store the pre-compressed command and distance prefix codes. - for (size_t i = 0; i + 7 < *cmd_code_numbits; i += 8) { - WriteBits(8, cmd_code[i >> 3], storage_ix, storage); - } - WriteBits(*cmd_code_numbits & 7, cmd_code[*cmd_code_numbits >> 3], - storage_ix, storage); - - emit_commands: - // Initialize the command and distance histograms. We will gather - // statistics of command and distance codes during the processing - // of this block and use it to update the command and distance - // prefix codes for the next block. - uint32_t cmd_histo[128] = { - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 0, 0, 0, - }; - - // "ip" is the input pointer. - const uint8_t* ip = input; - assert(table_size); - assert(table_size <= (1u << 31)); - assert((table_size & (table_size - 1)) == 0); // table must be power of two - const size_t shift = 64u - Log2FloorNonZero(table_size); - assert(table_size - 1 == static_cast<size_t>( - MAKE_UINT64_T(0xFFFFFFFF, 0xFFFFFF) >> shift)); - const uint8_t* ip_end = input + block_size; - - int last_distance = -1; - const size_t kInputMarginBytes = 16; - const size_t kMinMatchLen = 5; - if (PREDICT_TRUE(block_size >= kInputMarginBytes)) { - // For the last block, we need to keep a 16 bytes margin so that we can be - // sure that all distances are at most window size - 16. - // For all other blocks, we only need to keep a margin of 5 bytes so that - // we don't go over the block size with a copy. - const size_t len_limit = std::min(block_size - kMinMatchLen, - input_size - kInputMarginBytes); - const uint8_t* ip_limit = input + len_limit; - - for (uint32_t next_hash = Hash(++ip, shift); ; ) { - assert(next_emit < ip); - // Step 1: Scan forward in the input looking for a 5-byte-long match. - // If we get close to exhausting the input then goto emit_remainder. - // - // Heuristic match skipping: If 32 bytes are scanned with no matches - // found, start looking only at every other byte. If 32 more bytes are - // scanned, look at every third byte, etc.. When a match is found, - // immediately go back to looking at every byte. This is a small loss - // (~5% performance, ~0.1% density) for compressible data due to more - // bookkeeping, but for non-compressible data (such as JPEG) it's a huge - // win since the compressor quickly "realizes" the data is incompressible - // and doesn't bother looking for matches everywhere. - // - // The "skip" variable keeps track of how many bytes there are since the - // last match; dividing it by 32 (ie. right-shifting by five) gives the - // number of bytes to move ahead for each iteration. - uint32_t skip = 32; - - const uint8_t* next_ip = ip; - const uint8_t* candidate; - do { - ip = next_ip; - uint32_t hash = next_hash; - assert(hash == Hash(ip, shift)); - uint32_t bytes_between_hash_lookups = skip++ >> 5; - next_ip = ip + bytes_between_hash_lookups; - if (PREDICT_FALSE(next_ip > ip_limit)) { - goto emit_remainder; - } - next_hash = Hash(next_ip, shift); - candidate = ip - last_distance; - if (IsMatch(ip, candidate)) { - if (PREDICT_TRUE(candidate < ip)) { - table[hash] = static_cast<int>(ip - base_ip); - break; - } - } - candidate = base_ip + table[hash]; - assert(candidate >= base_ip); - assert(candidate < ip); - - table[hash] = static_cast<int>(ip - base_ip); - } while (PREDICT_TRUE(!IsMatch(ip, candidate))); - - // Step 2: Emit the found match together with the literal bytes from - // "next_emit" to the bit stream, and then see if we can find a next macth - // immediately afterwards. Repeat until we find no match for the input - // without emitting some literal bytes. - uint64_t input_bytes; - - { - // We have a 5-byte match at ip, and we need to emit bytes in - // [next_emit, ip). - const uint8_t* base = ip; - size_t matched = 5 + FindMatchLengthWithLimit( - candidate + 5, ip + 5, static_cast<size_t>(ip_end - ip) - 5); - ip += matched; - int distance = static_cast<int>(base - candidate); /* > 0 */ - size_t insert = static_cast<size_t>(base - next_emit); - assert(0 == memcmp(base, candidate, matched)); - if (PREDICT_TRUE(insert < 6210)) { - EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert, - lit_depth)) { - EmitUncompressedMetaBlock(metablock_start, base, mlen_storage_ix - 3, - storage_ix, storage); - input_size -= static_cast<size_t>(base - input); - input = base; - next_emit = input; - goto next_block; - } else { - EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - } - EmitLiterals(next_emit, insert, lit_depth, lit_bits, - storage_ix, storage); - if (distance == last_distance) { - WriteBits(cmd_depth[64], cmd_bits[64], storage_ix, storage); - ++cmd_histo[64]; - } else { - EmitDistance(static_cast<size_t>(distance), cmd_depth, cmd_bits, - cmd_histo, storage_ix, storage); - last_distance = distance; - } - EmitCopyLenLastDistance(matched, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - - next_emit = ip; - if (PREDICT_FALSE(ip >= ip_limit)) { - goto emit_remainder; - } - // We could immediately start working at ip now, but to improve - // compression we first update "table" with the hashes of some positions - // within the last copy. - input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 3); - uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 3); - prev_hash = HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 2); - prev_hash = HashBytesAtOffset(input_bytes, 2, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 1); - - uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift); - candidate = base_ip + table[cur_hash]; - table[cur_hash] = static_cast<int>(ip - base_ip); - } - - while (IsMatch(ip, candidate)) { - // We have a 5-byte match at ip, and no need to emit any literal bytes - // prior to ip. - const uint8_t* base = ip; - size_t matched = 5 + FindMatchLengthWithLimit( - candidate + 5, ip + 5, static_cast<size_t>(ip_end - ip) - 5); - ip += matched; - last_distance = static_cast<int>(base - candidate); /* > 0 */ - assert(0 == memcmp(base, candidate, matched)); - EmitCopyLen(matched, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - EmitDistance(static_cast<size_t>(last_distance), cmd_depth, cmd_bits, - cmd_histo, storage_ix, storage); - - next_emit = ip; - if (PREDICT_FALSE(ip >= ip_limit)) { - goto emit_remainder; - } - // We could immediately start working at ip now, but to improve - // compression we first update "table" with the hashes of some positions - // within the last copy. - input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 3); - uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 3); - prev_hash = HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 2); - prev_hash = HashBytesAtOffset(input_bytes, 2, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 1); - - uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift); - candidate = base_ip + table[cur_hash]; - table[cur_hash] = static_cast<int>(ip - base_ip); - } - - next_hash = Hash(++ip, shift); - } - } - - emit_remainder: - assert(next_emit <= ip_end); - input += block_size; - input_size -= block_size; - block_size = std::min(input_size, kMergeBlockSize); - - // Decide if we want to continue this meta-block instead of emitting the - // last insert-only command. - if (input_size > 0 && - total_block_size + block_size <= (1 << 20) && - ShouldMergeBlock(input, block_size, lit_depth)) { - assert(total_block_size > (1 << 16)); - // Update the size of the current meta-block and continue emitting commands. - // We can do this because the current size and the new size both have 5 - // nibbles. - total_block_size += block_size; - UpdateBits(20, static_cast<uint32_t>(total_block_size - 1), - mlen_storage_ix, storage); - goto emit_commands; - } - - // Emit the remaining bytes as literals. - if (next_emit < ip_end) { - const size_t insert = static_cast<size_t>(ip_end - next_emit); - if (PREDICT_TRUE(insert < 6210)) { - EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - EmitLiterals(next_emit, insert, lit_depth, lit_bits, storage_ix, storage); - } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert, - lit_depth)) { - EmitUncompressedMetaBlock(metablock_start, ip_end, mlen_storage_ix - 3, - storage_ix, storage); - } else { - EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - EmitLiterals(next_emit, insert, lit_depth, lit_bits, - storage_ix, storage); - } - } - next_emit = ip_end; - -next_block: - // If we have more data, write a new meta-block header and prefix codes and - // then continue emitting commands. - if (input_size > 0) { - metablock_start = input; - block_size = std::min(input_size, kFirstBlockSize); - total_block_size = block_size; - // Save the bit position of the MLEN field of the meta-block header, so that - // we can update it later if we decide to extend this meta-block. - mlen_storage_ix = *storage_ix + 3; - StoreMetaBlockHeader(block_size, 0, storage_ix, storage); - // No block splits, no contexts. - WriteBits(13, 0, storage_ix, storage); - memset(lit_depth, 0, sizeof(lit_depth)); - memset(lit_bits, 0, sizeof(lit_bits)); - BuildAndStoreLiteralPrefixCode(input, block_size, lit_depth, lit_bits, - storage_ix, storage); - BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits, - storage_ix, storage); - goto emit_commands; - } - - if (is_last) { - WriteBits(1, 1, storage_ix, storage); // islast - WriteBits(1, 1, storage_ix, storage); // isempty - *storage_ix = (*storage_ix + 7u) & ~7u; - } else { - // If this is not the last block, update the command and distance prefix - // codes for the next block and store the compressed forms. - cmd_code[0] = 0; - *cmd_code_numbits = 0; - BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits, - cmd_code_numbits, cmd_code); - } -} - -} // namespace brotli diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compress_fragment.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compress_fragment.h deleted file mode 100644 index 7ce05fdfb2a..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compress_fragment.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Function for fast encoding of an input fragment, independently from the input -// history. This function uses one-pass processing: when we find a backward -// match, we immediately emit the corresponding command and literal codes to -// the bit stream. - -#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_H_ -#define BROTLI_ENC_COMPRESS_FRAGMENT_H_ - -#include "./types.h" - -namespace brotli { - -// Compresses "input" string to the "*storage" buffer as one or more complete -// meta-blocks, and updates the "*storage_ix" bit position. -// -// If "is_last" is true, emits an additional empty last meta-block. -// -// "cmd_depth" and "cmd_bits" contain the command and distance prefix codes -// (see comment in encode.h) used for the encoding of this input fragment. -// If "is_last" is false, they are updated to reflect the statistics -// of this input fragment, to be used for the encoding of the next fragment. -// -// "*cmd_code_numbits" is the number of bits of the compressed representation -// of the command and distance prefix codes, and "cmd_code" is an array of -// at least "(*cmd_code_numbits + 7) >> 3" size that contains the compressed -// command and distance prefix codes. If "is_last" is false, these are also -// updated to represent the updated "cmd_depth" and "cmd_bits". -// -// REQUIRES: "input_size" is greater than zero, or "is_last" is true. -// REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. -// REQUIRES: "table_size" is a power of two -void BrotliCompressFragmentFast(const uint8_t* input, size_t input_size, - bool is_last, - int* table, size_t table_size, - uint8_t cmd_depth[128], uint16_t cmd_bits[128], - size_t* cmd_code_numbits, uint8_t* cmd_code, - size_t* storage_ix, uint8_t* storage); - -} // namespace brotli - -#endif // BROTLI_ENC_COMPRESS_FRAGMENT_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compress_fragment_two_pass.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compress_fragment_two_pass.cc deleted file mode 100644 index a032740d655..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compress_fragment_two_pass.cc +++ /dev/null @@ -1,524 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Function for fast encoding of an input fragment, independently from the input -// history. This function uses two-pass processing: in the first pass we save -// the found backward matches and literal bytes into a buffer, and in the -// second pass we emit them into the bit stream using prefix codes built based -// on the actual command and literal byte histograms. - -#include "./compress_fragment_two_pass.h" - -#include <algorithm> - -#include "./brotli_bit_stream.h" -#include "./bit_cost.h" -#include "./entropy_encode.h" -#include "./fast_log.h" -#include "./find_match_length.h" -#include "./port.h" -#include "./types.h" -#include "./write_bits.h" - -namespace brotli { - -// kHashMul32 multiplier has these properties: -// * The multiplier must be odd. Otherwise we may lose the highest bit. -// * No long streaks of 1s or 0s. -// * There is no effort to ensure that it is a prime, the oddity is enough -// for this use. -// * The number has been tuned heuristically against compression benchmarks. -static const uint32_t kHashMul32 = 0x1e35a7bd; - -static inline uint32_t Hash(const uint8_t* p, size_t shift) { - const uint64_t h = (BROTLI_UNALIGNED_LOAD64(p) << 16) * kHashMul32; - return static_cast<uint32_t>(h >> shift); -} - -static inline uint32_t HashBytesAtOffset(uint64_t v, int offset, size_t shift) { - assert(offset >= 0); - assert(offset <= 2); - const uint64_t h = ((v >> (8 * offset)) << 16) * kHashMul32; - return static_cast<uint32_t>(h >> shift); -} - -static inline int IsMatch(const uint8_t* p1, const uint8_t* p2) { - return (BROTLI_UNALIGNED_LOAD32(p1) == BROTLI_UNALIGNED_LOAD32(p2) && - p1[4] == p2[4] && - p1[5] == p2[5]); -} - -// Builds a command and distance prefix code (each 64 symbols) into "depth" and -// "bits" based on "histogram" and stores it into the bit stream. -static void BuildAndStoreCommandPrefixCode( - const uint32_t histogram[128], - uint8_t depth[128], uint16_t bits[128], - size_t* storage_ix, uint8_t* storage) { - // Tree size for building a tree over 64 symbols is 2 * 64 + 1. - static const size_t kTreeSize = 129; - HuffmanTree tree[kTreeSize]; - CreateHuffmanTree(histogram, 64, 15, tree, depth); - CreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]); - // We have to jump through a few hoopes here in order to compute - // the command bits because the symbols are in a different order than in - // the full alphabet. This looks complicated, but having the symbols - // in this order in the command bits saves a few branches in the Emit* - // functions. - uint8_t cmd_depth[64]; - uint16_t cmd_bits[64]; - memcpy(cmd_depth, depth + 24, 24); - memcpy(cmd_depth + 24, depth, 8); - memcpy(cmd_depth + 32, depth + 48, 8); - memcpy(cmd_depth + 40, depth + 8, 8); - memcpy(cmd_depth + 48, depth + 56, 8); - memcpy(cmd_depth + 56, depth + 16, 8); - ConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits); - memcpy(bits, cmd_bits + 24, 16); - memcpy(bits + 8, cmd_bits + 40, 16); - memcpy(bits + 16, cmd_bits + 56, 16); - memcpy(bits + 24, cmd_bits, 48); - memcpy(bits + 48, cmd_bits + 32, 16); - memcpy(bits + 56, cmd_bits + 48, 16); - ConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]); - { - // Create the bit length array for the full command alphabet. - uint8_t cmd_depth[704] = { 0 }; - memcpy(cmd_depth, depth + 24, 8); - memcpy(cmd_depth + 64, depth + 32, 8); - memcpy(cmd_depth + 128, depth + 40, 8); - memcpy(cmd_depth + 192, depth + 48, 8); - memcpy(cmd_depth + 384, depth + 56, 8); - for (size_t i = 0; i < 8; ++i) { - cmd_depth[128 + 8 * i] = depth[i]; - cmd_depth[256 + 8 * i] = depth[8 + i]; - cmd_depth[448 + 8 * i] = depth[16 + i]; - } - StoreHuffmanTree(cmd_depth, 704, tree, storage_ix, storage); - } - StoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage); -} - -inline void EmitInsertLen(uint32_t insertlen, uint32_t** commands) { - if (insertlen < 6) { - **commands = insertlen; - } else if (insertlen < 130) { - insertlen -= 2; - const uint32_t nbits = Log2FloorNonZero(insertlen) - 1u; - const uint32_t prefix = insertlen >> nbits; - const uint32_t inscode = (nbits << 1) + prefix + 2; - const uint32_t extra = insertlen - (prefix << nbits); - **commands = inscode | (extra << 8); - } else if (insertlen < 2114) { - insertlen -= 66; - const uint32_t nbits = Log2FloorNonZero(insertlen); - const uint32_t code = nbits + 10; - const uint32_t extra = insertlen - (1 << nbits); - **commands = code | (extra << 8); - } else if (insertlen < 6210) { - const uint32_t extra = insertlen - 2114; - **commands = 21 | (extra << 8); - } else if (insertlen < 22594) { - const uint32_t extra = insertlen - 6210; - **commands = 22 | (extra << 8); - } else { - const uint32_t extra = insertlen - 22594; - **commands = 23 | (extra << 8); - } - ++(*commands); -} - -inline void EmitCopyLen(size_t copylen, uint32_t** commands) { - if (copylen < 10) { - **commands = static_cast<uint32_t>(copylen + 38); - } else if (copylen < 134) { - copylen -= 6; - const size_t nbits = Log2FloorNonZero(copylen) - 1; - const size_t prefix = copylen >> nbits; - const size_t code = (nbits << 1) + prefix + 44; - const size_t extra = copylen - (prefix << nbits); - **commands = static_cast<uint32_t>(code | (extra << 8)); - } else if (copylen < 2118) { - copylen -= 70; - const size_t nbits = Log2FloorNonZero(copylen); - const size_t code = nbits + 52; - const size_t extra = copylen - (1 << nbits); - **commands = static_cast<uint32_t>(code | (extra << 8)); - } else { - const size_t extra = copylen - 2118; - **commands = static_cast<uint32_t>(63 | (extra << 8)); - } - ++(*commands); -} - -inline void EmitCopyLenLastDistance(size_t copylen, uint32_t** commands) { - if (copylen < 12) { - **commands = static_cast<uint32_t>(copylen + 20); - ++(*commands); - } else if (copylen < 72) { - copylen -= 8; - const size_t nbits = Log2FloorNonZero(copylen) - 1; - const size_t prefix = copylen >> nbits; - const size_t code = (nbits << 1) + prefix + 28; - const size_t extra = copylen - (prefix << nbits); - **commands = static_cast<uint32_t>(code | (extra << 8)); - ++(*commands); - } else if (copylen < 136) { - copylen -= 8; - const size_t code = (copylen >> 5) + 54; - const size_t extra = copylen & 31; - **commands = static_cast<uint32_t>(code | (extra << 8)); - ++(*commands); - **commands = 64; - ++(*commands); - } else if (copylen < 2120) { - copylen -= 72; - const size_t nbits = Log2FloorNonZero(copylen); - const size_t code = nbits + 52; - const size_t extra = copylen - (1 << nbits); - **commands = static_cast<uint32_t>(code | (extra << 8)); - ++(*commands); - **commands = 64; - ++(*commands); - } else { - const size_t extra = copylen - 2120; - **commands = static_cast<uint32_t>(63 | (extra << 8)); - ++(*commands); - **commands = 64; - ++(*commands); - } -} - -inline void EmitDistance(uint32_t distance, uint32_t** commands) { - distance += 3; - uint32_t nbits = Log2FloorNonZero(distance) - 1; - const uint32_t prefix = (distance >> nbits) & 1; - const uint32_t offset = (2 + prefix) << nbits; - const uint32_t distcode = 2 * (nbits - 1) + prefix + 80; - uint32_t extra = distance - offset; - **commands = distcode | (extra << 8); - ++(*commands); -} - -// REQUIRES: len <= 1 << 20. -static void StoreMetaBlockHeader( - size_t len, bool is_uncompressed, size_t* storage_ix, uint8_t* storage) { - // ISLAST - WriteBits(1, 0, storage_ix, storage); - if (len <= (1U << 16)) { - // MNIBBLES is 4 - WriteBits(2, 0, storage_ix, storage); - WriteBits(16, len - 1, storage_ix, storage); - } else { - // MNIBBLES is 5 - WriteBits(2, 1, storage_ix, storage); - WriteBits(20, len - 1, storage_ix, storage); - } - // ISUNCOMPRESSED - WriteBits(1, is_uncompressed, storage_ix, storage); -} - -static void CreateCommands(const uint8_t* input, size_t block_size, - size_t input_size, const uint8_t* base_ip, - int* table, size_t table_size, - uint8_t** literals, uint32_t** commands) { - // "ip" is the input pointer. - const uint8_t* ip = input; - assert(table_size); - assert(table_size <= (1u << 31)); - assert((table_size & (table_size - 1)) == 0); // table must be power of two - const size_t shift = 64u - Log2FloorNonZero(table_size); - assert(table_size - 1 == static_cast<size_t>( - MAKE_UINT64_T(0xFFFFFFFF, 0xFFFFFF) >> shift)); - const uint8_t* ip_end = input + block_size; - // "next_emit" is a pointer to the first byte that is not covered by a - // previous copy. Bytes between "next_emit" and the start of the next copy or - // the end of the input will be emitted as literal bytes. - const uint8_t* next_emit = input; - - int last_distance = -1; - const size_t kInputMarginBytes = 16; - const size_t kMinMatchLen = 6; - if (PREDICT_TRUE(block_size >= kInputMarginBytes)) { - // For the last block, we need to keep a 16 bytes margin so that we can be - // sure that all distances are at most window size - 16. - // For all other blocks, we only need to keep a margin of 5 bytes so that - // we don't go over the block size with a copy. - const size_t len_limit = std::min(block_size - kMinMatchLen, - input_size - kInputMarginBytes); - const uint8_t* ip_limit = input + len_limit; - - for (uint32_t next_hash = Hash(++ip, shift); ; ) { - assert(next_emit < ip); - // Step 1: Scan forward in the input looking for a 6-byte-long match. - // If we get close to exhausting the input then goto emit_remainder. - // - // Heuristic match skipping: If 32 bytes are scanned with no matches - // found, start looking only at every other byte. If 32 more bytes are - // scanned, look at every third byte, etc.. When a match is found, - // immediately go back to looking at every byte. This is a small loss - // (~5% performance, ~0.1% density) for compressible data due to more - // bookkeeping, but for non-compressible data (such as JPEG) it's a huge - // win since the compressor quickly "realizes" the data is incompressible - // and doesn't bother looking for matches everywhere. - // - // The "skip" variable keeps track of how many bytes there are since the - // last match; dividing it by 32 (ie. right-shifting by five) gives the - // number of bytes to move ahead for each iteration. - uint32_t skip = 32; - - const uint8_t* next_ip = ip; - const uint8_t* candidate; - do { - ip = next_ip; - uint32_t hash = next_hash; - assert(hash == Hash(ip, shift)); - uint32_t bytes_between_hash_lookups = skip++ >> 5; - next_ip = ip + bytes_between_hash_lookups; - if (PREDICT_FALSE(next_ip > ip_limit)) { - goto emit_remainder; - } - next_hash = Hash(next_ip, shift); - candidate = ip - last_distance; - if (IsMatch(ip, candidate)) { - if (PREDICT_TRUE(candidate < ip)) { - table[hash] = static_cast<int>(ip - base_ip); - break; - } - } - candidate = base_ip + table[hash]; - assert(candidate >= base_ip); - assert(candidate < ip); - - table[hash] = static_cast<int>(ip - base_ip); - } while (PREDICT_TRUE(!IsMatch(ip, candidate))); - - // Step 2: Emit the found match together with the literal bytes from - // "next_emit", and then see if we can find a next macth immediately - // afterwards. Repeat until we find no match for the input - // without emitting some literal bytes. - uint64_t input_bytes; - - { - // We have a 6-byte match at ip, and we need to emit bytes in - // [next_emit, ip). - const uint8_t* base = ip; - size_t matched = 6 + FindMatchLengthWithLimit( - candidate + 6, ip + 6, static_cast<size_t>(ip_end - ip) - 6); - ip += matched; - int distance = static_cast<int>(base - candidate); /* > 0 */ - int insert = static_cast<int>(base - next_emit); - assert(0 == memcmp(base, candidate, matched)); - EmitInsertLen(static_cast<uint32_t>(insert), commands); - memcpy(*literals, next_emit, static_cast<size_t>(insert)); - *literals += insert; - if (distance == last_distance) { - **commands = 64; - ++(*commands); - } else { - EmitDistance(static_cast<uint32_t>(distance), commands); - last_distance = distance; - } - EmitCopyLenLastDistance(matched, commands); - - next_emit = ip; - if (PREDICT_FALSE(ip >= ip_limit)) { - goto emit_remainder; - } - // We could immediately start working at ip now, but to improve - // compression we first update "table" with the hashes of some positions - // within the last copy. - input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 5); - uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 5); - prev_hash = HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 4); - prev_hash = HashBytesAtOffset(input_bytes, 2, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 3); - input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 2); - prev_hash = HashBytesAtOffset(input_bytes, 0, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 2); - prev_hash = HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 1); - - uint32_t cur_hash = HashBytesAtOffset(input_bytes, 2, shift); - candidate = base_ip + table[cur_hash]; - table[cur_hash] = static_cast<int>(ip - base_ip); - } - - while (IsMatch(ip, candidate)) { - // We have a 6-byte match at ip, and no need to emit any - // literal bytes prior to ip. - const uint8_t* base = ip; - size_t matched = 6 + FindMatchLengthWithLimit( - candidate + 6, ip + 6, static_cast<size_t>(ip_end - ip) - 6); - ip += matched; - last_distance = static_cast<int>(base - candidate); /* > 0 */ - assert(0 == memcmp(base, candidate, matched)); - EmitCopyLen(matched, commands); - EmitDistance(static_cast<uint32_t>(last_distance), commands); - - next_emit = ip; - if (PREDICT_FALSE(ip >= ip_limit)) { - goto emit_remainder; - } - // We could immediately start working at ip now, but to improve - // compression we first update "table" with the hashes of some positions - // within the last copy. - input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 5); - uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 5); - prev_hash = HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 4); - prev_hash = HashBytesAtOffset(input_bytes, 2, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 3); - input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 2); - prev_hash = HashBytesAtOffset(input_bytes, 0, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 2); - prev_hash = HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 1); - - uint32_t cur_hash = HashBytesAtOffset(input_bytes, 2, shift); - candidate = base_ip + table[cur_hash]; - table[cur_hash] = static_cast<int>(ip - base_ip); - } - - next_hash = Hash(++ip, shift); - } - } - -emit_remainder: - assert(next_emit <= ip_end); - // Emit the remaining bytes as literals. - if (next_emit < ip_end) { - const uint32_t insert = static_cast<uint32_t>(ip_end - next_emit); - EmitInsertLen(insert, commands); - memcpy(*literals, next_emit, insert); - *literals += insert; - } -} - -static void StoreCommands(const uint8_t* literals, const size_t num_literals, - const uint32_t* commands, const size_t num_commands, - size_t* storage_ix, uint8_t* storage) { - uint8_t lit_depths[256] = { 0 }; - uint16_t lit_bits[256] = { 0 }; - uint32_t lit_histo[256] = { 0 }; - for (size_t i = 0; i < num_literals; ++i) { - ++lit_histo[literals[i]]; - } - BuildAndStoreHuffmanTreeFast(lit_histo, num_literals, - /* max_bits = */ 8, - lit_depths, lit_bits, - storage_ix, storage); - - uint8_t cmd_depths[128] = { 0 }; - uint16_t cmd_bits[128] = { 0 }; - uint32_t cmd_histo[128] = { 0 }; - for (size_t i = 0; i < num_commands; ++i) { - ++cmd_histo[commands[i] & 0xff]; - } - cmd_histo[1] += 1; - cmd_histo[2] += 1; - cmd_histo[64] += 1; - cmd_histo[84] += 1; - BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depths, cmd_bits, - storage_ix, storage); - - static const uint32_t kNumExtraBits[128] = { - 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, - 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, - 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, - }; - static const uint32_t kInsertOffset[24] = { - 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322, 578, - 1090, 2114, 6210, 22594, - }; - - for (size_t i = 0; i < num_commands; ++i) { - const uint32_t cmd = commands[i]; - const uint32_t code = cmd & 0xff; - const uint32_t extra = cmd >> 8; - WriteBits(cmd_depths[code], cmd_bits[code], storage_ix, storage); - WriteBits(kNumExtraBits[code], extra, storage_ix, storage); - if (code < 24) { - const uint32_t insert = kInsertOffset[code] + extra; - for (uint32_t j = 0; j < insert; ++j) { - const uint8_t lit = *literals; - WriteBits(lit_depths[lit], lit_bits[lit], storage_ix, storage); - ++literals; - } - } - } -} - -static bool ShouldCompress(const uint8_t* input, size_t input_size, - size_t num_literals) { - static const double kAcceptableLossForUncompressibleSpeedup = 0.02; - static const double kMaxRatioOfLiterals = - 1.0 - kAcceptableLossForUncompressibleSpeedup; - if (num_literals < kMaxRatioOfLiterals * static_cast<double>(input_size)) { - return true; - } - uint32_t literal_histo[256] = { 0 }; - static const uint32_t kSampleRate = 43; - static const double kMaxEntropy = - 8 * (1.0 - kAcceptableLossForUncompressibleSpeedup); - const double max_total_bit_cost = - static_cast<double>(input_size) * kMaxEntropy / kSampleRate; - for (size_t i = 0; i < input_size; i += kSampleRate) { - ++literal_histo[input[i]]; - } - return BitsEntropy(literal_histo, 256) < max_total_bit_cost; -} - -void BrotliCompressFragmentTwoPass(const uint8_t* input, size_t input_size, - bool is_last, - uint32_t* command_buf, uint8_t* literal_buf, - int* table, size_t table_size, - size_t* storage_ix, uint8_t* storage) { - // Save the start of the first block for position and distance computations. - const uint8_t* base_ip = input; - - while (input_size > 0) { - size_t block_size = std::min(input_size, kCompressFragmentTwoPassBlockSize); - uint32_t* commands = command_buf; - uint8_t* literals = literal_buf; - CreateCommands(input, block_size, input_size, base_ip, table, table_size, - &literals, &commands); - const size_t num_literals = static_cast<size_t>(literals - literal_buf); - const size_t num_commands = static_cast<size_t>(commands - command_buf); - if (ShouldCompress(input, block_size, num_literals)) { - StoreMetaBlockHeader(block_size, 0, storage_ix, storage); - // No block splits, no contexts. - WriteBits(13, 0, storage_ix, storage); - StoreCommands(literal_buf, num_literals, command_buf, num_commands, - storage_ix, storage); - } else { - // Since we did not find many backward references and the entropy of - // the data is close to 8 bits, we can simply emit an uncompressed block. - // This makes compression speed of uncompressible data about 3x faster. - StoreMetaBlockHeader(block_size, 1, storage_ix, storage); - *storage_ix = (*storage_ix + 7u) & ~7u; - memcpy(&storage[*storage_ix >> 3], input, block_size); - *storage_ix += block_size << 3; - storage[*storage_ix >> 3] = 0; - } - input += block_size; - input_size -= block_size; - } - - if (is_last) { - WriteBits(1, 1, storage_ix, storage); // islast - WriteBits(1, 1, storage_ix, storage); // isempty - *storage_ix = (*storage_ix + 7u) & ~7u; - } -} - -} // namespace brotli diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compress_fragment_two_pass.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compress_fragment_two_pass.h deleted file mode 100644 index 690ed081ec6..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compress_fragment_two_pass.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Function for fast encoding of an input fragment, independently from the input -// history. This function uses two-pass processing: in the first pass we save -// the found backward matches and literal bytes into a buffer, and in the -// second pass we emit them into the bit stream using prefix codes built based -// on the actual command and literal byte histograms. - -#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ -#define BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ - -#include "./types.h" - -namespace brotli { - -static const size_t kCompressFragmentTwoPassBlockSize = 1 << 17; - -// Compresses "input" string to the "*storage" buffer as one or more complete -// meta-blocks, and updates the "*storage_ix" bit position. -// -// If "is_last" is true, emits an additional empty last meta-block. -// -// REQUIRES: "input_size" is greater than zero, or "is_last" is true. -// REQUIRES: "command_buf" and "literal_buf" point to at least -// kCompressFragmentTwoPassBlockSize long arrays. -// REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. -// REQUIRES: "table_size" is a power of two -void BrotliCompressFragmentTwoPass(const uint8_t* input, size_t input_size, - bool is_last, - uint32_t* command_buf, uint8_t* literal_buf, - int* table, size_t table_size, - size_t* storage_ix, uint8_t* storage); - -} // namespace brotli - -#endif // BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compressor.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compressor.h deleted file mode 100644 index 1dfc42e889d..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/compressor.h +++ /dev/null @@ -1,15 +0,0 @@ -/* Copyright 2016 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -/* C++ API for Brotli compression. */ - -#ifndef BROTLI_ENC_COMPRESSOR_H_ -#define BROTLI_ENC_COMPRESSOR_H_ - -#include "./encode.h" -#include "./streams.h" - -#endif /* BROTLI_ENC_COMPRESSOR_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/dictionary.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/dictionary.cc deleted file mode 100644 index 0564bab6aba..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/dictionary.cc +++ /dev/null @@ -1,9466 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -#include "./dictionary.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -// In case of multiple definition linker error with dictionary.c from the -// decoder: include only one of enc/dictionary.cc or dec/dictionary.c in a -// target using both enc and dec. -const uint8_t kBrotliDictionary[122784] = { - 0x74, 0x69, 0x6d, 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x66, 0x65, 0x6c, - 0x65, 0x66, 0x74, 0x62, 0x61, 0x63, 0x6b, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x61, - 0x74, 0x61, 0x73, 0x68, 0x6f, 0x77, 0x6f, 0x6e, 0x6c, 0x79, 0x73, 0x69, 0x74, - 0x65, 0x63, 0x69, 0x74, 0x79, 0x6f, 0x70, 0x65, 0x6e, 0x6a, 0x75, 0x73, 0x74, - 0x6c, 0x69, 0x6b, 0x65, 0x66, 0x72, 0x65, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x74, - 0x65, 0x78, 0x74, 0x79, 0x65, 0x61, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x62, 0x6f, - 0x64, 0x79, 0x6c, 0x6f, 0x76, 0x65, 0x66, 0x6f, 0x72, 0x6d, 0x62, 0x6f, 0x6f, - 0x6b, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x76, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x68, 0x65, 0x6c, 0x70, 0x68, 0x6f, 0x6d, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6d, - 0x6f, 0x72, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x6f, 0x6e, 0x67, 0x74, 0x68, - 0x65, 0x6d, 0x76, 0x69, 0x65, 0x77, 0x66, 0x69, 0x6e, 0x64, 0x70, 0x61, 0x67, - 0x65, 0x64, 0x61, 0x79, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x68, 0x65, 0x61, 0x64, - 0x74, 0x65, 0x72, 0x6d, 0x65, 0x61, 0x63, 0x68, 0x61, 0x72, 0x65, 0x61, 0x66, - 0x72, 0x6f, 0x6d, 0x74, 0x72, 0x75, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x61, 0x62, - 0x6c, 0x65, 0x75, 0x70, 0x6f, 0x6e, 0x68, 0x69, 0x67, 0x68, 0x64, 0x61, 0x74, - 0x65, 0x6c, 0x61, 0x6e, 0x64, 0x6e, 0x65, 0x77, 0x73, 0x65, 0x76, 0x65, 0x6e, - 0x6e, 0x65, 0x78, 0x74, 0x63, 0x61, 0x73, 0x65, 0x62, 0x6f, 0x74, 0x68, 0x70, - 0x6f, 0x73, 0x74, 0x75, 0x73, 0x65, 0x64, 0x6d, 0x61, 0x64, 0x65, 0x68, 0x61, - 0x6e, 0x64, 0x68, 0x65, 0x72, 0x65, 0x77, 0x68, 0x61, 0x74, 0x6e, 0x61, 0x6d, - 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x62, 0x6c, 0x6f, 0x67, 0x73, 0x69, 0x7a, 0x65, - 0x62, 0x61, 0x73, 0x65, 0x68, 0x65, 0x6c, 0x64, 0x6d, 0x61, 0x6b, 0x65, 0x6d, - 0x61, 0x69, 0x6e, 0x75, 0x73, 0x65, 0x72, 0x27, 0x29, 0x20, 0x2b, 0x68, 0x6f, - 0x6c, 0x64, 0x65, 0x6e, 0x64, 0x73, 0x77, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x77, - 0x73, 0x72, 0x65, 0x61, 0x64, 0x77, 0x65, 0x72, 0x65, 0x73, 0x69, 0x67, 0x6e, - 0x74, 0x61, 0x6b, 0x65, 0x68, 0x61, 0x76, 0x65, 0x67, 0x61, 0x6d, 0x65, 0x73, - 0x65, 0x65, 0x6e, 0x63, 0x61, 0x6c, 0x6c, 0x70, 0x61, 0x74, 0x68, 0x77, 0x65, - 0x6c, 0x6c, 0x70, 0x6c, 0x75, 0x73, 0x6d, 0x65, 0x6e, 0x75, 0x66, 0x69, 0x6c, - 0x6d, 0x70, 0x61, 0x72, 0x74, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x68, 0x69, 0x73, - 0x6c, 0x69, 0x73, 0x74, 0x67, 0x6f, 0x6f, 0x64, 0x6e, 0x65, 0x65, 0x64, 0x77, - 0x61, 0x79, 0x73, 0x77, 0x65, 0x73, 0x74, 0x6a, 0x6f, 0x62, 0x73, 0x6d, 0x69, - 0x6e, 0x64, 0x61, 0x6c, 0x73, 0x6f, 0x6c, 0x6f, 0x67, 0x6f, 0x72, 0x69, 0x63, - 0x68, 0x75, 0x73, 0x65, 0x73, 0x6c, 0x61, 0x73, 0x74, 0x74, 0x65, 0x61, 0x6d, - 0x61, 0x72, 0x6d, 0x79, 0x66, 0x6f, 0x6f, 0x64, 0x6b, 0x69, 0x6e, 0x67, 0x77, - 0x69, 0x6c, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x77, 0x61, 0x72, 0x64, 0x62, 0x65, - 0x73, 0x74, 0x66, 0x69, 0x72, 0x65, 0x50, 0x61, 0x67, 0x65, 0x6b, 0x6e, 0x6f, - 0x77, 0x61, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x6e, 0x67, 0x6d, 0x6f, 0x76, 0x65, - 0x74, 0x68, 0x61, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x67, 0x69, 0x76, 0x65, 0x73, - 0x65, 0x6c, 0x66, 0x6e, 0x6f, 0x74, 0x65, 0x6d, 0x75, 0x63, 0x68, 0x66, 0x65, - 0x65, 0x64, 0x6d, 0x61, 0x6e, 0x79, 0x72, 0x6f, 0x63, 0x6b, 0x69, 0x63, 0x6f, - 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x6c, 0x6f, 0x6f, 0x6b, 0x68, 0x69, 0x64, 0x65, - 0x64, 0x69, 0x65, 0x64, 0x48, 0x6f, 0x6d, 0x65, 0x72, 0x75, 0x6c, 0x65, 0x68, - 0x6f, 0x73, 0x74, 0x61, 0x6a, 0x61, 0x78, 0x69, 0x6e, 0x66, 0x6f, 0x63, 0x6c, - 0x75, 0x62, 0x6c, 0x61, 0x77, 0x73, 0x6c, 0x65, 0x73, 0x73, 0x68, 0x61, 0x6c, - 0x66, 0x73, 0x6f, 0x6d, 0x65, 0x73, 0x75, 0x63, 0x68, 0x7a, 0x6f, 0x6e, 0x65, - 0x31, 0x30, 0x30, 0x25, 0x6f, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x72, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x72, 0x61, 0x63, 0x65, 0x62, 0x6c, 0x75, 0x65, 0x66, 0x6f, - 0x75, 0x72, 0x77, 0x65, 0x65, 0x6b, 0x66, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x70, - 0x65, 0x67, 0x61, 0x76, 0x65, 0x68, 0x61, 0x72, 0x64, 0x6c, 0x6f, 0x73, 0x74, - 0x77, 0x68, 0x65, 0x6e, 0x70, 0x61, 0x72, 0x6b, 0x6b, 0x65, 0x70, 0x74, 0x70, - 0x61, 0x73, 0x73, 0x73, 0x68, 0x69, 0x70, 0x72, 0x6f, 0x6f, 0x6d, 0x48, 0x54, - 0x4d, 0x4c, 0x70, 0x6c, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x64, 0x6f, 0x6e, - 0x65, 0x73, 0x61, 0x76, 0x65, 0x6b, 0x65, 0x65, 0x70, 0x66, 0x6c, 0x61, 0x67, - 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x6f, 0x6c, 0x64, 0x66, 0x69, 0x76, 0x65, 0x74, - 0x6f, 0x6f, 0x6b, 0x72, 0x61, 0x74, 0x65, 0x74, 0x6f, 0x77, 0x6e, 0x6a, 0x75, - 0x6d, 0x70, 0x74, 0x68, 0x75, 0x73, 0x64, 0x61, 0x72, 0x6b, 0x63, 0x61, 0x72, - 0x64, 0x66, 0x69, 0x6c, 0x65, 0x66, 0x65, 0x61, 0x72, 0x73, 0x74, 0x61, 0x79, - 0x6b, 0x69, 0x6c, 0x6c, 0x74, 0x68, 0x61, 0x74, 0x66, 0x61, 0x6c, 0x6c, 0x61, - 0x75, 0x74, 0x6f, 0x65, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x74, 0x61, - 0x6c, 0x6b, 0x73, 0x68, 0x6f, 0x70, 0x76, 0x6f, 0x74, 0x65, 0x64, 0x65, 0x65, - 0x70, 0x6d, 0x6f, 0x64, 0x65, 0x72, 0x65, 0x73, 0x74, 0x74, 0x75, 0x72, 0x6e, - 0x62, 0x6f, 0x72, 0x6e, 0x62, 0x61, 0x6e, 0x64, 0x66, 0x65, 0x6c, 0x6c, 0x72, - 0x6f, 0x73, 0x65, 0x75, 0x72, 0x6c, 0x28, 0x73, 0x6b, 0x69, 0x6e, 0x72, 0x6f, - 0x6c, 0x65, 0x63, 0x6f, 0x6d, 0x65, 0x61, 0x63, 0x74, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x6d, 0x65, 0x65, 0x74, 0x67, 0x6f, 0x6c, 0x64, 0x2e, 0x6a, 0x70, 0x67, - 0x69, 0x74, 0x65, 0x6d, 0x76, 0x61, 0x72, 0x79, 0x66, 0x65, 0x6c, 0x74, 0x74, - 0x68, 0x65, 0x6e, 0x73, 0x65, 0x6e, 0x64, 0x64, 0x72, 0x6f, 0x70, 0x56, 0x69, - 0x65, 0x77, 0x63, 0x6f, 0x70, 0x79, 0x31, 0x2e, 0x30, 0x22, 0x3c, 0x2f, 0x61, - 0x3e, 0x73, 0x74, 0x6f, 0x70, 0x65, 0x6c, 0x73, 0x65, 0x6c, 0x69, 0x65, 0x73, - 0x74, 0x6f, 0x75, 0x72, 0x70, 0x61, 0x63, 0x6b, 0x2e, 0x67, 0x69, 0x66, 0x70, - 0x61, 0x73, 0x74, 0x63, 0x73, 0x73, 0x3f, 0x67, 0x72, 0x61, 0x79, 0x6d, 0x65, - 0x61, 0x6e, 0x26, 0x67, 0x74, 0x3b, 0x72, 0x69, 0x64, 0x65, 0x73, 0x68, 0x6f, - 0x74, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x61, 0x69, 0x64, 0x72, 0x6f, 0x61, 0x64, - 0x76, 0x61, 0x72, 0x20, 0x66, 0x65, 0x65, 0x6c, 0x6a, 0x6f, 0x68, 0x6e, 0x72, - 0x69, 0x63, 0x6b, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x61, 0x73, 0x74, 0x27, 0x55, - 0x41, 0x2d, 0x64, 0x65, 0x61, 0x64, 0x3c, 0x2f, 0x62, 0x3e, 0x70, 0x6f, 0x6f, - 0x72, 0x62, 0x69, 0x6c, 0x6c, 0x74, 0x79, 0x70, 0x65, 0x55, 0x2e, 0x53, 0x2e, - 0x77, 0x6f, 0x6f, 0x64, 0x6d, 0x75, 0x73, 0x74, 0x32, 0x70, 0x78, 0x3b, 0x49, - 0x6e, 0x66, 0x6f, 0x72, 0x61, 0x6e, 0x6b, 0x77, 0x69, 0x64, 0x65, 0x77, 0x61, - 0x6e, 0x74, 0x77, 0x61, 0x6c, 0x6c, 0x6c, 0x65, 0x61, 0x64, 0x5b, 0x30, 0x5d, - 0x3b, 0x70, 0x61, 0x75, 0x6c, 0x77, 0x61, 0x76, 0x65, 0x73, 0x75, 0x72, 0x65, - 0x24, 0x28, 0x27, 0x23, 0x77, 0x61, 0x69, 0x74, 0x6d, 0x61, 0x73, 0x73, 0x61, - 0x72, 0x6d, 0x73, 0x67, 0x6f, 0x65, 0x73, 0x67, 0x61, 0x69, 0x6e, 0x6c, 0x61, - 0x6e, 0x67, 0x70, 0x61, 0x69, 0x64, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x6f, 0x63, - 0x6b, 0x75, 0x6e, 0x69, 0x74, 0x72, 0x6f, 0x6f, 0x74, 0x77, 0x61, 0x6c, 0x6b, - 0x66, 0x69, 0x72, 0x6d, 0x77, 0x69, 0x66, 0x65, 0x78, 0x6d, 0x6c, 0x22, 0x73, - 0x6f, 0x6e, 0x67, 0x74, 0x65, 0x73, 0x74, 0x32, 0x30, 0x70, 0x78, 0x6b, 0x69, - 0x6e, 0x64, 0x72, 0x6f, 0x77, 0x73, 0x74, 0x6f, 0x6f, 0x6c, 0x66, 0x6f, 0x6e, - 0x74, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x61, 0x66, 0x65, 0x73, 0x74, 0x61, 0x72, - 0x6d, 0x61, 0x70, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x61, 0x69, 0x6e, 0x66, - 0x6c, 0x6f, 0x77, 0x62, 0x61, 0x62, 0x79, 0x73, 0x70, 0x61, 0x6e, 0x73, 0x61, - 0x79, 0x73, 0x34, 0x70, 0x78, 0x3b, 0x36, 0x70, 0x78, 0x3b, 0x61, 0x72, 0x74, - 0x73, 0x66, 0x6f, 0x6f, 0x74, 0x72, 0x65, 0x61, 0x6c, 0x77, 0x69, 0x6b, 0x69, - 0x68, 0x65, 0x61, 0x74, 0x73, 0x74, 0x65, 0x70, 0x74, 0x72, 0x69, 0x70, 0x6f, - 0x72, 0x67, 0x2f, 0x6c, 0x61, 0x6b, 0x65, 0x77, 0x65, 0x61, 0x6b, 0x74, 0x6f, - 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x6d, 0x63, 0x61, 0x73, 0x74, 0x66, 0x61, 0x6e, - 0x73, 0x62, 0x61, 0x6e, 0x6b, 0x76, 0x65, 0x72, 0x79, 0x72, 0x75, 0x6e, 0x73, - 0x6a, 0x75, 0x6c, 0x79, 0x74, 0x61, 0x73, 0x6b, 0x31, 0x70, 0x78, 0x3b, 0x67, - 0x6f, 0x61, 0x6c, 0x67, 0x72, 0x65, 0x77, 0x73, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x67, 0x65, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x74, 0x73, 0x35, 0x70, 0x78, - 0x3b, 0x2e, 0x6a, 0x73, 0x3f, 0x34, 0x30, 0x70, 0x78, 0x69, 0x66, 0x20, 0x28, - 0x73, 0x6f, 0x6f, 0x6e, 0x73, 0x65, 0x61, 0x74, 0x6e, 0x6f, 0x6e, 0x65, 0x74, - 0x75, 0x62, 0x65, 0x7a, 0x65, 0x72, 0x6f, 0x73, 0x65, 0x6e, 0x74, 0x72, 0x65, - 0x65, 0x64, 0x66, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x74, 0x6f, 0x67, 0x69, 0x66, - 0x74, 0x68, 0x61, 0x72, 0x6d, 0x31, 0x38, 0x70, 0x78, 0x63, 0x61, 0x6d, 0x65, - 0x68, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x6c, 0x64, 0x7a, 0x6f, 0x6f, 0x6d, 0x76, - 0x6f, 0x69, 0x64, 0x65, 0x61, 0x73, 0x79, 0x72, 0x69, 0x6e, 0x67, 0x66, 0x69, - 0x6c, 0x6c, 0x70, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x69, 0x74, 0x63, 0x6f, 0x73, - 0x74, 0x33, 0x70, 0x78, 0x3b, 0x6a, 0x61, 0x63, 0x6b, 0x74, 0x61, 0x67, 0x73, - 0x62, 0x69, 0x74, 0x73, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x69, 0x74, 0x6b, - 0x6e, 0x65, 0x77, 0x6e, 0x65, 0x61, 0x72, 0x3c, 0x21, 0x2d, 0x2d, 0x67, 0x72, - 0x6f, 0x77, 0x4a, 0x53, 0x4f, 0x4e, 0x64, 0x75, 0x74, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x61, 0x6c, 0x65, 0x79, 0x6f, 0x75, 0x20, 0x6c, 0x6f, 0x74, 0x73, - 0x70, 0x61, 0x69, 0x6e, 0x6a, 0x61, 0x7a, 0x7a, 0x63, 0x6f, 0x6c, 0x64, 0x65, - 0x79, 0x65, 0x73, 0x66, 0x69, 0x73, 0x68, 0x77, 0x77, 0x77, 0x2e, 0x72, 0x69, - 0x73, 0x6b, 0x74, 0x61, 0x62, 0x73, 0x70, 0x72, 0x65, 0x76, 0x31, 0x30, 0x70, - 0x78, 0x72, 0x69, 0x73, 0x65, 0x32, 0x35, 0x70, 0x78, 0x42, 0x6c, 0x75, 0x65, - 0x64, 0x69, 0x6e, 0x67, 0x33, 0x30, 0x30, 0x2c, 0x62, 0x61, 0x6c, 0x6c, 0x66, - 0x6f, 0x72, 0x64, 0x65, 0x61, 0x72, 0x6e, 0x77, 0x69, 0x6c, 0x64, 0x62, 0x6f, - 0x78, 0x2e, 0x66, 0x61, 0x69, 0x72, 0x6c, 0x61, 0x63, 0x6b, 0x76, 0x65, 0x72, - 0x73, 0x70, 0x61, 0x69, 0x72, 0x6a, 0x75, 0x6e, 0x65, 0x74, 0x65, 0x63, 0x68, - 0x69, 0x66, 0x28, 0x21, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x76, 0x69, 0x6c, 0x24, - 0x28, 0x22, 0x23, 0x77, 0x61, 0x72, 0x6d, 0x6c, 0x6f, 0x72, 0x64, 0x64, 0x6f, - 0x65, 0x73, 0x70, 0x75, 0x6c, 0x6c, 0x2c, 0x30, 0x30, 0x30, 0x69, 0x64, 0x65, - 0x61, 0x64, 0x72, 0x61, 0x77, 0x68, 0x75, 0x67, 0x65, 0x73, 0x70, 0x6f, 0x74, - 0x66, 0x75, 0x6e, 0x64, 0x62, 0x75, 0x72, 0x6e, 0x68, 0x72, 0x65, 0x66, 0x63, - 0x65, 0x6c, 0x6c, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x68, 0x6f, - 0x75, 0x72, 0x6c, 0x6f, 0x73, 0x73, 0x66, 0x75, 0x65, 0x6c, 0x31, 0x32, 0x70, - 0x78, 0x73, 0x75, 0x69, 0x74, 0x64, 0x65, 0x61, 0x6c, 0x52, 0x53, 0x53, 0x22, - 0x61, 0x67, 0x65, 0x64, 0x67, 0x72, 0x65, 0x79, 0x47, 0x45, 0x54, 0x22, 0x65, - 0x61, 0x73, 0x65, 0x61, 0x69, 0x6d, 0x73, 0x67, 0x69, 0x72, 0x6c, 0x61, 0x69, - 0x64, 0x73, 0x38, 0x70, 0x78, 0x3b, 0x6e, 0x61, 0x76, 0x79, 0x67, 0x72, 0x69, - 0x64, 0x74, 0x69, 0x70, 0x73, 0x23, 0x39, 0x39, 0x39, 0x77, 0x61, 0x72, 0x73, - 0x6c, 0x61, 0x64, 0x79, 0x63, 0x61, 0x72, 0x73, 0x29, 0x3b, 0x20, 0x7d, 0x70, - 0x68, 0x70, 0x3f, 0x68, 0x65, 0x6c, 0x6c, 0x74, 0x61, 0x6c, 0x6c, 0x77, 0x68, - 0x6f, 0x6d, 0x7a, 0x68, 0x3a, 0xe5, 0x2a, 0x2f, 0x0d, 0x0a, 0x20, 0x31, 0x30, - 0x30, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x0a, 0x0a, 0x41, 0x37, 0x70, 0x78, 0x3b, - 0x70, 0x75, 0x73, 0x68, 0x63, 0x68, 0x61, 0x74, 0x30, 0x70, 0x78, 0x3b, 0x63, - 0x72, 0x65, 0x77, 0x2a, 0x2f, 0x3c, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x37, 0x35, - 0x70, 0x78, 0x66, 0x6c, 0x61, 0x74, 0x72, 0x61, 0x72, 0x65, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x65, 0x6c, 0x6c, 0x63, 0x61, 0x6d, 0x70, 0x6f, 0x6e, 0x74, 0x6f, - 0x6c, 0x61, 0x69, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x73, 0x6b, 0x69, 0x70, 0x74, - 0x65, 0x6e, 0x74, 0x66, 0x69, 0x6e, 0x65, 0x6d, 0x61, 0x6c, 0x65, 0x67, 0x65, - 0x74, 0x73, 0x70, 0x6c, 0x6f, 0x74, 0x34, 0x30, 0x30, 0x2c, 0x0d, 0x0a, 0x0d, - 0x0a, 0x63, 0x6f, 0x6f, 0x6c, 0x66, 0x65, 0x65, 0x74, 0x2e, 0x70, 0x68, 0x70, - 0x3c, 0x62, 0x72, 0x3e, 0x65, 0x72, 0x69, 0x63, 0x6d, 0x6f, 0x73, 0x74, 0x67, - 0x75, 0x69, 0x64, 0x62, 0x65, 0x6c, 0x6c, 0x64, 0x65, 0x73, 0x63, 0x68, 0x61, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x68, 0x61, 0x74, 0x6f, 0x6d, 0x2f, 0x69, 0x6d, - 0x67, 0x26, 0x23, 0x38, 0x32, 0x6c, 0x75, 0x63, 0x6b, 0x63, 0x65, 0x6e, 0x74, - 0x30, 0x30, 0x30, 0x3b, 0x74, 0x69, 0x6e, 0x79, 0x67, 0x6f, 0x6e, 0x65, 0x68, - 0x74, 0x6d, 0x6c, 0x73, 0x65, 0x6c, 0x6c, 0x64, 0x72, 0x75, 0x67, 0x46, 0x52, - 0x45, 0x45, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x69, 0x63, 0x6b, 0x3f, 0x69, 0x64, - 0x3d, 0x6c, 0x6f, 0x73, 0x65, 0x6e, 0x75, 0x6c, 0x6c, 0x76, 0x61, 0x73, 0x74, - 0x77, 0x69, 0x6e, 0x64, 0x52, 0x53, 0x53, 0x20, 0x77, 0x65, 0x61, 0x72, 0x72, - 0x65, 0x6c, 0x79, 0x62, 0x65, 0x65, 0x6e, 0x73, 0x61, 0x6d, 0x65, 0x64, 0x75, - 0x6b, 0x65, 0x6e, 0x61, 0x73, 0x61, 0x63, 0x61, 0x70, 0x65, 0x77, 0x69, 0x73, - 0x68, 0x67, 0x75, 0x6c, 0x66, 0x54, 0x32, 0x33, 0x3a, 0x68, 0x69, 0x74, 0x73, - 0x73, 0x6c, 0x6f, 0x74, 0x67, 0x61, 0x74, 0x65, 0x6b, 0x69, 0x63, 0x6b, 0x62, - 0x6c, 0x75, 0x72, 0x74, 0x68, 0x65, 0x79, 0x31, 0x35, 0x70, 0x78, 0x27, 0x27, - 0x29, 0x3b, 0x29, 0x3b, 0x22, 0x3e, 0x6d, 0x73, 0x69, 0x65, 0x77, 0x69, 0x6e, - 0x73, 0x62, 0x69, 0x72, 0x64, 0x73, 0x6f, 0x72, 0x74, 0x62, 0x65, 0x74, 0x61, - 0x73, 0x65, 0x65, 0x6b, 0x54, 0x31, 0x38, 0x3a, 0x6f, 0x72, 0x64, 0x73, 0x74, - 0x72, 0x65, 0x65, 0x6d, 0x61, 0x6c, 0x6c, 0x36, 0x30, 0x70, 0x78, 0x66, 0x61, - 0x72, 0x6d, 0xe2, 0x80, 0x99, 0x73, 0x62, 0x6f, 0x79, 0x73, 0x5b, 0x30, 0x5d, - 0x2e, 0x27, 0x29, 0x3b, 0x22, 0x50, 0x4f, 0x53, 0x54, 0x62, 0x65, 0x61, 0x72, - 0x6b, 0x69, 0x64, 0x73, 0x29, 0x3b, 0x7d, 0x7d, 0x6d, 0x61, 0x72, 0x79, 0x74, - 0x65, 0x6e, 0x64, 0x28, 0x55, 0x4b, 0x29, 0x71, 0x75, 0x61, 0x64, 0x7a, 0x68, - 0x3a, 0xe6, 0x2d, 0x73, 0x69, 0x7a, 0x2d, 0x2d, 0x2d, 0x2d, 0x70, 0x72, 0x6f, - 0x70, 0x27, 0x29, 0x3b, 0x0d, 0x6c, 0x69, 0x66, 0x74, 0x54, 0x31, 0x39, 0x3a, - 0x76, 0x69, 0x63, 0x65, 0x61, 0x6e, 0x64, 0x79, 0x64, 0x65, 0x62, 0x74, 0x3e, - 0x52, 0x53, 0x53, 0x70, 0x6f, 0x6f, 0x6c, 0x6e, 0x65, 0x63, 0x6b, 0x62, 0x6c, - 0x6f, 0x77, 0x54, 0x31, 0x36, 0x3a, 0x64, 0x6f, 0x6f, 0x72, 0x65, 0x76, 0x61, - 0x6c, 0x54, 0x31, 0x37, 0x3a, 0x6c, 0x65, 0x74, 0x73, 0x66, 0x61, 0x69, 0x6c, - 0x6f, 0x72, 0x61, 0x6c, 0x70, 0x6f, 0x6c, 0x6c, 0x6e, 0x6f, 0x76, 0x61, 0x63, - 0x6f, 0x6c, 0x73, 0x67, 0x65, 0x6e, 0x65, 0x20, 0xe2, 0x80, 0x94, 0x73, 0x6f, - 0x66, 0x74, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x69, 0x6c, 0x6c, 0x72, 0x6f, 0x73, - 0x73, 0x3c, 0x68, 0x33, 0x3e, 0x70, 0x6f, 0x75, 0x72, 0x66, 0x61, 0x64, 0x65, - 0x70, 0x69, 0x6e, 0x6b, 0x3c, 0x74, 0x72, 0x3e, 0x6d, 0x69, 0x6e, 0x69, 0x29, - 0x7c, 0x21, 0x28, 0x6d, 0x69, 0x6e, 0x65, 0x7a, 0x68, 0x3a, 0xe8, 0x62, 0x61, - 0x72, 0x73, 0x68, 0x65, 0x61, 0x72, 0x30, 0x30, 0x29, 0x3b, 0x6d, 0x69, 0x6c, - 0x6b, 0x20, 0x2d, 0x2d, 0x3e, 0x69, 0x72, 0x6f, 0x6e, 0x66, 0x72, 0x65, 0x64, - 0x64, 0x69, 0x73, 0x6b, 0x77, 0x65, 0x6e, 0x74, 0x73, 0x6f, 0x69, 0x6c, 0x70, - 0x75, 0x74, 0x73, 0x2f, 0x6a, 0x73, 0x2f, 0x68, 0x6f, 0x6c, 0x79, 0x54, 0x32, - 0x32, 0x3a, 0x49, 0x53, 0x42, 0x4e, 0x54, 0x32, 0x30, 0x3a, 0x61, 0x64, 0x61, - 0x6d, 0x73, 0x65, 0x65, 0x73, 0x3c, 0x68, 0x32, 0x3e, 0x6a, 0x73, 0x6f, 0x6e, - 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x74, 0x54, 0x32, 0x31, 0x3a, 0x20, - 0x52, 0x53, 0x53, 0x6c, 0x6f, 0x6f, 0x70, 0x61, 0x73, 0x69, 0x61, 0x6d, 0x6f, - 0x6f, 0x6e, 0x3c, 0x2f, 0x70, 0x3e, 0x73, 0x6f, 0x75, 0x6c, 0x4c, 0x49, 0x4e, - 0x45, 0x66, 0x6f, 0x72, 0x74, 0x63, 0x61, 0x72, 0x74, 0x54, 0x31, 0x34, 0x3a, - 0x3c, 0x68, 0x31, 0x3e, 0x38, 0x30, 0x70, 0x78, 0x21, 0x2d, 0x2d, 0x3c, 0x39, - 0x70, 0x78, 0x3b, 0x54, 0x30, 0x34, 0x3a, 0x6d, 0x69, 0x6b, 0x65, 0x3a, 0x34, - 0x36, 0x5a, 0x6e, 0x69, 0x63, 0x65, 0x69, 0x6e, 0x63, 0x68, 0x59, 0x6f, 0x72, - 0x6b, 0x72, 0x69, 0x63, 0x65, 0x7a, 0x68, 0x3a, 0xe4, 0x27, 0x29, 0x29, 0x3b, - 0x70, 0x75, 0x72, 0x65, 0x6d, 0x61, 0x67, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x6f, 0x6e, 0x65, 0x62, 0x6f, 0x6e, 0x64, 0x3a, 0x33, 0x37, 0x5a, 0x5f, 0x6f, - 0x66, 0x5f, 0x27, 0x5d, 0x29, 0x3b, 0x30, 0x30, 0x30, 0x2c, 0x7a, 0x68, 0x3a, - 0xe7, 0x74, 0x61, 0x6e, 0x6b, 0x79, 0x61, 0x72, 0x64, 0x62, 0x6f, 0x77, 0x6c, - 0x62, 0x75, 0x73, 0x68, 0x3a, 0x35, 0x36, 0x5a, 0x4a, 0x61, 0x76, 0x61, 0x33, - 0x30, 0x70, 0x78, 0x0a, 0x7c, 0x7d, 0x0a, 0x25, 0x43, 0x33, 0x25, 0x3a, 0x33, - 0x34, 0x5a, 0x6a, 0x65, 0x66, 0x66, 0x45, 0x58, 0x50, 0x49, 0x63, 0x61, 0x73, - 0x68, 0x76, 0x69, 0x73, 0x61, 0x67, 0x6f, 0x6c, 0x66, 0x73, 0x6e, 0x6f, 0x77, - 0x7a, 0x68, 0x3a, 0xe9, 0x71, 0x75, 0x65, 0x72, 0x2e, 0x63, 0x73, 0x73, 0x73, - 0x69, 0x63, 0x6b, 0x6d, 0x65, 0x61, 0x74, 0x6d, 0x69, 0x6e, 0x2e, 0x62, 0x69, - 0x6e, 0x64, 0x64, 0x65, 0x6c, 0x6c, 0x68, 0x69, 0x72, 0x65, 0x70, 0x69, 0x63, - 0x73, 0x72, 0x65, 0x6e, 0x74, 0x3a, 0x33, 0x36, 0x5a, 0x48, 0x54, 0x54, 0x50, - 0x2d, 0x32, 0x30, 0x31, 0x66, 0x6f, 0x74, 0x6f, 0x77, 0x6f, 0x6c, 0x66, 0x45, - 0x4e, 0x44, 0x20, 0x78, 0x62, 0x6f, 0x78, 0x3a, 0x35, 0x34, 0x5a, 0x42, 0x4f, - 0x44, 0x59, 0x64, 0x69, 0x63, 0x6b, 0x3b, 0x0a, 0x7d, 0x0a, 0x65, 0x78, 0x69, - 0x74, 0x3a, 0x33, 0x35, 0x5a, 0x76, 0x61, 0x72, 0x73, 0x62, 0x65, 0x61, 0x74, - 0x27, 0x7d, 0x29, 0x3b, 0x64, 0x69, 0x65, 0x74, 0x39, 0x39, 0x39, 0x3b, 0x61, - 0x6e, 0x6e, 0x65, 0x7d, 0x7d, 0x3c, 0x2f, 0x5b, 0x69, 0x5d, 0x2e, 0x4c, 0x61, - 0x6e, 0x67, 0x6b, 0x6d, 0xc2, 0xb2, 0x77, 0x69, 0x72, 0x65, 0x74, 0x6f, 0x79, - 0x73, 0x61, 0x64, 0x64, 0x73, 0x73, 0x65, 0x61, 0x6c, 0x61, 0x6c, 0x65, 0x78, - 0x3b, 0x0a, 0x09, 0x7d, 0x65, 0x63, 0x68, 0x6f, 0x6e, 0x69, 0x6e, 0x65, 0x2e, - 0x6f, 0x72, 0x67, 0x30, 0x30, 0x35, 0x29, 0x74, 0x6f, 0x6e, 0x79, 0x6a, 0x65, - 0x77, 0x73, 0x73, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x67, 0x73, 0x72, 0x6f, 0x6f, - 0x66, 0x30, 0x30, 0x30, 0x29, 0x20, 0x32, 0x30, 0x30, 0x77, 0x69, 0x6e, 0x65, - 0x67, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x67, 0x73, 0x62, 0x6f, 0x6f, 0x74, 0x67, - 0x61, 0x72, 0x79, 0x63, 0x75, 0x74, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x74, 0x65, - 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x78, 0x6d, 0x6c, 0x63, 0x6f, 0x63, - 0x6b, 0x67, 0x61, 0x6e, 0x67, 0x24, 0x28, 0x27, 0x2e, 0x35, 0x30, 0x70, 0x78, - 0x50, 0x68, 0x2e, 0x44, 0x6d, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x6e, 0x6c, - 0x6f, 0x61, 0x6e, 0x64, 0x65, 0x73, 0x6b, 0x6d, 0x69, 0x6c, 0x65, 0x72, 0x79, - 0x61, 0x6e, 0x75, 0x6e, 0x69, 0x78, 0x64, 0x69, 0x73, 0x63, 0x29, 0x3b, 0x7d, - 0x0a, 0x64, 0x75, 0x73, 0x74, 0x63, 0x6c, 0x69, 0x70, 0x29, 0x2e, 0x0a, 0x0a, - 0x37, 0x30, 0x70, 0x78, 0x2d, 0x32, 0x30, 0x30, 0x44, 0x56, 0x44, 0x73, 0x37, - 0x5d, 0x3e, 0x3c, 0x74, 0x61, 0x70, 0x65, 0x64, 0x65, 0x6d, 0x6f, 0x69, 0x2b, - 0x2b, 0x29, 0x77, 0x61, 0x67, 0x65, 0x65, 0x75, 0x72, 0x6f, 0x70, 0x68, 0x69, - 0x6c, 0x6f, 0x70, 0x74, 0x73, 0x68, 0x6f, 0x6c, 0x65, 0x46, 0x41, 0x51, 0x73, - 0x61, 0x73, 0x69, 0x6e, 0x2d, 0x32, 0x36, 0x54, 0x6c, 0x61, 0x62, 0x73, 0x70, - 0x65, 0x74, 0x73, 0x55, 0x52, 0x4c, 0x20, 0x62, 0x75, 0x6c, 0x6b, 0x63, 0x6f, - 0x6f, 0x6b, 0x3b, 0x7d, 0x0d, 0x0a, 0x48, 0x45, 0x41, 0x44, 0x5b, 0x30, 0x5d, - 0x29, 0x61, 0x62, 0x62, 0x72, 0x6a, 0x75, 0x61, 0x6e, 0x28, 0x31, 0x39, 0x38, - 0x6c, 0x65, 0x73, 0x68, 0x74, 0x77, 0x69, 0x6e, 0x3c, 0x2f, 0x69, 0x3e, 0x73, - 0x6f, 0x6e, 0x79, 0x67, 0x75, 0x79, 0x73, 0x66, 0x75, 0x63, 0x6b, 0x70, 0x69, - 0x70, 0x65, 0x7c, 0x2d, 0x0a, 0x21, 0x30, 0x30, 0x32, 0x29, 0x6e, 0x64, 0x6f, - 0x77, 0x5b, 0x31, 0x5d, 0x3b, 0x5b, 0x5d, 0x3b, 0x0a, 0x4c, 0x6f, 0x67, 0x20, - 0x73, 0x61, 0x6c, 0x74, 0x0d, 0x0a, 0x09, 0x09, 0x62, 0x61, 0x6e, 0x67, 0x74, - 0x72, 0x69, 0x6d, 0x62, 0x61, 0x74, 0x68, 0x29, 0x7b, 0x0d, 0x0a, 0x30, 0x30, - 0x70, 0x78, 0x0a, 0x7d, 0x29, 0x3b, 0x6b, 0x6f, 0x3a, 0xec, 0x66, 0x65, 0x65, - 0x73, 0x61, 0x64, 0x3e, 0x0d, 0x73, 0x3a, 0x2f, 0x2f, 0x20, 0x5b, 0x5d, 0x3b, - 0x74, 0x6f, 0x6c, 0x6c, 0x70, 0x6c, 0x75, 0x67, 0x28, 0x29, 0x7b, 0x0a, 0x7b, - 0x0d, 0x0a, 0x20, 0x2e, 0x6a, 0x73, 0x27, 0x32, 0x30, 0x30, 0x70, 0x64, 0x75, - 0x61, 0x6c, 0x62, 0x6f, 0x61, 0x74, 0x2e, 0x4a, 0x50, 0x47, 0x29, 0x3b, 0x0a, - 0x7d, 0x71, 0x75, 0x6f, 0x74, 0x29, 0x3b, 0x0a, 0x0a, 0x27, 0x29, 0x3b, 0x0a, - 0x0d, 0x0a, 0x7d, 0x0d, 0x32, 0x30, 0x31, 0x34, 0x32, 0x30, 0x31, 0x35, 0x32, - 0x30, 0x31, 0x36, 0x32, 0x30, 0x31, 0x37, 0x32, 0x30, 0x31, 0x38, 0x32, 0x30, - 0x31, 0x39, 0x32, 0x30, 0x32, 0x30, 0x32, 0x30, 0x32, 0x31, 0x32, 0x30, 0x32, - 0x32, 0x32, 0x30, 0x32, 0x33, 0x32, 0x30, 0x32, 0x34, 0x32, 0x30, 0x32, 0x35, - 0x32, 0x30, 0x32, 0x36, 0x32, 0x30, 0x32, 0x37, 0x32, 0x30, 0x32, 0x38, 0x32, - 0x30, 0x32, 0x39, 0x32, 0x30, 0x33, 0x30, 0x32, 0x30, 0x33, 0x31, 0x32, 0x30, - 0x33, 0x32, 0x32, 0x30, 0x33, 0x33, 0x32, 0x30, 0x33, 0x34, 0x32, 0x30, 0x33, - 0x35, 0x32, 0x30, 0x33, 0x36, 0x32, 0x30, 0x33, 0x37, 0x32, 0x30, 0x31, 0x33, - 0x32, 0x30, 0x31, 0x32, 0x32, 0x30, 0x31, 0x31, 0x32, 0x30, 0x31, 0x30, 0x32, - 0x30, 0x30, 0x39, 0x32, 0x30, 0x30, 0x38, 0x32, 0x30, 0x30, 0x37, 0x32, 0x30, - 0x30, 0x36, 0x32, 0x30, 0x30, 0x35, 0x32, 0x30, 0x30, 0x34, 0x32, 0x30, 0x30, - 0x33, 0x32, 0x30, 0x30, 0x32, 0x32, 0x30, 0x30, 0x31, 0x32, 0x30, 0x30, 0x30, - 0x31, 0x39, 0x39, 0x39, 0x31, 0x39, 0x39, 0x38, 0x31, 0x39, 0x39, 0x37, 0x31, - 0x39, 0x39, 0x36, 0x31, 0x39, 0x39, 0x35, 0x31, 0x39, 0x39, 0x34, 0x31, 0x39, - 0x39, 0x33, 0x31, 0x39, 0x39, 0x32, 0x31, 0x39, 0x39, 0x31, 0x31, 0x39, 0x39, - 0x30, 0x31, 0x39, 0x38, 0x39, 0x31, 0x39, 0x38, 0x38, 0x31, 0x39, 0x38, 0x37, - 0x31, 0x39, 0x38, 0x36, 0x31, 0x39, 0x38, 0x35, 0x31, 0x39, 0x38, 0x34, 0x31, - 0x39, 0x38, 0x33, 0x31, 0x39, 0x38, 0x32, 0x31, 0x39, 0x38, 0x31, 0x31, 0x39, - 0x38, 0x30, 0x31, 0x39, 0x37, 0x39, 0x31, 0x39, 0x37, 0x38, 0x31, 0x39, 0x37, - 0x37, 0x31, 0x39, 0x37, 0x36, 0x31, 0x39, 0x37, 0x35, 0x31, 0x39, 0x37, 0x34, - 0x31, 0x39, 0x37, 0x33, 0x31, 0x39, 0x37, 0x32, 0x31, 0x39, 0x37, 0x31, 0x31, - 0x39, 0x37, 0x30, 0x31, 0x39, 0x36, 0x39, 0x31, 0x39, 0x36, 0x38, 0x31, 0x39, - 0x36, 0x37, 0x31, 0x39, 0x36, 0x36, 0x31, 0x39, 0x36, 0x35, 0x31, 0x39, 0x36, - 0x34, 0x31, 0x39, 0x36, 0x33, 0x31, 0x39, 0x36, 0x32, 0x31, 0x39, 0x36, 0x31, - 0x31, 0x39, 0x36, 0x30, 0x31, 0x39, 0x35, 0x39, 0x31, 0x39, 0x35, 0x38, 0x31, - 0x39, 0x35, 0x37, 0x31, 0x39, 0x35, 0x36, 0x31, 0x39, 0x35, 0x35, 0x31, 0x39, - 0x35, 0x34, 0x31, 0x39, 0x35, 0x33, 0x31, 0x39, 0x35, 0x32, 0x31, 0x39, 0x35, - 0x31, 0x31, 0x39, 0x35, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x34, - 0x31, 0x33, 0x39, 0x34, 0x30, 0x30, 0x30, 0x30, 0x39, 0x39, 0x39, 0x39, 0x63, - 0x6f, 0x6d, 0x6f, 0x6d, 0xc3, 0xa1, 0x73, 0x65, 0x73, 0x74, 0x65, 0x65, 0x73, - 0x74, 0x61, 0x70, 0x65, 0x72, 0x6f, 0x74, 0x6f, 0x64, 0x6f, 0x68, 0x61, 0x63, - 0x65, 0x63, 0x61, 0x64, 0x61, 0x61, 0xc3, 0xb1, 0x6f, 0x62, 0x69, 0x65, 0x6e, - 0x64, 0xc3, 0xad, 0x61, 0x61, 0x73, 0xc3, 0xad, 0x76, 0x69, 0x64, 0x61, 0x63, - 0x61, 0x73, 0x6f, 0x6f, 0x74, 0x72, 0x6f, 0x66, 0x6f, 0x72, 0x6f, 0x73, 0x6f, - 0x6c, 0x6f, 0x6f, 0x74, 0x72, 0x61, 0x63, 0x75, 0x61, 0x6c, 0x64, 0x69, 0x6a, - 0x6f, 0x73, 0x69, 0x64, 0x6f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x69, 0x70, 0x6f, - 0x74, 0x65, 0x6d, 0x61, 0x64, 0x65, 0x62, 0x65, 0x61, 0x6c, 0x67, 0x6f, 0x71, - 0x75, 0xc3, 0xa9, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x61, 0x64, 0x61, 0x74, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x63, 0x6f, 0x63, 0x61, 0x73, 0x61, 0x62, 0x61, 0x6a, - 0x6f, 0x74, 0x6f, 0x64, 0x61, 0x73, 0x69, 0x6e, 0x6f, 0x61, 0x67, 0x75, 0x61, - 0x70, 0x75, 0x65, 0x73, 0x75, 0x6e, 0x6f, 0x73, 0x61, 0x6e, 0x74, 0x65, 0x64, - 0x69, 0x63, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x65, 0x6c, 0x6c, 0x61, 0x6d, 0x61, - 0x79, 0x6f, 0x7a, 0x6f, 0x6e, 0x61, 0x61, 0x6d, 0x6f, 0x72, 0x70, 0x69, 0x73, - 0x6f, 0x6f, 0x62, 0x72, 0x61, 0x63, 0x6c, 0x69, 0x63, 0x65, 0x6c, 0x6c, 0x6f, - 0x64, 0x69, 0x6f, 0x73, 0x68, 0x6f, 0x72, 0x61, 0x63, 0x61, 0x73, 0x69, 0xd0, - 0xb7, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x80, - 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x83, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, - 0xb5, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xb7, - 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, - 0xb6, 0xd0, 0xb5, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x85, 0xd0, 0x9d, - 0xd0, 0xb0, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xbc, 0xd1, - 0x8b, 0xd0, 0x92, 0xd1, 0x8b, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, - 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0x9d, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, - 0x9f, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xa0, - 0xd0, 0xa4, 0xd0, 0x9d, 0xd0, 0xb5, 0xd0, 0x9c, 0xd1, 0x8b, 0xd1, 0x82, 0xd1, - 0x8b, 0xd0, 0x9e, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb4, 0xd0, 0xb0, - 0xd0, 0x97, 0xd0, 0xb0, 0xd0, 0x94, 0xd0, 0xb0, 0xd0, 0x9d, 0xd1, 0x83, 0xd0, - 0x9e, 0xd0, 0xb1, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0x98, 0xd0, 0xb7, 0xd0, 0xb5, - 0xd0, 0xb9, 0xd0, 0xbd, 0xd1, 0x83, 0xd0, 0xbc, 0xd0, 0xbc, 0xd0, 0xa2, 0xd1, - 0x8b, 0xd1, 0x83, 0xd0, 0xb6, 0xd9, 0x81, 0xd9, 0x8a, 0xd8, 0xa3, 0xd9, 0x86, - 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xb9, 0xd9, 0x83, 0xd9, 0x84, 0xd8, - 0xa3, 0xd9, 0x88, 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x81, - 0xd9, 0x89, 0xd9, 0x87, 0xd9, 0x88, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x84, 0xd9, - 0x83, 0xd8, 0xa7, 0xd9, 0x88, 0xd9, 0x84, 0xd9, 0x87, 0xd8, 0xa8, 0xd8, 0xb3, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa5, 0xd9, 0x86, 0xd9, 0x87, 0xd9, 0x8a, 0xd8, - 0xa3, 0xd9, 0x8a, 0xd9, 0x82, 0xd8, 0xaf, 0xd9, 0x87, 0xd9, 0x84, 0xd8, 0xab, - 0xd9, 0x85, 0xd8, 0xa8, 0xd9, 0x87, 0xd9, 0x84, 0xd9, 0x88, 0xd9, 0x84, 0xd9, - 0x8a, 0xd8, 0xa8, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x8a, 0xd8, 0xa8, 0xd9, 0x83, - 0xd8, 0xb4, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xa3, 0xd9, 0x85, 0xd9, - 0x86, 0xd8, 0xaa, 0xd8, 0xa8, 0xd9, 0x8a, 0xd9, 0x84, 0xd9, 0x86, 0xd8, 0xad, - 0xd8, 0xa8, 0xd9, 0x87, 0xd9, 0x85, 0xd9, 0x85, 0xd8, 0xb4, 0xd9, 0x88, 0xd8, - 0xb4, 0x66, 0x69, 0x72, 0x73, 0x74, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x6d, 0x65, 0x64, 0x69, 0x61, - 0x77, 0x68, 0x69, 0x74, 0x65, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x62, 0x6c, 0x61, - 0x63, 0x6b, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x62, - 0x6f, 0x6f, 0x6b, 0x73, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x75, 0x73, 0x69, - 0x63, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x68, 0x6f, 0x75, - 0x73, 0x65, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x79, - 0x65, 0x61, 0x72, 0x73, 0x73, 0x74, 0x61, 0x74, 0x65, 0x74, 0x6f, 0x64, 0x61, - 0x79, 0x77, 0x61, 0x74, 0x65, 0x72, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x64, 0x65, 0x61, 0x74, 0x68, 0x70, 0x6f, 0x77, 0x65, 0x72, - 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x6e, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x74, - 0x65, 0x72, 0x6d, 0x73, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x74, 0x6f, 0x6f, 0x6c, - 0x73, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x73, - 0x67, 0x61, 0x6d, 0x65, 0x73, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x67, 0x75, 0x69, 0x64, - 0x65, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x77, 0x6f, - 0x6d, 0x65, 0x6e, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x6d, 0x6f, 0x6e, 0x65, 0x79, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x79, 0x6f, 0x75, - 0x6e, 0x67, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x66, 0x72, 0x6f, 0x6e, - 0x74, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x77, 0x61, 0x74, 0x63, 0x68, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x70, 0x72, 0x69, 0x63, 0x65, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x62, 0x65, 0x67, 0x69, 0x6e, 0x61, 0x66, 0x74, 0x65, 0x72, 0x76, 0x69, 0x73, - 0x69, 0x74, 0x69, 0x73, 0x73, 0x75, 0x65, 0x61, 0x72, 0x65, 0x61, 0x73, 0x62, - 0x65, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x70, 0x72, - 0x69, 0x6e, 0x74, 0x70, 0x72, 0x65, 0x73, 0x73, 0x62, 0x75, 0x69, 0x6c, 0x74, - 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x73, 0x70, 0x65, 0x65, 0x64, 0x73, 0x74, 0x75, - 0x64, 0x79, 0x74, 0x72, 0x61, 0x64, 0x65, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x73, - 0x65, 0x6e, 0x73, 0x65, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x68, 0x6f, 0x77, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x74, 0x61, 0x6b, 0x65, 0x6e, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x66, 0x6c, 0x61, - 0x73, 0x68, 0x66, 0x69, 0x78, 0x65, 0x64, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x73, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x72, 0x69, 0x76, 0x65, 0x72, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x73, 0x68, 0x61, 0x70, 0x65, - 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x67, 0x6f, 0x69, - 0x6e, 0x67, 0x6d, 0x6f, 0x76, 0x69, 0x65, 0x74, 0x68, 0x69, 0x72, 0x64, 0x62, - 0x61, 0x73, 0x69, 0x63, 0x70, 0x65, 0x61, 0x63, 0x65, 0x73, 0x74, 0x61, 0x67, - 0x65, 0x77, 0x69, 0x64, 0x74, 0x68, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x69, 0x64, - 0x65, 0x61, 0x73, 0x77, 0x72, 0x6f, 0x74, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x64, 0x72, 0x69, 0x76, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x76, - 0x6f, 0x69, 0x63, 0x65, 0x73, 0x69, 0x74, 0x65, 0x73, 0x6d, 0x6f, 0x6e, 0x74, - 0x68, 0x77, 0x68, 0x65, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x65, 0x61, 0x72, 0x74, 0x68, 0x66, 0x6f, 0x72, 0x75, 0x6d, - 0x74, 0x68, 0x72, 0x65, 0x65, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x70, 0x61, 0x72, - 0x74, 0x79, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x6c, - 0x69, 0x76, 0x65, 0x73, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x75, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6f, 0x75, 0x72, 0x74, - 0x79, 0x6f, 0x75, 0x72, 0x20, 0x62, 0x69, 0x72, 0x74, 0x68, 0x70, 0x6f, 0x70, - 0x75, 0x70, 0x74, 0x79, 0x70, 0x65, 0x73, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x75, 0x70, 0x70, 0x65, - 0x72, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x65, 0x76, 0x65, 0x72, 0x79, 0x73, 0x68, - 0x6f, 0x77, 0x73, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x65, 0x78, 0x74, 0x72, 0x61, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x62, 0x65, 0x67, 0x61, 0x6e, 0x73, - 0x75, 0x70, 0x65, 0x72, 0x70, 0x61, 0x70, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x74, - 0x68, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x65, 0x72, 0x6d, 0x73, - 0x70, 0x61, 0x72, 0x74, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x62, 0x72, 0x61, - 0x6e, 0x64, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x77, 0x6f, 0x6d, 0x61, 0x6e, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x72, 0x65, 0x61, 0x64, 0x79, 0x61, 0x75, 0x64, 0x69, - 0x6f, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x64, 0x63, 0x61, 0x73, 0x65, 0x73, - 0x64, 0x61, 0x69, 0x6c, 0x79, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x6a, 0x75, 0x64, 0x67, 0x65, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x75, - 0x6e, 0x69, 0x74, 0x73, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x62, 0x72, 0x6f, 0x61, - 0x64, 0x63, 0x6f, 0x61, 0x73, 0x74, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x70, - 0x70, 0x6c, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x73, 0x63, 0x65, 0x6e, 0x65, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x63, 0x6c, 0x69, - 0x63, 0x6b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x71, 0x75, 0x65, 0x65, 0x6e, 0x70, - 0x69, 0x65, 0x63, 0x65, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x66, 0x72, 0x61, 0x6d, - 0x65, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x63, 0x61, 0x63, 0x68, 0x65, 0x63, 0x69, 0x76, 0x69, 0x6c, - 0x73, 0x63, 0x61, 0x6c, 0x65, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x74, 0x68, 0x65, - 0x6d, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x72, 0x6f, 0x79, 0x61, 0x6c, 0x61, 0x73, 0x6b, 0x65, - 0x64, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x73, 0x74, - 0x6f, 0x63, 0x6b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x66, 0x61, 0x69, 0x74, 0x68, - 0x68, 0x65, 0x61, 0x72, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x6f, 0x66, 0x66, - 0x65, 0x72, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x6d, - 0x69, 0x67, 0x68, 0x74, 0x61, 0x6c, 0x62, 0x75, 0x6d, 0x74, 0x68, 0x69, 0x6e, - 0x6b, 0x62, 0x6c, 0x6f, 0x6f, 0x64, 0x61, 0x72, 0x72, 0x61, 0x79, 0x6d, 0x61, - 0x6a, 0x6f, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x63, 0x61, 0x6e, 0x6f, 0x6e, - 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x68, 0x61, 0x70, 0x70, 0x79, 0x6f, 0x63, 0x63, 0x75, - 0x72, 0x6c, 0x65, 0x66, 0x74, 0x3a, 0x66, 0x72, 0x65, 0x73, 0x68, 0x71, 0x75, - 0x69, 0x74, 0x65, 0x66, 0x69, 0x6c, 0x6d, 0x73, 0x67, 0x72, 0x61, 0x64, 0x65, - 0x6e, 0x65, 0x65, 0x64, 0x73, 0x75, 0x72, 0x62, 0x61, 0x6e, 0x66, 0x69, 0x67, - 0x68, 0x74, 0x62, 0x61, 0x73, 0x69, 0x73, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x61, - 0x75, 0x74, 0x6f, 0x3b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x68, 0x74, 0x6d, - 0x6c, 0x6d, 0x69, 0x78, 0x65, 0x64, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x59, 0x6f, - 0x75, 0x72, 0x20, 0x73, 0x6c, 0x69, 0x64, 0x65, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x62, 0x72, 0x6f, 0x77, 0x6e, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x64, 0x72, 0x61, - 0x77, 0x6e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x72, 0x65, 0x61, 0x63, 0x68, 0x52, - 0x69, 0x67, 0x68, 0x74, 0x64, 0x61, 0x74, 0x65, 0x73, 0x6d, 0x61, 0x72, 0x63, - 0x68, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x4c, 0x69, - 0x6e, 0x6b, 0x73, 0x64, 0x6f, 0x75, 0x62, 0x74, 0x61, 0x73, 0x79, 0x6e, 0x63, - 0x74, 0x68, 0x75, 0x6d, 0x62, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x63, 0x68, 0x69, - 0x65, 0x66, 0x79, 0x6f, 0x75, 0x74, 0x68, 0x6e, 0x6f, 0x76, 0x65, 0x6c, 0x31, - 0x30, 0x70, 0x78, 0x3b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x75, 0x6e, 0x74, 0x69, - 0x6c, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6a, 0x61, 0x6d, 0x65, 0x73, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x74, 0x77, 0x69, 0x63, 0x65, 0x30, 0x2c, 0x30, - 0x30, 0x30, 0x53, 0x74, 0x61, 0x72, 0x74, 0x70, 0x61, 0x6e, 0x65, 0x6c, 0x73, - 0x6f, 0x6e, 0x67, 0x73, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x73, 0x68, 0x69, 0x66, 0x74, 0x77, 0x6f, 0x72, 0x74, 0x68, 0x70, 0x6f, - 0x73, 0x74, 0x73, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x77, 0x65, 0x65, 0x6b, 0x73, - 0x61, 0x76, 0x6f, 0x69, 0x64, 0x74, 0x68, 0x65, 0x73, 0x65, 0x6d, 0x69, 0x6c, - 0x65, 0x73, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x6d, 0x61, 0x72, 0x74, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x74, 0x6d, 0x61, 0x72, 0x6b, - 0x73, 0x72, 0x61, 0x74, 0x65, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x73, 0x61, 0x6c, 0x65, 0x73, 0x74, 0x65, 0x78, 0x74, 0x73, - 0x73, 0x74, 0x61, 0x72, 0x73, 0x77, 0x72, 0x6f, 0x6e, 0x67, 0x3c, 0x2f, 0x68, - 0x33, 0x3e, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x68, 0x65, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x77, 0x65, - 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x6f, - 0x6c, 0x69, 0x64, 0x28, 0x74, 0x68, 0x69, 0x73, 0x62, 0x72, 0x69, 0x6e, 0x67, - 0x73, 0x68, 0x69, 0x70, 0x73, 0x73, 0x74, 0x61, 0x66, 0x66, 0x74, 0x72, 0x69, - 0x65, 0x64, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x66, - 0x61, 0x63, 0x74, 0x73, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x2f, 0x2f, 0x2d, 0x2d, 0x3e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x65, 0x67, - 0x79, 0x70, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x31, 0x35, 0x70, 0x78, 0x3b, - 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x72, 0x75, 0x65, 0x22, 0x63, 0x72, 0x6f, - 0x73, 0x73, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x62, 0x6c, 0x6f, 0x67, 0x73, 0x62, - 0x6f, 0x78, 0x22, 0x3e, 0x6e, 0x6f, 0x74, 0x65, 0x64, 0x6c, 0x65, 0x61, 0x76, - 0x65, 0x63, 0x68, 0x69, 0x6e, 0x61, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x67, 0x75, - 0x65, 0x73, 0x74, 0x3c, 0x2f, 0x68, 0x34, 0x3e, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x68, 0x65, 0x61, 0x76, 0x79, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x73, 0x65, 0x76, - 0x65, 0x6e, 0x67, 0x72, 0x61, 0x6e, 0x64, 0x63, 0x72, 0x69, 0x6d, 0x65, 0x73, - 0x69, 0x67, 0x6e, 0x73, 0x61, 0x77, 0x61, 0x72, 0x65, 0x64, 0x61, 0x6e, 0x63, - 0x65, 0x70, 0x68, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x65, 0x6e, - 0x5f, 0x55, 0x53, 0x26, 0x23, 0x33, 0x39, 0x3b, 0x32, 0x30, 0x30, 0x70, 0x78, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x65, 0x6e, 0x6a, - 0x6f, 0x79, 0x61, 0x6a, 0x61, 0x78, 0x2e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x6d, 0x69, 0x74, 0x68, 0x55, 0x2e, 0x53, 0x2e, 0x20, 0x68, 0x6f, 0x6c, 0x64, - 0x73, 0x70, 0x65, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, - 0x76, 0x22, 0x3e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x63, 0x6f, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x65, 0x73, 0x64, 0x6f, 0x69, 0x6e, 0x67, 0x70, 0x72, 0x69, - 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x31, 0x39, 0x39, 0x30, 0x73, 0x72, - 0x6f, 0x6d, 0x61, 0x6e, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x6a, 0x61, 0x70, 0x61, - 0x6e, 0x66, 0x61, 0x6c, 0x6c, 0x73, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x61, 0x67, 0x72, 0x65, 0x65, 0x3c, 0x2f, 0x68, 0x32, 0x3e, - 0x61, 0x62, 0x75, 0x73, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x63, 0x61, 0x72, 0x64, 0x73, 0x68, - 0x69, 0x6c, 0x6c, 0x73, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x50, 0x68, 0x6f, 0x74, - 0x6f, 0x74, 0x72, 0x75, 0x74, 0x68, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x2e, 0x70, - 0x68, 0x70, 0x3f, 0x73, 0x61, 0x69, 0x6e, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x6c, - 0x6c, 0x6f, 0x75, 0x69, 0x73, 0x6d, 0x65, 0x61, 0x6e, 0x74, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x62, 0x72, 0x69, 0x65, 0x66, 0x72, 0x6f, 0x77, 0x22, 0x3e, 0x67, - 0x65, 0x6e, 0x72, 0x65, 0x74, 0x72, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6b, - 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x6e, - 0x65, 0x74, 0x2f, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, 0x74, 0x72, 0x79, 0x20, 0x7b, - 0x0a, 0x76, 0x61, 0x72, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x73, 0x63, 0x6f, 0x73, - 0x74, 0x73, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x61, 0x64, 0x75, 0x6c, 0x74, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x6c, 0x61, 0x62, 0x6f, - 0x72, 0x68, 0x65, 0x6c, 0x70, 0x73, 0x63, 0x61, 0x75, 0x73, 0x65, 0x6d, 0x61, - 0x67, 0x69, 0x63, 0x6d, 0x6f, 0x74, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x69, 0x72, - 0x32, 0x35, 0x30, 0x70, 0x78, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x73, 0x74, 0x65, - 0x70, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x67, - 0x6c, 0x61, 0x73, 0x73, 0x73, 0x69, 0x64, 0x65, 0x73, 0x66, 0x75, 0x6e, 0x64, - 0x73, 0x68, 0x6f, 0x74, 0x65, 0x6c, 0x61, 0x77, 0x61, 0x72, 0x64, 0x6d, 0x6f, - 0x75, 0x74, 0x68, 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x70, 0x61, 0x72, 0x69, 0x73, - 0x67, 0x69, 0x76, 0x65, 0x73, 0x64, 0x75, 0x74, 0x63, 0x68, 0x74, 0x65, 0x78, - 0x61, 0x73, 0x66, 0x72, 0x75, 0x69, 0x74, 0x6e, 0x75, 0x6c, 0x6c, 0x2c, 0x7c, - 0x7c, 0x5b, 0x5d, 0x3b, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x0a, 0x3c, 0x21, 0x2d, - 0x2d, 0x50, 0x4f, 0x53, 0x54, 0x22, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x3c, 0x62, - 0x72, 0x2f, 0x3e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x73, 0x70, 0x65, 0x61, 0x6b, - 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x62, 0x61, 0x6e, - 0x6b, 0x73, 0x63, 0x61, 0x74, 0x63, 0x68, 0x63, 0x68, 0x61, 0x72, 0x74, 0x32, - 0x30, 0x70, 0x78, 0x3b, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x64, 0x65, 0x61, 0x6c, - 0x73, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x35, 0x30, 0x70, 0x78, 0x3b, 0x75, 0x72, - 0x6c, 0x3d, 0x22, 0x70, 0x61, 0x72, 0x6b, 0x73, 0x6d, 0x6f, 0x75, 0x73, 0x65, - 0x4d, 0x6f, 0x73, 0x74, 0x20, 0x2e, 0x2e, 0x2e, 0x3c, 0x2f, 0x61, 0x6d, 0x6f, - 0x6e, 0x67, 0x62, 0x72, 0x61, 0x69, 0x6e, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6e, - 0x6f, 0x6e, 0x65, 0x3b, 0x62, 0x61, 0x73, 0x65, 0x64, 0x63, 0x61, 0x72, 0x72, - 0x79, 0x64, 0x72, 0x61, 0x66, 0x74, 0x72, 0x65, 0x66, 0x65, 0x72, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x68, 0x6f, 0x6d, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x64, 0x65, 0x6c, 0x61, 0x79, 0x64, 0x72, 0x65, 0x61, 0x6d, 0x70, 0x72, 0x6f, - 0x76, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x64, - 0x72, 0x75, 0x67, 0x73, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x61, 0x70, 0x72, 0x69, - 0x6c, 0x69, 0x64, 0x65, 0x61, 0x6c, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x65, 0x78, - 0x61, 0x63, 0x74, 0x66, 0x6f, 0x72, 0x74, 0x68, 0x63, 0x6f, 0x64, 0x65, 0x73, - 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x56, 0x69, 0x65, 0x77, 0x20, 0x73, 0x65, 0x65, - 0x6d, 0x73, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, - 0x28, 0x32, 0x30, 0x30, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, - 0x6b, 0x67, 0x6f, 0x61, 0x6c, 0x73, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x67, 0x72, - 0x65, 0x65, 0x6b, 0x68, 0x6f, 0x6d, 0x65, 0x73, 0x72, 0x69, 0x6e, 0x67, 0x73, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x33, 0x30, 0x70, 0x78, 0x3b, 0x77, 0x68, 0x6f, - 0x73, 0x65, 0x70, 0x61, 0x72, 0x73, 0x65, 0x28, 0x29, 0x3b, 0x22, 0x20, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x6a, 0x6f, 0x6e, 0x65, - 0x73, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x27, 0x29, 0x3b, 0x22, 0x3e, 0x29, 0x3b, - 0x69, 0x66, 0x28, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x64, 0x61, 0x76, 0x69, 0x64, - 0x68, 0x6f, 0x72, 0x73, 0x65, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x72, 0x61, 0x69, - 0x73, 0x65, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x65, 0x6d, 0x3e, 0x62, 0x61, 0x72, 0x22, - 0x3e, 0x2e, 0x73, 0x72, 0x63, 0x3d, 0x74, 0x6f, 0x77, 0x65, 0x72, 0x61, 0x6c, - 0x74, 0x3d, 0x22, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x68, 0x65, 0x6e, 0x72, 0x79, - 0x32, 0x34, 0x70, 0x78, 0x3b, 0x73, 0x65, 0x74, 0x75, 0x70, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x73, 0x68, 0x61, 0x72, 0x70, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x74, - 0x61, 0x73, 0x74, 0x65, 0x77, 0x61, 0x6e, 0x74, 0x73, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x72, 0x65, 0x73, 0x65, 0x74, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x67, 0x69, - 0x72, 0x6c, 0x73, 0x2f, 0x63, 0x73, 0x73, 0x2f, 0x31, 0x30, 0x30, 0x25, 0x3b, - 0x63, 0x6c, 0x75, 0x62, 0x73, 0x73, 0x74, 0x75, 0x66, 0x66, 0x62, 0x69, 0x62, - 0x6c, 0x65, 0x76, 0x6f, 0x74, 0x65, 0x73, 0x20, 0x31, 0x30, 0x30, 0x30, 0x6b, - 0x6f, 0x72, 0x65, 0x61, 0x7d, 0x29, 0x3b, 0x0d, 0x0a, 0x62, 0x61, 0x6e, 0x64, - 0x73, 0x71, 0x75, 0x65, 0x75, 0x65, 0x3d, 0x20, 0x7b, 0x7d, 0x3b, 0x38, 0x30, - 0x70, 0x78, 0x3b, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x7b, 0x0d, 0x0a, 0x09, 0x09, - 0x61, 0x68, 0x65, 0x61, 0x64, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x72, 0x69, - 0x73, 0x68, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x73, - 0x74, 0x61, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x22, 0x79, 0x61, 0x68, 0x6f, - 0x6f, 0x29, 0x5b, 0x30, 0x5d, 0x3b, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x66, 0x69, - 0x6e, 0x64, 0x73, 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x64, 0x65, 0x62, 0x75, 0x67, - 0x74, 0x61, 0x73, 0x6b, 0x73, 0x55, 0x52, 0x4c, 0x20, 0x3d, 0x63, 0x65, 0x6c, - 0x6c, 0x73, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x31, 0x32, 0x70, 0x78, 0x3b, 0x70, - 0x72, 0x69, 0x6d, 0x65, 0x74, 0x65, 0x6c, 0x6c, 0x73, 0x74, 0x75, 0x72, 0x6e, - 0x73, 0x30, 0x78, 0x36, 0x30, 0x30, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x73, 0x70, - 0x61, 0x69, 0x6e, 0x62, 0x65, 0x61, 0x63, 0x68, 0x74, 0x61, 0x78, 0x65, 0x73, - 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x2d, 0x2d, 0x3e, - 0x3c, 0x2f, 0x67, 0x69, 0x66, 0x74, 0x73, 0x73, 0x74, 0x65, 0x76, 0x65, 0x2d, - 0x6c, 0x69, 0x6e, 0x6b, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x7d, 0x29, 0x3b, 0x0a, - 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x28, 0x31, 0x39, 0x39, 0x46, 0x41, - 0x51, 0x3c, 0x2f, 0x72, 0x6f, 0x67, 0x65, 0x72, 0x66, 0x72, 0x61, 0x6e, 0x6b, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x32, 0x38, 0x70, 0x78, 0x3b, 0x66, 0x65, 0x65, - 0x64, 0x73, 0x3c, 0x68, 0x31, 0x3e, 0x3c, 0x73, 0x63, 0x6f, 0x74, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x73, 0x32, 0x32, 0x70, 0x78, 0x3b, 0x64, 0x72, 0x69, 0x6e, - 0x6b, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x6c, 0x65, 0x77, 0x69, 0x73, 0x73, 0x68, - 0x61, 0x6c, 0x6c, 0x23, 0x30, 0x33, 0x39, 0x3b, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x6c, 0x6f, 0x76, 0x65, 0x64, 0x77, 0x61, 0x73, 0x74, 0x65, 0x30, 0x30, 0x70, - 0x78, 0x3b, 0x6a, 0x61, 0x3a, 0xe3, 0x82, 0x73, 0x69, 0x6d, 0x6f, 0x6e, 0x3c, - 0x66, 0x6f, 0x6e, 0x74, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x6d, 0x65, 0x65, 0x74, - 0x73, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x68, 0x65, 0x61, 0x70, 0x74, 0x69, - 0x67, 0x68, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x64, 0x29, 0x20, 0x21, 0x3d, 0x20, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x63, 0x6c, 0x69, 0x70, 0x73, 0x72, 0x6f, 0x6f, - 0x6d, 0x73, 0x6f, 0x6e, 0x6b, 0x65, 0x79, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x6d, - 0x61, 0x69, 0x6e, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x66, 0x75, 0x6e, 0x6e, 0x79, 0x74, 0x72, 0x65, 0x65, 0x73, 0x63, 0x6f, - 0x6d, 0x2f, 0x22, 0x31, 0x2e, 0x6a, 0x70, 0x67, 0x77, 0x6d, 0x6f, 0x64, 0x65, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x53, 0x54, 0x41, 0x52, 0x54, 0x6c, 0x65, 0x66, - 0x74, 0x20, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x29, - 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x69, 0x72, 0x75, - 0x73, 0x63, 0x68, 0x61, 0x69, 0x72, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x77, 0x6f, - 0x72, 0x73, 0x74, 0x50, 0x61, 0x67, 0x65, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x70, 0x61, 0x74, 0x63, 0x68, 0x3c, 0x21, 0x2d, 0x2d, 0x0a, 0x6f, 0x2d, 0x63, - 0x61, 0x63, 0x66, 0x69, 0x72, 0x6d, 0x73, 0x74, 0x6f, 0x75, 0x72, 0x73, 0x2c, - 0x30, 0x30, 0x30, 0x20, 0x61, 0x73, 0x69, 0x61, 0x6e, 0x69, 0x2b, 0x2b, 0x29, - 0x7b, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x27, 0x29, 0x5b, 0x30, 0x5d, 0x69, 0x64, - 0x3d, 0x31, 0x30, 0x62, 0x6f, 0x74, 0x68, 0x3b, 0x6d, 0x65, 0x6e, 0x75, 0x20, - 0x2e, 0x32, 0x2e, 0x6d, 0x69, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x6b, 0x65, 0x76, - 0x69, 0x6e, 0x63, 0x6f, 0x61, 0x63, 0x68, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x62, - 0x72, 0x75, 0x63, 0x65, 0x32, 0x2e, 0x6a, 0x70, 0x67, 0x55, 0x52, 0x4c, 0x29, - 0x2b, 0x2e, 0x6a, 0x70, 0x67, 0x7c, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x6c, - 0x69, 0x63, 0x65, 0x68, 0x61, 0x72, 0x72, 0x79, 0x31, 0x32, 0x30, 0x22, 0x20, - 0x73, 0x77, 0x65, 0x65, 0x74, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x64, 0x69, 0x65, 0x67, 0x6f, 0x70, 0x61, 0x67, 0x65, 0x20, 0x73, - 0x77, 0x69, 0x73, 0x73, 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, 0x23, 0x66, 0x66, 0x66, - 0x3b, 0x22, 0x3e, 0x4c, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x74, 0x72, - 0x65, 0x61, 0x74, 0x73, 0x68, 0x65, 0x65, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x31, 0x34, 0x70, 0x78, 0x3b, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x66, 0x69, 0x6c, 0x65, 0x64, 0x6a, 0x61, 0x3a, 0xe3, 0x83, 0x69, - 0x64, 0x3d, 0x22, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x77, 0x6f, 0x72, 0x73, - 0x65, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2d, 0x62, 0x6f, 0x78, 0x2d, 0x64, 0x65, - 0x6c, 0x74, 0x61, 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x62, 0x65, 0x61, 0x72, 0x73, - 0x3a, 0x34, 0x38, 0x5a, 0x3c, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x72, 0x75, 0x72, - 0x61, 0x6c, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x62, - 0x61, 0x6b, 0x65, 0x72, 0x73, 0x68, 0x6f, 0x70, 0x73, 0x3d, 0x20, 0x22, 0x22, - 0x3b, 0x70, 0x68, 0x70, 0x22, 0x3e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x33, - 0x70, 0x78, 0x3b, 0x62, 0x72, 0x69, 0x61, 0x6e, 0x68, 0x65, 0x6c, 0x6c, 0x6f, - 0x73, 0x69, 0x7a, 0x65, 0x3d, 0x6f, 0x3d, 0x25, 0x32, 0x46, 0x20, 0x6a, 0x6f, - 0x69, 0x6e, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x69, - 0x6d, 0x67, 0x22, 0x3e, 0x2c, 0x20, 0x66, 0x6a, 0x73, 0x69, 0x6d, 0x67, 0x22, - 0x20, 0x22, 0x29, 0x5b, 0x30, 0x5d, 0x4d, 0x54, 0x6f, 0x70, 0x42, 0x54, 0x79, - 0x70, 0x65, 0x22, 0x6e, 0x65, 0x77, 0x6c, 0x79, 0x44, 0x61, 0x6e, 0x73, 0x6b, - 0x63, 0x7a, 0x65, 0x63, 0x68, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x6b, 0x6e, 0x6f, - 0x77, 0x73, 0x3c, 0x2f, 0x68, 0x35, 0x3e, 0x66, 0x61, 0x71, 0x22, 0x3e, 0x7a, - 0x68, 0x2d, 0x63, 0x6e, 0x31, 0x30, 0x29, 0x3b, 0x0a, 0x2d, 0x31, 0x22, 0x29, - 0x3b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x62, 0x6c, 0x75, 0x65, 0x73, 0x74, 0x72, - 0x75, 0x6c, 0x79, 0x64, 0x61, 0x76, 0x69, 0x73, 0x2e, 0x6a, 0x73, 0x27, 0x3b, - 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x73, 0x74, 0x65, 0x65, 0x6c, 0x20, 0x79, 0x6f, - 0x75, 0x20, 0x68, 0x32, 0x3e, 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6a, - 0x65, 0x73, 0x75, 0x73, 0x31, 0x30, 0x30, 0x25, 0x20, 0x6d, 0x65, 0x6e, 0x75, - 0x2e, 0x0d, 0x0a, 0x09, 0x0d, 0x0a, 0x77, 0x61, 0x6c, 0x65, 0x73, 0x72, 0x69, - 0x73, 0x6b, 0x73, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x64, 0x69, 0x6e, 0x67, - 0x62, 0x2d, 0x6c, 0x69, 0x6b, 0x74, 0x65, 0x61, 0x63, 0x68, 0x67, 0x69, 0x66, - 0x22, 0x20, 0x76, 0x65, 0x67, 0x61, 0x73, 0x64, 0x61, 0x6e, 0x73, 0x6b, 0x65, - 0x65, 0x73, 0x74, 0x69, 0x73, 0x68, 0x71, 0x69, 0x70, 0x73, 0x75, 0x6f, 0x6d, - 0x69, 0x73, 0x6f, 0x62, 0x72, 0x65, 0x64, 0x65, 0x73, 0x64, 0x65, 0x65, 0x6e, - 0x74, 0x72, 0x65, 0x74, 0x6f, 0x64, 0x6f, 0x73, 0x70, 0x75, 0x65, 0x64, 0x65, - 0x61, 0xc3, 0xb1, 0x6f, 0x73, 0x65, 0x73, 0x74, 0xc3, 0xa1, 0x74, 0x69, 0x65, - 0x6e, 0x65, 0x68, 0x61, 0x73, 0x74, 0x61, 0x6f, 0x74, 0x72, 0x6f, 0x73, 0x70, - 0x61, 0x72, 0x74, 0x65, 0x64, 0x6f, 0x6e, 0x64, 0x65, 0x6e, 0x75, 0x65, 0x76, - 0x6f, 0x68, 0x61, 0x63, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6d, 0x69, - 0x73, 0x6d, 0x6f, 0x6d, 0x65, 0x6a, 0x6f, 0x72, 0x6d, 0x75, 0x6e, 0x64, 0x6f, - 0x61, 0x71, 0x75, 0xc3, 0xad, 0x64, 0xc3, 0xad, 0x61, 0x73, 0x73, 0xc3, 0xb3, - 0x6c, 0x6f, 0x61, 0x79, 0x75, 0x64, 0x61, 0x66, 0x65, 0x63, 0x68, 0x61, 0x74, - 0x6f, 0x64, 0x61, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x6f, 0x6d, 0x65, 0x6e, 0x6f, - 0x73, 0x64, 0x61, 0x74, 0x6f, 0x73, 0x6f, 0x74, 0x72, 0x61, 0x73, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6d, 0x75, 0x63, 0x68, 0x6f, 0x61, 0x68, 0x6f, 0x72, 0x61, - 0x6c, 0x75, 0x67, 0x61, 0x72, 0x6d, 0x61, 0x79, 0x6f, 0x72, 0x65, 0x73, 0x74, - 0x6f, 0x73, 0x68, 0x6f, 0x72, 0x61, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x6e, 0x74, 0x65, 0x73, 0x66, 0x6f, 0x74, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x61, - 0x73, 0x70, 0x61, 0xc3, 0xad, 0x73, 0x6e, 0x75, 0x65, 0x76, 0x61, 0x73, 0x61, - 0x6c, 0x75, 0x64, 0x66, 0x6f, 0x72, 0x6f, 0x73, 0x6d, 0x65, 0x64, 0x69, 0x6f, - 0x71, 0x75, 0x69, 0x65, 0x6e, 0x6d, 0x65, 0x73, 0x65, 0x73, 0x70, 0x6f, 0x64, - 0x65, 0x72, 0x63, 0x68, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x72, 0xc3, 0xa1, 0x76, - 0x65, 0x63, 0x65, 0x73, 0x64, 0x65, 0x63, 0x69, 0x72, 0x6a, 0x6f, 0x73, 0xc3, - 0xa9, 0x65, 0x73, 0x74, 0x61, 0x72, 0x76, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x72, - 0x75, 0x70, 0x6f, 0x68, 0x65, 0x63, 0x68, 0x6f, 0x65, 0x6c, 0x6c, 0x6f, 0x73, - 0x74, 0x65, 0x6e, 0x67, 0x6f, 0x61, 0x6d, 0x69, 0x67, 0x6f, 0x63, 0x6f, 0x73, - 0x61, 0x73, 0x6e, 0x69, 0x76, 0x65, 0x6c, 0x67, 0x65, 0x6e, 0x74, 0x65, 0x6d, - 0x69, 0x73, 0x6d, 0x61, 0x61, 0x69, 0x72, 0x65, 0x73, 0x6a, 0x75, 0x6c, 0x69, - 0x6f, 0x74, 0x65, 0x6d, 0x61, 0x73, 0x68, 0x61, 0x63, 0x69, 0x61, 0x66, 0x61, - 0x76, 0x6f, 0x72, 0x6a, 0x75, 0x6e, 0x69, 0x6f, 0x6c, 0x69, 0x62, 0x72, 0x65, - 0x70, 0x75, 0x6e, 0x74, 0x6f, 0x62, 0x75, 0x65, 0x6e, 0x6f, 0x61, 0x75, 0x74, - 0x6f, 0x72, 0x61, 0x62, 0x72, 0x69, 0x6c, 0x62, 0x75, 0x65, 0x6e, 0x61, 0x74, - 0x65, 0x78, 0x74, 0x6f, 0x6d, 0x61, 0x72, 0x7a, 0x6f, 0x73, 0x61, 0x62, 0x65, - 0x72, 0x6c, 0x69, 0x73, 0x74, 0x61, 0x6c, 0x75, 0x65, 0x67, 0x6f, 0x63, 0xc3, - 0xb3, 0x6d, 0x6f, 0x65, 0x6e, 0x65, 0x72, 0x6f, 0x6a, 0x75, 0x65, 0x67, 0x6f, - 0x70, 0x65, 0x72, 0xc3, 0xba, 0x68, 0x61, 0x62, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x6f, 0x79, 0x6e, 0x75, 0x6e, 0x63, 0x61, 0x6d, 0x75, 0x6a, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x6f, 0x72, 0x66, 0x75, 0x65, 0x72, 0x61, 0x6c, 0x69, 0x62, 0x72, - 0x6f, 0x67, 0x75, 0x73, 0x74, 0x61, 0x69, 0x67, 0x75, 0x61, 0x6c, 0x76, 0x6f, - 0x74, 0x6f, 0x73, 0x63, 0x61, 0x73, 0x6f, 0x73, 0x67, 0x75, 0xc3, 0xad, 0x61, - 0x70, 0x75, 0x65, 0x64, 0x6f, 0x73, 0x6f, 0x6d, 0x6f, 0x73, 0x61, 0x76, 0x69, - 0x73, 0x6f, 0x75, 0x73, 0x74, 0x65, 0x64, 0x64, 0x65, 0x62, 0x65, 0x6e, 0x6e, - 0x6f, 0x63, 0x68, 0x65, 0x62, 0x75, 0x73, 0x63, 0x61, 0x66, 0x61, 0x6c, 0x74, - 0x61, 0x65, 0x75, 0x72, 0x6f, 0x73, 0x73, 0x65, 0x72, 0x69, 0x65, 0x64, 0x69, - 0x63, 0x68, 0x6f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x63, 0x6c, 0x61, 0x76, 0x65, - 0x63, 0x61, 0x73, 0x61, 0x73, 0x6c, 0x65, 0xc3, 0xb3, 0x6e, 0x70, 0x6c, 0x61, - 0x7a, 0x6f, 0x6c, 0x61, 0x72, 0x67, 0x6f, 0x6f, 0x62, 0x72, 0x61, 0x73, 0x76, - 0x69, 0x73, 0x74, 0x61, 0x61, 0x70, 0x6f, 0x79, 0x6f, 0x6a, 0x75, 0x6e, 0x74, - 0x6f, 0x74, 0x72, 0x61, 0x74, 0x61, 0x76, 0x69, 0x73, 0x74, 0x6f, 0x63, 0x72, - 0x65, 0x61, 0x72, 0x63, 0x61, 0x6d, 0x70, 0x6f, 0x68, 0x65, 0x6d, 0x6f, 0x73, - 0x63, 0x69, 0x6e, 0x63, 0x6f, 0x63, 0x61, 0x72, 0x67, 0x6f, 0x70, 0x69, 0x73, - 0x6f, 0x73, 0x6f, 0x72, 0x64, 0x65, 0x6e, 0x68, 0x61, 0x63, 0x65, 0x6e, 0xc3, - 0xa1, 0x72, 0x65, 0x61, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x72, - 0x6f, 0x63, 0x65, 0x72, 0x63, 0x61, 0x70, 0x75, 0x65, 0x64, 0x61, 0x70, 0x61, - 0x70, 0x65, 0x6c, 0x6d, 0x65, 0x6e, 0x6f, 0x72, 0xc3, 0xba, 0x74, 0x69, 0x6c, - 0x63, 0x6c, 0x61, 0x72, 0x6f, 0x6a, 0x6f, 0x72, 0x67, 0x65, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x70, 0x6f, 0x6e, 0x65, 0x72, 0x74, 0x61, 0x72, 0x64, 0x65, 0x6e, - 0x61, 0x64, 0x69, 0x65, 0x6d, 0x61, 0x72, 0x63, 0x61, 0x73, 0x69, 0x67, 0x75, - 0x65, 0x65, 0x6c, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6c, 0x6f, 0x63, 0x6f, - 0x63, 0x68, 0x65, 0x6d, 0x6f, 0x74, 0x6f, 0x73, 0x6d, 0x61, 0x64, 0x72, 0x65, - 0x63, 0x6c, 0x61, 0x73, 0x65, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x69, 0xc3, - 0xb1, 0x6f, 0x71, 0x75, 0x65, 0x64, 0x61, 0x70, 0x61, 0x73, 0x61, 0x72, 0x62, - 0x61, 0x6e, 0x63, 0x6f, 0x68, 0x69, 0x6a, 0x6f, 0x73, 0x76, 0x69, 0x61, 0x6a, - 0x65, 0x70, 0x61, 0x62, 0x6c, 0x6f, 0xc3, 0xa9, 0x73, 0x74, 0x65, 0x76, 0x69, - 0x65, 0x6e, 0x65, 0x72, 0x65, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x6a, 0x61, 0x72, - 0x66, 0x6f, 0x6e, 0x64, 0x6f, 0x63, 0x61, 0x6e, 0x61, 0x6c, 0x6e, 0x6f, 0x72, - 0x74, 0x65, 0x6c, 0x65, 0x74, 0x72, 0x61, 0x63, 0x61, 0x75, 0x73, 0x61, 0x74, - 0x6f, 0x6d, 0x61, 0x72, 0x6d, 0x61, 0x6e, 0x6f, 0x73, 0x6c, 0x75, 0x6e, 0x65, - 0x73, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x76, 0x69, 0x6c, 0x6c, 0x61, 0x76, 0x65, - 0x6e, 0x64, 0x6f, 0x70, 0x65, 0x73, 0x61, 0x72, 0x74, 0x69, 0x70, 0x6f, 0x73, - 0x74, 0x65, 0x6e, 0x67, 0x61, 0x6d, 0x61, 0x72, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x76, 0x61, 0x70, 0x61, 0x64, 0x72, 0x65, 0x75, 0x6e, 0x69, 0x64, 0x6f, 0x76, - 0x61, 0x6d, 0x6f, 0x73, 0x7a, 0x6f, 0x6e, 0x61, 0x73, 0x61, 0x6d, 0x62, 0x6f, - 0x73, 0x62, 0x61, 0x6e, 0x64, 0x61, 0x6d, 0x61, 0x72, 0x69, 0x61, 0x61, 0x62, - 0x75, 0x73, 0x6f, 0x6d, 0x75, 0x63, 0x68, 0x61, 0x73, 0x75, 0x62, 0x69, 0x72, - 0x72, 0x69, 0x6f, 0x6a, 0x61, 0x76, 0x69, 0x76, 0x69, 0x72, 0x67, 0x72, 0x61, - 0x64, 0x6f, 0x63, 0x68, 0x69, 0x63, 0x61, 0x61, 0x6c, 0x6c, 0xc3, 0xad, 0x6a, - 0x6f, 0x76, 0x65, 0x6e, 0x64, 0x69, 0x63, 0x68, 0x61, 0x65, 0x73, 0x74, 0x61, - 0x6e, 0x74, 0x61, 0x6c, 0x65, 0x73, 0x73, 0x61, 0x6c, 0x69, 0x72, 0x73, 0x75, - 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x73, 0x6f, 0x73, 0x66, 0x69, 0x6e, 0x65, 0x73, - 0x6c, 0x6c, 0x61, 0x6d, 0x61, 0x62, 0x75, 0x73, 0x63, 0x6f, 0xc3, 0xa9, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6e, 0x65, 0x67, 0x72, 0x6f, 0x70, - 0x6c, 0x61, 0x7a, 0x61, 0x68, 0x75, 0x6d, 0x6f, 0x72, 0x70, 0x61, 0x67, 0x61, - 0x72, 0x6a, 0x75, 0x6e, 0x74, 0x61, 0x64, 0x6f, 0x62, 0x6c, 0x65, 0x69, 0x73, - 0x6c, 0x61, 0x73, 0x62, 0x6f, 0x6c, 0x73, 0x61, 0x62, 0x61, 0xc3, 0xb1, 0x6f, - 0x68, 0x61, 0x62, 0x6c, 0x61, 0x6c, 0x75, 0x63, 0x68, 0x61, 0xc3, 0x81, 0x72, - 0x65, 0x61, 0x64, 0x69, 0x63, 0x65, 0x6e, 0x6a, 0x75, 0x67, 0x61, 0x72, 0x6e, - 0x6f, 0x74, 0x61, 0x73, 0x76, 0x61, 0x6c, 0x6c, 0x65, 0x61, 0x6c, 0x6c, 0xc3, - 0xa1, 0x63, 0x61, 0x72, 0x67, 0x61, 0x64, 0x6f, 0x6c, 0x6f, 0x72, 0x61, 0x62, - 0x61, 0x6a, 0x6f, 0x65, 0x73, 0x74, 0xc3, 0xa9, 0x67, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x6d, 0x61, 0x72, 0x69, 0x6f, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x63, 0x6f, 0x73, 0x74, 0x6f, 0x66, 0x69, 0x63, 0x68, 0x61, 0x70, - 0x6c, 0x61, 0x74, 0x61, 0x68, 0x6f, 0x67, 0x61, 0x72, 0x61, 0x72, 0x74, 0x65, - 0x73, 0x6c, 0x65, 0x79, 0x65, 0x73, 0x61, 0x71, 0x75, 0x65, 0x6c, 0x6d, 0x75, - 0x73, 0x65, 0x6f, 0x62, 0x61, 0x73, 0x65, 0x73, 0x70, 0x6f, 0x63, 0x6f, 0x73, - 0x6d, 0x69, 0x74, 0x61, 0x64, 0x63, 0x69, 0x65, 0x6c, 0x6f, 0x63, 0x68, 0x69, - 0x63, 0x6f, 0x6d, 0x69, 0x65, 0x64, 0x6f, 0x67, 0x61, 0x6e, 0x61, 0x72, 0x73, - 0x61, 0x6e, 0x74, 0x6f, 0x65, 0x74, 0x61, 0x70, 0x61, 0x64, 0x65, 0x62, 0x65, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x61, 0x72, 0x65, 0x64, 0x65, 0x73, 0x73, 0x69, - 0x65, 0x74, 0x65, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x63, 0x6f, 0x72, 0x65, 0x61, - 0x64, 0x75, 0x64, 0x61, 0x73, 0x64, 0x65, 0x73, 0x65, 0x6f, 0x76, 0x69, 0x65, - 0x6a, 0x6f, 0x64, 0x65, 0x73, 0x65, 0x61, 0x61, 0x67, 0x75, 0x61, 0x73, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x63, 0x72, 0x6f, 0x6c, 0x6c, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6d, - 0x65, 0x64, 0x69, 0x75, 0x6d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x73, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x61, - 0x6c, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, - 0x70, 0x72, 0x69, 0x6e, 0x67, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x6d, 0x6f, - 0x62, 0x69, 0x6c, 0x65, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x70, 0x68, 0x6f, - 0x74, 0x6f, 0x73, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x73, 0x6f, 0x63, 0x69, 0x61, - 0x6c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x66, 0x72, 0x69, - 0x65, 0x6e, 0x64, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x65, - 0x78, 0x70, 0x61, 0x6e, 0x64, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x73, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x6c, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x73, 0x69, 0x67, - 0x6e, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x73, - 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x6c, 0x65, 0x74, 0x74, 0x65, - 0x72, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x75, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x73, 0x73, 0x63, 0x68, - 0x6f, 0x6f, 0x6c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x73, 0x68, 0x61, 0x64, - 0x6f, 0x77, 0x64, 0x65, 0x62, 0x61, 0x74, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x6c, 0x65, 0x61, 0x67, 0x75, 0x65, 0x63, - 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6e, 0x6f, - 0x74, 0x69, 0x63, 0x65, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x72, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x71, 0x75, 0x61, 0x72, - 0x65, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x6d, 0x6f, 0x76, 0x69, 0x6e, 0x67, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x77, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x46, 0x72, - 0x61, 0x6e, 0x63, 0x65, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x74, 0x72, - 0x6f, 0x6e, 0x67, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x4c, 0x6f, 0x6e, 0x64, - 0x6f, 0x6e, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x65, - 0x64, 0x64, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, - 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x73, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x63, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x79, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x74, 0x74, 0x61, - 0x63, 0x6b, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x66, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x3e, - 0x6f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x76, - 0x61, 0x6c, 0x6c, 0x65, 0x79, 0x63, 0x61, 0x75, 0x73, 0x65, 0x73, 0x6c, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x70, 0x6f, 0x72, - 0x74, 0x73, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x73, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x76, 0x69, - 0x73, 0x75, 0x61, 0x6c, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x6d, 0x75, 0x73, 0x65, - 0x75, 0x6d, 0x6d, 0x6f, 0x76, 0x69, 0x65, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6d, 0x6f, 0x73, 0x74, 0x6c, 0x79, - 0x6d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x68, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x75, 0x72, 0x76, 0x65, 0x79, 0x62, 0x65, 0x66, - 0x6f, 0x72, 0x65, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x6d, 0x6f, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x70, 0x65, 0x65, 0x63, 0x68, 0x6d, 0x6f, 0x74, 0x69, 0x6f, - 0x6e, 0x69, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, - 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x65, - 0x78, 0x69, 0x73, 0x74, 0x73, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x45, 0x75, - 0x72, 0x6f, 0x70, 0x65, 0x67, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x6c, 0x65, 0x67, - 0x61, 0x63, 0x79, 0x6d, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x65, 0x6e, 0x6f, 0x75, - 0x67, 0x68, 0x63, 0x61, 0x72, 0x65, 0x65, 0x72, 0x61, 0x6e, 0x73, 0x77, 0x65, - 0x72, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6c, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, - 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x74, 0x6f, - 0x70, 0x69, 0x63, 0x73, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x66, 0x61, 0x74, - 0x68, 0x65, 0x72, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x6d, 0x70, - 0x6c, 0x79, 0x72, 0x61, 0x69, 0x73, 0x65, 0x64, 0x65, 0x73, 0x63, 0x61, 0x70, - 0x65, 0x63, 0x68, 0x6f, 0x73, 0x65, 0x6e, 0x63, 0x68, 0x75, 0x72, 0x63, 0x68, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x63, - 0x6f, 0x72, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x6d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x6f, 0x66, 0x66, 0x65, 0x72, - 0x73, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, - 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x73, - 0x69, 0x6c, 0x76, 0x65, 0x72, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x62, 0x72, 0x6f, - 0x77, 0x73, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x47, 0x6c, 0x6f, 0x62, - 0x61, 0x6c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x77, 0x69, 0x64, 0x67, 0x65, - 0x74, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, - 0x6e, 0x6f, 0x77, 0x72, 0x61, 0x70, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x61, - 0x66, 0x65, 0x74, 0x79, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x73, 0x70, 0x69, - 0x72, 0x69, 0x74, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x70, 0x72, 0x65, - 0x61, 0x64, 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x6e, 0x65, 0x65, 0x64, 0x65, - 0x64, 0x72, 0x75, 0x73, 0x73, 0x69, 0x61, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x62, - 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x66, 0x61, 0x63, - 0x74, 0x6f, 0x72, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2d, 0x62, 0x61, 0x73, - 0x65, 0x64, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x79, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x64, - 0x68, 0x65, 0x6c, 0x70, 0x65, 0x64, 0x43, 0x68, 0x75, 0x72, 0x63, 0x68, 0x69, - 0x6d, 0x70, 0x61, 0x63, 0x74, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x61, 0x6c, - 0x77, 0x61, 0x79, 0x73, 0x6c, 0x6f, 0x67, 0x6f, 0x22, 0x20, 0x62, 0x6f, 0x74, - 0x74, 0x6f, 0x6d, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x3e, 0x29, 0x7b, 0x76, 0x61, - 0x72, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6f, 0x72, 0x61, 0x6e, 0x67, - 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, - 0x63, 0x6f, 0x75, 0x70, 0x6c, 0x65, 0x67, 0x61, 0x72, 0x64, 0x65, 0x6e, 0x62, - 0x72, 0x69, 0x64, 0x67, 0x65, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x62, 0x65, 0x61, 0x75, 0x74, - 0x79, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x66, 0x6f, 0x72, 0x67, 0x6f, 0x74, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x61, - 0x6c, 0x6d, 0x6f, 0x73, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x62, 0x69, - 0x6c, 0x65, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x65, 0x73, 0x75, 0x70, 0x70, 0x6c, - 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, - 0x76, 0x69, 0x65, 0x77, 0x65, 0x64, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x63, - 0x6f, 0x75, 0x72, 0x73, 0x65, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x73, - 0x6c, 0x61, 0x6e, 0x64, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x63, 0x6f, 0x6f, - 0x6b, 0x69, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x6d, 0x61, 0x7a, - 0x6f, 0x6e, 0x6d, 0x6f, 0x64, 0x65, 0x72, 0x6e, 0x61, 0x64, 0x76, 0x69, 0x63, - 0x65, 0x69, 0x6e, 0x3c, 0x2f, 0x61, 0x3e, 0x3a, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x64, 0x69, 0x61, 0x6c, 0x6f, 0x67, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x42, - 0x45, 0x47, 0x49, 0x4e, 0x20, 0x4d, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x73, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x73, 0x6c, 0x61, - 0x6e, 0x64, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x45, 0x6d, 0x70, 0x69, 0x72, - 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6e, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x6d, - 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x2e, 0x0a, - 0x0a, 0x4f, 0x6e, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x6d, 0x65, 0x6e, - 0x75, 0x22, 0x3e, 0x50, 0x68, 0x69, 0x6c, 0x69, 0x70, 0x61, 0x77, 0x61, 0x72, - 0x64, 0x73, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x69, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, - 0x73, 0x6b, 0x69, 0x6c, 0x6c, 0x73, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x77, 0x65, - 0x65, 0x6b, 0x6c, 0x79, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x62, 0x65, 0x68, - 0x69, 0x6e, 0x64, 0x64, 0x6f, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x6f, 0x67, 0x67, - 0x65, 0x64, 0x75, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x3c, 0x2f, 0x62, 0x3e, 0x3c, - 0x2f, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x73, 0x70, 0x6c, 0x61, 0x6e, 0x74, 0x73, - 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, - 0x73, 0x73, 0x75, 0x65, 0x64, 0x33, 0x30, 0x30, 0x70, 0x78, 0x7c, 0x63, 0x61, - 0x6e, 0x61, 0x64, 0x61, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x72, 0x61, 0x7a, - 0x69, 0x6c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x6f, 0x22, - 0x3e, 0x62, 0x65, 0x79, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x63, 0x61, 0x6c, 0x65, - 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x6d, - 0x61, 0x72, 0x69, 0x6e, 0x65, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x63, 0x61, - 0x6d, 0x65, 0x72, 0x61, 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x0a, 0x5f, 0x66, 0x6f, - 0x72, 0x6d, 0x22, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x73, 0x74, 0x72, 0x65, - 0x73, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x0d, 0x0a, 0x2e, 0x67, 0x69, 0x66, 0x22, - 0x20, 0x6f, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, - 0x4f, 0x78, 0x66, 0x6f, 0x72, 0x64, 0x73, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x75, 0x72, 0x76, 0x69, 0x76, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x66, 0x65, - 0x6d, 0x61, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x73, 0x69, 0x7a, - 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x74, 0x65, 0x78, 0x74, - 0x22, 0x3e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x74, 0x68, 0x61, 0x6e, 0x6b, - 0x73, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, - 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x61, 0x6e, 0x79, 0x6f, 0x6e, 0x65, 0x41, - 0x66, 0x72, 0x69, 0x63, 0x61, 0x61, 0x67, 0x72, 0x65, 0x65, 0x64, 0x72, 0x65, - 0x63, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x3c, 0x62, 0x72, - 0x20, 0x2f, 0x3e, 0x77, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x70, 0x72, 0x69, 0x63, - 0x65, 0x73, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x7c, 0x7c, 0x20, 0x7b, 0x7d, - 0x3b, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3e, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x75, 0x6e, 0x64, 0x61, 0x79, 0x77, 0x72, 0x61, 0x70, 0x22, 0x3e, 0x66, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x63, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x6d, 0x69, - 0x6e, 0x75, 0x74, 0x65, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x71, 0x75, 0x6f, - 0x74, 0x65, 0x73, 0x31, 0x35, 0x30, 0x70, 0x78, 0x7c, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x22, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3b, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x31, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x73, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x70, 0x72, - 0x69, 0x6e, 0x63, 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x2e, 0x70, 0x6e, - 0x67, 0x22, 0x20, 0x66, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x70, 0x61, 0x70, 0x65, 0x72, 0x73, 0x73, 0x6f, 0x75, 0x6e, 0x64, - 0x73, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x73, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, 0x26, - 0x61, 0x6d, 0x70, 0x3b, 0x20, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x2e, 0x20, - 0x57, 0x69, 0x74, 0x68, 0x73, 0x74, 0x75, 0x64, 0x69, 0x6f, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x73, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x70, 0x72, 0x6f, 0x66, - 0x69, 0x74, 0x6a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x61, 0x6e, 0x6e, 0x75, 0x61, - 0x6c, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x62, 0x6f, 0x75, 0x67, 0x68, 0x74, - 0x66, 0x61, 0x6d, 0x6f, 0x75, 0x73, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x6c, - 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0x69, 0x73, - 0x72, 0x61, 0x65, 0x6c, 0x73, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x63, - 0x69, 0x64, 0x65, 0x68, 0x6f, 0x6d, 0x65, 0x22, 0x3e, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x62, 0x72, 0x61, 0x6e, 0x63, - 0x68, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x64, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x3c, 0x72, - 0x61, 0x63, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x2d, 0x2d, - 0x26, 0x67, 0x74, 0x3b, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x73, 0x65, 0x78, - 0x75, 0x61, 0x6c, 0x62, 0x75, 0x72, 0x65, 0x61, 0x75, 0x2e, 0x6a, 0x70, 0x67, - 0x22, 0x20, 0x31, 0x30, 0x2c, 0x30, 0x30, 0x30, 0x6f, 0x62, 0x74, 0x61, 0x69, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x73, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x65, 0x64, 0x79, 0x6d, - 0x65, 0x6e, 0x75, 0x22, 0x20, 0x6c, 0x79, 0x72, 0x69, 0x63, 0x73, 0x74, 0x6f, - 0x64, 0x61, 0x79, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x65, 0x64, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x79, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, 0x46, 0x61, 0x6d, 0x69, - 0x6c, 0x79, 0x6c, 0x6f, 0x6f, 0x6b, 0x65, 0x64, 0x4d, 0x61, 0x72, 0x6b, 0x65, - 0x74, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x74, 0x75, 0x72, 0x6b, 0x65, 0x79, 0x29, 0x3b, 0x76, 0x61, 0x72, 0x20, 0x66, - 0x6f, 0x72, 0x65, 0x73, 0x74, 0x67, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x7d, 0x65, 0x6c, - 0x73, 0x65, 0x7b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x67, - 0x3c, 0x2f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x6c, 0x6f, 0x67, 0x69, 0x6e, - 0x2e, 0x66, 0x61, 0x73, 0x74, 0x65, 0x72, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, - 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x31, 0x30, 0x70, 0x78, 0x20, 0x30, 0x70, - 0x72, 0x61, 0x67, 0x6d, 0x61, 0x66, 0x72, 0x69, 0x64, 0x61, 0x79, 0x6a, 0x75, - 0x6e, 0x69, 0x6f, 0x72, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x64, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x35, 0x2c, 0x30, 0x30, 0x30, 0x20, 0x70, 0x61, 0x67, 0x65, 0x22, - 0x3e, 0x62, 0x6f, 0x73, 0x74, 0x6f, 0x6e, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x28, - 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x66, 0x6f, 0x72, 0x75, 0x6d, 0x73, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x66, 0x69, 0x6c, - 0x6c, 0x65, 0x64, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x72, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x28, 0x61, 0x70, 0x70, 0x65, 0x61, - 0x72, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x3e, - 0x62, 0x6f, 0x64, 0x79, 0x22, 0x3e, 0x0a, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x54, - 0x68, 0x6f, 0x75, 0x67, 0x68, 0x73, 0x65, 0x65, 0x69, 0x6e, 0x67, 0x6a, 0x65, - 0x72, 0x73, 0x65, 0x79, 0x4e, 0x65, 0x77, 0x73, 0x3c, 0x2f, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x79, 0x65, 0x78, 0x70, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x6a, 0x75, - 0x72, 0x79, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x43, 0x6f, 0x6f, 0x6b, 0x69, - 0x65, 0x53, 0x54, 0x41, 0x52, 0x54, 0x20, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x73, - 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x6e, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x70, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x62, 0x6f, - 0x78, 0x22, 0x3e, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x44, 0x61, - 0x76, 0x69, 0x64, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x41, 0x70, 0x72, 0x69, 0x6c, - 0x20, 0x72, 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, - 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x6d, 0x6f, 0x72, 0x65, 0x22, 0x3e, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x73, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x63, 0x61, - 0x6d, 0x70, 0x75, 0x73, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x7c, 0x7c, 0x20, - 0x5b, 0x5d, 0x3b, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x2e, 0x67, 0x75, 0x69, 0x74, - 0x61, 0x72, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3a, 0x73, 0x68, 0x6f, 0x77, 0x65, 0x64, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x20, - 0x2e, 0x70, 0x68, 0x70, 0x22, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x73, 0x77, 0x69, 0x6c, 0x73, 0x6f, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x72, 0x65, 0x6c, 0x69, 0x65, 0x66, 0x73, 0x77, 0x65, - 0x64, 0x65, 0x6e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x61, 0x73, 0x69, - 0x6c, 0x79, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x0a, 0x0a, 0x57, 0x68, 0x69, 0x6c, 0x74, 0x61, 0x79, 0x6c, 0x6f, 0x72, - 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 0x72, 0x65, 0x73, 0x6f, 0x72, 0x74, 0x66, - 0x72, 0x65, 0x6e, 0x63, 0x68, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x22, 0x29, - 0x20, 0x2b, 0x20, 0x22, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x62, 0x75, 0x79, - 0x69, 0x6e, 0x67, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x73, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x6f, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x35, 0x70, 0x78, 0x3b, 0x22, 0x3e, - 0x76, 0x73, 0x70, 0x61, 0x63, 0x65, 0x70, 0x6f, 0x73, 0x74, 0x65, 0x72, 0x6d, - 0x61, 0x6a, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x66, 0x66, 0x65, 0x65, 0x6d, 0x61, - 0x72, 0x74, 0x69, 0x6e, 0x6d, 0x61, 0x74, 0x75, 0x72, 0x65, 0x68, 0x61, 0x70, - 0x70, 0x65, 0x6e, 0x3c, 0x2f, 0x6e, 0x61, 0x76, 0x3e, 0x6b, 0x61, 0x6e, 0x73, - 0x61, 0x73, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3e, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x73, 0x3d, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, - 0x68, 0x73, 0x70, 0x61, 0x63, 0x65, 0x30, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x20, - 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x20, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x50, 0x6f, - 0x6c, 0x73, 0x6b, 0x69, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x6a, 0x6f, 0x72, - 0x64, 0x61, 0x6e, 0x42, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x20, 0x2d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x2e, 0x68, 0x74, 0x6d, - 0x6c, 0x6e, 0x65, 0x77, 0x73, 0x22, 0x3e, 0x30, 0x31, 0x2e, 0x6a, 0x70, 0x67, - 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6d, - 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x65, 0x6e, 0x69, 0x6f, 0x72, 0x49, 0x53, - 0x42, 0x4e, 0x20, 0x30, 0x30, 0x2c, 0x30, 0x30, 0x30, 0x20, 0x67, 0x75, 0x69, - 0x64, 0x65, 0x73, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x72, 0x65, 0x70, 0x61, 0x69, 0x72, 0x2e, 0x78, 0x6d, 0x6c, 0x22, - 0x20, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2e, 0x68, 0x74, 0x6d, 0x6c, - 0x2d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x72, 0x65, 0x67, 0x45, 0x78, 0x70, 0x3a, - 0x68, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x76, 0x69, - 0x72, 0x67, 0x69, 0x6e, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x73, 0x3c, 0x2f, 0x74, - 0x72, 0x3e, 0x0d, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x0a, 0x09, 0x76, 0x61, - 0x72, 0x20, 0x3e, 0x27, 0x29, 0x3b, 0x0a, 0x09, 0x3c, 0x2f, 0x74, 0x64, 0x3e, - 0x0a, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x62, 0x61, 0x68, 0x61, 0x73, 0x61, - 0x62, 0x72, 0x61, 0x73, 0x69, 0x6c, 0x67, 0x61, 0x6c, 0x65, 0x67, 0x6f, 0x6d, - 0x61, 0x67, 0x79, 0x61, 0x72, 0x70, 0x6f, 0x6c, 0x73, 0x6b, 0x69, 0x73, 0x72, - 0x70, 0x73, 0x6b, 0x69, 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, 0x88, 0xe4, 0xb8, 0xad, - 0xe6, 0x96, 0x87, 0xe7, 0xae, 0x80, 0xe4, 0xbd, 0x93, 0xe7, 0xb9, 0x81, 0xe9, - 0xab, 0x94, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0xe4, 0xb8, 0xad, 0xe5, 0x9b, - 0xbd, 0xe6, 0x88, 0x91, 0xe4, 0xbb, 0xac, 0xe4, 0xb8, 0x80, 0xe4, 0xb8, 0xaa, - 0xe5, 0x85, 0xac, 0xe5, 0x8f, 0xb8, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0xe8, - 0xae, 0xba, 0xe5, 0x9d, 0x9b, 0xe5, 0x8f, 0xaf, 0xe4, 0xbb, 0xa5, 0xe6, 0x9c, - 0x8d, 0xe5, 0x8a, 0xa1, 0xe6, 0x97, 0xb6, 0xe9, 0x97, 0xb4, 0xe4, 0xb8, 0xaa, - 0xe4, 0xba, 0xba, 0xe4, 0xba, 0xa7, 0xe5, 0x93, 0x81, 0xe8, 0x87, 0xaa, 0xe5, - 0xb7, 0xb1, 0xe4, 0xbc, 0x81, 0xe4, 0xb8, 0x9a, 0xe6, 0x9f, 0xa5, 0xe7, 0x9c, - 0x8b, 0xe5, 0xb7, 0xa5, 0xe4, 0xbd, 0x9c, 0xe8, 0x81, 0x94, 0xe7, 0xb3, 0xbb, - 0xe6, 0xb2, 0xa1, 0xe6, 0x9c, 0x89, 0xe7, 0xbd, 0x91, 0xe7, 0xab, 0x99, 0xe6, - 0x89, 0x80, 0xe6, 0x9c, 0x89, 0xe8, 0xaf, 0x84, 0xe8, 0xae, 0xba, 0xe4, 0xb8, - 0xad, 0xe5, 0xbf, 0x83, 0xe6, 0x96, 0x87, 0xe7, 0xab, 0xa0, 0xe7, 0x94, 0xa8, - 0xe6, 0x88, 0xb7, 0xe9, 0xa6, 0x96, 0xe9, 0xa1, 0xb5, 0xe4, 0xbd, 0x9c, 0xe8, - 0x80, 0x85, 0xe6, 0x8a, 0x80, 0xe6, 0x9c, 0xaf, 0xe9, 0x97, 0xae, 0xe9, 0xa2, - 0x98, 0xe7, 0x9b, 0xb8, 0xe5, 0x85, 0xb3, 0xe4, 0xb8, 0x8b, 0xe8, 0xbd, 0xbd, - 0xe6, 0x90, 0x9c, 0xe7, 0xb4, 0xa2, 0xe4, 0xbd, 0xbf, 0xe7, 0x94, 0xa8, 0xe8, - 0xbd, 0xaf, 0xe4, 0xbb, 0xb6, 0xe5, 0x9c, 0xa8, 0xe7, 0xba, 0xbf, 0xe4, 0xb8, - 0xbb, 0xe9, 0xa2, 0x98, 0xe8, 0xb5, 0x84, 0xe6, 0x96, 0x99, 0xe8, 0xa7, 0x86, - 0xe9, 0xa2, 0x91, 0xe5, 0x9b, 0x9e, 0xe5, 0xa4, 0x8d, 0xe6, 0xb3, 0xa8, 0xe5, - 0x86, 0x8c, 0xe7, 0xbd, 0x91, 0xe7, 0xbb, 0x9c, 0xe6, 0x94, 0xb6, 0xe8, 0x97, - 0x8f, 0xe5, 0x86, 0x85, 0xe5, 0xae, 0xb9, 0xe6, 0x8e, 0xa8, 0xe8, 0x8d, 0x90, - 0xe5, 0xb8, 0x82, 0xe5, 0x9c, 0xba, 0xe6, 0xb6, 0x88, 0xe6, 0x81, 0xaf, 0xe7, - 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xe5, 0x8f, 0x91, 0xe5, 0xb8, 0x83, 0xe4, 0xbb, - 0x80, 0xe4, 0xb9, 0x88, 0xe5, 0xa5, 0xbd, 0xe5, 0x8f, 0x8b, 0xe7, 0x94, 0x9f, - 0xe6, 0xb4, 0xbb, 0xe5, 0x9b, 0xbe, 0xe7, 0x89, 0x87, 0xe5, 0x8f, 0x91, 0xe5, - 0xb1, 0x95, 0xe5, 0xa6, 0x82, 0xe6, 0x9e, 0x9c, 0xe6, 0x89, 0x8b, 0xe6, 0x9c, - 0xba, 0xe6, 0x96, 0xb0, 0xe9, 0x97, 0xbb, 0xe6, 0x9c, 0x80, 0xe6, 0x96, 0xb0, - 0xe6, 0x96, 0xb9, 0xe5, 0xbc, 0x8f, 0xe5, 0x8c, 0x97, 0xe4, 0xba, 0xac, 0xe6, - 0x8f, 0x90, 0xe4, 0xbe, 0x9b, 0xe5, 0x85, 0xb3, 0xe4, 0xba, 0x8e, 0xe6, 0x9b, - 0xb4, 0xe5, 0xa4, 0x9a, 0xe8, 0xbf, 0x99, 0xe4, 0xb8, 0xaa, 0xe7, 0xb3, 0xbb, - 0xe7, 0xbb, 0x9f, 0xe7, 0x9f, 0xa5, 0xe9, 0x81, 0x93, 0xe6, 0xb8, 0xb8, 0xe6, - 0x88, 0x8f, 0xe5, 0xb9, 0xbf, 0xe5, 0x91, 0x8a, 0xe5, 0x85, 0xb6, 0xe4, 0xbb, - 0x96, 0xe5, 0x8f, 0x91, 0xe8, 0xa1, 0xa8, 0xe5, 0xae, 0x89, 0xe5, 0x85, 0xa8, - 0xe7, 0xac, 0xac, 0xe4, 0xb8, 0x80, 0xe4, 0xbc, 0x9a, 0xe5, 0x91, 0x98, 0xe8, - 0xbf, 0x9b, 0xe8, 0xa1, 0x8c, 0xe7, 0x82, 0xb9, 0xe5, 0x87, 0xbb, 0xe7, 0x89, - 0x88, 0xe6, 0x9d, 0x83, 0xe7, 0x94, 0xb5, 0xe5, 0xad, 0x90, 0xe4, 0xb8, 0x96, - 0xe7, 0x95, 0x8c, 0xe8, 0xae, 0xbe, 0xe8, 0xae, 0xa1, 0xe5, 0x85, 0x8d, 0xe8, - 0xb4, 0xb9, 0xe6, 0x95, 0x99, 0xe8, 0x82, 0xb2, 0xe5, 0x8a, 0xa0, 0xe5, 0x85, - 0xa5, 0xe6, 0xb4, 0xbb, 0xe5, 0x8a, 0xa8, 0xe4, 0xbb, 0x96, 0xe4, 0xbb, 0xac, - 0xe5, 0x95, 0x86, 0xe5, 0x93, 0x81, 0xe5, 0x8d, 0x9a, 0xe5, 0xae, 0xa2, 0xe7, - 0x8e, 0xb0, 0xe5, 0x9c, 0xa8, 0xe4, 0xb8, 0x8a, 0xe6, 0xb5, 0xb7, 0xe5, 0xa6, - 0x82, 0xe4, 0xbd, 0x95, 0xe5, 0xb7, 0xb2, 0xe7, 0xbb, 0x8f, 0xe7, 0x95, 0x99, - 0xe8, 0xa8, 0x80, 0xe8, 0xaf, 0xa6, 0xe7, 0xbb, 0x86, 0xe7, 0xa4, 0xbe, 0xe5, - 0x8c, 0xba, 0xe7, 0x99, 0xbb, 0xe5, 0xbd, 0x95, 0xe6, 0x9c, 0xac, 0xe7, 0xab, - 0x99, 0xe9, 0x9c, 0x80, 0xe8, 0xa6, 0x81, 0xe4, 0xbb, 0xb7, 0xe6, 0xa0, 0xbc, - 0xe6, 0x94, 0xaf, 0xe6, 0x8c, 0x81, 0xe5, 0x9b, 0xbd, 0xe9, 0x99, 0x85, 0xe9, - 0x93, 0xbe, 0xe6, 0x8e, 0xa5, 0xe5, 0x9b, 0xbd, 0xe5, 0xae, 0xb6, 0xe5, 0xbb, - 0xba, 0xe8, 0xae, 0xbe, 0xe6, 0x9c, 0x8b, 0xe5, 0x8f, 0x8b, 0xe9, 0x98, 0x85, - 0xe8, 0xaf, 0xbb, 0xe6, 0xb3, 0x95, 0xe5, 0xbe, 0x8b, 0xe4, 0xbd, 0x8d, 0xe7, - 0xbd, 0xae, 0xe7, 0xbb, 0x8f, 0xe6, 0xb5, 0x8e, 0xe9, 0x80, 0x89, 0xe6, 0x8b, - 0xa9, 0xe8, 0xbf, 0x99, 0xe6, 0xa0, 0xb7, 0xe5, 0xbd, 0x93, 0xe5, 0x89, 0x8d, - 0xe5, 0x88, 0x86, 0xe7, 0xb1, 0xbb, 0xe6, 0x8e, 0x92, 0xe8, 0xa1, 0x8c, 0xe5, - 0x9b, 0xa0, 0xe4, 0xb8, 0xba, 0xe4, 0xba, 0xa4, 0xe6, 0x98, 0x93, 0xe6, 0x9c, - 0x80, 0xe5, 0x90, 0x8e, 0xe9, 0x9f, 0xb3, 0xe4, 0xb9, 0x90, 0xe4, 0xb8, 0x8d, - 0xe8, 0x83, 0xbd, 0xe9, 0x80, 0x9a, 0xe8, 0xbf, 0x87, 0xe8, 0xa1, 0x8c, 0xe4, - 0xb8, 0x9a, 0xe7, 0xa7, 0x91, 0xe6, 0x8a, 0x80, 0xe5, 0x8f, 0xaf, 0xe8, 0x83, - 0xbd, 0xe8, 0xae, 0xbe, 0xe5, 0xa4, 0x87, 0xe5, 0x90, 0x88, 0xe4, 0xbd, 0x9c, - 0xe5, 0xa4, 0xa7, 0xe5, 0xae, 0xb6, 0xe7, 0xa4, 0xbe, 0xe4, 0xbc, 0x9a, 0xe7, - 0xa0, 0x94, 0xe7, 0xa9, 0xb6, 0xe4, 0xb8, 0x93, 0xe4, 0xb8, 0x9a, 0xe5, 0x85, - 0xa8, 0xe9, 0x83, 0xa8, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe8, 0xbf, 0x99, - 0xe9, 0x87, 0x8c, 0xe8, 0xbf, 0x98, 0xe6, 0x98, 0xaf, 0xe5, 0xbc, 0x80, 0xe5, - 0xa7, 0x8b, 0xe6, 0x83, 0x85, 0xe5, 0x86, 0xb5, 0xe7, 0x94, 0xb5, 0xe8, 0x84, - 0x91, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x93, 0x81, 0xe7, 0x89, 0x8c, - 0xe5, 0xb8, 0xae, 0xe5, 0x8a, 0xa9, 0xe6, 0x96, 0x87, 0xe5, 0x8c, 0x96, 0xe8, - 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe5, 0xa4, 0xa7, 0xe5, 0xad, 0xa6, 0xe5, 0xad, - 0xa6, 0xe4, 0xb9, 0xa0, 0xe5, 0x9c, 0xb0, 0xe5, 0x9d, 0x80, 0xe6, 0xb5, 0x8f, - 0xe8, 0xa7, 0x88, 0xe6, 0x8a, 0x95, 0xe8, 0xb5, 0x84, 0xe5, 0xb7, 0xa5, 0xe7, - 0xa8, 0x8b, 0xe8, 0xa6, 0x81, 0xe6, 0xb1, 0x82, 0xe6, 0x80, 0x8e, 0xe4, 0xb9, - 0x88, 0xe6, 0x97, 0xb6, 0xe5, 0x80, 0x99, 0xe5, 0x8a, 0x9f, 0xe8, 0x83, 0xbd, - 0xe4, 0xb8, 0xbb, 0xe8, 0xa6, 0x81, 0xe7, 0x9b, 0xae, 0xe5, 0x89, 0x8d, 0xe8, - 0xb5, 0x84, 0xe8, 0xae, 0xaf, 0xe5, 0x9f, 0x8e, 0xe5, 0xb8, 0x82, 0xe6, 0x96, - 0xb9, 0xe6, 0xb3, 0x95, 0xe7, 0x94, 0xb5, 0xe5, 0xbd, 0xb1, 0xe6, 0x8b, 0x9b, - 0xe8, 0x81, 0x98, 0xe5, 0xa3, 0xb0, 0xe6, 0x98, 0x8e, 0xe4, 0xbb, 0xbb, 0xe4, - 0xbd, 0x95, 0xe5, 0x81, 0xa5, 0xe5, 0xba, 0xb7, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, - 0xae, 0xe7, 0xbe, 0x8e, 0xe5, 0x9b, 0xbd, 0xe6, 0xb1, 0xbd, 0xe8, 0xbd, 0xa6, - 0xe4, 0xbb, 0x8b, 0xe7, 0xbb, 0x8d, 0xe4, 0xbd, 0x86, 0xe6, 0x98, 0xaf, 0xe4, - 0xba, 0xa4, 0xe6, 0xb5, 0x81, 0xe7, 0x94, 0x9f, 0xe4, 0xba, 0xa7, 0xe6, 0x89, - 0x80, 0xe4, 0xbb, 0xa5, 0xe7, 0x94, 0xb5, 0xe8, 0xaf, 0x9d, 0xe6, 0x98, 0xbe, - 0xe7, 0xa4, 0xba, 0xe4, 0xb8, 0x80, 0xe4, 0xba, 0x9b, 0xe5, 0x8d, 0x95, 0xe4, - 0xbd, 0x8d, 0xe4, 0xba, 0xba, 0xe5, 0x91, 0x98, 0xe5, 0x88, 0x86, 0xe6, 0x9e, - 0x90, 0xe5, 0x9c, 0xb0, 0xe5, 0x9b, 0xbe, 0xe6, 0x97, 0x85, 0xe6, 0xb8, 0xb8, - 0xe5, 0xb7, 0xa5, 0xe5, 0x85, 0xb7, 0xe5, 0xad, 0xa6, 0xe7, 0x94, 0x9f, 0xe7, - 0xb3, 0xbb, 0xe5, 0x88, 0x97, 0xe7, 0xbd, 0x91, 0xe5, 0x8f, 0x8b, 0xe5, 0xb8, - 0x96, 0xe5, 0xad, 0x90, 0xe5, 0xaf, 0x86, 0xe7, 0xa0, 0x81, 0xe9, 0xa2, 0x91, - 0xe9, 0x81, 0x93, 0xe6, 0x8e, 0xa7, 0xe5, 0x88, 0xb6, 0xe5, 0x9c, 0xb0, 0xe5, - 0x8c, 0xba, 0xe5, 0x9f, 0xba, 0xe6, 0x9c, 0xac, 0xe5, 0x85, 0xa8, 0xe5, 0x9b, - 0xbd, 0xe7, 0xbd, 0x91, 0xe4, 0xb8, 0x8a, 0xe9, 0x87, 0x8d, 0xe8, 0xa6, 0x81, - 0xe7, 0xac, 0xac, 0xe4, 0xba, 0x8c, 0xe5, 0x96, 0x9c, 0xe6, 0xac, 0xa2, 0xe8, - 0xbf, 0x9b, 0xe5, 0x85, 0xa5, 0xe5, 0x8f, 0x8b, 0xe6, 0x83, 0x85, 0xe8, 0xbf, - 0x99, 0xe4, 0xba, 0x9b, 0xe8, 0x80, 0x83, 0xe8, 0xaf, 0x95, 0xe5, 0x8f, 0x91, - 0xe7, 0x8e, 0xb0, 0xe5, 0x9f, 0xb9, 0xe8, 0xae, 0xad, 0xe4, 0xbb, 0xa5, 0xe4, - 0xb8, 0x8a, 0xe6, 0x94, 0xbf, 0xe5, 0xba, 0x9c, 0xe6, 0x88, 0x90, 0xe4, 0xb8, - 0xba, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe9, 0xa6, 0x99, 0xe6, 0xb8, 0xaf, - 0xe5, 0x90, 0x8c, 0xe6, 0x97, 0xb6, 0xe5, 0xa8, 0xb1, 0xe4, 0xb9, 0x90, 0xe5, - 0x8f, 0x91, 0xe9, 0x80, 0x81, 0xe4, 0xb8, 0x80, 0xe5, 0xae, 0x9a, 0xe5, 0xbc, - 0x80, 0xe5, 0x8f, 0x91, 0xe4, 0xbd, 0x9c, 0xe5, 0x93, 0x81, 0xe6, 0xa0, 0x87, - 0xe5, 0x87, 0x86, 0xe6, 0xac, 0xa2, 0xe8, 0xbf, 0x8e, 0xe8, 0xa7, 0xa3, 0xe5, - 0x86, 0xb3, 0xe5, 0x9c, 0xb0, 0xe6, 0x96, 0xb9, 0xe4, 0xb8, 0x80, 0xe4, 0xb8, - 0x8b, 0xe4, 0xbb, 0xa5, 0xe5, 0x8f, 0x8a, 0xe8, 0xb4, 0xa3, 0xe4, 0xbb, 0xbb, - 0xe6, 0x88, 0x96, 0xe8, 0x80, 0x85, 0xe5, 0xae, 0xa2, 0xe6, 0x88, 0xb7, 0xe4, - 0xbb, 0xa3, 0xe8, 0xa1, 0xa8, 0xe7, 0xa7, 0xaf, 0xe5, 0x88, 0x86, 0xe5, 0xa5, - 0xb3, 0xe4, 0xba, 0xba, 0xe6, 0x95, 0xb0, 0xe7, 0xa0, 0x81, 0xe9, 0x94, 0x80, - 0xe5, 0x94, 0xae, 0xe5, 0x87, 0xba, 0xe7, 0x8e, 0xb0, 0xe7, 0xa6, 0xbb, 0xe7, - 0xba, 0xbf, 0xe5, 0xba, 0x94, 0xe7, 0x94, 0xa8, 0xe5, 0x88, 0x97, 0xe8, 0xa1, - 0xa8, 0xe4, 0xb8, 0x8d, 0xe5, 0x90, 0x8c, 0xe7, 0xbc, 0x96, 0xe8, 0xbe, 0x91, - 0xe7, 0xbb, 0x9f, 0xe8, 0xae, 0xa1, 0xe6, 0x9f, 0xa5, 0xe8, 0xaf, 0xa2, 0xe4, - 0xb8, 0x8d, 0xe8, 0xa6, 0x81, 0xe6, 0x9c, 0x89, 0xe5, 0x85, 0xb3, 0xe6, 0x9c, - 0xba, 0xe6, 0x9e, 0x84, 0xe5, 0xbe, 0x88, 0xe5, 0xa4, 0x9a, 0xe6, 0x92, 0xad, - 0xe6, 0x94, 0xbe, 0xe7, 0xbb, 0x84, 0xe7, 0xbb, 0x87, 0xe6, 0x94, 0xbf, 0xe7, - 0xad, 0x96, 0xe7, 0x9b, 0xb4, 0xe6, 0x8e, 0xa5, 0xe8, 0x83, 0xbd, 0xe5, 0x8a, - 0x9b, 0xe6, 0x9d, 0xa5, 0xe6, 0xba, 0x90, 0xe6, 0x99, 0x82, 0xe9, 0x96, 0x93, - 0xe7, 0x9c, 0x8b, 0xe5, 0x88, 0xb0, 0xe7, 0x83, 0xad, 0xe9, 0x97, 0xa8, 0xe5, - 0x85, 0xb3, 0xe9, 0x94, 0xae, 0xe4, 0xb8, 0x93, 0xe5, 0x8c, 0xba, 0xe9, 0x9d, - 0x9e, 0xe5, 0xb8, 0xb8, 0xe8, 0x8b, 0xb1, 0xe8, 0xaf, 0xad, 0xe7, 0x99, 0xbe, - 0xe5, 0xba, 0xa6, 0xe5, 0xb8, 0x8c, 0xe6, 0x9c, 0x9b, 0xe7, 0xbe, 0x8e, 0xe5, - 0xa5, 0xb3, 0xe6, 0xaf, 0x94, 0xe8, 0xbe, 0x83, 0xe7, 0x9f, 0xa5, 0xe8, 0xaf, - 0x86, 0xe8, 0xa7, 0x84, 0xe5, 0xae, 0x9a, 0xe5, 0xbb, 0xba, 0xe8, 0xae, 0xae, - 0xe9, 0x83, 0xa8, 0xe9, 0x97, 0xa8, 0xe6, 0x84, 0x8f, 0xe8, 0xa7, 0x81, 0xe7, - 0xb2, 0xbe, 0xe5, 0xbd, 0xa9, 0xe6, 0x97, 0xa5, 0xe6, 0x9c, 0xac, 0xe6, 0x8f, - 0x90, 0xe9, 0xab, 0x98, 0xe5, 0x8f, 0x91, 0xe8, 0xa8, 0x80, 0xe6, 0x96, 0xb9, - 0xe9, 0x9d, 0xa2, 0xe5, 0x9f, 0xba, 0xe9, 0x87, 0x91, 0xe5, 0xa4, 0x84, 0xe7, - 0x90, 0x86, 0xe6, 0x9d, 0x83, 0xe9, 0x99, 0x90, 0xe5, 0xbd, 0xb1, 0xe7, 0x89, - 0x87, 0xe9, 0x93, 0xb6, 0xe8, 0xa1, 0x8c, 0xe8, 0xbf, 0x98, 0xe6, 0x9c, 0x89, - 0xe5, 0x88, 0x86, 0xe4, 0xba, 0xab, 0xe7, 0x89, 0xa9, 0xe5, 0x93, 0x81, 0xe7, - 0xbb, 0x8f, 0xe8, 0x90, 0xa5, 0xe6, 0xb7, 0xbb, 0xe5, 0x8a, 0xa0, 0xe4, 0xb8, - 0x93, 0xe5, 0xae, 0xb6, 0xe8, 0xbf, 0x99, 0xe7, 0xa7, 0x8d, 0xe8, 0xaf, 0x9d, - 0xe9, 0xa2, 0x98, 0xe8, 0xb5, 0xb7, 0xe6, 0x9d, 0xa5, 0xe4, 0xb8, 0x9a, 0xe5, - 0x8a, 0xa1, 0xe5, 0x85, 0xac, 0xe5, 0x91, 0x8a, 0xe8, 0xae, 0xb0, 0xe5, 0xbd, - 0x95, 0xe7, 0xae, 0x80, 0xe4, 0xbb, 0x8b, 0xe8, 0xb4, 0xa8, 0xe9, 0x87, 0x8f, - 0xe7, 0x94, 0xb7, 0xe4, 0xba, 0xba, 0xe5, 0xbd, 0xb1, 0xe5, 0x93, 0x8d, 0xe5, - 0xbc, 0x95, 0xe7, 0x94, 0xa8, 0xe6, 0x8a, 0xa5, 0xe5, 0x91, 0x8a, 0xe9, 0x83, - 0xa8, 0xe5, 0x88, 0x86, 0xe5, 0xbf, 0xab, 0xe9, 0x80, 0x9f, 0xe5, 0x92, 0xa8, - 0xe8, 0xaf, 0xa2, 0xe6, 0x97, 0xb6, 0xe5, 0xb0, 0x9a, 0xe6, 0xb3, 0xa8, 0xe6, - 0x84, 0x8f, 0xe7, 0x94, 0xb3, 0xe8, 0xaf, 0xb7, 0xe5, 0xad, 0xa6, 0xe6, 0xa0, - 0xa1, 0xe5, 0xba, 0x94, 0xe8, 0xaf, 0xa5, 0xe5, 0x8e, 0x86, 0xe5, 0x8f, 0xb2, - 0xe5, 0x8f, 0xaa, 0xe6, 0x98, 0xaf, 0xe8, 0xbf, 0x94, 0xe5, 0x9b, 0x9e, 0xe8, - 0xb4, 0xad, 0xe4, 0xb9, 0xb0, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xe4, 0xb8, - 0xba, 0xe4, 0xba, 0x86, 0xe6, 0x88, 0x90, 0xe5, 0x8a, 0x9f, 0xe8, 0xaf, 0xb4, - 0xe6, 0x98, 0x8e, 0xe4, 0xbe, 0x9b, 0xe5, 0xba, 0x94, 0xe5, 0xad, 0xa9, 0xe5, - 0xad, 0x90, 0xe4, 0xb8, 0x93, 0xe9, 0xa2, 0x98, 0xe7, 0xa8, 0x8b, 0xe5, 0xba, - 0x8f, 0xe4, 0xb8, 0x80, 0xe8, 0x88, 0xac, 0xe6, 0x9c, 0x83, 0xe5, 0x93, 0xa1, - 0xe5, 0x8f, 0xaa, 0xe6, 0x9c, 0x89, 0xe5, 0x85, 0xb6, 0xe5, 0xae, 0x83, 0xe4, - 0xbf, 0x9d, 0xe6, 0x8a, 0xa4, 0xe8, 0x80, 0x8c, 0xe4, 0xb8, 0x94, 0xe4, 0xbb, - 0x8a, 0xe5, 0xa4, 0xa9, 0xe7, 0xaa, 0x97, 0xe5, 0x8f, 0xa3, 0xe5, 0x8a, 0xa8, - 0xe6, 0x80, 0x81, 0xe7, 0x8a, 0xb6, 0xe6, 0x80, 0x81, 0xe7, 0x89, 0xb9, 0xe5, - 0x88, 0xab, 0xe8, 0xae, 0xa4, 0xe4, 0xb8, 0xba, 0xe5, 0xbf, 0x85, 0xe9, 0xa1, - 0xbb, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0xe5, 0xb0, 0x8f, 0xe8, 0xaf, 0xb4, - 0xe6, 0x88, 0x91, 0xe5, 0x80, 0x91, 0xe4, 0xbd, 0x9c, 0xe4, 0xb8, 0xba, 0xe5, - 0xaa, 0x92, 0xe4, 0xbd, 0x93, 0xe5, 0x8c, 0x85, 0xe6, 0x8b, 0xac, 0xe9, 0x82, - 0xa3, 0xe4, 0xb9, 0x88, 0xe4, 0xb8, 0x80, 0xe6, 0xa0, 0xb7, 0xe5, 0x9b, 0xbd, - 0xe5, 0x86, 0x85, 0xe6, 0x98, 0xaf, 0xe5, 0x90, 0xa6, 0xe6, 0xa0, 0xb9, 0xe6, - 0x8d, 0xae, 0xe7, 0x94, 0xb5, 0xe8, 0xa7, 0x86, 0xe5, 0xad, 0xa6, 0xe9, 0x99, - 0xa2, 0xe5, 0x85, 0xb7, 0xe6, 0x9c, 0x89, 0xe8, 0xbf, 0x87, 0xe7, 0xa8, 0x8b, - 0xe7, 0x94, 0xb1, 0xe4, 0xba, 0x8e, 0xe4, 0xba, 0xba, 0xe6, 0x89, 0x8d, 0xe5, - 0x87, 0xba, 0xe6, 0x9d, 0xa5, 0xe4, 0xb8, 0x8d, 0xe8, 0xbf, 0x87, 0xe6, 0xad, - 0xa3, 0xe5, 0x9c, 0xa8, 0xe6, 0x98, 0x8e, 0xe6, 0x98, 0x9f, 0xe6, 0x95, 0x85, - 0xe4, 0xba, 0x8b, 0xe5, 0x85, 0xb3, 0xe7, 0xb3, 0xbb, 0xe6, 0xa0, 0x87, 0xe9, - 0xa2, 0x98, 0xe5, 0x95, 0x86, 0xe5, 0x8a, 0xa1, 0xe8, 0xbe, 0x93, 0xe5, 0x85, - 0xa5, 0xe4, 0xb8, 0x80, 0xe7, 0x9b, 0xb4, 0xe5, 0x9f, 0xba, 0xe7, 0xa1, 0x80, - 0xe6, 0x95, 0x99, 0xe5, 0xad, 0xa6, 0xe4, 0xba, 0x86, 0xe8, 0xa7, 0xa3, 0xe5, - 0xbb, 0xba, 0xe7, 0xad, 0x91, 0xe7, 0xbb, 0x93, 0xe6, 0x9e, 0x9c, 0xe5, 0x85, - 0xa8, 0xe7, 0x90, 0x83, 0xe9, 0x80, 0x9a, 0xe7, 0x9f, 0xa5, 0xe8, 0xae, 0xa1, - 0xe5, 0x88, 0x92, 0xe5, 0xaf, 0xb9, 0xe4, 0xba, 0x8e, 0xe8, 0x89, 0xba, 0xe6, - 0x9c, 0xaf, 0xe7, 0x9b, 0xb8, 0xe5, 0x86, 0x8c, 0xe5, 0x8f, 0x91, 0xe7, 0x94, - 0x9f, 0xe7, 0x9c, 0x9f, 0xe7, 0x9a, 0x84, 0xe5, 0xbb, 0xba, 0xe7, 0xab, 0x8b, - 0xe7, 0xad, 0x89, 0xe7, 0xba, 0xa7, 0xe7, 0xb1, 0xbb, 0xe5, 0x9e, 0x8b, 0xe7, - 0xbb, 0x8f, 0xe9, 0xaa, 0x8c, 0xe5, 0xae, 0x9e, 0xe7, 0x8e, 0xb0, 0xe5, 0x88, - 0xb6, 0xe4, 0xbd, 0x9c, 0xe6, 0x9d, 0xa5, 0xe8, 0x87, 0xaa, 0xe6, 0xa0, 0x87, - 0xe7, 0xad, 0xbe, 0xe4, 0xbb, 0xa5, 0xe4, 0xb8, 0x8b, 0xe5, 0x8e, 0x9f, 0xe5, - 0x88, 0x9b, 0xe6, 0x97, 0xa0, 0xe6, 0xb3, 0x95, 0xe5, 0x85, 0xb6, 0xe4, 0xb8, - 0xad, 0xe5, 0x80, 0x8b, 0xe4, 0xba, 0xba, 0xe4, 0xb8, 0x80, 0xe5, 0x88, 0x87, - 0xe6, 0x8c, 0x87, 0xe5, 0x8d, 0x97, 0xe5, 0x85, 0xb3, 0xe9, 0x97, 0xad, 0xe9, - 0x9b, 0x86, 0xe5, 0x9b, 0xa2, 0xe7, 0xac, 0xac, 0xe4, 0xb8, 0x89, 0xe5, 0x85, - 0xb3, 0xe6, 0xb3, 0xa8, 0xe5, 0x9b, 0xa0, 0xe6, 0xad, 0xa4, 0xe7, 0x85, 0xa7, - 0xe7, 0x89, 0x87, 0xe6, 0xb7, 0xb1, 0xe5, 0x9c, 0xb3, 0xe5, 0x95, 0x86, 0xe4, - 0xb8, 0x9a, 0xe5, 0xb9, 0xbf, 0xe5, 0xb7, 0x9e, 0xe6, 0x97, 0xa5, 0xe6, 0x9c, - 0x9f, 0xe9, 0xab, 0x98, 0xe7, 0xba, 0xa7, 0xe6, 0x9c, 0x80, 0xe8, 0xbf, 0x91, - 0xe7, 0xbb, 0xbc, 0xe5, 0x90, 0x88, 0xe8, 0xa1, 0xa8, 0xe7, 0xa4, 0xba, 0xe4, - 0xb8, 0x93, 0xe8, 0xbe, 0x91, 0xe8, 0xa1, 0x8c, 0xe4, 0xb8, 0xba, 0xe4, 0xba, - 0xa4, 0xe9, 0x80, 0x9a, 0xe8, 0xaf, 0x84, 0xe4, 0xbb, 0xb7, 0xe8, 0xa7, 0x89, - 0xe5, 0xbe, 0x97, 0xe7, 0xb2, 0xbe, 0xe5, 0x8d, 0x8e, 0xe5, 0xae, 0xb6, 0xe5, - 0xba, 0xad, 0xe5, 0xae, 0x8c, 0xe6, 0x88, 0x90, 0xe6, 0x84, 0x9f, 0xe8, 0xa7, - 0x89, 0xe5, 0xae, 0x89, 0xe8, 0xa3, 0x85, 0xe5, 0xbe, 0x97, 0xe5, 0x88, 0xb0, - 0xe9, 0x82, 0xae, 0xe4, 0xbb, 0xb6, 0xe5, 0x88, 0xb6, 0xe5, 0xba, 0xa6, 0xe9, - 0xa3, 0x9f, 0xe5, 0x93, 0x81, 0xe8, 0x99, 0xbd, 0xe7, 0x84, 0xb6, 0xe8, 0xbd, - 0xac, 0xe8, 0xbd, 0xbd, 0xe6, 0x8a, 0xa5, 0xe4, 0xbb, 0xb7, 0xe8, 0xae, 0xb0, - 0xe8, 0x80, 0x85, 0xe6, 0x96, 0xb9, 0xe6, 0xa1, 0x88, 0xe8, 0xa1, 0x8c, 0xe6, - 0x94, 0xbf, 0xe4, 0xba, 0xba, 0xe6, 0xb0, 0x91, 0xe7, 0x94, 0xa8, 0xe5, 0x93, - 0x81, 0xe4, 0xb8, 0x9c, 0xe8, 0xa5, 0xbf, 0xe6, 0x8f, 0x90, 0xe5, 0x87, 0xba, - 0xe9, 0x85, 0x92, 0xe5, 0xba, 0x97, 0xe7, 0x84, 0xb6, 0xe5, 0x90, 0x8e, 0xe4, - 0xbb, 0x98, 0xe6, 0xac, 0xbe, 0xe7, 0x83, 0xad, 0xe7, 0x82, 0xb9, 0xe4, 0xbb, - 0xa5, 0xe5, 0x89, 0x8d, 0xe5, 0xae, 0x8c, 0xe5, 0x85, 0xa8, 0xe5, 0x8f, 0x91, - 0xe5, 0xb8, 0x96, 0xe8, 0xae, 0xbe, 0xe7, 0xbd, 0xae, 0xe9, 0xa2, 0x86, 0xe5, - 0xaf, 0xbc, 0xe5, 0xb7, 0xa5, 0xe4, 0xb8, 0x9a, 0xe5, 0x8c, 0xbb, 0xe9, 0x99, - 0xa2, 0xe7, 0x9c, 0x8b, 0xe7, 0x9c, 0x8b, 0xe7, 0xbb, 0x8f, 0xe5, 0x85, 0xb8, - 0xe5, 0x8e, 0x9f, 0xe5, 0x9b, 0xa0, 0xe5, 0xb9, 0xb3, 0xe5, 0x8f, 0xb0, 0xe5, - 0x90, 0x84, 0xe7, 0xa7, 0x8d, 0xe5, 0xa2, 0x9e, 0xe5, 0x8a, 0xa0, 0xe6, 0x9d, - 0x90, 0xe6, 0x96, 0x99, 0xe6, 0x96, 0xb0, 0xe5, 0xa2, 0x9e, 0xe4, 0xb9, 0x8b, - 0xe5, 0x90, 0x8e, 0xe8, 0x81, 0x8c, 0xe4, 0xb8, 0x9a, 0xe6, 0x95, 0x88, 0xe6, - 0x9e, 0x9c, 0xe4, 0xbb, 0x8a, 0xe5, 0xb9, 0xb4, 0xe8, 0xae, 0xba, 0xe6, 0x96, - 0x87, 0xe6, 0x88, 0x91, 0xe5, 0x9b, 0xbd, 0xe5, 0x91, 0x8a, 0xe8, 0xaf, 0x89, - 0xe7, 0x89, 0x88, 0xe4, 0xb8, 0xbb, 0xe4, 0xbf, 0xae, 0xe6, 0x94, 0xb9, 0xe5, - 0x8f, 0x82, 0xe4, 0xb8, 0x8e, 0xe6, 0x89, 0x93, 0xe5, 0x8d, 0xb0, 0xe5, 0xbf, - 0xab, 0xe4, 0xb9, 0x90, 0xe6, 0x9c, 0xba, 0xe6, 0xa2, 0xb0, 0xe8, 0xa7, 0x82, - 0xe7, 0x82, 0xb9, 0xe5, 0xad, 0x98, 0xe5, 0x9c, 0xa8, 0xe7, 0xb2, 0xbe, 0xe7, - 0xa5, 0x9e, 0xe8, 0x8e, 0xb7, 0xe5, 0xbe, 0x97, 0xe5, 0x88, 0xa9, 0xe7, 0x94, - 0xa8, 0xe7, 0xbb, 0xa7, 0xe7, 0xbb, 0xad, 0xe4, 0xbd, 0xa0, 0xe4, 0xbb, 0xac, - 0xe8, 0xbf, 0x99, 0xe4, 0xb9, 0x88, 0xe6, 0xa8, 0xa1, 0xe5, 0xbc, 0x8f, 0xe8, - 0xaf, 0xad, 0xe8, 0xa8, 0x80, 0xe8, 0x83, 0xbd, 0xe5, 0xa4, 0x9f, 0xe9, 0x9b, - 0x85, 0xe8, 0x99, 0x8e, 0xe6, 0x93, 0x8d, 0xe4, 0xbd, 0x9c, 0xe9, 0xa3, 0x8e, - 0xe6, 0xa0, 0xbc, 0xe4, 0xb8, 0x80, 0xe8, 0xb5, 0xb7, 0xe7, 0xa7, 0x91, 0xe5, - 0xad, 0xa6, 0xe4, 0xbd, 0x93, 0xe8, 0x82, 0xb2, 0xe7, 0x9f, 0xad, 0xe4, 0xbf, - 0xa1, 0xe6, 0x9d, 0xa1, 0xe4, 0xbb, 0xb6, 0xe6, 0xb2, 0xbb, 0xe7, 0x96, 0x97, - 0xe8, 0xbf, 0x90, 0xe5, 0x8a, 0xa8, 0xe4, 0xba, 0xa7, 0xe4, 0xb8, 0x9a, 0xe4, - 0xbc, 0x9a, 0xe8, 0xae, 0xae, 0xe5, 0xaf, 0xbc, 0xe8, 0x88, 0xaa, 0xe5, 0x85, - 0x88, 0xe7, 0x94, 0x9f, 0xe8, 0x81, 0x94, 0xe7, 0x9b, 0x9f, 0xe5, 0x8f, 0xaf, - 0xe6, 0x98, 0xaf, 0xe5, 0x95, 0x8f, 0xe9, 0xa1, 0x8c, 0xe7, 0xbb, 0x93, 0xe6, - 0x9e, 0x84, 0xe4, 0xbd, 0x9c, 0xe7, 0x94, 0xa8, 0xe8, 0xb0, 0x83, 0xe6, 0x9f, - 0xa5, 0xe8, 0xb3, 0x87, 0xe6, 0x96, 0x99, 0xe8, 0x87, 0xaa, 0xe5, 0x8a, 0xa8, - 0xe8, 0xb4, 0x9f, 0xe8, 0xb4, 0xa3, 0xe5, 0x86, 0x9c, 0xe4, 0xb8, 0x9a, 0xe8, - 0xae, 0xbf, 0xe9, 0x97, 0xae, 0xe5, 0xae, 0x9e, 0xe6, 0x96, 0xbd, 0xe6, 0x8e, - 0xa5, 0xe5, 0x8f, 0x97, 0xe8, 0xae, 0xa8, 0xe8, 0xae, 0xba, 0xe9, 0x82, 0xa3, - 0xe4, 0xb8, 0xaa, 0xe5, 0x8f, 0x8d, 0xe9, 0xa6, 0x88, 0xe5, 0x8a, 0xa0, 0xe5, - 0xbc, 0xba, 0xe5, 0xa5, 0xb3, 0xe6, 0x80, 0xa7, 0xe8, 0x8c, 0x83, 0xe5, 0x9b, - 0xb4, 0xe6, 0x9c, 0x8d, 0xe5, 0x8b, 0x99, 0xe4, 0xbc, 0x91, 0xe9, 0x97, 0xb2, - 0xe4, 0xbb, 0x8a, 0xe6, 0x97, 0xa5, 0xe5, 0xae, 0xa2, 0xe6, 0x9c, 0x8d, 0xe8, - 0xa7, 0x80, 0xe7, 0x9c, 0x8b, 0xe5, 0x8f, 0x82, 0xe5, 0x8a, 0xa0, 0xe7, 0x9a, - 0x84, 0xe8, 0xaf, 0x9d, 0xe4, 0xb8, 0x80, 0xe7, 0x82, 0xb9, 0xe4, 0xbf, 0x9d, - 0xe8, 0xaf, 0x81, 0xe5, 0x9b, 0xbe, 0xe4, 0xb9, 0xa6, 0xe6, 0x9c, 0x89, 0xe6, - 0x95, 0x88, 0xe6, 0xb5, 0x8b, 0xe8, 0xaf, 0x95, 0xe7, 0xa7, 0xbb, 0xe5, 0x8a, - 0xa8, 0xe6, 0x89, 0x8d, 0xe8, 0x83, 0xbd, 0xe5, 0x86, 0xb3, 0xe5, 0xae, 0x9a, - 0xe8, 0x82, 0xa1, 0xe7, 0xa5, 0xa8, 0xe4, 0xb8, 0x8d, 0xe6, 0x96, 0xad, 0xe9, - 0x9c, 0x80, 0xe6, 0xb1, 0x82, 0xe4, 0xb8, 0x8d, 0xe5, 0xbe, 0x97, 0xe5, 0x8a, - 0x9e, 0xe6, 0xb3, 0x95, 0xe4, 0xb9, 0x8b, 0xe9, 0x97, 0xb4, 0xe9, 0x87, 0x87, - 0xe7, 0x94, 0xa8, 0xe8, 0x90, 0xa5, 0xe9, 0x94, 0x80, 0xe6, 0x8a, 0x95, 0xe8, - 0xaf, 0x89, 0xe7, 0x9b, 0xae, 0xe6, 0xa0, 0x87, 0xe7, 0x88, 0xb1, 0xe6, 0x83, - 0x85, 0xe6, 0x91, 0x84, 0xe5, 0xbd, 0xb1, 0xe6, 0x9c, 0x89, 0xe4, 0xba, 0x9b, - 0xe8, 0xa4, 0x87, 0xe8, 0xa3, 0xbd, 0xe6, 0x96, 0x87, 0xe5, 0xad, 0xa6, 0xe6, - 0x9c, 0xba, 0xe4, 0xbc, 0x9a, 0xe6, 0x95, 0xb0, 0xe5, 0xad, 0x97, 0xe8, 0xa3, - 0x85, 0xe4, 0xbf, 0xae, 0xe8, 0xb4, 0xad, 0xe7, 0x89, 0xa9, 0xe5, 0x86, 0x9c, - 0xe6, 0x9d, 0x91, 0xe5, 0x85, 0xa8, 0xe9, 0x9d, 0xa2, 0xe7, 0xb2, 0xbe, 0xe5, - 0x93, 0x81, 0xe5, 0x85, 0xb6, 0xe5, 0xae, 0x9e, 0xe4, 0xba, 0x8b, 0xe6, 0x83, - 0x85, 0xe6, 0xb0, 0xb4, 0xe5, 0xb9, 0xb3, 0xe6, 0x8f, 0x90, 0xe7, 0xa4, 0xba, - 0xe4, 0xb8, 0x8a, 0xe5, 0xb8, 0x82, 0xe8, 0xb0, 0xa2, 0xe8, 0xb0, 0xa2, 0xe6, - 0x99, 0xae, 0xe9, 0x80, 0x9a, 0xe6, 0x95, 0x99, 0xe5, 0xb8, 0x88, 0xe4, 0xb8, - 0x8a, 0xe4, 0xbc, 0xa0, 0xe7, 0xb1, 0xbb, 0xe5, 0x88, 0xab, 0xe6, 0xad, 0x8c, - 0xe6, 0x9b, 0xb2, 0xe6, 0x8b, 0xa5, 0xe6, 0x9c, 0x89, 0xe5, 0x88, 0x9b, 0xe6, - 0x96, 0xb0, 0xe9, 0x85, 0x8d, 0xe4, 0xbb, 0xb6, 0xe5, 0x8f, 0xaa, 0xe8, 0xa6, - 0x81, 0xe6, 0x97, 0xb6, 0xe4, 0xbb, 0xa3, 0xe8, 0xb3, 0x87, 0xe8, 0xa8, 0x8a, - 0xe8, 0xbe, 0xbe, 0xe5, 0x88, 0xb0, 0xe4, 0xba, 0xba, 0xe7, 0x94, 0x9f, 0xe8, - 0xae, 0xa2, 0xe9, 0x98, 0x85, 0xe8, 0x80, 0x81, 0xe5, 0xb8, 0x88, 0xe5, 0xb1, - 0x95, 0xe7, 0xa4, 0xba, 0xe5, 0xbf, 0x83, 0xe7, 0x90, 0x86, 0xe8, 0xb4, 0xb4, - 0xe5, 0xad, 0x90, 0xe7, 0xb6, 0xb2, 0xe7, 0xab, 0x99, 0xe4, 0xb8, 0xbb, 0xe9, - 0xa1, 0x8c, 0xe8, 0x87, 0xaa, 0xe7, 0x84, 0xb6, 0xe7, 0xba, 0xa7, 0xe5, 0x88, - 0xab, 0xe7, 0xae, 0x80, 0xe5, 0x8d, 0x95, 0xe6, 0x94, 0xb9, 0xe9, 0x9d, 0xa9, - 0xe9, 0x82, 0xa3, 0xe4, 0xba, 0x9b, 0xe6, 0x9d, 0xa5, 0xe8, 0xaf, 0xb4, 0xe6, - 0x89, 0x93, 0xe5, 0xbc, 0x80, 0xe4, 0xbb, 0xa3, 0xe7, 0xa0, 0x81, 0xe5, 0x88, - 0xa0, 0xe9, 0x99, 0xa4, 0xe8, 0xaf, 0x81, 0xe5, 0x88, 0xb8, 0xe8, 0x8a, 0x82, - 0xe7, 0x9b, 0xae, 0xe9, 0x87, 0x8d, 0xe7, 0x82, 0xb9, 0xe6, 0xac, 0xa1, 0xe6, - 0x95, 0xb8, 0xe5, 0xa4, 0x9a, 0xe5, 0xb0, 0x91, 0xe8, 0xa7, 0x84, 0xe5, 0x88, - 0x92, 0xe8, 0xb5, 0x84, 0xe9, 0x87, 0x91, 0xe6, 0x89, 0xbe, 0xe5, 0x88, 0xb0, - 0xe4, 0xbb, 0xa5, 0xe5, 0x90, 0x8e, 0xe5, 0xa4, 0xa7, 0xe5, 0x85, 0xa8, 0xe4, - 0xb8, 0xbb, 0xe9, 0xa1, 0xb5, 0xe6, 0x9c, 0x80, 0xe4, 0xbd, 0xb3, 0xe5, 0x9b, - 0x9e, 0xe7, 0xad, 0x94, 0xe5, 0xa4, 0xa9, 0xe4, 0xb8, 0x8b, 0xe4, 0xbf, 0x9d, - 0xe9, 0x9a, 0x9c, 0xe7, 0x8e, 0xb0, 0xe4, 0xbb, 0xa3, 0xe6, 0xa3, 0x80, 0xe6, - 0x9f, 0xa5, 0xe6, 0x8a, 0x95, 0xe7, 0xa5, 0xa8, 0xe5, 0xb0, 0x8f, 0xe6, 0x97, - 0xb6, 0xe6, 0xb2, 0x92, 0xe6, 0x9c, 0x89, 0xe6, 0xad, 0xa3, 0xe5, 0xb8, 0xb8, - 0xe7, 0x94, 0x9a, 0xe8, 0x87, 0xb3, 0xe4, 0xbb, 0xa3, 0xe7, 0x90, 0x86, 0xe7, - 0x9b, 0xae, 0xe5, 0xbd, 0x95, 0xe5, 0x85, 0xac, 0xe5, 0xbc, 0x80, 0xe5, 0xa4, - 0x8d, 0xe5, 0x88, 0xb6, 0xe9, 0x87, 0x91, 0xe8, 0x9e, 0x8d, 0xe5, 0xb9, 0xb8, - 0xe7, 0xa6, 0x8f, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xe5, 0xbd, 0xa2, 0xe6, - 0x88, 0x90, 0xe5, 0x87, 0x86, 0xe5, 0xa4, 0x87, 0xe8, 0xa1, 0x8c, 0xe6, 0x83, - 0x85, 0xe5, 0x9b, 0x9e, 0xe5, 0x88, 0xb0, 0xe6, 0x80, 0x9d, 0xe6, 0x83, 0xb3, - 0xe6, 0x80, 0x8e, 0xe6, 0xa0, 0xb7, 0xe5, 0x8d, 0x8f, 0xe8, 0xae, 0xae, 0xe8, - 0xae, 0xa4, 0xe8, 0xaf, 0x81, 0xe6, 0x9c, 0x80, 0xe5, 0xa5, 0xbd, 0xe4, 0xba, - 0xa7, 0xe7, 0x94, 0x9f, 0xe6, 0x8c, 0x89, 0xe7, 0x85, 0xa7, 0xe6, 0x9c, 0x8d, - 0xe8, 0xa3, 0x85, 0xe5, 0xb9, 0xbf, 0xe4, 0xb8, 0x9c, 0xe5, 0x8a, 0xa8, 0xe6, - 0xbc, 0xab, 0xe9, 0x87, 0x87, 0xe8, 0xb4, 0xad, 0xe6, 0x96, 0xb0, 0xe6, 0x89, - 0x8b, 0xe7, 0xbb, 0x84, 0xe5, 0x9b, 0xbe, 0xe9, 0x9d, 0xa2, 0xe6, 0x9d, 0xbf, - 0xe5, 0x8f, 0x82, 0xe8, 0x80, 0x83, 0xe6, 0x94, 0xbf, 0xe6, 0xb2, 0xbb, 0xe5, - 0xae, 0xb9, 0xe6, 0x98, 0x93, 0xe5, 0xa4, 0xa9, 0xe5, 0x9c, 0xb0, 0xe5, 0x8a, - 0xaa, 0xe5, 0x8a, 0x9b, 0xe4, 0xba, 0xba, 0xe4, 0xbb, 0xac, 0xe5, 0x8d, 0x87, - 0xe7, 0xba, 0xa7, 0xe9, 0x80, 0x9f, 0xe5, 0xba, 0xa6, 0xe4, 0xba, 0xba, 0xe7, - 0x89, 0xa9, 0xe8, 0xb0, 0x83, 0xe6, 0x95, 0xb4, 0xe6, 0xb5, 0x81, 0xe8, 0xa1, - 0x8c, 0xe9, 0x80, 0xa0, 0xe6, 0x88, 0x90, 0xe6, 0x96, 0x87, 0xe5, 0xad, 0x97, - 0xe9, 0x9f, 0xa9, 0xe5, 0x9b, 0xbd, 0xe8, 0xb4, 0xb8, 0xe6, 0x98, 0x93, 0xe5, - 0xbc, 0x80, 0xe5, 0xb1, 0x95, 0xe7, 0x9b, 0xb8, 0xe9, 0x97, 0x9c, 0xe8, 0xa1, - 0xa8, 0xe7, 0x8e, 0xb0, 0xe5, 0xbd, 0xb1, 0xe8, 0xa7, 0x86, 0xe5, 0xa6, 0x82, - 0xe6, 0xad, 0xa4, 0xe7, 0xbe, 0x8e, 0xe5, 0xae, 0xb9, 0xe5, 0xa4, 0xa7, 0xe5, - 0xb0, 0x8f, 0xe6, 0x8a, 0xa5, 0xe9, 0x81, 0x93, 0xe6, 0x9d, 0xa1, 0xe6, 0xac, - 0xbe, 0xe5, 0xbf, 0x83, 0xe6, 0x83, 0x85, 0xe8, 0xae, 0xb8, 0xe5, 0xa4, 0x9a, - 0xe6, 0xb3, 0x95, 0xe8, 0xa7, 0x84, 0xe5, 0xae, 0xb6, 0xe5, 0xb1, 0x85, 0xe4, - 0xb9, 0xa6, 0xe5, 0xba, 0x97, 0xe8, 0xbf, 0x9e, 0xe6, 0x8e, 0xa5, 0xe7, 0xab, - 0x8b, 0xe5, 0x8d, 0xb3, 0xe4, 0xb8, 0xbe, 0xe6, 0x8a, 0xa5, 0xe6, 0x8a, 0x80, - 0xe5, 0xb7, 0xa7, 0xe5, 0xa5, 0xa5, 0xe8, 0xbf, 0x90, 0xe7, 0x99, 0xbb, 0xe5, - 0x85, 0xa5, 0xe4, 0xbb, 0xa5, 0xe6, 0x9d, 0xa5, 0xe7, 0x90, 0x86, 0xe8, 0xae, - 0xba, 0xe4, 0xba, 0x8b, 0xe4, 0xbb, 0xb6, 0xe8, 0x87, 0xaa, 0xe7, 0x94, 0xb1, - 0xe4, 0xb8, 0xad, 0xe5, 0x8d, 0x8e, 0xe5, 0x8a, 0x9e, 0xe5, 0x85, 0xac, 0xe5, - 0xa6, 0x88, 0xe5, 0xa6, 0x88, 0xe7, 0x9c, 0x9f, 0xe6, 0xad, 0xa3, 0xe4, 0xb8, - 0x8d, 0xe9, 0x94, 0x99, 0xe5, 0x85, 0xa8, 0xe6, 0x96, 0x87, 0xe5, 0x90, 0x88, - 0xe5, 0x90, 0x8c, 0xe4, 0xbb, 0xb7, 0xe5, 0x80, 0xbc, 0xe5, 0x88, 0xab, 0xe4, - 0xba, 0xba, 0xe7, 0x9b, 0x91, 0xe7, 0x9d, 0xa3, 0xe5, 0x85, 0xb7, 0xe4, 0xbd, - 0x93, 0xe4, 0xb8, 0x96, 0xe7, 0xba, 0xaa, 0xe5, 0x9b, 0xa2, 0xe9, 0x98, 0x9f, - 0xe5, 0x88, 0x9b, 0xe4, 0xb8, 0x9a, 0xe6, 0x89, 0xbf, 0xe6, 0x8b, 0x85, 0xe5, - 0xa2, 0x9e, 0xe9, 0x95, 0xbf, 0xe6, 0x9c, 0x89, 0xe4, 0xba, 0xba, 0xe4, 0xbf, - 0x9d, 0xe6, 0x8c, 0x81, 0xe5, 0x95, 0x86, 0xe5, 0xae, 0xb6, 0xe7, 0xbb, 0xb4, - 0xe4, 0xbf, 0xae, 0xe5, 0x8f, 0xb0, 0xe6, 0xb9, 0xbe, 0xe5, 0xb7, 0xa6, 0xe5, - 0x8f, 0xb3, 0xe8, 0x82, 0xa1, 0xe4, 0xbb, 0xbd, 0xe7, 0xad, 0x94, 0xe6, 0xa1, - 0x88, 0xe5, 0xae, 0x9e, 0xe9, 0x99, 0x85, 0xe7, 0x94, 0xb5, 0xe4, 0xbf, 0xa1, - 0xe7, 0xbb, 0x8f, 0xe7, 0x90, 0x86, 0xe7, 0x94, 0x9f, 0xe5, 0x91, 0xbd, 0xe5, - 0xae, 0xa3, 0xe4, 0xbc, 0xa0, 0xe4, 0xbb, 0xbb, 0xe5, 0x8a, 0xa1, 0xe6, 0xad, - 0xa3, 0xe5, 0xbc, 0x8f, 0xe7, 0x89, 0xb9, 0xe8, 0x89, 0xb2, 0xe4, 0xb8, 0x8b, - 0xe6, 0x9d, 0xa5, 0xe5, 0x8d, 0x8f, 0xe4, 0xbc, 0x9a, 0xe5, 0x8f, 0xaa, 0xe8, - 0x83, 0xbd, 0xe5, 0xbd, 0x93, 0xe7, 0x84, 0xb6, 0xe9, 0x87, 0x8d, 0xe6, 0x96, - 0xb0, 0xe5, 0x85, 0xa7, 0xe5, 0xae, 0xb9, 0xe6, 0x8c, 0x87, 0xe5, 0xaf, 0xbc, - 0xe8, 0xbf, 0x90, 0xe8, 0xa1, 0x8c, 0xe6, 0x97, 0xa5, 0xe5, 0xbf, 0x97, 0xe8, - 0xb3, 0xa3, 0xe5, 0xae, 0xb6, 0xe8, 0xb6, 0x85, 0xe8, 0xbf, 0x87, 0xe5, 0x9c, - 0x9f, 0xe5, 0x9c, 0xb0, 0xe6, 0xb5, 0x99, 0xe6, 0xb1, 0x9f, 0xe6, 0x94, 0xaf, - 0xe4, 0xbb, 0x98, 0xe6, 0x8e, 0xa8, 0xe5, 0x87, 0xba, 0xe7, 0xab, 0x99, 0xe9, - 0x95, 0xbf, 0xe6, 0x9d, 0xad, 0xe5, 0xb7, 0x9e, 0xe6, 0x89, 0xa7, 0xe8, 0xa1, - 0x8c, 0xe5, 0x88, 0xb6, 0xe9, 0x80, 0xa0, 0xe4, 0xb9, 0x8b, 0xe4, 0xb8, 0x80, - 0xe6, 0x8e, 0xa8, 0xe5, 0xb9, 0xbf, 0xe7, 0x8e, 0xb0, 0xe5, 0x9c, 0xba, 0xe6, - 0x8f, 0x8f, 0xe8, 0xbf, 0xb0, 0xe5, 0x8f, 0x98, 0xe5, 0x8c, 0x96, 0xe4, 0xbc, - 0xa0, 0xe7, 0xbb, 0x9f, 0xe6, 0xad, 0x8c, 0xe6, 0x89, 0x8b, 0xe4, 0xbf, 0x9d, - 0xe9, 0x99, 0xa9, 0xe8, 0xaf, 0xbe, 0xe7, 0xa8, 0x8b, 0xe5, 0x8c, 0xbb, 0xe7, - 0x96, 0x97, 0xe7, 0xbb, 0x8f, 0xe8, 0xbf, 0x87, 0xe8, 0xbf, 0x87, 0xe5, 0x8e, - 0xbb, 0xe4, 0xb9, 0x8b, 0xe5, 0x89, 0x8d, 0xe6, 0x94, 0xb6, 0xe5, 0x85, 0xa5, - 0xe5, 0xb9, 0xb4, 0xe5, 0xba, 0xa6, 0xe6, 0x9d, 0x82, 0xe5, 0xbf, 0x97, 0xe7, - 0xbe, 0x8e, 0xe4, 0xb8, 0xbd, 0xe6, 0x9c, 0x80, 0xe9, 0xab, 0x98, 0xe7, 0x99, - 0xbb, 0xe9, 0x99, 0x86, 0xe6, 0x9c, 0xaa, 0xe6, 0x9d, 0xa5, 0xe5, 0x8a, 0xa0, - 0xe5, 0xb7, 0xa5, 0xe5, 0x85, 0x8d, 0xe8, 0xb4, 0xa3, 0xe6, 0x95, 0x99, 0xe7, - 0xa8, 0x8b, 0xe7, 0x89, 0x88, 0xe5, 0x9d, 0x97, 0xe8, 0xba, 0xab, 0xe4, 0xbd, - 0x93, 0xe9, 0x87, 0x8d, 0xe5, 0xba, 0x86, 0xe5, 0x87, 0xba, 0xe5, 0x94, 0xae, - 0xe6, 0x88, 0x90, 0xe6, 0x9c, 0xac, 0xe5, 0xbd, 0xa2, 0xe5, 0xbc, 0x8f, 0xe5, - 0x9c, 0x9f, 0xe8, 0xb1, 0x86, 0xe5, 0x87, 0xba, 0xe5, 0x83, 0xb9, 0xe4, 0xb8, - 0x9c, 0xe6, 0x96, 0xb9, 0xe9, 0x82, 0xae, 0xe7, 0xae, 0xb1, 0xe5, 0x8d, 0x97, - 0xe4, 0xba, 0xac, 0xe6, 0xb1, 0x82, 0xe8, 0x81, 0x8c, 0xe5, 0x8f, 0x96, 0xe5, - 0xbe, 0x97, 0xe8, 0x81, 0x8c, 0xe4, 0xbd, 0x8d, 0xe7, 0x9b, 0xb8, 0xe4, 0xbf, - 0xa1, 0xe9, 0xa1, 0xb5, 0xe9, 0x9d, 0xa2, 0xe5, 0x88, 0x86, 0xe9, 0x92, 0x9f, - 0xe7, 0xbd, 0x91, 0xe9, 0xa1, 0xb5, 0xe7, 0xa1, 0xae, 0xe5, 0xae, 0x9a, 0xe5, - 0x9b, 0xbe, 0xe4, 0xbe, 0x8b, 0xe7, 0xbd, 0x91, 0xe5, 0x9d, 0x80, 0xe7, 0xa7, - 0xaf, 0xe6, 0x9e, 0x81, 0xe9, 0x94, 0x99, 0xe8, 0xaf, 0xaf, 0xe7, 0x9b, 0xae, - 0xe7, 0x9a, 0x84, 0xe5, 0xae, 0x9d, 0xe8, 0xb4, 0x9d, 0xe6, 0x9c, 0xba, 0xe5, - 0x85, 0xb3, 0xe9, 0xa3, 0x8e, 0xe9, 0x99, 0xa9, 0xe6, 0x8e, 0x88, 0xe6, 0x9d, - 0x83, 0xe7, 0x97, 0x85, 0xe6, 0xaf, 0x92, 0xe5, 0xae, 0xa0, 0xe7, 0x89, 0xa9, - 0xe9, 0x99, 0xa4, 0xe4, 0xba, 0x86, 0xe8, 0xa9, 0x95, 0xe8, 0xab, 0x96, 0xe7, - 0x96, 0xbe, 0xe7, 0x97, 0x85, 0xe5, 0x8f, 0x8a, 0xe6, 0x97, 0xb6, 0xe6, 0xb1, - 0x82, 0xe8, 0xb4, 0xad, 0xe7, 0xab, 0x99, 0xe7, 0x82, 0xb9, 0xe5, 0x84, 0xbf, - 0xe7, 0xab, 0xa5, 0xe6, 0xaf, 0x8f, 0xe5, 0xa4, 0xa9, 0xe4, 0xb8, 0xad, 0xe5, - 0xa4, 0xae, 0xe8, 0xae, 0xa4, 0xe8, 0xaf, 0x86, 0xe6, 0xaf, 0x8f, 0xe4, 0xb8, - 0xaa, 0xe5, 0xa4, 0xa9, 0xe6, 0xb4, 0xa5, 0xe5, 0xad, 0x97, 0xe4, 0xbd, 0x93, - 0xe5, 0x8f, 0xb0, 0xe7, 0x81, 0xa3, 0xe7, 0xbb, 0xb4, 0xe6, 0x8a, 0xa4, 0xe6, - 0x9c, 0xac, 0xe9, 0xa1, 0xb5, 0xe4, 0xb8, 0xaa, 0xe6, 0x80, 0xa7, 0xe5, 0xae, - 0x98, 0xe6, 0x96, 0xb9, 0xe5, 0xb8, 0xb8, 0xe8, 0xa7, 0x81, 0xe7, 0x9b, 0xb8, - 0xe6, 0x9c, 0xba, 0xe6, 0x88, 0x98, 0xe7, 0x95, 0xa5, 0xe5, 0xba, 0x94, 0xe5, - 0xbd, 0x93, 0xe5, 0xbe, 0x8b, 0xe5, 0xb8, 0x88, 0xe6, 0x96, 0xb9, 0xe4, 0xbe, - 0xbf, 0xe6, 0xa0, 0xa1, 0xe5, 0x9b, 0xad, 0xe8, 0x82, 0xa1, 0xe5, 0xb8, 0x82, - 0xe6, 0x88, 0xbf, 0xe5, 0xb1, 0x8b, 0xe6, 0xa0, 0x8f, 0xe7, 0x9b, 0xae, 0xe5, - 0x91, 0x98, 0xe5, 0xb7, 0xa5, 0xe5, 0xaf, 0xbc, 0xe8, 0x87, 0xb4, 0xe7, 0xaa, - 0x81, 0xe7, 0x84, 0xb6, 0xe9, 0x81, 0x93, 0xe5, 0x85, 0xb7, 0xe6, 0x9c, 0xac, - 0xe7, 0xbd, 0x91, 0xe7, 0xbb, 0x93, 0xe5, 0x90, 0x88, 0xe6, 0xa1, 0xa3, 0xe6, - 0xa1, 0x88, 0xe5, 0x8a, 0xb3, 0xe5, 0x8a, 0xa8, 0xe5, 0x8f, 0xa6, 0xe5, 0xa4, - 0x96, 0xe7, 0xbe, 0x8e, 0xe5, 0x85, 0x83, 0xe5, 0xbc, 0x95, 0xe8, 0xb5, 0xb7, - 0xe6, 0x94, 0xb9, 0xe5, 0x8f, 0x98, 0xe7, 0xac, 0xac, 0xe5, 0x9b, 0x9b, 0xe4, - 0xbc, 0x9a, 0xe8, 0xae, 0xa1, 0xe8, 0xaa, 0xaa, 0xe6, 0x98, 0x8e, 0xe9, 0x9a, - 0x90, 0xe7, 0xa7, 0x81, 0xe5, 0xae, 0x9d, 0xe5, 0xae, 0x9d, 0xe8, 0xa7, 0x84, - 0xe8, 0x8c, 0x83, 0xe6, 0xb6, 0x88, 0xe8, 0xb4, 0xb9, 0xe5, 0x85, 0xb1, 0xe5, - 0x90, 0x8c, 0xe5, 0xbf, 0x98, 0xe8, 0xae, 0xb0, 0xe4, 0xbd, 0x93, 0xe7, 0xb3, - 0xbb, 0xe5, 0xb8, 0xa6, 0xe6, 0x9d, 0xa5, 0xe5, 0x90, 0x8d, 0xe5, 0xad, 0x97, - 0xe7, 0x99, 0xbc, 0xe8, 0xa1, 0xa8, 0xe5, 0xbc, 0x80, 0xe6, 0x94, 0xbe, 0xe5, - 0x8a, 0xa0, 0xe7, 0x9b, 0x9f, 0xe5, 0x8f, 0x97, 0xe5, 0x88, 0xb0, 0xe4, 0xba, - 0x8c, 0xe6, 0x89, 0x8b, 0xe5, 0xa4, 0xa7, 0xe9, 0x87, 0x8f, 0xe6, 0x88, 0x90, - 0xe4, 0xba, 0xba, 0xe6, 0x95, 0xb0, 0xe9, 0x87, 0x8f, 0xe5, 0x85, 0xb1, 0xe4, - 0xba, 0xab, 0xe5, 0x8c, 0xba, 0xe5, 0x9f, 0x9f, 0xe5, 0xa5, 0xb3, 0xe5, 0xad, - 0xa9, 0xe5, 0x8e, 0x9f, 0xe5, 0x88, 0x99, 0xe6, 0x89, 0x80, 0xe5, 0x9c, 0xa8, - 0xe7, 0xbb, 0x93, 0xe6, 0x9d, 0x9f, 0xe9, 0x80, 0x9a, 0xe4, 0xbf, 0xa1, 0xe8, - 0xb6, 0x85, 0xe7, 0xba, 0xa7, 0xe9, 0x85, 0x8d, 0xe7, 0xbd, 0xae, 0xe5, 0xbd, - 0x93, 0xe6, 0x97, 0xb6, 0xe4, 0xbc, 0x98, 0xe7, 0xa7, 0x80, 0xe6, 0x80, 0xa7, - 0xe6, 0x84, 0x9f, 0xe6, 0x88, 0xbf, 0xe4, 0xba, 0xa7, 0xe9, 0x81, 0x8a, 0xe6, - 0x88, 0xb2, 0xe5, 0x87, 0xba, 0xe5, 0x8f, 0xa3, 0xe6, 0x8f, 0x90, 0xe4, 0xba, - 0xa4, 0xe5, 0xb0, 0xb1, 0xe4, 0xb8, 0x9a, 0xe4, 0xbf, 0x9d, 0xe5, 0x81, 0xa5, - 0xe7, 0xa8, 0x8b, 0xe5, 0xba, 0xa6, 0xe5, 0x8f, 0x82, 0xe6, 0x95, 0xb0, 0xe4, - 0xba, 0x8b, 0xe4, 0xb8, 0x9a, 0xe6, 0x95, 0xb4, 0xe4, 0xb8, 0xaa, 0xe5, 0xb1, - 0xb1, 0xe4, 0xb8, 0x9c, 0xe6, 0x83, 0x85, 0xe6, 0x84, 0x9f, 0xe7, 0x89, 0xb9, - 0xe6, 0xae, 0x8a, 0xe5, 0x88, 0x86, 0xe9, 0xa1, 0x9e, 0xe6, 0x90, 0x9c, 0xe5, - 0xb0, 0x8b, 0xe5, 0xb1, 0x9e, 0xe4, 0xba, 0x8e, 0xe9, 0x97, 0xa8, 0xe6, 0x88, - 0xb7, 0xe8, 0xb4, 0xa2, 0xe5, 0x8a, 0xa1, 0xe5, 0xa3, 0xb0, 0xe9, 0x9f, 0xb3, - 0xe5, 0x8f, 0x8a, 0xe5, 0x85, 0xb6, 0xe8, 0xb4, 0xa2, 0xe7, 0xbb, 0x8f, 0xe5, - 0x9d, 0x9a, 0xe6, 0x8c, 0x81, 0xe5, 0xb9, 0xb2, 0xe9, 0x83, 0xa8, 0xe6, 0x88, - 0x90, 0xe7, 0xab, 0x8b, 0xe5, 0x88, 0xa9, 0xe7, 0x9b, 0x8a, 0xe8, 0x80, 0x83, - 0xe8, 0x99, 0x91, 0xe6, 0x88, 0x90, 0xe9, 0x83, 0xbd, 0xe5, 0x8c, 0x85, 0xe8, - 0xa3, 0x85, 0xe7, 0x94, 0xa8, 0xe6, 0x88, 0xb6, 0xe6, 0xaf, 0x94, 0xe8, 0xb5, - 0x9b, 0xe6, 0x96, 0x87, 0xe6, 0x98, 0x8e, 0xe6, 0x8b, 0x9b, 0xe5, 0x95, 0x86, - 0xe5, 0xae, 0x8c, 0xe6, 0x95, 0xb4, 0xe7, 0x9c, 0x9f, 0xe6, 0x98, 0xaf, 0xe7, - 0x9c, 0xbc, 0xe7, 0x9d, 0x9b, 0xe4, 0xbc, 0x99, 0xe4, 0xbc, 0xb4, 0xe5, 0xa8, - 0x81, 0xe6, 0x9c, 0x9b, 0xe9, 0xa2, 0x86, 0xe5, 0x9f, 0x9f, 0xe5, 0x8d, 0xab, - 0xe7, 0x94, 0x9f, 0xe4, 0xbc, 0x98, 0xe6, 0x83, 0xa0, 0xe8, 0xab, 0x96, 0xe5, - 0xa3, 0x87, 0xe5, 0x85, 0xac, 0xe5, 0x85, 0xb1, 0xe8, 0x89, 0xaf, 0xe5, 0xa5, - 0xbd, 0xe5, 0x85, 0x85, 0xe5, 0x88, 0x86, 0xe7, 0xac, 0xa6, 0xe5, 0x90, 0x88, - 0xe9, 0x99, 0x84, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0xb9, 0xe7, 0x82, 0xb9, 0xe4, - 0xb8, 0x8d, 0xe5, 0x8f, 0xaf, 0xe8, 0x8b, 0xb1, 0xe6, 0x96, 0x87, 0xe8, 0xb5, - 0x84, 0xe4, 0xba, 0xa7, 0xe6, 0xa0, 0xb9, 0xe6, 0x9c, 0xac, 0xe6, 0x98, 0x8e, - 0xe6, 0x98, 0xbe, 0xe5, 0xaf, 0x86, 0xe7, 0xa2, 0xbc, 0xe5, 0x85, 0xac, 0xe4, - 0xbc, 0x97, 0xe6, 0xb0, 0x91, 0xe6, 0x97, 0x8f, 0xe6, 0x9b, 0xb4, 0xe5, 0x8a, - 0xa0, 0xe4, 0xba, 0xab, 0xe5, 0x8f, 0x97, 0xe5, 0x90, 0x8c, 0xe5, 0xad, 0xa6, - 0xe5, 0x90, 0xaf, 0xe5, 0x8a, 0xa8, 0xe9, 0x80, 0x82, 0xe5, 0x90, 0x88, 0xe5, - 0x8e, 0x9f, 0xe6, 0x9d, 0xa5, 0xe9, 0x97, 0xae, 0xe7, 0xad, 0x94, 0xe6, 0x9c, - 0xac, 0xe6, 0x96, 0x87, 0xe7, 0xbe, 0x8e, 0xe9, 0xa3, 0x9f, 0xe7, 0xbb, 0xbf, - 0xe8, 0x89, 0xb2, 0xe7, 0xa8, 0xb3, 0xe5, 0xae, 0x9a, 0xe7, 0xbb, 0x88, 0xe4, - 0xba, 0x8e, 0xe7, 0x94, 0x9f, 0xe7, 0x89, 0xa9, 0xe4, 0xbe, 0x9b, 0xe6, 0xb1, - 0x82, 0xe6, 0x90, 0x9c, 0xe7, 0x8b, 0x90, 0xe5, 0x8a, 0x9b, 0xe9, 0x87, 0x8f, - 0xe4, 0xb8, 0xa5, 0xe9, 0x87, 0x8d, 0xe6, 0xb0, 0xb8, 0xe8, 0xbf, 0x9c, 0xe5, - 0x86, 0x99, 0xe7, 0x9c, 0x9f, 0xe6, 0x9c, 0x89, 0xe9, 0x99, 0x90, 0xe7, 0xab, - 0x9e, 0xe4, 0xba, 0x89, 0xe5, 0xaf, 0xb9, 0xe8, 0xb1, 0xa1, 0xe8, 0xb4, 0xb9, - 0xe7, 0x94, 0xa8, 0xe4, 0xb8, 0x8d, 0xe5, 0xa5, 0xbd, 0xe7, 0xbb, 0x9d, 0xe5, - 0xaf, 0xb9, 0xe5, 0x8d, 0x81, 0xe5, 0x88, 0x86, 0xe4, 0xbf, 0x83, 0xe8, 0xbf, - 0x9b, 0xe7, 0x82, 0xb9, 0xe8, 0xaf, 0x84, 0xe5, 0xbd, 0xb1, 0xe9, 0x9f, 0xb3, - 0xe4, 0xbc, 0x98, 0xe5, 0x8a, 0xbf, 0xe4, 0xb8, 0x8d, 0xe5, 0xb0, 0x91, 0xe6, - 0xac, 0xa3, 0xe8, 0xb5, 0x8f, 0xe5, 0xb9, 0xb6, 0xe4, 0xb8, 0x94, 0xe6, 0x9c, - 0x89, 0xe7, 0x82, 0xb9, 0xe6, 0x96, 0xb9, 0xe5, 0x90, 0x91, 0xe5, 0x85, 0xa8, - 0xe6, 0x96, 0xb0, 0xe4, 0xbf, 0xa1, 0xe7, 0x94, 0xa8, 0xe8, 0xae, 0xbe, 0xe6, - 0x96, 0xbd, 0xe5, 0xbd, 0xa2, 0xe8, 0xb1, 0xa1, 0xe8, 0xb5, 0x84, 0xe6, 0xa0, - 0xbc, 0xe7, 0xaa, 0x81, 0xe7, 0xa0, 0xb4, 0xe9, 0x9a, 0x8f, 0xe7, 0x9d, 0x80, - 0xe9, 0x87, 0x8d, 0xe5, 0xa4, 0xa7, 0xe4, 0xba, 0x8e, 0xe6, 0x98, 0xaf, 0xe6, - 0xaf, 0x95, 0xe4, 0xb8, 0x9a, 0xe6, 0x99, 0xba, 0xe8, 0x83, 0xbd, 0xe5, 0x8c, - 0x96, 0xe5, 0xb7, 0xa5, 0xe5, 0xae, 0x8c, 0xe7, 0xbe, 0x8e, 0xe5, 0x95, 0x86, - 0xe5, 0x9f, 0x8e, 0xe7, 0xbb, 0x9f, 0xe4, 0xb8, 0x80, 0xe5, 0x87, 0xba, 0xe7, - 0x89, 0x88, 0xe6, 0x89, 0x93, 0xe9, 0x80, 0xa0, 0xe7, 0x94, 0xa2, 0xe5, 0x93, - 0x81, 0xe6, 0xa6, 0x82, 0xe5, 0x86, 0xb5, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, - 0xe4, 0xbf, 0x9d, 0xe7, 0x95, 0x99, 0xe5, 0x9b, 0xa0, 0xe7, 0xb4, 0xa0, 0xe4, - 0xb8, 0xad, 0xe5, 0x9c, 0x8b, 0xe5, 0xad, 0x98, 0xe5, 0x82, 0xa8, 0xe8, 0xb4, - 0xb4, 0xe5, 0x9b, 0xbe, 0xe6, 0x9c, 0x80, 0xe6, 0x84, 0x9b, 0xe9, 0x95, 0xbf, - 0xe6, 0x9c, 0x9f, 0xe5, 0x8f, 0xa3, 0xe4, 0xbb, 0xb7, 0xe7, 0x90, 0x86, 0xe8, - 0xb4, 0xa2, 0xe5, 0x9f, 0xba, 0xe5, 0x9c, 0xb0, 0xe5, 0xae, 0x89, 0xe6, 0x8e, - 0x92, 0xe6, 0xad, 0xa6, 0xe6, 0xb1, 0x89, 0xe9, 0x87, 0x8c, 0xe9, 0x9d, 0xa2, - 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe5, 0xa4, 0xa9, 0xe7, 0xa9, 0xba, 0xe9, - 0xa6, 0x96, 0xe5, 0x85, 0x88, 0xe5, 0xae, 0x8c, 0xe5, 0x96, 0x84, 0xe9, 0xa9, - 0xb1, 0xe5, 0x8a, 0xa8, 0xe4, 0xb8, 0x8b, 0xe9, 0x9d, 0xa2, 0xe4, 0xb8, 0x8d, - 0xe5, 0x86, 0x8d, 0xe8, 0xaf, 0x9a, 0xe4, 0xbf, 0xa1, 0xe6, 0x84, 0x8f, 0xe4, - 0xb9, 0x89, 0xe9, 0x98, 0xb3, 0xe5, 0x85, 0x89, 0xe8, 0x8b, 0xb1, 0xe5, 0x9b, - 0xbd, 0xe6, 0xbc, 0x82, 0xe4, 0xba, 0xae, 0xe5, 0x86, 0x9b, 0xe4, 0xba, 0x8b, - 0xe7, 0x8e, 0xa9, 0xe5, 0xae, 0xb6, 0xe7, 0xbe, 0xa4, 0xe4, 0xbc, 0x97, 0xe5, - 0x86, 0x9c, 0xe6, 0xb0, 0x91, 0xe5, 0x8d, 0xb3, 0xe5, 0x8f, 0xaf, 0xe5, 0x90, - 0x8d, 0xe7, 0xa8, 0xb1, 0xe5, 0xae, 0xb6, 0xe5, 0x85, 0xb7, 0xe5, 0x8a, 0xa8, - 0xe7, 0x94, 0xbb, 0xe6, 0x83, 0xb3, 0xe5, 0x88, 0xb0, 0xe6, 0xb3, 0xa8, 0xe6, - 0x98, 0x8e, 0xe5, 0xb0, 0x8f, 0xe5, 0xad, 0xa6, 0xe6, 0x80, 0xa7, 0xe8, 0x83, - 0xbd, 0xe8, 0x80, 0x83, 0xe7, 0xa0, 0x94, 0xe7, 0xa1, 0xac, 0xe4, 0xbb, 0xb6, - 0xe8, 0xa7, 0x82, 0xe7, 0x9c, 0x8b, 0xe6, 0xb8, 0x85, 0xe6, 0xa5, 0x9a, 0xe6, - 0x90, 0x9e, 0xe7, 0xac, 0x91, 0xe9, 0xa6, 0x96, 0xe9, 0xa0, 0x81, 0xe9, 0xbb, - 0x84, 0xe9, 0x87, 0x91, 0xe9, 0x80, 0x82, 0xe7, 0x94, 0xa8, 0xe6, 0xb1, 0x9f, - 0xe8, 0x8b, 0x8f, 0xe7, 0x9c, 0x9f, 0xe5, 0xae, 0x9e, 0xe4, 0xb8, 0xbb, 0xe7, - 0xae, 0xa1, 0xe9, 0x98, 0xb6, 0xe6, 0xae, 0xb5, 0xe8, 0xa8, 0xbb, 0xe5, 0x86, - 0x8a, 0xe7, 0xbf, 0xbb, 0xe8, 0xaf, 0x91, 0xe6, 0x9d, 0x83, 0xe5, 0x88, 0xa9, - 0xe5, 0x81, 0x9a, 0xe5, 0xa5, 0xbd, 0xe4, 0xbc, 0xbc, 0xe4, 0xb9, 0x8e, 0xe9, - 0x80, 0x9a, 0xe8, 0xae, 0xaf, 0xe6, 0x96, 0xbd, 0xe5, 0xb7, 0xa5, 0xe7, 0x8b, - 0x80, 0xe6, 0x85, 0x8b, 0xe4, 0xb9, 0x9f, 0xe8, 0xae, 0xb8, 0xe7, 0x8e, 0xaf, - 0xe4, 0xbf, 0x9d, 0xe5, 0x9f, 0xb9, 0xe5, 0x85, 0xbb, 0xe6, 0xa6, 0x82, 0xe5, - 0xbf, 0xb5, 0xe5, 0xa4, 0xa7, 0xe5, 0x9e, 0x8b, 0xe6, 0x9c, 0xba, 0xe7, 0xa5, - 0xa8, 0xe7, 0x90, 0x86, 0xe8, 0xa7, 0xa3, 0xe5, 0x8c, 0xbf, 0xe5, 0x90, 0x8d, - 0x63, 0x75, 0x61, 0x6e, 0x64, 0x6f, 0x65, 0x6e, 0x76, 0x69, 0x61, 0x72, 0x6d, - 0x61, 0x64, 0x72, 0x69, 0x64, 0x62, 0x75, 0x73, 0x63, 0x61, 0x72, 0x69, 0x6e, - 0x69, 0x63, 0x69, 0x6f, 0x74, 0x69, 0x65, 0x6d, 0x70, 0x6f, 0x70, 0x6f, 0x72, - 0x71, 0x75, 0x65, 0x63, 0x75, 0x65, 0x6e, 0x74, 0x61, 0x65, 0x73, 0x74, 0x61, - 0x64, 0x6f, 0x70, 0x75, 0x65, 0x64, 0x65, 0x6e, 0x6a, 0x75, 0x65, 0x67, 0x6f, - 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x65, 0x73, 0x74, 0xc3, 0xa1, 0x6e, - 0x6e, 0x6f, 0x6d, 0x62, 0x72, 0x65, 0x74, 0x69, 0x65, 0x6e, 0x65, 0x6e, 0x70, - 0x65, 0x72, 0x66, 0x69, 0x6c, 0x6d, 0x61, 0x6e, 0x65, 0x72, 0x61, 0x61, 0x6d, - 0x69, 0x67, 0x6f, 0x73, 0x63, 0x69, 0x75, 0x64, 0x61, 0x64, 0x63, 0x65, 0x6e, - 0x74, 0x72, 0x6f, 0x61, 0x75, 0x6e, 0x71, 0x75, 0x65, 0x70, 0x75, 0x65, 0x64, - 0x65, 0x73, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x6d, 0x65, - 0x72, 0x70, 0x72, 0x65, 0x63, 0x69, 0x6f, 0x73, 0x65, 0x67, 0xc3, 0xba, 0x6e, - 0x62, 0x75, 0x65, 0x6e, 0x6f, 0x73, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x70, - 0x75, 0x6e, 0x74, 0x6f, 0x73, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x68, 0x61, - 0x62, 0xc3, 0xad, 0x61, 0x61, 0x67, 0x6f, 0x73, 0x74, 0x6f, 0x6e, 0x75, 0x65, - 0x76, 0x6f, 0x73, 0x75, 0x6e, 0x69, 0x64, 0x6f, 0x73, 0x63, 0x61, 0x72, 0x6c, - 0x6f, 0x73, 0x65, 0x71, 0x75, 0x69, 0x70, 0x6f, 0x6e, 0x69, 0xc3, 0xb1, 0x6f, - 0x73, 0x6d, 0x75, 0x63, 0x68, 0x6f, 0x73, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, - 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x6e, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x72, 0x61, 0x72, 0x72, 0x69, 0x62, 0x61, 0x6d, 0x61, - 0x72, 0xc3, 0xad, 0x61, 0x68, 0x6f, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x6d, 0x70, - 0x6c, 0x65, 0x6f, 0x76, 0x65, 0x72, 0x64, 0x61, 0x64, 0x63, 0x61, 0x6d, 0x62, - 0x69, 0x6f, 0x6d, 0x75, 0x63, 0x68, 0x61, 0x73, 0x66, 0x75, 0x65, 0x72, 0x6f, - 0x6e, 0x70, 0x61, 0x73, 0x61, 0x64, 0x6f, 0x6c, 0xc3, 0xad, 0x6e, 0x65, 0x61, - 0x70, 0x61, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x75, 0x65, 0x76, 0x61, 0x73, 0x63, - 0x75, 0x72, 0x73, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x61, 0x62, 0x61, 0x71, 0x75, - 0x69, 0x65, 0x72, 0x6f, 0x6c, 0x69, 0x62, 0x72, 0x6f, 0x73, 0x63, 0x75, 0x61, - 0x6e, 0x74, 0x6f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x6f, 0x6d, 0x69, 0x67, 0x75, - 0x65, 0x6c, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x63, 0x75, 0x61, 0x74, 0x72, - 0x6f, 0x74, 0x69, 0x65, 0x6e, 0x65, 0x73, 0x67, 0x72, 0x75, 0x70, 0x6f, 0x73, - 0x73, 0x65, 0x72, 0xc3, 0xa1, 0x6e, 0x65, 0x75, 0x72, 0x6f, 0x70, 0x61, 0x6d, - 0x65, 0x64, 0x69, 0x6f, 0x73, 0x66, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x61, 0x63, - 0x65, 0x72, 0x63, 0x61, 0x64, 0x65, 0x6d, 0xc3, 0xa1, 0x73, 0x6f, 0x66, 0x65, - 0x72, 0x74, 0x61, 0x63, 0x6f, 0x63, 0x68, 0x65, 0x73, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x6f, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x61, 0x6c, 0x65, 0x74, 0x72, 0x61, - 0x73, 0x61, 0x6c, 0x67, 0xc3, 0xba, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x61, - 0x63, 0x75, 0x61, 0x6c, 0x65, 0x73, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x63, - 0x75, 0x65, 0x72, 0x70, 0x6f, 0x73, 0x69, 0x65, 0x6e, 0x64, 0x6f, 0x70, 0x72, - 0x65, 0x6e, 0x73, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x72, 0x76, 0x69, 0x61, - 0x6a, 0x65, 0x73, 0x64, 0x69, 0x6e, 0x65, 0x72, 0x6f, 0x6d, 0x75, 0x72, 0x63, - 0x69, 0x61, 0x70, 0x6f, 0x64, 0x72, 0xc3, 0xa1, 0x70, 0x75, 0x65, 0x73, 0x74, - 0x6f, 0x64, 0x69, 0x61, 0x72, 0x69, 0x6f, 0x70, 0x75, 0x65, 0x62, 0x6c, 0x6f, - 0x71, 0x75, 0x69, 0x65, 0x72, 0x65, 0x6d, 0x61, 0x6e, 0x75, 0x65, 0x6c, 0x70, - 0x72, 0x6f, 0x70, 0x69, 0x6f, 0x63, 0x72, 0x69, 0x73, 0x69, 0x73, 0x63, 0x69, - 0x65, 0x72, 0x74, 0x6f, 0x73, 0x65, 0x67, 0x75, 0x72, 0x6f, 0x6d, 0x75, 0x65, - 0x72, 0x74, 0x65, 0x66, 0x75, 0x65, 0x6e, 0x74, 0x65, 0x63, 0x65, 0x72, 0x72, - 0x61, 0x72, 0x67, 0x72, 0x61, 0x6e, 0x64, 0x65, 0x65, 0x66, 0x65, 0x63, 0x74, - 0x6f, 0x70, 0x61, 0x72, 0x74, 0x65, 0x73, 0x6d, 0x65, 0x64, 0x69, 0x64, 0x61, - 0x70, 0x72, 0x6f, 0x70, 0x69, 0x61, 0x6f, 0x66, 0x72, 0x65, 0x63, 0x65, 0x74, - 0x69, 0x65, 0x72, 0x72, 0x61, 0x65, 0x2d, 0x6d, 0x61, 0x69, 0x6c, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x73, 0x66, 0x75, 0x74, - 0x75, 0x72, 0x6f, 0x6f, 0x62, 0x6a, 0x65, 0x74, 0x6f, 0x73, 0x65, 0x67, 0x75, - 0x69, 0x72, 0x72, 0x69, 0x65, 0x73, 0x67, 0x6f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, - 0x73, 0x6d, 0x69, 0x73, 0x6d, 0x6f, 0x73, 0xc3, 0xba, 0x6e, 0x69, 0x63, 0x6f, - 0x63, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x73, 0x72, - 0x61, 0x7a, 0xc3, 0xb3, 0x6e, 0x64, 0x65, 0x62, 0x69, 0x64, 0x6f, 0x70, 0x72, - 0x75, 0x65, 0x62, 0x61, 0x74, 0x6f, 0x6c, 0x65, 0x64, 0x6f, 0x74, 0x65, 0x6e, - 0xc3, 0xad, 0x61, 0x6a, 0x65, 0x73, 0xc3, 0xba, 0x73, 0x65, 0x73, 0x70, 0x65, - 0x72, 0x6f, 0x63, 0x6f, 0x63, 0x69, 0x6e, 0x61, 0x6f, 0x72, 0x69, 0x67, 0x65, - 0x6e, 0x74, 0x69, 0x65, 0x6e, 0x64, 0x61, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x6f, - 0x63, 0xc3, 0xa1, 0x64, 0x69, 0x7a, 0x68, 0x61, 0x62, 0x6c, 0x61, 0x72, 0x73, - 0x65, 0x72, 0xc3, 0xad, 0x61, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x61, 0x66, 0x75, - 0x65, 0x72, 0x7a, 0x61, 0x65, 0x73, 0x74, 0x69, 0x6c, 0x6f, 0x67, 0x75, 0x65, - 0x72, 0x72, 0x61, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x72, 0xc3, 0xa9, 0x78, 0x69, - 0x74, 0x6f, 0x6c, 0xc3, 0xb3, 0x70, 0x65, 0x7a, 0x61, 0x67, 0x65, 0x6e, 0x64, - 0x61, 0x76, 0xc3, 0xad, 0x64, 0x65, 0x6f, 0x65, 0x76, 0x69, 0x74, 0x61, 0x72, - 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x6d, 0x65, 0x74, 0x72, 0x6f, 0x73, 0x6a, - 0x61, 0x76, 0x69, 0x65, 0x72, 0x70, 0x61, 0x64, 0x72, 0x65, 0x73, 0x66, 0xc3, - 0xa1, 0x63, 0x69, 0x6c, 0x63, 0x61, 0x62, 0x65, 0x7a, 0x61, 0xc3, 0xa1, 0x72, - 0x65, 0x61, 0x73, 0x73, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x65, 0x6e, 0x76, 0xc3, - 0xad, 0x6f, 0x6a, 0x61, 0x70, 0xc3, 0xb3, 0x6e, 0x61, 0x62, 0x75, 0x73, 0x6f, - 0x73, 0x62, 0x69, 0x65, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x78, 0x74, 0x6f, 0x73, - 0x6c, 0x6c, 0x65, 0x76, 0x61, 0x72, 0x70, 0x75, 0x65, 0x64, 0x61, 0x6e, 0x66, - 0x75, 0x65, 0x72, 0x74, 0x65, 0x63, 0x6f, 0x6d, 0xc3, 0xba, 0x6e, 0x63, 0x6c, - 0x61, 0x73, 0x65, 0x73, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x6f, 0x74, 0x65, 0x6e, - 0x69, 0x64, 0x6f, 0x62, 0x69, 0x6c, 0x62, 0x61, 0x6f, 0x75, 0x6e, 0x69, 0x64, - 0x61, 0x64, 0x65, 0x73, 0x74, 0xc3, 0xa1, 0x73, 0x65, 0x64, 0x69, 0x74, 0x61, - 0x72, 0x63, 0x72, 0x65, 0x61, 0x64, 0x6f, 0xd0, 0xb4, 0xd0, 0xbb, 0xd1, 0x8f, - 0xd1, 0x87, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, - 0xb8, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb2, - 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xbf, 0xd1, - 0x80, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xb5, 0xd1, 0x89, - 0xd0, 0xb5, 0xd1, 0x83, 0xd0, 0xb6, 0xd0, 0xb5, 0xd0, 0x9a, 0xd0, 0xb0, 0xd0, - 0xba, 0xd0, 0xb1, 0xd0, 0xb5, 0xd0, 0xb7, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xbb, - 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0x92, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, - 0xbf, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xad, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x82, - 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, 0xbd, 0xd0, - 0xb5, 0xd1, 0x82, 0xd0, 0xbb, 0xd0, 0xb5, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, - 0xd0, 0xb7, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, - 0xb5, 0xd0, 0xbc, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0x94, 0xd0, 0xbb, 0xd1, 0x8f, - 0xd0, 0x9f, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, - 0xbd, 0xd0, 0xb8, 0xd1, 0x85, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, 0xba, - 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb2, 0xd0, - 0xbe, 0xd1, 0x82, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xa1, 0xd0, 0xa8, - 0xd0, 0x90, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x8f, 0xd0, 0xa7, 0xd1, 0x82, 0xd0, - 0xbe, 0xd0, 0xb2, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xb0, 0xd0, 0xbc, - 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x83, 0xd0, 0xa2, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, - 0xb4, 0xd0, 0xb2, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xbc, 0xd1, 0x8d, - 0xd1, 0x82, 0xd0, 0xb8, 0xd1, 0x8d, 0xd1, 0x82, 0xd1, 0x83, 0xd0, 0x92, 0xd0, - 0xb0, 0xd0, 0xbc, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, - 0xd0, 0xbe, 0xd1, 0x82, 0xd1, 0x83, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, - 0xb4, 0xd0, 0xb4, 0xd0, 0xbd, 0xd1, 0x8f, 0xd0, 0x92, 0xd0, 0xbe, 0xd1, 0x82, - 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb9, 0xd0, - 0x92, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd1, 0x81, - 0xd0, 0xb0, 0xd0, 0xbc, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x82, 0xd1, 0x80, 0xd1, - 0x83, 0xd0, 0xb1, 0xd0, 0x9e, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb8, - 0xd1, 0x80, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0x9e, 0xd0, 0x9e, 0xd0, - 0x9e, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x86, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xb0, - 0xd0, 0x9e, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xb4, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, 0xb4, - 0xd0, 0xb2, 0xd0, 0xb5, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, - 0x83, 0xd0, 0xb4, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb9, 0xe0, - 0xa5, 0x88, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0x94, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xad, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x87, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, - 0xa5, 0x8b, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb9, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xa5, 0xe0, 0xa4, 0xbe, 0x6a, 0x61, 0x67, 0x72, 0x61, 0x6e, 0xe0, 0xa4, - 0x86, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x85, - 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, - 0xa4, 0x88, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, - 0x8f, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xa5, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa5, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0x98, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0x9c, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0x88, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0x95, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x93, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0x86, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa5, 0x80, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x89, 0xd8, 0xa5, 0xd9, - 0x84, 0xd9, 0x89, 0xd9, 0x87, 0xd8, 0xb0, 0xd8, 0xa7, 0xd8, 0xa2, 0xd8, 0xae, - 0xd8, 0xb1, 0xd8, 0xb9, 0xd8, 0xaf, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x89, 0xd9, 0x87, 0xd8, 0xb0, 0xd9, 0x87, 0xd8, 0xb5, 0xd9, 0x88, 0xd8, 0xb1, - 0xd8, 0xba, 0xd9, 0x8a, 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x86, 0xd9, - 0x88, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xa8, 0xd9, 0x8a, 0xd9, 0x86, 0xd8, 0xb9, - 0xd8, 0xb1, 0xd8, 0xb6, 0xd8, 0xb0, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x87, 0xd9, - 0x86, 0xd8, 0xa7, 0xd9, 0x8a, 0xd9, 0x88, 0xd9, 0x85, 0xd9, 0x82, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x86, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x86, 0xd8, 0xad, 0xd8, 0xaa, 0xd9, 0x89, - 0xd9, 0x82, 0xd8, 0xa8, 0xd9, 0x84, 0xd9, 0x88, 0xd8, 0xad, 0xd8, 0xa9, 0xd8, - 0xa7, 0xd8, 0xae, 0xd8, 0xb1, 0xd9, 0x81, 0xd9, 0x82, 0xd8, 0xb7, 0xd8, 0xb9, - 0xd8, 0xa8, 0xd8, 0xaf, 0xd8, 0xb1, 0xd9, 0x83, 0xd9, 0x86, 0xd8, 0xa5, 0xd8, - 0xb0, 0xd8, 0xa7, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, 0xa7, 0xd8, 0xad, - 0xd8, 0xaf, 0xd8, 0xa5, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x81, 0xd9, 0x8a, 0xd9, - 0x87, 0xd8, 0xa8, 0xd8, 0xb9, 0xd8, 0xb6, 0xd9, 0x83, 0xd9, 0x8a, 0xd9, 0x81, - 0xd8, 0xa8, 0xd8, 0xad, 0xd8, 0xab, 0xd9, 0x88, 0xd9, 0x85, 0xd9, 0x86, 0xd9, - 0x88, 0xd9, 0x87, 0xd9, 0x88, 0xd8, 0xa3, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xac, - 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xb3, 0xd9, - 0x84, 0xd9, 0x85, 0xd8, 0xb9, 0xd9, 0x86, 0xd8, 0xaf, 0xd9, 0x84, 0xd9, 0x8a, - 0xd8, 0xb3, 0xd8, 0xb9, 0xd8, 0xa8, 0xd8, 0xb1, 0xd8, 0xb5, 0xd9, 0x84, 0xd9, - 0x89, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xb0, 0xd8, 0xa8, 0xd9, 0x87, 0xd8, 0xa7, - 0xd8, 0xa3, 0xd9, 0x86, 0xd9, 0x87, 0xd9, 0x85, 0xd8, 0xab, 0xd9, 0x84, 0xd9, - 0x83, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xad, - 0xd9, 0x8a, 0xd8, 0xab, 0xd9, 0x85, 0xd8, 0xb5, 0xd8, 0xb1, 0xd8, 0xb4, 0xd8, - 0xb1, 0xd8, 0xad, 0xd8, 0xad, 0xd9, 0x88, 0xd9, 0x84, 0xd9, 0x88, 0xd9, 0x81, - 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xb0, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd9, - 0x84, 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x86, 0xd8, 0xaa, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x81, 0xd8, 0xa3, 0xd8, 0xa8, 0xd9, 0x88, 0xd8, - 0xae, 0xd8, 0xa7, 0xd8, 0xb5, 0xd8, 0xa3, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, - 0xd9, 0x86, 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, - 0xb6, 0xd9, 0x88, 0xd9, 0x88, 0xd9, 0x82, 0xd8, 0xaf, 0xd8, 0xa7, 0xd8, 0xa8, - 0xd9, 0x86, 0xd8, 0xae, 0xd9, 0x8a, 0xd8, 0xb1, 0xd8, 0xa8, 0xd9, 0x86, 0xd8, - 0xaa, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, 0xa1, - 0xd9, 0x88, 0xd9, 0x87, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xa8, 0xd9, 0x88, 0xd9, - 0x82, 0xd8, 0xb5, 0xd8, 0xb5, 0xd9, 0x88, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, 0xb1, - 0xd9, 0x82, 0xd9, 0x85, 0xd8, 0xa3, 0xd8, 0xad, 0xd8, 0xaf, 0xd9, 0x86, 0xd8, - 0xad, 0xd9, 0x86, 0xd8, 0xb9, 0xd8, 0xaf, 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xa3, - 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xad, 0xd8, 0xa9, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, - 0xa8, 0xd8, 0xaf, 0xd9, 0x88, 0xd9, 0x86, 0xd9, 0x8a, 0xd8, 0xac, 0xd8, 0xa8, - 0xd9, 0x85, 0xd9, 0x86, 0xd9, 0x87, 0xd8, 0xaa, 0xd8, 0xad, 0xd8, 0xaa, 0xd8, - 0xac, 0xd9, 0x87, 0xd8, 0xa9, 0xd8, 0xb3, 0xd9, 0x86, 0xd8, 0xa9, 0xd9, 0x8a, - 0xd8, 0xaa, 0xd9, 0x85, 0xd9, 0x83, 0xd8, 0xb1, 0xd8, 0xa9, 0xd8, 0xba, 0xd8, - 0xb2, 0xd8, 0xa9, 0xd9, 0x86, 0xd9, 0x81, 0xd8, 0xb3, 0xd8, 0xa8, 0xd9, 0x8a, - 0xd8, 0xaa, 0xd9, 0x84, 0xd9, 0x84, 0xd9, 0x87, 0xd9, 0x84, 0xd9, 0x86, 0xd8, - 0xa7, 0xd8, 0xaa, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x82, 0xd9, 0x84, 0xd8, 0xa8, - 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, 0xb9, 0xd9, 0x86, 0xd9, 0x87, 0xd8, - 0xa3, 0xd9, 0x88, 0xd9, 0x84, 0xd8, 0xb4, 0xd9, 0x8a, 0xd8, 0xa1, 0xd9, 0x86, - 0xd9, 0x88, 0xd8, 0xb1, 0xd8, 0xa3, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x81, 0xd9, - 0x8a, 0xd9, 0x83, 0xd8, 0xa8, 0xd9, 0x83, 0xd9, 0x84, 0xd8, 0xb0, 0xd8, 0xa7, - 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, 0xaa, 0xd8, 0xa8, 0xd8, 0xa8, 0xd8, 0xa3, 0xd9, - 0x86, 0xd9, 0x87, 0xd9, 0x85, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, 0x86, 0xd9, 0x83, - 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, 0xb9, 0xd9, 0x81, 0xd9, 0x82, 0xd8, 0xaf, 0xd8, - 0xad, 0xd8, 0xb3, 0xd9, 0x86, 0xd9, 0x84, 0xd9, 0x87, 0xd9, 0x85, 0xd8, 0xb4, - 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa3, 0xd9, 0x87, 0xd9, 0x84, 0xd8, 0xb4, 0xd9, - 0x87, 0xd8, 0xb1, 0xd9, 0x82, 0xd8, 0xb7, 0xd8, 0xb1, 0xd8, 0xb7, 0xd9, 0x84, - 0xd8, 0xa8, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x68, 0x69, 0x6d, - 0x73, 0x65, 0x6c, 0x66, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x61, 0x73, 0x68, 0x69, 0x6f, - 0x6e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x77, 0x72, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x77, 0x65, 0x6c, 0x63, 0x6f, 0x6d, 0x65, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, - 0x65, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x64, 0x79, 0x6e, 0x61, - 0x6d, 0x69, 0x63, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x63, 0x79, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, - 0x65, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x66, 0x72, 0x69, 0x65, 0x6e, - 0x64, 0x73, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x6d, 0x69, 0x6c, - 0x6c, 0x69, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x77, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x76, - 0x69, 0x73, 0x69, 0x74, 0x65, 0x64, 0x77, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, - 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x66, 0x6f, 0x72, 0x77, 0x61, - 0x72, 0x64, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x6c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, - 0x72, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x73, 0x6f, 0x63, 0x69, 0x65, 0x74, 0x79, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, - 0x67, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x70, 0x61, 0x72, 0x74, 0x6e, - 0x65, 0x72, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x70, 0x65, 0x72, 0x66, - 0x65, 0x63, 0x74, 0x6d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x73, 0x6b, 0x65, 0x65, 0x70, 0x69, 0x6e, 0x67, 0x63, 0x75, - 0x6c, 0x74, 0x75, 0x72, 0x65, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, 0x6a, - 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x26, 0x71, 0x75, 0x6f, 0x74, - 0x3b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x73, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x45, 0x6e, 0x67, 0x6c, - 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x68, 0x72, - 0x6f, 0x75, 0x67, 0x68, 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x70, - 0x69, 0x6e, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x61, - 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, - 0x76, 0x69, 0x6c, 0x6c, 0x61, 0x67, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x69, 0x73, - 0x68, 0x67, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x79, 0x64, 0x65, 0x63, 0x6c, 0x69, - 0x6e, 0x65, 0x6d, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x71, 0x75, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x70, 0x65, 0x63, 0x69, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x72, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x73, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x73, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x73, - 0x70, 0x75, 0x74, 0x65, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, 0x65, 0x78, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x64, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x70, - 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x6d, 0x61, 0x72, 0x72, 0x69, 0x65, 0x64, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, - 0x63, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x76, 0x69, 0x63, 0x74, - 0x6f, 0x72, 0x79, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x73, 0x73, 0x74, 0x75, 0x64, 0x69, 0x65, 0x73, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x73, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x6c, - 0x79, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x69, - 0x6e, 0x67, 0x67, 0x72, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x6f, 0x62, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x79, 0x70, 0x72, 0x65, - 0x73, 0x65, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, - 0x75, 0x6c, 0x3e, 0x0d, 0x0a, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x61, - 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, - 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x64, 0x65, 0x73, 0x6b, 0x74, - 0x6f, 0x70, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, 0x70, 0x61, 0x74, 0x74, - 0x65, 0x72, 0x6e, 0x75, 0x6e, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x44, 0x69, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x57, 0x65, - 0x62, 0x73, 0x69, 0x74, 0x65, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, - 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x64, 0x65, 0x63, 0x61, 0x64, 0x65, - 0x73, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x26, 0x61, 0x6d, 0x70, - 0x3b, 0x20, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x73, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x67, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x6e, 0x6f, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x63, - 0x61, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x73, - 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x63, - 0x65, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x73, 0x45, 0x6e, 0x67, 0x6c, 0x61, 0x6e, 0x64, 0x3d, 0x31, 0x26, 0x61, - 0x6d, 0x70, 0x3b, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, - 0x6e, 0x65, 0x77, 0x20, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x4e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, - 0x67, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x67, 0x65, 0x74, 0x6f, 0x6f, 0x6c, 0x62, - 0x61, 0x72, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x62, 0x65, 0x63, 0x61, - 0x75, 0x73, 0x65, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x65, 0x75, - 0x74, 0x73, 0x63, 0x68, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x77, 0x6f, - 0x72, 0x6b, 0x65, 0x72, 0x73, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x6c, 0x79, 0x62, - 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x65, 0x78, 0x61, 0x63, 0x74, 0x6c, 0x79, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x73, 0x65, 0x61, 0x73, - 0x65, 0x53, 0x6f, 0x63, 0x69, 0x65, 0x74, 0x79, 0x77, 0x65, 0x61, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x26, 0x6c, 0x74, 0x3b, - 0x21, 0x2d, 0x2d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x65, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x6f, 0x75, - 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x28, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, - 0x22, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x20, 0x6b, 0x69, 0x6c, 0x6c, 0x69, - 0x6e, 0x67, 0x73, 0x68, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x49, 0x74, 0x61, 0x6c, - 0x69, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x68, 0x65, 0x61, - 0x76, 0x69, 0x6c, 0x79, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x2d, 0x31, - 0x27, 0x5d, 0x29, 0x3b, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x43, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x6e, - 0x67, 0x64, 0x72, 0x61, 0x77, 0x69, 0x6e, 0x67, 0x62, 0x69, 0x6c, 0x6c, 0x69, - 0x6f, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x47, 0x65, 0x72, 0x6d, - 0x61, 0x6e, 0x79, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x3c, 0x2f, 0x66, - 0x6f, 0x72, 0x6d, 0x3e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x77, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, - 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, - 0x41, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, - 0x73, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x75, 0x6e, 0x69, 0x66, 0x6f, - 0x72, 0x6d, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x65, 0x79, 0x73, 0x69, 0x64, 0x65, - 0x62, 0x61, 0x72, 0x43, 0x68, 0x69, 0x63, 0x61, 0x67, 0x6f, 0x68, 0x6f, 0x6c, - 0x69, 0x64, 0x61, 0x79, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x70, 0x61, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x2c, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x61, - 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x66, 0x65, 0x65, 0x6c, 0x69, 0x6e, 0x67, - 0x61, 0x72, 0x72, 0x69, 0x76, 0x65, 0x64, 0x70, 0x61, 0x73, 0x73, 0x69, 0x6e, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x72, 0x6f, 0x75, 0x67, 0x68, - 0x6c, 0x79, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x62, 0x75, 0x74, 0x20, - 0x6e, 0x6f, 0x74, 0x64, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x79, 0x42, 0x72, 0x69, - 0x74, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x6c, 0x61, - 0x63, 0x6b, 0x20, 0x6f, 0x66, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x49, - 0x72, 0x65, 0x6c, 0x61, 0x6e, 0x64, 0x22, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, - 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x4c, 0x69, 0x62, 0x72, 0x61, - 0x72, 0x79, 0x68, 0x75, 0x73, 0x62, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x20, 0x66, - 0x61, 0x63, 0x74, 0x61, 0x66, 0x66, 0x61, 0x69, 0x72, 0x73, 0x43, 0x68, 0x61, - 0x72, 0x6c, 0x65, 0x73, 0x72, 0x61, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x72, - 0x6f, 0x75, 0x67, 0x68, 0x74, 0x66, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x6c, - 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x70, 0x72, 0x65, 0x6d, 0x69, - 0x75, 0x6d, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x41, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x61, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x6e, 0x65, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, - 0x65, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x2d, 0x6d, 0x6f, 0x62, 0x69, - 0x6c, 0x65, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x77, 0x61, 0x6e, 0x74, - 0x20, 0x74, 0x6f, 0x6b, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x46, 0x69, 0x72, - 0x65, 0x66, 0x6f, 0x78, 0x79, 0x6f, 0x75, 0x20, 0x61, 0x72, 0x65, 0x73, 0x69, - 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x73, 0x74, 0x75, 0x64, 0x69, 0x65, 0x64, 0x6d, - 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, - 0x72, 0x61, 0x70, 0x69, 0x64, 0x6c, 0x79, 0x63, 0x6c, 0x69, 0x6d, 0x61, 0x74, - 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x64, 0x6f, 0x6d, 0x65, 0x6d, 0x65, 0x72, 0x67, - 0x65, 0x64, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x66, 0x6f, 0x75, 0x6e, - 0x64, 0x65, 0x64, 0x70, 0x69, 0x6f, 0x6e, 0x65, 0x65, 0x72, 0x66, 0x6f, 0x72, - 0x6d, 0x75, 0x6c, 0x61, 0x64, 0x79, 0x6e, 0x61, 0x73, 0x74, 0x79, 0x68, 0x6f, - 0x77, 0x20, 0x74, 0x6f, 0x20, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x72, - 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x62, 0x72, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x73, 0x6f, 0x6c, 0x64, 0x69, 0x65, 0x72, 0x6c, 0x61, 0x72, 0x67, 0x65, - 0x6c, 0x79, 0x63, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x26, 0x71, 0x75, - 0x6f, 0x74, 0x3b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x64, 0x77, - 0x61, 0x72, 0x64, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, - 0x62, 0x65, 0x72, 0x74, 0x20, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x73, 0x50, - 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x64, - 0x75, 0x70, 0x20, 0x77, 0x69, 0x74, 0x68, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3a, 0x77, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x41, 0x6e, 0x67, 0x65, 0x6c, - 0x65, 0x73, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x61, 0x63, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x6d, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x65, 0x64, 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x74, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x62, 0x69, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x64, 0x72, 0x69, 0x76, 0x69, 0x6e, - 0x67, 0x53, 0x74, 0x75, 0x64, 0x69, 0x65, 0x73, 0x6d, 0x69, 0x6e, 0x69, 0x6d, - 0x75, 0x6d, 0x70, 0x65, 0x72, 0x68, 0x61, 0x70, 0x73, 0x6d, 0x6f, 0x72, 0x6e, - 0x69, 0x6e, 0x67, 0x73, 0x65, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x73, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x6e, 0x74, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, - 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x75, 0x64, 0x65, 0x6e, - 0x74, 0x73, 0x6f, 0x6d, 0x65, 0x6f, 0x6e, 0x65, 0x65, 0x78, 0x74, 0x72, 0x65, - 0x6d, 0x65, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x62, 0x6f, 0x74, 0x74, - 0x6f, 0x6d, 0x3a, 0x65, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x61, 0x6c, 0x6c, - 0x20, 0x74, 0x68, 0x65, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x61, 0x70, 0x65, 0x6e, - 0x67, 0x6c, 0x69, 0x73, 0x68, 0x77, 0x61, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x20, - 0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, - 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, - 0x73, 0x6d, 0x75, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x61, 0x67, 0x61, 0x69, 0x6e, - 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x7d, 0x29, 0x28, 0x29, - 0x3b, 0x0d, 0x0a, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x72, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, - 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x20, 0x27, 0x27, 0x54, 0x68, 0x65, - 0x20, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x65, 0x78, 0x70, 0x6c, 0x6f, - 0x72, 0x65, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x64, 0x47, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x79, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x65, 0x6e, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x63, 0x61, - 0x72, 0x65, 0x65, 0x72, 0x73, 0x29, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, - 0x61, 0x6e, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, - 0x64, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, - 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x78, 0x70, - 0x6f, 0x72, 0x74, 0x73, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x69, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x6e, - 0x65, 0x75, 0x74, 0x72, 0x61, 0x6c, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, - 0x67, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x73, 0x65, 0x74, 0x74, 0x6c, - 0x65, 0x64, 0x77, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x63, 0x61, 0x75, 0x73, - 0x69, 0x6e, 0x67, 0x2d, 0x77, 0x65, 0x62, 0x6b, 0x69, 0x74, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x65, 0x64, 0x4a, 0x75, 0x73, 0x74, 0x69, 0x63, 0x65, 0x63, 0x68, - 0x61, 0x70, 0x74, 0x65, 0x72, 0x76, 0x69, 0x63, 0x74, 0x69, 0x6d, 0x73, 0x54, - 0x68, 0x6f, 0x6d, 0x61, 0x73, 0x20, 0x6d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c, 0x61, - 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x70, 0x61, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x69, - 0x64, 0x65, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x68, 0x75, 0x6e, 0x64, - 0x72, 0x65, 0x64, 0x4f, 0x6c, 0x79, 0x6d, 0x70, 0x69, 0x63, 0x5f, 0x62, 0x75, - 0x74, 0x74, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x72, 0x65, - 0x61, 0x63, 0x68, 0x65, 0x64, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x64, - 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x61, 0x64, 0x6f, 0x70, 0x74, 0x65, - 0x64, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x65, 0x69, 0x74, 0x68, - 0x65, 0x72, 0x67, 0x72, 0x65, 0x61, 0x74, 0x6c, 0x79, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x69, 0x6d, 0x70, - 0x72, 0x6f, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x61, 0x6c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x77, - 0x6f, 0x72, 0x73, 0x68, 0x69, 0x70, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x43, 0x75, 0x6c, 0x74, - 0x75, 0x72, 0x65, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x63, 0x6c, 0x65, - 0x61, 0x72, 0x6c, 0x79, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x42, 0x72, - 0x6f, 0x77, 0x73, 0x65, 0x72, 0x6c, 0x69, 0x62, 0x65, 0x72, 0x61, 0x6c, 0x7d, - 0x20, 0x63, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x68, 0x69, 0x64, 0x65, 0x28, 0x29, - 0x3b, 0x46, 0x6c, 0x6f, 0x72, 0x69, 0x64, 0x61, 0x61, 0x6e, 0x73, 0x77, 0x65, - 0x72, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x45, 0x6d, 0x70, 0x65, - 0x72, 0x6f, 0x72, 0x64, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x65, 0x72, - 0x69, 0x6f, 0x75, 0x73, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x53, 0x65, - 0x76, 0x65, 0x72, 0x61, 0x6c, 0x2d, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x46, - 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x21, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x65, - 0x64, 0x44, 0x65, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x76, 0x6f, 0x69, 0x64, 0x28, - 0x30, 0x29, 0x2f, 0x61, 0x6c, 0x6c, 0x2e, 0x6a, 0x73, 0x70, 0x72, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, - 0x70, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x6f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0x0d, 0x0a, 0x4d, - 0x6f, 0x64, 0x65, 0x72, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x73, 0x2e, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x20, 0x0a, 0x0a, 0x4d, 0x61, 0x6e, - 0x79, 0x20, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x73, 0x70, 0x6f, 0x77, 0x65, - 0x72, 0x65, 0x64, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x66, 0x69, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x6d, 0x65, - 0x64, 0x69, 0x63, 0x61, 0x6c, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x6f, - 0x70, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x63, 0x69, 0x6c, - 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x63, - 0x65, 0x47, 0x65, 0x6f, 0x72, 0x67, 0x65, 0x20, 0x42, 0x65, 0x6c, 0x67, 0x69, - 0x75, 0x6d, 0x2e, 0x2e, 0x2e, 0x3c, 0x2f, 0x61, 0x3e, 0x74, 0x77, 0x69, 0x74, - 0x74, 0x65, 0x72, 0x6e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x79, 0x77, 0x61, 0x69, - 0x74, 0x69, 0x6e, 0x67, 0x77, 0x61, 0x72, 0x66, 0x61, 0x72, 0x65, 0x20, 0x4f, - 0x74, 0x68, 0x65, 0x72, 0x20, 0x72, 0x61, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x70, - 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x75, 0x72, 0x76, 0x69, 0x76, 0x65, 0x73, 0x63, 0x68, 0x6f, 0x6c, 0x61, - 0x72, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x20, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x6c, 0x6f, 0x73, 0x73, - 0x20, 0x6f, 0x66, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x61, 0x73, 0x47, 0x65, 0x6f, - 0x72, 0x67, 0x69, 0x61, 0x73, 0x74, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x3c, 0x68, - 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x31, - 0x27, 0x5d, 0x29, 0x3b, 0x0d, 0x0a, 0x69, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, - 0x6e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x3a, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x63, 0x61, 0x72, 0x72, 0x69, - 0x65, 0x64, 0x31, 0x30, 0x30, 0x2c, 0x30, 0x30, 0x30, 0x3c, 0x2f, 0x68, 0x33, - 0x3e, 0x0a, 0x20, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x62, 0x65, 0x63, - 0x6f, 0x6d, 0x65, 0x73, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x77, 0x65, - 0x64, 0x64, 0x69, 0x6e, 0x67, 0x30, 0x30, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x6d, - 0x6f, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x6f, 0x66, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x74, 0x65, 0x61, 0x63, 0x68, 0x65, 0x72, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x79, - 0x20, 0x62, 0x69, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x6c, 0x69, 0x66, 0x65, 0x20, - 0x6f, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x72, 0x69, 0x73, 0x65, - 0x20, 0x6f, 0x66, 0x26, 0x72, 0x61, 0x71, 0x75, 0x6f, 0x3b, 0x70, 0x6c, 0x75, - 0x73, 0x6f, 0x6e, 0x65, 0x68, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x28, 0x74, - 0x68, 0x6f, 0x75, 0x67, 0x68, 0x44, 0x6f, 0x75, 0x67, 0x6c, 0x61, 0x73, 0x6a, - 0x6f, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x73, - 0x46, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x41, 0x6e, 0x63, 0x69, 0x65, 0x6e, - 0x74, 0x56, 0x69, 0x65, 0x74, 0x6e, 0x61, 0x6d, 0x76, 0x65, 0x68, 0x69, 0x63, - 0x6c, 0x65, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x63, 0x72, 0x79, 0x73, - 0x74, 0x61, 0x6c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x57, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x73, 0x65, 0x6e, 0x6a, 0x6f, 0x79, 0x65, 0x64, 0x61, 0x20, - 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x3c, - 0x61, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, - 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, - 0x65, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x72, 0x65, 0x74, 0x69, 0x72, - 0x65, 0x64, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x68, 0x69, 0x64, 0x64, - 0x65, 0x6e, 0x3b, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x73, 0x73, 0x65, 0x65, - 0x6b, 0x69, 0x6e, 0x67, 0x63, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x77, 0x61, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x6c, 0x6f, 0x6f, 0x6b, 0x20, 0x61, 0x74, 0x63, - 0x6f, 0x6e, 0x64, 0x75, 0x63, 0x74, 0x67, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x61, 0x3a, 0x68, 0x6f, 0x76, - 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x46, 0x72, 0x65, 0x6e, - 0x63, 0x68, 0x20, 0x6c, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x74, 0x79, 0x70, - 0x69, 0x63, 0x61, 0x6c, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x65, 0x6e, - 0x65, 0x6d, 0x69, 0x65, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x66, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x64, 0x65, 0x63, 0x69, 0x64, 0x65, 0x64, - 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x66, 0x73, 0x2d, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x3a, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x63, 0x2e, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x22, 0x3e, 0x63, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x74, 0x76, 0x69, 0x6f, 0x6c, 0x65, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x66, 0x69, 0x72, 0x73, 0x74, 0x22, 0x3e, 0x63, - 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x46, 0x69, 0x6e, 0x6c, 0x61, 0x6e, 0x64, - 0x63, 0x68, 0x65, 0x6d, 0x69, 0x73, 0x74, 0x73, 0x68, 0x65, 0x20, 0x77, 0x61, - 0x73, 0x31, 0x30, 0x70, 0x78, 0x3b, 0x22, 0x3e, 0x61, 0x73, 0x20, 0x73, 0x75, - 0x63, 0x68, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, 0x3c, 0x2f, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x20, 0x6f, 0x66, 0x61, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x6d, 0x79, - 0x73, 0x74, 0x65, 0x72, 0x79, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x66, - 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x64, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, - 0x72, 0x61, 0x69, 0x6c, 0x77, 0x61, 0x79, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x67, - 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x72, 0x64, 0x65, 0x73, 0x63, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6e, 0x75, 0x63, 0x6c, - 0x65, 0x61, 0x72, 0x4a, 0x65, 0x77, 0x69, 0x73, 0x68, 0x20, 0x70, 0x72, 0x6f, - 0x74, 0x65, 0x73, 0x74, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x66, 0x6c, - 0x6f, 0x77, 0x65, 0x72, 0x73, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x72, - 0x65, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x20, - 0x77, 0x68, 0x6f, 0x20, 0x77, 0x61, 0x73, 0x6c, 0x65, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x75, 0x69, 0x63, 0x69, - 0x64, 0x65, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x70, 0x65, 0x72, 0x69, - 0x6f, 0x64, 0x73, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x53, 0x6f, 0x63, - 0x69, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x63, 0x6f, - 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x77, - 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x3c, 0x62, 0x72, 0x20, 0x2f, 0x3e, 0x3c, - 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4e, 0x61, 0x74, 0x75, 0x72, 0x61, - 0x6c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x63, 0x6f, 0x6f, 0x6b, 0x69, - 0x65, 0x73, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x53, 0x77, 0x65, 0x64, 0x69, 0x73, 0x68, 0x62, 0x72, 0x69, - 0x65, 0x66, 0x6c, 0x79, 0x50, 0x65, 0x72, 0x73, 0x69, 0x61, 0x6e, 0x73, 0x6f, - 0x20, 0x6d, 0x75, 0x63, 0x68, 0x43, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x64, - 0x65, 0x70, 0x69, 0x63, 0x74, 0x73, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, - 0x68, 0x6f, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x73, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x62, 0x65, 0x61, 0x72, 0x69, - 0x6e, 0x67, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x65, 0x64, 0x6a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x28, 0x2d, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3a, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3e, 0x74, 0x6f, - 0x6f, 0x6c, 0x74, 0x69, 0x70, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x64, - 0x65, 0x73, 0x69, 0x67, 0x6e, 0x73, 0x54, 0x75, 0x72, 0x6b, 0x69, 0x73, 0x68, - 0x79, 0x6f, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x28, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x0a, 0x0a, 0x62, 0x75, 0x72, 0x6e, 0x69, - 0x6e, 0x67, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x65, 0x67, 0x72, - 0x65, 0x65, 0x73, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3d, 0x52, 0x69, 0x63, - 0x68, 0x61, 0x72, 0x64, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x6c, 0x79, 0x70, 0x6c, - 0x61, 0x73, 0x74, 0x69, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3c, - 0x2f, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, - 0x75, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, - 0x73, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x70, 0x68, 0x79, 0x73, 0x69, - 0x63, 0x73, 0x66, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x73, 0x74, 0x6c, 0x69, 0x6e, - 0x6b, 0x20, 0x74, 0x6f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3c, 0x62, - 0x72, 0x20, 0x2f, 0x3e, 0x0a, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x63, - 0x68, 0x61, 0x72, 0x74, 0x65, 0x72, 0x74, 0x6f, 0x75, 0x72, 0x69, 0x73, 0x6d, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x63, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x65, - 0x64, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x3c, 0x2f, 0x68, 0x31, 0x3e, - 0x0d, 0x0a, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x3f, 0x78, 0x6d, 0x6c, - 0x20, 0x76, 0x65, 0x68, 0x65, 0x6c, 0x70, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x61, 0x69, - 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x65, 0x6e, 0x64, 0x20, 0x2d, 0x2d, 0x3e, 0x29, - 0x2e, 0x61, 0x74, 0x74, 0x72, 0x28, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x68, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x23, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x56, 0x69, 0x6e, 0x63, 0x65, - 0x6e, 0x74, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x20, 0x73, 0x72, 0x63, - 0x3d, 0x22, 0x2f, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x64, 0x65, 0x73, - 0x70, 0x69, 0x74, 0x65, 0x64, 0x69, 0x76, 0x65, 0x72, 0x73, 0x65, 0x74, 0x65, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x68, - 0x65, 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x4a, 0x6f, 0x73, 0x65, 0x70, 0x68, 0x20, - 0x74, 0x68, 0x65, 0x61, 0x74, 0x72, 0x65, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x73, 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x61, 0x20, 0x6c, 0x61, 0x72, - 0x67, 0x65, 0x64, 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x6c, 0x61, 0x74, 0x65, - 0x72, 0x2c, 0x20, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x66, 0x61, 0x76, - 0x69, 0x63, 0x6f, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x75, - 0x6e, 0x67, 0x61, 0x72, 0x79, 0x41, 0x69, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x65, 0x65, 0x20, 0x74, 0x68, 0x65, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x4d, 0x69, 0x63, 0x68, 0x61, 0x65, 0x6c, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x2c, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x65, 0x26, 0x71, 0x75, - 0x6f, 0x74, 0x3b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x66, - 0x74, 0x22, 0x3e, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x47, 0x6f, - 0x6c, 0x64, 0x65, 0x6e, 0x20, 0x41, 0x66, 0x66, 0x61, 0x69, 0x72, 0x73, 0x67, - 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, - 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x69, 0x64, 0x65, 0x61, 0x20, 0x6f, - 0x66, 0x63, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x73, - 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x2e, 0x73, 0x72, 0x63, - 0x20, 0x3d, 0x20, 0x63, 0x61, 0x72, 0x74, 0x6f, 0x6f, 0x6e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x4d, 0x75, - 0x73, 0x6c, 0x69, 0x6d, 0x73, 0x57, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x69, - 0x6e, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x6d, 0x61, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x65, 0x64, - 0x2c, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x2f, 0x73, 0x68, 0x6f, 0x77, - 0x5f, 0x61, 0x6f, 0x75, 0x74, 0x64, 0x6f, 0x6f, 0x72, 0x65, 0x73, 0x63, 0x61, - 0x70, 0x65, 0x28, 0x41, 0x75, 0x73, 0x74, 0x72, 0x69, 0x61, 0x67, 0x65, 0x6e, - 0x65, 0x74, 0x69, 0x63, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2c, 0x49, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x48, - 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, - 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x79, 0x0a, 0x09, 0x09, 0x3c, 0x21, 0x2d, - 0x2d, 0x44, 0x61, 0x6e, 0x69, 0x65, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x3e, 0x69, 0x6d, 0x70, 0x6f, - 0x73, 0x65, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x65, 0x41, 0x62, 0x72, - 0x61, 0x68, 0x61, 0x6d, 0x28, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x7b, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3a, 0x70, 0x75, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x29, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x7c, 0x7c, 0x20, 0x5b, 0x5d, 0x3b, 0x0a, - 0x44, 0x41, 0x54, 0x41, 0x5b, 0x20, 0x2a, 0x6b, 0x69, 0x74, 0x63, 0x68, 0x65, - 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x61, 0x63, 0x74, 0x75, 0x61, - 0x6c, 0x20, 0x64, 0x69, 0x61, 0x6c, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x69, 0x6e, - 0x6c, 0x79, 0x20, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x27, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x74, 0x73, 0x69, 0x66, - 0x28, 0x74, 0x79, 0x70, 0x65, 0x49, 0x74, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x26, - 0x63, 0x6f, 0x70, 0x79, 0x3b, 0x20, 0x22, 0x3e, 0x54, 0x65, 0x72, 0x6d, 0x73, - 0x62, 0x6f, 0x72, 0x6e, 0x20, 0x69, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x65, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x74, 0x61, 0x6c, 0x6b, 0x69, - 0x6e, 0x67, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x72, 0x6e, 0x67, 0x61, 0x69, 0x6e, - 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x6a, 0x75, 0x73, - 0x74, 0x69, 0x66, 0x79, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x73, 0x66, 0x61, - 0x63, 0x74, 0x6f, 0x72, 0x79, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x77, 0x6e, 0x61, - 0x73, 0x73, 0x61, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, - 0x6c, 0x61, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x77, - 0x6e, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x20, 0x72, 0x65, 0x6c, - 0x3d, 0x22, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x63, 0x6f, 0x6e, 0x63, - 0x65, 0x72, 0x74, 0x64, 0x69, 0x61, 0x67, 0x72, 0x61, 0x6d, 0x64, 0x6f, 0x6c, - 0x6c, 0x61, 0x72, 0x73, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, 0x68, - 0x70, 0x3f, 0x69, 0x64, 0x3d, 0x61, 0x6c, 0x63, 0x6f, 0x68, 0x6f, 0x6c, 0x29, - 0x3b, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, - 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x76, 0x65, 0x73, 0x73, 0x65, 0x6c, - 0x73, 0x72, 0x65, 0x76, 0x69, 0x76, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x61, 0x6d, 0x61, 0x74, 0x65, 0x75, 0x72, 0x61, 0x6e, 0x64, 0x72, - 0x6f, 0x69, 0x64, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x69, 0x6c, 0x6c, - 0x6e, 0x65, 0x73, 0x73, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x63, 0x65, - 0x6e, 0x74, 0x65, 0x72, 0x73, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x79, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x65, 0x78, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, - 0x65, 0x64, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0a, 0x09, 0x3c, 0x21, 0x2d, - 0x2d, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x73, 0x6c, 0x69, 0x6e, 0x6b, - 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x20, 0x42, 0x6f, 0x6f, - 0x6b, 0x20, 0x6f, 0x66, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x6d, 0x69, - 0x6e, 0x2e, 0x6a, 0x73, 0x3f, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6b, - 0x6f, 0x6e, 0x74, 0x61, 0x6b, 0x74, 0x74, 0x6f, 0x64, 0x61, 0x79, 0x27, 0x73, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x3d, 0x77, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6c, 0x6c, 0x20, 0x52, - 0x69, 0x67, 0x3b, 0x0a, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x72, 0x61, 0x69, 0x73, - 0x69, 0x6e, 0x67, 0x20, 0x41, 0x6c, 0x73, 0x6f, 0x2c, 0x20, 0x63, 0x72, 0x75, - 0x63, 0x69, 0x61, 0x6c, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x22, 0x3e, 0x64, 0x65, - 0x63, 0x6c, 0x61, 0x72, 0x65, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, 0x73, 0x63, 0x66, - 0x69, 0x72, 0x65, 0x66, 0x6f, 0x78, 0x61, 0x73, 0x20, 0x6d, 0x75, 0x63, 0x68, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, - 0x20, 0x73, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, - 0x3d, 0x20, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x74, 0x6f, 0x77, 0x61, - 0x72, 0x64, 0x73, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x50, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x50, 0x72, - 0x65, 0x6d, 0x69, 0x65, 0x72, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x73, 0x56, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, - 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x65, - 0x64, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x70, 0x6f, 0x76, 0x65, 0x72, - 0x74, 0x79, 0x63, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x76, 0x69, - 0x6e, 0x67, 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x41, 0x6e, 0x74, - 0x68, 0x6f, 0x6e, 0x79, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x22, 0x20, 0x52, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x72, - 0x65, 0x61, 0x63, 0x68, 0x65, 0x73, 0x63, 0x75, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x79, 0x6c, 0x69, 0x66, 0x65, 0x20, 0x69, - 0x6e, 0x43, 0x68, 0x61, 0x70, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x61, 0x64, - 0x6f, 0x77, 0x4e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3c, 0x2f, 0x74, 0x64, - 0x3e, 0x0d, 0x0a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x74, 0x61, - 0x64, 0x69, 0x75, 0x6d, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x76, 0x61, - 0x72, 0x79, 0x69, 0x6e, 0x67, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x73, 0x68, - 0x65, 0x6c, 0x64, 0x20, 0x62, 0x79, 0x77, 0x68, 0x6f, 0x20, 0x61, 0x72, 0x65, - 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x66, 0x61, 0x63, 0x75, 0x6c, 0x74, - 0x79, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x77, 0x68, 0x6f, 0x20, 0x68, - 0x61, 0x64, 0x61, 0x69, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x74, 0x6f, 0x77, 0x6e, - 0x20, 0x6f, 0x66, 0x0a, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x20, 0x27, 0x63, 0x6c, - 0x69, 0x63, 0x6b, 0x27, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x73, 0x6b, 0x65, - 0x79, 0x77, 0x6f, 0x72, 0x64, 0x69, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x63, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x3b, - 0x41, 0x6e, 0x64, 0x72, 0x65, 0x77, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x6f, 0x72, 0x20, 0x6d, 0x6f, - 0x72, 0x65, 0x33, 0x30, 0x30, 0x70, 0x78, 0x3b, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x3b, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x68, 0x65, - 0x72, 0x73, 0x65, 0x6c, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, - 0x65, 0x64, 0x65, 0x72, 0x61, 0x6c, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x65, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x74, - 0x6f, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x63, 0x74, 0x72, 0x65, - 0x73, 0x73, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x66, 0x69, 0x6e, 0x67, - 0x65, 0x72, 0x73, 0x44, 0x75, 0x6b, 0x65, 0x20, 0x6f, 0x66, 0x70, 0x65, 0x6f, - 0x70, 0x6c, 0x65, 0x2c, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x69, 0x74, 0x77, 0x68, - 0x61, 0x74, 0x20, 0x69, 0x73, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x61, - 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x22, 0x3a, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x69, 0x6e, 0x20, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x6e, 0x75, 0x22, 0x3e, - 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x6f, 0x66, 0x66, 0x69, 0x63, - 0x65, 0x72, 0x63, 0x6f, 0x75, 0x6e, 0x63, 0x69, 0x6c, 0x67, 0x61, 0x69, 0x6e, - 0x69, 0x6e, 0x67, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x53, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x79, 0x64, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x6c, 0x6f, - 0x79, 0x61, 0x6c, 0x74, 0x79, 0x66, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x61, - 0x6e, 0x64, 0x20, 0x77, 0x61, 0x73, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x6f, 0x72, - 0x73, 0x75, 0x70, 0x72, 0x65, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x20, 0x68, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x73, 0x73, 0x69, - 0x61, 0x6e, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x62, 0x65, - 0x72, 0x74, 0x61, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x65, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x22, 0x3e, 0x2e, 0x61, - 0x70, 0x70, 0x65, 0x6e, 0x64, 0x64, 0x6f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x66, - 0x65, 0x64, 0x65, 0x72, 0x61, 0x6c, 0x62, 0x61, 0x6e, 0x6b, 0x20, 0x6f, 0x66, - 0x62, 0x65, 0x6e, 0x65, 0x61, 0x74, 0x68, 0x44, 0x65, 0x73, 0x70, 0x69, 0x74, - 0x65, 0x43, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x67, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x73, 0x29, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x65, 0x72, 0x63, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x63, 0x6c, 0x6f, - 0x73, 0x69, 0x6e, 0x67, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x49, 0x6e, - 0x73, 0x74, 0x65, 0x61, 0x64, 0x66, 0x69, 0x66, 0x74, 0x65, 0x65, 0x6e, 0x61, - 0x73, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2e, 0x79, 0x61, 0x68, 0x6f, 0x6f, 0x2e, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x66, 0x69, 0x67, 0x68, 0x74, 0x65, - 0x72, 0x6f, 0x62, 0x73, 0x63, 0x75, 0x72, 0x65, 0x72, 0x65, 0x66, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x63, 0x3d, 0x20, 0x4d, 0x61, - 0x74, 0x68, 0x2e, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x6f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x61, 0x20, - 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x6f, 0x6e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x79, - 0x65, 0x61, 0x72, 0x20, 0x6f, 0x66, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, - 0x62, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, - 0x74, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x68, 0x6f, 0x6d, 0x65, 0x20, - 0x6f, 0x66, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x72, 0x65, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x68, 0x65, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x66, 0x72, 0x77, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x4d, - 0x61, 0x72, 0x63, 0x68, 0x20, 0x31, 0x6b, 0x6e, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, - 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x6f, 0x6e, 0x73, 0x63, 0x6c, 0x6f, 0x73, 0x65, - 0x73, 0x74, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x6b, - 0x73, 0x22, 0x3e, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x65, 0x64, 0x45, 0x4e, 0x44, - 0x20, 0x2d, 0x2d, 0x3e, 0x66, 0x61, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x61, 0x77, - 0x61, 0x72, 0x64, 0x65, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x20, 0x66, 0x61, 0x69, 0x72, 0x6c, 0x79, 0x20, - 0x77, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x61, - 0x6c, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x65, - 0x74, 0x65, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x3e, 0x73, 0x69, 0x6e, 0x67, - 0x69, 0x6e, 0x67, 0x66, 0x61, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x42, 0x72, 0x61, - 0x73, 0x69, 0x6c, 0x29, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x72, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x47, 0x72, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x66, - 0x6f, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x70, 0x75, 0x72, 0x73, 0x75, 0x65, 0x64, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x75, - 0x70, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x62, 0x6f, 0x74, 0x68, 0x20, - 0x6f, 0x66, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x73, 0x61, 0x77, 0x20, - 0x74, 0x68, 0x65, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x73, 0x63, 0x6f, 0x6c, - 0x6f, 0x75, 0x72, 0x73, 0x69, 0x66, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x77, 0x68, - 0x65, 0x6e, 0x20, 0x68, 0x65, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x70, - 0x75, 0x73, 0x68, 0x28, 0x66, 0x75, 0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x20, - 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, 0x3e, 0x46, 0x61, 0x6e, 0x74, 0x61, 0x73, - 0x79, 0x69, 0x6e, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6a, 0x75, 0x72, - 0x65, 0x64, 0x55, 0x73, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x66, 0x61, 0x72, 0x6d, - 0x69, 0x6e, 0x67, 0x63, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x66, 0x65, 0x6e, 0x63, 0x65, 0x75, 0x73, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x4d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x3c, - 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x64, - 0x65, 0x73, 0x69, 0x78, 0x74, 0x65, 0x65, 0x6e, 0x49, 0x73, 0x6c, 0x61, 0x6d, - 0x69, 0x63, 0x23, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x65, 0x6e, 0x74, 0x69, - 0x72, 0x65, 0x20, 0x77, 0x69, 0x64, 0x65, 0x6c, 0x79, 0x20, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x6f, 0x6e, - 0x65, 0x20, 0x63, 0x61, 0x6e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x73, - 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x73, - 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x73, 0x74, 0x65, 0x72, 0x72, 0x61, 0x69, - 0x6e, 0x3c, 0x74, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x66, 0x75, 0x6e, 0x65, 0x72, - 0x61, 0x6c, 0x76, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, 0x6d, 0x69, 0x64, 0x64, - 0x6c, 0x65, 0x20, 0x63, 0x72, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x70, 0x72, 0x6f, - 0x70, 0x68, 0x65, 0x74, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x64, 0x64, 0x6f, - 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x75, 0x73, 0x73, 0x65, 0x6c, 0x6c, 0x20, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, - 0x61, 0x6c, 0x67, 0x65, 0x62, 0x72, 0x61, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, - 0x2d, 0x62, 0x75, 0x6c, 0x6b, 0x20, 0x6f, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x61, - 0x6e, 0x64, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x68, 0x65, 0x20, 0x6c, - 0x65, 0x66, 0x74, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x29, 0x3b, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x61, - 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x68, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x6e, - 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x41, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x61, - 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, - 0x0a, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x20, 0x74, 0x75, - 0x72, 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x73, 0x62, 0x65, 0x66, 0x6f, - 0x72, 0x65, 0x20, 0x42, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x64, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3e, 0x43, 0x61, - 0x70, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x67, - 0x6f, 0x64, 0x64, 0x65, 0x73, 0x73, 0x54, 0x61, 0x67, 0x20, 0x2d, 0x2d, 0x3e, - 0x41, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x62, 0x75, 0x74, 0x20, 0x77, 0x61, - 0x73, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x74, 0x69, 0x65, - 0x6e, 0x74, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x69, 0x6e, 0x3d, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x26, 0x4c, 0x69, 0x6e, 0x63, 0x6f, 0x6c, 0x6e, 0x77, 0x65, 0x20, - 0x6b, 0x6e, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x4a, 0x75, - 0x64, 0x61, 0x69, 0x73, 0x6d, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x61, - 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x27, 0x5d, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x68, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x75, 0x6e, 0x63, 0x6c, 0x65, 0x61, - 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x27, 0x2c, 0x62, 0x6f, 0x74, 0x68, 0x20, - 0x69, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x0a, 0x0a, 0x3c, 0x21, - 0x2d, 0x2d, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x68, 0x61, 0x72, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x6f, - 0x72, 0x74, 0x20, 0x6f, 0x66, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x73, - 0x74, 0x72, 0x65, 0x65, 0x74, 0x73, 0x42, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x64, - 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x73, 0x74, 0x65, 0x6e, 0x64, 0x20, 0x74, - 0x6f, 0x66, 0x61, 0x6e, 0x74, 0x61, 0x73, 0x79, 0x64, 0x6f, 0x77, 0x6e, 0x20, - 0x69, 0x6e, 0x68, 0x61, 0x72, 0x62, 0x6f, 0x75, 0x72, 0x46, 0x72, 0x65, 0x65, - 0x64, 0x6f, 0x6d, 0x6a, 0x65, 0x77, 0x65, 0x6c, 0x72, 0x79, 0x2f, 0x61, 0x62, - 0x6f, 0x75, 0x74, 0x2e, 0x2e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x6c, 0x65, - 0x67, 0x65, 0x6e, 0x64, 0x73, 0x69, 0x73, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x6d, - 0x6f, 0x64, 0x65, 0x72, 0x6e, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x6e, - 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, - 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x70, 0x61, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x72, 0x61, 0x72, 0x65, - 0x6c, 0x79, 0x20, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x79, 0x6d, 0x64, 0x65, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x30, 0x30, - 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x61, 0x73, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x2f, 0x2a, 0x20, 0x3c, 0x21, 0x5b, 0x43, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x20, 0x3d, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x73, 0x74, 0x20, 0x70, 0x69, 0x63, 0x6b, 0x65, - 0x64, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x75, 0x73, 0x65, 0x73, - 0x20, 0x6f, 0x66, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x74, 0x68, 0x65, 0x77, 0x74, 0x61, - 0x63, 0x74, 0x69, 0x63, 0x73, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x64, 0x77, - 0x61, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6c, 0x61, 0x77, 0x73, 0x20, 0x6f, 0x66, - 0x65, 0x61, 0x73, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x20, 0x20, 0x73, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x7d, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x73, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x68, 0x69, 0x6e, 0x66, 0x6f, 0x62, 0x6f, 0x78, 0x77, 0x65, 0x6e, - 0x74, 0x20, 0x74, 0x6f, 0x70, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x63, 0x69, - 0x74, 0x69, 0x7a, 0x65, 0x6e, 0x49, 0x20, 0x64, 0x6f, 0x6e, 0x27, 0x74, 0x72, - 0x65, 0x74, 0x72, 0x65, 0x61, 0x74, 0x2e, 0x20, 0x53, 0x6f, 0x6d, 0x65, 0x20, - 0x77, 0x77, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x62, 0x6f, 0x6d, 0x62, 0x69, 0x6e, - 0x67, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6d, 0x61, 0x64, 0x65, 0x20, - 0x69, 0x6e, 0x2e, 0x20, 0x4d, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x61, 0x72, 0x72, - 0x69, 0x65, 0x73, 0x7c, 0x7c, 0x7b, 0x7d, 0x3b, 0x77, 0x69, 0x77, 0x6f, 0x72, - 0x6b, 0x20, 0x6f, 0x66, 0x73, 0x79, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x64, 0x65, - 0x66, 0x65, 0x61, 0x74, 0x73, 0x66, 0x61, 0x76, 0x6f, 0x72, 0x65, 0x64, 0x6f, - 0x70, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x70, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, - 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x66, 0x74, 0x22, 0x3e, 0x3c, 0x63, 0x6f, 0x6d, 0x53, 0x63, - 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x6a, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x61, - 0x73, 0x73, 0x69, 0x63, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x22, 0x20, 0x57, 0x69, - 0x6c, 0x68, 0x65, 0x6c, 0x6d, 0x73, 0x75, 0x62, 0x75, 0x72, 0x62, 0x73, 0x67, - 0x65, 0x6e, 0x75, 0x69, 0x6e, 0x65, 0x62, 0x69, 0x73, 0x68, 0x6f, 0x70, 0x73, - 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, - 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x62, 0x6f, 0x64, 0x79, 0x20, - 0x6f, 0x66, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x63, 0x74, 0x73, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x6c, 0x65, 0x66, - 0x74, 0x20, 0x74, 0x6f, 0x63, 0x68, 0x69, 0x65, 0x66, 0x6c, 0x79, 0x2d, 0x68, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x2d, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x3c, - 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x0a, 0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, - 0x69, 0x6e, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x64, 0x69, 0x73, 0x6d, 0x69, 0x73, - 0x73, 0x45, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x61, 0x6c, 0x77, 0x61, 0x79, - 0x73, 0x20, 0x76, 0x69, 0x61, 0x20, 0x74, 0x68, 0x65, 0x73, 0x70, 0x61, 0xc3, - 0xb1, 0x6f, 0x6c, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x72, 0x75, 0x6c, - 0x69, 0x6e, 0x67, 0x20, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x63, 0x61, - 0x70, 0x74, 0x61, 0x69, 0x6e, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x6e, 0x72, - 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x6f, 0x6b, - 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x2c, 0x3d, 0x30, 0x26, 0x61, 0x6d, 0x70, - 0x3b, 0x28, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x73, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x63, 0x6f, 0x6d, 0x2f, - 0x70, 0x61, 0x67, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x20, 0x4b, 0x65, 0x6e, - 0x6e, 0x65, 0x64, 0x79, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x66, 0x75, - 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x42, - 0x65, 0x73, 0x69, 0x64, 0x65, 0x73, 0x2f, 0x2f, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x73, 0x65, 0x73, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x68, 0x69, 0x6d, 0x20, 0x74, - 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x6d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x74, 0x6f, 0x20, - 0x74, 0x61, 0x6b, 0x65, 0x77, 0x61, 0x79, 0x73, 0x20, 0x74, 0x6f, 0x73, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x61, 0x64, 0x76, 0x69, 0x73, 0x65, 0x64, 0x70, - 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x3a, - 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x79, 0x4c, 0x65, 0x74, 0x74, 0x65, 0x72, - 0x73, 0x61, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x48, 0x65, 0x72, 0x62, 0x65, - 0x72, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x73, 0x20, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x66, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x73, 0x6c, - 0x6f, 0x77, 0x6c, 0x79, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x20, 0x73, - 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x09, 0x09, - 0x69, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x72, 0x61, 0x6e, 0x6b, 0x65, 0x64, - 0x20, 0x72, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x75, 0x6c, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x70, 0x61, 0x69, 0x72, - 0x20, 0x6f, 0x66, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x69, 0x74, 0x4b, 0x6f, 0x6e, - 0x74, 0x61, 0x6b, 0x74, 0x41, 0x6e, 0x74, 0x6f, 0x6e, 0x69, 0x6f, 0x68, 0x61, - 0x76, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, - 0x74, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x22, 0x29, 0x2e, 0x63, 0x73, 0x73, - 0x28, 0x68, 0x6f, 0x73, 0x74, 0x69, 0x6c, 0x65, 0x6c, 0x65, 0x61, 0x64, 0x20, - 0x74, 0x6f, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x20, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2c, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x2d, 0x2d, 0x3e, - 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x72, 0x6f, 0x77, 0x73, 0x3d, 0x22, 0x20, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x3c, - 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x56, - 0x3e, 0x3c, 0x5c, 0x2f, 0x73, 0x63, 0x72, 0x73, 0x6f, 0x6c, 0x76, 0x69, 0x6e, - 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x6c, 0x61, 0x76, 0x65, - 0x72, 0x79, 0x77, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x77, 0x68, 0x65, 0x72, - 0x65, 0x61, 0x73, 0x21, 0x3d, 0x20, 0x27, 0x75, 0x6e, 0x64, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x6c, 0x6c, 0x70, 0x61, 0x72, 0x74, 0x6c, 0x79, 0x20, 0x2d, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x3a, 0x41, 0x72, 0x61, 0x62, 0x69, 0x61, 0x6e, 0x62, - 0x61, 0x63, 0x6b, 0x65, 0x64, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, - 0x75, 0x6e, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, - 0x2d, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2c, 0x69, 0x73, 0x20, 0x68, 0x6f, - 0x6d, 0x65, 0x72, 0x69, 0x73, 0x6b, 0x20, 0x6f, 0x66, 0x64, 0x65, 0x73, 0x69, - 0x72, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x6e, 0x74, 0x6f, 0x6e, 0x63, 0x6f, 0x73, - 0x74, 0x20, 0x6f, 0x66, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x65, - 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x70, - 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x4d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x20, - 0x65, 0x61, 0x64, 0x27, 0x29, 0x5b, 0x30, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, - 0x73, 0x73, 0x74, 0x75, 0x64, 0x69, 0x6f, 0x73, 0x3e, 0x26, 0x63, 0x6f, 0x70, - 0x79, 0x3b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x3e, 0x61, 0x73, 0x73, 0x65, - 0x6d, 0x62, 0x6c, 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x64, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2e, 0x70, 0x73, - 0x3a, 0x22, 0x20, 0x3f, 0x20, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x62, - 0x79, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x20, - 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x73, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x65, - 0x64, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x68, 0x61, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x70, 0x75, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x62, 0x75, 0x74, 0x20, 0x61, 0x72, 0x65, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x61, 0x6c, 0x42, 0x61, 0x62, 0x79, 0x6c, 0x6f, 0x6e, 0x62, 0x6f, - 0x74, 0x74, 0x6f, 0x6d, 0x20, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x69, 0x74, 0x73, 0x20, 0x75, 0x73, 0x65, - 0x41, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, - 0x73, 0x61, 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, 0x64, 0x65, 0x6e, 0x6f, 0x74, - 0x65, 0x73, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x69, 0x6e, 0x48, 0x6f, 0x75, 0x73, - 0x74, 0x6f, 0x6e, 0x32, 0x30, 0x70, 0x78, 0x3b, 0x22, 0x3e, 0x61, 0x63, 0x63, - 0x75, 0x73, 0x65, 0x64, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x67, 0x6f, - 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x46, 0x61, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x29, - 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x28, 0x70, 0x72, 0x69, 0x65, 0x73, 0x74, 0x73, - 0x20, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x69, 0x6e, 0x20, 0x4a, 0x75, 0x6c, - 0x79, 0x73, 0x74, 0x20, 0x2b, 0x20, 0x22, 0x67, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6c, 0x74, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x68, 0x65, 0x6c, 0x70, - 0x66, 0x75, 0x6c, 0x72, 0x65, 0x76, 0x69, 0x76, 0x65, 0x64, 0x69, 0x73, 0x20, - 0x76, 0x65, 0x72, 0x79, 0x72, 0x27, 0x2b, 0x27, 0x69, 0x70, 0x74, 0x6c, 0x6f, - 0x73, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x65, 0x6d, 0x61, 0x6c, 0x65, 0x73, 0x69, - 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, - 0x64, 0x61, 0x79, 0x73, 0x20, 0x6f, 0x66, 0x61, 0x72, 0x72, 0x69, 0x76, 0x61, - 0x6c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x20, 0x3c, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x66, 0x6f, 0x72, 0x63, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x28, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x09, 0x09, 0x68, 0x65, 0x72, - 0x65, 0x20, 0x69, 0x73, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x2e, 0x20, - 0x20, 0x54, 0x68, 0x65, 0x20, 0x62, 0x61, 0x6c, 0x6c, 0x6f, 0x6f, 0x6e, 0x64, - 0x6f, 0x6e, 0x65, 0x20, 0x62, 0x79, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x6c, 0x61, 0x77, 0x20, 0x6f, 0x66, - 0x20, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x61, 0x76, 0x6f, 0x69, 0x64, - 0x65, 0x64, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x32, 0x70, 0x78, 0x20, - 0x33, 0x70, 0x78, 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x20, 0x61, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6d, 0x65, - 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2d, 0x3d, - 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, - 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, - 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x66, 0x61, 0x6d, 0x69, 0x6c, - 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x20, 0x26, 0x6e, 0x62, - 0x73, 0x70, 0x3b, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x65, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73, 0x6e, 0x6f, - 0x74, 0x69, 0x63, 0x65, 0x64, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x7d, - 0x29, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x73, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x77, 0x69, 0x73, 0x20, 0x6a, 0x75, - 0x73, 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x77, 0x68, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x64, 0x62, 0x72, - 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x6f, 0x66, - 0x63, 0x75, 0x69, 0x73, 0x69, 0x6e, 0x65, 0x69, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x61, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x41, 0x64, 0x6d, 0x69, 0x72, - 0x61, 0x6c, 0x20, 0x66, 0x69, 0x78, 0x65, 0x64, 0x3b, 0x6e, 0x6f, 0x72, 0x6d, - 0x61, 0x6c, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, - 0x73, 0x73, 0x2c, 0x20, 0x6f, 0x6e, 0x74, 0x61, 0x72, 0x69, 0x6f, 0x63, 0x68, - 0x61, 0x72, 0x73, 0x65, 0x74, 0x74, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, - 0x6e, 0x76, 0x61, 0x64, 0x65, 0x64, 0x3d, 0x22, 0x74, 0x72, 0x75, 0x65, 0x22, - 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x73, - 0x74, 0x61, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x6c, 0x79, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x7d, 0x29, 0x3b, 0x0d, - 0x0a, 0x20, 0x20, 0x69, 0x6d, 0x6d, 0x65, 0x6e, 0x73, 0x65, 0x74, 0x69, 0x6d, - 0x65, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x73, 0x61, - 0x74, 0x69, 0x73, 0x66, 0x79, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x64, - 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x6f, 0x6c, 0x6f, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x69, 0x6e, 0x20, 0x4a, 0x75, 0x6e, - 0x65, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x6e, 0x6f, 0x74, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x74, - 0x61, 0x6e, 0x74, 0x46, 0x69, 0x6e, 0x6e, 0x69, 0x73, 0x68, 0x73, 0x72, 0x63, - 0x20, 0x3d, 0x20, 0x28, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x68, 0x65, - 0x6c, 0x70, 0x20, 0x6f, 0x66, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x20, 0x6c, - 0x61, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, - 0x66, 0x6f, 0x72, 0x65, 0x73, 0x74, 0x73, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, - 0x67, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3e, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x2d, 0x77, 0x65, 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x53, 0x74, 0x61, 0x6e, - 0x6c, 0x65, 0x79, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x67, 0x6c, - 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x72, 0x6f, 0x61, 0x74, 0x69, 0x61, 0x20, 0x41, - 0x62, 0x6f, 0x75, 0x74, 0x20, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x69, - 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, - 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x29, 0x7b, 0x74, 0x68, 0x72, 0x6f, - 0x77, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x6c, 0x69, 0x67, 0x68, 0x74, - 0x65, 0x72, 0x65, 0x74, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x22, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x22, 0x6c, 0x69, 0x6b, - 0x65, 0x20, 0x61, 0x20, 0x65, 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x20, 0x69, 0x6e, 0x61, 0x73, 0x20, 0x73, 0x65, 0x65, 0x6e, 0x70, - 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, - 0x75, 0x62, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x22, 0x3e, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x66, 0x65, 0x65, 0x64, - 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x6f, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x57, 0x6f, - 0x6d, 0x65, 0x6e, 0x27, 0x73, 0x4e, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x4d, - 0x65, 0x78, 0x69, 0x63, 0x61, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x69, 0x6e, - 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x79, 0x20, 0x6d, 0x61, 0x6e, - 0x79, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x6c, 0x61, 0x77, 0x73, 0x75, - 0x69, 0x74, 0x64, 0x65, 0x76, 0x69, 0x73, 0x65, 0x64, 0x2e, 0x70, 0x75, 0x73, - 0x68, 0x28, 0x7b, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x73, 0x69, 0x6d, - 0x70, 0x6c, 0x79, 0x20, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x2e, 0x63, - 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x28, 0x6f, - 0x6c, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x75, 0x73, 0x2e, 0x6a, 0x73, 0x22, 0x3e, - 0x20, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, - 0x74, 0x6f, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6e, 0x64, 0x6c, 0x69, 0x65, 0x73, - 0x20, 0x69, 0x6e, 0x27, 0x5d, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x6d, 0x61, - 0x72, 0x6b, 0x65, 0x74, 0x77, 0x68, 0x6f, 0x20, 0x69, 0x73, 0x20, 0x28, 0x22, - 0x44, 0x4f, 0x4d, 0x43, 0x6f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x6f, - 0x6e, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, - 0x4b, 0x69, 0x6e, 0x67, 0x64, 0x6f, 0x6d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x74, - 0x73, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x74, 0x6f, 0x20, 0x73, 0x68, - 0x6f, 0x77, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x6d, 0x61, 0x64, 0x65, - 0x20, 0x69, 0x74, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x77, 0x65, 0x72, - 0x65, 0x20, 0x69, 0x6e, 0x6d, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65, 0x70, 0x72, - 0x65, 0x63, 0x69, 0x73, 0x65, 0x61, 0x72, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x73, - 0x72, 0x63, 0x20, 0x3d, 0x20, 0x27, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x61, 0x20, - 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x64, 0x42, 0x61, 0x70, 0x74, 0x69, 0x73, - 0x74, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x0a, 0x09, 0x09, 0x76, 0x61, - 0x72, 0x20, 0x4d, 0x61, 0x72, 0x63, 0x68, 0x20, 0x32, 0x67, 0x72, 0x65, 0x77, - 0x20, 0x75, 0x70, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x77, 0x61, - 0x79, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x66, - 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x74, 0x6f, 0x20, 0x77, 0x6f, 0x72, - 0x6b, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x73, 0x68, 0x61, 0x73, 0x20, 0x68, - 0x61, 0x64, 0x65, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x73, 0x68, 0x6f, 0x77, - 0x28, 0x29, 0x3b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x62, 0x6f, 0x6f, - 0x6b, 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x61, 0x3d, 0x3d, - 0x20, 0x22, 0x68, 0x74, 0x74, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x0a, - 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x66, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, - 0x2e, 0x72, 0x65, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x68, 0x6f, 0x73, 0x74, 0x65, - 0x64, 0x20, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x68, 0x65, 0x20, 0x77, - 0x65, 0x6e, 0x74, 0x62, 0x75, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x73, 0x70, 0x72, - 0x65, 0x61, 0x64, 0x20, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x61, 0x20, - 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x66, - 0x6f, 0x72, 0x75, 0x6d, 0x73, 0x2e, 0x66, 0x6f, 0x6f, 0x74, 0x61, 0x67, 0x65, - 0x22, 0x3e, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x61, 0x73, 0x20, 0x68, 0x69, - 0x67, 0x68, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x65, 0x2d, 0x2d, 0x3e, 0x3c, - 0x21, 0x2d, 0x2d, 0x66, 0x65, 0x6d, 0x61, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, - 0x73, 0x65, 0x65, 0x6e, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x73, 0x65, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x61, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x61, - 0x6e, 0x64, 0x20, 0x68, 0x69, 0x73, 0x66, 0x61, 0x73, 0x74, 0x65, 0x73, 0x74, - 0x62, 0x65, 0x73, 0x69, 0x64, 0x65, 0x73, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, - 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x69, 0x6d, - 0x67, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x62, 0x6f, 0x78, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x2c, 0x61, 0x20, 0x79, 0x6f, 0x75, 0x6e, 0x67, 0x61, 0x6e, 0x64, - 0x20, 0x61, 0x72, 0x65, 0x4e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x63, 0x68, - 0x65, 0x61, 0x70, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x61, - 0x6e, 0x64, 0x20, 0x68, 0x61, 0x73, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, - 0x77, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x28, 0x6d, 0x6f, 0x73, 0x74, 0x6c, - 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, - 0x61, 0x20, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x69, 0x6e, - 0x63, 0x65, 0x20, 0x61, 0x72, 0x65, 0x61, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x6f, 0x66, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x2c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x6c, 0x79, 0x70, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x2c, 0x6c, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x66, - 0x6f, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x64, 0x75, 0x63, 0x65, - 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x67, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6c, 0x65, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x41, 0x67, 0x61, 0x69, - 0x6e, 0x73, 0x74, 0x74, 0x68, 0x65, 0x20, 0x77, 0x61, 0x79, 0x6b, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x70, 0x78, 0x3b, 0x22, 0x3e, 0x0d, 0x0a, 0x70, 0x75, - 0x73, 0x68, 0x65, 0x64, 0x20, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x6e, - 0x75, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x43, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, - 0x49, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, - 0x6e, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, - 0x69, 0x73, 0x61, 0x6e, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x6f, 0x77, - 0x6e, 0x65, 0x64, 0x49, 0x53, 0x42, 0x4e, 0x20, 0x30, 0x2d, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x73, 0x4f, 0x63, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x6d, 0x61, - 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x6c, - 0x61, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x63, 0x65, - 0x65, 0x6e, 0x61, 0x63, 0x74, 0x65, 0x64, 0x77, 0x69, 0x73, 0x68, 0x20, 0x74, - 0x6f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x6c, 0x79, 0x63, 0x6f, 0x6f, 0x6c, 0x69, - 0x6e, 0x67, 0x6f, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x3d, 0x69, 0x74, 0x2e, 0x20, - 0x54, 0x68, 0x65, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x61, 0x73, - 0x73, 0x75, 0x6d, 0x65, 0x73, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, - 0x3d, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, - 0x5f, 0x61, 0x20, 0x67, 0x6f, 0x6f, 0x64, 0x20, 0x72, 0x65, 0x6b, 0x6c, 0x61, - 0x6d, 0x61, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x2c, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x70, 0x61, 0x6e, - 0x65, 0x6c, 0x22, 0x3e, 0x4c, 0x6f, 0x6e, 0x64, 0x6f, 0x6e, 0x2c, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x65, 0x73, 0x63, 0x72, 0x75, 0x73, 0x68, 0x65, 0x64, 0x62, - 0x61, 0x70, 0x74, 0x69, 0x73, 0x6d, 0x63, 0x6f, 0x61, 0x73, 0x74, 0x61, 0x6c, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, - 0x20, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x6c, 0x6f, 0x73, 0x74, 0x20, - 0x69, 0x6e, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x69, 0x6d, 0x70, 0x6c, - 0x69, 0x65, 0x73, 0x72, 0x69, 0x76, 0x61, 0x6c, 0x72, 0x79, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x73, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x65, - 0x72, 0x68, 0x61, 0x70, 0x73, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x66, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x6c, 0x61, 0x73, 0x74, 0x65, 0x64, 0x20, 0x72, 0x69, 0x73, 0x65, 0x20, 0x69, - 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x76, 0x69, 0x65, 0x77, 0x20, - 0x6f, 0x66, 0x72, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x65, 0x6d, - 0x20, 0x74, 0x6f, 0x62, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x63, - 0x6b, 0x69, 0x6e, 0x67, 0x68, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x67, 0x69, - 0x76, 0x65, 0x6e, 0x20, 0x61, 0x67, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x63, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x6f, 0x66, - 0x20, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x75, - 0x74, 0x48, 0x69, 0x67, 0x68, 0x77, 0x61, 0x79, 0x6f, 0x6e, 0x6c, 0x79, 0x20, - 0x62, 0x79, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x73, 0x62, 0x61, 0x74, - 0x74, 0x65, 0x72, 0x79, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6c, 0x61, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x73, 0x74, 0x68, 0x72, 0x65, 0x61, 0x74, 0x73, 0x69, - 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x74, 0x61, 0x6b, 0x65, 0x20, 0x6f, 0x6e, - 0x72, 0x65, 0x66, 0x75, 0x73, 0x65, 0x64, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x20, 0x3d, 0x55, 0x53, 0x26, 0x61, 0x6d, 0x70, 0x53, 0x65, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x73, 0x62, 0x79, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x68, 0x65, 0x61, - 0x64, 0x20, 0x6f, 0x66, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x2c, 0x6c, 0x65, - 0x73, 0x62, 0x69, 0x61, 0x6e, 0x73, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x61, - 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, - 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x48, 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x2f, 0x70, 0x69, 0x78, 0x65, - 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6c, - 0x6f, 0x6e, 0x67, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x6a, 0x6f, 0x69, - 0x6e, 0x74, 0x6c, 0x79, 0x73, 0x6b, 0x79, 0x73, 0x63, 0x72, 0x61, 0x55, 0x6e, - 0x69, 0x63, 0x6f, 0x64, 0x65, 0x62, 0x72, 0x20, 0x2f, 0x3e, 0x0d, 0x0a, 0x41, - 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x61, 0x6e, 0x75, 0x63, 0x6c, 0x65, 0x75, 0x73, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x79, 0x2c, 0x70, 0x75, 0x72, 0x65, 0x6c, 0x79, - 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3e, 0x65, 0x61, 0x73, 0x69, 0x6c, - 0x79, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x61, 0x6f, 0x6e, 0x63, 0x6c, - 0x69, 0x63, 0x6b, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x68, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6e, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, - 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6d, 0x61, 0x6e, 0x20, 0x77, 0x68, - 0x6f, 0x6f, 0x72, 0x67, 0x2f, 0x57, 0x65, 0x62, 0x6f, 0x6e, 0x65, 0x20, 0x61, - 0x6e, 0x64, 0x63, 0x61, 0x76, 0x61, 0x6c, 0x72, 0x79, 0x48, 0x65, 0x20, 0x64, - 0x69, 0x65, 0x64, 0x73, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x30, 0x30, 0x2c, - 0x30, 0x30, 0x30, 0x20, 0x7b, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x74, 0x6f, 0x69, 0x66, 0x28, 0x77, 0x69, 0x6e, 0x64, 0x61, - 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x73, 0x6f, 0x6c, 0x65, 0x6c, 0x79, 0x20, - 0x6d, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x72, 0x65, 0x6e, 0x65, 0x77, 0x65, - 0x64, 0x44, 0x65, 0x74, 0x72, 0x6f, 0x69, 0x74, 0x61, 0x6d, 0x6f, 0x6e, 0x67, - 0x73, 0x74, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6d, - 0x20, 0x69, 0x6e, 0x53, 0x65, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x3c, - 0x2f, 0x61, 0x3e, 0x3c, 0x4b, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x46, 0x72, - 0x61, 0x6e, 0x63, 0x69, 0x73, 0x2d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x68, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, - 0x68, 0x69, 0x6d, 0x20, 0x61, 0x6e, 0x64, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x73, 0x63, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x74, 0x20, 0x68, 0x6f, - 0x6d, 0x65, 0x74, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x66, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x66, 0x66, 0x61, 0x6c, 0x6f, 0x6c, 0x69, - 0x6e, 0x6b, 0x22, 0x3e, 0x3c, 0x77, 0x68, 0x61, 0x74, 0x20, 0x68, 0x65, 0x66, - 0x72, 0x65, 0x65, 0x20, 0x74, 0x6f, 0x43, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, - 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x64, - 0x61, 0x79, 0x6e, 0x65, 0x72, 0x76, 0x6f, 0x75, 0x73, 0x73, 0x71, 0x75, 0x61, - 0x72, 0x65, 0x20, 0x7d, 0x3b, 0x69, 0x66, 0x28, 0x67, 0x6f, 0x69, 0x6e, 0x20, - 0x77, 0x68, 0x61, 0x74, 0x69, 0x6d, 0x67, 0x22, 0x20, 0x61, 0x6c, 0x69, 0x73, - 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x74, - 0x75, 0x65, 0x73, 0x64, 0x61, 0x79, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x6c, 0x79, - 0x53, 0x6f, 0x6c, 0x6f, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x78, 0x75, 0x61, 0x6c, - 0x20, 0x2d, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x6d, 0x65, 0x64, 0x69, 0x75, - 0x6d, 0x22, 0x44, 0x4f, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x46, 0x72, 0x61, 0x6e, - 0x63, 0x65, 0x2c, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x77, 0x61, 0x72, - 0x20, 0x61, 0x6e, 0x64, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x74, 0x61, - 0x6b, 0x65, 0x20, 0x61, 0x20, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x0d, 0x0a, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x2e, 0x68, 0x69, 0x67, 0x68, 0x77, 0x61, 0x79, - 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x22, 0x3e, 0x6f, 0x62, 0x6c, 0x69, 0x67, - 0x65, 0x64, 0x72, 0x69, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x22, 0x75, 0x6e, 0x64, - 0x65, 0x66, 0x69, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x45, 0x61, - 0x72, 0x6c, 0x79, 0x20, 0x70, 0x72, 0x61, 0x69, 0x73, 0x65, 0x64, 0x69, 0x6e, - 0x20, 0x69, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x68, 0x69, 0x73, 0x61, - 0x74, 0x68, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x75, 0x70, 0x69, 0x74, 0x65, 0x72, - 0x59, 0x61, 0x68, 0x6f, 0x6f, 0x21, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64, - 0x20, 0x73, 0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x72, 0x65, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x20, 0x77, 0x6f, - 0x6d, 0x61, 0x6e, 0x3f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x20, 0x62, 0x69, - 0x63, 0x79, 0x63, 0x6c, 0x65, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x64, - 0x61, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x52, 0x61, 0x74, 0x68, 0x65, 0x72, 0x2c, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, - 0x20, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, - 0x6f, 0x77, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x2c, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x20, 0x61, 0x20, 0x70, 0x61, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6f, 0x6e, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3e, 0x3b, 0x62, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x61, - 0x6e, 0x6e, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4e, 0x65, 0x77, - 0x70, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x20, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x20, 0x74, 0x6f, 0x61, 0x20, 0x62, 0x72, 0x69, - 0x65, 0x66, 0x28, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2e, 0x3b, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x65, 0x6e, 0x7a, - 0x79, 0x6d, 0x65, 0x73, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x69, 0x6e, - 0x20, 0x6c, 0x61, 0x74, 0x65, 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x74, - 0x68, 0x65, 0x72, 0x61, 0x70, 0x79, 0x61, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x62, 0x61, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x3e, - 0x0a, 0x28, 0x29, 0x3b, 0x22, 0x20, 0x72, 0x65, 0x61, 0x20, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x5c, 0x75, 0x30, 0x30, 0x33, 0x43, 0x61, 0x61, 0x62, 0x6f, 0x75, - 0x74, 0x20, 0x61, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x09, 0x09, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x20, 0x67, 0x69, 0x76, 0x65, 0x73, 0x20, 0x61, 0x3c, 0x53, - 0x43, 0x52, 0x49, 0x50, 0x54, 0x52, 0x61, 0x69, 0x6c, 0x77, 0x61, 0x79, 0x74, - 0x68, 0x65, 0x6d, 0x65, 0x73, 0x2f, 0x74, 0x6f, 0x6f, 0x6c, 0x62, 0x6f, 0x78, - 0x42, 0x79, 0x49, 0x64, 0x28, 0x22, 0x78, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x73, - 0x2c, 0x77, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x69, 0x6e, 0x20, 0x73, 0x6f, - 0x6d, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x77, 0x69, 0x63, 0x6f, 0x6d, 0x69, - 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x20, 0x55, 0x6e, - 0x64, 0x65, 0x72, 0x20, 0x62, 0x75, 0x74, 0x20, 0x68, 0x61, 0x73, 0x68, 0x61, - 0x6e, 0x64, 0x65, 0x64, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x62, 0x79, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x61, 0x72, 0x20, 0x6f, 0x66, - 0x64, 0x65, 0x6e, 0x6f, 0x74, 0x65, 0x64, 0x2f, 0x69, 0x66, 0x72, 0x61, 0x6d, - 0x65, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x74, 0x61, - 0x67, 0x65, 0x69, 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68, 0x61, 0x26, 0x71, 0x75, - 0x6f, 0x74, 0x3b, 0x62, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x49, 0x6e, 0x20, - 0x6d, 0x61, 0x6e, 0x79, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x6f, 0x72, 0x65, - 0x67, 0x69, 0x6d, 0x65, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3c, - 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x56, 0x61, - 0x3b, 0x26, 0x67, 0x74, 0x3b, 0x3c, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x6d, 0x6f, 0x73, 0x74, 0x6c, - 0x79, 0x20, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x72, 0x65, 0x20, 0x73, 0x69, 0x7a, - 0x65, 0x3d, 0x22, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x68, 0x61, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x70, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x48, 0x6f, - 0x73, 0x74, 0x20, 0x3d, 0x20, 0x57, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x66, - 0x65, 0x72, 0x74, 0x69, 0x6c, 0x65, 0x56, 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73, - 0x3d, 0x5b, 0x5d, 0x3b, 0x28, 0x66, 0x75, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, - 0x73, 0x2f, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x61, 0x63, 0x74, 0x73, 0x20, - 0x61, 0x73, 0x49, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x3e, 0x0d, 0x0a, 0x0d, - 0x0a, 0x3c, 0x21, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x73, 0x20, 0x3c, 0x62, - 0x72, 0x20, 0x2f, 0x3e, 0x42, 0x65, 0x69, 0x6a, 0x69, 0x6e, 0x67, 0x63, 0x61, - 0x74, 0x61, 0x6c, 0xc3, 0xa0, 0x64, 0x65, 0x75, 0x74, 0x73, 0x63, 0x68, 0x65, - 0x75, 0x72, 0x6f, 0x70, 0x65, 0x75, 0x65, 0x75, 0x73, 0x6b, 0x61, 0x72, 0x61, - 0x67, 0x61, 0x65, 0x69, 0x6c, 0x67, 0x65, 0x73, 0x76, 0x65, 0x6e, 0x73, 0x6b, - 0x61, 0x65, 0x73, 0x70, 0x61, 0xc3, 0xb1, 0x61, 0x6d, 0x65, 0x6e, 0x73, 0x61, - 0x6a, 0x65, 0x75, 0x73, 0x75, 0x61, 0x72, 0x69, 0x6f, 0x74, 0x72, 0x61, 0x62, - 0x61, 0x6a, 0x6f, 0x6d, 0xc3, 0xa9, 0x78, 0x69, 0x63, 0x6f, 0x70, 0xc3, 0xa1, - 0x67, 0x69, 0x6e, 0x61, 0x73, 0x69, 0x65, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6d, 0x61, 0x6f, 0x63, 0x74, 0x75, 0x62, 0x72, 0x65, 0x64, - 0x75, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x61, 0xc3, 0xb1, 0x61, 0x64, 0x69, 0x72, - 0x65, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x61, 0x6d, 0x6f, 0x6d, 0x65, 0x6e, 0x74, - 0x6f, 0x6e, 0x75, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x6d, 0x65, - 0x72, 0x61, 0x74, 0x72, 0x61, 0x76, 0xc3, 0xa9, 0x73, 0x67, 0x72, 0x61, 0x63, - 0x69, 0x61, 0x73, 0x6e, 0x75, 0x65, 0x73, 0x74, 0x72, 0x61, 0x70, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x6f, 0x65, 0x73, 0x74, 0x61, 0x64, 0x6f, 0x73, 0x63, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x64, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6e, - 0xc3, 0xba, 0x6d, 0x65, 0x72, 0x6f, 0x61, 0x63, 0x75, 0x65, 0x72, 0x64, 0x6f, - 0x6d, 0xc3, 0xba, 0x73, 0x69, 0x63, 0x61, 0x6d, 0x69, 0x65, 0x6d, 0x62, 0x72, - 0x6f, 0x6f, 0x66, 0x65, 0x72, 0x74, 0x61, 0x73, 0x61, 0x6c, 0x67, 0x75, 0x6e, - 0x6f, 0x73, 0x70, 0x61, 0xc3, 0xad, 0x73, 0x65, 0x73, 0x65, 0x6a, 0x65, 0x6d, - 0x70, 0x6c, 0x6f, 0x64, 0x65, 0x72, 0x65, 0x63, 0x68, 0x6f, 0x61, 0x64, 0x65, - 0x6d, 0xc3, 0xa1, 0x73, 0x70, 0x72, 0x69, 0x76, 0x61, 0x64, 0x6f, 0x61, 0x67, - 0x72, 0x65, 0x67, 0x61, 0x72, 0x65, 0x6e, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x70, - 0x6f, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x68, 0x6f, 0x74, 0x65, 0x6c, 0x65, 0x73, - 0x73, 0x65, 0x76, 0x69, 0x6c, 0x6c, 0x61, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x72, - 0x6f, 0xc3, 0xba, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x6f, 0x73, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x6f, 0x63, 0x75, 0x6c, 0x74, - 0x75, 0x72, 0x61, 0x6d, 0x75, 0x6a, 0x65, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x72, 0x61, 0x64, 0x61, 0x61, 0x6e, 0x75, 0x6e, 0x63, 0x69, 0x6f, 0x65, 0x6d, - 0x62, 0x61, 0x72, 0x67, 0x6f, 0x6d, 0x65, 0x72, 0x63, 0x61, 0x64, 0x6f, 0x67, - 0x72, 0x61, 0x6e, 0x64, 0x65, 0x73, 0x65, 0x73, 0x74, 0x75, 0x64, 0x69, 0x6f, - 0x6d, 0x65, 0x6a, 0x6f, 0x72, 0x65, 0x73, 0x66, 0x65, 0x62, 0x72, 0x65, 0x72, - 0x6f, 0x64, 0x69, 0x73, 0x65, 0xc3, 0xb1, 0x6f, 0x74, 0x75, 0x72, 0x69, 0x73, - 0x6d, 0x6f, 0x63, 0xc3, 0xb3, 0x64, 0x69, 0x67, 0x6f, 0x70, 0x6f, 0x72, 0x74, - 0x61, 0x64, 0x61, 0x65, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6f, 0x66, 0x61, 0x6d, - 0x69, 0x6c, 0x69, 0x61, 0x61, 0x6e, 0x74, 0x6f, 0x6e, 0x69, 0x6f, 0x70, 0x65, - 0x72, 0x6d, 0x69, 0x74, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x61, 0x72, 0x61, - 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x73, 0x70, 0x72, 0x65, 0x63, 0x69, 0x6f, 0x73, - 0x61, 0x6c, 0x67, 0x75, 0x69, 0x65, 0x6e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x64, - 0x6f, 0x76, 0x69, 0x73, 0x69, 0x74, 0x61, 0x73, 0x74, 0xc3, 0xad, 0x74, 0x75, - 0x6c, 0x6f, 0x63, 0x6f, 0x6e, 0x6f, 0x63, 0x65, 0x72, 0x73, 0x65, 0x67, 0x75, - 0x6e, 0x64, 0x6f, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6a, 0x6f, 0x66, 0x72, 0x61, - 0x6e, 0x63, 0x69, 0x61, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x73, 0x73, 0x65, - 0x67, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x65, 0x6e, 0x65, 0x6d, 0x6f, 0x73, 0x65, - 0x66, 0x65, 0x63, 0x74, 0x6f, 0x73, 0x6d, 0xc3, 0xa1, 0x6c, 0x61, 0x67, 0x61, - 0x73, 0x65, 0x73, 0x69, 0xc3, 0xb3, 0x6e, 0x72, 0x65, 0x76, 0x69, 0x73, 0x74, - 0x61, 0x67, 0x72, 0x61, 0x6e, 0x61, 0x64, 0x61, 0x63, 0x6f, 0x6d, 0x70, 0x72, - 0x61, 0x72, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x6f, 0x67, 0x61, 0x72, 0x63, - 0xc3, 0xad, 0x61, 0x61, 0x63, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x65, 0x63, 0x75, - 0x61, 0x64, 0x6f, 0x72, 0x71, 0x75, 0x69, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x73, 0x6f, 0x64, 0x65, 0x62, 0x65, 0x72, 0xc3, 0xa1, 0x6d, - 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x68, 0x6f, 0x6d, 0x62, 0x72, 0x65, 0x73, - 0x6d, 0x75, 0x65, 0x73, 0x74, 0x72, 0x61, 0x70, 0x6f, 0x64, 0x72, 0xc3, 0xad, - 0x61, 0x6d, 0x61, 0xc3, 0xb1, 0x61, 0x6e, 0x61, 0xc3, 0xba, 0x6c, 0x74, 0x69, - 0x6d, 0x61, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x6f, 0x73, 0x6f, 0x66, 0x69, 0x63, - 0x69, 0x61, 0x6c, 0x74, 0x61, 0x6d, 0x62, 0x69, 0x65, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0xc3, 0xba, 0x6e, 0x73, 0x61, 0x6c, 0x75, 0x64, 0x6f, 0x73, 0x70, 0x6f, - 0x64, 0x65, 0x6d, 0x6f, 0x73, 0x6d, 0x65, 0x6a, 0x6f, 0x72, 0x61, 0x72, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x68, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x63, 0x61, 0x6d, 0x70, 0x61, - 0x69, 0x67, 0x6e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x72, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x64, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x66, 0x61, 0x76, 0x6f, 0x72, 0x69, - 0x74, 0x65, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x6d, 0x69, 0x6c, - 0x69, 0x74, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x6d, 0x61, 0x74, 0x65, 0x72, - 0x69, 0x61, 0x6c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x7a, 0x2d, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, - 0x65, 0x73, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x6d, 0x6f, 0x76, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x70, 0x6f, 0x6c, 0x69, 0x74, - 0x69, 0x63, 0x73, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x72, 0x65, - 0x6c, 0x69, 0x67, 0x69, 0x6f, 0x6e, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, - 0x6c, 0x66, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x64, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6c, 0x65, 0x61, 0x72, 0x6e, - 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x61, 0x62, - 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x6d, 0x61, 0x67, 0x61, - 0x7a, 0x69, 0x6e, 0x65, 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x69, 0x63, 0x74, - 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, - 0x72, 0x65, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x3c, 0x73, 0x74, - 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, - 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x67, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x62, 0x65, - 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, 0x66, 0x6f, 0x6f, 0x74, - 0x62, 0x61, 0x6c, 0x6c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x72, 0x65, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x74, 0x72, 0x61, - 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x73, 0x74, 0x75, 0x64, 0x65, - 0x6e, 0x74, 0x73, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x66, 0x69, - 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x72, - 0x6e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x66, 0x65, 0x73, 0x74, - 0x69, 0x76, 0x61, 0x6c, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x65, 0x74, 0x64, 0x72, 0x6f, 0x70, 0x64, 0x6f, 0x77, 0x6e, 0x70, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x63, 0x65, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x6d, 0x61, 0x72, 0x72, 0x69, - 0x61, 0x67, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x70, 0x72, - 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x61, 0x6e, 0x61, 0x6c, - 0x79, 0x73, 0x69, 0x73, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x62, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x3e, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, - 0x73, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x6f, 0x6f, 0x6b, 0x6d, - 0x61, 0x72, 0x6b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x63, 0x68, - 0x65, 0x6d, 0x69, 0x63, 0x61, 0x6c, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x65, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x65, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x63, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, - 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x64, 0x65, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x79, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x3d, 0x20, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x3b, 0x66, 0x6f, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x61, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, - 0x79, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x61, 0x69, 0x72, 0x63, 0x72, 0x61, 0x66, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x64, 0x6f, 0x6d, 0x65, 0x73, 0x74, 0x69, 0x63, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, - 0x68, 0x6f, 0x73, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x61, 0x63, 0x68, 0x70, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, - 0x73, 0x6c, 0x6f, 0x67, 0x6f, 0x22, 0x3e, 0x3c, 0x61, 0x64, 0x61, 0x75, 0x67, - 0x68, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x22, 0x20, 0x63, - 0x75, 0x6c, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, - 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x61, 0x73, 0x73, - 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x66, 0x75, 0x6c, - 0x74, 0x65, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x66, 0x69, 0x6e, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x63, 0x72, - 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x63, 0x67, 0x69, 0x2d, 0x62, 0x69, 0x6e, - 0x2f, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x73, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x62, - 0x65, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x73, 0x61, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x65, 0x78, 0x65, - 0x72, 0x63, 0x69, 0x73, 0x65, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, - 0x6d, 0x65, 0x64, 0x69, 0x63, 0x69, 0x6e, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x74, 0x61, 0x63, 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x4d, 0x61, - 0x67, 0x61, 0x7a, 0x69, 0x6e, 0x65, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x62, 0x6f, 0x74, 0x74, - 0x6f, 0x6d, 0x22, 0x3e, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x3a, - 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, - 0x65, 0x64, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x53, 0x6f, 0x66, - 0x74, 0x77, 0x61, 0x72, 0x65, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x73, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x6c, 0x79, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x65, 0x76, 0x65, 0x72, 0x79, 0x6f, 0x6e, 0x65, 0x73, - 0x74, 0x72, 0x61, 0x69, 0x67, 0x68, 0x74, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x65, 0x72, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x65, 0x64, 0x68, 0x65, 0x72, 0x69, 0x74, 0x61, 0x67, 0x65, - 0x73, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x61, 0x62, 0x73, 0x6f, 0x6c, - 0x75, 0x74, 0x65, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x72, 0x65, - 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x74, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, - 0x20, 0x76, 0x69, 0x6f, 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x61, 0x6e, 0x79, 0x77, - 0x68, 0x65, 0x72, 0x65, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x64, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, - 0x6c, 0x79, 0x61, 0x6c, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x66, 0x6f, 0x6c, - 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, - 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x69, 0x6e, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x64, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, - 0x2e, 0x72, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x3e, 0x3c, 0x74, 0x72, - 0x3e, 0x3c, 0x74, 0x64, 0x63, 0x6f, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, 0x64, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x61, - 0x74, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x75, 0x6c, - 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x48, 0x6f, 0x6d, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x77, 0x65, 0x62, 0x73, 0x69, - 0x74, 0x65, 0x73, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x61, 0x6c, - 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x6c, - 0x79, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x3e, 0x73, 0x6f, 0x6d, 0x65, 0x77, 0x68, - 0x61, 0x74, 0x76, 0x69, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x57, 0x65, 0x73, - 0x74, 0x65, 0x72, 0x6e, 0x20, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x76, 0x69, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x73, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, - 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x0a, 0x6d, 0x65, 0x61, 0x73, - 0x75, 0x72, 0x65, 0x73, 0x77, 0x69, 0x64, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, - 0x65, 0x64, 0x76, 0x69, 0x72, 0x67, 0x69, 0x6e, 0x69, 0x61, 0x6e, 0x6f, 0x72, - 0x6d, 0x61, 0x6c, 0x6c, 0x79, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x65, 0x64, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x73, 0x74, 0x61, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, - 0x64, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x61, 0x63, 0x63, 0x75, - 0x72, 0x61, 0x74, 0x65, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, - 0x61, 0x6c, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x63, 0x72, 0x69, - 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x79, - 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x50, 0x65, 0x72, 0x73, 0x6f, - 0x6e, 0x61, 0x6c, 0x73, 0x70, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, - 0x64, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, 0x2f, 0x3e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0x0a, 0x20, 0x20, 0x6b, - 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, - 0x6c, 0x79, 0x62, 0x72, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x6d, - 0x62, 0x69, 0x6e, 0x65, 0x64, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x65, 0x78, 0x70, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x61, 0x64, 0x65, 0x71, 0x75, 0x61, 0x74, 0x65, 0x70, 0x61, - 0x6b, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x22, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x62, 0x6c, 0x65, 0x3c, 0x2f, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x3e, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x62, - 0x72, 0x69, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, - 0x73, 0x65, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x22, 0x20, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x22, 0x20, 0x28, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x67, 0x72, - 0x61, 0x64, 0x75, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6c, 0x61, - 0x79, 0x73, 0x69, 0x61, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6d, - 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x6f, 0x20, - 0x63, 0x61, 0x74, 0x68, 0x6f, 0x6c, 0x69, 0x63, 0x70, 0x61, 0x74, 0x74, 0x65, - 0x72, 0x6e, 0x73, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x73, 0x74, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, - 0x73, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x3c, 0x2f, 0x75, 0x6c, - 0x3e, 0x0a, 0x09, 0x09, 0x3c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x63, - 0x69, 0x74, 0x69, 0x7a, 0x65, 0x6e, 0x73, 0x63, 0x6c, 0x6f, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x3c, 0x6c, 0x69, - 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x63, 0x61, 0x72, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x73, 0x65, 0x6e, 0x74, 0x65, - 0x6e, 0x63, 0x65, 0x3c, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x74, 0x68, 0x69, 0x6e, 0x6b, 0x69, 0x6e, - 0x67, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x65, 0x29, 0x73, 0x6f, 0x75, 0x74, - 0x68, 0x65, 0x72, 0x6e, 0x4d, 0x69, 0x63, 0x68, 0x61, 0x65, 0x6c, 0x20, 0x6d, - 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x63, 0x61, 0x72, 0x6f, 0x75, 0x73, - 0x65, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x69, 0x6f, 0x72, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x22, - 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x63, 0x74, 0x6f, 0x62, - 0x65, 0x72, 0x20, 0x29, 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6d, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x2d, 0x2d, 0x26, 0x67, 0x74, 0x3b, 0x0a, - 0x0a, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x63, 0x68, 0x61, 0x69, - 0x72, 0x6d, 0x61, 0x6e, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x2f, 0x3e, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x69, 0x63, 0x68, 0x61, 0x72, - 0x64, 0x20, 0x77, 0x68, 0x61, 0x74, 0x65, 0x76, 0x65, 0x72, 0x70, 0x72, 0x6f, - 0x62, 0x61, 0x62, 0x6c, 0x79, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0x62, 0x61, 0x73, 0x65, 0x62, 0x61, 0x6c, 0x6c, 0x6a, 0x75, 0x64, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x2e, 0x63, - 0x73, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x20, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, - 0x65, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x0d, 0x0a, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x73, 0x63, 0x6f, 0x74, 0x6c, 0x61, - 0x6e, 0x64, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x20, 0x49, 0x53, 0x42, 0x4e, 0x20, 0x30, - 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x2d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2d, 0x22, 0x20, - 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x73, 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, - 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x73, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x73, 0x6d, - 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x74, 0x61, - 0x6c, 0x69, 0x61, 0x6e, 0x6f, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, - 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x6c, 0x79, 0x3a, 0x20, 0x27, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x27, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x27, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x69, 0x6e, - 0x67, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x42, 0x72, 0x69, 0x74, - 0x69, 0x73, 0x68, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x46, - 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x6f, - 0x75, 0x73, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x73, 0x63, 0x6f, 0x6e, - 0x63, 0x65, 0x72, 0x6e, 0x73, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, - 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x76, 0x20, 0x69, - 0x64, 0x3d, 0x22, 0x57, 0x69, 0x6c, 0x6c, 0x69, 0x61, 0x6d, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x61, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x73, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x66, - 0x6c, 0x65, 0x78, 0x69, 0x62, 0x6c, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x6c, 0x61, 0x77, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x3d, 0x22, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x6d, 0x61, 0x78, 0x69, - 0x6d, 0x75, 0x6d, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x2f, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x68, 0x61, 0x6d, 0x69, 0x6c, 0x74, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x2f, 0x74, 0x68, 0x65, 0x6d, 0x65, - 0x73, 0x2f, 0x2f, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x67, 0x61, 0x6c, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x77, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x64, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x20, 0x6d, 0x65, 0x61, 0x73, - 0x75, 0x72, 0x65, 0x64, 0x74, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x73, - 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x26, 0x68, 0x65, 0x6c, 0x6c, 0x69, - 0x70, 0x3b, 0x6e, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, 0x22, 0x20, 0x73, - 0x69, 0x7a, 0x65, 0x3d, 0x22, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x22, 0x20, 0x22, 0x20, 0x2f, 0x3e, 0x3c, - 0x2f, 0x61, 0x3e, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x3e, 0x73, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, - 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x6f, 0x70, 0x69, 0x6e, - 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x6f, 0x69, 0x73, 0x6c, - 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x3e, 0x0a, 0x09, 0x3c, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x3e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x61, 0x74, - 0x75, 0x72, 0x64, 0x61, 0x79, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x74, 0x65, 0x6d, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x6e, 0x67, 0x69, 0x6e, - 0x65, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x64, 0x65, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x3d, 0x22, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x22, 0x45, 0x73, 0x70, 0x61, - 0xc3, 0xb1, 0x6f, 0x6c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x73, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x65, 0x72, 0x26, 0x71, 0x75, 0x6f, - 0x74, 0x3b, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x79, 0x6d, - 0x70, 0x74, 0x6f, 0x6d, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x64, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x22, 0x3e, 0x3c, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x2e, 0x6c, 0x65, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x20, 0x62, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x3d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x63, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x2e, 0x0a, 0x0a, 0x53, 0x6f, 0x6d, - 0x65, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x73, 0x75, 0x69, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x62, 0x75, 0x6c, 0x67, 0x61, 0x72, 0x69, 0x61, - 0x2e, 0x73, 0x68, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x64, 0x65, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x63, 0x6f, - 0x6e, 0x63, 0x65, 0x70, 0x74, 0x73, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x77, 0x69, 0x6c, 0x6c, 0x69, 0x61, 0x6d, 0x73, 0x4f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x6c, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x3e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x61, 0x20, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x79, 0x6f, - 0x75, 0x72, 0x73, 0x65, 0x6c, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, - 0x20, 0x6d, 0x69, 0x63, 0x68, 0x69, 0x67, 0x61, 0x6e, 0x45, 0x6e, 0x67, 0x6c, - 0x69, 0x73, 0x68, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x62, 0x69, 0x61, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x69, - 0x6e, 0x67, 0x64, 0x72, 0x69, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x66, 0x61, 0x63, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x69, 0x63, - 0x65, 0x72, 0x73, 0x52, 0x75, 0x73, 0x73, 0x69, 0x61, 0x6e, 0x20, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, 0x31, - 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x66, 0x61, 0x6d, 0x69, - 0x6c, 0x69, 0x61, 0x72, 0x20, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x6d, - 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x30, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x76, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x63, 0x74, 0x73, 0x2d, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3e, - 0x70, 0x6f, 0x72, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x20, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x69, 0x6e, - 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x73, 0x61, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, - 0x63, 0x6f, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x3d, 0x22, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x2e, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x70, - 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x67, 0x6c, 0x6f, 0x73, 0x73, 0x61, - 0x72, 0x79, 0x0a, 0x0a, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x67, 0x75, 0x69, - 0x64, 0x61, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, - 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x6d, 0x69, 0x64, 0x64, 0x6c, - 0x65, 0x22, 0x3e, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x73, 0x63, 0x6f, 0x74, 0x74, 0x69, 0x73, - 0x68, 0x6a, 0x6f, 0x6e, 0x61, 0x74, 0x68, 0x61, 0x6e, 0x6d, 0x61, 0x6a, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x2e, 0x63, - 0x6c, 0x69, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x74, 0x68, 0x61, 0x69, 0x6c, 0x61, - 0x6e, 0x64, 0x74, 0x65, 0x61, 0x63, 0x68, 0x65, 0x72, 0x73, 0x3c, 0x68, 0x65, - 0x61, 0x64, 0x3e, 0x0a, 0x09, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x3b, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3c, 0x2f, - 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x3e, 0x6f, 0x6b, 0x6c, 0x61, 0x68, 0x6f, 0x6d, - 0x61, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x76, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x30, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x68, - 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x64, 0x20, 0x28, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x20, 0x2e, 0x20, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x76, 0x69, 0x73, 0x69, 0x74, - 0x69, 0x6e, 0x67, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, - 0x20, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x22, 0x71, 0x75, 0x69, 0x63, - 0x6b, 0x6c, 0x79, 0x20, 0x6d, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x65, - 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x20, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x3d, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x2c, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x20, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x65, 0x64, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x22, 0x6d, 0x61, - 0x67, 0x6e, 0x65, 0x74, 0x69, 0x63, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, - 0x68, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x2e, 0x20, 0x57, 0x68, - 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x75, 0x72, 0x73, 0x64, 0x61, 0x79, 0x64, - 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x26, 0x65, 0x61, 0x63, 0x75, 0x74, - 0x65, 0x3b, 0x68, 0x61, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x76, 0x61, - 0x6c, 0x75, 0x61, 0x74, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x70, 0x61, 0x74, 0x69, 0x65, - 0x6e, 0x74, 0x73, 0x20, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x63, 0x6f, - 0x6c, 0x6f, 0x72, 0x61, 0x64, 0x6f, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x63, 0x61, 0x6d, 0x70, 0x62, 0x65, 0x6c, 0x6c, 0x3c, 0x21, 0x2d, 0x2d, - 0x20, 0x65, 0x6e, 0x64, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x3c, - 0x62, 0x72, 0x20, 0x2f, 0x3e, 0x0d, 0x0a, 0x5f, 0x70, 0x6f, 0x70, 0x75, 0x70, - 0x73, 0x7c, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2c, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x20, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x20, - 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x3c, 0x62, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6c, 0x65, 0x26, 0x71, 0x75, 0x6f, 0x74, - 0x3b, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x20, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x3c, - 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, - 0x65, 0x73, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x6d, 0x61, 0x72, - 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x6c, 0x79, 0x29, 0x2e, 0x0a, 0x0a, 0x54, - 0x68, 0x65, 0x20, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x6d, 0x75, - 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x0a, 0x22, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x73, 0x72, 0x74, 0x75, 0x67, - 0x75, 0xc3, 0xaa, 0x73, 0x73, 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x54, 0x6f, 0x20, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, - 0x0d, 0x0a, 0x61, 0x74, 0x74, 0x6f, 0x72, 0x6e, 0x65, 0x79, 0x65, 0x6d, 0x70, - 0x68, 0x61, 0x73, 0x69, 0x73, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x6f, 0x72, 0x73, - 0x66, 0x61, 0x6e, 0x63, 0x79, 0x62, 0x6f, 0x78, 0x77, 0x6f, 0x72, 0x6c, 0x64, - 0x27, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x64, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x65, 0x64, 0x3d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x70, 0x78, 0x3b, 0x66, - 0x6f, 0x6e, 0x74, 0x2d, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x6a, - 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, - 0x65, 0x64, 0x76, 0x61, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x68, 0x6f, - 0x6d, 0x70, 0x73, 0x6f, 0x6e, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, - 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, - 0x61, 0x6c, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x30, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x74, 0x62, 0x6f, 0x64, 0x79, - 0x3e, 0x3c, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x20, 0x43, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, 0x69, 0x78, 0x0a, - 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, - 0x65, 0x20, 0x3c, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x73, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, - 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x20, 0x4f, 0x63, 0x74, 0x6f, - 0x62, 0x65, 0x72, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x20, 0x65, 0x78, - 0x70, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x65, - 0x6e, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x6f, 0x6e, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x6d, 0x61, 0x72, 0x79, 0x6c, 0x61, 0x6e, 0x64, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, - 0x63, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x63, 0x74, 0x2e, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x61, - 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x73, 0x69, 0x62, 0x6c, 0x69, 0x6e, - 0x67, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x73, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x29, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, - 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x62, 0x6f, 0x78, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, 0x70, 0x72, - 0x65, 0x67, 0x6e, 0x61, 0x6e, 0x74, 0x74, 0x6f, 0x6d, 0x6f, 0x72, 0x72, 0x6f, - 0x77, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x69, 0x63, 0x6f, 0x6e, - 0x2e, 0x70, 0x6e, 0x67, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x62, 0x61, 0x73, 0x65, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, - 0x22, 0x3e, 0x67, 0x61, 0x6d, 0x62, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x75, 0x63, - 0x68, 0x20, 0x61, 0x73, 0x20, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x20, 0x6d, 0x69, 0x73, 0x73, 0x6f, - 0x75, 0x72, 0x69, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x74, 0x6f, - 0x70, 0x3a, 0x31, 0x70, 0x78, 0x20, 0x2e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x3e, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3d, 0x22, 0x32, 0x6c, 0x61, 0x7a, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x6e, - 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x22, 0x3e, 0x0a, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, - 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3a, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x20, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x22, 0x20, 0x26, 0x6c, 0x74, 0x3b, - 0x21, 0x2d, 0x2d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3e, 0x3c, 0x2f, - 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, - 0x3e, 0x0a, 0x28, 0xe7, 0xae, 0x80, 0xe4, 0xbd, 0x93, 0x29, 0x28, 0xe7, 0xb9, - 0x81, 0xe9, 0xab, 0x94, 0x29, 0x68, 0x72, 0x76, 0x61, 0x74, 0x73, 0x6b, 0x69, - 0x69, 0x74, 0x61, 0x6c, 0x69, 0x61, 0x6e, 0x6f, 0x72, 0x6f, 0x6d, 0xc3, 0xa2, - 0x6e, 0xc4, 0x83, 0x74, 0xc3, 0xbc, 0x72, 0x6b, 0xc3, 0xa7, 0x65, 0xd8, 0xa7, - 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, 0x88, 0x74, 0x61, 0x6d, 0x62, 0x69, 0xc3, 0xa9, - 0x6e, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x69, 0x61, 0x73, 0x6d, 0x65, 0x6e, 0x73, - 0x61, 0x6a, 0x65, 0x73, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x73, 0x64, - 0x65, 0x72, 0x65, 0x63, 0x68, 0x6f, 0x73, 0x6e, 0x61, 0x63, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x69, 0x6f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x63, 0x74, 0x6f, 0x75, 0x73, 0x75, 0x61, 0x72, 0x69, 0x6f, 0x73, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x61, 0x67, 0x6f, 0x62, 0x69, 0x65, - 0x72, 0x6e, 0x6f, 0x65, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x61, 0x73, 0x61, 0x6e, - 0x75, 0x6e, 0x63, 0x69, 0x6f, 0x73, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x63, 0x69, - 0x61, 0x63, 0x6f, 0x6c, 0x6f, 0x6d, 0x62, 0x69, 0x61, 0x64, 0x65, 0x73, 0x70, - 0x75, 0xc3, 0xa9, 0x73, 0x64, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x73, 0x70, - 0x72, 0x6f, 0x79, 0x65, 0x63, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x6f, 0x70, 0xc3, 0xba, 0x62, 0x6c, 0x69, 0x63, 0x6f, 0x6e, 0x6f, 0x73, - 0x6f, 0x74, 0x72, 0x6f, 0x73, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x61, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6d, 0x69, 0x6c, 0x6c, 0x6f, - 0x6e, 0x65, 0x73, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x74, 0x65, 0x70, 0x72, - 0x65, 0x67, 0x75, 0x6e, 0x74, 0x61, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x69, 0x6f, - 0x72, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x73, 0x70, 0x72, 0x6f, 0x62, - 0x6c, 0x65, 0x6d, 0x61, 0x73, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x67, 0x6f, 0x6e, - 0x75, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x73, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0xc3, - 0xb3, 0x6e, 0x69, 0x6d, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x72, 0x6d, 0x69, 0x65, - 0x6e, 0x74, 0x72, 0x61, 0x73, 0x61, 0x6d, 0xc3, 0xa9, 0x72, 0x69, 0x63, 0x61, - 0x76, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x6f, 0x72, 0x73, 0x6f, 0x63, 0x69, 0x65, - 0x64, 0x61, 0x64, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x65, - 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x72, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x6f, 0x70, 0x61, 0x6c, 0x61, 0x62, 0x72, 0x61, 0x73, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0xc3, 0xa9, 0x73, 0x65, 0x6e, 0x74, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x65, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x6d, 0x69, 0x65, 0x6d, 0x62, 0x72, - 0x6f, 0x73, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x64, 0x63, 0xc3, 0xb3, - 0x72, 0x64, 0x6f, 0x62, 0x61, 0x7a, 0x61, 0x72, 0x61, 0x67, 0x6f, 0x7a, 0x61, - 0x70, 0xc3, 0xa1, 0x67, 0x69, 0x6e, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, - 0x6c, 0x65, 0x73, 0x62, 0x6c, 0x6f, 0x71, 0x75, 0x65, 0x61, 0x72, 0x67, 0x65, - 0x73, 0x74, 0x69, 0xc3, 0xb3, 0x6e, 0x61, 0x6c, 0x71, 0x75, 0x69, 0x6c, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6d, 0x61, 0x73, 0x63, 0x69, 0x65, 0x6e, - 0x63, 0x69, 0x61, 0x73, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x6f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x61, 0x65, 0x73, 0x74, 0x75, 0x64, 0x69, 0x6f, 0x73, 0x70, 0xc3, 0xba, - 0x62, 0x6c, 0x69, 0x63, 0x61, 0x6f, 0x62, 0x6a, 0x65, 0x74, 0x69, 0x76, 0x6f, - 0x61, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x65, 0x62, 0x75, 0x73, 0x63, 0x61, - 0x64, 0x6f, 0x72, 0x63, 0x61, 0x6e, 0x74, 0x69, 0x64, 0x61, 0x64, 0x65, 0x6e, - 0x74, 0x72, 0x61, 0x64, 0x61, 0x73, 0x61, 0x63, 0x63, 0x69, 0x6f, 0x6e, 0x65, - 0x73, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x6f, 0x73, 0x73, 0x75, 0x70, 0x65, - 0x72, 0x69, 0x6f, 0x72, 0x6d, 0x61, 0x79, 0x6f, 0x72, 0xc3, 0xad, 0x61, 0x61, - 0x6c, 0x65, 0x6d, 0x61, 0x6e, 0x69, 0x61, 0x66, 0x75, 0x6e, 0x63, 0x69, 0xc3, - 0xb3, 0x6e, 0xc3, 0xba, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x73, 0x68, 0x61, 0x63, - 0x69, 0x65, 0x6e, 0x64, 0x6f, 0x61, 0x71, 0x75, 0x65, 0x6c, 0x6c, 0x6f, 0x73, - 0x65, 0x64, 0x69, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x66, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x64, 0x6f, 0x61, 0x6d, 0x62, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x66, 0x61, - 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x6e, 0x75, 0x65, 0x73, 0x74, 0x72, 0x61, - 0x73, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x6f, 0x73, 0x62, 0x61, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x65, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x61, 0x72, 0x63, 0x6f, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x6f, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x61, 0x72, 0x63, 0x6f, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x6f, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x6a, 0xc3, 0xb3, 0x76, 0x65, - 0x6e, 0x65, 0x73, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x74, 0xc3, - 0xa9, 0x63, 0x6e, 0x69, 0x63, 0x61, 0x63, 0x6f, 0x6e, 0x6a, 0x75, 0x6e, 0x74, - 0x6f, 0x65, 0x6e, 0x65, 0x72, 0x67, 0xc3, 0xad, 0x61, 0x74, 0x72, 0x61, 0x62, - 0x61, 0x6a, 0x61, 0x72, 0x61, 0x73, 0x74, 0x75, 0x72, 0x69, 0x61, 0x73, 0x72, - 0x65, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, - 0x61, 0x72, 0x62, 0x6f, 0x6c, 0x65, 0x74, 0xc3, 0xad, 0x6e, 0x73, 0x61, 0x6c, - 0x76, 0x61, 0x64, 0x6f, 0x72, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x61, - 0x74, 0x72, 0x61, 0x62, 0x61, 0x6a, 0x6f, 0x73, 0x70, 0x72, 0x69, 0x6d, 0x65, - 0x72, 0x6f, 0x73, 0x6e, 0x65, 0x67, 0x6f, 0x63, 0x69, 0x6f, 0x73, 0x6c, 0x69, - 0x62, 0x65, 0x72, 0x74, 0x61, 0x64, 0x64, 0x65, 0x74, 0x61, 0x6c, 0x6c, 0x65, - 0x73, 0x70, 0x61, 0x6e, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x70, 0x72, 0xc3, 0xb3, - 0x78, 0x69, 0x6d, 0x6f, 0x61, 0x6c, 0x6d, 0x65, 0x72, 0xc3, 0xad, 0x61, 0x61, - 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x65, 0x73, 0x71, 0x75, 0x69, 0xc3, 0xa9, 0x6e, - 0x65, 0x73, 0x63, 0x6f, 0x72, 0x61, 0x7a, 0xc3, 0xb3, 0x6e, 0x73, 0x65, 0x63, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x62, 0x75, 0x73, 0x63, 0x61, 0x6e, 0x64, 0x6f, - 0x6f, 0x70, 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x69, 0x6f, 0x72, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0x6f, 0x74, 0x6f, - 0x64, 0x61, 0x76, 0xc3, 0xad, 0x61, 0x67, 0x61, 0x6c, 0x65, 0x72, 0xc3, 0xad, - 0x61, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x69, - 0x63, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x74, 0x61, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x6f, 0x73, 0x63, 0x72, 0xc3, 0xad, 0x74, 0x69, 0x63, 0x61, 0x64, 0xc3, 0xb3, - 0x6c, 0x61, 0x72, 0x65, 0x73, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x63, 0x69, 0x61, - 0x64, 0x65, 0x62, 0x65, 0x72, 0xc3, 0xa1, 0x6e, 0x70, 0x65, 0x72, 0xc3, 0xad, - 0x6f, 0x64, 0x6f, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x69, 0x74, 0x61, 0x6d, 0x61, - 0x6e, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x70, 0x65, 0x71, 0x75, 0x65, 0xc3, 0xb1, - 0x6f, 0x72, 0x65, 0x63, 0x69, 0x62, 0x69, 0x64, 0x61, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x6e, 0x61, 0x6c, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x66, 0x65, 0x63, - 0x61, 0x6e, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x61, 0x6e, 0x61, 0x72, 0x69, - 0x61, 0x73, 0x64, 0x65, 0x73, 0x63, 0x61, 0x72, 0x67, 0x61, 0x64, 0x69, 0x76, - 0x65, 0x72, 0x73, 0x6f, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x63, 0x61, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x65, 0x72, 0x65, 0x74, 0xc3, 0xa9, 0x63, 0x6e, - 0x69, 0x63, 0x6f, 0x64, 0x65, 0x62, 0x65, 0x72, 0xc3, 0xad, 0x61, 0x76, 0x69, - 0x76, 0x69, 0x65, 0x6e, 0x64, 0x61, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x7a, 0x61, - 0x73, 0x61, 0x64, 0x65, 0x6c, 0x61, 0x6e, 0x74, 0x65, 0x66, 0x75, 0x6e, 0x63, - 0x69, 0x6f, 0x6e, 0x61, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6a, 0x6f, 0x73, 0x64, - 0x69, 0x66, 0xc3, 0xad, 0x63, 0x69, 0x6c, 0x63, 0x69, 0x75, 0x64, 0x61, 0x64, - 0x65, 0x73, 0x61, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x61, 0x73, 0x61, 0x76, 0x61, - 0x6e, 0x7a, 0x61, 0x64, 0x61, 0x74, 0xc3, 0xa9, 0x72, 0x6d, 0x69, 0x6e, 0x6f, - 0x75, 0x6e, 0x69, 0x64, 0x61, 0x64, 0x65, 0x73, 0x73, 0xc3, 0xa1, 0x6e, 0x63, - 0x68, 0x65, 0x7a, 0x63, 0x61, 0x6d, 0x70, 0x61, 0xc3, 0xb1, 0x61, 0x73, 0x6f, - 0x66, 0x74, 0x6f, 0x6e, 0x69, 0x63, 0x72, 0x65, 0x76, 0x69, 0x73, 0x74, 0x61, - 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x6d, 0x6f, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x73, 0x66, - 0x61, 0x63, 0x75, 0x6c, 0x74, 0x61, 0x64, 0x63, 0x72, 0xc3, 0xa9, 0x64, 0x69, - 0x74, 0x6f, 0x64, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x73, 0x73, 0x75, 0x70, - 0x75, 0x65, 0x73, 0x74, 0x6f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, 0x73, 0x70, 0x65, 0x71, 0x75, 0x65, - 0xc3, 0xb1, 0x61, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xb5, - 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0xd1, - 0x8c, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x8b, - 0xd1, 0x82, 0xd1, 0x8c, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, - 0x95, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb3, - 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x8f, 0xd0, 0xb2, 0xd1, - 0x81, 0xd0, 0xb5, 0xd1, 0x85, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb9, - 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xb6, 0xd0, 0xb5, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, - 0xbb, 0xd0, 0xb8, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd1, 0x83, 0xd0, 0xb4, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x8c, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, - 0x82, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xb5, - 0xd0, 0xb1, 0xd1, 0x8f, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, - 0x81, 0xd0, 0xb5, 0xd0, 0xb1, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb4, - 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xb9, 0xd1, 0x82, 0xd1, 0x84, 0xd0, - 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, - 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, - 0xbe, 0xd0, 0xb9, 0xd0, 0xb8, 0xd0, 0xb3, 0xd1, 0x80, 0xd1, 0x8b, 0xd1, 0x82, - 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xb5, 0xd0, 0xb2, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, - 0xbc, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd1, 0x8e, 0xd0, 0xbb, 0xd0, 0xb8, - 0xd1, 0x88, 0xd1, 0x8c, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, 0x85, 0xd0, - 0xbf, 0xd0, 0xbe, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xb5, - 0xd0, 0xb9, 0xd0, 0xb4, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, - 0xb8, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xb1, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x83, 0xd1, 0x85, 0xd0, 0xbe, 0xd1, - 0x82, 0xd1, 0x8f, 0xd0, 0xb4, 0xd0, 0xb2, 0xd1, 0x83, 0xd1, 0x85, 0xd1, 0x81, - 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xbb, 0xd1, 0x8e, 0xd0, 0xb4, 0xd0, - 0xb8, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xb8, - 0xd1, 0x80, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xb1, 0xd1, 0x8f, 0xd1, - 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xb2, 0xd0, 0xb8, 0xd0, 0xb4, - 0xd0, 0xb5, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, 0x8d, 0xd1, - 0x82, 0xd0, 0xb8, 0xd0, 0xbc, 0xd1, 0x81, 0xd1, 0x87, 0xd0, 0xb5, 0xd1, 0x82, - 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x8b, 0xd1, 0x86, 0xd0, 0xb5, 0xd0, - 0xbd, 0xd1, 0x8b, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xbb, 0xd0, 0xb2, - 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x8c, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xb5, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb4, 0xd1, 0x8b, 0xd1, 0x82, 0xd0, 0xb5, - 0xd0, 0xb1, 0xd0, 0xb5, 0xd0, 0xb2, 0xd1, 0x8b, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, - 0xbd, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xbf, - 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x83, 0xd0, 0xbf, 0xd1, - 0x80, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x86, 0xd0, 0xb0, - 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, - 0xb4, 0xd1, 0x8b, 0xd0, 0xb7, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x8e, 0xd0, 0xbc, - 0xd0, 0xbe, 0xd0, 0xb3, 0xd1, 0x83, 0xd0, 0xb4, 0xd1, 0x80, 0xd1, 0x83, 0xd0, - 0xb3, 0xd0, 0xb2, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xb9, 0xd0, 0xb8, 0xd0, 0xb4, - 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, - 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, - 0xd0, 0xb0, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, - 0x80, 0xd0, 0xbe, 0xd0, 0xba, 0xd0, 0xb8, 0xd1, 0x8e, 0xd0, 0xbd, 0xd1, 0x8f, - 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x8c, 0xd0, 0x95, 0xd1, 0x81, 0xd1, - 0x82, 0xd1, 0x8c, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, 0xb0, 0xd0, 0xbd, - 0xd0, 0xb0, 0xd1, 0x88, 0xd0, 0xb8, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x84, 0xd9, - 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd9, 0x8a, 0xd8, 0xac, 0xd9, 0x85, - 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, 0xae, 0xd8, 0xa7, 0xd8, 0xb5, 0xd8, 0xa9, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xb0, 0xd9, 0x8a, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x8a, - 0xd9, 0x87, 0xd8, 0xac, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xa2, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xaf, - 0xd8, 0xaa, 0xd8, 0xad, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xb5, 0xd9, 0x81, 0xd8, - 0xad, 0xd8, 0xa9, 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x8a, 0xd9, 0x83, 0xd9, 0x88, 0xd9, - 0x86, 0xd8, 0xb4, 0xd8, 0xa8, 0xd9, 0x83, 0xd8, 0xa9, 0xd9, 0x81, 0xd9, 0x8a, - 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xa8, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, - 0xad, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xa1, 0xd8, 0xa3, 0xd9, 0x83, 0xd8, 0xab, - 0xd8, 0xb1, 0xd8, 0xae, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xad, 0xd8, 0xa8, 0xd8, 0xaf, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x84, - 0xd8, 0xaf, 0xd8, 0xb1, 0xd9, 0x88, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, 0xb6, 0xd8, - 0xba, 0xd8, 0xb7, 0xd8, 0xaa, 0xd9, 0x83, 0xd9, 0x88, 0xd9, 0x86, 0xd9, 0x87, - 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x83, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, 0xad, 0xd8, - 0xa9, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb7, 0xd8, 0xa8, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x83, 0xd8, - 0xb4, 0xd9, 0x83, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x8a, 0xd9, 0x85, 0xd9, 0x83, - 0xd9, 0x86, 0xd9, 0x85, 0xd9, 0x86, 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xb4, 0xd8, - 0xb1, 0xd9, 0x83, 0xd8, 0xa9, 0xd8, 0xb1, 0xd8, 0xa6, 0xd9, 0x8a, 0xd8, 0xb3, - 0xd9, 0x86, 0xd8, 0xb4, 0xd9, 0x8a, 0xd8, 0xb7, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, - 0xb0, 0xd8, 0xa7, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x86, 0xd8, 0xb4, - 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xaa, 0xd8, 0xb9, 0xd8, 0xa8, 0xd8, - 0xb1, 0xd8, 0xb1, 0xd8, 0xad, 0xd9, 0x85, 0xd8, 0xa9, 0xd9, 0x83, 0xd8, 0xa7, - 0xd9, 0x81, 0xd8, 0xa9, 0xd9, 0x8a, 0xd9, 0x82, 0xd9, 0x88, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xb2, 0xd9, 0x83, 0xd9, 0x84, 0xd9, 0x85, - 0xd8, 0xa9, 0xd8, 0xa3, 0xd8, 0xad, 0xd9, 0x85, 0xd8, 0xaf, 0xd9, 0x82, 0xd9, - 0x84, 0xd8, 0xa8, 0xd9, 0x8a, 0xd9, 0x8a, 0xd8, 0xb9, 0xd9, 0x86, 0xd9, 0x8a, - 0xd8, 0xb5, 0xd9, 0x88, 0xd8, 0xb1, 0xd8, 0xa9, 0xd8, 0xb7, 0xd8, 0xb1, 0xd9, - 0x8a, 0xd9, 0x82, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xac, - 0xd9, 0x88, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, 0xae, 0xd8, 0xb1, 0xd9, - 0x89, 0xd9, 0x85, 0xd8, 0xb9, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xa7, 0xd8, 0xa8, - 0xd8, 0xad, 0xd8, 0xab, 0xd8, 0xb9, 0xd8, 0xb1, 0xd9, 0x88, 0xd8, 0xb6, 0xd8, - 0xa8, 0xd8, 0xb4, 0xd9, 0x83, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb3, 0xd8, 0xac, - 0xd9, 0x84, 0xd8, 0xa8, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x86, 0xd8, 0xae, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xaf, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xa8, - 0xd9, 0x83, 0xd9, 0x84, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa8, 0xd8, 0xaf, 0xd9, - 0x88, 0xd9, 0x86, 0xd8, 0xa3, 0xd9, 0x8a, 0xd8, 0xb6, 0xd8, 0xa7, 0xd9, 0x8a, - 0xd9, 0x88, 0xd8, 0xac, 0xd8, 0xaf, 0xd9, 0x81, 0xd8, 0xb1, 0xd9, 0x8a, 0xd9, - 0x82, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa8, 0xd8, 0xaa, 0xd8, 0xa3, 0xd9, 0x81, - 0xd8, 0xb6, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb7, 0xd8, 0xa8, 0xd8, 0xae, 0xd8, - 0xa7, 0xd9, 0x83, 0xd8, 0xab, 0xd8, 0xb1, 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xb1, - 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x81, 0xd8, 0xb6, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, - 0xad, 0xd9, 0x84, 0xd9, 0x89, 0xd9, 0x86, 0xd9, 0x81, 0xd8, 0xb3, 0xd9, 0x87, - 0xd8, 0xa3, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, - 0x88, 0xd8, 0xaf, 0xd8, 0xa3, 0xd9, 0x86, 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xaf, - 0xd9, 0x8a, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, - 0x86, 0xd9, 0x85, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xb6, 0xd8, 0xaa, 0xd8, 0xb9, - 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xaf, 0xd8, 0xa7, 0xd8, 0xae, 0xd9, 0x84, 0xd9, - 0x85, 0xd9, 0x85, 0xd9, 0x83, 0xd9, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, - 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x06, 0x05, 0x04, 0x03, - 0x02, 0x01, 0x00, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x0e, - 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, - 0x17, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x18, 0x19, 0x1a, 0x1b, - 0x1c, 0x1d, 0x1e, 0x1f, 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0xff, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, - 0x07, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x65, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, - 0x54, 0x44, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x6d, 0x61, 0x72, 0x6b, 0x65, - 0x74, 0x69, 0x6e, 0x67, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, - 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x61, 0x64, 0x76, - 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, - 0x65, 0x72, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x3c, 0x2f, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x3e, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, - 0x6c, 0x69, 0x61, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, - 0x69, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, - 0x65, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x61, 0x6e, 0x6f, - 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x69, 0x65, 0x73, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x61, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, - 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x65, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x73, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x61, 0x72, 0x79, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0d, 0x0a, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x79, 0x7d, - 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x73, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x64, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x6f, 0x75, - 0x73, 0x73, 0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x65, 0x72, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x26, 0x72, 0x61, 0x71, 0x75, 0x6f, 0x3b, 0x3c, 0x2f, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x62, 0x65, 0x61, 0x75, 0x74, 0x69, 0x66, 0x75, 0x6c, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x70, 0x6f, 0x72, 0x74, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, - 0x64, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x70, 0x72, 0x6f, - 0x6d, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x4e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x2e, 0x66, 0x6f, 0x63, 0x75, 0x73, - 0x28, 0x29, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x75, - 0x6e, 0x63, 0x65, 0x64, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x0a, - 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x6e, 0x73, 0x69, 0x76, - 0x65, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x72, 0x61, - 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x74, 0x65, 0x72, 0x72, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, - 0x61, 0x6d, 0x65, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x69, 0x73, 0x6d, 0x74, - 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x6c, 0x73, 0x65, 0x77, - 0x68, 0x65, 0x72, 0x65, 0x41, 0x6c, 0x65, 0x78, 0x61, 0x6e, 0x64, 0x65, 0x72, - 0x61, 0x70, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x6d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x73, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x61, 0x66, 0x66, - 0x69, 0x6c, 0x69, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x3e, 0x74, 0x72, 0x65, 0x61, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x69, - 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x2e, 0x50, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x6f, - 0x6e, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x3d, 0x22, 0x62, 0x69, 0x6f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x79, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, - 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x46, 0x72, 0x61, 0x6e, - 0xc3, 0xa7, 0x61, 0x69, 0x73, 0x48, 0x6f, 0x6c, 0x6c, 0x79, 0x77, 0x6f, 0x6f, - 0x64, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x64, 0x61, 0x72, 0x64, 0x73, 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3e, 0x0a, 0x72, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, - 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x72, 0x65, 0x64, 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x6f, - 0x70, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, - 0x3e, 0x0a, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x65, 0x64, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x65, - 0x64, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x77, 0x6f, 0x72, - 0x6c, 0x64, 0x77, 0x69, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6e, 0x65, - 0x77, 0x73, 0x70, 0x61, 0x70, 0x65, 0x72, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x3e, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x6c, - 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x73, 0x73, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x3d, 0x22, 0x2f, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x65, - 0x64, 0x45, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x61, 0x72, - 0x73, 0x65, 0x49, 0x6e, 0x74, 0x28, 0x73, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x75, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x3c, 0x2f, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x65, - 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x65, 0x72, 0x66, 0x6f, - 0x72, 0x6d, 0x65, 0x64, 0x74, 0x77, 0x6f, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, - 0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x66, 0x6f, 0x72, 0x65, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x22, - 0x3e, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x69, 0x6e, 0x63, - 0x72, 0x65, 0x61, 0x73, 0x65, 0x64, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x20, - 0x6f, 0x66, 0x70, 0x65, 0x72, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x74, 0x72, - 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, - 0x61, 0x72, 0x79, 0x70, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x79, 0x65, 0x64, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6c, 0x69, 0x7a, 0x61, - 0x62, 0x65, 0x74, 0x68, 0x3c, 0x2f, 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x3e, - 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x69, 0x6e, 0x73, 0x75, - 0x72, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x3b, 0x6c, 0x65, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6f, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x79, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x73, 0x6f, - 0x6d, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x65, 0x64, 0x3c, - 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x79, 0x72, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x6f, 0x75, 0x73, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x74, 0x65, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x6e, 0x6f, 0x20, - 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, - 0x6e, 0x67, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x63, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x79, 0x74, 0x79, 0x70, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x69, - 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x3b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x70, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x71, 0x75, - 0x65, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x69, 0x74, 0x20, - 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x63, 0x65, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x68, - 0x6f, 0x6e, 0x65, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x70, - 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x73, 0x61, 0x64, 0x76, 0x61, 0x6e, - 0x74, 0x61, 0x67, 0x65, 0x29, 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x46, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x6d, 0x6f, 0x63, 0x72, 0x61, 0x63, - 0x79, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x73, 0x75, 0x66, 0x66, 0x65, 0x72, 0x69, - 0x6e, 0x67, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x63, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x73, - 0x61, 0x69, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x74, 0x20, 0x6d, 0x61, - 0x79, 0x20, 0x62, 0x65, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x3c, 0x2f, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, - 0x64, 0x75, 0x6c, 0x65, 0x64, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x73, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0a, 0x73, 0x75, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, - 0x20, 0x30, 0x73, 0x70, 0x69, 0x72, 0x69, 0x74, 0x75, 0x61, 0x6c, 0x3c, 0x2f, - 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x0a, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, - 0x6f, 0x66, 0x74, 0x67, 0x72, 0x61, 0x64, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x64, - 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x65, 0x64, 0x68, 0x65, 0x20, 0x62, 0x65, - 0x63, 0x61, 0x6d, 0x65, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, - 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6a, 0x73, 0x68, 0x6f, 0x75, 0x73, - 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, - 0x64, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x64, 0x6c, 0x69, 0x74, - 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, - 0x65, 0x64, 0x75, 0x70, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, - 0x69, 0x6e, 0x67, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x63, - 0x65, 0x6e, 0x74, 0x75, 0x72, 0x69, 0x65, 0x73, 0x4a, 0x61, 0x70, 0x61, 0x6e, - 0x65, 0x73, 0x65, 0x20, 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x61, 0x6c, 0x67, 0x6f, - 0x72, 0x69, 0x74, 0x68, 0x6d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x73, 0x72, 0x65, 0x62, 0x65, 0x6c, 0x6c, 0x69, 0x6f, 0x6e, 0x75, 0x6e, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x6f, 0x75, 0x72, 0x61, - 0x67, 0x65, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x69, 0x6e, - 0x76, 0x6f, 0x6c, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, - 0x69, 0x76, 0x65, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x6c, 0x74, 0x68, - 0x6f, 0x75, 0x67, 0x68, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x69, 0x6e, 0x67, - 0x63, 0x6f, 0x6e, 0x64, 0x75, 0x63, 0x74, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, - 0x64, 0x2d, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x46, 0x65, 0x62, - 0x72, 0x75, 0x61, 0x72, 0x79, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x6f, 0x75, - 0x73, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x65, 0x78, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x74, 0x63, - 0x6f, 0x6c, 0x73, 0x70, 0x61, 0x6e, 0x3d, 0x22, 0x74, 0x65, 0x63, 0x68, 0x6e, - 0x69, 0x63, 0x61, 0x6c, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x64, 0x48, 0x6f, 0x6e, 0x67, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x20, 0x46, 0x61, - 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x65, 0x20, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x65, 0x6c, - 0x65, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x73, - 0x69, 0x76, 0x65, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0a, 0x09, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x6f, 0x72, 0x65, 0x64, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x6f, 0x72, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x74, 0x68, 0x6f, 0x73, - 0x65, 0x20, 0x77, 0x68, 0x6f, 0x6d, 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x64, 0x69, 0x66, - 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x63, 0x6f, - 0x6e, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x69, 0x6e, 0x67, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x2e, - 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x69, 0x63, 0x61, 0x6c, 0x63, 0x6f, 0x61, 0x6c, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x74, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x65, 0x76, 0x6f, - 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x22, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x6f, 0x61, 0x6c, - 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, - 0x72, 0x65, 0x64, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x41, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c, 0x66, 0x75, 0x72, 0x6e, - 0x69, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, - 0x20, 0x20, 0x6f, 0x6e, 0x62, 0x6c, 0x75, 0x72, 0x3d, 0x22, 0x73, 0x75, 0x73, - 0x70, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, - 0x6e, 0x74, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x4d, 0x6f, - 0x72, 0x65, 0x6f, 0x76, 0x65, 0x72, 0x2c, 0x61, 0x62, 0x6f, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x77, - 0x65, 0x72, 0x65, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x65, 0x6d, 0x6f, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x6e, 0x61, 0x72, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x61, 0x64, 0x76, 0x6f, - 0x63, 0x61, 0x74, 0x65, 0x73, 0x70, 0x78, 0x3b, 0x62, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x64, 0x69, 0x72, - 0x3d, 0x22, 0x6c, 0x74, 0x72, 0x22, 0x65, 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x65, - 0x65, 0x73, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x20, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x6f, 0x72, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x73, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x53, 0x65, 0x70, 0x74, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x61, 0x64, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x28, - 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x20, 0x73, 0x75, 0x67, 0x67, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x61, 0x74, 0x65, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x65, 0x6c, 0x61, - 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x53, 0x6f, 0x6d, 0x65, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x65, 0x63, 0x65, - 0x72, 0x74, 0x61, 0x69, 0x6e, 0x6c, 0x79, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x73, 0x4a, - 0x65, 0x72, 0x75, 0x73, 0x61, 0x6c, 0x65, 0x6d, 0x74, 0x68, 0x65, 0x79, 0x20, - 0x68, 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x69, 0x6e, 0x67, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x6e, 0x63, 0x65, 0x73, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, - 0x65, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x72, 0x79, 0x72, 0x65, 0x63, - 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x77, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x70, 0x78, 0x3b, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x74, 0x68, - 0x65, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, - 0x6f, 0x75, 0x72, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, 0x65, - 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x62, 0x65, 0x67, 0x61, 0x6e, - 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x20, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, - 0x6d, 0x61, 0x67, 0x6e, 0x69, 0x74, 0x75, 0x64, 0x65, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x61, - 0x72, 0x79, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x6f, 0x63, - 0x63, 0x75, 0x72, 0x72, 0x69, 0x6e, 0x67, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x3c, 0x2f, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x3e, 0x3c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x6b, 0x69, 0x6e, 0x64, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6f, 0x63, 0x69, 0x65, 0x74, 0x69, 0x65, - 0x73, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x73, 0x69, 0x64, 0x65, 0x20, 0x2d, 0x2d, - 0x26, 0x67, 0x74, 0x3b, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x77, 0x65, - 0x73, 0x74, 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x72, 0x61, - 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x75, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x28, 0x73, - 0x70, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x2f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, - 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x65, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x79, 0x62, 0x75, 0x72, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x61, 0x20, 0x73, - 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x74, 0x68, 0x65, 0x79, 0x20, 0x77, 0x65, - 0x72, 0x65, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x4e, 0x6f, - 0x72, 0x77, 0x65, 0x67, 0x69, 0x61, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x6e, 0x67, 0x70, - 0x61, 0x73, 0x73, 0x65, 0x6e, 0x67, 0x65, 0x72, 0x28, 0x6e, 0x65, 0x77, 0x20, - 0x44, 0x61, 0x74, 0x65, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, - 0x66, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x66, 0x74, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x65, 0x71, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x72, 0x65, 0x67, - 0x75, 0x6c, 0x61, 0x72, 0x6c, 0x79, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6c, 0x69, - 0x6e, 0x6b, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x70, 0x68, 0x65, 0x6e, 0x6f, 0x6d, - 0x65, 0x6e, 0x61, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x20, 0x6f, 0x66, 0x74, - 0x6f, 0x6f, 0x6c, 0x74, 0x69, 0x70, 0x22, 0x3e, 0x73, 0x75, 0x62, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, - 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x66, 0x41, 0x6d, 0x6f, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x73, 0x41, 0x69, 0x72, - 0x20, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, - 0x6f, 0x66, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x69, 0x6d, - 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x20, 0x69, 0x74, 0x70, 0x61, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x63, - 0x6f, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x65, 0x64, 0x61, 0x72, 0x65, 0x20, 0x73, - 0x74, 0x69, 0x6c, 0x6c, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x64, 0x75, 0x72, 0x65, - 0x67, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x61, 0x6e, - 0x20, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x6d, 0x6f, 0x6c, - 0x65, 0x63, 0x75, 0x6c, 0x65, 0x73, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x69, - 0x73, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x74, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x65, 0x64, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x68, - 0x6f, 0x6f, 0x64, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x64, 0x64, - 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x73, 0x69, 0x6e, 0x67, 0x61, - 0x70, 0x6f, 0x72, 0x65, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x66, - 0x66, 0x61, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x66, - 0x6c, 0x69, 0x63, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, - 0x0a, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x77, 0x65, 0x72, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x6d, - 0x6f, 0x72, 0x65, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x6d, 0x75, 0x73, 0x69, 0x63, 0x69, 0x61, 0x6e, 0x73, - 0x64, 0x65, 0x6c, 0x69, 0x63, 0x69, 0x6f, 0x75, 0x73, 0x70, 0x72, 0x69, 0x73, - 0x6f, 0x6e, 0x65, 0x72, 0x73, 0x61, 0x64, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x21, 0x5b, - 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x74, 0x61, - 0x63, 0x74, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x20, 0x62, 0x67, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x20, 0x6f, 0x66, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x69, - 0x6e, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x64, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x6f, 0x66, 0x66, 0x69, - 0x63, 0x69, 0x61, 0x6c, 0x73, 0x73, 0x65, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x6c, - 0x79, 0x2d, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x6c, 0x6f, 0x6e, 0x67, 0x2d, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x66, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x63, 0x68, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, 0x62, 0x79, 0x3c, 0x2f, 0x62, 0x75, 0x74, - 0x74, 0x6f, 0x6e, 0x3e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x62, 0x75, 0x74, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x69, 0x6e, 0x63, 0x72, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x64, 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, 0x21, 0x2d, - 0x2d, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x57, 0x69, - 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, - 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x77, - 0x61, 0x73, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x56, 0x65, 0x6e, 0x65, 0x7a, - 0x75, 0x65, 0x6c, 0x61, 0x28, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x6c, 0x79, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, - 0x63, 0x66, 0x61, 0x76, 0x6f, 0x75, 0x72, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x76, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x6b, 0x69, 0x70, 0x65, 0x64, - 0x69, 0x61, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x76, 0x69, - 0x72, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, - 0x77, 0x61, 0x73, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x73, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x61, 0x77, 0x61, 0x79, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x6d, 0x6f, 0x6c, 0x65, 0x63, 0x75, 0x6c, 0x61, - 0x72, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x65, 0x6c, 0x79, 0x64, 0x69, 0x73, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x55, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x3e, 0x26, - 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x68, 0x61, 0x76, 0x65, 0x6f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x73, 0x6d, 0x73, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, - 0x46, 0x72, 0x69, 0x65, 0x64, 0x72, 0x69, 0x63, 0x68, 0x77, 0x61, 0x73, 0x20, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x66, 0x61, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x69, - 0x6e, 0x67, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x70, 0x68, - 0x79, 0x73, 0x69, 0x63, 0x69, 0x73, 0x74, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, - 0x20, 0x69, 0x6e, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x73, 0x70, 0x61, 0x6e, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x73, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x20, 0x74, 0x6f, - 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x72, 0x76, - 0x69, 0x76, 0x69, 0x6e, 0x67, 0x7d, 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3e, 0x68, 0x69, 0x73, 0x20, 0x64, 0x65, 0x61, 0x74, 0x68, 0x61, 0x73, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x65, 0x78, - 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x65, 0x77, 0x61, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x61, - 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x73, 0x20, 0x6f, 0x66, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x4f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x64, 0x69, 0x73, 0x6d, - 0x69, 0x73, 0x73, 0x65, 0x64, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, 0x73, - 0x74, 0x72, 0x65, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x73, 0x64, 0x75, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x73, 0x69, - 0x76, 0x65, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x61, 0x6c, - 0x6c, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x67, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x7b, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x69, 0x6d, 0x67, 0x20, - 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x69, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x72, - 0x6e, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, - 0x6e, 0x67, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x6e, 0x65, - 0x65, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x74, 0x68, 0x65, 0x20, 0x47, 0x72, - 0x65, 0x61, 0x74, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x65, 0x65, 0x6d, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x76, 0x69, 0x65, 0x77, 0x65, - 0x64, 0x20, 0x61, 0x73, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, 0x6f, 0x6e, - 0x69, 0x64, 0x65, 0x61, 0x20, 0x74, 0x68, 0x61, 0x74, 0x74, 0x68, 0x65, 0x20, - 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6f, - 0x66, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x68, 0x65, - 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x22, 0x3e, 0x63, 0x61, 0x72, 0x65, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x6d, 0x61, - 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x20, 0x6f, 0x66, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x70, 0x72, 0x65, 0x64, 0x69, - 0x63, 0x74, 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x63, - 0x65, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x74, - 0x65, 0x6e, 0x20, 0x20, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x0d, 0x0a, 0x70, 0x72, - 0x6f, 0x62, 0x61, 0x62, 0x6c, 0x79, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x65, 0x73, - 0x73, 0x6f, 0x72, 0x2d, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x73, 0x61, 0x79, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x68, 0x61, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x48, 0x75, 0x6e, 0x67, - 0x61, 0x72, 0x69, 0x61, 0x6e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x6f, - 0x66, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x20, 0x61, 0x73, 0x55, 0x6e, 0x69, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x66, 0x6f, - 0x72, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x69, 0x6e, 0x66, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x67, 0x72, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x68, - 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, - 0x61, 0x72, 0x22, 0x3e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x6f, 0x6e, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x61, 0x6c, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6f, - 0x66, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x74, 0x6f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, - 0x63, 0x74, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x69, 0x61, 0x6e, 0x70, 0x72, - 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x6c, 0x69, 0x76, 0x69, 0x6e, 0x67, - 0x20, 0x69, 0x6e, 0x65, 0x61, 0x73, 0x69, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x70, - 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x0a, 0x26, 0x6c, 0x74, 0x3b, - 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x66, - 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x77, 0x61, 0x73, 0x20, - 0x74, 0x61, 0x6b, 0x65, 0x6e, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x74, 0x6f, 0x6f, 0x6b, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x62, 0x65, 0x6c, - 0x69, 0x65, 0x66, 0x20, 0x69, 0x6e, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x61, - 0x6e, 0x73, 0x61, 0x73, 0x20, 0x66, 0x61, 0x72, 0x20, 0x61, 0x73, 0x70, 0x72, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x3c, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x65, 0x74, 0x43, 0x68, 0x72, 0x69, 0x73, - 0x74, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x64, - 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, - 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x61, 0x73, - 0x74, 0x6d, 0x61, 0x67, 0x61, 0x7a, 0x69, 0x6e, 0x65, 0x73, 0x3e, 0x3c, 0x73, - 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x65, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x20, 0x6f, 0x66, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x61, - 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x69, 0x74, 0x73, 0x20, 0x66, - 0x69, 0x72, 0x73, 0x74, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x6f, 0x77, 0x6e, - 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x61, 0x6e, 0x20, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x72, 0x69, 0x62, 0x62, 0x65, 0x61, - 0x6e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x64, 0x69, 0x73, - 0x74, 0x72, 0x69, 0x63, 0x74, 0x73, 0x77, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x73, - 0x69, 0x6e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3b, 0x20, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x69, 0x6e, 0x68, 0x61, 0x62, 0x69, - 0x74, 0x65, 0x64, 0x53, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x69, 0x73, 0x74, 0x4a, - 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x20, 0x31, 0x3c, 0x2f, 0x66, 0x6f, 0x6f, - 0x74, 0x65, 0x72, 0x3e, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x6c, 0x79, - 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, - 0x73, 0x61, 0x6d, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x20, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x54, 0x68, 0x65, - 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x3b, 0x20, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x20, 0x74, 0x6f, 0x64, 0x65, - 0x61, 0x6c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x63, - 0x6f, 0x6e, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x2e, 0x70, 0x68, 0x70, 0x61, 0x73, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, - 0x65, 0x6e, 0x67, 0x61, 0x67, 0x65, 0x20, 0x69, 0x6e, 0x72, 0x65, 0x63, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x2c, 0x66, 0x65, 0x77, 0x20, 0x79, 0x65, 0x61, 0x72, - 0x73, 0x77, 0x65, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x0a, 0x3c, 0x68, - 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x61, 0x72, 0x65, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x63, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x6b, 0x65, 0x79, 0x63, 0x6f, 0x6e, 0x64, 0x65, 0x6d, 0x6e, 0x65, 0x64, 0x61, - 0x6c, 0x73, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2c, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x6f, 0x66, - 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x74, 0x65, 0x64, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x6d, 0x69, 0x6e, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x3e, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, - 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x61, 0x64, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x54, - 0x68, 0x65, 0x79, 0x20, 0x77, 0x65, 0x72, 0x65, 0x61, 0x6e, 0x79, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x75, 0x63, 0x68, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x77, 0x61, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x69, 0x63, - 0x61, 0x6c, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x79, 0x65, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x6e, 0x6f, 0x74, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x73, 0x77, - 0x65, 0x64, 0x6e, 0x65, 0x73, 0x64, 0x61, 0x79, 0x74, 0x68, 0x65, 0x20, 0x74, - 0x68, 0x69, 0x72, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, - 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x20, 0x32, 0x77, 0x68, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x79, 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, - 0x6e, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x70, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x68, - 0x69, 0x73, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x64, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x22, 0x3e, 0x0a, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x63, 0x6f, 0x6d, 0x70, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x74, 0x65, 0x6e, 0x6e, 0x65, 0x73, 0x73, 0x65, - 0x65, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, 0x73, 0x20, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x20, 0x3c, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x3e, 0x67, 0x69, - 0x76, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x69, 0x61, 0x6e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x3e, 0x70, - 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x30, 0x76, 0x69, 0x65, 0x77, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x2c, - 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, - 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f, - 0x66, 0x61, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x6e, 0x63, 0x68, 0x69, - 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x2c, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, - 0x6f, 0x66, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x65, - 0x64, 0x6c, 0x79, 0x43, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x61, 0x6e, 0x64, 0x77, - 0x61, 0x73, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x20, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x61, 0x72, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, - 0x77, 0x61, 0x73, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x73, 0x63, 0x72, 0x6f, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x6f, - 0x66, 0x6d, 0x61, 0x6b, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x75, 0x63, - 0x68, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, - 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x2c, 0x20, - 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x4d, 0x75, 0x73, 0x65, 0x75, 0x6d, - 0x20, 0x6f, 0x66, 0x6c, 0x6f, 0x75, 0x69, 0x73, 0x69, 0x61, 0x6e, 0x61, 0x28, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x69, 0x6e, 0x6e, 0x65, - 0x73, 0x6f, 0x74, 0x61, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x73, - 0x61, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x44, 0x6f, 0x6d, 0x69, - 0x6e, 0x69, 0x63, 0x61, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x20, 0x6f, - 0x66, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x66, - 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x30, 0x30, 0x70, 0x78, 0x7c, 0x72, 0x69, - 0x67, 0x68, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x6d, 0x6f, - 0x75, 0x73, 0x65, 0x6f, 0x76, 0x65, 0x72, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x28, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x75, 0x65, 0x73, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x69, 0x73, 0x63, 0x6f, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x6f, 0x75, 0x74, 0x20, 0x61, 0x77, 0x69, 0x74, 0x68, 0x20, 0x73, 0x6f, 0x6d, - 0x65, 0x77, 0x68, 0x6f, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x61, 0x20, 0x66, - 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, - 0x6f, 0x66, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x74, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x6d, 0x65, 0x61, 0x73, 0x75, - 0x72, 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, - 0x70, 0x61, 0x70, 0x65, 0x72, 0x62, 0x61, 0x63, 0x6b, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x3e, 0x3d, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x26, 0x71, 0x75, 0x6f, 0x74, - 0x3b, 0x20, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x20, 0x62, 0x79, 0x61, 0x6e, - 0x64, 0x20, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x3c, 0x2f, 0x63, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x3e, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x70, 0x6f, 0x77, 0x65, 0x72, - 0x20, 0x61, 0x6e, 0x64, 0x6f, 0x66, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, - 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x54, 0x4d, 0x4c, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, - 0x3b, 0x43, 0x68, 0x75, 0x72, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, - 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x76, 0x65, 0x72, 0x79, 0x20, 0x68, 0x69, - 0x67, 0x68, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x2d, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x3d, 0x22, 0x2f, 0x63, 0x67, 0x69, 0x2d, 0x62, 0x69, 0x6e, 0x2f, 0x74, - 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x61, 0x66, 0x72, 0x69, 0x6b, - 0x61, 0x61, 0x6e, 0x73, 0x65, 0x73, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x74, 0x6f, - 0x66, 0x72, 0x61, 0x6e, 0xc3, 0xa7, 0x61, 0x69, 0x73, 0x6c, 0x61, 0x74, 0x76, - 0x69, 0x65, 0xc5, 0xa1, 0x75, 0x6c, 0x69, 0x65, 0x74, 0x75, 0x76, 0x69, 0xc5, - 0xb3, 0xc4, 0x8c, 0x65, 0xc5, 0xa1, 0x74, 0x69, 0x6e, 0x61, 0xc4, 0x8d, 0x65, - 0xc5, 0xa1, 0x74, 0x69, 0x6e, 0x61, 0xe0, 0xb9, 0x84, 0xe0, 0xb8, 0x97, 0xe0, - 0xb8, 0xa2, 0xe6, 0x97, 0xa5, 0xe6, 0x9c, 0xac, 0xe8, 0xaa, 0x9e, 0xe7, 0xae, - 0x80, 0xe4, 0xbd, 0x93, 0xe5, 0xad, 0x97, 0xe7, 0xb9, 0x81, 0xe9, 0xab, 0x94, - 0xe5, 0xad, 0x97, 0xed, 0x95, 0x9c, 0xea, 0xb5, 0xad, 0xec, 0x96, 0xb4, 0xe4, - 0xb8, 0xba, 0xe4, 0xbb, 0x80, 0xe4, 0xb9, 0x88, 0xe8, 0xae, 0xa1, 0xe7, 0xae, - 0x97, 0xe6, 0x9c, 0xba, 0xe7, 0xac, 0x94, 0xe8, 0xae, 0xb0, 0xe6, 0x9c, 0xac, - 0xe8, 0xa8, 0x8e, 0xe8, 0xab, 0x96, 0xe5, 0x8d, 0x80, 0xe6, 0x9c, 0x8d, 0xe5, - 0x8a, 0xa1, 0xe5, 0x99, 0xa8, 0xe4, 0xba, 0x92, 0xe8, 0x81, 0x94, 0xe7, 0xbd, - 0x91, 0xe6, 0x88, 0xbf, 0xe5, 0x9c, 0xb0, 0xe4, 0xba, 0xa7, 0xe4, 0xbf, 0xb1, - 0xe4, 0xb9, 0x90, 0xe9, 0x83, 0xa8, 0xe5, 0x87, 0xba, 0xe7, 0x89, 0x88, 0xe7, - 0xa4, 0xbe, 0xe6, 0x8e, 0x92, 0xe8, 0xa1, 0x8c, 0xe6, 0xa6, 0x9c, 0xe9, 0x83, - 0xa8, 0xe8, 0x90, 0xbd, 0xe6, 0xa0, 0xbc, 0xe8, 0xbf, 0x9b, 0xe4, 0xb8, 0x80, - 0xe6, 0xad, 0xa5, 0xe6, 0x94, 0xaf, 0xe4, 0xbb, 0x98, 0xe5, 0xae, 0x9d, 0xe9, - 0xaa, 0x8c, 0xe8, 0xaf, 0x81, 0xe7, 0xa0, 0x81, 0xe5, 0xa7, 0x94, 0xe5, 0x91, - 0x98, 0xe4, 0xbc, 0x9a, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe5, 0xba, 0x93, - 0xe6, 0xb6, 0x88, 0xe8, 0xb4, 0xb9, 0xe8, 0x80, 0x85, 0xe5, 0x8a, 0x9e, 0xe5, - 0x85, 0xac, 0xe5, 0xae, 0xa4, 0xe8, 0xae, 0xa8, 0xe8, 0xae, 0xba, 0xe5, 0x8c, - 0xba, 0xe6, 0xb7, 0xb1, 0xe5, 0x9c, 0xb3, 0xe5, 0xb8, 0x82, 0xe6, 0x92, 0xad, - 0xe6, 0x94, 0xbe, 0xe5, 0x99, 0xa8, 0xe5, 0x8c, 0x97, 0xe4, 0xba, 0xac, 0xe5, - 0xb8, 0x82, 0xe5, 0xa4, 0xa7, 0xe5, 0xad, 0xa6, 0xe7, 0x94, 0x9f, 0xe8, 0xb6, - 0x8a, 0xe6, 0x9d, 0xa5, 0xe8, 0xb6, 0x8a, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, - 0xe5, 0x91, 0x98, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0xe7, 0xbd, 0x91, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x69, 0x6f, 0x73, 0x61, 0x72, 0x74, 0xc3, 0xad, - 0x63, 0x75, 0x6c, 0x6f, 0x61, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x61, - 0x62, 0x61, 0x72, 0x63, 0x65, 0x6c, 0x6f, 0x6e, 0x61, 0x63, 0x75, 0x61, 0x6c, - 0x71, 0x75, 0x69, 0x65, 0x72, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x64, - 0x6f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6f, 0x73, 0x70, 0x6f, 0x6c, - 0xc3, 0xad, 0x74, 0x69, 0x63, 0x61, 0x72, 0x65, 0x73, 0x70, 0x75, 0x65, 0x73, - 0x74, 0x61, 0x77, 0x69, 0x6b, 0x69, 0x70, 0x65, 0x64, 0x69, 0x61, 0x73, 0x69, - 0x67, 0x75, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x62, 0xc3, 0xba, 0x73, 0x71, 0x75, - 0x65, 0x64, 0x61, 0x63, 0x6f, 0x6d, 0x75, 0x6e, 0x69, 0x64, 0x61, 0x64, 0x73, - 0x65, 0x67, 0x75, 0x72, 0x69, 0x64, 0x61, 0x64, 0x70, 0x72, 0x69, 0x6e, 0x63, - 0x69, 0x70, 0x61, 0x6c, 0x70, 0x72, 0x65, 0x67, 0x75, 0x6e, 0x74, 0x61, 0x73, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x69, 0x64, 0x6f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x76, 0x65, 0x6e, 0x65, 0x7a, 0x75, 0x65, 0x6c, - 0x61, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x61, 0x73, 0x64, 0x69, 0x63, - 0x69, 0x65, 0x6d, 0x62, 0x72, 0x65, 0x72, 0x65, 0x6c, 0x61, 0x63, 0x69, 0xc3, - 0xb3, 0x6e, 0x6e, 0x6f, 0x76, 0x69, 0x65, 0x6d, 0x62, 0x72, 0x65, 0x73, 0x69, - 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x79, 0x65, 0x63, - 0x74, 0x6f, 0x73, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x61, 0x73, 0x69, - 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x6f, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x64, 0x61, 0x64, 0x65, 0x6e, 0x63, 0x75, 0x65, 0x6e, 0x74, 0x72, 0x61, - 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0xc3, 0xad, 0x61, 0x69, 0x6d, 0xc3, 0xa1, - 0x67, 0x65, 0x6e, 0x65, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x61, - 0x72, 0x64, 0x65, 0x73, 0x63, 0x61, 0x72, 0x67, 0x61, 0x72, 0x6e, 0x65, 0x63, - 0x65, 0x73, 0x61, 0x72, 0x69, 0x6f, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x69, 0xc3, - 0xb3, 0x6e, 0x74, 0x65, 0x6c, 0xc3, 0xa9, 0x66, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, - 0x6d, 0x69, 0x73, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x61, 0x6e, 0x63, 0x69, 0x6f, - 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x64, 0x61, 0x64, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x72, 0x61, 0x6e, 0xc3, 0xa1, 0x6c, - 0x69, 0x73, 0x69, 0x73, 0x66, 0x61, 0x76, 0x6f, 0x72, 0x69, 0x74, 0x6f, 0x73, - 0x74, 0xc3, 0xa9, 0x72, 0x6d, 0x69, 0x6e, 0x6f, 0x73, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x6e, 0x63, 0x69, 0x61, 0x65, 0x74, 0x69, 0x71, 0x75, 0x65, 0x74, 0x61, - 0x73, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x73, 0x66, 0x75, 0x6e, - 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x61, - 0x64, 0x6f, 0x63, 0x61, 0x72, 0xc3, 0xa1, 0x63, 0x74, 0x65, 0x72, 0x70, 0x72, - 0x6f, 0x70, 0x69, 0x65, 0x64, 0x61, 0x64, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, - 0x70, 0x69, 0x6f, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x69, 0x64, 0x61, 0x64, 0x6d, - 0x75, 0x6e, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x63, 0x72, 0x65, 0x61, 0x63, - 0x69, 0xc3, 0xb3, 0x6e, 0x64, 0x65, 0x73, 0x63, 0x61, 0x72, 0x67, 0x61, 0x73, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x63, 0x6f, 0x6d, 0x65, - 0x72, 0x63, 0x69, 0x61, 0x6c, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x6f, 0x6e, 0x65, - 0x73, 0x65, 0x6a, 0x65, 0x72, 0x63, 0x69, 0x63, 0x69, 0x6f, 0x65, 0x64, 0x69, - 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x61, 0x6c, 0x61, 0x6d, 0x61, 0x6e, - 0x63, 0x61, 0x67, 0x6f, 0x6e, 0x7a, 0xc3, 0xa1, 0x6c, 0x65, 0x7a, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x70, 0x65, 0x6c, 0xc3, 0xad, 0x63, - 0x75, 0x6c, 0x61, 0x72, 0x65, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x73, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x65, 0x73, 0x74, 0x61, 0x72, 0x72, 0x61, - 0x67, 0x6f, 0x6e, 0x61, 0x70, 0x72, 0xc3, 0xa1, 0x63, 0x74, 0x69, 0x63, 0x61, - 0x6e, 0x6f, 0x76, 0x65, 0x64, 0x61, 0x64, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x70, - 0x75, 0x65, 0x73, 0x74, 0x61, 0x70, 0x61, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x65, - 0x73, 0x74, 0xc3, 0xa9, 0x63, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x6f, 0x62, 0x6a, - 0x65, 0x74, 0x69, 0x76, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, - 0x6f, 0x73, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x88, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, - 0xb5, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0x95, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0x9b, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xad, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x88, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0x64, 0x69, 0x70, 0x6c, 0x6f, - 0x64, 0x6f, 0x63, 0x73, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xaf, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xab, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x94, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0x96, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb5, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xae, - 0xe0, 0xa5, 0x8c, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, - 0x9c, 0xe0, 0xa5, 0x89, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x97, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xad, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0x97, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0x97, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xae, 0xe0, - 0xa4, 0x96, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xad, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa4, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0x9f, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x85, - 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x90, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x8a, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0x9a, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x90, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xa6, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, - 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x96, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xac, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0x86, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb2, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x89, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xad, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x97, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0x95, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa0, 0xe0, 0xa5, - 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x81, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xa4, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0x86, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x95, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8c, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0x96, 0xe0, 0xa5, - 0x81, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x97, 0xe0, 0xa5, 0x80, - 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x3e, 0x0d, 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x20, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x61, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x26, 0x63, 0x6f, 0x70, 0x79, 0x3b, 0x20, 0x32, 0x30, 0x31, - 0x6a, 0x61, 0x76, 0x61, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x63, 0x68, 0x61, - 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x62, 0x72, 0x65, 0x61, 0x64, 0x63, - 0x72, 0x75, 0x6d, 0x62, 0x74, 0x68, 0x65, 0x6d, 0x73, 0x65, 0x6c, 0x76, 0x65, - 0x73, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x6c, 0x69, 0x66, - 0x6f, 0x72, 0x6e, 0x69, 0x61, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x4e, - 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x3c, 0x6d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x62, - 0x6f, 0x78, 0x22, 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x73, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x70, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x61, 0x73, 0x20, 0x77, 0x65, - 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x75, 0x6e, 0x74, 0x27, 0x2c, 0x20, 0x27, 0x55, - 0x41, 0x2d, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, - 0x74, 0x65, 0x64, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, - 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x20, 0x3d, 0x20, - 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x69, 0x6d, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x26, 0x6c, 0x74, 0x3b, 0x62, 0x72, 0x26, 0x67, 0x74, - 0x3b, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x70, 0x6f, - 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x67, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x3d, 0x22, 0x23, 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, - 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x65, 0x77, 0x73, - 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x54, 0x65, 0x63, - 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x72, 0x6c, 0x69, 0x61, - 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, - 0x6e, 0x75, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x2e, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x22, 0x63, 0x6f, 0x6e, 0x63, 0x6c, - 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x62, - 0x69, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x76, 0x6f, - 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x6f, 0x6f, 0x64, - 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x61, 0x74, 0x6d, 0x6f, 0x73, 0x70, 0x68, 0x65, 0x72, - 0x65, 0x20, 0x6f, 0x6e, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x3d, 0x22, 0x3c, 0x66, - 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x75, 0x62, 0x73, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x72, 0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x68, 0x65, - 0x6e, 0x6f, 0x6d, 0x65, 0x6e, 0x6f, 0x6e, 0x64, 0x69, 0x73, 0x63, 0x69, 0x70, - 0x6c, 0x69, 0x6e, 0x65, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x6e, 0x67, 0x22, - 0x20, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x61, 0x72, 0x69, 0x65, 0x73, 0x65, 0x78, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x6f, - 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x6e, 0x74, 0x65, - 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x28, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x22, 0x20, 0x75, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x28, 0x22, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x20, 0x64, 0x65, 0x6d, - 0x6f, 0x63, 0x72, 0x61, 0x74, 0x69, 0x63, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x22, 0x3e, - 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x6c, 0x69, - 0x6e, 0x67, 0x75, 0x69, 0x73, 0x74, 0x69, 0x63, 0x70, 0x78, 0x3b, 0x70, 0x61, - 0x64, 0x64, 0x69, 0x6e, 0x67, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, - 0x68, 0x79, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x75, - 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x66, 0x61, 0x63, 0x69, - 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, - 0x7a, 0x65, 0x64, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x6d, 0x61, 0x69, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x76, 0x6f, 0x63, 0x61, 0x62, 0x75, - 0x6c, 0x61, 0x72, 0x79, 0x68, 0x79, 0x70, 0x6f, 0x74, 0x68, 0x65, 0x73, 0x69, - 0x73, 0x2e, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x28, 0x29, 0x3b, 0x26, 0x61, - 0x6d, 0x70, 0x3b, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x22, 0x61, 0x73, 0x73, 0x75, - 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x65, 0x64, 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, 0x73, 0x74, 0x73, 0x65, 0x78, 0x70, - 0x6c, 0x69, 0x63, 0x69, 0x74, 0x6c, 0x79, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, - 0x64, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x3d, 0x22, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x64, 0x65, 0x70, 0x61, 0x72, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x6f, 0x6f, 0x6e, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x69, - 0x6e, 0x76, 0x65, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x70, 0x72, 0x6f, 0x6e, - 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x67, 0x65, 0x6f, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x3d, 0x22, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, - 0x22, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x2f, 0x64, 0x65, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x70, 0x75, 0x6e, 0x69, 0x73, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x72, - 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x61, 0x64, 0x61, 0x70, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x77, 0x65, 0x6c, 0x6c, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x73, 0x75, 0x70, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x68, 0x31, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x30, 0x70, 0x78, 0x3b, 0x6d, 0x61, 0x72, 0x67, 0x69, - 0x6e, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x63, 0x65, 0x6c, 0x65, 0x62, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x0a, 0x0a, 0x44, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x64, - 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x72, 0x73, 0x61, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, - 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x77, 0x65, 0x72, - 0x65, 0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x65, - 0x79, 0x6f, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x69, - 0x73, 0x74, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x61, - 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6c, 0x61, 0x6e, 0x67, - 0x3d, 0x22, 0x65, 0x6e, 0x22, 0x20, 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3e, 0x0d, 0x0a, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x3b, 0x20, - 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x65, 0x78, 0x74, - 0x72, 0x65, 0x6d, 0x65, 0x6c, 0x79, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x3c, 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, - 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x65, 0x6d, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x3e, 0x0d, 0x0a, 0x20, 0x63, 0x6f, 0x6c, 0x73, 0x70, 0x61, 0x6e, - 0x3d, 0x22, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0a, 0x20, 0x20, 0x63, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6f, 0x75, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x6e, 0x50, 0x6f, 0x72, - 0x74, 0x75, 0x67, 0x75, 0x65, 0x73, 0x65, 0x73, 0x75, 0x62, 0x73, 0x74, 0x69, - 0x74, 0x75, 0x74, 0x65, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, - 0x6c, 0x69, 0x6d, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x61, 0x6c, 0x6d, 0x6f, 0x73, - 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, 0x69, 0x64, - 0x20, 0x23, 0x61, 0x70, 0x61, 0x72, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x20, 0x45, - 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x69, - 0x7a, 0x65, 0x64, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x66, 0x6f, 0x72, - 0x67, 0x75, 0x69, 0x64, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x68, 0x32, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x61, - 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x28, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x69, 0x6e, 0x67, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x70, 0x72, 0x6f, 0x68, 0x69, 0x62, 0x69, 0x74, 0x65, 0x64, 0x3d, - 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x64, 0x69, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x70, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x78, 0x3b, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x66, 0x75, 0x6c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, - 0x73, 0x6d, 0x69, 0x6c, 0x6c, 0x65, 0x6e, 0x6e, 0x69, 0x75, 0x6d, 0x68, 0x69, - 0x73, 0x20, 0x66, 0x61, 0x74, 0x68, 0x65, 0x72, 0x74, 0x68, 0x65, 0x20, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6e, 0x6f, 0x2d, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x69, - 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x65, 0x6e, 0x63, 0x6f, - 0x75, 0x72, 0x61, 0x67, 0x65, 0x64, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x75, 0x6e, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, - 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, - 0x72, 0x65, 0x78, 0x70, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x63, 0x61, 0x6c, 0x63, 0x75, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x6c, 0x65, 0x67, 0x69, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x73, - 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x30, 0x22, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x6c, 0x79, 0x69, 0x6c, 0x6c, 0x75, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, - 0x66, 0x69, 0x76, 0x65, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x69, 0x6e, 0x67, 0x31, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x70, 0x73, 0x79, 0x63, 0x68, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x62, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x20, - 0x6f, 0x66, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x6a, - 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, - 0x73, 0x6c, 0x79, 0x3e, 0x3c, 0x2f, 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x3e, - 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x62, 0x75, 0x74, - 0x20, 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x69, 0x6d, 0x6d, 0x69, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x73, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, - 0x2c, 0x61, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x6f, 0x66, 0x4c, 0x69, - 0x74, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x55, 0x6e, 0x6c, 0x69, 0x6b, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x26, 0x6e, 0x62, 0x73, - 0x70, 0x3b, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, - 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x6f, 0x62, - 0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x61, 0x6e, 0x74, - 0x61, 0x67, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x69, 0x6d, 0x69, 0x6c, 0x61, - 0x72, 0x6c, 0x79, 0x2c, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, - 0x3e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, - 0x6f, 0x66, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x65, 0x65, 0x72, 0x73, 0x61, - 0x74, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x6e, 0x65, 0x64, 0x2a, 0x3c, 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, - 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x69, 0x6e, 0x20, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, - 0x74, 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0a, 0x3c, - 0x2f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x27, 0x69, 0x20, - 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x65, 0x76, 0x6f, 0x74, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x74, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x66, 0x6f, 0x72, 0x75, 0x6c, 0x74, 0x69, - 0x6d, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x73, 0x6f, 0x2d, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x7d, 0x0a, 0x3c, - 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x6d, 0x70, 0x68, 0x61, 0x73, 0x69, 0x7a, 0x65, - 0x64, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x3c, 0x2f, - 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x4d, 0x65, 0x61, 0x6e, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x2c, 0x69, - 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x61, 0x3e, - 0x3c, 0x62, 0x72, 0x20, 0x2f, 0x3e, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x63, - 0x6f, 0x6d, 0x65, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x54, 0x65, 0x6c, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x66, - 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x62, 0x61, 0x73, 0x6b, 0x65, 0x74, - 0x62, 0x61, 0x6c, 0x6c, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x73, 0x69, 0x64, 0x65, - 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x69, 0x6e, 0x67, 0x61, 0x6e, - 0x20, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x3c, 0x69, 0x6d, 0x67, 0x20, - 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x61, 0x64, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x6d, - 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, - 0x63, 0x69, 0x70, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, - 0x6c, 0x61, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x79, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x64, 0x65, 0x63, - 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x22, 0x3e, 0x3c, 0x73, 0x74, 0x72, - 0x6f, 0x6e, 0x67, 0x3e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, - 0x73, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x64, 0x69, - 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x66, 0x61, 0x63, 0x69, 0x6c, - 0x69, 0x74, 0x61, 0x74, 0x65, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x09, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x6e, 0x6f, - 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x69, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x62, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x65, 0x73, 0x44, 0x69, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x72, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x64, 0x70, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x20, 0x4a, 0x61, - 0x6e, 0x75, 0x61, 0x72, 0x79, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x69, 0x73, 0x69, - 0x6e, 0x67, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x09, 0x64, - 0x69, 0x70, 0x6c, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, - 0x69, 0x6e, 0x67, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x63, 0x6f, 0x6e, - 0x63, 0x65, 0x70, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x6e, 0x63, 0x6c, 0x69, - 0x63, 0x6b, 0x3d, 0x22, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x73, - 0x6f, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x6d, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x4c, 0x75, 0x78, 0x65, 0x6d, - 0x62, 0x6f, 0x75, 0x72, 0x67, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x61, 0x72, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x65, - 0x6e, 0x67, 0x61, 0x67, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x22, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x22, 0x29, 0x3b, 0x62, 0x75, 0x74, 0x20, 0x69, 0x74, 0x20, - 0x77, 0x61, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x3d, 0x22, 0x0a, 0x3c, 0x21, - 0x2d, 0x2d, 0x20, 0x45, 0x6e, 0x64, 0x20, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, - 0x69, 0x63, 0x61, 0x6c, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x6c, - 0x79, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x6f, - 0x70, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x75, 0x6e, 0x6c, 0x69, 0x6b, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, - 0x61, 0x6e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x0a, 0x3c, 0x2f, 0x68, - 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, - 0x73, 0x65, 0x64, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x41, 0x6c, 0x65, - 0x78, 0x61, 0x6e, 0x64, 0x72, 0x69, 0x61, 0x72, 0x65, 0x74, 0x69, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x66, 0x6f, 0x75, 0x72, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x0a, 0x0a, - 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x2d, 0x2d, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, - 0x61, 0x73, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x68, 0x33, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6f, - 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x6f, 0x62, 0x6c, 0x69, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x64, 0x76, - 0x61, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x73, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6e, - 0x73, 0x3c, 0x62, 0x61, 0x73, 0x65, 0x20, 0x68, 0x72, 0x65, 0x66, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x6c, 0x79, 0x77, 0x69, 0x6c, 0x6c, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x6e, - 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x76, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x64, 0x72, 0x65, 0x66, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x74, 0x61, 0x6b, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x61, 0x75, - 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x63, 0x6f, 0x6d, 0x70, 0x72, - 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, - 0x6c, 0x20, 0x72, 0x65, 0x73, 0x74, 0x61, 0x75, 0x72, 0x61, 0x6e, 0x74, 0x74, - 0x77, 0x6f, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x46, 0x65, 0x62, 0x72, - 0x75, 0x61, 0x72, 0x79, 0x20, 0x32, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, - 0x20, 0x6f, 0x66, 0x73, 0x77, 0x66, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x6e, 0x65, 0x61, - 0x72, 0x6c, 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, - 0x6e, 0x20, 0x62, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, - 0x73, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x77, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x69, 0x73, 0x20, 0x75, 0x73, 0x75, 0x61, 0x6c, - 0x6c, 0x79, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x73, 0x6e, - 0x65, 0x77, 0x73, 0x70, 0x61, 0x70, 0x65, 0x72, 0x73, 0x6d, 0x79, 0x73, 0x74, - 0x65, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x62, 0x65, 0x73, 0x74, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x70, 0x61, 0x72, 0x6c, 0x69, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x75, 0x70, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, - 0x69, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x65, - 0x64, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x68, 0x61, 0x73, 0x20, 0x6c, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x6e, - 0x64, 0x61, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x69, - 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x63, 0x65, 0x72, 0x65, - 0x6d, 0x6f, 0x6e, 0x69, 0x61, 0x6c, 0x70, 0x72, 0x6f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x6c, 0x69, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x53, 0x63, 0x69, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x6e, 0x6f, 0x2d, 0x74, 0x72, 0x61, 0x64, 0x65, 0x6d, 0x61, 0x72, 0x6b, - 0x73, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x77, 0x69, - 0x64, 0x65, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x62, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x6f, 0x6f, 0x6b, 0x20, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x64, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, - 0x73, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x61, 0x73, 0x69, 0x6d, 0x70, 0x72, - 0x69, 0x73, 0x6f, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, - 0x4c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x4e, 0x6f, 0x76, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x32, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x49, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x69, 0x61, - 0x6c, 0x76, 0x61, 0x72, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x3a, 0x20, 0x6c, 0x65, 0x66, 0x44, 0x75, 0x72, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, - 0x6e, 0x74, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x64, - 0x65, 0x61, 0x6c, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, - 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x2f, 0x75, 0x6c, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, 0x69, 0x78, 0x22, 0x3e, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x79, - 0x65, 0x61, 0x72, 0x73, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x65, 0x72, - 0x65, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x73, 0x79, - 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x22, 0x3e, 0x0a, 0x70, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, - 0x6c, 0x79, 0x68, 0x69, 0x73, 0x20, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x75, - 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x75, 0x6e, 0x65, 0x78, - 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x64, - 0x61, 0x20, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x75, 0x6e, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x22, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, - 0x73, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x69, 0x6e, 0x20, 0x4f, 0x63, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x73, 0x61, 0x69, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x72, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x6f, 0x75, - 0x73, 0x20, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x72, 0x6f, 0x77, 0x73, 0x70, 0x61, 0x6e, 0x3d, 0x22, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x61, 0x20, 0x66, 0x65, 0x77, 0x6d, 0x65, 0x61, 0x6e, 0x74, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x3c, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x65, 0x74, 0x3e, 0x41, 0x72, 0x63, 0x68, 0x62, 0x69, - 0x73, 0x68, 0x6f, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6e, - 0x6f, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, 0x64, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x61, 0x63, 0x68, 0x65, 0x73, 0x70, 0x72, 0x69, 0x76, 0x69, - 0x6c, 0x65, 0x67, 0x65, 0x73, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x0a, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x6d, - 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x74, 0x68, 0x65, 0x45, 0x61, 0x73, 0x74, - 0x65, 0x72, 0x20, 0x65, 0x67, 0x67, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, - 0x73, 0x6d, 0x73, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x22, 0x3e, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, - 0x0d, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x70, 0x68, 0x70, 0x61, 0x72, - 0x72, 0x69, 0x76, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x2d, 0x6a, 0x73, 0x73, 0x64, - 0x6b, 0x27, 0x29, 0x29, 0x3b, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x63, - 0x61, 0x73, 0x75, 0x61, 0x6c, 0x74, 0x69, 0x65, 0x73, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x69, - 0x61, 0x6e, 0x73, 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x61, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x70, 0x72, 0x6f, - 0x63, 0x65, 0x64, 0x75, 0x72, 0x65, 0x73, 0x6d, 0x69, 0x67, 0x68, 0x74, 0x20, - 0x68, 0x61, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x69, 0x74, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x50, 0x68, - 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, 0x68, 0x79, 0x66, 0x72, 0x69, 0x65, 0x6e, - 0x64, 0x73, 0x68, 0x69, 0x70, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x6f, 0x67, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x74, - 0x6f, 0x77, 0x61, 0x72, 0x64, 0x20, 0x74, 0x68, 0x65, 0x67, 0x75, 0x61, 0x72, - 0x61, 0x6e, 0x74, 0x65, 0x65, 0x64, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x65, 0x64, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, 0x30, 0x30, - 0x76, 0x69, 0x64, 0x65, 0x6f, 0x20, 0x67, 0x61, 0x6d, 0x65, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6e, 0x67, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x73, 0x61, - 0x6e, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x69, 0x66, 0x6f, 0x6e, 0x6b, 0x65, 0x79, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x3b, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, - 0x67, 0x3a, 0x48, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x75, - 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x74, 0x79, 0x70, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x72, 0x63, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x73, 0x69, 0x6e, - 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, - 0x20, 0x62, 0x65, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x73, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6c, 0x6f, 0x77, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x73, 0x68, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x0a, 0x09, 0x09, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x63, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x6f, 0x75, 0x73, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x61, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x6f, 0x6d, 0x65, 0x72, - 0x68, 0x65, 0x20, 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x64, 0x75, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x61, 0x6e, 0x20, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, - 0x65, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x61, 0x74, 0x74, 0x65, 0x6d, - 0x70, 0x74, 0x20, 0x74, 0x6f, 0x54, 0x68, 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72, - 0x65, 0x2c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x77, 0x61, 0x73, 0x20, - 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, - 0x6e, 0x69, 0x63, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, - 0x72, 0x6d, 0x65, 0x72, 0x69, 0x6e, 0x64, 0x69, 0x67, 0x65, 0x6e, 0x6f, 0x75, - 0x73, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x75, - 0x62, 0x73, 0x69, 0x64, 0x69, 0x61, 0x72, 0x79, 0x63, 0x6f, 0x6e, 0x73, 0x70, - 0x69, 0x72, 0x61, 0x63, 0x79, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, - 0x6f, 0x66, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x61, - 0x66, 0x66, 0x6f, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x75, 0x62, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, - 0x66, 0x6f, 0x72, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x69, 0x74, 0x65, 0x6d, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x62, 0x73, - 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x6c, 0x79, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x6c, 0x79, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, - 0x61, 0x61, 0x74, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x74, 0x72, - 0x61, 0x76, 0x65, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x65, 0x70, 0x61, 0x72, - 0x61, 0x74, 0x65, 0x6c, 0x79, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x65, 0x73, 0x20, - 0x6f, 0x6e, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x66, 0x6f, 0x75, 0x6e, - 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, - 0x65, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x75, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x73, 0x74, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, - 0x2d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x28, 0x73, 0x6f, 0x6d, 0x65, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, - 0x6c, 0x69, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x75, 0x6e, - 0x64, 0x65, 0x72, 0x74, 0x61, 0x6b, 0x65, 0x6e, 0x71, 0x75, 0x61, 0x72, 0x74, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x70, 0x68, 0x70, 0x3f, 0x3c, 0x2f, 0x62, 0x75, - 0x74, 0x74, 0x6f, 0x6e, 0x3e, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x61, 0x67, 0x65, 0x62, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x22, 0x20, 0x64, - 0x69, 0x72, 0x3d, 0x22, 0x6c, 0x74, 0x72, 0x4c, 0x69, 0x65, 0x75, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, - 0x22, 0x74, 0x68, 0x65, 0x79, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x6d, 0x61, 0x64, 0x65, 0x20, - 0x75, 0x70, 0x20, 0x6f, 0x66, 0x6e, 0x6f, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, - 0x72, 0x67, 0x75, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x74, 0x6f, 0x20, 0x61, - 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, - 0x6e, 0x27, 0x73, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x20, 0x6f, 0x66, - 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x62, 0x61, 0x73, - 0x65, 0x64, 0x20, 0x75, 0x70, 0x6f, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6f, - 0x66, 0x70, 0x61, 0x73, 0x73, 0x65, 0x6e, 0x67, 0x65, 0x72, 0x73, 0x70, 0x6f, - 0x73, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x61, 0x66, 0x74, 0x65, 0x72, 0x77, 0x61, 0x72, 0x64, 0x73, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x61, 0x63, 0x72, 0x6f, - 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2e, - 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x73, 0x6d, 0x69, 0x6e, 0x20, - 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2d, - 0x77, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x53, 0x6f, 0x63, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x70, 0x6f, - 0x6c, 0x69, 0x74, 0x69, 0x63, 0x69, 0x61, 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x77, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x20, - 0x4e, 0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x70, 0x61, 0x72, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, - 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, - 0x65, 0x6e, 0x20, 0x61, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x76, - 0x65, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x74, 0x65, 0x6e, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x65, 0x6e, 0x74, 0x65, - 0x72, 0x20, 0x66, 0x6f, 0x72, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x65, 0x6e, - 0x63, 0x65, 0x72, 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x65, 0x73, 0x62, 0x75, 0x74, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74, - 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x65, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x6c, 0x61, 0x62, - 0x6f, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, - 0x69, 0x62, 0x6c, 0x65, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x20, 0x6f, - 0x66, 0x2c, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x62, 0x65, - 0x67, 0x61, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x75, 0x73, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x66, - 0x72, 0x6f, 0x6d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x2f, 0x22, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x67, 0x69, - 0x63, 0x61, 0x6c, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x6f, 0x66, - 0x64, 0x65, 0x6c, 0x69, 0x62, 0x65, 0x72, 0x61, 0x74, 0x65, 0x69, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, - 0x20, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x74, 0x6f, 0x70, 0x74, 0x68, - 0x65, 0x20, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x69, - 0x64, 0x65, 0x20, 0x6f, 0x66, 0x6e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, - 0x65, 0x64, 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x72, 0x65, 0x65, 0x72, 0x73, - 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x64, 0x3d, 0x22, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x77, 0x61, 0x73, 0x20, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x72, 0x74, 0x68, - 0x72, 0x65, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x74, 0x68, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x65, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x61, 0x63, 0x63, 0x75, 0x72, - 0x61, 0x74, 0x65, 0x6c, 0x79, 0x77, 0x65, 0x72, 0x65, 0x20, 0x62, 0x75, 0x69, - 0x6c, 0x74, 0x77, 0x61, 0x73, 0x20, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x61, - 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6d, 0x75, 0x63, 0x68, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x44, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, - 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4b, 0x69, 0x6e, - 0x67, 0x64, 0x6f, 0x6d, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, - 0x74, 0x69, 0x72, 0x65, 0x66, 0x61, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x66, 0x6f, - 0x72, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x74, 0x68, 0x65, 0x20, 0x46, - 0x72, 0x65, 0x6e, 0x63, 0x68, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x61, - 0x6e, 0x64, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, 0x22, 0x3e, 0x69, - 0x73, 0x20, 0x73, 0x61, 0x69, 0x64, 0x20, 0x74, 0x6f, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x64, 0x75, 0x6d, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, - 0x61, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x0a, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x20, 0x4f, 0x66, 0x66, 0x69, 0x63, - 0x69, 0x61, 0x6c, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x77, 0x69, 0x64, 0x65, - 0x2e, 0x61, 0x72, 0x69, 0x61, 0x2d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x61, 0x6e, 0x64, 0x20, 0x69, - 0x74, 0x20, 0x77, 0x61, 0x73, 0x64, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3d, 0x22, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x74, 0x62, - 0x65, 0x6e, 0x65, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x61, 0x72, 0x65, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, - 0x69, 0x6e, 0x67, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x6c, 0x79, - 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x72, 0x6e, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x6e, 0x6f, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x3c, 0x2f, - 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x73, 0x6f, 0x75, 0x6e, 0x64, - 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x6f, - 0x72, 0x6d, 0x74, 0x65, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6f, 0x70, 0x65, 0x6e, - 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, - 0x74, 0x65, 0x64, 0x61, 0x64, 0x6f, 0x70, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x65, - 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x61, 0x6e, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x73, 0x20, 0x6f, 0x66, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x69, 0x61, 0x6e, 0x20, 0x76, 0x65, - 0x72, 0x79, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x61, 0x75, 0x74, 0x6f, 0x6d, - 0x6f, 0x74, 0x69, 0x76, 0x65, 0x62, 0x79, 0x20, 0x66, 0x61, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x70, - 0x75, 0x72, 0x73, 0x75, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x6c, 0x6c, - 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x62, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x74, - 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x61, 0x6e, 0x64, - 0x61, 0x67, 0x72, 0x65, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x63, 0x63, - 0x75, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6d, 0x65, 0x73, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6e, - 0x67, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x68, 0x69, - 0x73, 0x20, 0x6f, 0x72, 0x20, 0x68, 0x65, 0x72, 0x74, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x64, 0x6f, 0x75, 0x73, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x20, - 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x30, - 0x20, 0x31, 0x65, 0x6d, 0x20, 0x31, 0x65, 0x6d, 0x3b, 0x42, 0x61, 0x73, 0x6b, - 0x65, 0x74, 0x62, 0x61, 0x6c, 0x6c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, - 0x63, 0x73, 0x73, 0x61, 0x6e, 0x20, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, - 0x65, 0x76, 0x65, 0x6e, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x2f, 0x22, 0x20, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x70, 0x69, 0x74, 0x74, 0x73, 0x62, 0x75, 0x72, 0x67, 0x68, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0d, 0x3c, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x28, 0x66, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x6f, - 0x75, 0x74, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x3c, - 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x0d, 0x0a, 0x20, 0x6f, 0x63, 0x63, 0x61, - 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, - 0x20, 0x69, 0x74, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x3e, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, - 0x2c, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x74, 0x61, - 0x62, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x61, 0x73, - 0x74, 0x72, 0x6f, 0x75, 0x73, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, - 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x3e, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x3c, 0x2f, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3e, 0x0a, 0x3c, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, - 0x66, 0x6f, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, - 0x2e, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x22, 0x2f, 0x2f, 0x76, 0x69, 0x6f, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x6c, - 0x79, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x64, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, - 0x64, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x67, 0x75, 0xc3, 0xaa, 0x73, 0xd7, - 0xa2, 0xd7, 0x91, 0xd7, 0xa8, 0xd7, 0x99, 0xd7, 0xaa, 0xd9, 0x81, 0xd8, 0xa7, - 0xd8, 0xb1, 0xd8, 0xb3, 0xdb, 0x8c, 0x64, 0x65, 0x73, 0x61, 0x72, 0x72, 0x6f, - 0x6c, 0x6c, 0x6f, 0x63, 0x6f, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x69, 0x6f, - 0x65, 0x64, 0x75, 0x63, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x73, 0x65, 0x70, - 0x74, 0x69, 0x65, 0x6d, 0x62, 0x72, 0x65, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x64, 0x6f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x63, 0x69, 0xc3, 0xb3, - 0x6e, 0x75, 0x62, 0x69, 0x63, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x69, 0x64, 0x61, 0x64, 0x72, 0x65, 0x73, 0x70, 0x75, - 0x65, 0x73, 0x74, 0x61, 0x73, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x61, 0x64, - 0x6f, 0x73, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x64, 0x6f, 0x73, 0x61, 0x72, 0x74, 0xc3, - 0xad, 0x63, 0x75, 0x6c, 0x6f, 0x73, 0x64, 0x69, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x74, 0x65, 0x73, 0x73, 0x69, 0x67, 0x75, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x73, - 0x72, 0x65, 0x70, 0xc3, 0xba, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x69, 0x74, - 0x75, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x69, 0x6f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x69, 0x64, 0x61, - 0x64, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x6f, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, 0x6f, 0x62, 0x6c, 0x61, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x69, 0x64, 0x6f, 0x73, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x6f, 0x72, 0x69, 0x6f, 0x73, 0x74, 0x65, 0x63, 0x68, - 0x6e, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, - 0x6c, 0x65, 0x73, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0xc3, 0xad, 0x61, - 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x65, 0x73, 0x64, 0x69, 0x73, - 0x70, 0x6f, 0x6e, 0x69, 0x62, 0x6c, 0x65, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x64, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x69, - 0x61, 0x76, 0x61, 0x6c, 0x6c, 0x61, 0x64, 0x6f, 0x6c, 0x69, 0x64, 0x62, 0x69, - 0x62, 0x6c, 0x69, 0x6f, 0x74, 0x65, 0x63, 0x61, 0x72, 0x65, 0x6c, 0x61, 0x63, - 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, - 0x69, 0x6f, 0x70, 0x6f, 0x6c, 0xc3, 0xad, 0x74, 0x69, 0x63, 0x61, 0x73, 0x61, - 0x6e, 0x74, 0x65, 0x72, 0x69, 0x6f, 0x72, 0x65, 0x73, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x73, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, - 0x65, 0x7a, 0x61, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x65, 0x73, - 0x64, 0x69, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x65, 0x63, 0x6f, - 0x6e, 0xc3, 0xb3, 0x6d, 0x69, 0x63, 0x61, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, - 0x6f, 0x72, 0x74, 0x65, 0x72, 0x6f, 0x64, 0x72, 0xc3, 0xad, 0x67, 0x75, 0x65, - 0x7a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x63, 0x75, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x64, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x69, 0xc3, 0xb3, 0x6e, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, - 0x72, 0x61, 0x66, 0x75, 0x6e, 0x64, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x66, - 0x72, 0x65, 0x63, 0x75, 0x65, 0x6e, 0x74, 0x65, 0x73, 0x70, 0x65, 0x72, 0x6d, - 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x65, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x6d, 0x65, - 0x6e, 0x74, 0x65, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd0, 0xb1, 0xd1, 0x83, 0xd0, 0xb4, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xbc, 0xd0, - 0xbe, 0xd0, 0xb6, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb2, 0xd1, 0x80, 0xd0, 0xb5, - 0xd0, 0xbc, 0xd1, 0x8f, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xb6, 0xd0, - 0xb5, 0xd1, 0x87, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xb1, - 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0xbe, 0xd1, 0x87, 0xd0, - 0xb5, 0xd0, 0xbd, 0xd1, 0x8c, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb3, - 0xd0, 0xbe, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, - 0xbf, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb2, 0xd1, 0x81, - 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xb9, 0xd1, - 0x82, 0xd0, 0xb5, 0xd1, 0x87, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb7, - 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb3, 0xd1, 0x83, 0xd1, 0x82, 0xd1, 0x81, 0xd0, - 0xb0, 0xd0, 0xb9, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xb6, 0xd0, 0xb8, 0xd0, 0xb7, - 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xb6, 0xd0, 0xb4, 0xd1, - 0x83, 0xd0, 0xb1, 0xd1, 0x83, 0xd0, 0xb4, 0xd1, 0x83, 0xd1, 0x82, 0xd0, 0x9f, - 0xd0, 0xbe, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb7, 0xd0, 0xb4, 0xd0, - 0xb5, 0xd1, 0x81, 0xd1, 0x8c, 0xd0, 0xb2, 0xd0, 0xb8, 0xd0, 0xb4, 0xd0, 0xb5, - 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb2, 0xd1, 0x8f, 0xd0, 0xb7, 0xd0, 0xb8, 0xd0, - 0xbd, 0xd1, 0x83, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb2, - 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xb9, 0xd0, 0xbb, 0xd1, 0x8e, 0xd0, 0xb4, 0xd0, - 0xb5, 0xd0, 0xb9, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd0, 0xbc, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, - 0xb5, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xb9, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, - 0xd0, 0xb8, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, - 0xb0, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, 0xbc, - 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, - 0xb5, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb6, 0xd0, 0xb8, 0xd0, 0xb7, 0xd0, 0xbd, - 0xd1, 0x8c, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, - 0xbb, 0xd1, 0x83, 0xd1, 0x87, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xbf, 0xd0, 0xb5, - 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, - 0x82, 0xd0, 0xb8, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x8c, - 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, - 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb0, - 0xd0, 0xb2, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, 0xbe, 0xd0, - 0xb9, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbc, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb5, 0xd1, 0x87, 0xd0, 0xb8, 0xd1, - 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, - 0xd0, 0xb5, 0xd1, 0x83, 0xd1, 0x81, 0xd0, 0xbb, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, - 0xbe, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb0, - 0xd0, 0xb7, 0xd0, 0xb0, 0xd0, 0xb4, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, - 0xbe, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, 0xb0, - 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x87, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0x9f, 0xd0, - 0xbe, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, - 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, 0xd0, - 0xb9, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, 0x82, - 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xb8, 0xd1, 0x85, 0xd1, 0x81, 0xd1, 0x80, 0xd0, - 0xb0, 0xd0, 0xb7, 0xd1, 0x83, 0xd0, 0xa1, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xba, - 0xd1, 0x82, 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xbc, 0xd0, - 0x9a, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xbd, - 0xd0, 0xb8, 0xd0, 0xb3, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, - 0xb2, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xb9, - 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb9, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, - 0xb2, 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xbc, 0xd1, 0x81, 0xd0, 0xb2, 0xd1, 0x8f, - 0xd0, 0xb7, 0xd1, 0x8c, 0xd0, 0xbb, 0xd1, 0x8e, 0xd0, 0xb1, 0xd0, 0xbe, 0xd0, - 0xb9, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x81, - 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb4, 0xd0, 0xb8, 0xd0, 0x9a, 0xd1, 0x80, 0xd0, - 0xbe, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xa4, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, 0x83, - 0xd0, 0xbc, 0xd1, 0x80, 0xd1, 0x8b, 0xd0, 0xbd, 0xd0, 0xba, 0xd0, 0xb5, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xbf, 0xd0, 0xbe, - 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xba, 0xd1, 0x82, 0xd1, 0x8b, 0xd1, 0x81, 0xd1, - 0x8f, 0xd1, 0x87, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x8f, 0xd1, 0x86, - 0xd1, 0x86, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x82, 0xd1, 0x80, 0xd1, 0x82, 0xd1, - 0x80, 0xd1, 0x83, 0xd0, 0xb4, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xbc, - 0xd1, 0x8b, 0xd1, 0x85, 0xd1, 0x80, 0xd1, 0x8b, 0xd0, 0xbd, 0xd0, 0xba, 0xd0, - 0xb0, 0xd0, 0x9d, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, 0xd0, 0xb9, 0xd1, 0x87, - 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xb0, 0xd1, 0x84, 0xd0, 0xb8, 0xd0, 0xbb, 0xd1, 0x8c, - 0xd0, 0xbc, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x82, 0xd0, 0xb0, 0xd1, - 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xbc, 0xd0, 0xb5, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xba, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x88, 0xd0, 0xb8, 0xd1, 0x85, - 0xd0, 0xbc, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x83, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, - 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb5, - 0xd1, 0x8e, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, - 0x80, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb4, 0xd1, 0x81, - 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, - 0xbe, 0xd0, 0xbc, 0xd1, 0x83, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbd, 0xd1, 0x86, - 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xba, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, 0x90, 0xd1, 0x80, - 0xd1, 0x85, 0xd0, 0xb8, 0xd0, 0xb2, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, - 0xaf, 0xd9, 0x89, 0xd8, 0xa5, 0xd8, 0xb1, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb1, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x85, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa8, - 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, - 0xac, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x88, 0xd9, 0x85, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xb5, 0xd9, 0x88, 0xd8, 0xb1, 0xd8, 0xac, 0xd8, 0xaf, 0xd9, - 0x8a, 0xd8, 0xaf, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xb6, - 0xd9, 0x88, 0xd8, 0xa5, 0xd8, 0xb6, 0xd8, 0xa7, 0xd9, 0x81, 0xd8, 0xa9, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x82, 0xd8, 0xb3, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb9, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xaa, 0xd8, 0xad, 0xd9, 0x85, 0xd9, - 0x8a, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x84, 0xd9, 0x81, 0xd8, 0xa7, 0xd8, 0xaa, - 0xd9, 0x85, 0xd9, 0x84, 0xd8, 0xaa, 0xd9, 0x82, 0xd9, 0x89, 0xd8, 0xaa, 0xd8, - 0xb9, 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb4, - 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa3, 0xd8, 0xae, 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd8, 0xaa, 0xd8, 0xb7, 0xd9, 0x88, 0xd9, 0x8a, 0xd8, 0xb1, 0xd8, 0xb9, - 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xa5, 0xd8, 0xb1, 0xd9, - 0x81, 0xd8, 0xa7, 0xd9, 0x82, 0xd8, 0xb7, 0xd9, 0x84, 0xd8, 0xa8, 0xd8, 0xa7, - 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x84, 0xd8, 0xba, 0xd8, 0xa9, 0xd8, - 0xaa, 0xd8, 0xb1, 0xd8, 0xaa, 0xd9, 0x8a, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, - 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb4, 0xd9, - 0x8a, 0xd8, 0xae, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xaf, 0xd9, 0x8a, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, - 0x84, 0xd9, 0x82, 0xd8, 0xb5, 0xd8, 0xb5, 0xd8, 0xa7, 0xd9, 0x81, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x87, 0xd8, - 0xa7, 0xd8, 0xaa, 0xd8, 0xad, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xab, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x84, 0xd9, 0x87, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xb9, 0xd9, 0x85, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa8, - 0xd8, 0xa9, 0xd9, 0x8a, 0xd9, 0x85, 0xd9, 0x83, 0xd9, 0x86, 0xd9, 0x83, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xb7, 0xd9, 0x81, 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x8a, - 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x88, 0xd8, 0xa5, 0xd8, 0xaf, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd8, 0xa9, 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xb1, 0xd9, 0x8a, 0xd8, 0xae, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb5, 0xd8, 0xad, 0xd8, 0xa9, 0xd8, 0xaa, 0xd8, - 0xb3, 0xd8, 0xac, 0xd9, 0x8a, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x88, - 0xd9, 0x82, 0xd8, 0xaa, 0xd8, 0xb9, 0xd9, 0x86, 0xd8, 0xaf, 0xd9, 0x85, 0xd8, - 0xa7, 0xd9, 0x85, 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x86, 0xd8, 0xa9, 0xd8, 0xaa, - 0xd8, 0xb5, 0xd9, 0x85, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, 0xa3, 0xd8, 0xb1, 0xd8, - 0xb4, 0xd9, 0x8a, 0xd9, 0x81, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb0, 0xd9, 0x8a, - 0xd9, 0x86, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, - 0xa8, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa9, 0xd8, 0xa3, 0xd9, 0x84, - 0xd8, 0xb9, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd9, - 0x81, 0xd8, 0xb1, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd9, 0x83, 0xd9, 0x84, - 0xd8, 0xaa, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x89, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xa3, 0xd9, 0x88, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, - 0xd9, 0x86, 0xd8, 0xa9, 0xd8, 0xac, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xb9, 0xd8, - 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb5, 0xd8, 0xad, 0xd9, 0x81, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x86, 0xd9, 0x83, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xae, 0xd8, 0xa7, - 0xd8, 0xb5, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x84, 0xd9, 0x81, 0xd8, - 0xa3, 0xd8, 0xb9, 0xd8, 0xb6, 0xd8, 0xa7, 0xd8, 0xa1, 0xd9, 0x83, 0xd8, 0xaa, - 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xae, 0xd9, - 0x8a, 0xd8, 0xb1, 0xd8, 0xb1, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, 0xa6, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x82, 0xd9, 0x84, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xa3, 0xd8, 0xaf, 0xd8, 0xa8, 0xd9, 0x85, 0xd9, 0x82, 0xd8, 0xa7, - 0xd8, 0xb7, 0xd8, 0xb9, 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xa7, 0xd8, 0xb3, 0xd9, - 0x84, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xb7, 0xd9, 0x82, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xb1, 0xd8, 0xac, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xb4, 0xd8, 0xaa, 0xd8, 0xb1, - 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x82, 0xd8, 0xaf, 0xd9, 0x85, 0xd9, - 0x8a, 0xd8, 0xb9, 0xd8, 0xb7, 0xd9, 0x8a, 0xd9, 0x83, 0x73, 0x42, 0x79, 0x54, - 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, - 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, 0x69, - 0x64, 0x20, 0x23, 0x2e, 0x67, 0x69, 0x66, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, - 0x22, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x69, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x6f, 0x6e, 0x63, - 0x6c, 0x69, 0x63, 0x6b, 0x3d, 0x22, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, - 0x6e, 0x67, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, - 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x70, 0x65, - 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6d, - 0x64, 0x61, 0x73, 0x68, 0x3b, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x6c, 0x79, 0x3c, 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x3c, - 0x2f, 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x74, - 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, 0x65, 0x76, - 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6d, 0x70, 0x65, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, - 0x6c, 0x64, 0x65, 0x72, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x3a, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, - 0x30, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x65, 0x76, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x72, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x3c, 0x75, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x69, - 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x73, 0x70, 0x65, 0x72, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x75, 0x72, 0x6c, 0x28, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, 0x69, - 0x63, 0x73, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x6e, 0x6f, - 0x2d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x50, 0x47, 0x7c, 0x74, 0x68, 0x75, - 0x6d, 0x62, 0x7c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, - 0x65, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x3c, 0x6c, 0x69, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, 0x75, 0x6e, 0x64, 0x72, - 0x65, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x0a, 0x0a, 0x48, 0x6f, 0x77, 0x65, 0x76, - 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 0x62, 0x6f, 0x74, 0x68, 0x3b, - 0x63, 0x6f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x77, 0x69, - 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x3d, 0x22, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x4e, 0x65, 0x77, 0x20, 0x5a, 0x65, 0x61, 0x6c, - 0x61, 0x6e, 0x64, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, - 0x64, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x79, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x26, 0x6c, 0x74, - 0x3b, 0x73, 0x75, 0x70, 0x26, 0x67, 0x74, 0x3b, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x76, 0x65, 0x72, 0x73, 0x79, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6c, - 0x61, 0x6e, 0x64, 0x73, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x6d, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3d, 0x22, - 0x73, 0x77, 0x69, 0x74, 0x7a, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x44, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x73, 0x73, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x0a, 0x0a, 0x41, 0x6c, 0x74, 0x68, - 0x6f, 0x75, 0x67, 0x68, 0x20, 0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, - 0x65, 0x61, 0x3e, 0x74, 0x68, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x62, 0x69, 0x72, - 0x64, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x26, - 0x61, 0x6d, 0x70, 0x3b, 0x6e, 0x64, 0x61, 0x73, 0x68, 0x3b, 0x73, 0x70, 0x65, - 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x6c, 0x65, 0x67, 0x69, 0x73, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, - 0x63, 0x73, 0x0a, 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, - 0x69, 0x6c, 0x6c, 0x75, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x64, 0x65, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x74, 0x65, 0x72, 0x72, - 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x64, 0x36, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, - 0x22, 0x73, 0x61, 0x6e, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x69, 0x66, 0x3b, 0x63, - 0x61, 0x70, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x69, 0x73, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, - 0x20, 0x66, 0x6f, 0x72, 0x69, 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x62, 0x65, 0x41, 0x66, 0x67, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x77, 0x61, 0x73, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x61, - 0x74, 0x68, 0x2e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x73, 0x75, 0x72, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x63, 0x61, 0x6e, 0x20, 0x61, 0x6c, - 0x73, 0x6f, 0x20, 0x62, 0x65, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x65, 0x6e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x3c, - 0x68, 0x32, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x20, 0x68, 0x61, - 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x69, 0x6e, 0x76, 0x61, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x29, 0x2e, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x28, 0x29, 0x66, 0x75, 0x6e, 0x64, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, - 0x44, 0x65, 0x73, 0x70, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x22, 0x3e, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x6e, 0x73, 0x70, - 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x78, 0x61, 0x6d, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x3c, - 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x73, 0x74, 0x72, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x20, 0x2e, 0x73, - 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x65, 0x61, 0x63, 0x68, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x64, - 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, - 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x6f, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x20, - 0x45, 0x61, 0x73, 0x74, 0x3c, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x3c, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x20, - 0x70, 0x65, 0x72, 0x68, 0x61, 0x70, 0x73, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, - 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x20, 0x44, - 0x65, 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x66, 0x61, 0x6d, - 0x6f, 0x75, 0x73, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, - 0x79, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x73, 0x6f, 0x76, 0x65, 0x72, - 0x65, 0x69, 0x67, 0x6e, 0x74, 0x79, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x22, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x20, 0x74, 0x6f, 0x64, 0x6f, - 0x63, 0x74, 0x72, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x6f, 0x63, 0x63, 0x75, - 0x70, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x65, 0x6e, 0x61, 0x69, 0x73, 0x73, 0x61, - 0x6e, 0x63, 0x65, 0x61, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x65, - 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x63, - 0x6f, 0x67, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x72, 0x65, 0x64, 0x65, - 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, - 0x63, 0x3d, 0x22, 0x2f, 0x3c, 0x68, 0x31, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x62, 0x65, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x3c, 0x2f, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x65, 0x74, 0x3e, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x76, 0x65, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x6f, 0x66, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x65, - 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x61, 0x67, 0x72, 0x69, 0x63, 0x75, 0x6c, - 0x74, 0x75, 0x72, 0x65, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, - 0x74, 0x6f, 0x77, 0x61, 0x72, 0x64, 0x73, 0x20, 0x74, 0x68, 0x65, 0x4d, 0x6f, - 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x6e, 0x79, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x28, 0x65, 0x73, 0x70, 0x65, 0x63, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x3c, 0x74, 0x64, 0x20, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3d, 0x22, 0x3b, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x30, 0x30, - 0x25, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x3c, - 0x68, 0x33, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x20, 0x6f, 0x6e, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x3d, 0x22, 0x29, 0x2e, 0x61, 0x64, 0x64, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x28, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x64, 0x61, 0x75, 0x67, 0x68, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x66, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x62, 0x72, - 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, - 0x72, 0x67, 0x65, 0x73, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x20, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x22, 0x3e, 0x0a, 0x3c, 0x68, 0x65, 0x61, - 0x64, 0x3e, 0x0a, 0x3c, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, - 0x22, 0x31, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, - 0x20, 0x73, 0x65, 0x65, 0x6e, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x77, 0x61, - 0x73, 0x20, 0x61, 0x64, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x3e, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x68, 0x65, - 0x20, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x77, 0x61, 0x73, 0x20, 0x77, - 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x21, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x61, 0x6e, 0x74, 0x3b, 0x70, 0x78, 0x3b, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, - 0x6e, 0x2d, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x64, 0x75, 0x72, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6d, 0x6d, 0x69, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x3c, 0x68, 0x34, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x72, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x62, 0x79, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x4e, 0x6f, 0x76, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, 0x72, 0x73, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7b, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, - 0x7a, 0x65, 0x3a, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x69, 0x6e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x67, 0x61, 0x74, 0x65, 0x65, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x6d, 0x6f, 0x73, - 0x74, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x6c, 0x79, 0x77, 0x69, 0x64, 0x65, 0x6c, - 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x49, 0x74, - 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x69, 0x74, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, - 0x72, 0x79, 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x68, 0x61, 0x62, 0x69, 0x74, 0x61, - 0x6e, 0x74, 0x73, 0x69, 0x6d, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x63, 0x68, 0x6f, 0x6c, 0x61, 0x72, 0x73, 0x68, 0x69, 0x70, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x20, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x70, 0x78, 0x3b, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x61, 0x20, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x61, 0x72, - 0x65, 0x20, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x72, 0x6f, 0x6c, 0x65, - 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, - 0x75, 0x73, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x73, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, - 0x66, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x3d, 0x22, 0x68, 0x69, 0x67, 0x68, 0x20, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x66, 0x6f, 0x72, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x64, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, - 0x79, 0x65, 0x61, 0x72, 0x73, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x69, 0x6e, 0x20, 0x46, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, - 0x79, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x3c, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x69, 0x6e, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, - 0x6f, 0x66, 0x61, 0x70, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, 0x31, 0x22, 0x77, 0x61, - 0x73, 0x20, 0x62, 0x6f, 0x72, 0x6e, 0x20, 0x69, 0x6e, 0x68, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x69, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, - 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x3a, - 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x69, 0x67, - 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x63, 0x65, 0x6c, 0x65, 0x62, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x64, 0x2f, 0x6a, 0x73, 0x2f, 0x6a, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x69, 0x73, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, - 0x74, 0x68, 0x65, 0x6f, 0x72, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x74, - 0x61, 0x62, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3d, 0x22, 0x69, 0x74, 0x20, 0x63, - 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x3c, 0x6e, 0x6f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x62, - 0x65, 0x65, 0x6e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, - 0x3c, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x54, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x68, 0x65, 0x20, - 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x65, 0x64, 0x20, 0x62, 0x79, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, - 0x70, 0x68, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x65, 0x64, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x74, 0x6f, 0x20, 0x73, - 0x61, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, - 0x65, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x74, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x62, - 0x65, 0x6c, 0x69, 0x65, 0x66, 0x20, 0x74, 0x68, 0x61, 0x74, 0x70, 0x68, 0x6f, - 0x74, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x20, 0x6f, 0x66, 0x20, 0x52, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, - 0x6f, 0x66, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, 0x69, 0x6c, 0x79, - 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x74, 0x65, - 0x63, 0x68, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x6c, 0x65, 0x61, 0x76, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x61, - 0x63, 0x75, 0x6c, 0x61, 0x72, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x69, 0x74, - 0x79, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x61, 0x75, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x70, 0x61, 0x72, - 0x74, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x65, 0x6d, 0x70, 0x68, 0x61, - 0x73, 0x69, 0x73, 0x20, 0x6f, 0x6e, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x72, 0x65, - 0x63, 0x65, 0x6e, 0x74, 0x73, 0x68, 0x61, 0x72, 0x65, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x73, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x69, 0x74, 0x20, 0x69, - 0x73, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x22, 0x3e, 0x3c, 0x2f, 0x69, 0x66, - 0x72, 0x61, 0x6d, 0x65, 0x3e, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x73, 0x3a, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x63, - 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x6f, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x76, 0x69, 0x65, 0x77, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x73, 0x65, 0x74, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x69, 0x6e, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x59, - 0x6f, 0x72, 0x6b, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, - 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x6e, 0x63, - 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x3b, 0x3c, 0x2f, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, - 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x53, 0x6f, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x63, 0x69, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x22, 0x3e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, - 0x67, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x6f, 0x70, 0x68, 0x65, 0x72, 0x4d, - 0x75, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x77, 0x72, 0x69, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x6f, 0x66, 0x22, 0x20, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x3d, 0x22, 0x32, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x20, 0x6d, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x45, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x65, 0x64, 0x75, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x65, 0x74, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x6f, 0x6e, 0x73, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x3d, 0x22, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x6f, - 0x66, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2f, - 0x44, 0x54, 0x44, 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x74, 0x65, 0x6e, 0x64, 0x65, - 0x6e, 0x63, 0x79, 0x20, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x6f, 0x75, - 0x6c, 0x64, 0x64, 0x65, 0x73, 0x70, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x20, 0x6c, 0x65, - 0x67, 0x69, 0x73, 0x6c, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x69, 0x6e, 0x6e, - 0x65, 0x72, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x67, 0x72, 0x69, 0x63, 0x75, 0x6c, 0x74, - 0x75, 0x72, 0x65, 0x77, 0x61, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x61, 0x63, 0x68, 0x20, 0x74, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x79, 0x65, 0x61, - 0x72, 0x73, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x2c, 0x73, 0x61, 0x6e, 0x73, - 0x2d, 0x73, 0x65, 0x72, 0x69, 0x66, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, - 0x63, 0x65, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, - 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x62, 0x62, 0x72, - 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x64, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, - 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, - 0x7a, 0x65, 0x3a, 0x31, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, - 0x6f, 0x66, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x20, - 0x68, 0x69, 0x73, 0x20, 0x62, 0x72, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x61, 0x6e, 0x6e, 0x69, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x6c, 0x79, - 0x20, 0x69, 0x6e, 0x6e, 0x6f, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x69, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x63, 0x61, 0x6e, - 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x6f, 0x47, 0x4d, 0x54, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x41, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x6f, 0x66, 0x69, 0x6d, 0x67, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x77, 0x61, - 0x73, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x6f, 0x63, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, - 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, - 0x69, 0x73, 0x68, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x68, 0x65, 0x20, 0x77, 0x61, - 0x73, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x6e, 0x67, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x61, 0x6e, - 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x72, 0x67, 0x75, 0x65, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x61, 0x6e, 0x63, 0x6f, 0x6e, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, - 0x6f, 0x66, 0x77, 0x69, 0x64, 0x65, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x20, - 0x77, 0x65, 0x72, 0x65, 0x20, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x73, 0x63, - 0x72, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x49, 0x6e, 0x20, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x61, - 0x6e, 0x74, 0x73, 0x61, 0x72, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x6c, 0x65, 0x67, 0x69, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x62, 0x61, - 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x6d, 0x6f, 0x73, 0x74, 0x20, - 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x79, 0x65, 0x61, 0x72, 0x73, 0x20, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, - 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x74, 0x68, - 0x65, 0x79, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x72, 0x67, 0x75, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x68, 0x6f, 0x77, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x70, 0x72, 0x65, 0x64, 0x6f, 0x6d, 0x69, 0x6e, - 0x61, 0x6e, 0x74, 0x74, 0x68, 0x65, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, - 0x6c, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x63, - 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x68, 0x6f, - 0x72, 0x74, 0x2d, 0x6c, 0x69, 0x76, 0x65, 0x64, 0x3c, 0x2f, 0x73, 0x70, 0x61, - 0x6e, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6c, 0x69, 0x74, 0x74, - 0x6c, 0x65, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x68, 0x61, 0x64, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x63, 0x6f, 0x6d, 0x6d, - 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x65, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x2c, 0x3c, 0x2f, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x22, - 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x33, 0x49, 0x6e, 0x64, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x70, 0x6f, 0x70, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x2d, 0x73, - 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x20, 0x41, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, - 0x68, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x6f, - 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x74, 0x77, 0x6f, 0x20, 0x6f, 0x72, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x73, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, - 0x65, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x68, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x3c, 0x2f, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x62, 0x65, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x66, - 0x69, 0x6e, 0x20, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x73, 0x69, - 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x6e, 0x73, 0x75, - 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x20, 0x61, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x73, 0x73, 0x69, - 0x70, 0x70, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x6c, - 0x79, 0x6f, 0x75, 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x62, - 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x77, 0x68, 0x61, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x77, 0x73, 0x69, 0x74, 0x75, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, - 0x6d, 0x65, 0x3d, 0x22, 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x61, 0x74, 0x6d, 0x6f, - 0x73, 0x70, 0x68, 0x65, 0x72, 0x69, 0x63, 0x69, 0x64, 0x65, 0x6f, 0x6c, 0x6f, - 0x67, 0x69, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, - 0x73, 0x65, 0x73, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, - 0x67, 0x65, 0x61, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x6d, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x70, 0x61, 0x67, 0x65, 0x2f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x2e, 0x70, 0x68, 0x70, 0x3f, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x65, 0x64, 0x48, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, - 0x77, 0x61, 0x73, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x20, 0x66, - 0x61, 0x76, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x4d, 0x69, 0x6e, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x3c, - 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x54, 0x68, 0x69, - 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, - 0x69, 0x7a, 0x65, 0x64, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6d, 0x61, - 0x64, 0x65, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x65, 0x6d, - 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x6b, 0x65, 0x6c, 0x79, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x50, 0x61, 0x6c, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x69, 0x61, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x20, 0x61, 0x66, 0x74, 0x65, - 0x72, 0x69, 0x74, 0x20, 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x6d, - 0x6f, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x74, 0x6f, 0x20, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x62, 0x75, 0x74, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x76, 0x65, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, - 0x6c, 0x79, 0x49, 0x6e, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x2c, - 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x73, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x75, 0x62, 0x64, - 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x69, 0x74, - 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, - 0x79, 0x77, 0x61, 0x73, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x6c, 0x79, 0x6f, - 0x75, 0x74, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x73, 0x74, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, - 0x6f, 0x67, 0x3d, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, - 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, - 0x79, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x6d, 0x61, 0x6e, 0x75, - 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, 0x65, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, - 0x62, 0x65, 0x69, 0x6e, 0x67, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, 0x69, 0x78, - 0x22, 0x3e, 0x0a, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x77, 0x61, 0x73, 0x20, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x74, - 0x6f, 0x20, 0x62, 0x65, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x61, 0x62, 0x65, 0x63, - 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, - 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x69, 0x6e, 0x73, 0x70, 0x69, 0x72, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, - 0x6c, 0x20, 0x61, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x61, 0x6d, - 0x6f, 0x6e, 0x67, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, 0x6f, - 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, - 0x31, 0x30, 0x30, 0x25, 0x3b, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, - 0x67, 0x79, 0x2c, 0x77, 0x61, 0x73, 0x20, 0x61, 0x64, 0x6f, 0x70, 0x74, 0x65, - 0x64, 0x74, 0x6f, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x20, 0x74, 0x68, 0x65, 0x73, - 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6c, 0x69, 0x76, - 0x65, 0x20, 0x62, 0x69, 0x72, 0x74, 0x68, 0x73, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x63, 0x75, 0x74, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x3b, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x61, 0x6c, - 0x69, 0x67, 0x6e, 0x3d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x74, 0x68, 0x65, 0x20, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x42, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x22, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x71, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x20, 0x6f, 0x66, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x20, - 0x2f, 0x3e, 0x69, 0x73, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, - 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, - 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x65, 0x6c, 0x79, 0x2c, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, - 0x20, 0x69, 0x64, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3d, 0x22, 0x31, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x6c, - 0x79, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x63, 0x6f, 0x6d, 0x65, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x63, 0x69, 0x74, 0x69, 0x7a, - 0x65, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, - 0x69, 0x61, 0x6e, 0x73, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x61, 0x73, 0x20, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x20, 0x61, 0x73, - 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x3c, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x6f, 0x6e, 0x6d, 0x6f, 0x75, 0x73, 0x65, 0x64, - 0x6f, 0x77, 0x6e, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x74, 0x20, 0x69, - 0x73, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x74, 0x20, 0x77, 0x61, 0x73, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x61, 0x63, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x64, 0x61, 0x74, 0x65, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, - 0x74, 0x65, 0x74, 0x68, 0x65, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, - 0x64, 0x65, 0x6c, 0x69, 0x63, 0x69, 0x6f, 0x75, 0x73, 0x22, 0x3e, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x74, 0x68, 0x65, 0x20, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x79, 0x20, 0x61, 0x72, 0x65, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x69, 0x6e, 0x61, - 0x6c, 0x6c, 0x79, 0x61, 0x20, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x0d, 0x0a, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x0d, - 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x66, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x6d, 0x61, 0x6a, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x69, 0x6d, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x61, 0x77, - 0x61, 0x72, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x65, 0x72, 0x22, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, - 0x65, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x20, 0x6f, 0x66, 0x74, - 0x68, 0x65, 0x69, 0x72, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x44, 0x75, 0x72, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x29, 0x7b, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x62, 0x65, 0x67, 0x69, - 0x6e, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, - 0x65, 0x6e, 0x74, 0x77, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x65, - 0x64, 0x65, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x61, - 0x73, 0x73, 0x75, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x73, 0x20, - 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x62, 0x79, 0x6e, 0x65, 0x65, 0x64, 0x73, - 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x6f, - 0x75, 0x73, 0x61, 0x72, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, - 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x61, - 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x69, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x65, 0x64, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, - 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x6e, 0x74, 0x2d, 0x64, 0x61, 0x79, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, - 0x68, 0x65, 0x62, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, - 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x69, 0x73, 0x20, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x61, 0x64, - 0x65, 0x77, 0x61, 0x73, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x62, 0x75, 0x74, - 0x20, 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x6f, 0x6e, 0x4d, 0x6f, 0x75, - 0x73, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x61, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x72, 0x6f, 0x6d, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x61, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x72, 0x20, - 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x61, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, - 0x20, 0x6f, 0x66, 0x61, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, - 0x6f, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x74, 0x73, - 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x6d, 0x75, 0x63, - 0x68, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x0a, 0x09, 0x3c, 0x2f, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x61, 0x64, 0x6f, 0x70, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x65, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, - 0x6f, 0x66, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x77, 0x61, - 0x73, 0x20, 0x62, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x63, 0x68, 0x69, 0x6c, - 0x64, 0x72, 0x65, 0x6e, 0x20, 0x6f, 0x66, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x6d, 0x61, 0x6e, 0x75, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x73, 0x77, 0x61, 0x72, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x73, 0x74, 0x62, - 0x79, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x64, - 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x73, 0x69, 0x6d, 0x69, 0x6c, - 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x65, - 0x74, 0x61, 0x72, 0x79, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x70, 0x72, 0x65, 0x73, 0x74, 0x69, 0x67, 0x69, 0x6f, 0x75, 0x73, - 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x6f, 0x20, 0x6d, - 0x61, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x49, 0x74, 0x20, 0x77, 0x61, 0x73, - 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, - 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x65, 0x74, 0x69, 0x74, 0x6f, 0x72, - 0x73, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x2e, 0x53, 0x2e, 0x72, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x62, 0x72, 0x6f, - 0x75, 0x67, 0x68, 0x74, 0x20, 0x74, 0x68, 0x65, 0x63, 0x61, 0x6c, 0x63, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x6c, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, - 0x69, 0x6e, 0x20, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x72, 0x65, 0x73, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, - 0x6f, 0x31, 0x73, 0x74, 0x20, 0x45, 0x61, 0x72, 0x6c, 0x20, 0x6f, 0x66, 0x63, - 0x75, 0x6c, 0x74, 0x75, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x70, 0x72, 0x69, - 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x6c, 0x79, 0x3c, 0x2f, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x63, 0x61, - 0x6e, 0x20, 0x62, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x65, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x68, 0x69, 0x73, - 0x65, 0x78, 0x70, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x6f, 0x61, 0x72, - 0x65, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x66, 0x6f, 0x72, 0x6d, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x64, 0x64, 0x46, 0x61, 0x76, - 0x6f, 0x72, 0x69, 0x74, 0x65, 0x63, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x6e, 0x73, - 0x68, 0x69, 0x70, 0x70, 0x61, 0x72, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, - 0x6e, 0x20, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x74, 0x6f, 0x20, - 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x26, 0x61, 0x6d, 0x70, 0x3b, - 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x3b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, - 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x70, 0x6c, 0x61, 0x79, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, - 0x30, 0x22, 0x20, 0x69, 0x6e, 0x20, 0x68, 0x69, 0x73, 0x20, 0x62, 0x6f, 0x6f, - 0x6b, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x66, - 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, - 0x2f, 0x74, 0x64, 0x3e, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, - 0x73, 0x74, 0x74, 0x68, 0x65, 0x20, 0x69, 0x64, 0x65, 0x61, 0x20, 0x6f, 0x66, - 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x77, 0x65, - 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x62, 0x74, 0x6e, 0x64, 0x61, 0x79, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x73, 0x68, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x69, - 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x68, - 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x4c, 0x6f, 0x72, 0x64, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, - 0x6c, 0x79, 0x68, 0x61, 0x73, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x77, 0x6e, - 0x45, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x73, 0x6f, 0x6d, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x2c, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, - 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, - 0x65, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x62, 0x6c, 0x61, 0x63, 0x6b, - 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, - 0x27, 0x73, 0x63, 0x61, 0x6e, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x20, 0x74, 0x6f, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x2c, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x63, 0x69, 0x74, - 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x3e, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0d, 0x0a, 0x09, 0x09, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x72, 0x61, 0x64, 0x69, 0x6f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x72, 0x65, - 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x77, 0x69, 0x74, 0x68, - 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x68, 0x69, 0x73, 0x20, 0x66, 0x61, - 0x74, 0x68, 0x65, 0x72, 0x2c, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x6f, - 0x75, 0x6c, 0x64, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x61, - 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x69, 0x74, 0x75, 0x74, 0x65, 0x73, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x64, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x65, 0x72, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, - 0x69, 0x3e, 0x6f, 0x66, 0x20, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x66, 0x65, - 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x69, 0x65, 0x64, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x57, 0x69, 0x64, 0x74, 0x68, 0x70, 0x72, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x65, 0x4c, 0x65, 0x67, 0x69, 0x73, 0x6c, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x74, 0x6c, 0x79, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69, - 0x6e, 0x68, 0x61, 0x73, 0x20, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x66, - 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x66, 0x6f, 0x75, 0x6e, 0x64, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, - 0x6f, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, - 0x75, 0x73, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x77, 0x68, 0x65, 0x72, - 0x65, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x6d, 0x73, 0x65, 0x6c, 0x76, 0x65, 0x73, - 0x2c, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x68, 0x65, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x74, 0x72, 0x61, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x72, 0x6f, 0x6c, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x68, 0x69, - 0x6c, 0x64, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x77, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x53, 0x6f, - 0x6d, 0x65, 0x20, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x73, 0x69, 0x64, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x65, 0x77, 0x73, 0x6c, 0x65, 0x74, 0x74, - 0x65, 0x72, 0x73, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, - 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x61, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x6c, 0x69, 0x76, - 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x61, 0x74, 0x74, 0x65, 0x6d, - 0x70, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x69, - 0x65, 0x73, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x61, 0x74, - 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, - 0x67, 0x68, 0x20, 0x69, 0x74, 0x77, 0x61, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74, - 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x75, - 0x73, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x74, - 0x68, 0x65, 0x20, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x3e, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x74, 0x68, 0x65, 0x20, 0x65, 0x63, 0x6f, - 0x6e, 0x6f, 0x6d, 0x79, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, - 0x73, 0x74, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x77, 0x69, 0x64, 0x65, 0x6c, 0x79, - 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6e, - 0x64, 0x20, 0x70, 0x65, 0x72, 0x68, 0x61, 0x70, 0x73, 0x72, 0x69, 0x73, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, - 0x20, 0x77, 0x68, 0x65, 0x6e, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x74, 0x68, 0x65, 0x20, 0x77, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x74, - 0x68, 0x65, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x73, 0x20, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x68, 0x65, 0x73, 0x65, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x6d, 0x61, - 0x6e, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x68, 0x69, 0x73, 0x61, 0x72, 0x65, 0x61, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x20, 0x57, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x54, - 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x63, 0x6f, 0x6c, 0x73, 0x70, 0x61, 0x6e, - 0x3d, 0x32, 0x20, 0x7c, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x73, 0x74, 0x6f, - 0x72, 0x79, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, - 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x63, 0x72, - 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x61, 0x20, 0x43, 0x68, 0x72, 0x69, - 0x73, 0x74, 0x69, 0x61, 0x6e, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x74, 0x6f, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, - 0x6f, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x54, - 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x6d, 0x65, 0x72, - 0x63, 0x68, 0x61, 0x6e, 0x64, 0x69, 0x73, 0x65, 0x66, 0x6f, 0x72, 0x20, 0x6d, - 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x6e, 0x6f, 0x20, 0x65, 0x76, 0x69, 0x64, - 0x65, 0x6e, 0x63, 0x65, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x6f, 0x66, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, - 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x63, 0x6f, - 0x6d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x73, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x20, - 0x74, 0x68, 0x65, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x2c, 0x69, 0x73, 0x20, 0x61, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x74, 0x68, 0x65, - 0x20, 0x61, 0x6e, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x72, 0x6f, 0x62, 0x6c, - 0x65, 0x6d, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, 0x66, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x61, 0x20, 0x66, 0x65, 0x77, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x6d, 0x75, - 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6f, 0x66, 0x43, 0x61, 0x6c, 0x69, 0x66, 0x6f, - 0x72, 0x6e, 0x69, 0x61, 0x2c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x20, 0x61, - 0x73, 0x20, 0x61, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x6d, - 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x09, 0x09, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x74, 0x22, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, - 0x65, 0x20, 0x6f, 0x66, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, - 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x69, 0x6e, - 0x69, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x64, 0x69, 0x76, 0x3e, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x6c, 0x65, 0x61, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x09, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, - 0x2f, 0x77, 0x61, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6e, - 0x74, 0x69, 0x6e, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x77, 0x61, 0x73, 0x20, 0x73, - 0x65, 0x65, 0x6e, 0x20, 0x61, 0x73, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, - 0x6f, 0x66, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x73, 0x74, 0x65, 0x61, - 0x63, 0x68, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x64, 0x69, 0x61, 0x6c, 0x65, 0x63, 0x74, 0x73, - 0x20, 0x6f, 0x66, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x77, 0x61, 0x73, 0x20, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x61, - 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x65, - 0x73, 0x74, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, - 0x61, 0x6e, 0x64, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x62, 0x65, - 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, 0x77, 0x6f, 0x69, 0x73, 0x20, 0x61, - 0x6c, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, - 0x68, 0x20, 0x61, 0x6e, 0x64, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2c, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x74, 0x20, 0x77, 0x61, - 0x73, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x74, - 0x68, 0x65, 0x6d, 0x73, 0x65, 0x6c, 0x76, 0x65, 0x73, 0x2e, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x72, 0x61, 0x6e, 0x73, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, - 0x65, 0x20, 0x61, 0x73, 0x74, 0x6f, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x54, 0x68, - 0x69, 0x73, 0x20, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x61, 0x20, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, - 0x73, 0x74, 0x20, 0x74, 0x6f, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x4f, 0x66, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x68, 0x69, - 0x73, 0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x20, 0x69, 0x73, 0x69, 0x73, 0x20, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x74, 0x65, - 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x67, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, - 0x2f, 0x6c, 0x69, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x74, 0x65, 0x20, 0x6f, 0x66, - 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x2c, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x57, 0x65, 0x73, 0x74, 0x74, 0x68, 0x65, 0x79, 0x20, 0x73, - 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x73, 0x6c, 0x6f, 0x76, 0x65, 0x6e, 0xc4, 0x8d, - 0x69, 0x6e, 0x61, 0x63, 0x6f, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x69, 0x6f, - 0x73, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x64, 0x61, 0x64, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x64, 0x61, 0x64, 0x65, 0x73, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x74, 0x65, 0x63, 0x6e, 0x6f, 0x6c, 0x6f, - 0x67, 0xc3, 0xad, 0x61, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x63, 0x69, 0xc3, - 0xb3, 0x6e, 0x70, 0x75, 0x6e, 0x74, 0x75, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, - 0x61, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x73, 0x65, 0xc3, 0xb1, 0x61, 0x63, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0xc3, 0xad, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x72, 0x73, 0x65, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x74, 0x72, 0x61, 0x74, 0x61, 0x6d, 0x69, 0x65, 0x6e, 0x74, - 0x6f, 0x72, 0x65, 0x67, 0xc3, 0xad, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x73, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x61, 0x72, 0xc3, 0xad, 0x61, 0x70, 0x72, 0x69, - 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x74, 0x65, - 0x63, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, - 0x6e, 0x74, 0x65, 0x73, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x63, - 0x69, 0x61, 0x70, 0x6f, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x64, 0x61, 0x64, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x61, 0x6e, 0x74, 0x65, 0x63, 0x72, - 0x65, 0x63, 0x69, 0x6d, 0x69, 0x65, 0x6e, 0x74, 0x6f, 0x6e, 0x65, 0x63, 0x65, - 0x73, 0x69, 0x64, 0x61, 0x64, 0x65, 0x73, 0x73, 0x75, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x69, 0x72, 0x73, 0x65, 0x61, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x63, 0x69, - 0xc3, 0xb3, 0x6e, 0x64, 0x69, 0x73, 0x70, 0x6f, 0x6e, 0x69, 0x62, 0x6c, 0x65, - 0x73, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x65, - 0x73, 0x74, 0x75, 0x64, 0x69, 0x61, 0x6e, 0x74, 0x65, 0x73, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x75, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x67, 0x75, 0x61, 0x64, 0x61, 0x6c, 0x61, - 0x6a, 0x61, 0x72, 0x61, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x64, - 0x6f, 0x73, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x69, 0x64, 0x61, 0x64, - 0x63, 0x6f, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x65, 0x73, 0x66, 0x6f, - 0x74, 0x6f, 0x67, 0x72, 0x61, 0x66, 0xc3, 0xad, 0x61, 0x61, 0x75, 0x74, 0x6f, - 0x72, 0x69, 0x64, 0x61, 0x64, 0x65, 0x73, 0x69, 0x6e, 0x67, 0x65, 0x6e, 0x69, - 0x65, 0x72, 0xc3, 0xad, 0x61, 0x74, 0x65, 0x6c, 0x65, 0x76, 0x69, 0x73, 0x69, - 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x65, 0x74, 0x65, 0x6e, 0x63, 0x69, - 0x61, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x65, - 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x63, 0x69, 0x64, 0x6f, 0x73, 0x69, 0x6d, - 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x61, 0x63, 0x74, 0x75, 0x61, - 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x76, 0x65, 0x67, 0x61, 0x63, - 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x64, - 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, - 0x22, 0x20, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6c, 0x69, - 0x6e, 0x6b, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x2f, 0x2f, 0x3c, 0x21, - 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x0a, 0x4f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x30, 0x70, 0x78, 0x3b, 0x20, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x3a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x68, 0x69, 0x70, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x3d, - 0x22, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x3c, 0x2f, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x2f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x77, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x20, 0x21, 0x69, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x3b, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x22, 0x69, 0x6e, 0x74, 0x65, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x75, 0x61, 0x6c, - 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3a, 0x31, - 0x38, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x61, 0x6e, - 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x6e, 0x73, - 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x62, 0x62, 0x72, - 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x69, 0x6d, 0x67, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x69, 0x76, 0x69, 0x6c, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x39, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x32, 0x30, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, - 0x79, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x3e, - 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x79, 0x2f, - 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x6e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x75, 0x6e, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x27, 0x29, 0x46, 0x75, 0x72, 0x74, - 0x68, 0x65, 0x72, 0x6d, 0x6f, 0x72, 0x65, 0x2c, 0x62, 0x65, 0x6c, 0x69, 0x65, - 0x76, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, - 0x54, 0x4d, 0x4c, 0x20, 0x3d, 0x20, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x64, 0x72, 0x61, 0x6d, 0x61, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x6c, 0x79, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x6f, 0x6e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x68, 0x65, 0x61, 0x64, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, - 0x73, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, - 0x75, 0x6e, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x50, - 0x65, 0x6e, 0x6e, 0x73, 0x79, 0x6c, 0x76, 0x61, 0x6e, 0x69, 0x61, 0x41, 0x73, - 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x3c, 0x68, 0x74, - 0x6d, 0x6c, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x26, 0x6c, 0x74, 0x3b, - 0x2f, 0x73, 0x75, 0x70, 0x26, 0x67, 0x74, 0x3b, 0x64, 0x65, 0x61, 0x6c, 0x69, - 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x70, 0x68, 0x69, 0x6c, 0x61, 0x64, - 0x65, 0x6c, 0x70, 0x68, 0x69, 0x61, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x29, 0x3b, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x0a, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x74, - 0x6f, 0x70, 0x3a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x67, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x70, - 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3d, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x7b, 0x73, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x2e, 0x64, 0x74, - 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x74, 0x67, 0x65, 0x6f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x69, - 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x61, 0x67, 0x72, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x75, - 0x72, 0x61, 0x6c, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, - 0x61, 0x20, 0x76, 0x61, 0x72, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x45, 0x6e, - 0x63, 0x79, 0x63, 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x69, 0x61, 0x69, 0x66, 0x72, - 0x61, 0x6d, 0x65, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x64, 0x65, 0x6d, 0x6f, - 0x6e, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x64, 0x61, 0x63, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x65, 0x6d, 0x6f, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x69, 0x63, 0x73, 0x29, 0x3b, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x3c, 0x64, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x20, - 0x6f, 0x66, 0x73, 0x61, 0x74, 0x69, 0x73, 0x66, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x6c, 0x79, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x45, - 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x20, 0x28, 0x55, 0x53, 0x29, 0x61, 0x70, - 0x70, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x28, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x48, - 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6c, - 0x6c, 0x69, 0x67, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x20, 0x74, 0x61, 0x62, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x3d, 0x22, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x3b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x77, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x72, 0x61, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x66, - 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x6f, 0x6e, - 0x65, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x65, 0x6e, 0x63, 0x79, 0x63, 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x69, 0x61, 0x3b, - 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x31, 0x6a, 0x75, - 0x72, 0x69, 0x73, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x74, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x3e, 0x3c, 0x61, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x49, 0x6e, 0x20, 0x61, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2b, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x69, 0x73, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x6c, 0x6c, 0x79, 0x72, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x3d, 0x22, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, - 0x67, 0x26, 0x6c, 0x74, 0x3b, 0x6d, 0x61, 0x74, 0x68, 0x26, 0x67, 0x74, 0x3b, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, - 0x63, 0x63, 0x61, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x3c, 0x69, - 0x6d, 0x67, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x6e, 0x61, 0x76, - 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x63, 0x6f, 0x6d, 0x70, - 0x65, 0x6e, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x6d, 0x70, - 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, - 0x22, 0x61, 0x6c, 0x6c, 0x22, 0x20, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x20, 0x74, 0x6f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, - 0x75, 0x65, 0x3b, 0x53, 0x74, 0x72, 0x69, 0x63, 0x74, 0x2f, 0x2f, 0x45, 0x4e, - 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x69, - 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x69, 0x65, 0x73, 0x43, 0x68, 0x61, - 0x6d, 0x70, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x63, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x21, 0x5b, 0x65, 0x6e, - 0x64, 0x69, 0x66, 0x5d, 0x2d, 0x2d, 0x3e, 0x7d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x69, - 0x61, 0x6e, 0x69, 0x74, 0x79, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2c, 0x50, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x77, 0x61, 0x73, 0x20, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x28, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x28, 0x75, 0x6e, - 0x65, 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x68, 0x65, - 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x2f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x2f, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x47, - 0x75, 0x69, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x76, - 0x65, 0x72, 0x77, 0x68, 0x65, 0x6c, 0x6d, 0x69, 0x6e, 0x67, 0x61, 0x67, 0x61, - 0x69, 0x6e, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x63, - 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x0a, 0x2e, 0x6e, 0x6f, - 0x6e, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x20, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x66, 0x20, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x31, - 0x70, 0x78, 0x20, 0x7b, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, - 0x3a, 0x31, 0x74, 0x72, 0x65, 0x61, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x30, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x31, - 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x69, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x61, 0x63, 0x68, 0x69, - 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x65, 0x73, 0x74, 0x61, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x74, 0x68, - 0x65, 0x6c, 0x65, 0x73, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x6e, 0x63, 0x65, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x74, - 0x64, 0x3e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x3e, - 0x0a, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x61, - 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x73, 0x72, - 0x63, 0x3d, 0x27, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x61, 0x76, - 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x61, 0x6c, 0x66, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, - 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x74, 0x61, - 0x67, 0x65, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x79, 0x20, 0x6f, 0x66, 0x66, 0x75, 0x6e, 0x64, 0x61, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x74, 0x72, 0x6f, 0x70, 0x6f, 0x6c, 0x69, 0x74, - 0x61, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x65, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, - 0x64, 0x65, 0x6c, 0x69, 0x62, 0x65, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x61, - 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x76, - 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x70, 0x72, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6d, 0x70, 0x72, - 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x62, 0x65, 0x67, 0x69, 0x6e, - 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x4a, 0x65, 0x73, 0x75, 0x73, 0x20, - 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x64, 0x69, 0x73, 0x61, 0x67, 0x72, 0x65, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, - 0x6e, 0x3a, 0x72, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x29, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, - 0x69, 0x73, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x73, - 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6d, 0x61, 0x6e, 0x79, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6c, 0x6f, 0x77, 0x3a, - 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3b, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x65, 0x74, 0x09, 0x3c, 0x75, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x68, 0x6f, 0x6f, 0x64, 0x61, - 0x72, 0x6d, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x73, 0x72, 0x65, - 0x64, 0x75, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, - 0x74, 0x69, 0x6e, 0x75, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x4e, 0x6f, 0x6e, 0x65, - 0x74, 0x68, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x2c, 0x74, 0x65, 0x6d, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x0a, 0x09, 0x09, 0x3c, 0x61, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x69, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x28, 0x73, 0x65, 0x65, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, - 0x29, 0x2e, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x69, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x68, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x09, 0x09, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x0a, 0x09, 0x09, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x61, 0x63, 0x63, 0x65, - 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x48, 0x61, 0x6c, 0x6c, 0x20, 0x6f, - 0x66, 0x20, 0x46, 0x61, 0x6d, 0x65, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x27, 0x74, 0x65, 0x78, - 0x74, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x79, 0x65, 0x61, 0x72, - 0x73, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, - 0x76, 0x65, 0x72, 0x79, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x7b, - 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x74, 0x72, - 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x6d, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x65, 0x78, 0x70, 0x6c, 0x6f, - 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, 0x74, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x20, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x20, 0x6f, 0x66, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x64, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x3e, 0x3c, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, - 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x62, - 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x61, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x6e, 0x65, 0x69, - 0x67, 0x68, 0x62, 0x6f, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x77, 0x69, 0x74, 0x68, - 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x09, 0x3c, 0x6c, 0x69, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x53, 0x6f, 0x76, 0x69, 0x65, 0x74, 0x20, 0x55, - 0x6e, 0x69, 0x6f, 0x6e, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, - 0x67, 0x65, 0x64, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x61, 0x6e, 0x20, - 0x62, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, - 0x65, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, - 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x64, - 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x49, 0x6e, - 0x20, 0x66, 0x61, 0x63, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x6c, 0x69, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x61, 0x69, 0x6d, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x75, 0x69, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x63, 0x68, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x42, 0x75, 0x62, - 0x62, 0x6c, 0x65, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, - 0x72, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x6f, 0x72, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x69, 0x6e, - 0x20, 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x6e, 0x74, - 0x65, 0x6c, 0x6c, 0x69, 0x67, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x72, 0x63, 0x3d, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x78, 0x3b, 0x20, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x72, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x61, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x6f, 0x6d, 0x69, 0x63, 0x61, 0x6c, 0x68, - 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x73, 0x6e, 0x61, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x65, - 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x61, 0x72, 0x65, 0x20, - 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x73, 0x6d, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x61, 0x20, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x20, 0x77, 0x68, 0x6f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x61, 0x72, 0x67, 0x75, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x6e, 0x6f, 0x77, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x20, 0x61, 0x73, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x61, 0x72, - 0x6c, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, - 0x53, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x61, 0x76, 0x69, 0x61, 0x6e, 0x3c, - 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, - 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, - 0x4e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x70, 0x61, 0x67, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x61, 0x6e, 0x61, 0x6c, 0x6f, 0x67, 0x6f, 0x75, - 0x73, 0x20, 0x74, 0x6f, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x64, 0x2f, 0x75, 0x6c, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, - 0x3e, 0x0a, 0x77, 0x61, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, - 0x6e, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x61, - 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x74, - 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x20, 0x77, 0x61, - 0x73, 0x20, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x64, 0x6e, 0x6f, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x72, 0x65, 0x73, 0x70, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x63, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, - 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x65, 0x72, 0x65, 0x20, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x6c, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6d, 0x70, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x6e, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x78, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x6c, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, - 0x20, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x61, 0x6e, - 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x68, 0x6f, 0x77, - 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x79, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x72, 0x65, 0x6a, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, - 0x69, 0x73, 0x6d, 0x20, 0x6f, 0x66, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x6c, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x6c, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x29, 0x7b, 0x49, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, - 0x65, 0x61, 0x6e, 0x20, 0x61, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x63, 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x64, - 0x69, 0x66, 0x66, 0x65, 0x72, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x41, 0x72, - 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x62, 0x65, 0x74, - 0x74, 0x65, 0x72, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x61, 0x72, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x6e, 0x66, 0x6c, 0x75, - 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x6e, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x64, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x73, 0x73, 0x20, 0x74, 0x68, 0x72, 0x6f, - 0x75, 0x67, 0x68, 0x78, 0x6d, 0x6c, 0x22, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x3d, 0x22, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x62, 0x6f, 0x6c, 0x64, - 0x3b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x72, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x69, - 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x69, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x57, 0x6f, 0x72, 0x6c, - 0x64, 0x20, 0x57, 0x61, 0x72, 0x20, 0x49, 0x49, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6d, 0x6f, 0x6e, 0x69, 0x61, 0x6c, 0x73, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x79, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x62, 0x79, 0x74, - 0x68, 0x65, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x73, 0x73, 0x22, 0x20, 0x6d, - 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x20, 0x6f, 0x6e, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x62, 0x65, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0x77, 0x61, 0x73, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, - 0x73, 0x76, 0x61, 0x72, 0x69, 0x65, 0x74, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x6c, 0x69, 0x6b, 0x65, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x63, - 0x6f, 0x6d, 0x70, 0x72, 0x69, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x61, 0x6e, - 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x75, 0x70, - 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x62, - 0x65, 0x69, 0x6e, 0x67, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x62, 0x65, 0x63, - 0x61, 0x6d, 0x65, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, - 0x64, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x6d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x3e, - 0x3c, 0x6c, 0x69, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x65, 0x76, - 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x65, 0x78, 0x70, - 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x61, - 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x61, 0x20, 0x77, 0x69, 0x64, 0x65, 0x20, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x6f, 0x6e, 0x20, 0x62, 0x65, 0x68, 0x61, 0x6c, 0x66, 0x20, - 0x6f, 0x66, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, - 0x22, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, - 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x3c, - 0x2f, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x73, 0x61, - 0x69, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x77, 0x68, 0x69, 0x6c, - 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x68, 0x79, 0x70, 0x6f, 0x74, - 0x68, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, - 0x6f, 0x70, 0x68, 0x65, 0x72, 0x73, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x69, 0x6e, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, - 0x74, 0x6f, 0x77, 0x65, 0x72, 0x65, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, - 0x6e, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, - 0x68, 0x65, 0x20, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, - 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x72, 0x65, 0x6a, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x6d, 0x70, 0x6c, - 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, 0x76, 0x65, 0x6e, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, - 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x77, 0x61, 0x73, 0x20, 0x70, 0x72, 0x6f, - 0x62, 0x61, 0x62, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x62, 0x65, 0x74, - 0x77, 0x65, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x6f, 0x72, - 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x4f, 0x63, 0x65, 0x61, 0x6e, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x27, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x79, 0x65, 0x61, - 0x72, 0x73, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x72, 0x65, - 0x6d, 0x65, 0x6c, 0x79, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, - 0x0a, 0x61, 0x6e, 0x20, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x6f, - 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x73, 0x70, - 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x73, 0x75, 0x66, - 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x74, 0x68, 0x65, 0x20, - 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x61, 0x6e, 0x63, 0x6f, 0x6e, 0x76, 0x65, - 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, - 0x65, 0x78, 0x74, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, - 0x64, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, - 0x61, 0x72, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x61, - 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, - 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x67, 0x69, 0x76, - 0x65, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x65, 0x78, 0x70, 0x65, 0x6e, - 0x64, 0x69, 0x74, 0x75, 0x72, 0x65, 0x73, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x74, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, - 0x61, 0x73, 0x69, 0x73, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x3d, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x6f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, - 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x61, - 0x73, 0x73, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x73, 0x22, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x6e, 0x6f, 0x72, 0x74, - 0x68, 0x77, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x3c, 0x2f, 0x64, 0x69, 0x76, - 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x22, 0x3e, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, - 0x79, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x62, 0x65, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, - 0x73, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, - 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x74, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x73, 0x75, - 0x70, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x69, 0x73, 0x20, 0x6d, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x77, 0x61, 0x73, 0x20, 0x69, 0x6e, - 0x76, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x69, 0x6e, 0x67, 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x20, 0x61, 0x74, 0x73, 0x74, 0x75, 0x64, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x74, - 0x65, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, - 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x72, 0x65, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x61, 0x6e, 0x64, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x65, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x64, 0x65, 0x66, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x72, - 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x79, 0x20, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x6f, 0x66, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x79, 0x65, 0x61, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, - 0x67, 0x65, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x75, 0x64, 0x79, 0x20, 0x6f, - 0x66, 0x3c, 0x75, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x77, - 0x68, 0x65, 0x72, 0x65, 0x20, 0x68, 0x65, 0x20, 0x77, 0x61, 0x73, 0x3c, 0x6c, - 0x69, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x66, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x68, 0x65, 0x20, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x65, 0x72, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x3a, 0x74, 0x65, 0x72, 0x72, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x20, - 0x6f, 0x66, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x3e, 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x20, 0x45, 0x6d, 0x70, 0x69, 0x72, 0x65, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x49, - 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x2c, 0x68, 0x6f, - 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x69, 0x73, 0x20, - 0x74, 0x79, 0x70, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x61, 0x6e, 0x64, 0x20, - 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, 0x66, 0x65, 0x28, 0x61, 0x6c, 0x73, 0x6f, - 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x3e, 0x3c, 0x75, 0x6c, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x6c, 0x79, 0x20, 0x65, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x65, 0x65, 0x6d, 0x20, 0x74, 0x6f, 0x20, 0x68, - 0x61, 0x76, 0x65, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x6e, - 0x6f, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x20, 0x62, 0x79, 0x49, 0x6e, - 0x20, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x2c, 0x62, 0x72, 0x6f, - 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x72, 0x65, 0x66, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x6d, 0x69, 0x6c, 0x69, 0x74, 0x61, 0x72, - 0x79, 0x20, 0x61, 0x6e, 0x64, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x69, 0x63, 0x61, - 0x6c, 0x6c, 0x79, 0x73, 0x65, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x69, - 0x6e, 0x67, 0x61, 0x72, 0x65, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, - 0x79, 0x76, 0x69, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x76, 0x65, 0x72, - 0x28, 0x29, 0x3b, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x63, - 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x65, 0x76, 0x6f, - 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x61, 0x6e, 0x20, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6e, 0x6f, 0x72, 0x74, 0x68, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x77, 0x61, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x77, 0x69, 0x73, 0x65, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, - 0x20, 0x6f, 0x66, 0x68, 0x61, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, - 0x65, 0x6e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x74, 0x68, 0x65, 0x20, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x61, 0x72, 0x65, 0x20, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x20, 0x6f, 0x66, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x20, - 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x64, - 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x61, 0x72, - 0x65, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x63, 0x6f, 0x72, - 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x77, 0x61, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x6e, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x70, - 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x74, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x66, 0x6f, - 0x72, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x20, 0x6f, 0x66, - 0x61, 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x79, 0x73, - 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x65, 0x64, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x65, 0x78, 0x74, 0x77, 0x61, 0x73, - 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x73, 0x75, 0x6d, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x72, 0x65, 0x61, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x69, - 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x73, 0x69, - 0x73, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, - 0x6e, 0x73, 0x65, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x66, - 0x6f, 0x72, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x74, 0x77, 0x6f, - 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x63, - 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x61, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x61, 0x70, 0x70, - 0x65, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x6d, 0x61, 0x72, 0x67, - 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x31, 0x2f, 0x5e, 0x5c, 0x73, 0x2b, - 0x7c, 0x5c, 0x73, 0x2b, 0x24, 0x2f, 0x67, 0x65, 0x29, 0x7b, 0x74, 0x68, 0x72, - 0x6f, 0x77, 0x20, 0x65, 0x7d, 0x3b, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x20, 0x6f, 0x66, 0x74, 0x77, 0x6f, 0x20, 0x73, 0x65, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x65, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, - 0x61, 0x6e, 0x64, 0x77, 0x68, 0x6f, 0x20, 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, - 0x65, 0x6e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x64, 0x65, 0x61, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x61, 0x6c, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x09, - 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6d, 0x70, - 0x65, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x67, 0x6c, 0x69, - 0x73, 0x68, 0x20, 0x28, 0x55, 0x4b, 0x29, 0x65, 0x6e, 0x67, 0x6c, 0x69, 0x73, - 0x68, 0x20, 0x28, 0x55, 0x53, 0x29, 0xd0, 0x9c, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, - 0xb3, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xa1, 0xd1, 0x80, 0xd0, 0xbf, 0xd1, 0x81, - 0xd0, 0xba, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x80, 0xd0, 0xbf, 0xd1, 0x81, 0xd0, - 0xba, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x80, 0xd0, 0xbf, 0xd1, 0x81, 0xd0, 0xba, - 0xd0, 0xbe, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, - 0xa9, 0xe6, 0xad, 0xa3, 0xe9, 0xab, 0x94, 0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87, - 0xe7, 0xae, 0x80, 0xe4, 0xbd, 0x93, 0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87, 0xe7, - 0xb9, 0x81, 0xe4, 0xbd, 0x93, 0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87, 0xe6, 0x9c, - 0x89, 0xe9, 0x99, 0x90, 0xe5, 0x85, 0xac, 0xe5, 0x8f, 0xb8, 0xe4, 0xba, 0xba, - 0xe6, 0xb0, 0x91, 0xe6, 0x94, 0xbf, 0xe5, 0xba, 0x9c, 0xe9, 0x98, 0xbf, 0xe9, - 0x87, 0x8c, 0xe5, 0xb7, 0xb4, 0xe5, 0xb7, 0xb4, 0xe7, 0xa4, 0xbe, 0xe4, 0xbc, - 0x9a, 0xe4, 0xb8, 0xbb, 0xe4, 0xb9, 0x89, 0xe6, 0x93, 0x8d, 0xe4, 0xbd, 0x9c, - 0xe7, 0xb3, 0xbb, 0xe7, 0xbb, 0x9f, 0xe6, 0x94, 0xbf, 0xe7, 0xad, 0x96, 0xe6, - 0xb3, 0x95, 0xe8, 0xa7, 0x84, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x63, - 0x69, 0xc3, 0xb3, 0x6e, 0x68, 0x65, 0x72, 0x72, 0x61, 0x6d, 0x69, 0x65, 0x6e, - 0x74, 0x61, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0xc3, 0xb3, 0x6e, 0x69, - 0x63, 0x6f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x63, 0x69, 0xc3, 0xb3, - 0x6e, 0x63, 0x6c, 0x61, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x64, 0x6f, 0x73, - 0x63, 0x6f, 0x6e, 0x6f, 0x63, 0x69, 0x6d, 0x69, 0x65, 0x6e, 0x74, 0x6f, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x72, 0x65, - 0x6c, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x61, 0x64, 0x61, 0x73, 0x69, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0xc3, 0xa1, 0x74, 0x69, 0x63, 0x61, 0x72, 0x65, 0x6c, 0x61, - 0x63, 0x69, 0x6f, 0x6e, 0x61, 0x64, 0x6f, 0x73, 0x64, 0x65, 0x70, 0x61, 0x72, - 0x74, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x74, 0x72, 0x61, 0x62, 0x61, 0x6a, - 0x61, 0x64, 0x6f, 0x72, 0x65, 0x73, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x61, - 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x61, 0x79, 0x75, 0x6e, 0x74, 0x61, 0x6d, 0x69, - 0x65, 0x6e, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x63, 0x61, 0x64, 0x6f, 0x4c, 0x69, - 0x62, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0xc3, 0xa1, 0x63, 0x74, 0x65, 0x6e, - 0x6f, 0x73, 0x68, 0x61, 0x62, 0x69, 0x74, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x65, - 0x73, 0x63, 0x75, 0x6d, 0x70, 0x6c, 0x69, 0x6d, 0x69, 0x65, 0x6e, 0x74, 0x6f, - 0x72, 0x65, 0x73, 0x74, 0x61, 0x75, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x73, 0x64, - 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, - 0x6e, 0x73, 0x65, 0x63, 0x75, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x72, 0xc3, 0xb3, 0x6e, 0x69, 0x63, 0x61, 0x61, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x64, 0x65, 0x73, 0x63, 0x6f, - 0x6e, 0x65, 0x63, 0x74, 0x61, 0x64, 0x6f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x7a, 0x61, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x63, - 0x69, 0xc3, 0xb3, 0x6e, 0x65, 0x6e, 0x63, 0x69, 0x63, 0x6c, 0x6f, 0x70, 0x65, - 0x64, 0x69, 0x61, 0x65, 0x6e, 0x66, 0x65, 0x72, 0x6d, 0x65, 0x64, 0x61, 0x64, - 0x65, 0x73, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x6f, - 0x73, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x73, - 0x69, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x65, 0x73, 0x73, 0x75, - 0x62, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x61, 0xd1, 0x82, 0xd0, - 0xbe, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xa0, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x81, 0xd0, 0xb8, 0xd0, 0xb8, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, - 0xb1, 0xd0, 0xbe, 0xd1, 0x82, 0xd1, 0x8b, 0xd0, 0xb1, 0xd0, 0xbe, 0xd0, 0xbb, - 0xd1, 0x8c, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xb5, - 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, - 0xb8, 0xd1, 0x85, 0xd1, 0x81, 0xd0, 0xbb, 0xd1, 0x83, 0xd1, 0x87, 0xd0, 0xb0, - 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xb9, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, - 0x81, 0xd0, 0xb2, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, 0xb0, - 0xd0, 0xa0, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x81, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, - 0x9c, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb2, 0xd0, 0xb5, 0xd0, 0xb4, - 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, - 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xbe, - 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, - 0xbd, 0xd0, 0xbd, 0xd1, 0x8b, 0xd1, 0x85, 0xd0, 0xb4, 0xd0, 0xbe, 0xd0, 0xbb, - 0xd0, 0xb6, 0xd0, 0xbd, 0xd1, 0x8b, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, - 0xbd, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0x9c, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xba, - 0xd0, 0xb2, 0xd1, 0x8b, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, - 0xb5, 0xd0, 0xb9, 0xd0, 0x9c, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb2, - 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbd, 0xd1, - 0x8b, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, - 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, - 0xb4, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xb6, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x83, - 0xd1, 0x81, 0xd0, 0xbb, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, - 0xb5, 0xd0, 0xbf, 0xd0, 0xb5, 0xd1, 0x80, 0xd1, 0x8c, 0xd0, 0x9e, 0xd0, 0xb4, - 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, - 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x83, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb1, - 0xd0, 0xbe, 0xd1, 0x82, 0xd1, 0x83, 0xd0, 0xb0, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, - 0xb5, 0xd0, 0xbb, 0xd1, 0x8f, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xb1, - 0xd1, 0x89, 0xd0, 0xb5, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, - 0xb3, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xb3, - 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb0, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, - 0xb8, 0xd0, 0xb4, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb9, - 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, - 0x85, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd1, 0x88, 0xd0, 0xbe, 0xd0, 0xbf, - 0xd1, 0x80, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xb2, 0xd1, 0x81, 0xd1, - 0x81, 0xd1, 0x8b, 0xd0, 0xbb, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xb0, - 0xd0, 0xb6, 0xd0, 0xb4, 0xd1, 0x8b, 0xd0, 0xb9, 0xd0, 0xb2, 0xd0, 0xbb, 0xd0, - 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xb3, 0xd1, 0x80, 0xd1, 0x83, - 0xd0, 0xbf, 0xd0, 0xbf, 0xd1, 0x8b, 0xd0, 0xb2, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, - 0xb0, 0xd0, 0xbb, 0xd0, 0xbf, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb2, 0xd1, 0x8b, - 0xd0, 0xb9, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1, 0x82, 0xd1, - 0x8c, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x8c, 0xd0, 0xb3, 0xd0, 0xb8, - 0xd0, 0xbf, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, - 0xb1, 0xd0, 0xb8, 0xd0, 0xb7, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xbe, - 0xd1, 0x81, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xbe, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x82, 0xd0, 0xba, 0xd1, 0x83, - 0xd0, 0xbf, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xb4, 0xd0, 0xbe, 0xd0, - 0xbb, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbc, - 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x85, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, - 0xb0, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xa0, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xa2, 0xd0, 0xbe, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, - 0xba, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x81, 0xd0, 0xb5, - 0xd0, 0xbc, 0xd0, 0xb2, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, - 0xb9, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, 0xb0, 0xd0, 0xbb, 0xd0, 0xb0, - 0xd1, 0x81, 0xd0, 0xbf, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xba, 0xd1, - 0x81, 0xd0, 0xbb, 0xd1, 0x83, 0xd0, 0xb6, 0xd0, 0xb1, 0xd1, 0x8b, 0xd1, 0x81, - 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, 0xbf, 0xd0, - 0xb5, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, - 0xbc, 0xd0, 0xbe, 0xd1, 0x89, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xb9, - 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x87, 0xd0, - 0xb5, 0xd0, 0xbc, 0xd1, 0x83, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbe, - 0xd1, 0x89, 0xd1, 0x8c, 0xd0, 0xb4, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xb6, 0xd0, - 0xbd, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x81, 0xd1, 0x8b, 0xd0, 0xbb, 0xd0, 0xba, - 0xd0, 0xb8, 0xd0, 0xb1, 0xd1, 0x8b, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, - 0xbe, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xbd, 0xd1, 0x8b, 0xd0, 0xb5, - 0xd0, 0xbc, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, - 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xba, 0xd1, 0x82, 0xd0, 0xa1, - 0xd0, 0xb5, 0xd0, 0xb9, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbc, 0xd0, - 0xbe, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xb0, - 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, - 0xbb, 0xd0, 0xb0, 0xd0, 0xb9, 0xd0, 0xbd, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, 0x80, - 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x80, 0xd1, - 0x81, 0xd0, 0xb8, 0xd1, 0x8f, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, - 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x84, 0xd0, 0xb8, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, - 0xbc, 0xd1, 0x8b, 0xd1, 0x83, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbd, - 0xd1, 0x8f, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, 0xbd, 0xd1, 0x8b, 0xd1, - 0x85, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x82, 0xd1, 0x8c, - 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd1, 0x8e, 0xd1, - 0x8f, 0xd0, 0xbd, 0xd0, 0xb2, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x8f, 0xd0, 0xbc, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x8c, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xbd, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb8, 0xd1, 0x85, 0xd0, 0xb4, 0xd0, 0xb0, - 0xd0, 0xbd, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, 0xb7, 0xd0, 0xbd, 0xd0, - 0xb0, 0xd1, 0x87, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xbb, - 0xd1, 0x8c, 0xd0, 0xb7, 0xd1, 0x8f, 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, - 0x83, 0xd0, 0xbc, 0xd0, 0xb0, 0xd0, 0xa2, 0xd0, 0xb5, 0xd0, 0xbf, 0xd0, 0xb5, - 0xd1, 0x80, 0xd1, 0x8c, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x8f, 0xd1, - 0x86, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, 0xb0, 0xd1, 0x89, 0xd0, 0xb8, 0xd1, 0x82, - 0xd1, 0x8b, 0xd0, 0x9b, 0xd1, 0x83, 0xd1, 0x87, 0xd1, 0x88, 0xd0, 0xb8, 0xd0, - 0xb5, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0x85, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x85, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, - 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb2, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, - 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xae, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, - 0x8b, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xb9, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x87, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0x9f, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xad, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x81, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x98, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x9f, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0x85, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0x85, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xae, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0x9d, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xa1, 0xe0, - 0xa4, 0xbc, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9f, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x95, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb5, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, - 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0x97, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xa0, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x95, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb7, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb5, - 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8b, 0xe0, - 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb9, 0xe0, - 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, - 0x9a, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, - 0x9c, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x98, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0x9a, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x97, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x97, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xb9, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa1, 0xe0, - 0xa4, 0xbc, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x98, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, - 0xa4, 0x9a, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, - 0x80, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbc, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x9c, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x9f, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbc, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, - 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb2, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x96, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x85, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xab, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0x9c, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0xa4, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb5, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, - 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x8b, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xac, - 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x9c, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xac, - 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x8c, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb9, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x82, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa5, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xd8, 0xaa, 0xd8, 0xb3, 0xd8, - 0xaa, 0xd8, 0xb7, 0xd9, 0x8a, 0xd8, 0xb9, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, - 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xa9, 0xd8, 0xa8, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, - 0xb3, 0xd8, 0xb7, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb5, 0xd9, 0x81, - 0xd8, 0xad, 0xd8, 0xa9, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xb6, 0xd9, - 0x8a, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xae, 0xd8, 0xa7, 0xd8, 0xb5, - 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb2, 0xd9, 0x8a, 0xd8, - 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xa9, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa8, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, 0x88, 0xd8, 0xaf, 0xd8, 0xa8, - 0xd8, 0xb1, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xac, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaf, 0xd9, 0x88, 0xd9, 0x84, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x85, 0xd9, 0x88, 0xd9, 0x82, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, - 0xd8, 0xb1, 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd8, - 0xb1, 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd9, 0x88, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb0, 0xd9, 0x87, 0xd8, - 0xa7, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xad, 0xd9, 0x8a, 0xd8, 0xa7, - 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xad, 0xd9, 0x82, 0xd9, 0x88, 0xd9, - 0x82, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd8, 0xb1, 0xd9, 0x8a, 0xd9, 0x85, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x82, 0xd9, - 0x85, 0xd8, 0xad, 0xd9, 0x81, 0xd9, 0x88, 0xd8, 0xb8, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xab, 0xd8, 0xa7, 0xd9, 0x86, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, - 0xb4, 0xd8, 0xa7, 0xd9, 0x87, 0xd8, 0xaf, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, - 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xa3, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x82, 0xd8, 0xb1, 0xd8, 0xa2, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb4, - 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xad, 0xd9, - 0x88, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd8, 0xaf, - 0xd9, 0x8a, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, 0xb3, 0xd8, - 0xb1, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x88, - 0xd9, 0x85, 0xd9, 0x85, 0xd8, 0xac, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xb9, 0xd8, - 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xad, 0xd9, 0x85, 0xd9, 0x86, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x86, 0xd9, 0x82, 0xd8, 0xa7, 0xd8, 0xb7, 0xd9, - 0x81, 0xd9, 0x84, 0xd8, 0xb3, 0xd8, 0xb7, 0xd9, 0x8a, 0xd9, 0x86, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x88, 0xd9, 0x8a, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaf, 0xd9, 0x86, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xb1, - 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xb1, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xb6, 0xd8, 0xaa, 0xd8, 0xad, 0xd9, 0x8a, - 0xd8, 0xa7, 0xd8, 0xaa, 0xd9, 0x8a, 0xd8, 0xa8, 0xd8, 0xaa, 0xd9, 0x88, 0xd9, - 0x82, 0xd9, 0x8a, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd9, 0x88, - 0xd9, 0x84, 0xd9, 0x89, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa8, 0xd8, 0xb1, 0xd9, - 0x8a, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x84, 0xd8, 0xa7, - 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, - 0xb7, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb4, 0xd8, 0xae, 0xd8, 0xb5, 0xd9, 0x8a, - 0xd8, 0xb3, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xab, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xab, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xb5, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xad, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xab, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb2, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xae, 0xd9, 0x84, 0xd9, 0x8a, 0xd8, 0xac, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, - 0xd9, 0x85, 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, - 0xa7, 0xd9, 0x85, 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd9, 0x85, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, - 0xb9, 0xd8, 0xa9, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd9, 0x87, 0xd8, 0xaf, - 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xa6, 0xd9, 0x8a, 0xd8, - 0xb3, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaf, 0xd8, 0xae, 0xd9, 0x88, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x86, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xaf, 0xd9, 0x88, 0xd8, 0xb1, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaf, 0xd8, 0xb1, 0xd9, 0x88, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, 0xb3, - 0xd8, 0xaa, 0xd8, 0xba, 0xd8, 0xb1, 0xd9, 0x82, 0xd8, 0xaa, 0xd8, 0xb5, 0xd8, - 0xa7, 0xd9, 0x85, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa8, - 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, - 0xb8, 0xd9, 0x8a, 0xd9, 0x85, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x74, 0x61, 0x69, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3d, 0x22, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, - 0x64, 0x6f, 0x6d, 0x28, 0x29, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6d, 0x70, 0x6f, - 0x72, 0x61, 0x72, 0x79, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x73, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x43, - 0x68, 0x69, 0x6c, 0x64, 0x28, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x74, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x22, 0x3e, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x69, 0x6e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, - 0x69, 0x63, 0x6f, 0x22, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x3a, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, 0x61, 0x73, 0x73, 0x61, 0x63, 0x68, 0x75, - 0x73, 0x65, 0x74, 0x74, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x3d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x20, 0x61, 0x73, 0x70, 0x72, 0x6f, 0x6e, 0x75, 0x6e, 0x63, 0x69, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x3a, 0x23, 0x66, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, - 0x6c, 0x65, 0x66, 0x74, 0x3a, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x6d, 0x69, 0x73, 0x63, 0x65, 0x6c, 0x6c, 0x61, - 0x6e, 0x65, 0x6f, 0x75, 0x73, 0x26, 0x6c, 0x74, 0x3b, 0x2f, 0x6d, 0x61, 0x74, - 0x68, 0x26, 0x67, 0x74, 0x3b, 0x70, 0x73, 0x79, 0x63, 0x68, 0x6f, 0x6c, 0x6f, - 0x67, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x75, 0x6c, 0x61, 0x72, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x61, 0x73, 0x20, 0x6f, 0x70, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x53, 0x75, 0x70, 0x72, 0x65, 0x6d, 0x65, 0x20, - 0x43, 0x6f, 0x75, 0x72, 0x74, 0x6f, 0x63, 0x63, 0x61, 0x73, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x4e, 0x6f, 0x72, 0x74, 0x68, 0x20, 0x41, 0x6d, - 0x65, 0x72, 0x69, 0x63, 0x61, 0x70, 0x78, 0x3b, 0x62, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x6f, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x6e, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x74, 0x61, 0x69, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x74, 0x6f, 0x4c, 0x6f, 0x77, 0x65, 0x72, - 0x43, 0x61, 0x73, 0x65, 0x28, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, - 0x75, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x46, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x2c, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x3d, 0x22, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x63, 0x6f, 0x6e, 0x73, 0x63, 0x69, 0x6f, 0x75, - 0x73, 0x6e, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x64, 0x69, 0x74, 0x65, 0x72, 0x72, - 0x61, 0x6e, 0x65, 0x61, 0x6e, 0x65, 0x78, 0x74, 0x72, 0x61, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x61, 0x73, 0x73, 0x61, 0x73, 0x73, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, - 0x6e, 0x73, 0x69, 0x76, 0x65, 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, 0x75, 0x6c, 0x3e, 0x0a, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, - 0x68, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x68, 0x72, 0x65, 0x66, 0x77, 0x61, 0x73, 0x20, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x53, 0x61, 0x6e, 0x20, 0x46, 0x72, 0x61, 0x6e, - 0x63, 0x69, 0x73, 0x63, 0x6f, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x29, 0x7b, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, - 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x6f, 0x70, 0x68, 0x69, 0x73, 0x74, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x64, 0x6d, 0x61, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, - 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x68, 0x69, 0x70, 0x73, 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x28, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x54, 0x68, 0x69, 0x73, 0x20, 0x61, 0x72, 0x74, - 0x69, 0x63, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, - 0x63, 0x61, 0x73, 0x65, 0x73, 0x70, 0x61, 0x72, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x47, 0x72, 0x65, 0x61, 0x74, 0x20, 0x42, 0x72, - 0x69, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, - 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, - 0x64, 0x65, 0x72, 0x3d, 0x22, 0x3b, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, - 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x75, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x61, 0x72, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x09, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, - 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x27, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x22, - 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x72, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x70, 0x6f, 0x70, - 0x75, 0x6c, 0x61, 0x72, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x3a, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x2e, 0x67, 0x69, 0x66, 0x22, 0x20, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3d, 0x22, 0x3c, 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x20, - 0x73, 0x72, 0x63, 0x3d, 0x22, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, - 0x61, 0x74, 0x65, 0x6c, 0x79, 0x70, 0x61, 0x72, 0x6c, 0x69, 0x61, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x72, 0x79, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, - 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x70, 0x72, 0x65, 0x64, 0x6f, 0x6d, 0x69, 0x6e, - 0x61, 0x6e, 0x74, 0x6c, 0x79, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x7c, 0x26, - 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, - 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, 0x61, - 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6f, 0x72, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x61, 0x6c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, - 0x3d, 0x22, 0x6f, 0x67, 0x3a, 0x2f, 0x78, 0x2d, 0x73, 0x68, 0x6f, 0x63, 0x6b, - 0x77, 0x61, 0x76, 0x65, 0x2d, 0x64, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x72, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x4e, 0x65, 0x76, 0x65, 0x72, 0x74, 0x68, 0x65, - 0x6c, 0x65, 0x73, 0x73, 0x2c, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x41, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x62, 0x65, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, 0x20, - 0x61, 0x66, 0x74, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x2c, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x64, 0x20, 0x61, 0x73, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, - 0x62, 0x6f, 0x64, 0x79, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x61, 0x63, 0x74, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, - 0x69, 0x64, 0x75, 0x61, 0x6c, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, - 0x74, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x76, 0x69, 0x65, 0x77, 0x68, 0x6f, 0x6d, 0x6f, 0x73, 0x65, 0x78, 0x75, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x72, 0x73, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x3a, 0x20, 0x23, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x6e, 0x74, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x72, 0x65, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x64, 0x65, 0x72, 0x65, 0x64, 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x49, 0x6e, 0x64, 0x6f, 0x2d, 0x45, 0x75, 0x72, - 0x6f, 0x70, 0x65, 0x61, 0x6e, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x73, 0x20, 0x6f, 0x66, 0x61, 0x72, 0x65, 0x20, 0x73, 0x6f, 0x6d, 0x65, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x72, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x4e, 0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, 0x6b, - 0x20, 0x43, 0x69, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, - 0x69, 0x63, 0x69, 0x61, 0x6e, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, - 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, - 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x3d, 0x22, 0x30, 0x22, 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, - 0x67, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x28, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, - 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x6c, 0x79, 0x2e, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x66, 0x6f, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, - 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6e, 0x64, - 0x61, 0x73, 0x68, 0x3b, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, - 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x65, 0x71, 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x75, 0x73, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x68, 0x72, - 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, - 0x67, 0x65, 0x20, 0x6f, 0x66, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x6c, 0x65, - 0x73, 0x73, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, - 0x67, 0x65, 0x20, 0x6f, 0x66, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, - 0x70, 0x74, 0x20, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x6a, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x74, 0x77, 0x6f, 0x20, 0x64, 0x69, 0x66, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x74, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x69, 0x64, 0x65, 0x20, 0x72, 0x61, 0x6e, - 0x67, 0x65, 0x20, 0x6f, 0x66, 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x73, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x77, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6d, 0x64, - 0x61, 0x73, 0x68, 0x3b, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, - 0x61, 0x63, 0x74, 0x65, 0x72, 0x61, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x66, 0x61, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x6e, 0x74, 0x6c, 0x79, 0x6f, 0x6e, 0x6d, 0x6f, 0x75, 0x73, 0x65, 0x6f, - 0x76, 0x65, 0x72, 0x3d, 0x22, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x3d, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x3b, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x73, 0x65, 0x65, 0x6d, 0x73, 0x20, 0x74, 0x6f, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x61, 0x72, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x28, 0x29, 0x20, 0x7b, 0x74, 0x6f, 0x6f, 0x6b, 0x20, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x20, 0x69, 0x6e, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x6d, 0x65, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, - 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x69, 0x73, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x74, - 0x74, 0x65, 0x6d, 0x70, 0x74, 0x67, 0x72, 0x65, 0x61, 0x74, 0x20, 0x64, 0x65, - 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, - 0x75, 0x6c, 0x6c, 0x79, 0x20, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x32, 0x30, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x2c, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x73, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, - 0x79, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, - 0x69, 0x74, 0x20, 0x69, 0x73, 0x44, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x72, 0x79, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, - 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x6d, 0x61, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x20, 0x74, 0x6f, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x2c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x6f, 0x75, - 0x6c, 0x64, 0x20, 0x62, 0x65, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x27, 0x73, 0x20, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x28, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, - 0x6c, 0x61, 0x72, 0x6c, 0x79, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, - 0x65, 0x66, 0x74, 0x22, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x62, 0x61, 0x73, 0x69, 0x73, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, - 0x74, 0x79, 0x20, 0x6f, 0x66, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x64, 0x75, 0x63, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x6a, 0x75, 0x72, 0x69, 0x73, 0x64, 0x69, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x6d, 0x6f, 0x75, 0x73, 0x65, - 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x4e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, - 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, - 0x6e, 0x69, 0x74, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x6d, 0x20, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x2e, - 0x64, 0x74, 0x64, 0x22, 0x3e, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x20, 0x61, 0x72, 0x65, 0x75, 0x6e, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x65, 0x64, 0x69, 0x73, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, - 0x61, 0x72, 0x20, 0x74, 0x6f, 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, - 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, - 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x09, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x65, 0x20, 0x74, 0x79, 0x70, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, - 0x79, 0x20, 0x66, 0x6f, 0x72, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, - 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, - 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x20, 0x74, 0x6f, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, - 0x20, 0x79, 0x65, 0x61, 0x72, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x68, 0x61, 0x76, 0x65, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, - 0x79, 0x65, 0x61, 0x72, 0x73, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x09, 0x09, 0x3c, 0x75, 0x6c, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x39, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x2c, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x65, 0x72, 0x73, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x65, 0x20, - 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x65, 0x64, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x74, 0x65, 0x62, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x20, - 0x61, 0x62, 0x6f, 0x75, 0x74, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x6c, - 0x65, 0x66, 0x74, 0x3a, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x61, 0x73, 0x53, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x73, 0x65, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x72, 0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x61, 0x73, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x20, 0x70, 0x61, - 0x72, 0x74, 0x20, 0x6f, 0x66, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x2d, 0x63, - 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x73, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x63, 0x61, 0x73, 0x65, 0x2c, 0x77, 0x61, 0x73, 0x20, 0x61, 0x70, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x65, 0x64, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x61, - 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x6f, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, - 0x61, 0x72, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x61, 0x6c, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x61, 0x6c, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x61, - 0x6c, 0x77, 0x61, 0x79, 0x73, 0x61, 0x72, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, - 0x68, 0x79, 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x63, 0x69, 0x76, 0x69, 0x6c, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, - 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x63, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, - 0x22, 0x22, 0x20, 0x2f, 0x3e, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x4d, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x73, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, - 0x6e, 0x69, 0x74, 0x65, 0x64, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x74, - 0x72, 0x61, 0x63, 0x65, 0x64, 0x69, 0x73, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x6f, - 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x66, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x6c, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x65, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x69, 0x73, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x6c, 0x69, - 0x74, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, - 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x73, 0x74, - 0x6f, 0x72, 0x69, 0x65, 0x73, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x61, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x69, 0x74, 0x73, 0x77, 0x61, 0x73, 0x20, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6e, - 0x63, 0x69, 0x70, 0x61, 0x6c, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x61, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x65, 0x64, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x20, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x20, 0x74, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x72, 0x61, - 0x64, 0x75, 0x61, 0x74, 0x65, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, - 0x65, 0x20, 0x74, 0x77, 0x6f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x64, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x20, 0x61, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x66, 0x75, 0x6e, 0x64, 0x61, 0x6d, 0x65, 0x6e, - 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x77, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x63, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x6c, 0x79, 0x2c, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x6c, 0x69, - 0x74, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, - 0x72, 0x74, 0x20, 0x6f, 0x66, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x32, 0x30, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x2e, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x68, 0x61, 0x72, - 0x74, 0x62, 0x65, 0x61, 0x74, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, - 0x73, 0x74, 0x61, 0x6e, 0x64, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x73, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x68, 0x61, - 0x6c, 0x66, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, - 0x74, 0x75, 0x72, 0x61, 0x6c, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x64, 0x65, 0x72, 0x65, 0x64, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, - 0x72, 0x69, 0x7a, 0x65, 0x64, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x76, 0x61, 0x6c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x77, 0x61, 0x73, 0x20, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x65, 0x64, 0x65, 0x64, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x20, 0x61, 0x72, 0x65, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x65, 0x73, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x64, 0x66, 0x72, 0x65, 0x65, 0x20, 0x73, 0x6f, 0x66, - 0x74, 0x77, 0x61, 0x72, 0x65, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x73, 0x74, - 0x72, 0x6f, 0x79, 0x65, 0x64, 0x61, 0x77, 0x61, 0x79, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x74, 0x68, 0x65, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x74, 0x68, 0x65, 0x79, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x20, 0x61, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x70, 0x6f, 0x77, - 0x65, 0x72, 0x66, 0x75, 0x6c, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x20, 0x61, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x74, 0x79, 0x20, 0x6f, 0x66, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x69, 0x73, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x67, - 0x68, 0x74, 0x20, 0x74, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x65, 0x6e, 0x64, 0x77, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x6e, 0x6f, - 0x75, 0x6e, 0x63, 0x65, 0x64, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x61, 0x6e, 0x74, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x73, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x74, 0x68, 0x65, 0x20, 0x63, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x44, 0x4f, 0x20, 0x4e, 0x4f, 0x54, 0x20, - 0x41, 0x4c, 0x54, 0x45, 0x52, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x2f, 0x3f, - 0x73, 0x6f, 0x72, 0x74, 0x3d, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x64, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x73, 0x69, - 0x73, 0x20, 0x66, 0x6f, 0x72, 0x68, 0x61, 0x73, 0x20, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, - 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x6c, 0x79, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, - 0x74, 0x68, 0x6f, 0x73, 0x65, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x73, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x41, 0x66, - 0x72, 0x69, 0x63, 0x61, 0x6e, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x61, 0x6d, 0x65, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x6e, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x63, 0x61, 0x73, 0x65, 0x3b, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, - 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x20, 0x61, 0x6e, 0x64, 0x3b, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, - 0x61, 0x72, 0x67, 0x69, 0x6e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x62, 0x61, 0x68, 0x61, 0x73, 0x61, 0x20, 0x4d, - 0x65, 0x6c, 0x61, 0x79, 0x75, 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x20, 0x62, 0x6f, - 0x6b, 0x6d, 0xc3, 0xa5, 0x6c, 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x20, 0x6e, 0x79, - 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x73, 0x6c, 0x6f, 0x76, 0x65, 0x6e, 0xc5, 0xa1, - 0xc4, 0x8d, 0x69, 0x6e, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x63, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x63, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x22, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x61, 0x6d, 0x62, 0x69, - 0x67, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x27, 0x2c, 0x20, 0x27, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x6d, 0x75, - 0x6c, 0x74, 0x61, 0x6e, 0x65, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x6d, - 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x3c, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, 0x2d, 0x2d, 0x3e, - 0x0a, 0x3c, 0x2f, 0x3e, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, - 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, - 0x3e, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3d, 0x68, 0x74, 0x74, 0x70, - 0x25, 0x33, 0x41, 0x25, 0x32, 0x46, 0x25, 0x32, 0x46, 0x3c, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x74, 0x22, 0x20, 0x2f, 0x66, - 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x20, 0x7d, - 0x29, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, - 0x2e, 0x73, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x28, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, - 0x28, 0x29, 0x3b, 0x3c, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, 0x2d, - 0x2d, 0x3e, 0x0d, 0x0a, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x55, 0x6e, 0x66, 0x6f, 0x72, 0x74, 0x75, 0x6e, - 0x61, 0x74, 0x65, 0x6c, 0x79, 0x2c, 0x22, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, - 0x3b, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x2f, 0x66, 0x61, 0x76, 0x69, 0x63, - 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x3e, 0x3d, 0x27, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x27, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x3c, 0x6c, - 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x61, - 0x6e, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, - 0x66, 0x70, 0x74, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x22, 0x20, 0x0a, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x29, 0x20, 0x7b, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, 0x41, 0x63, 0x63, - 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x69, 0x64, - 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x6c, - 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x2e, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x6c, 0x79, - 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x74, 0x22, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x3d, 0x22, 0x6d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x2d, 0x2d, 0x3c, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, - 0x66, 0x5d, 0x2d, 0x2d, 0x3e, 0x50, 0x72, 0x69, 0x6d, 0x65, 0x20, 0x4d, 0x69, - 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, - 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, - 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x74, 0x68, 0x65, 0x20, 0x68, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x6e, 0x6d, - 0x6f, 0x75, 0x73, 0x65, 0x6f, 0x76, 0x65, 0x72, 0x3d, 0x22, 0x74, 0x68, 0x65, - 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x68, 0x72, - 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, - 0x61, 0x73, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, - 0x77, 0x61, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, - 0x64, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x61, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, - 0x65, 0x72, 0x65, 0x64, 0x3c, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, - 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x73, 0x20, - 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, - 0x3a, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, - 0x7b, 0x42, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x2e, 0x64, 0x74, 0x64, - 0x22, 0x3e, 0x0a, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x69, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x61, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x73, 0x29, 0x3b, - 0x20, 0x6a, 0x73, 0x2e, 0x69, 0x64, 0x20, 0x3d, 0x20, 0x69, 0x64, 0x22, 0x20, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, 0x72, - 0x65, 0x67, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x20, 0x43, 0x61, 0x74, 0x68, 0x6f, 0x6c, 0x69, - 0x63, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, - 0x6e, 0x74, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x2e, 0x67, 0x69, 0x66, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3d, 0x22, 0x31, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x61, 0x65, 0x6f, - 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x20, - 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x6a, 0x73, 0x22, 0x3e, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x63, 0x6f, 0x6d, 0x62, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x61, - 0x72, 0x67, 0x69, 0x6e, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x77, - 0x2e, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x28, - 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, - 0x3e, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x61, 0x49, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, - 0x61, 0x72, 0x2c, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, - 0x66, 0x74, 0x22, 0x20, 0x43, 0x7a, 0x65, 0x63, 0x68, 0x20, 0x52, 0x65, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x4b, - 0x69, 0x6e, 0x67, 0x64, 0x6f, 0x6d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x2e, 0x68, 0x74, 0x6d, 0x6c, - 0x22, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x29, 0x20, 0x7b, 0x63, 0x6f, 0x6d, - 0x65, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x3c, - 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, - 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, - 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x27, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x27, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, - 0x3c, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x74, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x28, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6b, - 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x09, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, - 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x3e, 0x3c, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x65, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x20, 0x76, - 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x66, - 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, - 0x20, 0x63, 0x61, 0x72, 0x62, 0x6f, 0x6e, 0x20, 0x64, 0x69, 0x6f, 0x78, 0x69, - 0x64, 0x65, 0x0a, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x2d, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x6f, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x6e, - 0x69, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, - 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x54, 0x69, 0xe1, 0xba, - 0xbf, 0x6e, 0x67, 0x20, 0x56, 0x69, 0xe1, 0xbb, 0x87, 0x74, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, - 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x3c, 0x77, 0x61, 0x73, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x65, 0x64, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, - 0x74, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x3e, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x63, 0x63, 0x6c, 0x65, 0x73, 0x69, 0x61, - 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x68, - 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x3c, 0x2f, 0x62, 0x6f, 0x64, - 0x79, 0x3e, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x68, 0x61, 0x73, 0x20, - 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x74, 0x68, 0x65, - 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x69, 0x6e, - 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x61, - 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x69, 0x77, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, - 0x65, 0x64, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x65, - 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, - 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x74, 0x6f, 0x20, 0x62, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x75, 0x73, 0x65, 0x64, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x6e, - 0x6f, 0x74, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, - 0x6c, 0x73, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, - 0x6d, 0x61, 0x6e, 0x79, 0x61, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x70, 0x61, - 0x72, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x6d, 0x70, 0x6f, 0x73, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x2e, 0x20, 0x48, 0x6f, - 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x64, - 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x41, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x62, - 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x73, - 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x3d, 0x22, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x70, 0x6f, - 0x73, 0x74, 0x22, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x6c, 0x69, 0x6b, 0x65, - 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, - 0x61, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x6c, - 0x73, 0x6f, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x61, 0x6e, 0x6e, 0x6f, 0x75, - 0x6e, 0x63, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x6c, 0x69, 0x67, - 0x6e, 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x6d, 0x61, 0x6e, - 0x79, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x66, 0x6f, - 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x65, - 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x69, 0x74, 0x20, 0x77, 0x61, - 0x73, 0x70, 0x74, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x0d, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, - 0x70, 0x22, 0x20, 0x69, 0x6e, 0x68, 0x61, 0x62, 0x69, 0x74, 0x61, 0x6e, 0x74, - 0x73, 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x20, 0x79, 0x65, 0x61, 0x72, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x6f, 0x6e, - 0x20, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x65, - 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x61, 0x72, 0x67, 0x75, - 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x61, 0x20, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x3a, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x72, 0x65, 0x62, 0x65, 0x73, 0x74, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x20, 0x66, 0x6f, 0x72, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x63, - 0x69, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x20, 0x3c, - 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, - 0x77, 0x61, 0x79, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x3b, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x3a, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, - 0x6f, 0x66, 0x69, 0x6e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, - 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x3c, 0x73, 0x70, 0x61, 0x6e, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x64, 0x65, 0x73, 0x63, 0x65, - 0x6e, 0x64, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x3c, 0x73, 0x70, 0x61, - 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x20, 0x61, 0x6c, - 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3c, 0x2f, - 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x61, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x68, 0x61, 0x73, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x62, 0x65, 0x65, - 0x6e, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x61, 0x6e, 0x20, 0x55, 0x6e, 0x69, - 0x6f, 0x6e, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x63, 0x65, 0x6e, 0x74, - 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x69, - 0x63, 0x75, 0x6c, 0x74, 0x56, 0x69, 0x63, 0x65, 0x20, 0x50, 0x72, 0x65, 0x73, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, - 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x66, 0x6f, 0x6e, 0x74, 0x2d, - 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x31, 0x31, 0x70, 0x78, 0x65, 0x78, 0x70, 0x6c, - 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0x20, 0x6f, 0x66, 0x77, 0x72, - 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x09, - 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x69, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x20, - 0x74, 0x6f, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x73, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x73, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x75, 0x74, 0x73, 0x69, - 0x64, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x73, - 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x74, 0x28, - 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x29, - 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x65, 0x6e, - 0x74, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x6e, 0x6f, - 0x70, 0x6c, 0x65, 0x77, 0x65, 0x72, 0x65, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x73, 0x65, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x31, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x69, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x64, 0x65, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, - 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x6f, - 0x66, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x75, 0x73, - 0x65, 0x64, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x68, - 0x61, 0x76, 0x65, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 0x62, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x61, 0x73, 0x20, 0x66, - 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x69, 0x65, 0x77, 0x20, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x69, 0x64, - 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x63, 0x61, - 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0d, - 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x78, 0x4d, 0x4c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x74, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x6c, 0x61, - 0x72, 0x67, 0x65, 0x73, 0x74, 0x76, 0x65, 0x72, 0x79, 0x20, 0x69, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x66, 0x6f, 0x72, 0x65, - 0x69, 0x67, 0x6e, 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x73, 0x65, - 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x65, 0x73, - 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x69, - 0x73, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x49, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, - 0x6f, 0x6d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x69, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x20, 0x61, 0x66, - 0x74, 0x65, 0x72, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x65, 0x64, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x65, 0x66, - 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x3c, 0x73, 0x70, - 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x70, 0x65, - 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x28, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0d, - 0x69, 0x66, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x69, - 0x66, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x4e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x41, 0x73, 0x73, 0x6f, 0x63, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x0a, 0x3c, 0x2f, 0x68, - 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, - 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x28, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, - 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, - 0x61, 0x6c, 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x6f, 0x73, 0x74, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, - 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x74, 0x68, 0x65, 0x20, 0x70, 0x75, 0x72, - 0x70, 0x6f, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x3a, 0x23, 0x66, 0x66, 0x66, 0x7d, 0x0a, 0x2e, 0x0a, 0x3c, 0x73, 0x70, - 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x66, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x3e, - 0x0d, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, - 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, - 0x65, 0x64, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3d, 0x22, 0x63, 0x65, 0x6c, 0x65, 0x62, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x62, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x20, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x75, 0x6e, 0x64, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x6f, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x3e, 0x3c, 0x21, - 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, 0x2d, 0x2d, 0x3e, 0x0a, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x69, - 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x74, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, - 0x6f, 0x66, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x65, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x20, 0x69, 0x6e, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, - 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x77, 0x61, 0x73, 0x20, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x68, 0x69, 0x73, 0x74, 0x68, 0x65, 0x20, - 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x6f, 0x6d, - 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x73, - 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x6c, 0x79, 0x20, - 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x0d, - 0x0a, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x66, 0x6f, 0x72, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, - 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x65, 0x73, 0x73, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x77, 0x65, 0x72, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x69, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x22, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x73, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x20, 0x6f, 0x66, - 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x6e, 0x6f, 0x22, - 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, - 0x6f, 0x66, 0x49, 0x49, 0x2c, 0x20, 0x48, 0x6f, 0x6c, 0x79, 0x20, 0x52, 0x6f, - 0x6d, 0x61, 0x6e, 0x69, 0x73, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x69, - 0x72, 0x20, 0x6f, 0x77, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, - 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x74, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x64, - 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x65, 0x20, 0x6f, - 0x66, 0x74, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x64, 0x74, 0x6f, 0x20, 0x65, - 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x67, 0x72, - 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x61, - 0x72, 0x65, 0x20, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, - 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x6e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, - 0x6e, 0x20, 0x61, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, - 0x2f, 0x75, 0x6c, 0x3e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x66, - 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, - 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, - 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x6e, - 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x63, 0x61, - 0x72, 0x72, 0x69, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x62, 0x79, 0x48, - 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, - 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, - 0x66, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, - 0x6c, 0x20, 0x6f, 0x66, 0x77, 0x61, 0x73, 0x20, 0x6f, 0x66, 0x66, 0x69, 0x63, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, - 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x74, 0x6f, 0x20, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x67, - 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, - 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x68, - 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x74, 0x79, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x20, 0x6f, 0x66, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x70, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, - 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x71, 0x22, 0x09, 0x09, 0x3c, 0x64, 0x69, - 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x20, - 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x72, 0x65, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x6d, 0x61, - 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x69, 0x61, 0x6e, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, - 0x6e, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x63, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, - 0x6c, 0x61, 0x72, 0x2c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x29, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, - 0x70, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x72, 0x70, 0x73, 0x6b, 0x6f, - 0x68, 0x72, 0x76, 0x61, 0x74, 0x73, 0x6b, 0x69, 0x74, 0x69, 0xe1, 0xba, 0xbf, - 0x6e, 0x67, 0x20, 0x56, 0x69, 0xe1, 0xbb, 0x87, 0x74, 0xd0, 0xa0, 0xd1, 0x83, - 0xd1, 0x81, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xb9, 0xd1, 0x80, 0xd1, - 0x83, 0xd1, 0x81, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xb9, 0x69, 0x6e, - 0x76, 0x65, 0x73, 0x74, 0x69, 0x67, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, - 0xd0, 0xba, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, 0x8b, 0xd0, - 0xb5, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, - 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, - 0x8b, 0xd0, 0xb9, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xb2, - 0xd0, 0xb5, 0xd0, 0xba, 0xd1, 0x81, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x82, 0xd0, - 0xb5, 0xd0, 0xbc, 0xd1, 0x8b, 0xd0, 0x9d, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, - 0xbe, 0xd1, 0x80, 0xd1, 0x8b, 0xd1, 0x85, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, 0xbb, - 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xb2, 0xd1, 0x80, 0xd0, - 0xb5, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xb0, 0xd1, 0x8f, 0xd1, 0x81, 0xd0, - 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd1, 0x8f, 0xd1, 0x81, - 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, - 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, - 0xd0, 0xa3, 0xd0, 0xba, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, - 0x8b, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd1, 0x81, - 0xd1, 0x8b, 0xd0, 0xba, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, - 0xbe, 0xd0, 0xb9, 0xd1, 0x81, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xb0, - 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbe, 0xd1, - 0x89, 0xd1, 0x8c, 0xd1, 0x8e, 0xd1, 0x81, 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb4, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x80, 0xd0, - 0xb0, 0xd0, 0xb7, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, - 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xbd, 0xd1, 0x8b, 0xd1, 0x83, 0xd1, 0x87, 0xd0, - 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb5, - 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, 0x93, 0xd0, - 0xbb, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x8f, 0xd0, 0xb8, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xb8, 0xd1, - 0x81, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, 0xb0, - 0xd1, 0x80, 0xd0, 0xb5, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, - 0x8f, 0xd0, 0xa1, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x82, - 0xd1, 0x8c, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, - 0xbc, 0xd1, 0x83, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x83, - 0xd0, 0xb5, 0xd1, 0x82, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, - 0xb0, 0xd1, 0x82, 0xd1, 0x8c, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xb0, - 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, - 0xb5, 0xd1, 0x87, 0xd0, 0xbd, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xb5, 0xd1, 0x88, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, 0xba, 0xd0, 0xbe, 0xd1, - 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xbe, 0xd1, 0x80, - 0xd0, 0xb3, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xba, 0xd0, - 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xa0, - 0xd0, 0xb5, 0xd0, 0xba, 0xd0, 0xbb, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xb0, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xaf, 0xd9, 0x89, - 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, - 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xb6, 0xd9, 0x88, - 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa8, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, - 0x85, 0xd8, 0xac, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xa7, - 0xd9, 0x82, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xb3, 0xd8, - 0xa7, 0xd8, 0xa6, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, 0xb1, - 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, - 0xb9, 0xd8, 0xb6, 0xd8, 0xa7, 0xd8, 0xa1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, - 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xb6, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xaa, 0xd8, 0xb5, 0xd9, 0x85, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xa7, 0xd8, 0xb9, 0xd8, 0xb6, 0xd8, 0xa7, 0xd8, 0xa1, 0xd8, 0xa7, 0xd9, - 0x84, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xa6, 0xd8, 0xac, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xa3, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd8, 0xb3, 0xd8, 0xac, 0xd9, 0x8a, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd9, 0x82, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, - 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb6, 0xd8, 0xba, 0xd8, 0xb7, 0xd8, 0xa7, - 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x8a, 0xd8, 0xaf, 0xd9, - 0x8a, 0xd9, 0x88, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, 0xad, - 0xd9, 0x8a, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd8, 0xaf, 0xd9, - 0x8a, 0xd8, 0xaf, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd8, 0xb9, - 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, - 0xae, 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, - 0xd9, 0x81, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xa3, 0xd9, 0x81, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xb1, 0xd9, 0x8a, 0xd8, 0xae, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaa, 0xd9, 0x82, 0xd9, 0x86, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xae, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xb7, 0xd8, 0xb1, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xac, 0xd8, 0xaa, 0xd9, 0x85, 0xd8, - 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x83, 0xd9, 0x88, - 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, - 0xad, 0xd8, 0xa9, 0xd8, 0xb9, 0xd8, 0xa8, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, - 0xd9, 0x84, 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, - 0xa8, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd9, 0x88, - 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xb7, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, - 0xaf, 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, - 0xd8, 0xae, 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xaa, 0xd8, 0xad, 0xd8, 0xaf, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xa7, 0xd8, 0xba, 0xd8, 0xa7, 0xd9, 0x86, 0xd9, 0x8a, 0x63, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x3c, - 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, - 0x20, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x2f, 0x61, - 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, - 0x3c, 0x21, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x20, 0x68, 0x74, 0x6d, - 0x6c, 0x3e, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x73, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x22, 0x20, 0x3c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, - 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x09, 0x09, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x68, 0x61, - 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, - 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74, 0x22, - 0x20, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, - 0x6c, 0x3e, 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, - 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, - 0x67, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x72, 0x65, 0x70, 0x72, - 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x73, 0x73, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, - 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, - 0x22, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6f, 0x75, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x66, - 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6f, 0x6e, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, - 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x22, 0x3e, - 0x3c, 0x77, 0x61, 0x73, 0x20, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x29, 0x3b, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x22, 0x3e, 0x29, 0x2e, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x65, 0x63, 0x61, - 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, - 0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, - 0x22, 0x2f, 0x7d, 0x62, 0x6f, 0x64, 0x79, 0x7b, 0x6d, 0x61, 0x72, 0x67, 0x69, - 0x6e, 0x3a, 0x30, 0x3b, 0x45, 0x6e, 0x63, 0x79, 0x63, 0x6c, 0x6f, 0x70, 0x65, - 0x64, 0x69, 0x61, 0x20, 0x6f, 0x66, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x2e, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, - 0x0a, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x3e, 0x3c, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x72, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x73, - 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x22, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x49, 0x6e, 0x20, 0x6f, 0x74, - 0x68, 0x65, 0x72, 0x20, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2c, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x2f, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x73, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x20, - 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x63, - 0x65, 0x6e, 0x74, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x0d, 0x0a, 0x09, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, - 0x69, 0x6e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, - 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x2e, 0x6a, 0x73, - 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x20, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, - 0x65, 0x65, 0x6e, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x20, 0x6c, 0x61, 0x6e, - 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x73, 0x74, 0x20, 0x50, 0x61, 0x72, 0x74, 0x79, 0x63, 0x6f, 0x6e, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, - 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3d, 0x22, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x20, 0x6f, 0x66, 0x22, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, - 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, - 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x4f, 0x72, 0x74, - 0x68, 0x6f, 0x64, 0x6f, 0x78, 0x20, 0x43, 0x68, 0x75, 0x72, 0x63, 0x68, 0x73, - 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, - 0x3d, 0x22, 0x73, 0x77, 0x61, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x20, 0x68, 0x69, - 0x73, 0x20, 0x64, 0x65, 0x61, 0x74, 0x68, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x0a, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6c, - 0x61, 0x6e, 0x64, 0x73, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x3a, 0x75, 0x72, 0x6c, 0x28, 0x61, 0x72, 0x67, 0x75, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x63, 0x72, - 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x6e, 0x6f, 0x22, 0x20, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x4e, 0x6f, 0x72, 0x74, 0x68, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x68, 0x65, 0x20, 0x74, 0x72, - 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, - 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x76, 0x65, 0x72, 0x79, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, - 0x72, 0x20, 0x74, 0x6f, 0x73, 0x75, 0x72, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x61, 0x6c, 0x69, 0x67, 0x6e, - 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x77, 0x6f, 0x75, - 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x3d, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, - 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x64, - 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, - 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x73, - 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x69, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, - 0x64, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x61, - 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x77, 0x61, 0x73, 0x20, - 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x62, 0x79, 0x61, 0x6e, - 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x69, 0x6e, 0x73, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, - 0x6f, 0x72, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x65, 0x64, 0x20, 0x61, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, - 0x73, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x61, 0x20, 0x63, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, - 0x65, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, - 0x64, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x55, 0x6e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x64, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x3e, 0x0a, 0x09, 0x3c, 0x64, 0x69, - 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x73, - 0x69, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, - 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x20, 0x6f, 0x66, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, - 0x6d, 0x61, 0x67, 0x6e, 0x65, 0x74, 0x69, 0x63, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x49, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, - 0x74, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, - 0x7b, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x46, 0x6f, - 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x69, 0x6e, - 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x74, - 0x22, 0x20, 0x77, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6d, 0x64, 0x61, 0x73, - 0x68, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, - 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x75, 0x6c, 0x3e, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x61, 0x74, - 0x68, 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x20, 0x74, 0x6f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x75, 0x6c, 0x61, 0x72, 0x6c, 0x79, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x69, 0x73, - 0x20, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, - 0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87, 0x20, 0x28, 0xe7, 0xae, 0x80, 0xe4, 0xbd, - 0x93, 0x29, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x64, 0x61, 0x64, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x63, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x65, 0xe0, 0xa4, 0x89, - 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb5, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, - 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0x96, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0xad, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, - 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa3, 0xe0, - 0xa4, 0xac, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, - 0xa5, 0x89, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb9, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, - 0xa5, 0x83, 0xe0, 0xa4, 0xb7, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa0, 0xe0, 0xa4, - 0xac, 0xe0, 0xa4, 0xa2, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xaa, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xab, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, - 0x8c, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xae, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xaa, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, - 0xac, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9b, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xb6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0x89, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xae, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0x88, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa2, 0xe0, 0xa4, - 0xbc, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xab, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, - 0xae, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x96, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, - 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0x9a, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9b, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x9b, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, - 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x8f, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0x98, - 0xe0, 0xa4, 0xa3, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa7, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb7, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, - 0x80, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, - 0xae, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x83, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0x98, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb5, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xae, 0xe0, - 0xa5, 0x88, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xa4, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, - 0xa5, 0x87, 0x72, 0x73, 0x73, 0x2b, 0x78, 0x6d, 0x6c, 0x22, 0x20, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x3e, 0x0a, 0x3c, 0x22, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, - 0x22, 0x70, 0x6f, 0x73, 0x74, 0x22, 0x20, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x76, 0x65, 0x72, - 0x74, 0x69, 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x74, - 0x2f, 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6a, - 0x73, 0x22, 0x3e, 0x2e, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, - 0x22, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x7d, 0x29, 0x28, 0x29, - 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, - 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x29, 0x3b, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x74, 0x65, 0x78, 0x74, 0x2d, - 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x73, - 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x6e, 0x6f, 0x22, - 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6c, 0x61, - 0x70, 0x73, 0x65, 0x3a, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x42, 0x61, 0x68, 0x61, 0x73, 0x61, - 0x20, 0x49, 0x6e, 0x64, 0x6f, 0x6e, 0x65, 0x73, 0x69, 0x61, 0x45, 0x6e, 0x67, - 0x6c, 0x69, 0x73, 0x68, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x3c, 0x74, 0x65, 0x78, 0x74, 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x3d, 0x2e, 0x67, 0x69, 0x66, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, - 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x6f, 0x76, 0x65, 0x72, - 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3b, 0x69, - 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x65, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x2e, 0x6a, 0x73, 0x22, - 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x2f, 0x66, - 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x20, 0x2f, - 0x3e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, - 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x6c, 0x65, - 0x66, 0x74, 0x3b, 0x0a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x29, - 0x3b, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, - 0x0a, 0x3c, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x3a, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, - 0x77, 0x3a, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x6d, 0x6f, 0x72, 0x65, 0x20, - 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6e, - 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x61, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, - 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x0a, 0x09, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, - 0x3b, 0x22, 0x3e, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, - 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x74, 0x68, 0x65, 0x20, - 0x31, 0x35, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x2e, - 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x28, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x20, 0x6f, 0x66, 0x20, 0x42, 0x79, 0x7a, 0x61, 0x6e, 0x74, 0x69, 0x6e, - 0x65, 0x20, 0x45, 0x6d, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x6a, 0x70, 0x67, 0x7c, - 0x74, 0x68, 0x75, 0x6d, 0x62, 0x7c, 0x6c, 0x65, 0x66, 0x74, 0x7c, 0x76, 0x61, - 0x73, 0x74, 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x6f, - 0x66, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x74, 0x79, 0x20, 0x50, 0x72, 0x65, 0x73, 0x73, 0x64, 0x6f, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x20, - 0x57, 0x61, 0x72, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x6e, 0x6f, 0x66, 0x6f, 0x6c, - 0x6c, 0x6f, 0x77, 0x22, 0x3e, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x73, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x72, 0x61, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x20, - 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3a, 0x31, 0x30, 0x30, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x2d, 0x73, - 0x70, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, - 0x65, 0x72, 0x20, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x62, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, - 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, - 0x20, 0x6f, 0x66, 0x44, 0x65, 0x6d, 0x6f, 0x63, 0x72, 0x61, 0x74, 0x69, 0x63, - 0x20, 0x50, 0x61, 0x72, 0x74, 0x79, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x46, 0x6f, 0x72, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x2c, 0x2e, - 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, - 0x0a, 0x09, 0x73, 0x42, 0x79, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x28, - 0x73, 0x29, 0x5b, 0x30, 0x5d, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x2e, 0x6a, 0x73, 0x22, 0x3e, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x6c, 0x69, - 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x69, 0x63, 0x6f, 0x6e, 0x22, - 0x20, 0x27, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x27, 0x27, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x27, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x2f, 0x61, - 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x2f, 0x70, 0x61, 0x67, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x70, 0x61, 0x67, - 0x65, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x62, 0x61, 0x68, 0x61, - 0x73, 0x61, 0x20, 0x49, 0x6e, 0x64, 0x6f, 0x6e, 0x65, 0x73, 0x69, 0x61, 0x65, - 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x20, 0x28, 0x73, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x29, 0xce, 0x95, 0xce, 0xbb, 0xce, 0xbb, 0xce, 0xb7, 0xce, 0xbd, 0xce, - 0xb9, 0xce, 0xba, 0xce, 0xac, 0xd1, 0x85, 0xd1, 0x80, 0xd0, 0xb2, 0xd0, 0xb0, - 0xd1, 0x82, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, - 0xbc, 0xd0, 0xbf, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb8, 0xd1, 0x8f, - 0xd0, 0xb2, 0xd0, 0xbb, 0xd1, 0x8f, 0xd0, 0xb5, 0xd1, 0x82, 0xd1, 0x81, 0xd1, - 0x8f, 0xd0, 0x94, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xb8, - 0xd1, 0x82, 0xd1, 0x8c, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, - 0xb2, 0xd0, 0xb5, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb7, - 0xd0, 0xb2, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0x98, 0xd0, - 0xbd, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x82, - 0xd0, 0x9e, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, - 0x82, 0xd1, 0x8c, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb8, - 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x82, 0xd0, - 0xb5, 0xd1, 0x80, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xba, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, - 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x86, - 0xd1, 0x8b, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, - 0x82, 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x83, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xbe, - 0xd0, 0xb2, 0xd0, 0xb8, 0xd1, 0x8f, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, - 0xbe, 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x8b, 0xd0, 0xbf, - 0xd0, 0xbe, 0xd0, 0xbb, 0xd1, 0x83, 0xd1, 0x87, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, - 0x8c, 0xd1, 0x8f, 0xd0, 0xb2, 0xd0, 0xbb, 0xd1, 0x8f, 0xd1, 0x8e, 0xd1, 0x82, - 0xd1, 0x81, 0xd1, 0x8f, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb8, 0xd0, 0xb1, 0xd0, - 0xbe, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbc, - 0xd0, 0xbf, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0xb2, 0xd0, - 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb5, - 0xd1, 0x81, 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x81, 0xd1, 0x82, 0xd0, - 0xb2, 0xd0, 0xb0, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xa7, - 0xd8, 0xb6, 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, - 0xa6, 0xd9, 0x8a, 0xd8, 0xb3, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x86, 0xd8, 0xaa, 0xd9, 0x82, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, - 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x83, - 0xd8, 0xaa, 0xd9, 0x88, 0xd8, 0xa8, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xb3, 0xd8, 0xb9, 0xd9, 0x88, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd8, 0xad, 0xd8, 0xb5, 0xd8, 0xa7, 0xd8, 0xa6, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, - 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, - 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb5, 0xd9, 0x88, 0xd8, - 0xaa, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, - 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xb1, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaa, 0xd8, 0xb5, 0xd8, 0xa7, 0xd9, 0x85, 0xd9, 0x8a, 0xd9, 0x85, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa5, 0xd8, 0xb3, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, - 0x85, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, - 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, - 0xb1, 0xd8, 0xa6, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xaa, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x73, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x6f, 0x74, - 0x65, 0x72, 0x22, 0x3e, 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x65, - 0x64, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x3c, 0x69, 0x6d, 0x67, 0x20, - 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x2e, - 0x6a, 0x70, 0x67, 0x7c, 0x72, 0x69, 0x67, 0x68, 0x74, 0x7c, 0x74, 0x68, 0x75, - 0x6d, 0x62, 0x7c, 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x66, 0x72, - 0x61, 0x6d, 0x65, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, - 0x20, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, - 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x66, 0x6f, 0x6e, - 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x62, 0x6f, 0x6c, 0x64, - 0x3b, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x67, - 0x69, 0x6e, 0x3a, 0x30, 0x3b, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, - 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x6e, 0x6f, 0x66, 0x6f, 0x6c, 0x6c, - 0x6f, 0x77, 0x22, 0x20, 0x50, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x77, 0x65, 0x6e, 0x74, - 0x69, 0x65, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x70, - 0x61, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x45, - 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x61, 0x2e, 0x61, 0x73, 0x79, 0x6e, - 0x63, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0d, 0x0a, 0x69, 0x6e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, - 0x75, 0x74, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x22, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x3c, 0x61, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x72, 0x69, - 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x27, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, - 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, - 0x7a, 0x65, 0x3a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x6c, 0x61, 0x6e, - 0x67, 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x41, 0x72, 0x69, 0x61, 0x6c, 0x2c, - 0x20, 0x48, 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x2c, 0x3c, 0x2f, - 0x61, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x65, 0x73, 0x74, 0x64, 0x3e, - 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, - 0x3c, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x6c, 0x3d, - 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, - 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x28, 0x27, 0x3c, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, - 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x0a, 0x62, 0x65, 0x67, 0x69, 0x6e, - 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x74, 0x65, 0x6c, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, - 0x22, 0x6e, 0x6f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x22, 0x3e, 0x20, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, - 0x22, 0x3e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x68, 0x74, 0x74, 0x70, 0x25, 0x33, 0x41, - 0x25, 0x32, 0x46, 0x25, 0x32, 0x46, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x61, 0x6e, - 0x69, 0x66, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, - 0x66, 0x50, 0x72, 0x69, 0x6d, 0x65, 0x20, 0x4d, 0x69, 0x6e, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, 0x69, 0x78, 0x22, 0x3e, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x0d, 0x0a, 0x0d, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x65, 0x2d, 0x64, 0x69, 0x6d, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x68, 0x75, 0x72, 0x63, - 0x68, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x61, 0x6e, 0x64, 0x6f, - 0x66, 0x20, 0x4e, 0x6f, 0x72, 0x74, 0x68, 0x20, 0x43, 0x61, 0x72, 0x6f, 0x6c, - 0x69, 0x6e, 0x61, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x20, 0x6b, 0x69, 0x6c, - 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x65, 0x73, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x64, 0x69, - 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, - 0x68, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x74, 0x69, - 0x63, 0x20, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x64, 0x65, 0x63, - 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, - 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x74, 0x68, 0x65, 0x42, 0x65, 0x6e, 0x6a, 0x61, 0x6d, 0x69, 0x6e, - 0x20, 0x46, 0x72, 0x61, 0x6e, 0x6b, 0x6c, 0x69, 0x6e, 0x72, 0x6f, 0x6c, 0x65, - 0x2d, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x61, 0x6d, 0x65, - 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, - 0x79, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x57, 0x65, 0x73, 0x74, 0x65, 0x72, - 0x6e, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x70, 0x65, 0x72, 0x73, 0x6f, - 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x47, 0x75, 0x74, 0x65, 0x6e, 0x62, - 0x65, 0x72, 0x67, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, - 0x65, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x74, 0x6f, - 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, 0x6c, 0x69, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, - 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x6d, 0x69, 0x6e, - 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, - 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3c, 0x69, 0x6d, 0x67, - 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x20, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x63, - 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, - 0x72, 0x65, 0x64, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x20, 0x6d, 0x65, - 0x63, 0x68, 0x61, 0x6e, 0x69, 0x63, 0x73, 0x4e, 0x65, 0x76, 0x65, 0x72, 0x74, - 0x68, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x69, - 0x6c, 0x6c, 0x69, 0x6f, 0x6e, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x20, 0x61, - 0x67, 0x6f, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d, 0xce, 0x95, 0xce, 0xbb, 0xce, 0xbb, 0xce, - 0xb7, 0xce, 0xbd, 0xce, 0xb9, 0xce, 0xba, 0xce, 0xac, 0x0a, 0x74, 0x61, 0x6b, - 0x65, 0x20, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x20, 0x6f, - 0x66, 0x61, 0x6e, 0x64, 0x2c, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x4d, 0x69, 0x63, 0x72, - 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, - 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x6e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, - 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x73, 0x73, 0x65, - 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x74, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x67, 0x20, 0x6d, 0x69, 0x6c, 0x69, 0x74, 0x61, 0x72, 0x79, 0x69, 0x73, 0x6f, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, - 0x65, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x4f, 0x6c, 0x64, 0x20, - 0x54, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x66, 0x72, 0x69, - 0x63, 0x61, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x73, - 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, - 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x6f, - 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x61, 0x6d, - 0x61, 0x6b, 0x65, 0x73, 0x20, 0x69, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x72, 0x67, 0x75, 0x61, 0x62, - 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, - 0x3e, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, 0x3d, - 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x2f, 0x3e, - 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x63, 0x69, 0x64, 0x65, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x74, 0x77, 0x6f, 0x2d, 0x74, 0x68, 0x69, 0x72, - 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x44, 0x75, 0x72, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2c, - 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, - 0x72, 0x69, 0x6f, 0x64, 0x61, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, - 0x6e, 0x64, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x72, 0x65, 0x63, 0x65, 0x6e, - 0x74, 0x6c, 0x79, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x64, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x63, 0x69, - 0x6f, 0x75, 0x73, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x66, 0x6f, - 0x72, 0x6d, 0x65, 0x72, 0x6c, 0x79, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, - 0x61, 0x73, 0x73, 0x75, 0x72, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x61, - 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x6f, 0x63, 0x63, - 0x61, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x73, 0x65, - 0x64, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x62, 0x73, - 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x3b, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x20, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x3b, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, - 0x3a, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x6a, 0x61, 0x78, 0x2f, 0x6c, - 0x69, 0x62, 0x73, 0x2f, 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x31, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, - 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x3d, 0x22, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, - 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, - 0x79, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3c, 0x2f, 0x61, 0x3e, 0x65, - 0x28, 0x22, 0x25, 0x33, 0x43, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x27, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, - 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x4f, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x68, 0x61, 0x6e, 0x64, - 0x2c, 0x2e, 0x6a, 0x70, 0x67, 0x7c, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x7c, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x7c, 0x32, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x3a, 0x6e, 0x69, 0x6e, 0x65, 0x74, 0x65, 0x65, 0x6e, 0x74, 0x68, - 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x3c, 0x2f, 0x62, 0x6f, 0x64, - 0x79, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d, 0x0a, - 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x73, 0x3b, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, - 0x69, 0x67, 0x6e, 0x3a, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x6f, 0x6e, - 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x62, 0x6f, 0x6c, - 0x64, 0x3b, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x22, - 0x20, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, - 0x22, 0x30, 0x22, 0x20, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x6c, 0x69, 0x6e, 0x6b, - 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, - 0x64, 0x74, 0x64, 0x22, 0x3e, 0x0a, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x3c, 0x2f, - 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x3e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x6c, 0x79, 0x20, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x66, 0x6f, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, - 0x3b, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, - 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x3c, 0x73, 0x70, - 0x61, 0x6e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6f, 0x6e, - 0x74, 0x2d, 0x6f, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x20, 0x77, 0x69, - 0x64, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f, 0x66, - 0x20, 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, - 0x6d, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, - 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x22, 0x3e, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x63, 0x6f, 0x6e, 0x63, 0x65, - 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, - 0x3d, 0x68, 0x74, 0x74, 0x70, 0x25, 0x33, 0x41, 0x25, 0x32, 0x46, 0x25, 0x32, - 0x46, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, - 0x61, 0x72, 0x20, 0x63, 0x75, 0x6c, 0x74, 0x75, 0x72, 0x65, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, - 0x2f, 0x3e, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x48, 0x61, 0x72, 0x76, 0x61, 0x72, - 0x64, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x74, - 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x2f, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, - 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4f, 0x78, 0x66, 0x6f, - 0x72, 0x64, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, - 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6b, 0x65, 0x79, 0x77, 0x6f, - 0x72, 0x64, 0x73, 0x22, 0x20, 0x63, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x74, 0x68, - 0x65, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x4b, 0x69, 0x6e, 0x67, - 0x64, 0x6f, 0x6d, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, - 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x64, 0x69, - 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6c, 0x79, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, - 0x61, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x74, 0x65, 0x6c, 0x65, - 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x61, 0x66, 0x74, 0x65, 0x72, 0x65, 0x73, - 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x61, 0x6e, 0x20, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x48, 0x6f, 0x77, 0x65, 0x76, - 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, - 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x22, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, - 0x77, 0x2e, 0x61, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x20, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x54, 0x65, 0x6c, 0x65, 0x63, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x6e, 0x6f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x22, 0x20, 0x74, 0x48, 0x6f, 0x6c, 0x79, 0x20, 0x52, 0x6f, 0x6d, 0x61, - 0x6e, 0x20, 0x45, 0x6d, 0x70, 0x65, 0x72, 0x6f, 0x72, 0x61, 0x6c, 0x6d, 0x6f, - 0x73, 0x74, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x6c, - 0x79, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, - 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x61, - 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x63, 0x75, - 0x6c, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x43, 0x49, 0x41, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x20, - 0x46, 0x61, 0x63, 0x74, 0x62, 0x6f, 0x6f, 0x6b, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x6f, 0x73, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, - 0x61, 0x6e, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x3c, 0x6c, 0x69, - 0x3e, 0x3c, 0x65, 0x6d, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, - 0x22, 0x2f, 0x74, 0x68, 0x65, 0x20, 0x41, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, - 0x63, 0x20, 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, - 0x6c, 0x79, 0x20, 0x73, 0x70, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2c, 0x73, - 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, - 0x4f, 0x74, 0x74, 0x6f, 0x6d, 0x61, 0x6e, 0x20, 0x45, 0x6d, 0x70, 0x69, 0x72, - 0x65, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x41, 0x6e, 0x20, 0x49, 0x6e, 0x74, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x63, 0x6f, - 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x75, 0x72, 0x65, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x65, - 0x64, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, - 0x69, 0x6e, 0x64, 0x69, 0x67, 0x65, 0x6e, 0x6f, 0x75, 0x73, 0x20, 0x70, 0x65, - 0x6f, 0x70, 0x6c, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x65, 0x64, 0x69, - 0x6e, 0x67, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x20, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x64, - 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x72, 0x65, 0x65, 0x61, 0x64, 0x6a, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x20, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x69, 0x73, 0x20, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, - 0x72, 0x64, 0x69, 0x73, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x77, 0x69, - 0x64, 0x65, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x65, 0x64, - 0x20, 0x61, 0x73, 0x68, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6d, - 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x66, 0x6f, 0x75, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, - 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x52, 0x65, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, - 0x6f, 0x66, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x61, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x72, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x6c, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x69, 0x73, 0x20, 0x61, - 0x6c, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x6c, - 0x79, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, - 0x6e, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x63, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x69, - 0x64, 0x65, 0x6f, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x69, 0x63, 0x20, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x20, 0x61, 0x63, 0x63, 0x6f, - 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x74, 0x68, 0x65, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, 0x20, - 0x61, 0x66, 0x74, 0x65, 0x72, 0x77, 0x61, 0x72, 0x64, 0x73, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, - 0x77, 0x2e, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x20, - 0x6f, 0x66, 0x20, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x7c, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x49, 0x6e, 0x20, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x6f, - 0x74, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x74, 0x68, - 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x79, 0x65, - 0x61, 0x72, 0x73, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, 0x64, 0x69, 0x76, - 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x2e, 0x70, 0x68, 0x70, 0x77, 0x61, 0x73, 0x20, 0x65, 0x73, 0x74, 0x61, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x6d, 0x69, 0x6e, - 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, - 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x61, 0x20, 0x73, 0x74, 0x72, 0x6f, - 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, - 0x74, 0x6f, 0x70, 0x3a, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x67, 0x72, 0x61, 0x64, - 0x75, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, - 0x65, 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, - 0x79, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x28, 0x22, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x29, 0x3b, 0x48, 0x6f, - 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x3b, - 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3a, - 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x67, - 0x61, 0x69, 0x6e, 0x73, 0x74, 0x30, 0x3b, 0x20, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x55, 0x6e, 0x66, - 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x2c, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x2f, 0x78, 0x2d, 0x69, 0x63, 0x6f, 0x6e, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, - 0x69, 0x78, 0x22, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x09, 0x09, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x09, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x0a, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, - 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0xd0, 0x91, 0xd1, 0x8a, 0xd0, 0xbb, 0xd0, - 0xb3, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xb1, - 0xd1, 0x8a, 0xd0, 0xbb, 0xd0, 0xb3, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x81, 0xd0, - 0xba, 0xd0, 0xb8, 0xd0, 0xa4, 0xd0, 0xb5, 0xd0, 0xb4, 0xd0, 0xb5, 0xd1, 0x80, - 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, - 0x81, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, 0xba, 0xd0, 0xbe, - 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x89, 0xd0, 0xb5, 0xd0, - 0xbd, 0xd0, 0xb8, 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xb1, - 0xd1, 0x89, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0xbf, 0xd1, - 0x80, 0xd0, 0xbe, 0xd0, 0xb3, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xbc, - 0xd1, 0x8b, 0xd0, 0x9e, 0xd1, 0x82, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, - 0xb2, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xb1, 0xd0, 0xb5, 0xd1, 0x81, - 0xd0, 0xbf, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, - 0xbc, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xb0, - 0xd0, 0xbb, 0xd1, 0x8b, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xb7, 0xd0, 0xb2, 0xd0, - 0xbe, 0xd0, 0xbb, 0xd1, 0x8f, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xbf, 0xd0, 0xbe, - 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, - 0xb5, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x87, - 0xd0, 0xbd, 0xd1, 0x8b, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, - 0xb4, 0xd1, 0x83, 0xd0, 0xba, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xbf, - 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb3, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, - 0xbc, 0xd0, 0xb0, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x8c, 0xd1, 0x8e, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, - 0x85, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, 0x81, 0xd1, 0x8f, - 0xd0, 0xb8, 0xd0, 0xb7, 0xd0, 0xb1, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, - 0xbd, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xb5, - 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0xb8, 0xd0, - 0xb7, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, - 0xd1, 0x8f, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, - 0xbe, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0x90, 0xd0, 0xbb, 0xd0, 0xb5, - 0xd0, 0xba, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb4, 0xd1, 0x80, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xaa, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa1, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xa1, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9a, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa0, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x9a, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0x85, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0x91, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xab, 0xe0, 0xa4, - 0xbc, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xb6, - 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xaf, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xa6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0x89, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa0, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa1, 0xe0, - 0xa4, 0xbc, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xa3, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, 0xe0, 0xa5, - 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, - 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x9a, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0x9a, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x89, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xa7, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0x89, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa7, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xa1, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x86, - 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x8f, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0x96, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x81, - 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xac, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, - 0x81, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xa5, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, - 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb0, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, - 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xa8, 0xd9, 0x8a, 0xd9, 0x88, - 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, - 0xa7, 0xd9, 0x87, 0xd8, 0xaf, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xb9, 0xd8, 0xaf, - 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb2, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd8, 0xb9, 0xd8, 0xaf, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, - 0xd8, 0xaf, 0xd9, 0x88, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa5, 0xd8, - 0xb3, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x85, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x88, 0xd8, 0xaa, 0xd9, 0x88, 0xd8, 0xb4, 0xd9, - 0x88, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb3, 0xd8, 0xa7, - 0xd8, 0xa8, 0xd9, 0x82, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x88, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, 0xaa, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb3, 0xd9, 0x84, 0xd8, 0xb3, 0xd9, - 0x84, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd8, 0xb1, - 0xd8, 0xa7, 0xd9, 0x81, 0xd9, 0x8a, 0xd9, 0x83, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xa7, 0xd8, 0xb3, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x85, 0xd9, 0x8a, - 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xb5, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xaa, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, - 0x64, 0x73, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, - 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x78, - 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x20, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, - 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x3c, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x3d, 0x22, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x3d, 0x22, 0x6f, 0x66, 0x66, 0x22, 0x20, 0x74, 0x65, 0x78, - 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x3b, 0x74, 0x6f, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x62, 0x61, 0x63, 0x6b, - 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, - 0x20, 0x23, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, - 0x3d, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x22, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, - 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x2f, - 0x2f, 0x45, 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x77, 0x77, 0x77, 0x2e, 0x77, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x55, 0x52, - 0x49, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x28, 0x22, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x27, - 0x3c, 0x73, 0x63, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, - 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x3b, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, - 0x67, 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, - 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, - 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, - 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x20, - 0x0a, 0x0d, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0d, 0x0a, 0x3c, - 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x2f, - 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, - 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x68, 0x72, - 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x65, 0x6e, - 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x75, 0x74, 0x66, 0x2d, 0x38, - 0x22, 0x3f, 0x3e, 0x0a, 0x77, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x3f, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, - 0x77, 0x77, 0x2e, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x20, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x3d, 0x22, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x3a, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, - 0x63, 0x73, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x6d, 0x65, 0x74, 0x61, 0x20, - 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3d, 0x22, 0x6f, 0x67, 0x3a, - 0x74, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, - 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, - 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x68, - 0x74, 0x6d, 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, - 0x75, 0x74, 0x66, 0x2d, 0x38, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, - 0x30, 0x25, 0x22, 0x20, 0x49, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x20, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6f, 0x6e, 0x74, - 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x31, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, - 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x67, 0x62, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x43, 0x6f, - 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, - 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x69, 0x6d, 0x45, - 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x79, 0x20, - 0x6f, 0x66, 0x20, 0x53, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x64, 0x69, - 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x3a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x2e, 0x67, 0x65, - 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, - 0x69, 0x64, 0x29, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x6a, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x45, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x28, 0x27, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x27, 0x29, - 0x3b, 0x20, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x79, 0x3d, 0x22, 0x6f, 0x67, 0x3a, 0xd0, 0x91, 0xd1, 0x8a, 0xd0, - 0xbb, 0xd0, 0xb3, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, - 0x0a, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, - 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x3e, 0x50, 0x72, 0x69, 0x76, 0x61, - 0x63, 0x79, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3c, 0x2f, 0x61, 0x3e, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6d, 0x61, - 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x3e, 0x3c, - 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x69, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x70, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x57, - 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x2c, 0x20, 0x44, 0x2e, - 0x43, 0x2e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, 0x61, 0x63, - 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x61, 0x6d, 0x6f, 0x6e, 0x67, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, - 0x2c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, - 0x69, 0x70, 0x61, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x66, - 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, - 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x4f, 0x78, 0x66, 0x6f, 0x72, 0x64, 0x20, - 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x20, 0x6d, 0x69, - 0x73, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x6f, 0x66, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, - 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x2f, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x62, 0x69, 0x61, 0x20, 0x55, - 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x65, 0x78, 0x70, 0x61, - 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, - 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, - 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, - 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x6f, 0x66, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x3e, - 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x52, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x20, 0x6f, 0x66, 0x20, 0x49, 0x72, 0x65, 0x6c, 0x61, 0x6e, 0x64, 0x0a, 0x3c, - 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x77, - 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x61, 0x64, - 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x61, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6d, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, - 0x6c, 0x20, 0x52, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x6f, 0x66, - 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x79, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x4e, - 0x6f, 0x74, 0x65, 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x61, - 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x61, 0x6e, 0x63, - 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x20, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x69, 0x73, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x68, 0x69, 0x73, 0x20, 0x79, - 0x6f, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x20, 0x62, 0x72, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, - 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x58, 0x2d, 0x55, 0x41, 0x2d, - 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x6f, 0x66, 0x20, 0x42, 0x72, 0x69, 0x74, - 0x69, 0x73, 0x68, 0x20, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x62, 0x69, 0x61, 0x68, - 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, - 0x63, 0x69, 0x7a, 0x65, 0x64, 0x28, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x30, 0x22, 0x20, - 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, - 0x30, 0x22, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x72, 0x65, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x73, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2e, 0x20, 0x46, - 0x6f, 0x72, 0x68, 0x61, 0x76, 0x65, 0x20, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, - 0x65, 0x6e, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x25, 0x33, 0x45, 0x25, 0x33, - 0x43, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x25, 0x33, 0x45, 0x22, 0x29, - 0x29, 0x3b, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x3c, 0x6c, 0x69, 0x3e, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78, - 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, - 0x6e, 0x6f, 0x6e, 0x65, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x3c, 0x6d, - 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, - 0x76, 0x3d, 0x22, 0x58, 0x2d, 0x6e, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, - 0x28, 0x29, 0x2e, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, - 0x2d, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x6a, 0x61, 0x76, - 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, - 0x66, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x6a, 0x61, 0x76, - 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, - 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x74, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x68, 0x6f, 0x72, 0x74, - 0x63, 0x75, 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x20, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x3d, 0x22, 0x58, 0x2d, 0x55, 0x41, 0x2d, 0x43, 0x6f, - 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, - 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x20, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, 0x2f, 0x75, - 0x6c, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x61, 0x73, 0x73, 0x6f, 0x63, - 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, - 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, 0x3e, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, - 0x6c, 0x69, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x22, 0x71, 0x22, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, 0x20, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, - 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, - 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x36, 0x3e, 0x3c, 0x75, 0x6c, - 0x3e, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, - 0x22, 0x20, 0x20, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, - 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, 0x73, 0x73, 0x22, 0x20, - 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, - 0x22, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x68, 0x74, 0x6d, - 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75, 0x74, - 0x66, 0x2d, 0x38, 0x22, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x3d, 0x22, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x74, 0x65, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, - 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x3e, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, - 0x6c, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x3e, - 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, - 0x65, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6e, 0x65, 0x63, - 0x65, 0x73, 0x73, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x46, 0x6f, 0x72, 0x20, 0x6d, - 0x6f, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x67, 0x69, - 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x21, 0x44, 0x4f, - 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x3c, 0x68, - 0x74, 0x6d, 0x6c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, - 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, - 0x6d, 0x65, 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x3a, 0x76, 0x6f, 0x69, 0x64, 0x28, 0x30, 0x29, 0x3b, 0x22, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x65, 0x3d, 0x22, 0x6f, 0x66, 0x66, 0x22, 0x20, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, - 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, - 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, - 0x68, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, - 0x64, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x6d, 0x69, 0x73, 0x63, 0x6f, - 0x6e, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x73, 0x73, 0x6f, 0x63, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x64, 0x75, 0x72, 0x69, - 0x6e, 0x67, 0x20, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, - 0x6d, 0x65, 0x2c, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, 0x2d, 0x69, 0x63, - 0x6f, 0x6e, 0x22, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, - 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x64, 0x69, - 0x70, 0x6c, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x20, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x65, - 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x6d, - 0x65, 0x74, 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, - 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x20, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, - 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x69, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x65, - 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x20, - 0x6f, 0x66, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, - 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x26, 0x61, 0x6d, 0x70, - 0x3b, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6e, 0x62, - 0x73, 0x70, 0x3b, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x71, 0x75, 0x69, - 0x74, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x64, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x63, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x77, 0x69, 0x64, 0x65, 0x6c, 0x79, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x77, 0x61, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x20, 0x76, - 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, - 0x73, 0x68, 0x61, 0x76, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x28, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, - 0x70, 0x65, 0x64, 0x65, 0x74, 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, - 0x74, 0x3d, 0x22, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, - 0x20, 0x2f, 0x3e, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x61, 0x62, 0x6c, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6d, 0x6f, - 0x72, 0x65, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x6c, 0x79, 0x20, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6f, 0x74, 0x68, - 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x70, 0x65, 0x72, 0x70, 0x65, 0x6e, 0x64, - 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x73, 0x74, 0x79, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x22, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x20, 0x72, 0x65, 0x73, - 0x69, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x76, 0x65, 0x6c, - 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x20, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x65, 0x63, 0x6f, 0x6e, - 0x6f, 0x6d, 0x69, 0x63, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, - 0x65, 0x6e, 0x74, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x66, 0x6f, 0x72, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, - 0x6c, 0x20, 0x6f, 0x63, 0x63, 0x61, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x70, 0x6f, - 0x72, 0x74, 0x75, 0x67, 0x75, 0xc3, 0xaa, 0x73, 0x20, 0x28, 0x45, 0x75, 0x72, - 0x6f, 0x70, 0x65, 0x75, 0x29, 0xd0, 0xa3, 0xd0, 0xba, 0xd1, 0x80, 0xd0, 0xb0, - 0xd1, 0x97, 0xd0, 0xbd, 0xd1, 0x81, 0xd1, 0x8c, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, - 0x83, 0xd0, 0xba, 0xd1, 0x80, 0xd0, 0xb0, 0xd1, 0x97, 0xd0, 0xbd, 0xd1, 0x81, - 0xd1, 0x8c, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xa0, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, - 0x81, 0xd0, 0xb8, 0xd0, 0xb9, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb9, - 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, - 0xb0, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x84, - 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, - 0xb8, 0xd1, 0x83, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xbb, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, - 0xbe, 0xd0, 0xb1, 0xd1, 0x85, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb8, 0xd0, 0xbc, - 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, - 0xbc, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0x98, 0xd0, 0xbd, - 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, - 0xb8, 0xd1, 0x8f, 0xd0, 0xa0, 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xbf, 0xd1, 0x83, - 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, - 0xbe, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x87, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, - 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x84, 0xd0, 0xbe, 0xd1, - 0x80, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd1, 0x8e, 0xd1, 0x82, - 0xd0, 0xb5, 0xd1, 0x80, 0xd1, 0x80, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, - 0x80, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xb4, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x82, - 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x87, 0xd0, 0xbd, 0xd0, 0xbe, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xaa, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xac, - 0xd8, 0xaf, 0xd9, 0x88, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, - 0xb4, 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x82, 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, - 0xa7, 0xd8, 0xad, 0xd8, 0xa7, 0xd8, 0xaa, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20, - 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x55, 0x54, 0x46, 0x2d, 0x38, - 0x22, 0x20, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x74, 0x65, 0x78, 0x74, 0x2f, - 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x3c, 0x69, 0x6d, 0x67, 0x20, - 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, - 0x77, 0x77, 0x2e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x73, 0x68, - 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x22, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x3d, 0x22, 0x6f, 0x66, 0x66, 0x22, - 0x20, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x3c, 0x2f, 0x61, 0x3e, - 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x63, 0x73, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x3c, - 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, - 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x61, - 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x22, 0x20, 0x0d, 0x0a, 0x3c, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x2f, 0x20, 0x6f, 0x6e, 0x63, 0x6c, 0x69, 0x63, 0x6b, - 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3a, - 0x28, 0x6e, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, 0x29, 0x2e, 0x67, 0x65, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x7d, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, - 0x31, 0x22, 0x20, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x27, 0x73, 0x20, 0x52, - 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x6f, 0x66, 0x20, 0x20, 0x3c, - 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x64, 0x65, - 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x0a, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x23, 0x76, 0x69, 0x65, 0x77, 0x70, - 0x6f, 0x72, 0x74, 0x7b, 0x6d, 0x69, 0x6e, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3a, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, 0x72, - 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x72, 0x65, - 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x20, - 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x3c, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x3c, 0x21, 0x44, 0x4f, 0x43, - 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x21, - 0x2d, 0x2d, 0x5b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x20, 0x41, 0x69, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x3e, 0x0a, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x61, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x77, 0xe0, 0xb8, 0xa0, 0xe0, 0xb8, 0xb2, 0xe0, 0xb8, 0xa9, 0xe0, 0xb8, 0xb2, - 0xe0, 0xb9, 0x84, 0xe0, 0xb8, 0x97, 0xe0, 0xb8, 0xa2, 0xe1, 0x83, 0xa5, 0xe1, - 0x83, 0x90, 0xe1, 0x83, 0xa0, 0xe1, 0x83, 0x97, 0xe1, 0x83, 0xa3, 0xe1, 0x83, - 0x9a, 0xe1, 0x83, 0x98, 0xe6, 0xad, 0xa3, 0xe9, 0xab, 0x94, 0xe4, 0xb8, 0xad, - 0xe6, 0x96, 0x87, 0x20, 0x28, 0xe7, 0xb9, 0x81, 0xe9, 0xab, 0x94, 0x29, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8b, 0xe0, - 0xa4, 0xa1, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb7, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xac, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, - 0x8d, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0x97, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa0, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0x9e, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x85, 0xe0, - 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xad, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0x97, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0x9a, 0xe0, - 0xa4, 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa4, 0xa3, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, - 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xab, 0xe0, 0xa4, 0xbc, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa1, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x28, - 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, 0x6d, - 0x6c, 0x3e, 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x3c, 0x6d, 0x65, 0x74, - 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x75, 0x74, - 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x3a, 0x75, 0x72, 0x6c, 0x22, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, - 0x2f, 0x63, 0x73, 0x73, 0x22, 0x3e, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, - 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74, 0x22, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x3d, 0x22, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, - 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x20, - 0x3d, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, - 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, 0x2d, 0x69, 0x63, 0x6f, 0x6e, - 0x22, 0x20, 0x2f, 0x3e, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, - 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x3c, 0x2f, 0x61, 0x3e, - 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, - 0x22, 0x31, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x31, - 0x22, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x6e, - 0x6f, 0x6e, 0x65, 0x3b, 0x22, 0x3e, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x74, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x44, 0x54, 0x44, - 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x65, 0x6c, - 0x6c, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, - 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3d, 0x22, 0x2f, 0x61, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, - 0x73, 0x70, 0x61, 0x6e, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x0a, - 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, - 0x61, 0x67, 0x65, 0x3d, 0x22, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x22, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, - 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, 0x61, - 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x6d, 0x65, - 0x64, 0x69, 0x61, 0x3d, 0x22, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x27, 0x74, 0x65, - 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x27, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x63, - 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x79, 0x70, 0x65, - 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, - 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3d, 0x22, 0x31, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, - 0x22, 0x20, 0x3d, 0x27, 0x2b, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x55, 0x52, - 0x49, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x28, 0x3c, 0x6c, - 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x61, 0x6c, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x74, 0x65, 0x22, 0x20, 0x0a, 0x62, 0x6f, 0x64, 0x79, 0x2c, - 0x20, 0x74, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2c, 0x20, 0x74, - 0x65, 0x78, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x22, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x6d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x74, 0x22, 0x20, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x3e, 0x0a, 0x3c, 0x61, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x77, 0x77, 0x77, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, - 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x22, 0x3e, 0x61, 0x72, 0x69, 0x61, 0x2d, 0x68, 0x69, 0x64, - 0x64, 0x65, 0x6e, 0x3d, 0x22, 0x74, 0x72, 0x75, 0x65, 0x22, 0x3e, 0xc2, 0xb7, - 0x3c, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x6c, 0x3d, 0x30, - 0x3b, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x0a, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x7b, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x2d, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x75, 0x72, - 0x6c, 0x28, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, 0x6c, 0x69, - 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x09, 0x09, - 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x20, - 0x61, 0x72, 0x69, 0x61, 0x2d, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3d, 0x22, - 0x74, 0x72, 0x75, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x2f, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x3e, 0x0a, 0x3c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x20, 0x61, 0x72, 0x69, 0x61, 0x2d, 0x68, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3d, 0x22, 0x74, 0x72, 0x65, 0x3d, 0x28, 0x6e, - 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, 0x29, 0x2e, 0x67, 0x65, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x28, 0x29, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x67, 0x75, 0xc3, - 0xaa, 0x73, 0x20, 0x28, 0x64, 0x6f, 0x20, 0x42, 0x72, 0x61, 0x73, 0x69, 0x6c, - 0x29, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xb3, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, - 0xd0, 0xb7, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xb2, 0xd0, - 0xbe, 0xd0, 0xb7, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x80, 0xd0, - 0xb0, 0xd0, 0xb7, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, - 0xd1, 0x8f, 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, - 0x82, 0xd1, 0x80, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xb2, - 0xd0, 0xbe, 0xd0, 0xb7, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, - 0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x8f, - 0xd0, 0xb7, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, - 0xbd, 0xd0, 0xb0, 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, - 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x22, - 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x3c, 0x6d, 0x65, - 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, - 0x3d, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x20, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x78, 0x6d, 0x6c, - 0x6e, 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, - 0x77, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x44, 0x54, 0x44, 0x20, - 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x54, 0x44, 0x54, - 0x44, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x31, 0x2d, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x77, 0x77, 0x77, - 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x78, 0x68, - 0x74, 0x6d, 0x6c, 0x31, 0x2f, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x74, 0x65, - 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x27, 0x3b, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x22, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x69, 0x6e, 0x73, - 0x65, 0x72, 0x74, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x3c, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x68, 0x69, 0x64, 0x64, - 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6a, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, - 0x63, 0x72, 0x69, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x29, - 0x2e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x55, 0x41, 0x2d, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x3d, 0x74, 0x6d, 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, - 0x73, 0x65, 0x74, 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x20, 0x2f, 0x3e, - 0x0a, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x68, - 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x3c, 0x6c, - 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x3d, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, - 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, - 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, - 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, - 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x61, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x20, - 0x3d, 0x20, 0x27, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, - 0x63, 0x72, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, - 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, - 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x20, 0x2f, 0x3e, 0x64, 0x74, 0x64, - 0x22, 0x3e, 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x78, 0x6d, 0x6c, 0x6e, - 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, - 0x2f, 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x34, 0x2e, - 0x30, 0x31, 0x20, 0x54, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x61, 0x67, - 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x27, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x27, - 0x29, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x3c, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x22, 0x20, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, - 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x42, 0x79, 0x49, 0x64, 0x28, 0x3d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x28, 0x27, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x27, 0x74, 0x65, - 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x27, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x64, - 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, - 0x79, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x73, 0x6e, 0x69, 0x63, - 0x61, 0x6c, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x43, 0x2f, 0x2f, 0x44, 0x54, - 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, - 0x73, 0x22, 0x3e, 0x0a, 0x0a, 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, - 0x22, 0x3e, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2e, 0x64, 0x74, 0x64, 0x22, 0x3e, - 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3d, - 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x64, 0x69, - 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, - 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x68, 0x74, 0x6d, 0x6c, - 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75, 0x74, 0x66, - 0x2d, 0x38, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e, - 0x65, 0x3b, 0x22, 0x3e, 0x3c, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, - 0x77, 0x77, 0x2e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x27, 0x74, 0x65, 0x78, - 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x27, - 0x3e, 0xd0, 0xb4, 0xd0, 0xb5, 0xd1, 0x8f, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbb, - 0xd1, 0x8c, 0xd0, 0xbd, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, - 0x81, 0xd0, 0xbe, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x82, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xbf, 0xd1, - 0x80, 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xb7, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb4, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xb5, 0xd0, - 0xb7, 0xd0, 0xbe, 0xd0, 0xbf, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x81, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0x97, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xab, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb7, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x89, - 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x87, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0x9c, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9e, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x88, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, -}; - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/dictionary.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/dictionary.h deleted file mode 100644 index c9c6362da8d..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/dictionary.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Collection of static dictionary words. - -#ifndef BROTLI_ENC_DICTIONARY_H_ -#define BROTLI_ENC_DICTIONARY_H_ - -#include "./types.h" - -// No namespace, use same identifier as for the C decoder. - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -extern const uint8_t kBrotliDictionary[122784]; - -static const uint32_t kBrotliDictionaryOffsetsByLength[] = { - 0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, - 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536, - 115968, 118528, 119872, 121280, 122016, -}; - -static const uint8_t kBrotliDictionarySizeBitsByLength[] = { - 0, 0, 0, 0, 10, 10, 11, 11, 10, 10, - 10, 10, 10, 9, 9, 8, 7, 7, 8, 7, - 7, 6, 6, 5, 5, -}; - -static const int kBrotliMinDictionaryWordLength = 4; -static const int kBrotliMaxDictionaryWordLength = 24; - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif // BROTLI_ENC_DICTIONARY_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/dictionary_hash.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/dictionary_hash.h deleted file mode 100644 index afbb1f1e678..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/dictionary_hash.h +++ /dev/null @@ -1,4117 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Hash table on the 4-byte prefixes of static dictionary words. - -#ifndef BROTLI_ENC_DICTIONARY_HASH_H_ -#define BROTLI_ENC_DICTIONARY_HASH_H_ - -#include "./types.h" - -namespace brotli { - -static const uint16_t kStaticDictionaryHash[] = { - 0x7d48, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5564, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x9e26, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb2e6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x050c, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1364, 0x0116, 0x5ca5, 0x0000, 0x4e04, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x084e, 0x3ee6, 0x0000, 0x0000, - 0x0000, 0x3865, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6867, 0x08cd, 0x0000, 0x0000, 0x4364, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0e26, - 0x0000, 0x0000, 0x0000, 0x0000, 0x59c8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4107, 0x0000, 0x85c7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xbd66, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x09cf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4c4c, 0x0000, 0x0000, 0x5dc4, - 0x0000, 0x0000, 0x0000, 0x2664, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7885, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7ce6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x50aa, 0x0964, - 0x0000, 0x5125, 0x068d, 0x2347, 0x0000, 0x1904, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xcaa7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1a69, 0x1c26, 0x0000, 0x0000, 0x55e8, 0x59c7, 0x0000, 0x0000, - 0x0dc9, 0x0000, 0x0748, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2b26, 0x0000, 0x0000, 0x25a9, 0x0000, 0x0000, 0x0000, - 0x196b, 0x0000, 0x0000, 0x9046, 0x5448, 0xf3a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2066, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9f67, - 0x0000, 0x0000, 0x0000, 0x99e6, 0x1fc8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x22ab, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1f05, 0x0000, 0x0000, 0x6409, 0x0000, 0x0000, 0x0000, - 0x03a8, 0x0e84, 0x0c8d, 0x3d47, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xcd27, 0x0000, 0x43e5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0528, 0x16a5, 0x0000, 0x5225, 0x0000, 0x0000, 0x1948, 0x0327, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x34e9, 0x0000, 0x0000, 0x0000, 0x0e28, 0x0000, - 0x0000, 0x0000, 0x73ea, 0x7864, 0x0000, 0x7a05, 0x0000, 0x19c4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xfa46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5706, 0x0000, 0x9246, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1c48, 0x01a7, 0x0000, 0x6024, - 0x54c9, 0x44e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0729, 0x0000, 0x0000, 0x0000, 0x0148, 0x1785, 0x0000, 0x0000, - 0x0000, 0x4e06, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xf2a7, 0x1052, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2f44, 0x21a9, 0x0000, 0x0000, 0x4204, 0x0000, 0x8f46, - 0x0000, 0x0000, 0x0000, 0x8a26, 0x0000, 0xca06, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5206, 0x0000, 0xf286, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x15a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3925, 0x2ac8, 0x6547, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4d89, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x78e8, 0x0be6, 0x37ea, 0x32c6, 0x0000, 0x0000, 0x0000, 0x3ba4, - 0x0000, 0x9e86, 0x7608, 0xf2a6, 0x0000, 0x0000, 0x0000, 0x4ea4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2ee5, 0x0000, 0x0000, - 0x0000, 0xcc86, 0x0000, 0x0000, 0x0000, 0x0000, 0x60ca, 0x0000, - 0x002c, 0x8147, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6704, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0ec5, 0x0000, 0x0000, - 0x4608, 0x2507, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7e29, 0x6fc5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb846, 0x2dcb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x09e8, 0xd767, 0x0000, 0x0000, - 0x190a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xdbe6, 0x2e8a, 0x0000, 0x0211, 0x0000, 0x75e8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2045, 0x0000, 0x0000, 0x7088, 0xe5e6, 0x5869, 0x03c5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xfa87, 0x0000, 0x0000, 0x014b, 0x0e64, - 0x0000, 0x0645, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x410a, 0x0025, 0x0000, 0x5c46, - 0x0c48, 0x3c45, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x57ab, 0x0045, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x45a8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2b69, 0x0000, 0x0000, 0x0000, 0x0000, 0x4785, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6806, - 0x0000, 0x0000, 0x63a8, 0x6527, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4205, - 0x0000, 0x0000, 0x0000, 0x6ba6, 0x0000, 0x0000, 0x24ca, 0x0000, - 0x0000, 0x0000, 0x0db4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x9466, 0x2449, 0x2145, 0x0000, 0x0000, - 0x0000, 0x0000, 0x062a, 0x0644, 0x5d88, 0x0000, 0x0000, 0x3a44, - 0x31ed, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2f49, 0x0000, 0x40e9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5364, - 0x2be8, 0x70c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x168c, 0x0000, 0x0000, 0x6ca4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2084, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x416c, 0x0485, 0x0000, 0x0000, 0x496a, 0x3fc4, - 0x652a, 0x03a7, 0x208d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4746, 0x0000, 0x46a6, 0x0000, 0xb706, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0153, 0x0000, - 0x0000, 0x6264, 0x31ec, 0x2f86, 0x1909, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4084, 0x0000, 0x6984, 0x6eeb, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x058c, 0x0000, 0x0000, 0x0000, - 0x2628, 0xcee7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x624b, 0x0144, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xfde6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5585, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb906, - 0x0000, 0x0000, 0x0000, 0x0366, 0x0000, 0x0000, 0x0000, 0x3166, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x65a4, 0x3fe8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0711, 0x0000, 0x0000, 0x0000, - 0x19c9, 0x3e06, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x71a4, - 0x0000, 0x6f64, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x55e4, 0x0000, 0x0000, 0x0000, 0xa7c6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x140d, 0x0526, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd6c6, - 0x6148, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xc946, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0e65, 0x0000, 0x0000, 0x0000, 0x0000, 0x274e, 0x24c4, - 0x0000, 0x0000, 0x0000, 0x7ae4, 0x164c, 0x1825, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x15c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6a08, 0xe086, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1bac, 0x0000, 0x55e9, 0xcf86, 0x0000, 0x0000, - 0x0000, 0x0000, 0x20cd, 0x0000, 0x0000, 0x1665, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0844, 0x0000, 0x60a6, 0x0000, 0x2c07, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x046d, 0x0000, 0x1309, 0x0000, 0x0000, 0x95a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x460c, 0x0000, 0x0000, 0x4685, 0x0000, 0x0000, - 0x0000, 0x63a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4586, 0x0000, 0x6666, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x59e8, 0x4407, 0x4fa8, 0x00a4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0ca7, 0x0000, 0xb427, 0x0000, 0x0000, - 0x0000, 0x6fa4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1dc5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xa206, 0x0000, 0x0000, 0x7928, 0xd826, - 0x2748, 0x0784, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8f06, - 0x0000, 0x8f67, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x36aa, 0xe7a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6785, 0x0000, 0x1607, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3649, 0x04e5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x13e7, 0x0000, 0x0000, - 0x0000, 0x70c5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x21c6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6429, 0x4584, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3404, 0x026c, 0x18a5, 0x2e2b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0388, 0x0447, - 0x0000, 0x5ea5, 0x0000, 0x0000, 0x7048, 0xc227, 0x0000, 0x5a25, - 0x0000, 0x0000, 0x0000, 0x0000, 0x7e88, 0x0000, 0x0000, 0x0000, - 0x0000, 0x89c7, 0x0000, 0x7044, 0x16ea, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1109, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1eed, 0x22a5, 0x0000, 0x0000, 0x0000, 0x3664, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xa3e6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1a6e, 0x36a5, 0x0000, 0x0000, 0x0000, 0x0387, - 0x0000, 0x0000, 0x5dca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfb86, - 0x0000, 0x57c4, 0x0000, 0x6505, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5c68, 0x14c5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x59e9, 0x1545, 0x3e89, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xbb86, 0x28e9, 0x0000, 0x0000, 0x3844, - 0x0000, 0x0000, 0x0000, 0xa4c7, 0x0000, 0x0000, 0x0000, 0xc846, - 0x0000, 0x0000, 0x296a, 0x5e44, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xab06, 0x0000, 0x0000, 0x45aa, 0x0000, 0x0000, 0x0000, - 0x63e8, 0x6a45, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x718a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0272, 0x07c4, 0x396c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe146, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xaea6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f08, 0x1dc7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xa586, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4b48, 0x1924, 0x0000, 0x0000, - 0x1488, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4ce5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9b67, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7908, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6e46, 0x0000, 0x0000, 0x0000, 0x7164, 0x292a, 0x0c85, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1604, 0x0348, 0x0127, 0x0000, 0x0000, - 0x2128, 0x2006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5064, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0fea, 0x4c46, - 0x0000, 0x0000, 0x0000, 0x0000, 0x79a8, 0xfa26, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x414c, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x452a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc5c6, - 0x0000, 0xc547, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6366, 0x0000, 0x0000, - 0x0000, 0x3607, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0a88, 0x0fc7, 0x0000, 0x0000, 0x0000, 0x0000, 0x62c8, 0x0000, - 0x2f2c, 0x0806, 0x0000, 0xbf26, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4249, 0xe827, 0x436b, 0x8a07, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x7a2b, 0x0000, 0x0000, 0x0000, 0x0449, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0308, 0x0347, 0x0000, 0x0000, 0x72ca, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x16e8, 0x2f66, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6305, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf007, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6066, 0x0000, 0x0000, 0x0000, 0xf767, 0x0000, 0x70a4, - 0x1fce, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x118e, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3708, 0x04a4, 0x0000, 0x3f84, 0x0000, 0x0000, - 0x0000, 0x4025, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0114, 0x0000, 0x0000, 0x42a4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5e0c, 0x7305, - 0x0000, 0x8307, 0x0000, 0x1325, 0x0000, 0x0000, 0x30ea, 0x0000, - 0x0000, 0xf407, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0fce, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5006, 0x0000, 0x3c64, 0x08a9, 0xca07, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5bc7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3c0a, 0x0000, 0x3de9, 0x0000, 0x3b09, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6d44, - 0x1ca9, 0x0000, 0x0000, 0x0000, 0x0000, 0x7686, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7e2b, 0x5d84, - 0x0000, 0x4566, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1828, 0x0000, 0x51a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7b04, 0x0000, 0x0000, - 0x0000, 0x1585, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0a6d, 0xc406, 0x0000, 0x0000, 0x300b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1489, 0x6e07, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2de6, 0x0f32, 0x0000, 0x0000, 0x6784, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc0a6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2ae5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4629, 0x0727, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x73c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x6769, 0x0000, - 0x1848, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02c7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x700b, 0x9c27, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc9c6, - 0x0000, 0x0000, 0x0000, 0x6b87, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x788b, 0x0cc4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7064, 0x0000, 0x4724, - 0x0000, 0x0000, 0x0000, 0x0000, 0x6368, 0xffa6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0d09, 0x0686, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4b84, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6168, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0413, 0x0000, 0x0000, 0x0000, 0x0000, 0x3dc6, 0x0000, 0x54a6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3f87, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7ec6, 0x0000, 0x77a6, 0x0000, 0x0000, 0x4eca, 0x26c6, - 0x0000, 0x0000, 0x0000, 0x4747, 0x0000, 0x0000, 0x3828, 0x0000, - 0x0808, 0x4327, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1e84, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x57ca, 0xce46, 0x0634, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2a49, 0x0000, 0x0000, 0x0000, 0x0000, 0x9fe6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7005, 0x0000, 0x0000, - 0x1652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6509, 0x56e6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4368, 0x8ba7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x202c, 0x0000, - 0x7d6c, 0x0000, 0x0000, 0x0000, 0x002b, 0x3806, 0x0000, 0x4085, - 0x0000, 0x0000, 0x780c, 0x0000, 0x0fac, 0x0085, 0x0000, 0x9e87, - 0x03cb, 0x5d86, 0x0000, 0x0000, 0x6a8b, 0x0000, 0x0000, 0x0000, - 0x00cc, 0x0000, 0x0000, 0x6a04, 0x1d8c, 0xad27, 0x6bc8, 0xe266, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5748, 0x6465, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4c44, 0x7c0b, 0x0000, - 0x0000, 0x6dc6, 0x0000, 0xe6e7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2fe5, 0x0000, 0xaf86, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7b48, 0x0000, 0x2b6a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4a09, 0x4787, 0x0000, 0xb067, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x080b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4bc7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe4a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x578b, 0x5d87, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2daa, 0x0000, 0x0000, 0x0fe5, 0x0000, 0x0000, - 0x0a6c, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6c0a, 0x06e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x5ac8, 0xdb06, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8547, 0x0000, 0x5f85, - 0x0000, 0x0000, 0x0000, 0x0000, 0x556b, 0x0000, 0x44ca, 0x26a6, - 0x0000, 0x0000, 0x6d48, 0x9786, 0x0000, 0x0000, 0x0000, 0xaa86, - 0x0000, 0x7b47, 0x2faa, 0x5a66, 0x0000, 0x0000, 0x0000, 0xc4a7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8026, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xc2e7, 0x0000, 0x0000, 0x0000, 0x0000, 0x3daa, 0x10a7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x128a, 0x0ee6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4328, 0x01c5, 0x43ab, 0x0000, - 0x4f68, 0x0fc4, 0x0000, 0x0000, 0x0000, 0x3de4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6ba9, 0x7cc4, 0x7e28, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2ceb, 0x2e06, 0x0000, 0x0000, - 0x0000, 0x0000, 0x260a, 0xc527, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8a66, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7426, - 0x0000, 0x0000, 0x0000, 0x8ec7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2429, 0x15e6, 0x0000, 0x3605, 0x0000, 0x1b67, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6227, 0x0000, 0x0000, 0x4a6b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0c, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7465, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa566, - 0x0000, 0x0000, 0x0000, 0x0000, 0x244d, 0x0000, 0x45e8, 0xdae6, - 0x0fed, 0x0000, 0x0000, 0x0000, 0x74cb, 0x91e7, 0x0000, 0x7867, - 0x0000, 0x2086, 0x0000, 0x0000, 0x0000, 0x47a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4889, 0xd326, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x9186, 0x0000, 0x0000, 0x7ac9, 0xf046, 0x0000, 0x07e6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6325, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0865, 0x62c9, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x30e4, - 0x3769, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x21e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8e86, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2a89, 0x2587, 0x0000, 0x7027, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6f4a, 0x0000, 0x0000, 0x0000, 0x0000, 0x6645, 0x282b, 0x06a5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3a84, 0x0000, 0x1e67, 0x0000, 0x6cc6, 0x0000, 0x0000, - 0x0000, 0xdca6, 0x0f34, 0x0000, 0x0000, 0x0000, 0x168a, 0x40c7, - 0x0000, 0x66c5, 0x346e, 0x4f44, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7046, 0x0000, 0x0000, - 0x0000, 0x0000, 0x38c8, 0x0486, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x64c9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa5c6, 0x0000, 0x0d04, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2087, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x43c9, 0x05a7, - 0x0000, 0x0000, 0x20eb, 0xbd86, 0x054f, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3a8a, 0x0000, 0x7da8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x240e, 0x0ae7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3ec9, 0x7b87, 0x10ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x11a7, 0x0000, 0x0000, 0x6d08, 0xe646, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20a9, 0x4d64, - 0x0000, 0x0000, 0x0000, 0x0000, 0x17a8, 0x1ec5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x54c5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x23a8, 0x0465, - 0x0000, 0x40a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x438c, 0x1ac6, 0x5368, 0x0000, - 0x094c, 0x0000, 0x0000, 0x0fa7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5f25, 0x106a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x29a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa747, 0x0bce, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3825, 0x0000, 0x50c5, 0x0ce8, 0x0ac7, - 0x502a, 0xfd87, 0x0000, 0x0000, 0x0000, 0x0026, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6ca6, 0x0af2, 0x22a6, 0x0eae, 0x04e7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x754b, 0x2526, - 0x0000, 0x0000, 0x0000, 0x0000, 0x45c8, 0x3a07, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5b6c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc906, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb2a6, - 0x0000, 0x0000, 0x5bab, 0x7e47, 0x0000, 0x0000, 0x2a4a, 0xcf07, - 0x0000, 0x0000, 0x0000, 0x81c6, 0x7a68, 0xfb46, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7da6, 0x0000, 0x0000, - 0x0f33, 0x0000, 0x0000, 0x0000, 0x1b69, 0x0285, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x6d0b, 0xb407, 0x0000, 0x0000, - 0x0000, 0x5567, 0x0000, 0x85c6, 0x0000, 0x0000, 0x414b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x36e4, 0x53a8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9ba6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x9846, 0x0000, 0x0000, 0x4468, 0x1d24, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3c44, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6ec4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6365, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2e67, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4dc7, 0x0000, 0x4e27, - 0x0000, 0x0000, 0x0000, 0x2a67, 0x03af, 0x0000, 0x0000, 0x2a45, - 0x0000, 0x0000, 0x0000, 0x0000, 0x104a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x266c, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xff87, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2689, 0x6046, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x9e47, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3204, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x564b, 0x5c67, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7bc6, 0x0000, 0x0000, - 0x0000, 0xe4e7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4ca4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5f65, 0x0000, 0x6dc4, - 0x0000, 0x0000, 0x0000, 0x7a24, 0x0000, 0x0c84, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39e6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4deb, 0x27c6, 0x0000, 0x0000, - 0x2508, 0x39e5, 0x112e, 0x0000, 0x0000, 0x38c4, 0x0000, 0x0000, - 0x0000, 0xbee7, 0x0751, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x024d, 0x0605, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5b25, 0x0000, 0x0000, 0x0000, 0x3745, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0510, 0x3826, 0x0000, 0x6aa4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1c6c, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xba66, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x142c, 0x06e5, - 0x0000, 0x3845, 0x0000, 0x92c6, 0x07ca, 0x0000, 0x19ec, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6ca7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0a08, 0x1aa4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2c48, 0x6687, 0x0000, 0x0000, 0x5d68, 0x0000, 0x0000, 0x0000, - 0x7748, 0x0000, 0x0000, 0x8626, 0x0000, 0x4587, 0x0000, 0x0000, - 0x0000, 0x5685, 0x0000, 0x17e6, 0x0000, 0x6484, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x67e8, 0x1446, - 0x0000, 0x0000, 0x0476, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x9a67, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x9a46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0c0d, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x12b2, 0x0000, 0x0000, 0x0000, - 0x70c9, 0x1984, 0x0000, 0x0000, 0x6828, 0x0000, 0x23e9, 0x2dc7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7c08, 0xfc86, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2c85, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6206, 0x0000, 0x0000, 0x46e9, 0x4ec7, - 0x0000, 0x0000, 0x0000, 0x4366, 0x0000, 0x0000, 0x036e, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5e66, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x65cb, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x7b68, 0x0000, 0x0000, 0x1fe7, - 0x5f2a, 0x1844, 0x0000, 0x87c6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7f08, 0x0000, 0x0000, 0xae87, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4645, 0x21e9, 0x7226, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x280b, 0x1326, 0x05ac, 0x3b67, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5926, - 0x0000, 0x28e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4b89, 0x4506, 0x006b, 0x2ce6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6aa9, 0x0a05, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xfc06, 0x00c8, 0x6ee5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x79e8, 0x0000, 0x782a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x7289, 0xec66, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0c89, 0x0ca5, - 0x30ca, 0x5887, 0x0000, 0x0000, 0x0000, 0x4965, 0x7ae8, 0x4007, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x50a6, 0x0000, 0x0000, 0x0000, 0x6a66, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3e44, 0x1188, 0x1b27, - 0x0000, 0x0000, 0x0000, 0xb506, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7125, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5068, 0x0d27, 0x0000, 0x6306, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0716, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x42e5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xda87, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5e45, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0b71, 0x0000, 0x0000, 0xc3a6, 0x0000, 0x0b66, - 0x630c, 0x7564, 0x0073, 0x2e46, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0bf0, 0x0000, 0x0000, 0x0000, 0x0000, 0x44e7, 0x00ef, 0x4d67, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8fc6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x53e7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6f04, 0x2e0a, 0x12a4, - 0x0000, 0x0000, 0x0d28, 0x8dc7, 0x0000, 0x7ae7, 0x0000, 0x0000, - 0x3949, 0x03e4, 0x0000, 0x5066, 0x0000, 0x0000, 0x0000, 0x2704, - 0x0000, 0x5c85, 0x0000, 0x0000, 0x0000, 0xcd47, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1d84, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0767, 0x088a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x6c6b, 0x6367, 0x0000, 0x0000, - 0x0000, 0x0000, 0x794c, 0xf726, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8f86, 0x0000, 0x60e4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7948, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x532a, 0x08e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x676b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3be4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0c68, 0x4be7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xf506, 0x0000, 0x0000, 0x0000, 0x6324, - 0x0000, 0x0000, 0x6ceb, 0x0524, 0x0000, 0x0000, 0x1e2c, 0x0bc7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1a29, 0x0000, 0x0000, 0xbb26, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0c45, 0x0000, 0x0000, 0x0000, 0x39e4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x246e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7b05, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x19a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x19a9, 0x0544, 0x0000, 0x6426, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4f64, 0x0000, 0x0000, 0x42ab, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2e64, 0x0000, 0xa046, - 0x0000, 0x0000, 0x0000, 0x6725, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2ca7, 0x6de9, 0x3a66, - 0x0000, 0x27a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7386, 0x0000, 0x0000, 0x0000, 0x0000, 0x6a28, 0xe066, - 0x0000, 0x0000, 0x0000, 0x0000, 0x6fea, 0xe0e6, 0x056b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xe387, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x41a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0dc6, - 0x0000, 0x3da5, 0x0000, 0x15c4, 0x3428, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x48e9, 0x5ba7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3c2d, 0x1ae5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3ba8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2685, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2528, 0x0fc5, 0x0000, 0x0000, 0x2d2b, 0xc1e7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6ce8, 0xe1e6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa367, 0x0000, 0x55a4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x63a5, - 0x0000, 0x6b46, 0x0000, 0x46a5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x364a, 0x1f84, 0x6749, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x62e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x3faa, 0x1ce5, - 0x164a, 0x4b27, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0570, 0xc6e7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xd267, 0x0000, 0x0000, 0x0000, 0x0000, 0x05ab, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8c07, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4589, 0x3dc5, 0x0000, 0x31c4, - 0x0000, 0x0000, 0x0000, 0x80c7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x150d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x79a7, 0x0000, 0x5044, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xc9e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2f4d, 0x4a47, 0x0000, 0x88a7, 0x0000, 0x54e4, - 0x0e10, 0x0000, 0x0000, 0x0000, 0x0000, 0xba86, 0x4388, 0xabc7, - 0x5949, 0xb9c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x6728, 0xbce6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7706, 0x0000, 0x0000, - 0x5c08, 0x11e5, 0x0000, 0x5784, 0x0000, 0xc086, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xc2a7, 0x0000, 0x0000, 0x0000, 0x6b85, 0x7bcb, 0x0007, - 0x0000, 0x0000, 0x64eb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1069, 0x4065, 0x0000, 0x50c4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0ea9, 0x5b07, 0x3f88, 0x0f26, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2caa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1da5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xdf07, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5924, - 0x2b8a, 0xc006, 0x0000, 0x5c47, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3645, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2dca, 0xeaa7, 0x04ea, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4884, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6d29, 0x0000, 0x0000, 0x0000, 0x0000, 0x1567, - 0x0000, 0x4e26, 0x44c8, 0x0d67, 0x2aec, 0x75e4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6005, 0x000e, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x63e4, 0x0000, 0x0000, - 0x0000, 0x6fc4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xd127, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8386, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2206, - 0x0000, 0x3724, 0x0000, 0x0000, 0x0074, 0x0124, 0x0000, 0x0000, - 0x0000, 0x93c7, 0x0000, 0xa846, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5548, 0x0000, 0x0000, 0x7d86, - 0x030f, 0x0000, 0x0000, 0x7906, 0x0000, 0x0000, 0x0000, 0x0044, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x172c, 0x0000, - 0x0000, 0x0000, 0x4849, 0x3b47, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0e2e, 0x4245, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4585, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0208, 0xa4a6, 0x0000, 0x0000, 0x0c32, 0x0000, 0x0000, 0x0000, - 0x57ea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6f86, 0x0000, 0x0000, 0x0000, 0xc466, 0x0000, 0x0000, - 0x3549, 0x1746, 0x0000, 0x89a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x7529, 0x4924, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x508b, 0x2467, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5da9, 0x0000, 0x1449, 0x0000, - 0x0000, 0x2fa4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5f46, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4e89, 0x02a5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x72eb, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4f2a, 0x0000, 0x0000, 0x0000, 0x0000, 0x2987, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xba27, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6804, 0x31c8, 0x0000, 0x50a8, 0x0000, 0x0000, 0x0000, - 0x01b0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0286, 0x0000, 0x6404, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xf926, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6028, 0x0000, 0x0000, 0x0000, 0x532b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb246, - 0x0000, 0x0000, 0x0000, 0x0000, 0x078b, 0x0000, 0x0000, 0x0000, - 0x5029, 0xea47, 0x0000, 0x5086, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xdba7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7527, 0x0000, 0xce87, 0x0000, 0x51c6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41e7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1c45, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb9c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x28a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa826, 0x0000, 0x0000, - 0x0b72, 0x0000, 0x3288, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x79a5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9307, - 0x0000, 0x44a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x7a08, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x02b0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0670, 0x0000, 0x0000, 0x0000, 0x0000, 0x2747, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0092, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x18c9, 0x00c7, 0x0000, 0x88a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xde07, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbf06, - 0x0000, 0x3464, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0989, 0x1144, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4fcc, 0x03a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb147, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd5c6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x428c, 0x02e5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6bc5, 0x0000, 0x0000, 0x764a, 0x4a06, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x08c8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x6589, 0x0000, 0x0000, 0x0000, - 0x098b, 0x0000, 0x0000, 0x7b86, 0x0000, 0x3746, 0x0000, 0x0000, - 0x0000, 0x7007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3c68, 0x0000, 0x0000, 0x0000, 0x0000, 0xd5a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0ef3, 0x0000, 0x0000, 0x0000, - 0x0eac, 0x0000, 0x26a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4a8a, 0x7a07, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6004, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x40c4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6be9, 0x0000, - 0x0000, 0x0000, 0x0310, 0x1227, 0x7f8c, 0x0000, 0x0000, 0xf806, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5246, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0d4c, 0xe466, 0x0000, 0x7e45, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x48ca, 0x0ae5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2164, - 0x0000, 0x0000, 0x0000, 0x57e5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3e09, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c27, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1f2a, 0x4624, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5f04, 0x0000, 0x0000, 0x1349, 0x0000, - 0x0000, 0x0000, 0x1fe8, 0x0000, 0x346c, 0x2864, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2e04, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4148, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x44e8, 0x4647, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0b89, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x238c, 0x41a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x77cb, 0x0000, 0x0000, 0x4a45, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00cd, 0x3be6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07b1, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6688, 0xcd26, - 0x0000, 0xc286, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x25c4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1286, - 0x0000, 0x0000, 0x5489, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xd146, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x164b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0bca, 0x30a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b68, 0x0106, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0e09, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5d66, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xda47, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0307, 0x0000, 0xa906, 0x13ca, 0xbf47, - 0x0000, 0x0000, 0x59ca, 0x1045, 0x230b, 0xaf26, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xf347, 0x0110, 0x0000, 0x0000, 0x0000, - 0x0000, 0xc8e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6e4a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3425, 0x0000, 0x0000, - 0x0000, 0xc7a7, 0x4f29, 0x3625, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0249, 0x1d46, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5508, 0xf3c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x1f2b, 0x00a6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x9806, 0x0000, 0xdda6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3fa8, 0x1687, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7d44, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7464, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5d6c, 0x75e7, 0x0000, 0xe5a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5026, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2309, 0x0000, 0x0000, 0x0000, 0x00b7, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x090a, 0x4425, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5cc4, - 0x0000, 0x0000, 0x1fcb, 0x12e7, 0x6d0a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7326, 0x0000, 0x0000, 0x40a8, 0x6827, 0x0000, 0xd207, - 0x0000, 0x0000, 0x3688, 0x1f67, 0x4908, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x030e, 0x3e85, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1872, 0xdde6, 0x4048, 0x30a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5ce4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x248b, 0x0000, 0x0000, 0x0000, - 0x1c69, 0xa067, 0x60cc, 0xe1a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0eec, 0x0a25, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7229, 0xeec6, - 0x0000, 0x0000, 0x0000, 0xe447, 0x3d4b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9146, 0x5788, 0x03c7, - 0x0000, 0x0000, 0x0000, 0x5a26, 0x68ea, 0x0000, 0x0000, 0x0000, - 0x4d29, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1528, 0x3586, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xce06, 0x4faa, 0x96a7, 0x0000, 0x0000, 0x0000, 0xc787, - 0x0000, 0x0000, 0x0088, 0x2144, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6bc4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0213, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x22e8, 0x13a7, 0x30e8, 0x4b86, - 0x0000, 0x0000, 0x592b, 0x7627, 0x6daa, 0x79a4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x6b69, 0x46e4, 0x4e88, 0xe6c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5f45, 0x0000, 0x0000, 0x17ed, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2545, 0x0000, 0x0000, 0x5fe9, 0x71a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6364, 0x0000, 0x0000, - 0x25ab, 0x0000, 0x0000, 0xf647, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9a86, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x508c, 0x2e27, 0x01f3, 0x0000, - 0x1408, 0x08e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb4e6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5bea, 0x9ce6, 0x0988, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3b46, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x692a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6886, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xcac7, 0x0000, 0x0000, 0x5bec, 0x0000, 0x0000, 0x0000, - 0x0000, 0xc826, 0x6489, 0xadc6, 0x314e, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0c06, 0x0000, 0x2425, 0x0000, 0x0000, - 0x0468, 0x5607, 0x0000, 0x0000, 0x0000, 0x5366, 0x0000, 0x4024, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe46, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5804, 0x0000, 0xbe86, - 0x0000, 0x86c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2645, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x35e5, 0x0000, 0x9587, 0x0000, 0x0000, 0x06ca, 0x0000, - 0x01e9, 0xb507, 0x0000, 0xb146, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7166, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x184c, 0xdce6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6905, 0x0000, 0x7086, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb386, 0x0000, 0x0000, 0x0000, 0x0000, 0x5049, 0xc307, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0bcb, 0x3046, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x67cb, 0x3407, 0x0000, 0x0000, 0x028d, 0x5b67, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x572c, 0x0000, 0x0000, 0x52c4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6ba4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6ce6, 0x53eb, 0x6c05, - 0x0000, 0x7405, 0x00ed, 0x0000, 0x2988, 0x0000, 0x0000, 0x0000, - 0x0000, 0x83e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x7b4b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0588, 0x0987, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x258b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x15eb, 0x40c5, 0x67e9, 0x8a86, 0x0000, 0x0000, - 0x0000, 0x6884, 0x0000, 0xe787, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6968, 0xe186, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1eca, 0x0000, 0x0000, 0x0000, 0x4c48, 0x1945, 0x0000, 0x0000, - 0x0489, 0x0000, 0x0000, 0x0000, 0x1e08, 0x51c7, 0x01a9, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x30e7, - 0x0000, 0x3266, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x096b, 0x0000, 0x2dcd, 0x65e6, - 0x0000, 0x0000, 0x4ee9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2b25, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7707, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5425, - 0x0475, 0x52c6, 0x0000, 0x23e4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x00b8, 0x0445, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x12ea, 0x0000, 0x3568, 0x0000, - 0x0000, 0x2fc6, 0x0000, 0x0000, 0x0000, 0x2924, 0x0000, 0x0000, - 0x22e9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7144, 0x0000, 0x0000, 0x2dc8, 0x6966, - 0x0000, 0xb466, 0x0000, 0xab87, 0x7c0a, 0x0000, 0x0488, 0x0f64, - 0x0000, 0x5124, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5fe5, - 0x0000, 0x7f46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7c65, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0906, 0x2e0c, 0x0000, 0x0000, 0xa827, - 0x0000, 0x0000, 0x0000, 0x49a5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf886, 0x0000, 0x0000, - 0x1b88, 0x43a6, 0x0000, 0x0000, 0x0000, 0x55c5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x040f, 0x1887, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2fa5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb586, - 0x0000, 0x0000, 0x0018, 0x4d07, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x99a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5369, 0x0f06, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8f47, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2c04, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x24a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x74e6, 0x0000, 0x8346, 0x0000, 0x1264, 0x0b0c, 0x0000, - 0x0000, 0x7367, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x74c5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0e4f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2aa8, 0x1bc7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x24a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4fa4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90e6, 0x0000, 0x0000, - 0x0000, 0x69e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5569, 0x0000, 0x6c69, 0x7606, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xe227, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3168, 0x1546, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4d48, 0x42e4, 0x0000, 0xcb27, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x02f6, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6144, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x05c4, 0x0000, 0xfe07, - 0x0000, 0x0000, 0x04b5, 0xb647, 0x0000, 0x7547, 0x2d69, 0x0446, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x274a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6f27, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x39c4, 0x0000, 0x0000, 0x0000, 0x0000, 0x41a8, 0x0000, - 0x0000, 0x02e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5484, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3e48, 0x5aa7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00f7, 0x0000, 0x0000, 0x0000, 0x0000, 0x60a7, 0x0000, 0x0000, - 0x0000, 0x1484, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7509, 0x48e4, 0x526b, 0xb6c7, 0x0000, 0x1b85, - 0x0000, 0x0000, 0x0000, 0x0000, 0x646b, 0x0000, 0x0000, 0x4404, - 0x0ef4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x16ab, 0x1605, 0x0000, 0x9507, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xeac7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0355, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7607, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2225, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6ae6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00ab, 0x0fe6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5e09, 0x1cc6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0888, 0x1445, - 0x0000, 0x51c4, 0x0609, 0x1384, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1e04, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x18a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x786a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6b47, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5488, 0xf747, - 0x0000, 0x0000, 0x0ccb, 0x7987, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2d24, 0x0000, 0x39a4, 0x0000, 0x0000, - 0x0000, 0x3b04, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5d6a, 0x7126, 0x0000, 0x0000, 0x0000, 0x1365, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x27e8, 0x1467, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6a06, 0x0000, 0x0000, 0x0495, 0x4ee6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xdd26, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2e2e, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4569, 0x1ee6, - 0x0000, 0x0000, 0x7c88, 0x0000, 0x0000, 0x17a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x230a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x41c8, 0x5d47, 0x0000, 0x0000, - 0x2b2b, 0x0000, 0x0000, 0x0000, 0x7f28, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x516a, 0x3585, 0x0000, 0x0000, - 0x0000, 0x9147, 0x1ccd, 0x28e7, 0x444a, 0x6304, 0x0000, 0x0000, - 0x0000, 0x9666, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5405, 0x17aa, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0c65, 0x0000, 0x0000, 0x0000, 0x2547, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4568, 0x31a4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x31cc, 0xbe67, 0x0000, 0x2dc6, 0x0000, 0x0000, 0x626a, 0x0000, - 0x0000, 0x0000, 0x2349, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x13a4, 0x0000, 0x75a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xa707, 0x0000, 0x0000, 0x0e88, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6266, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x154a, 0x1405, - 0x0000, 0xe2e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6c44, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5624, 0x0000, 0x0000, 0x0000, 0x0000, 0x6689, 0x0000, - 0x3e4b, 0x0d84, 0x0000, 0x0000, 0x0000, 0x8be6, 0x0000, 0x0000, - 0x0000, 0x1e85, 0x4c2c, 0x7da7, 0x0000, 0x48a5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6fe4, 0x0000, 0x0000, 0x0000, 0xed47, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x73c4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4344, 0x3e0d, 0x24c6, 0x25aa, 0x0000, - 0x0000, 0x0000, 0x0251, 0x0000, 0x0000, 0x5ea4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x9de6, 0x0000, 0x6684, 0x0000, 0x5a45, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xfd86, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0f8b, 0xea67, 0x0000, 0x0000, 0x0000, 0x6e27, 0x0000, 0x0000, - 0x0000, 0xa886, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x71e6, 0x0000, 0x7744, 0x0000, 0x0000, 0x0000, 0x0000, - 0x33c8, 0x0000, 0x0000, 0x0000, 0x0000, 0x40a5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6604, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5929, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0429, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4a29, 0x12c5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4526, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0d8c, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3487, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xde27, 0x0000, 0x0000, - 0x06f0, 0x3da4, 0x0000, 0x0000, 0x0a2b, 0x0000, 0x2828, 0x7a86, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2d48, 0x0e07, - 0x0000, 0x0944, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4e24, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2f28, 0x0206, 0x0000, 0x0000, 0x07a8, 0x2327, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1c0a, 0x80e7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0669, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1a6c, 0x26a5, 0x01ea, 0x0fa5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x62aa, 0x15a5, 0x0000, 0x36e5, 0x0132, 0x5107, 0x0000, 0x0000, - 0x24ce, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2ec9, 0x0104, 0x0000, 0x8967, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x47e5, 0x0000, 0x0000, 0x0000, 0x40c6, - 0x0000, 0x0000, 0x0000, 0x57c6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0ae8, 0x0000, 0x0000, 0x0000, 0x36ca, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3a0a, 0x0f45, 0x0000, 0x0000, 0x0000, 0xe147, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3e6b, 0x0000, 0x0000, 0x0000, - 0x0aea, 0x3b87, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6904, 0x236e, 0x0000, 0x0000, 0x0000, 0x0000, 0xca86, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4c2b, 0x9107, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4b05, - 0x286e, 0x2e86, 0x0000, 0x0000, 0x0000, 0x0000, 0x3aeb, 0x5a44, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3baa, 0xa307, 0x0000, 0xddc6, - 0x0000, 0x0000, 0x0b09, 0x0000, 0x36c9, 0x0185, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x53ea, 0x7ca6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4fe8, 0x02c6, - 0x0000, 0x0000, 0x61c8, 0x5525, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7eab, 0x5304, - 0x0000, 0x75c6, 0x0000, 0xa8a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2c8b, 0x0000, 0x0000, 0x0405, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1aec, 0x2424, 0x0000, 0xf6e6, 0x0da8, 0x3846, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5828, 0x0000, 0x0000, 0x5305, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9ac7, 0x0000, 0x0000, - 0x27cd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7809, 0xea06, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0ce9, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1dec, 0x6127, 0x0000, 0x0346, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2eed, 0x33c4, 0x0000, 0x0227, 0x0000, 0x0000, 0x0000, 0xa8c7, - 0x0000, 0x7767, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6eea, 0x7804, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5889, 0x58c5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x72e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x3eca, 0x2306, - 0x00f5, 0x05a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x6128, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3344, 0x0000, 0x8ac7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x33cb, 0x2aa5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6267, 0x0000, 0x0000, 0x0000, 0x3684, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd567, 0x4ca9, 0x2f26, - 0x0c0b, 0x0000, 0x0000, 0x0000, 0x0000, 0x3864, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5506, 0x0000, 0x3c67, 0x728a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7526, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5c65, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0a53, 0x0000, 0x0000, 0x52e7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x87e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3ee7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0129, 0x0e24, 0x0d0a, 0x2884, 0x0000, 0x3987, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x74e4, 0x57c9, 0x3647, - 0x3ca9, 0x7ec7, 0x76aa, 0x34e4, 0x0000, 0x7087, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfc46, 0x47cc, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x96c6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x04d4, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7fc6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x11ee, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfda7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4168, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4e25, 0x0000, 0x0000, 0x3528, 0x04a7, - 0x0000, 0x0000, 0x0000, 0xf2e7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5fa4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x44eb, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1504, 0x0000, 0x0000, 0x7e48, 0x0000, 0x0000, 0xf946, - 0x0000, 0x0000, 0x0000, 0x0b67, 0x0000, 0x0000, 0x0000, 0x0000, - 0x428a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xeb87, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1e0a, 0x01e6, 0x0000, 0x0000, 0x0000, 0x9966, 0x0000, 0xbfc6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x310b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x51e7, 0x4649, 0x3167, 0x0000, 0x0000, - 0x0000, 0x3ea4, 0x7f68, 0x0000, 0x0000, 0x0000, 0x0000, 0x3fa6, - 0x216b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8966, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x768a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x39cd, 0x0e44, 0x0000, 0x0000, - 0x204c, 0x3286, 0x0000, 0xd6a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0a48, 0x84a7, 0x0000, 0x5a87, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8da6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x7fac, 0x6926, 0x0000, 0x7fa4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3d09, 0x2ea7, - 0x04b6, 0x0000, 0x0000, 0x0000, 0x0000, 0x4684, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4026, 0x0000, 0x0000, 0x0000, 0x6724, - 0x0000, 0x0000, 0x7069, 0x0000, 0x0000, 0x6146, 0x0000, 0x0000, - 0x0198, 0xb127, 0x0000, 0x8b87, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0e4a, 0x4426, 0x0000, 0x00a5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1807, 0x0000, 0x0000, - 0x5f68, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5e6a, 0x5ee5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2e47, 0x0000, 0x9aa7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x254d, 0x0ae4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x03f2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x65c7, 0x7bec, 0x0000, 0x5ea9, 0x0724, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4384, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4c08, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7ec4, 0x0000, 0x0000, - 0x0000, 0x70c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x4528, 0xd087, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x45e4, 0x0792, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3fea, 0x0000, 0x0000, 0x5465, 0x0000, 0x0000, 0x138b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x58a5, 0x0000, 0x5746, - 0x0000, 0x0000, 0x0000, 0xda26, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5945, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x19c8, 0x0107, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6104, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x9f07, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8466, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x32c8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7664, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x150a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6cc4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x454c, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6205, 0x7188, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3188, 0x2cc6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0054, 0x1c87, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x69a4, 0x01c9, 0x0000, 0x598c, 0xe386, - 0x4a48, 0x0000, 0x0a2e, 0xb287, 0x0000, 0x1425, 0x0000, 0x61c4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0811, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7cca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8266, - 0x0000, 0xbb06, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x61ac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6629, 0x8b46, 0x0000, 0xe2c7, 0x77cc, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6584, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1168, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1d88, 0x5067, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9286, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa746, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x06c5, 0x0000, 0x0000, 0x0000, 0x2004, - 0x0000, 0x0000, 0x2be9, 0x0000, 0x776c, 0xeba6, 0x0000, 0x3aa5, - 0x0000, 0x0000, 0x0000, 0x9ec6, 0x0000, 0x5d04, 0x0000, 0x2726, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x324a, 0x7927, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0648, 0x0000, 0x0000, 0x0000, 0x0000, 0x4784, 0x0000, 0x0000, - 0x0000, 0x0000, 0x69ea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1f08, 0x0566, 0x0000, 0x2e25, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5fc5, 0x0000, 0x2d65, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x54c6, 0x0000, 0x0000, 0x332c, 0x2046, 0x0a54, 0x1f25, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0409, 0x3125, 0x0000, 0x6285, - 0x0000, 0x0000, 0x0000, 0xa026, 0x3fad, 0xf607, 0x0000, 0x0000, - 0x0000, 0x0000, 0x04ef, 0x2466, 0x0000, 0x0000, 0x0000, 0x49a6, - 0x0000, 0x0000, 0x06cd, 0x8467, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6709, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7da5, 0x0000, 0xc7c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x72e4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x068a, 0x1086, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2906, 0x0000, 0x0000, - 0x0000, 0x0000, 0x15a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0833, 0xb066, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x374d, 0x0000, 0x694b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x42c8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x69aa, 0x1a46, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6f8a, 0x0000, 0x0000, 0x1be6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4228, 0x0000, 0x0000, 0x0000, 0x64e9, 0x0000, 0x112f, 0x1b44, - 0x0000, 0xb486, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2986, - 0x52ac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x098e, 0xbda7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3445, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c28, 0x2f67, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x12a6, 0x024a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5cc7, - 0x2608, 0x11c4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x63e9, 0x73a7, 0x186a, 0x0665, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5608, 0x0000, 0x0000, 0x0000, 0x0000, 0x5724, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9226, 0x5dec, 0x0000, - 0x0000, 0x0000, 0x388a, 0x7427, 0x0000, 0x1ba5, 0x0000, 0xb3a6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x7768, 0x9c67, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1806, 0x0000, 0x1084, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6c27, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5fe4, 0x5409, 0x0546, 0x0000, 0x0000, - 0x0000, 0x8347, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2e08, 0x0586, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4744, 0x03ac, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1c66, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4145, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xbf27, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5c6c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xd066, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x108c, 0x3fe6, 0x0000, 0x1146, 0x1a09, 0x7f84, 0x0000, 0x0000, - 0x02e8, 0x46a4, 0x0000, 0x2b06, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7344, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1e06, 0x0000, 0x0000, 0x33e9, 0x1566, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3248, 0x0000, 0x0000, 0x5e46, 0x03ed, 0x5984, 0x0000, 0x7ac5, - 0x5b68, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6f08, 0x0000, 0x0000, 0x0000, 0x646a, 0x69e5, 0x0000, 0x0000, - 0x66e9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6226, - 0x0000, 0x0000, 0x0058, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4288, 0x0000, 0x0000, 0x5527, 0x0000, 0x0000, - 0x274c, 0x0000, 0x3008, 0x5584, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5129, 0x37e7, - 0x0000, 0xe346, 0x7de8, 0x0000, 0x282a, 0x0000, 0x0849, 0x2d07, - 0x0000, 0x0000, 0x0000, 0x3025, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7084, 0x0928, 0x1fc5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5568, 0xf4e7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0ad3, 0x0000, 0x0000, 0x5aa4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1886, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x67e5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5a68, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7c48, 0x4e66, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5f88, 0x0846, - 0x0000, 0x0000, 0x0000, 0x0000, 0x19aa, 0x0484, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x76c6, 0x0000, 0x0000, - 0x0000, 0x6ee4, 0x0df4, 0x0000, 0x0000, 0x67e7, 0x308a, 0x14a6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1367, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x618a, 0x5e67, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7049, 0x1246, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x05a4, 0x00ec, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4be4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x082c, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b0b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4da9, 0x4b04, 0x0000, 0x2de5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4626, - 0x0000, 0x45e6, 0x0000, 0x4926, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x23e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5406, - 0x13a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x5947, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3906, 0x0000, 0x73a5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0269, 0x0000, - 0x0000, 0x0000, 0x0000, 0xb826, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0e2b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x08b1, 0x39e7, 0x0000, 0x0000, - 0x0a4d, 0x1826, 0x004e, 0x3ae6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4f28, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8f87, - 0x102c, 0xae07, 0x43c8, 0x6467, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x36c8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6d64, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1da4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0827, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x466c, 0x0000, 0x0000, 0x0000, 0x012c, 0x3784, 0x0000, 0x0000, - 0x056a, 0x9d87, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x796a, 0x0000, 0x0000, 0x5766, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8b86, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x67a4, - 0x1e4c, 0x0000, 0x0000, 0x4a26, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1928, 0x0487, 0x1c0c, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb2c6, 0x0000, 0xe1c6, - 0x0000, 0x4164, 0x0000, 0x0000, 0x1a92, 0xec26, 0x0000, 0x0000, - 0x0000, 0x6766, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff66, - 0x110a, 0x1e46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2388, 0x1287, 0x014e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x9c26, 0x0000, 0x0000, 0x0000, 0x64e4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0bd3, 0x0000, 0x0000, 0x0000, 0x3dc8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbcc7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3f28, 0xa347, 0x0000, 0x0000, 0x5f8a, 0x2185, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3004, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd4e7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x13e9, 0x7884, 0x48e8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4064, 0x0000, 0x0000, 0x6ac9, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8c66, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1104, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xdec6, 0x0000, 0x0000, 0x0589, 0xa0e7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5b85, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2728, 0x54e7, 0x0000, 0x0000, 0x278e, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4a66, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5e29, 0x1266, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x112a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x33c5, 0x0000, 0xdc47, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4ae6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xdaa6, 0x0000, 0x0000, 0x0000, 0xcb66, 0x0000, 0x3d04, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a64, 0x0000, 0x0000, - 0x0000, 0x0000, 0x548c, 0x0000, 0x0000, 0xcce7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x22c6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0c2c, 0x0000, - 0x01d0, 0x87a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x61ab, 0x3087, 0x0000, 0x6a24, 0x0768, 0x1ca7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8b66, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0d90, 0x0000, 0x0000, 0x0000, 0x0000, 0x5786, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb0c6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5284, 0x5c2a, 0x8167, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x412c, 0x5647, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x220a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xda06, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100d, 0x5ba4, - 0x0000, 0x0000, 0x22aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0093, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7508, 0xf7a6, 0x0516, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x60e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2647, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7a65, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4c65, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1645, 0x0000, 0x0000, 0x0000, 0xf626, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5306, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x30c4, - 0x0000, 0x0000, 0x0000, 0xbcc6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3da7, - 0x0000, 0x0000, 0x04b2, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a86, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0c0e, 0xc027, - 0x0000, 0x0000, 0x150b, 0x3b25, 0x0000, 0x0000, 0x0000, 0x0d25, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4e6c, 0x36c5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0178, 0x9d06, 0x0000, 0x0000, 0x0000, 0xcb47, 0x0000, 0x6164, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0328, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2684, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5ca7, 0x0000, 0x53e4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5128, 0x12c7, 0x0000, 0x0000, 0x0c69, 0x4126, 0x0000, 0x0000, - 0x006e, 0x2a65, 0x0000, 0x0000, 0x0000, 0x43e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa9c6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1d4c, 0x1366, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xcb86, - 0x0000, 0x5fc4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x67a7, - 0x0000, 0x0000, 0x0000, 0xb4a7, 0x0000, 0x0000, 0x0000, 0x3cc5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x004c, 0xcc67, 0x0000, 0x0000, - 0x0000, 0x0000, 0x45ca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb6a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4ae5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xac06, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0ba9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x37e6, - 0x0000, 0x0000, 0x084d, 0xb307, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x266e, 0x0000, 0x33ab, 0x4c24, 0x0000, 0x0000, - 0x0000, 0x7444, 0x0000, 0x0000, 0x0000, 0x0000, 0x02ae, 0x7565, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7845, 0x008b, 0x5165, - 0x0000, 0x0000, 0x0000, 0x0000, 0x01f6, 0x4865, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4aa7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7aa4, 0x0000, 0x0000, 0x0000, 0x4424, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc2c6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x640a, 0x0226, 0x0000, 0x0000, - 0x0231, 0x0000, 0x716a, 0x0000, 0x0000, 0x0000, 0x0dc8, 0x0000, - 0x0000, 0x0000, 0x06b3, 0x3945, 0x0012, 0xf7e7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x376a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x738a, 0xe686, 0x0000, 0x9a06, - 0x0000, 0x0000, 0x0000, 0x0000, 0x08ca, 0x40e4, 0x0000, 0x7c24, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01ce, 0x4247, - 0x0000, 0x7165, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5ba6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x06e8, 0x0000, 0x1789, 0x4266, 0x070c, 0x0000, 0x0000, 0xd3a6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x372c, 0x0000, 0x180a, 0x7406, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1e24, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbea7, 0x0000, 0x2064, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4005, 0x172d, 0x0000, 0x3a09, 0xc867, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8b27, 0x2389, 0x5a07, 0x0000, 0x0000, - 0x5a48, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01b6, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0097, 0x2426, - 0x056e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd3c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x182b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3327, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x268a, 0x0000, - 0x0000, 0xe8e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x62c6, 0x0000, 0x0000, 0x5d28, 0x7d45, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2427, 0x088b, 0x3ba6, 0x01b5, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4c25, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2de4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4206, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x56c4, 0x0749, 0x4487, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x55ec, 0x0000, 0x0000, 0x0000, 0x0000, 0xdaa7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x7d8a, 0x52a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x37a9, 0x0000, 0x0000, 0x0000, 0x0954, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1aa7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6846, - 0x0000, 0x0000, 0x17ab, 0xd107, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xc186, 0x180f, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x040c, 0x5de4, 0x0000, 0x09c5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x440b, 0xc847, 0x0d31, 0x3b26, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x138f, 0xf3a6, - 0x0000, 0xde67, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5f66, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03ae, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6e67, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3d06, 0x0000, 0x4d25, 0x0000, 0x0000, 0x064b, 0x0000, - 0x56cb, 0xbdc7, 0x6229, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4444, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x02d1, 0x0000, 0x0000, 0x0000, 0x0000, 0x7f06, - 0x0000, 0x0000, 0x0000, 0x4825, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1708, 0x74e7, 0x0e49, 0x5a06, 0x0000, 0x0000, - 0x0c8e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0070, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0be8, 0x01c7, 0x0000, 0x7924, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5ae6, 0x0000, 0x7fa5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x94c6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1324, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x63c5, 0x0000, 0x4964, 0x0000, 0x0000, - 0x56e8, 0x0547, 0x0000, 0xf126, 0x11ac, 0x77a5, 0x0000, 0x3a27, - 0x00f2, 0x7187, 0x0000, 0x0000, 0x3848, 0x1285, 0x0000, 0x0000, - 0x0000, 0x91c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1faa, 0x0000, - 0x7d6b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x05c9, 0x0000, 0x0000, 0x6de4, - 0x0000, 0x64c6, 0x0000, 0xe987, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xe6c6, 0x0000, 0x0000, 0x0000, 0x5b46, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x78a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3f48, 0x0000, 0x0000, 0x0000, 0x014f, 0x0000, - 0x0000, 0x0000, 0x02ca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x780a, 0x2506, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4966, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0297, 0x0000, 0x0000, 0x0000, 0x040a, 0x7ac7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x75a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x3665, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x08e8, 0x3466, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x560c, 0x5c87, - 0x0bc9, 0x2b27, 0x0000, 0x0000, 0x54ea, 0x48c6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7626, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4369, 0x0000, 0x5588, 0xf927, 0x0000, 0x0000, - 0x0000, 0x5266, 0x0000, 0x48e6, 0x0000, 0x6464, 0x0000, 0x5805, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c5, 0x16a8, 0x2b67, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3c27, 0x32aa, 0x1965, 0x0000, 0x0000, - 0x0c6b, 0x6746, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3d86, 0x0000, 0x3306, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x008e, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5324, 0x2ba9, 0x1127, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4c8b, 0x9ec7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2e65, 0x0000, 0x0000, 0x0000, 0x6747, 0x0000, 0x0000, - 0x0000, 0x0000, 0x02b7, 0xbfe6, 0x6b4b, 0x2ec4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x26e9, 0x0000, 0x0000, 0x0000, - 0x7bea, 0xf606, 0x0000, 0x0000, 0x0000, 0x0000, 0x3dc9, 0xcde6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6026, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5046, 0x0000, 0x0000, 0x13aa, 0x0f66, 0x0000, 0x0000, - 0x0000, 0xb367, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x09f4, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xb226, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0d4d, 0x3126, 0x3ccb, 0xd347, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5e8a, 0x1705, 0x0000, 0x0000, 0x0000, 0xacc6, - 0x0000, 0x0000, 0x0000, 0x15e5, 0x0000, 0xbaa6, 0x0000, 0x7de6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1b66, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4068, 0x0c67, 0x0000, 0x6a65, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x9fc6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7d04, 0x7aca, 0x0000, 0x5f48, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x71ca, 0xe366, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x714a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xd846, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9426, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x050a, 0x0000, - 0x0000, 0x0000, 0x1269, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x514c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x070b, 0x03c6, 0x0000, 0x4524, 0x0000, 0x0000, 0x028e, 0x4aa5, - 0x0000, 0xc9c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x28e6, - 0x0630, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x09ca, 0x0000, 0x0000, 0x6247, 0x10cf, 0x0000, 0x0000, 0x0000, - 0x018b, 0x3e07, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0548, 0x1987, 0x0000, 0x4cc4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1272, 0x1ee5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x75c8, 0x0000, 0x0000, 0xfce6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0869, 0x23a5, - 0x0000, 0x0000, 0x0117, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa3a6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0530, 0x4286, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd387, - 0x0000, 0x0000, 0x0000, 0x0000, 0x06ef, 0xd507, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7b88, 0x0000, 0x0000, 0x0000, 0x1bee, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0730, 0x8c67, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xdc87, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfbe6, - 0x0000, 0x0000, 0x0000, 0xc7e6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1026, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x42c4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x000c, 0x3f06, 0x4dab, 0x9c07, 0x2829, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xaea7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x372d, 0x0967, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6929, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x56ac, 0x0000, - 0x514a, 0x2745, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7224, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6e0a, 0x0000, - 0x3b68, 0x0000, 0x0000, 0x7f05, 0x1668, 0x4b47, 0x0dea, 0x2926, - 0x0000, 0x0000, 0x0000, 0xe907, 0x0000, 0x0000, 0x0000, 0x0000, - 0x69cc, 0xec06, 0x0000, 0x0000, 0x6189, 0x0000, 0x0000, 0x0000, - 0x0a4c, 0x0000, 0x0000, 0x0000, 0x0000, 0x66a5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7784, 0x0e0a, 0x0000, 0x0000, 0x0000, 0x20aa, 0x38e5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2a29, 0x3026, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1712, 0xe926, - 0x0000, 0x0000, 0x5a29, 0x0205, 0x0000, 0x3cc4, 0x0000, 0x0000, - 0x0000, 0x2126, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4da5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1d49, 0x0000, - 0x0000, 0x65e5, 0x0000, 0x0000, 0x5ce8, 0xf867, 0x19a8, 0x18a6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2746, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1b6a, 0x3886, 0x49aa, 0x0000, 0x1609, 0x29a4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ac6, 0x05eb, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6c08, 0x0000, 0x0000, 0x2586, 0x0000, 0x9aa6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xd2a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x00e8, 0x10e7, 0x3169, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4ee7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x686a, 0x0000, 0x0000, 0x0000, 0x4bc8, 0x3967, 0x0000, 0x7a66, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4c85, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x13c8, 0x2e84, - 0x0000, 0x6ac5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xba87, 0x0000, 0x0000, 0x0000, 0x6826, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd967, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1865, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5b48, 0xf9a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07b6, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2148, 0x5de5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x66a7, - 0x0000, 0x0000, 0x0000, 0x5966, 0x0000, 0x0000, 0x0000, 0x6c86, - 0x0000, 0x77e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x83a7, 0x0000, 0x0000, - 0x0000, 0x76c5, 0x0000, 0x8726, 0x0000, 0xc767, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0774, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x05e7, 0x5589, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc8c6, 0x0000, 0x6126, - 0x0000, 0x7f87, 0x0000, 0x0000, 0x0000, 0x88c7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2bc4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1e4e, 0xe287, 0x0000, 0x0000, - 0x0000, 0x78e5, 0x0000, 0x0000, 0x0016, 0x3b24, 0x23ca, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x63c4, 0x4ea8, 0x1bc4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x402b, 0x2a25, 0x264d, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1248, 0x0000, - 0x0000, 0xcdc7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3a24, - 0x0000, 0x0000, 0x0000, 0x41a4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x256a, 0x14a7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8506, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4a84, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1dcb, 0xd9a7, 0x0000, 0x9a27, 0x386e, 0xe406, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5ba9, 0x3de5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x9686, 0x0000, 0x0000, 0x0000, 0x45e5, 0x2aaa, 0x0000, - 0x1c08, 0x02a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0c29, 0xb4c7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5b26, 0x0000, 0x0000, 0x46a8, 0x5ae4, - 0x0000, 0xf386, 0x0000, 0x0000, 0x0000, 0x40e5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9526, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x62cc, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2868, 0x0047, 0x192e, 0x0000, 0x0000, 0x0765, 0x0000, 0x0000, - 0x0452, 0x0000, 0x7008, 0x7824, 0x0000, 0xa0a6, 0x0000, 0x0000, - 0x05d4, 0x0000, 0x3bed, 0x0000, 0x0000, 0x0000, 0x0000, 0x44a7, - 0x0000, 0x52e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x61e4, - 0x0828, 0x5544, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0166, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4144, 0x0000, 0x0000, - 0x0000, 0x0684, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2fe4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0fee, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x31a9, 0x1847, - 0x0000, 0x0000, 0x4f69, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x79e4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0e94, 0x0000, 0x066e, 0x0000, 0x0000, 0x6b44, 0x0000, 0x8666, - 0x42e8, 0x3805, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4c47, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x17e8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2167, - 0x542a, 0x27e4, 0x0bcc, 0x0b87, 0x0000, 0x44e6, 0x0000, 0x0000, - 0x1b49, 0xafc7, 0x08aa, 0x2005, 0x0000, 0x0000, 0x7708, 0xf786, - 0x0000, 0x6824, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04f1, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a32, 0x0000, - 0x0000, 0x0000, 0x2c0e, 0x4f47, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4d44, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0931, 0x2a64, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x152d, 0x5ee4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8667, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c48, 0x5126, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3048, 0x2a05, 0x0000, 0x0000, 0x0000, 0x8166, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7385, 0x0000, 0x0927, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xf667, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xa807, 0x0000, 0x3ea6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x05c8, 0x63e5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2287, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6045, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x13c7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xb306, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0337, 0x0000, - 0x0000, 0xfa27, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3bc4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b6c, 0xb6a7, - 0x1a68, 0x4b44, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8586, 0x0000, 0x0000, 0x0f89, 0x46e5, - 0x0000, 0x0000, 0x0000, 0x7dc7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5be4, 0x658a, 0x0000, - 0x0000, 0x2867, 0x0000, 0x0000, 0x0000, 0x2605, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1284, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4165, 0x0000, 0x0000, 0x1212, 0x5b47, 0x0000, 0x0000, - 0x7aa8, 0x0000, 0x0000, 0x0de5, 0x0000, 0x0000, 0x108a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6f46, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3785, 0x0000, 0xdf67, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00f0, 0x0000, 0x0000, 0x0000, 0x0000, 0xff26, 0x7488, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7525, 0x0000, 0x7c66, 0x0000, 0x0000, 0x1fea, 0x0000, - 0x0000, 0x1145, 0x6bea, 0x78a4, 0x0000, 0x0000, 0x4eec, 0x0000, - 0x0000, 0x0000, 0x0000, 0xae46, 0x0216, 0x5184, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7026, 0x0000, 0x2825, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7347, 0x0000, 0x4d65, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x698c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xcf66, 0x0000, 0x8987, 0x0000, 0x0000, 0x0000, 0x92a6, - 0x0000, 0xf146, 0x2188, 0x1f65, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x30c8, 0x58e5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5d06, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4e05, - 0x0000, 0x0000, 0x0000, 0xf9c7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ca6, - 0x0000, 0x0000, 0x0000, 0x4a44, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2184, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4665, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0050, 0x04e6, 0x0000, 0x0000, 0x0000, 0xa686, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3f86, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x084c, 0x6387, - 0x0000, 0x0000, 0x0000, 0x0000, 0x41e9, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0c46, 0x0000, 0x0000, 0x480b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0f4d, 0x0000, 0x2289, 0x04a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x50a5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2444, 0x0000, 0x0000, 0x5f4a, 0xa187, 0x0000, 0x0000, - 0x0000, 0xa467, 0x0000, 0xf466, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1a48, 0x1067, - 0x0000, 0x0000, 0x0000, 0x0000, 0x63ab, 0x0000, 0x04cf, 0x0000, - 0x0176, 0x3d07, 0x0000, 0x7504, 0x0000, 0x3726, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4a67, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7be6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x51a4, - 0x0000, 0x4167, 0x0000, 0x0000, 0x0000, 0x70e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0a12, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x360e, 0x0000, 0x0000, 0x2744, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1d08, 0xab07, 0x42c9, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0369, 0x0000, 0x0000, 0x0000, - 0x018e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x210b, 0x5c07, 0x0000, 0xcf26, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ba6, 0x0000, 0x0fe7, - 0x0000, 0x0000, 0x0000, 0x9706, 0x0000, 0xa1c6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2d88, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0fab, 0xa6c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6309, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6a29, 0x5764, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7904, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb4c6, 0x0f88, 0x31a7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5025, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0fe8, 0x2b46, 0x0000, 0x0000, - 0x40a9, 0x0965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0a6e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x80e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb7c6, 0x0000, 0x7745, 0x0000, 0x0000, 0x2b2a, 0x2606, - 0x3349, 0x0000, 0x0000, 0x0000, 0x0000, 0x5bc6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xe3c6, 0x0000, 0x0000, 0x0000, 0xe0c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01c6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x142b, 0xe927, 0x08ac, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7346, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x43a4, 0x0000, 0x4e65, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x14c7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6a26, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x59a5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4b08, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x51c5, 0x0000, 0x0000, - 0x178a, 0x2226, 0x0000, 0x0000, 0x0000, 0x43e4, 0x0000, 0x3347, - 0x0aed, 0x0000, 0x0000, 0x75a4, 0x0000, 0x0000, 0x174b, 0x1f44, - 0x0000, 0xdf26, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa766, - 0x39c8, 0x7827, 0x0000, 0x6184, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4225, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3b48, 0x9f87, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0314, 0x7685, 0x0000, 0x0000, - 0x0000, 0x0000, 0x522c, 0x5e26, 0x0000, 0x0000, 0x0000, 0x0000, - 0x75ab, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5845, 0x7b2b, 0x68a5, 0x0000, 0xe8a7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2488, 0x74a7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5fe7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5024, 0x0000, 0x0000, 0x0000, 0x9a26, 0x0e51, 0x0000, - 0x6e69, 0x0000, 0x224a, 0xfb06, 0x0000, 0xe046, 0x23ac, 0x0000, - 0x0000, 0x4764, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x66e8, 0x7805, 0x020c, 0x4d27, - 0x0000, 0x35e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x46eb, 0x0000, 0x3229, 0x0000, - 0x004a, 0x61a6, 0x350b, 0x0425, 0x0000, 0xfac7, 0x0000, 0x0000, - 0x2248, 0x0000, 0x0000, 0xeb47, 0x0000, 0x6344, 0x0000, 0x0000, - 0x0000, 0xe707, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3808, 0x05e6, 0x0000, 0x0000, 0x0000, 0x95e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3429, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x24e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7f65, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4d84, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3a0b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1a06, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x374a, 0x0000, 0x744a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4088, 0x0886, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8d06, 0x0d0c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6265, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3d68, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x58e6, 0x0000, 0x0000, 0x0130, 0x0000, - 0x0cab, 0x3725, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x140a, 0x3187, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x54e5, 0x28c9, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8d07, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5c26, 0x0000, 0xe087, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2a48, 0x47c4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8906, 0x3d6a, 0x32a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8727, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xd187, 0x0000, 0x96e6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7929, 0x2c45, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4ac8, 0x0000, 0x2529, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xdd87, 0x5dea, 0x0000, 0x04ad, 0x0000, - 0x0000, 0xe486, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2026, 0x17e9, 0x48c4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x62ca, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x05ea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x382a, 0x2646, 0x7e6b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2569, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x68a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x014a, 0x2925, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa506, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x13d2, 0x5224, - 0x0000, 0x94e7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00f8, 0x0000, 0x79c8, 0xf266, 0x0000, 0xd027, 0x0000, 0x0000, - 0x0000, 0x0000, 0x010f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2408, 0x0845, 0x0000, 0x0000, 0x0000, 0x0000, 0x3dca, 0x15e7, - 0x0000, 0xcd66, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4748, 0x5dc5, 0x59ea, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x01ab, 0x0000, 0x0000, 0x9be6, 0x0000, 0x0000, - 0x1ba8, 0x2c87, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x56cc, 0xe226, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3364, 0x0000, 0x0585, - 0x03ef, 0x0000, 0x0000, 0x0000, 0x0000, 0x53a7, 0x0000, 0x5427, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xa2e6, 0x580a, 0x2565, 0x0000, 0x0000, 0x0000, 0x2266, - 0x0000, 0x0000, 0x1b08, 0xdc27, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa4e7, - 0x0000, 0x0000, 0x358c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4045, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x062e, 0x06e4, 0x0cd2, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2d85, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2f6b, 0x0000, 0x732a, 0x7964, 0x0689, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9d46, 0x0000, 0x0000, - 0x0000, 0x8446, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5204, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1207, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xaba7, 0x014d, 0x4ba7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x68c5, 0x0000, 0x7e85, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1348, 0x2da7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2a85, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6546, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3deb, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20a8, 0x0000, - 0x42ea, 0x1f06, 0x0000, 0x2cc4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x46e6, 0x37a8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5726, 0x0000, 0x0000, 0x0000, 0xa706, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x72aa, 0x15c6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7985, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2be4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x23c4, 0x0000, 0x0000, 0x0709, 0x36c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf3c6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5c44, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x792a, 0xffe6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6646, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6c45, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb766, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7984, - 0x0000, 0x2c66, 0x0000, 0x0000, 0x0000, 0x0e85, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2168, 0x17a6, 0x0d0b, 0x0000, - 0x0000, 0x0000, 0x0000, 0xc9a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0e86, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6ec6, 0x0000, 0x0ac4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x05b6, 0x0000, 0x0000, 0x6be6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xf426, 0x384a, 0xdda7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2fae, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8ec6, 0x0000, 0x94a6, 0x0000, 0x0000, 0x0000, 0x52e5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x69c5, - 0x0000, 0x0000, 0x420a, 0x0000, 0x312b, 0x2f45, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x28ae, 0x7067, 0x5509, 0xeb07, - 0x0000, 0xdd46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5104, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x172b, 0x14e7, - 0x0000, 0xffc6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1f29, 0xcda7, 0x0000, 0x1304, 0x0000, 0x0000, 0x0000, 0xd8a7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7dc5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3485, 0x0000, 0x0000, 0x0000, 0x6807, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2be5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x00d1, 0x0505, 0x0000, 0x0000, 0x0788, 0x0000, - 0x0000, 0x0000, 0x0000, 0xa946, 0x5d29, 0x5a84, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6088, 0xf3e7, - 0x226b, 0x0d87, 0x4fe9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3e88, 0xdbc7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xebc6, 0x58e9, 0x19a5, 0x0000, 0x0000, 0x78a8, 0x6c26, - 0x0000, 0x0000, 0x0000, 0x42c5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5669, 0x0000, 0x0000, 0x0000, 0x1da9, 0x3766, 0x0000, 0x6dc7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb046, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7c64, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4844, 0x0000, 0x0000, 0x0000, 0x0000, 0x6e2a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x66c4, - 0x0000, 0x7365, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7384, 0x0000, 0x0000, - 0x0000, 0x5325, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xeda7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x76c7, 0x3e4d, 0x0ba5, - 0x0000, 0x0000, 0x0000, 0xb567, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5d67, 0x6789, 0x6286, 0x320b, 0x1707, 0x0000, 0x18c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7c47, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4ce8, 0x2805, 0x0000, 0x0000, - 0x0000, 0x7a45, 0x6969, 0x7124, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x6a48, 0x79c4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x00d8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3fa4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2227, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1926, 0x0000, 0x0000, - 0x0000, 0x8227, 0x0000, 0x0000, 0x0000, 0x8206, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x56a5, - 0x1d4b, 0x60c6, 0x0000, 0x2a04, 0x0000, 0xaee7, 0x02d4, 0x0000, - 0x64a8, 0x6445, 0x6129, 0x14e5, 0x62a9, 0x0000, 0x0000, 0xd526, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0147, 0x01b7, 0x0165, 0x0000, 0x0000, - 0x1988, 0x2104, 0x0000, 0x0000, 0x070a, 0x0000, 0x0000, 0xefa6, - 0x0000, 0x3ac5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x95c7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x7eeb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5965, - 0x0000, 0x0000, 0x7d49, 0x0000, 0x0000, 0x0000, 0x254a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6c64, - 0x0000, 0x0000, 0x5a88, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6007, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8546, 0x0000, 0x0000, - 0x0000, 0x0000, 0x086e, 0x0000, 0x15d2, 0x7684, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5f84, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0969, 0x1126, 0x0000, 0x5e84, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7e08, 0x6944, 0x506b, 0x0000, 0x0000, 0x0000, - 0x086b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x10e8, 0x66a4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5c0c, 0x0000, - 0x30aa, 0x2c67, 0x0000, 0x0000, 0x624a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xff86, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x80c6, 0x0000, 0x0000, 0x0000, 0x8766, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x9946, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2c88, 0x27e6, 0x010a, 0x30a4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3b45, - 0x0000, 0x0000, 0x0000, 0x3564, 0x0000, 0x33a6, 0x0000, 0x5b44, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2ea5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x63e7, - 0x0000, 0x0000, 0x0000, 0xe027, 0x0000, 0x0000, 0x0000, 0x2844, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0b31, 0x2447, 0x004b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5404, 0x576c, 0xe886, 0x0000, 0x0000, 0x0000, 0x5c25, - 0x0000, 0x0000, 0x0000, 0xc986, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1225, - 0x0f8c, 0x6e87, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3064, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x54e6, 0x0000, 0x44c7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa327, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4804, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x55c6, 0x0000, 0x4be6, - 0x0000, 0x0000, 0x04b4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0ca8, 0xd7c7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x77c4, 0x0000, 0x0000, 0x0000, 0x70e5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x126c, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2dea, 0x0000, 0x0000, 0x0000, 0x0000, 0x5646, 0x0000, 0x5824, - 0x222d, 0x0000, 0x0000, 0x6ee7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b46, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7186, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9da6, - 0x0000, 0x0000, 0x3e2c, 0x9a66, 0x0000, 0x35a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x710a, 0x0000, 0x0197, 0x0fa6, 0x0000, 0x0000, - 0x0000, 0x6924, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6b86, - 0x7648, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x600a, 0x0000, 0x6049, 0x1406, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x21ec, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x59eb, 0x0000, 0x5769, 0x48a7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6bc9, 0x2607, - 0x0000, 0x4ee4, 0x0000, 0x0000, 0x0000, 0x0000, 0x6e08, 0xbd27, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7aa7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3644, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x44c6, 0x0000, 0x0000, 0x3b8a, 0x7447, - 0x670a, 0x4525, 0x0000, 0x0000, 0x3888, 0x0000, 0x12e8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6084, 0x0000, 0x2485, - 0x10ea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3f09, 0x0000, 0x0000, 0x8826, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x61e7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x19cb, 0x3127, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1d09, 0x7204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7a26, - 0x0000, 0x0000, 0x5988, 0x0c47, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5ba5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x026a, 0x0000, 0x0000, 0x0000, 0x0000, 0x5385, - 0x0000, 0x2d04, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x520c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0138, 0x5ac7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0909, 0x0000, - 0x0000, 0x9ea6, 0x0000, 0x0000, 0x39e9, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xb5c7, 0x0000, 0xa0e6, 0x1ead, 0x0000, - 0x7ba8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0d69, 0x1487, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x84a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0048, 0x3c85, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8ce6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3984, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7484, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4986, - 0x4e28, 0x0000, 0x0000, 0x0000, 0x0000, 0x0986, 0x0b88, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0d0e, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5f64, 0x0000, 0x4dc4, 0x0000, 0x0000, - 0x0000, 0x1fa5, 0x0000, 0x4447, 0x0000, 0x0000, 0x0dca, 0x0000, - 0x200a, 0x7287, 0x0000, 0x0000, 0x046c, 0x1a85, 0x0000, 0x0000, - 0x5d49, 0x0000, 0x0000, 0x0000, 0x12ca, 0x0000, 0x0000, 0xb746, - 0x0000, 0x0000, 0x0000, 0xa266, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdc6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x99a6, 0x0000, 0x0000, 0x0000, 0x6605, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x13ec, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5bc8, 0x6ca5, 0x0fcd, 0xd686, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1949, 0x1d04, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1a88, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0de8, 0x7d67, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd606, - 0x0000, 0x0000, 0x1b0e, 0x0000, 0x0000, 0x0000, 0x0000, 0x4086, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5146, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0731, 0x0c66, 0x0000, 0x0000, 0x0000, 0x0000, - 0x258c, 0x47c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x7fe8, 0x0000, - 0x0000, 0x25c7, 0x0000, 0xe9e7, 0x0000, 0x5b04, 0x1f89, 0x0000, - 0x0000, 0x39a6, 0x0000, 0x0000, 0x0000, 0x2866, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x60e8, 0x39a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x158b, 0x0000, 0x0000, 0x3a04, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0932, 0x5ae7, 0x0000, 0x7fe4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4828, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x81a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x230c, 0x54a5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x63e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x13e8, 0x0000, - 0x37cb, 0xd847, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3164, 0x0000, 0x0000, 0x0000, 0x0000, - 0x122b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0295, 0x0000, 0x0000, 0x3546, 0x4c0a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7a29, 0x0000, 0x1f4a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0c8b, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7c6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3b85, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4a4a, 0x0985, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x37e8, 0x0000, 0x0000, 0x0000, 0x0000, 0x41c4, 0x0000, 0x0000, - 0x01d7, 0x8c87, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1787, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2d49, 0x25a7, - 0x0000, 0x0000, 0x0000, 0xd9e7, 0x0000, 0x1644, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6d04, - 0x0000, 0x67e6, 0x0000, 0x0000, 0x1a0b, 0x1946, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf446, 0x0000, 0x0000, - 0x0000, 0x0000, 0x408a, 0x6d07, 0x0000, 0x0000, 0x2729, 0x1c04, - 0x0000, 0x0000, 0x030b, 0x0000, 0x0168, 0x4445, 0x0000, 0x0000, - 0x0000, 0xf227, 0x1e48, 0x1e25, 0x05d6, 0x0000, 0x0000, 0x0000, - 0x67c9, 0x9f26, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6726, 0x28ea, 0x7dc4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xc587, 0x4089, 0x2dc4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xd906, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf1e6, 0x0000, 0x6744, - 0x0000, 0x0000, 0x0000, 0x0000, 0x116b, 0x2966, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2407, 0x0000, 0x7286, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xec07, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb7e6, 0x0000, 0xc446, 0x0000, 0x3144, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf167, 0x0000, 0xd6e7, - 0x0000, 0x5244, 0x1c8d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2ec8, 0x0000, 0x0000, 0x0000, 0x0000, 0x5be7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x286b, 0x3e46, 0x0000, 0x84e7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1369, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7145, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8e66, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0d8a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4d04, 0x70c8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5688, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x66e6, - 0x0000, 0x0000, 0x0000, 0x2624, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5526, 0x0000, 0x0000, 0x0000, 0x0000, - 0x000d, 0x1ac5, 0x7d88, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x02ee, 0x0000, 0x0000, 0xd4e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb467, - 0x0000, 0x0000, 0x0271, 0x5946, 0x0000, 0x0000, 0x0000, 0x0000, - 0x080d, 0x5c24, 0x0000, 0x0000, 0x2b29, 0xdbc6, 0x0000, 0x0000, - 0x486a, 0x05e5, 0x0000, 0x0000, 0x436a, 0x1165, 0x0000, 0x0000, - 0x0000, 0x0000, 0x308d, 0x0000, 0x0000, 0x0000, 0x0000, 0x1fa6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1f8a, 0x0000, - 0x5d2c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3f08, 0x0d64, 0x0000, 0x6ce4, - 0x0000, 0x0000, 0x0000, 0x1ca4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x70e4, 0x0000, 0x0000, 0x08ec, 0x0000, 0x0000, 0x44a5, - 0x00c9, 0x05e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7a85, 0x6c28, 0x5825, 0x0000, 0x0000, - 0x0000, 0x1427, 0x0000, 0x0000, 0x0000, 0x0000, 0x11e8, 0xa667, - 0x0000, 0x0000, 0x0000, 0xad86, 0x042c, 0x5a85, 0x0000, 0x0000, - 0x0000, 0x0265, 0x0000, 0x0000, 0x0000, 0x3165, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x69c4, 0x1a4c, 0x0000, 0x0000, 0x0000, - 0x0f49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x56e4, 0x7528, 0x3e27, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x59c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xc5a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1429, 0x0626, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4aa4, 0x0000, 0x0000, 0x0000, 0x88c6, - 0x0000, 0x0000, 0x0000, 0x6564, 0x718b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb7e7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x054c, 0xf1e7, 0x0000, 0x0000, 0x0000, 0xfbc7, - 0x084a, 0xfae7, 0x0000, 0x0000, 0x494b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x038b, 0x86a7, - 0x0000, 0x0000, 0x0000, 0x98a6, 0x0000, 0x0000, 0x07cb, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xdcc6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0336, 0x0000, - 0x3e6a, 0xad87, 0x0000, 0x0000, 0x0c28, 0x0145, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3c25, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04a9, 0x10c6, - 0x1368, 0x3cc7, 0x0000, 0xb446, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x49e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x26c8, 0x92a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x3329, 0x9087, - 0x0000, 0x0000, 0x0000, 0x3c46, 0x0000, 0x0000, 0x20e8, 0x73c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6486, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x9e27, 0x0000, 0x33e4, 0x0000, 0x2b85, - 0x0000, 0x0000, 0x0000, 0x7e84, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x14b2, 0xe166, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3304, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2029, 0xa526, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8e46, - 0x0000, 0x0000, 0x0000, 0x1f24, 0x0000, 0x0000, 0x0000, 0x4805, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1cee, 0x0000, 0x0000, 0x0000, - 0x2409, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3629, 0xb9e7, 0x472c, 0xd1c7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0aec, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x616c, 0x4347, 0x0000, 0x0000, 0x0000, 0x33a5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3de8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x17ea, 0x06c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4248, 0x46e7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb986, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x65e9, 0x4c26, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c86, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7089, 0x0000, 0x0000, 0x0000, 0x0000, 0xa6e7, - 0x0000, 0xd786, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5005, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xe4e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3b44, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x89e6, 0x0000, 0xbc07, 0x51ec, 0x8146, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2625, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9a87, 0x0000, 0x0000, - 0x35a8, 0x1b26, 0x0000, 0x0000, 0x0000, 0x0000, 0x5c6a, 0x22c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5886, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe606, 0x1d2c, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfc26, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xba06, 0x0000, 0x0000, - 0x0000, 0xc6c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe106, - 0x0390, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x05a9, 0x0000, 0x0491, 0x0000, 0x02ce, 0xb447, - 0x2f48, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbc66, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x04eb, 0x0000, 0x0000, 0x83c6, 0x5aa8, 0xf467, - 0x0000, 0xfe86, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x700c, 0xe9e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x64a9, 0x0000, 0x0000, 0x0000, 0x0000, 0xffc7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x022b, 0x5905, 0x0000, 0x4d24, 0x06e9, 0x2806, - 0x21e8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x37aa, 0x0000, 0x170b, 0x0ce7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5269, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5486, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2a2b, 0x0000, 0x0000, 0x0000, - 0x3f4c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x696a, 0x09a5, - 0x0000, 0x3944, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb187, - 0x2fca, 0x0da6, 0x11cb, 0x2946, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0af1, 0x0000, 0x0000, 0x0000, 0x3d8b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9ae6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1a6b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8326, 0x0000, 0x2827, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xf827, 0x0000, 0x0000, 0x0f48, 0x0000, - 0x0000, 0x1d44, 0x0000, 0x0000, 0x0000, 0x8946, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x44a8, 0x1fa7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4149, 0x1066, - 0x0000, 0x0000, 0x12ae, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3f64, 0x0000, 0x0000, 0x0000, 0x0000, 0x6569, 0x4ec6, - 0x0000, 0x0000, 0x0000, 0x2ae4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3804, 0x49ea, 0x38e7, 0x0000, 0xaca7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x47e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x92e6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x51a6, 0x0000, 0x0000, - 0x0000, 0xdc26, 0x0000, 0x95c6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x252a, 0x8ce7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x54c4, 0x0000, 0x0000, 0x1492, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x046e, 0x0000, 0x05ad, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0f2a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0fa4, 0x0000, 0x0000, 0x0000, 0xcac6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a24, 0x1228, 0x0000, - 0x0000, 0x0000, 0x794b, 0x6307, 0x0000, 0x0000, 0x0000, 0x5964, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf9e7, 0x0000, 0x0000, - 0x0948, 0x4265, 0x0000, 0x0000, 0x0830, 0x0000, 0x0000, 0x0000, - 0x0d2d, 0x1b86, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7806, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0000, - 0x358b, 0x0266, 0x0000, 0x0000, 0x3228, 0x0c07, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xc766, 0x0e91, 0x0000, 0x7fa8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5dc8, 0xf527, 0x0000, 0x0000, - 0x1289, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x096e, 0x0000, - 0x0000, 0xace6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6169, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4ac4, 0x0000, 0x3507, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x98c6, 0x0000, 0x0000, 0x0000, 0x6d84, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x10a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x1768, 0x0000, - 0x0108, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x35ab, 0x0000, 0x55a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1088, 0x3b06, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7546, 0x0000, 0x0000, 0x6d49, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x60c8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0b92, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x67c4, - 0x57a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3548, 0x2bc5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4b69, 0x0766, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x24ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3727, 0x1468, 0x0087, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x64c4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1d2e, 0x0000, 0x0000, 0x0000, - 0x0000, 0xf947, 0x0000, 0xd966, 0x0000, 0x0000, 0x3128, 0x0000, - 0x05f4, 0x81c7, 0x0000, 0x0000, 0x0000, 0x26a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2d68, 0x0000, 0x0000, 0x0000, - 0x15ee, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5348, 0x0000, 0x0000, 0xd167, 0x0000, 0xc806, 0x0000, 0x0000, - 0x0000, 0x6507, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2304, 0x06cc, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x34a4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1f27, 0x0000, 0x0000, 0x0cea, 0x1fc6, - 0x0000, 0x20c5, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x64a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xcbc6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x53e5, 0x7988, 0x7ba4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6f24, 0x0000, 0x0000, - 0x0000, 0xacc7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x60e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x308c, 0x1947, 0x0000, 0x0000, - 0x0000, 0x0000, 0x020d, 0x4606, 0x0000, 0x0000, 0x0000, 0x6927, - 0x0000, 0x0000, 0x46c8, 0x0000, 0x0000, 0x0000, 0x7548, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7205, 0x0000, 0x0000, 0x0000, 0xaa27, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4d4b, 0x1d85, 0x0000, 0xe7c6, - 0x0000, 0x0000, 0x27c8, 0x17c5, 0x0000, 0xac07, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2ba7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x76e8, 0xf686, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2b09, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6a44, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x71c6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x026e, 0x0000, - 0x146a, 0x0aa7, 0x0000, 0x3ce4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x122a, 0x0000, 0x0a73, 0x0000, 0x0000, 0x7ea4, - 0x0000, 0x0000, 0x0000, 0xf047, 0x0000, 0x0000, 0x152b, 0x45a5, - 0x084b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9527, - 0x0a50, 0x0000, 0x2c0a, 0x38c5, 0x0732, 0x0000, 0x0000, 0xa6a7, - 0x3189, 0x0d66, 0x0000, 0x2e45, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1985, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xd546, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3148, 0x9687, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7de5, - 0x0000, 0x0000, 0x0000, 0xd407, 0x0000, 0xbde6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x7aa9, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8606, 0x0000, 0x0000, 0x0000, 0x5904, 0x0000, 0xcba6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5b06, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x9ee6, 0x0000, 0x0000, 0x0000, 0xc907, - 0x0217, 0x0000, 0x0000, 0x0000, 0x0000, 0x3ca5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1328, 0x0365, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xf8e6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x068e, 0x0000, 0x02b4, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6668, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x72ab, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6207, 0x0000, 0x0000, 0x0000, 0x0000, - 0x10ef, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x38ca, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6a89, 0xd6e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6a87, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7704, 0x0000, 0x0000, - 0x0000, 0x0000, 0x470a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3809, 0x0000, 0x0000, 0x0000, 0x0868, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xe446, 0x522a, 0x0000, 0x5b2b, 0x5346, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x53a4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3245, - 0x0000, 0x0000, 0x130b, 0x0000, 0x0000, 0x0000, 0x0000, 0x7207, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0668, 0x2807, - 0x0000, 0x37a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x268b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x304b, 0x0000, 0x0000, 0x1de5, - 0x0000, 0x0000, 0x1048, 0x0a67, 0x0000, 0x11e4, 0x0000, 0x2b87, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x77c6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1a44, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x35c4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x00ea, 0x1aa5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6427, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7506, 0x0000, 0x0d85, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6ea4, 0x496b, 0x1b65, 0x31ca, 0x2d87, 0x0000, 0x91a7, - 0x0000, 0x0000, 0x2ac9, 0x1e26, 0x25e9, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5c6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1fc9, 0x4644, 0x0000, 0x6244, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1c7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3da8, 0x1b06, 0x0000, 0x0000, 0x0000, 0x0000, 0x1b6b, 0x2aa7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x104b, 0xd8c7, 0x134c, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x57a8, 0x4b85, - 0x0000, 0x0000, 0x6de8, 0x0000, 0x1869, 0x5345, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xd0a6, 0x0000, 0x0000, 0x0000, 0xdfe6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x9987, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4de4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x63c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0a8a, 0x0f47, 0x0000, 0x0000, - 0x0000, 0x68a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x7ea8, 0x0000, 0x0000, 0x4826, 0x0000, 0x0000, 0x0000, 0x3986, - 0x748a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x03e8, 0x1065, 0x0000, 0x0000, - 0x0000, 0x4ba6, 0x0000, 0x0000, 0x0000, 0x9bc6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0889, 0x22c5, 0x14a8, 0x2665, 0x61a8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0426, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8b26, 0x0000, 0x0000, 0x5a08, 0xf427, 0x196a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3529, 0x28c6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1e2b, 0xa487, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3405, 0x0000, 0x0000, 0x0000, 0xa286, 0x0000, 0x69e7, - 0x0000, 0x0000, 0x52ca, 0x2cc5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x68e8, 0xe3e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x51cc, 0xbe46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x146b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x274d, 0x7a44, - 0x0000, 0x0000, 0x0000, 0x4b24, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7645, 0x3648, 0x0000, 0x0000, 0x0000, 0x324c, 0x3367, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x01ac, 0xb767, 0x334e, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3c66, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x54a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x08c9, 0x0000, - 0x0000, 0x0000, 0x0000, 0xafa7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0d89, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6124, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5d65, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x088e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3f24, 0x0000, 0x28c5, 0x0000, 0x0000, - 0x148f, 0x4e86, 0x51ca, 0x0000, 0x0000, 0x0000, 0x04a8, 0x0406, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5389, 0x1306, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x48a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x058e, 0x0fc6, - 0x0b2a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xbf66, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x196c, 0x91e6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4269, 0x9a07, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x75e6, 0x0000, 0x53c5, 0x1ceb, 0x6e04, - 0x0000, 0xca26, 0x0000, 0x0000, 0x0000, 0xf4a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x79e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1e47, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x34a5, 0x0000, 0x0000, 0x01c8, 0x6845, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3a2a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6849, 0x5606, 0x33a9, 0x6ae4, 0x0000, 0x0000, - 0x0000, 0x49c4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0e4b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x05a8, 0x1525, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x18c4, 0x0000, 0x0000, 0x46ab, 0x4925, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5666, 0x0000, 0x0000, - 0x0000, 0x4a25, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7227, 0x0e8c, 0x0000, 0x0000, 0x0000, - 0x0000, 0xaa06, 0x0000, 0x0000, 0x0000, 0x6444, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5429, 0x2686, 0x0000, 0x58a4, - 0x7dc9, 0xece6, 0x0000, 0x1c84, 0x0000, 0x0000, 0x0000, 0xe607, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4c04, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc4a6, 0x0000, 0xfee7, - 0x1108, 0x4386, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7024, 0x0000, 0x0000, 0x7549, 0xeac6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb7a6, - 0x0000, 0x7ce5, 0x0000, 0x2564, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4845, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3905, 0x0000, 0x0000, 0x0000, 0xd1e7, 0x146c, 0x56a7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0612, 0x5e64, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2a4b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8866, 0x0000, 0x0000, 0x0000, 0x0000, 0x56ec, 0x0000, - 0x0000, 0xb707, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x79e7, - 0x0000, 0x0000, 0x29ed, 0x0000, 0x0000, 0xf766, 0x0000, 0x0000, - 0x0000, 0x0000, 0x21a8, 0xc3c7, 0x4ec9, 0x3186, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xe2e7, 0x4f4a, 0x0005, 0x0000, 0x0000, 0x78c8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0128, 0x3386, - 0x0000, 0x77c7, 0x0000, 0x0000, 0x4868, 0x2fc4, 0x0000, 0x1a84, - 0x0000, 0x0000, 0x0000, 0x0000, 0x78aa, 0x5524, 0x0000, 0x0000, - 0x020e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x51e5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0871, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5de6, 0x0000, 0x0000, 0x0000, 0x0000, 0x34e8, 0x1ce6, - 0x0000, 0x0000, 0x7f0a, 0x2585, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0c88, 0x1da6, 0x0000, 0x0000, 0x0000, 0xab46, 0x0000, 0x0000, - 0x0000, 0x9707, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9866, - 0x102e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18e5, - 0x0000, 0x0000, 0x356c, 0x0000, 0x0000, 0x0000, 0x0000, 0x76a6, - 0x5328, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5907, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x9446, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x24ec, 0x2706, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x12e9, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4984, 0x0098, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x33cc, 0x0d06, 0x0000, 0x0000, 0x5eaa, 0x20e6, - 0x0000, 0x4625, 0x0000, 0x0000, 0x0000, 0x2804, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1c24, 0x0000, 0x0000, 0x0000, 0x0000, 0x04b1, 0x6627, - 0x0000, 0x79c5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfd46, - 0x106b, 0x1d65, 0x0209, 0x0000, 0x49c8, 0x90a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1baa, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x118a, 0x30c7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8f07, 0x0000, 0x0000, 0x0000, 0x3a06, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x198b, 0x32e5, 0x25e8, 0x9847, - 0x0000, 0x0000, 0x0000, 0x0000, 0x00a8, 0x28a5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x018a, 0x6407, 0x0000, 0xdee7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3f0d, 0x4da6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7306, 0x0000, 0x2f04, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1b46, 0x488c, 0x0000, 0x6008, 0x38c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0010, 0x0000, 0x548a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1486, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0656, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0f0d, 0x23a6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1c49, 0x2ae6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x03b6, 0x0000, 0x0000, 0xe286, - 0x0000, 0x0000, 0x0115, 0x0000, 0x0000, 0x0000, 0x02b6, 0x8ca7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa5e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x47e9, 0xc7c6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6fe6, 0x0000, 0x0000, - 0x0000, 0x77e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xdbe7, - 0x15a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x2146, 0x20ae, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb266, 0x0000, 0x0000, 0x2588, 0x8126, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4906, 0x0000, 0x0000, 0x0000, 0x0000, 0x0688, 0x5bc5, - 0x0000, 0x0000, 0x1b2b, 0x1de7, 0x0000, 0x8d26, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5b88, 0x0287, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3446, 0x0000, 0x0000, 0x0000, 0x4ca5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4f04, 0x0000, 0x0000, 0x0aa8, 0x7b07, 0x0000, 0x0000, - 0x0000, 0x0000, 0x71a8, 0x56c5, 0x00eb, 0x8aa7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x14e4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2308, 0x07c5, 0x0000, 0x0000, 0x042a, 0x0000, - 0x0000, 0x2ce4, 0x174d, 0x7a87, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4927, - 0x0000, 0x0000, 0x0000, 0x1a65, 0x0000, 0x0000, 0x2a0d, 0x1226, - 0x0000, 0x8d46, 0x0000, 0x6d27, 0x0000, 0x0000, 0x6908, 0x20e4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7284, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x136f, 0x0000, 0x0000, 0x0000, - 0x39aa, 0x0c27, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa987, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a24, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xae06, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0fd3, 0x0000, 0x0000, 0x0000, 0x0000, 0x9366, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1444, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5fa6, 0x0000, 0x1765, 0x0000, 0xa0c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4f66, 0x0000, 0x0000, 0x02eb, 0x1ae4, 0x0000, 0x0000, - 0x0000, 0xa346, 0x0000, 0x0000, 0x0c2d, 0x5987, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5228, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2566, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x10ce, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x524c, 0x8746, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfa47, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x682b, 0x1f07, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xcec6, 0x0000, 0x0000, 0x426a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4f46, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6aa5, - 0x47ab, 0x1f26, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x41ea, 0x0000, 0x0000, 0x0000, 0x0000, 0xb166, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0288, 0x0627, - 0x0000, 0x0000, 0x0000, 0x7c05, 0x0000, 0x0000, 0x0000, 0x5b05, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3e28, 0xc567, 0x0000, 0x0000, - 0x0000, 0x0000, 0x07c9, 0x2186, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x9626, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3dea, 0x1827, 0x0000, 0x0000, 0x0000, 0x0000, 0x0d4a, 0x0000, - 0x0000, 0x6b66, 0x0000, 0x0000, 0x02ed, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x65a9, 0x73a6, 0x0000, 0x0000, - 0x1be8, 0x4ca6, 0x7728, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5344, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x53c4, 0x0000, 0x0000, - 0x0509, 0x1b07, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x206b, 0x0000, 0x0000, 0x0000, 0x370a, 0x8b47, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0949, 0x3b66, - 0x0000, 0x0000, 0x178c, 0x1164, 0x0000, 0x63a4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc486, 0x0000, 0x0000, - 0x0000, 0x0000, 0x04f5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc746, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2446, - 0x0000, 0x1d05, 0x0000, 0x0000, 0x6ee9, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4128, 0x01c4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5ca6, - 0x0000, 0x0000, 0x0000, 0x7c06, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0df0, 0x0000, 0x0000, 0x3524, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x62a7, 0x0000, 0x0000, - 0x0000, 0xc726, 0x0000, 0xdd06, 0x0000, 0x0000, 0x1d2b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x75e5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7764, 0x1c28, 0x1ea5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1e2e, 0x0000, 0x0000, 0x0000, - 0x0000, 0xf2e6, 0x0000, 0x0000, 0x0000, 0xa086, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x58a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4548, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc386, 0x0000, 0x0000, - 0x0000, 0x3764, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x230e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5b24, 0x0000, 0x0000, 0x0000, 0x2b84, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5ec6, 0x6a09, 0x2544, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x67a9, 0xb1c6, - 0x17ae, 0x0f27, 0x0000, 0x0000, 0x4f09, 0x6587, 0x0000, 0x0000, - 0x458b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x368a, 0x1584, - 0x424b, 0x6985, 0x1d0d, 0x7b06, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x126a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4325, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6b64, 0x0000, 0x0000, - 0x6949, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xa167, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb946, - 0x4c8c, 0x3105, 0x0000, 0x0000, 0x0000, 0x20c6, 0x03ee, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5e24, 0x44a9, 0x0004, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5705, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6844, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6064, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7325, 0x0000, 0x0000, - 0x0000, 0x5445, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2688, 0x3786, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x64ab, 0x1686, 0x0000, 0x0000, - 0x22cd, 0x21e7, 0x0000, 0x0000, 0x1acd, 0x3f26, 0x0000, 0x97e7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3068, 0x21e6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xcda6, 0x054a, 0x0b86, - 0x0000, 0x3964, 0x0000, 0x0000, 0x294c, 0xc2a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0e2a, 0x0246, - 0x0000, 0x0000, 0x0000, 0xd9c6, 0x0000, 0x0000, 0x0000, 0x78a5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x16c6, 0x0000, 0x0000, - 0x082a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x79a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2907, 0x0000, 0x0000, 0x4989, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xdf46, 0x0000, 0x0000, 0x7848, 0xf826, 0x0000, 0x0000, - 0x0000, 0x2687, 0x3f8b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4988, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4cc5, 0x632c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x244c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8e06, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6388, 0x59e7, 0x0000, 0x0000, 0x28c8, 0x1a45, 0x0000, 0x0000, - 0x0000, 0x57a4, 0x5ec9, 0x3b05, 0x0000, 0x0000, 0x0000, 0xf367, - 0x22ca, 0x86e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3e29, 0x0527, 0x0000, 0x0000, 0x4f48, 0x05c5, 0x7828, 0x0000, - 0x6548, 0x4184, 0x0000, 0x0000, 0x042d, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4285, 0x0000, 0x7ca5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa2a6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xa246, 0x0000, 0x53e6, 0x0000, 0x0000, - 0x0000, 0x2644, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x56ab, 0xe3e7, 0x0000, 0x0000, - 0x0000, 0x5ee7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf187, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b11, 0x16c5, - 0x0000, 0x0000, 0x0000, 0xf587, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4124, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3509, 0x6b27, - 0x0000, 0x0000, 0x0000, 0x0000, 0x53e8, 0x2905, 0x0000, 0x4224, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5986, 0x0000, 0xbca6, - 0x0a0e, 0x0866, 0x0000, 0x0000, 0x0000, 0x0000, 0x0769, 0x11a6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x61e8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbb46, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2aee, 0x35c7, 0x6469, 0x93e7, - 0x54a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa9a6, 0x06b0, 0x0000, - 0x0000, 0x0000, 0x0000, 0x49c6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2927, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3aa4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x398e, 0x0000, 0x0000, 0xd9e6, - 0x0000, 0x0000, 0x7868, 0x2a86, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xc866, 0x0000, 0x0000, 0x1f4c, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x50c8, 0x1b45, 0x0000, 0xe047, 0x000b, 0x0000, - 0x0000, 0x4765, 0x0000, 0x38e4, 0x0000, 0x0000, 0x0000, 0x7e86, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4aa9, 0x1426, 0x0000, 0x2ba4, - 0x0000, 0x4186, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x284b, 0x3606, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x28aa, 0x1be5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x46c4, 0x0000, 0x0000, - 0x0000, 0xae47, 0x3c2b, 0x3686, 0x0000, 0x0604, 0x3928, 0x4c45, - 0x5e89, 0x4d45, 0x0000, 0x0000, 0x0000, 0x5e65, 0x0000, 0x9827, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18a4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4408, 0x3d85, 0x0d6e, 0x33c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7de4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00b0, 0x0000, 0x0000, 0xc586, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5424, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xe666, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x14a4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6529, 0x6ea6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3e49, 0x0000, 0x0000, 0x0000, - 0x264c, 0x0125, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x36a4, 0x5a2a, 0x1245, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1626, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xac26, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1905, 0x0000, 0x77e4, - 0x0000, 0x0000, 0x0000, 0xf106, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xb366, 0x0000, 0x3c26, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x11ca, 0x0a84, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7ee5, 0x0000, 0x0000, 0x0000, 0x2764, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5ee9, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5906, - 0x0000, 0x0000, 0x0000, 0xd746, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1bc8, 0x0000, 0x7b2a, 0xb0c7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9f27, - 0x434a, 0x5847, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0e6f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xdea7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x35e7, 0x0c2a, 0x5327, 0x0549, 0x1da7, - 0x0000, 0x0000, 0x0000, 0x2107, 0x0000, 0x0000, 0x1aa8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x38e9, 0x0000, - 0x0000, 0x0000, 0x7148, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4e0b, 0x0000, 0x47c8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2c44, 0x0000, 0x0000, 0x0000, 0xc2c7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x088f, 0x1d67, 0x5a6c, 0xe2a6, - 0x0000, 0x0000, 0x0000, 0x77a7, 0x0000, 0x67c5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x02f2, 0x0000, 0x0000, 0x3e05, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4466, 0x1de9, 0x0b05, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xa3c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0a09, 0x8687, 0x0000, 0x0000, 0x0ece, 0x0000, - 0x0000, 0x0000, 0x3beb, 0x2247, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3e24, - 0x0000, 0x0000, 0x53ab, 0x20a7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x01a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x62e6, - 0x1f48, 0x5047, 0x0000, 0x0000, 0x0000, 0xb2a7, 0x756a, 0x76a4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6644, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7ac8, 0x2947, 0x0000, 0x0000, 0x0000, 0x0000, - 0x442a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7666, - 0x0000, 0x9486, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7104, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xab86, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x56a4, 0x2f2b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x56e7, 0x0000, 0x0000, 0x592a, 0x3047, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1009, 0xc4e7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x350d, 0x6fa7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x7108, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4509, 0x2846, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0389, 0xe206, 0x062c, 0x0000, 0x0000, 0x0000, 0x0000, 0xe506, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x34a7, 0x0000, 0x0000, 0x3749, 0x33e6, 0x0000, 0x0000, - 0x242b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x19ce, 0x0dc4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x19a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0277, 0xc067, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa786, 0x0000, 0x9547, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x44ac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xd706, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x27e5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0e14, 0x9387, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x78e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf287, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5be8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x702b, 0x1085, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x04ca, 0x68c4, 0x0000, 0x0000, 0x0000, 0x2f65, 0x1b48, 0x0105, - 0x528a, 0x7f24, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0ded, 0x3066, 0x50e9, 0x6da7, 0x0000, 0x0000, 0x06aa, 0x62c7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x394e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7746, - 0x0000, 0x0000, 0x0000, 0x3147, 0x0000, 0xaae6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6e44, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb027, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04c8, 0x0f87, - 0x2aca, 0x18e7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5a8c, 0x4e84, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6488, 0x2147, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1a07, 0x0000, 0x09e6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5ca8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4bc6, - 0x0000, 0xbac6, 0x66a9, 0xc226, 0x0000, 0x0000, 0x10ec, 0x32a5, - 0x0000, 0x0000, 0x1648, 0x0c86, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3c24, 0x0000, 0x0000, 0x0000, 0xac46, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x62e5, 0x0428, 0x9967, 0x6b29, 0x0000, - 0x3a68, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x37e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0acb, 0x1004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4968, 0x0000, 0x0000, 0x0000, 0x568a, 0x7f47, 0x0000, 0x1864, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc146, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5586, 0x0000, 0x0000, 0x2b28, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2da5, 0x0000, 0xd266, - 0x0000, 0x0000, 0x3b0a, 0x0000, 0x362e, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0397, 0x0000, 0x0000, 0x0000, - 0x7cac, 0x0000, 0x582a, 0x0065, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1ca5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0cc8, 0x0000, 0x0000, 0x0000, 0x0000, 0x6c46, - 0x7fc8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x06f6, 0x0000, 0x0e68, 0x0000, 0x0000, 0x0000, - 0x0000, 0x74a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x57c5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xd806, 0x0352, 0x3c84, 0x0000, 0x0000, 0x0000, 0x1727, - 0x4d4a, 0x3426, 0x0000, 0x6466, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9dc6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4f24, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3be7, 0x20ca, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x67c6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x034b, 0x08c5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1b2f, 0x0000, 0x5008, 0x0666, 0x0000, 0x0000, - 0x2d0d, 0xc647, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5187, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5fc7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2548, 0x5c27, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x51e9, 0x1bc5, - 0x7149, 0x0000, 0x0000, 0x7ea6, 0x7be8, 0xfb26, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3eea, 0x0000, 0x0000, 0x0000, 0x1b12, 0x1345, - 0x0000, 0x0000, 0x0000, 0x5985, 0x0000, 0x6987, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4da8, 0x1f86, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5d89, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0cee, 0x0000, 0x0057, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4807, 0x0000, 0x0000, - 0x0000, 0x5106, 0x0000, 0x0000, 0x0000, 0x2965, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4f0c, 0x0000, 0x0000, 0x0000, 0x40c8, 0x0d65, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6a69, 0x0000, 0x0000, 0x0000, 0x0000, 0x3f04, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x00f4, 0x6e65, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7345, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0b69, 0x7c25, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1908, 0x1064, 0x0158, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2da9, 0xb327, 0x0000, 0x0000, - 0x0000, 0x0000, 0x038a, 0x0ce5, 0x0000, 0x0000, 0x63c8, 0x7ea5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x04ec, 0xf0a7, 0x0000, 0x6aa6, 0x0000, 0x0000, 0x21ea, 0x40e6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2a4e, 0x0000, 0x0000, 0x2584, - 0x3ac9, 0x3465, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6889, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf226, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3124, 0x0000, 0x0000, - 0x2ca8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x57eb, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3065, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0968, 0x5885, 0x38ab, 0xa8e7, - 0x0000, 0x25e4, 0x0000, 0x0000, 0x608a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5da4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8526, 0x0000, 0x0000, 0x59ab, 0x1c46, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6f45, 0x35ee, 0x4e46, - 0x0000, 0x0000, 0x0000, 0x0000, 0x584a, 0x0000, 0x0000, 0x0000, - 0x066d, 0x5744, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6786, 0x0000, 0x0000, - 0x022a, 0x0000, 0x0000, 0x0000, 0x0000, 0xf127, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a86, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0373, 0x6ce7, - 0x3e4c, 0x0000, 0x0caa, 0xe026, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x366a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x78ca, 0x0000, 0x1029, 0xcd87, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7ca7, 0x3ec8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x66e4, - 0x0000, 0xf0e7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0c49, 0xdb87, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0118, 0x0000, 0x140b, 0x82c7, - 0x0000, 0x3d87, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1028, 0x05a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2c28, 0x45c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6225, - 0x0000, 0x0000, 0x0000, 0x8f26, 0x17a9, 0x0000, 0x0000, 0x0000, - 0x0357, 0x2c25, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfd06, - 0x0000, 0x0000, 0x0000, 0x4bc5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0410, 0x6ae7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xfb66, 0x0000, 0x0000, 0x00b2, 0x0084, - 0x0000, 0x0000, 0x39ab, 0x5f87, 0x0000, 0x0000, 0x0000, 0xb526, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb4a6, - 0x0000, 0x0000, 0x0000, 0x9206, 0x0000, 0x0000, 0x0000, 0x1d26, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1fe6, 0x0000, 0x0000, 0x1b09, 0x0000, 0x0000, 0x0000, - 0x23cb, 0x0000, 0x0000, 0x0000, 0x0077, 0x0000, 0x0000, 0x0000, - 0x5a6a, 0x4304, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x23a7, - 0x0000, 0x0000, 0x0000, 0x4607, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5644, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9bc7, - 0x0000, 0x0000, 0x07f3, 0x0000, 0x042b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x410c, 0xe8c7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4ecb, 0x0000, 0x0000, 0x0000, 0x0000, 0x4545, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7d25, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x37c5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xa426, 0x0000, 0x0000, 0x68a9, 0x4f86, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x22cb, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6c84, - 0x0000, 0x0000, 0x0000, 0x0000, 0x7e4a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x99e7, 0x0000, 0x2604, 0x0000, 0x3f47, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0356, 0x0000, - 0x0ba8, 0xb007, 0x634a, 0x6964, 0x580b, 0x0000, 0x23ad, 0x0e45, - 0x3ca8, 0x7047, 0x1229, 0x0000, 0x0268, 0xfe67, 0x0000, 0x0000, - 0x0000, 0xf1a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xd807, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5d48, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7c68, 0xf586, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc1c6, - 0x0000, 0x6d46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7f44, - 0x0000, 0x0000, 0x0000, 0x65c4, 0x0fcb, 0x0000, 0x0000, 0x9e06, - 0x0000, 0x0000, 0x65c8, 0x7765, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7aa6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x7268, 0x0705, 0x0000, 0x0000, - 0x0c94, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4fcb, 0x0000, 0x0000, 0x0000, 0x0000, 0x5c45, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5ec5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8b07, 0x0000, 0x0000, 0x1ace, 0x0000, - 0x0000, 0x0000, 0x10a9, 0x0000, 0x188d, 0x1507, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x9006, 0x0000, 0x9ba7, 0x0000, 0x0000, - 0x4348, 0x1526, 0x6cea, 0xe306, 0x0000, 0x0000, 0x33a8, 0x10a6, - 0x0000, 0x0000, 0x0000, 0x7a46, 0x0000, 0x0000, 0x056c, 0x0ba6, - 0x2e69, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41c5, - 0x0329, 0x0000, 0x5e4c, 0x29e4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x16cb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x04e8, 0x4b25, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x16a4, 0x2e48, 0x0000, - 0x0000, 0xce86, 0x2cc8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x160d, 0x23c6, 0x0000, 0x6287, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x98e6, 0x6188, 0x1fc7, - 0x7d68, 0x7006, 0x0000, 0x0000, 0x0000, 0xb4e7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5d0c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0fd2, 0x0000, - 0x052b, 0x6284, 0x0000, 0x0000, 0x0000, 0x4ea5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x24a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3484, 0x04ae, 0xed86, - 0x0000, 0x0000, 0x0000, 0x0000, 0x43cc, 0xc447, 0x77a8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2ea8, 0x03e7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0faa, 0x28a4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x286a, 0x0000, 0x0000, 0xc166, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9807, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x18cf, 0xee26, 0x4ea9, 0x01e7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x028f, 0x0966, - 0x43eb, 0xa927, 0x0000, 0x0000, 0x0000, 0x42a7, 0x0000, 0x0000, - 0x00d5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4345, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2a44, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0171, 0x0006, 0x0000, 0x0000, 0x238a, 0x5265, 0x0000, 0x7ba5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6a07, 0x0000, 0x0000, 0x3f6a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1784, 0x7beb, 0x6e85, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0790, 0x77e7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xcea6, 0x0000, 0x0000, 0x7348, 0x2a27, - 0x0000, 0x4fc4, 0x0000, 0x0000, 0x3e8a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x14cc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3447, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5f08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9fa6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6048, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1e6a, 0x0b24, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xae86, 0x0000, 0x4605, - 0x0000, 0x0000, 0x0069, 0xcf46, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x494a, 0x0000, 0x0000, 0x9ee7, - 0x0000, 0x0000, 0x0000, 0x3f25, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4fa6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf366, 0x052a, 0x37a7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0728, 0x17a4, 0x0000, 0x0000, 0x2e6a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4504, 0x0000, 0x6e66, 0x0000, 0x7366, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6d67, 0x0000, 0x0000, 0x0000, 0xdf87, 0x0631, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x52aa, 0x0000, 0x0000, 0xf327, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6346, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8de6, 0x0000, 0x0000, 0x0000, 0x5d25, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a85, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3345, - 0x0000, 0x7a04, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x57e6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x176a, 0x2845, - 0x0000, 0x0000, 0x0000, 0x1c65, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4609, 0x0000, 0x03f3, 0xae67, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3a47, 0x0000, 0x0000, 0x0000, 0x0000, 0x506a, 0x14e6, - 0x0000, 0x0000, 0x0000, 0xb286, 0x0000, 0x3385, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8bc6, - 0x4648, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x200b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xdd66, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x94c7, 0x1089, 0x0000, 0x084f, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x27a4, 0x0000, 0x0000, 0x0000, 0x07e5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb866, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2404, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4c09, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x9926, 0x0000, 0x94a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb786, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5626, 0x0f0a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0037, 0x0000, 0x292e, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1c47, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xe7e7, 0x0000, 0x0000, 0x39a9, 0x0000, 0x0000, 0x0000, - 0x0000, 0xa847, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0aa6, - 0x0000, 0x0000, 0x256e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9266, 0x0000, 0x0000, - 0x0000, 0x7a84, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4fa9, 0x22e5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x24a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x4209, 0x0225, - 0x0000, 0x0000, 0x0000, 0x0000, 0x00b6, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0616, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4b2a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6165, 0x0000, 0x1884, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa546, 0x5c2b, 0x5e04, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3387, - 0x180e, 0x0a07, 0x0000, 0x0000, 0x010c, 0xb7c7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6d24, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6866, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2008, 0x04c6, 0x7b4a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b6a, 0x2027, - 0x22c8, 0x71e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5da8, 0x12e4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x7baa, 0x0000, 0x0000, 0x7bc5, 0x0000, 0x0000, 0x0b49, 0x1845, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3525, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x60c4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x50cc, 0x6764, - 0x5e0b, 0x0000, 0x0000, 0x0000, 0x52c9, 0x0000, 0x02cb, 0x02a7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0bea, 0x1de6, - 0x0000, 0x0000, 0x0000, 0x35e6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x000f, 0x6d45, 0x0000, 0x0000, 0x212b, 0x0826, 0x0000, 0x0000, - 0x0000, 0xa8c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xebe7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6524, 0x0000, 0x5704, - 0x0000, 0x8646, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4ec5, 0x0000, 0x0000, - 0x6448, 0x0000, 0x0000, 0x0000, 0x0713, 0x6107, 0x0000, 0x7944, - 0x0000, 0x0000, 0x63a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x320a, 0x0000, 0x0000, 0xf3e6, 0x0000, 0x0000, 0x052d, 0x0000, - 0x016c, 0x0ec6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1f6a, 0x4ce7, 0x0000, 0x0000, 0x0000, 0x8287, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1c25, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2e44, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0d0d, 0x0607, 0x1a2a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7446, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa0c6, 0x0000, 0x5ee6, - 0x0000, 0x0f04, 0x3029, 0x0000, 0x0000, 0x0000, 0x35aa, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6685, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18ea, 0x0000, - 0x0157, 0x12e6, 0x0000, 0x0000, 0x0000, 0x5f26, 0x2da8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x05d1, 0x87c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x016b, 0xcb06, - 0x0756, 0x2b05, 0x0000, 0x0000, 0x7e09, 0xe986, 0x0000, 0x0000, - 0x0000, 0x6f05, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x58e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3709, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x7249, 0xef26, 0x0000, 0x77c5, 0x0000, 0x6ea7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x69e4, 0x228b, 0x0000, 0x25c9, 0x0824, - 0x0000, 0x0000, 0x0000, 0x3fc7, 0x0000, 0xbd47, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x130c, 0x2464, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x234b, 0x49a4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1044, 0x0000, 0x0000, 0x39eb, 0x0545, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2e85, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5505, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7a28, 0xf9a6, - 0x0000, 0x0000, 0x0000, 0x6544, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xadc7, 0x0000, 0x0000, - 0x0000, 0x5084, 0x0000, 0x0000, 0x6c6a, 0x7ac4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4387, 0x0000, 0x0f67, - 0x0000, 0x0000, 0x0000, 0xf746, 0x0000, 0x0000, 0x0000, 0x0000, - 0x62a8, 0x4de6, 0x0000, 0xd766, 0x0000, 0x9886, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c07, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6f06, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2568, 0xf967, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x628a, 0x1666, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x35e9, 0x1385, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xaba6, 0x04f6, 0x0a06, 0x188c, 0x0000, - 0x0000, 0x3f66, 0x0000, 0x0000, 0x0000, 0x50c6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x97c7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x73cb, 0x0000, 0x0000, 0x0000, 0x0029, 0x0e47, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x37c4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3d46, - 0x0000, 0x0000, 0x0000, 0x3d66, 0x0000, 0xc606, 0x0000, 0x0000, - 0x3f68, 0x1f47, 0x0000, 0x0000, 0x0000, 0x13c4, 0x0149, 0x2d47, - 0x0033, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3309, 0x1c86, 0x6b8a, 0x3c06, 0x0000, 0x6166, - 0x0000, 0x0000, 0x0000, 0x45a4, 0x0000, 0x0000, 0x11c8, 0x18a7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xba46, 0x0170, 0x2f47, 0x278a, 0x8426, - 0x0000, 0x0000, 0x0257, 0x4866, 0x256b, 0xc147, 0x0000, 0x1624, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3365, 0x0000, 0x0000, 0x0000, 0x0000, 0x5aea, 0x36e7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbf07, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x074f, 0x0000, 0x3c4a, 0x0000, - 0x0000, 0x0000, 0x3f2e, 0xf406, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1e45, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7725, - 0x0000, 0x0000, 0x0000, 0x0000, 0x644b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2445, - 0x0000, 0x0000, 0x62eb, 0x0685, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0e04, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8086, 0x0000, 0x0000, - 0x114a, 0x0000, 0x0000, 0x0000, 0x0000, 0xe267, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x74ca, 0xe3a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2e68, 0x04c4, 0x0000, 0x0000, 0x0000, 0xa207, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a65, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa646, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9ce7, 0x250c, 0x0da5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5286, 0x0000, 0x0000, - 0x0000, 0x0000, 0x21c9, 0x49e6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8846, 0x0a29, 0x0000, 0x0000, 0x0000, - 0x0000, 0x30e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x1f28, 0x2847, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb086, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x41ca, 0x4f05, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1d68, 0x1206, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7586, 0x0000, 0x0000, 0x0000, 0x0687, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x26a8, 0x1885, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xef07, 0x0000, 0xa147, 0x0000, 0x55c4, - 0x0000, 0x0000, 0x4e2a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x338b, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0565, 0x0000, 0x0000, 0x0000, 0x0000, - 0x016d, 0x78e7, 0x5ecc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1b84, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x6d28, 0x0167, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6f47, 0x0000, 0x0000, 0x004d, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xddc7, - 0x312a, 0x20e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6649, 0x3907, 0x0000, 0x0000, 0x1f68, 0x1646, 0x3129, 0x0c25, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5446, 0x150c, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x13f2, 0xcce6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0773, 0x74c7, 0x0000, 0x17e4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2b49, 0x14a5, 0x0000, 0x6da5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xa227, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x148e, 0x0000, 0x0000, 0x0000, 0x01f7, 0x1087, 0x1e28, 0x8627, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1c88, 0x2886, 0x06b6, 0x0000, 0x0000, 0x71c7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5bc9, 0x5827, - 0x1b28, 0x0924, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4f88, 0x30a5, 0x0000, 0xb026, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6fa6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a2c, 0x0000, - 0x0000, 0x0000, 0x77e8, 0x0000, 0x0000, 0x0000, 0x0000, 0xb326, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x15cc, 0x17a5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x02c8, 0x0046, 0x0000, 0x0000, 0x65eb, 0x2c47, 0x0000, 0x0000, - 0x0000, 0x0000, 0x352c, 0x0000, 0x3368, 0x0786, 0x01b3, 0xc967, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb8c6, 0x4a8b, 0x0000, - 0x0000, 0x31c6, 0x0000, 0x0647, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x180b, 0x90e7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a04, 0x1bea, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1ea8, 0x0807, - 0x0000, 0x0000, 0x0000, 0x0000, 0x22ce, 0x0000, 0x4b88, 0x0000, - 0x0000, 0xbbc6, 0x212a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x26cc, 0xdc67, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1025, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa986, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3f2d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x7d0b, 0x0000, 0x0000, 0x78c6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x68e6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4fa5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x49c9, 0x0000, 0x0000, 0x0000, 0x0000, 0x2305, 0x0000, 0x0000, - 0x0000, 0xad46, 0x0000, 0x0000, 0x0000, 0x2325, 0x0000, 0x8507, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x72a6, 0x0000, 0x0000, - 0x01f5, 0x4567, 0x0000, 0x0000, 0x7ec9, 0xeb66, 0x0000, 0x0000, - 0x0000, 0x78a6, 0x0000, 0x0000, 0x0ead, 0x0427, 0x0000, 0x0000, - 0x0000, 0x6425, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6da4, - 0x0000, 0x6706, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2da4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x60cb, 0x00e5, 0x0000, 0x35c6, - 0x0000, 0x0000, 0x1cea, 0x2d05, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x66c9, 0x5c86, 0x0000, 0x0000, - 0x7428, 0xb9a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6a84, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0229, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7d26, 0x0000, 0x0000, 0x0000, 0x0000, 0x046f, 0x67e4, - 0x0000, 0x0000, 0x300c, 0x3927, 0x0000, 0x0000, 0x0000, 0xa8e6, - 0x0000, 0x0367, 0x0000, 0x0000, 0x7b08, 0x0000, 0x2109, 0x4505, - 0x0000, 0x3224, 0x0000, 0x0000, 0x0000, 0x58c6, 0x0000, 0x9766, - 0x0000, 0x0000, 0x0177, 0x19a4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00aa, 0x4867, 0x0000, 0x59a4, 0x0000, 0x0000, 0x7e68, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x64a4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3d24, 0x0000, 0x0000, 0x0000, 0x8006, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6f87, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3b29, 0x0000, 0x0000, 0x0000, - 0x526c, 0x6c06, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x130a, 0x6667, 0x0000, 0x0667, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1049, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1ca8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5444, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6044, 0x068b, 0x09e5, 0x0000, 0x0000, - 0x0000, 0xd046, 0x0000, 0x3326, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1866, 0x0000, 0x5604, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6f25, 0x15c8, 0x1404, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6d06, 0x0000, 0x72c6, 0x4728, 0x2187, 0x0000, 0x0000, - 0x0000, 0x9906, 0x0000, 0xaa26, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2ec5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5b65, 0x0000, 0x0000, 0x0000, 0x0000, - 0x17cb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x194a, 0x3f45, 0x3789, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6868, 0x0000, 0x0237, 0xbec7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3ba7, 0x0000, 0x0000, 0x7c4a, 0xabc6, 0x0992, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2c68, 0x23e7, - 0x0000, 0xada6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x38e8, 0x3005, 0x0000, 0x0000, 0x0000, 0x2105, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7d28, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0386, - 0x0000, 0x0000, 0x0000, 0x6a64, 0x15ec, 0x2ce7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x23ea, 0x5c84, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6b26, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6669, 0xaf46, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x15cd, 0x1c05, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xce27, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x51e8, 0x47a4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x100b, 0x2be7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x72c5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x55e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xbea6, 0x0000, 0x0000, 0x0000, 0x7e24, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2a84, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6baa, 0x0000, 0x160b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0c11, 0x7b25, - 0x0000, 0x4ce4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xefe7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8d66, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1ee4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0368, 0x02e7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04cd, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7ee4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8806, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc626, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1c6a, 0x0000, 0x0000, 0x0000, - 0x3bc8, 0x2d06, 0x0000, 0x0000, 0x0000, 0x0be7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5768, 0x0000, 0x0000, 0x0000, - 0x034e, 0x0000, 0x0000, 0x0000, 0x0000, 0x8be7, 0x0000, 0x0000, - 0x0000, 0x5c64, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5ca9, 0x0864, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3a08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x054e, 0x0000, 0x0c0a, 0x0000, 0x0000, 0x0000, 0x0350, 0x2ac5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1968, 0x0000, - 0x0000, 0x3824, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2009, 0x26e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5eca, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6765, 0x0000, 0x0000, - 0x0000, 0x0000, 0x48ac, 0x0805, 0x0000, 0x82e7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2406, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xabe6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa3a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2f0c, 0x0186, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1347, 0x0000, 0xbe06, - 0x0000, 0xdb26, 0x0bec, 0x3ec6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x21a4, 0x2468, 0x95a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x01f4, 0x0000, 0x0000, 0x0000, 0x0000, 0xa7a6, 0x0000, 0x7f26, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6b2a, 0xe246, 0x42a8, 0x0000, 0x0000, 0xb5a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6888, 0x1a64, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0270, 0x0000, 0x1388, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7e25, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6686, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0017, 0x1c85, 0x0000, 0x0000, 0x0000, 0x8d67, - 0x0000, 0x9f86, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6a2a, 0xe006, - 0x0000, 0x0000, 0x30a9, 0x2465, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41aa, 0x0000, - 0x0000, 0x0000, 0x38ae, 0x0000, 0x0000, 0x0000, 0x0000, 0x5347, - 0x0000, 0x0000, 0x0000, 0x34c4, 0x0011, 0x2c65, 0x0000, 0x0000, - 0x0000, 0x0000, 0x14ab, 0x0000, 0x2089, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6c25, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xcb26, 0x0000, 0x0000, - 0x0000, 0x1d45, 0x0000, 0xace7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2648, 0x0000, 0x0000, 0x0000, - 0x644c, 0xf026, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x168d, 0x0000, 0x0000, 0x0000, 0x0000, 0xa407, 0x65c9, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5865, 0x0000, 0x0000, 0x0000, 0xbaa7, 0x016a, 0x07a7, - 0x5bac, 0x0000, 0x0000, 0x0000, 0x2aa9, 0x0000, 0x0000, 0x0000, - 0x0c4e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x7ec8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x11cf, 0x0cc6, 0x0000, 0x0000, - 0x03d7, 0x0000, 0x0000, 0x66e7, 0x0000, 0x82a6, 0x0000, 0x0000, - 0x0000, 0xf147, 0x0000, 0xbd06, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0ae6, 0x0000, 0x9b66, 0x1ea9, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0608, 0x0887, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0fc8, 0x09a7, 0x4e29, 0x7544, 0x0000, 0x0000, 0x2bea, 0x0000, - 0x0000, 0x0000, 0x15ca, 0xd086, 0x0000, 0x5867, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3265, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00d7, 0x0000, - 0x0000, 0x2346, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0109, 0x0584, 0x0000, 0x0000, 0x2d6a, 0x0e67, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4429, 0x5f27, 0x0000, 0x0000, 0x6869, 0x9cc6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x7448, 0xf206, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x51ac, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2b08, 0x0000, 0x0000, 0xb966, - 0x542b, 0x1726, 0x0000, 0x0000, 0x3988, 0x0ba7, 0x5e28, 0x3bc5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7f85, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0ce4, 0x0000, 0x0000, - 0x0000, 0x3e64, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x19ea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0c04, - 0x0000, 0x7907, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x006a, 0x0000, 0x0000, 0x0000, 0x0000, 0x31e7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1c09, 0x4666, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5806, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc2e6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x6ba8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x7646, 0x29ac, 0x5d45, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x71c4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x5186, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xae26, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbd46, 0x0000, 0x0000, - 0x0000, 0x0000, 0x192a, 0x0000, 0x3fca, 0x59a7, 0x0000, 0x0000, - 0x4208, 0x0000, 0x0000, 0x0000, 0x0000, 0x0284, 0x0000, 0x0000, - 0x0000, 0x9c66, 0x0000, 0x0000, 0x0000, 0x9166, 0x0000, 0x0000, - 0x0000, 0x2666, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8867, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x35a5, 0x0000, 0x0000, 0x0000, 0x6e24, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4da4, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5c06, 0x0000, 0x2b86, - 0x0000, 0x6c85, 0x0000, 0x0000, 0x0000, 0x0000, 0x3628, 0x0000, - 0x0000, 0x0000, 0x606a, 0xbae7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1aea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f8d, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x06ec, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0e13, 0x07c7, 0x0000, 0x6b04, 0x21cc, 0x0000, - 0x4788, 0x0000, 0x0000, 0x0000, 0x0000, 0x7566, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2c06, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x50e4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0152, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1b8a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3a0e, 0x0000, 0x0000, 0x0da4, 0x0000, 0x0000, - 0x0000, 0xda46, 0x0000, 0x0000, 0x0000, 0x4066, 0x0000, 0x0000, - 0x0000, 0x46c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x086a, 0x0504, 0x0000, 0x0000, 0x5a49, 0x7c07, 0x0000, 0x0000, - 0x736b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8f27, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4707, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1ee9, 0x0000, 0x0000, 0x0000, 0x0000, 0x50a4, - 0x0000, 0x0000, 0x290c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa66, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa006, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00f6, 0x0385, 0x2d09, 0x1447, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5f86, - 0x0000, 0x0000, 0x6829, 0x6bc6, 0x0000, 0x6b05, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5c0a, 0x0b85, 0x0000, 0x0000, - 0x7688, 0xf306, 0x0000, 0xb8e6, 0x07ea, 0x49c5, 0x0000, 0x0000, - 0x0000, 0xbe26, 0x0000, 0x0000, 0x0000, 0x58a6, 0x0000, 0x0000, - 0x07b4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3c69, 0x0000, 0x0000, 0x0000, 0x0000, 0x97a6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x03b1, 0x7fc4, 0x0000, 0xd607, - 0x0000, 0x3a46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5b64, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x156e, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1e2a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x7888, 0xfaa6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8986, 0x0000, 0x0000, - 0x0000, 0x7747, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xf4c7, 0x0000, 0x0000, 0x0448, 0x44a6, - 0x7c4c, 0x0000, 0x0000, 0x3827, 0x1132, 0x6a47, 0x0000, 0x0000, - 0x53c8, 0x1244, 0x0000, 0x0000, 0x0000, 0x0000, 0x40c9, 0x13e6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x12ed, 0x0000, 0x0000, 0x8066, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7aea, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7c27, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x11aa, 0x3ea7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3885, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1d28, 0x12a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x48cc, 0x0000, 0x0000, 0x0000, 0x6428, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x08c4, 0x0000, 0x0000, - 0x2e2a, 0x0000, 0x0490, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x198c, 0x5a27, 0x35ca, 0x1e27, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xe326, 0x0210, 0x86c6, 0x7faa, 0x0000, 0x0000, 0x32c5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x08a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xe4c7, 0x0000, 0x0000, 0x0000, 0x6707, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6745, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x6609, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7d05, 0x59a8, 0xe6a7, - 0x0000, 0x34e7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3fc8, 0x0000, 0x0000, 0x8306, 0x0000, 0x0000, - 0x0000, 0x4d46, 0x0000, 0x0000, 0x0000, 0x4104, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7bc8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2824, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8de7, 0x0000, 0x0000, 0x7328, 0x0000, - 0x0000, 0x0000, 0x0309, 0x31a5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6b06, 0x0000, 0x0000, 0x0000, 0x1167, - 0x234d, 0x7aa5, 0x0000, 0x2405, 0x0000, 0x0000, 0x0000, 0xec47, - 0x5168, 0x0704, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x20ac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4d28, 0xaf66, - 0x0000, 0x96a6, 0x0000, 0x0000, 0x466b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x29a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2e24, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4dc6, 0x0000, 0x0000, - 0x0000, 0xafe6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4e0a, 0x1407, - 0x0000, 0x2d64, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4d69, 0x0000, 0x15cb, 0x2486, - 0x0000, 0x0000, 0x520a, 0x4d06, 0x0000, 0x0000, 0x0000, 0x55a6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x50e7, 0x0000, 0x0000, - 0x0000, 0x4ee5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9e66, 0x0000, 0x0000, - 0x0000, 0xe0a6, 0x0000, 0x0000, 0x0000, 0xd287, 0x0000, 0x0000, - 0x3aa9, 0x0000, 0x4268, 0x99c7, 0x092b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x218c, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0cc9, 0x45c6, 0x0daa, 0x0825, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4a68, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2eca, 0xe507, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x020b, 0x0000, 0x32a9, 0x00c6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6e25, - 0x0000, 0xbae6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x11c5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02af, 0x3a45, - 0x02ec, 0x2025, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x09ac, 0x3287, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5908, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6b88, 0xe706, 0x0000, 0x0000, 0x518c, 0x4ea6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x01b8, 0x2f24, 0x0000, 0xe647, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xbba6, 0x0000, 0x0000, 0x0000, 0xee47, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3d64, 0x1d4a, 0x1564, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4eea, 0x9447, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x7469, 0x0000, 0x154b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc666, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5fa5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3505, 0x0000, 0x0000, - 0x5948, 0x0000, 0x0000, 0x0000, 0x0000, 0x55a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x23aa, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x35a4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x08ea, 0x0247, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0e8e, 0x6787, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x242a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5464, 0x0000, 0x0000, 0x0000, 0xb206, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x50e6, 0x0000, 0x0000, - 0x0000, 0xa6c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x048b, 0x1a26, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2ac4, 0x0000, 0x0000, 0x0000, 0x7404, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xe5c7, 0x0ed4, 0x6b07, 0x51cb, 0x27c4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x7267, - 0x6fe9, 0x38c6, 0x0000, 0x0000, 0x402c, 0xb227, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x62ea, 0x0000, 0x132c, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6384, 0x71a9, 0x37a6, - 0x2b2d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4846, 0x0000, 0x0000, 0x0000, 0xad66, 0x0000, 0x0000, - 0x0000, 0x4565, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5fc8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x43a7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6e06, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbc46, - 0x0000, 0x0000, 0x7aeb, 0x0000, 0x6009, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4904, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x5c2c, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1c44, 0x03c8, 0x3545, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0eb3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x39c7, 0x0000, 0x0000, 0x0000, 0x3024, 0x0000, 0x31c5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2b64, 0x0000, 0x0000, 0x0000, 0x0000, 0x0fa9, 0x9d67, - 0x5088, 0x1105, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3aa7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaae7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x59e5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb1e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5da6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4448, 0x50a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x22ac, 0x0000, 0x0000, 0x9f66, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x38a6, 0x4308, 0x4564, 0x0000, 0x0000, - 0x7b6a, 0x8a67, 0x0000, 0x0000, 0x0b4a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6b84, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2024, 0x0000, 0xdd07, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x85e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a66, - 0x0000, 0x6864, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xfac6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5709, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0be9, 0xd6c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0345, 0x0000, 0x44c4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x70a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x66c8, 0x0000, 0x0000, 0x0f46, 0x0000, 0x0000, 0x0000, 0x64e6, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20c7, 0x0000, 0x4d85, - 0x4b28, 0x0444, 0x0000, 0x0000, 0x1549, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4324, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2985, 0x0000, 0x0000, 0x1a0f, 0xeea6, - 0x16c8, 0x20a6, 0x0000, 0x0000, 0x0000, 0xd726, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x74a4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc926, 0x0000, 0x6fe7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6585, - 0x0000, 0x0000, 0x75c9, 0xef86, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6147, 0x0000, 0x0000, 0x0000, 0x1124, - 0x0000, 0xa446, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xcfa6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xc6e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x668b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1729, 0x0b25, - 0x0000, 0x9106, 0x1ccc, 0x00c5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x07eb, 0x03a6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xd986, 0x0000, 0x0000, 0x1628, 0x1547, - 0x0000, 0xf526, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b6b, 0x0000, - 0x022c, 0x0587, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x21c5, 0x0000, 0x2505, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbe66, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5eab, 0x00e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x424a, 0x4987, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6246, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4887, 0x4e68, 0x0b07, - 0x37e9, 0x0726, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x69a8, 0x5be6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x03e5, 0x01ec, 0x0000, 0x398a, 0x4125, 0x018c, 0x3506, - 0x0000, 0x0000, 0x0000, 0xa2c7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4a65, 0x0000, 0x0000, 0x0000, 0x01a5, - 0x4489, 0x0c26, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb807, 0x388b, 0xdce7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0e71, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc0e6, 0x0000, 0x8ae7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0028, 0x0000, 0x2ce8, 0x3d05, - 0x0000, 0x2166, 0x0000, 0x0000, 0x0000, 0xf7e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9066, 0x0000, 0xc4e6, - 0x0000, 0xb3c6, 0x03e9, 0x0000, 0x0000, 0x2f25, 0x0cb1, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3b89, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfce7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xe587, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0470, 0x6965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4544, 0x0000, 0x0000, 0x0000, 0x4305, 0x4e2b, 0x19e5, - 0x0000, 0xab67, 0x0000, 0x0000, 0x0000, 0x3504, 0x6228, 0x2a07, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7004, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x036b, 0x5dc7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1dcc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2fec, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4b64, 0x5aaa, 0x0164, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3b84, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xc206, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5504, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x366b, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb2e7, 0x0000, 0x0000, - 0x01b4, 0x0e05, 0x0000, 0x0000, 0x2c8a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf566, - 0x0000, 0x0000, 0x0000, 0x9b86, 0x024c, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6c66, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0649, 0x5884, 0x092a, 0x4a07, 0x0000, 0x3ec4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x142a, 0x2b66, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3ac8, 0x0424, 0x0000, 0x1ec7, - 0x4768, 0x0146, 0x0000, 0x3a26, 0x4cc8, 0x0000, 0x1daa, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x030d, 0x0245, 0x0000, 0x3f46, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0436, 0x26a4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1189, 0x0000, 0x0000, 0x0000, 0x0000, 0x8406, - 0x0000, 0x0000, 0x0000, 0xd506, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x8186, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa466, 0x360a, 0x0ac5, - 0x2108, 0x4185, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0d6a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0f6a, 0x73e4, 0x0000, 0x0000, 0x77aa, 0x8fa7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6145, 0x0000, 0x3ec5, 0x1888, 0x0000, - 0x0000, 0x0000, 0x0000, 0xa406, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6ae5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x05aa, 0xaf07, - 0x0000, 0x0000, 0x0000, 0x7d64, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8926, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4428, 0x4c87, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x06cb, 0x0000, 0x0000, 0x0000, 0x0000, 0x1587, 0x0000, 0x0000, - 0x0000, 0x80a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4704, 0x0000, 0x0000, 0x0000, 0x5b84, - 0x4d2a, 0x0000, 0x0000, 0x79c6, 0x0bcd, 0x7ba7, 0x5ba8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xdfa7, 0x0000, 0x0000, - 0x532c, 0xfbe7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x64ca, 0x23e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc066, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x16cd, 0xc367, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c87, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xcae6, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x6dc8, 0xe526, 0x0000, 0xc426, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0bac, 0x0000, 0x5968, 0x7c44, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x07e4, 0x0000, 0x49e4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5da5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x446c, 0x2dc5, 0x0000, 0x0000, 0x0000, 0xda67, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b27, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb6e6, - 0x0000, 0x6086, 0x6faa, 0x0000, 0x0000, 0x0000, 0x0614, 0x0000, - 0x0000, 0x75a5, 0x0000, 0x0000, 0x564a, 0xdf27, 0x0d4b, 0x3707, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0411, 0x0000, 0x2989, 0x1b04, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6a85, 0x0000, 0x0000, - 0x340a, 0x4687, 0x0000, 0x72c4, 0x0000, 0xdc86, 0x0000, 0x0000, - 0x0078, 0x0000, 0x0000, 0x2245, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3ea8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6a6a, 0x5ce5, 0x0000, 0x0624, 0x0000, 0x6de6, 0x0000, 0x0000, - 0x05e8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6c24, - 0x0000, 0x9646, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x05e9, 0x2205, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6f69, 0xeee7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5f24, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x32e4, - 0x0000, 0x16e7, 0x0000, 0x0000, 0x3d4d, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x046b, 0x5b66, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6664, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x47e4, 0x0000, 0x0000, 0x0000, 0x0000, - 0x05b1, 0x6647, 0x0000, 0x0000, 0x09ab, 0x1bc6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x6a2c, 0xeb06, 0x0000, 0x0000, 0x0000, 0x4f26, - 0x0000, 0xa386, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0aca, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6624, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6e45, 0x0000, 0x0000, - 0x0000, 0x7246, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x6c2a, 0x0000, 0x0000, 0x3544, - 0x31e8, 0x0746, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4349, 0x0cc7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x6d87, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1169, 0x46c5, 0x0000, 0x07e7, - 0x0192, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0068, 0x0e46, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4808, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x74a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5686, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5e0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2ee4, 0x0000, 0x7e66, 0x0000, 0x0000, - 0x0c09, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x128d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2a28, 0x0707, - 0x534a, 0x0000, 0x1ec8, 0x3145, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x36a9, 0x0000, 0x0000, 0x0000, - 0x3f4a, 0x0000, 0x0000, 0x0000, 0x0000, 0x7d66, 0x0000, 0x9167, - 0x0000, 0x2904, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7d08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5d08, 0x0ca4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5ac5, - 0x0000, 0x0000, 0x160a, 0x0000, 0x124c, 0x0126, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x68e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1bec, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1ed2, 0xf166, 0x03ab, 0x0000, 0x0000, 0xdd67, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x69c6, 0x00ca, 0x13a5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6d65, 0x0000, 0x0000, 0x3ba9, 0x60a5, 0x162c, 0x4fe4, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xda66, - 0x0000, 0x0000, 0x0000, 0x0000, 0x13cd, 0x6d26, 0x0000, 0x5264, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x30e5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5388, 0x6e64, 0x0000, 0x09c6, 0x4e8c, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb686, 0x0000, 0x7846, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3985, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x044b, 0x18e4, 0x0000, 0x0000, 0x0000, 0x3086, 0x3b4e, 0x0000, - 0x21eb, 0x0000, 0x29a9, 0x4c06, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0636, 0x0000, 0x7b8c, 0x0000, 0x5868, 0x4d26, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5e86, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc5e6, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x23ab, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2b07, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x406a, 0xd5a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3289, 0x0000, 0x0000, 0x0000, 0x0000, 0x3e84, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0885, 0x1b0b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3d08, 0x2c26, 0x0000, 0x0000, 0x1629, 0x1d87, - 0x0000, 0x0000, 0x394c, 0x3d44, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x5e8c, 0xbc06, 0x0000, 0x5ea6, 0x0000, 0xd8e7, - 0x0000, 0x0000, 0x0d88, 0x4ac5, 0x0000, 0x0000, 0x0000, 0x0000, -}; - -} // namespace brotli - -#endif // BROTLI_ENC_DICTIONARY_HASH_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/encode.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/encode.cc deleted file mode 100644 index 3e1c79ad56c..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/encode.cc +++ /dev/null @@ -1,1175 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Implementation of Brotli compressor. - -#include "./encode.h" - -#include <algorithm> -#include <cstdlib> /* free, malloc */ -#include <cstring> /* memset */ -#include <limits> - -#include "./backward_references.h" -#include "./bit_cost.h" -#include "./block_splitter.h" -#include "./brotli_bit_stream.h" -#include "./cluster.h" -#include "./context.h" -#include "./metablock.h" -#include "./transform.h" -#include "./compress_fragment.h" -#include "./compress_fragment_two_pass.h" -#include "./entropy_encode.h" -#include "./fast_log.h" -#include "./hash.h" -#include "./histogram.h" -#include "./prefix.h" -#include "./utf8_util.h" -#include "./write_bits.h" - -namespace brotli { - -static const int kMinQualityForBlockSplit = 4; -static const int kMinQualityForContextModeling = 5; -static const int kMinQualityForOptimizeHistograms = 4; -// For quality 2 there is no block splitting, so we buffer at most this much -// literals and commands. -static const size_t kMaxNumDelayedSymbols = 0x2fff; - -#define COPY_ARRAY(dst, src) memcpy(dst, src, sizeof(src)); - -static void RecomputeDistancePrefixes(Command* cmds, - size_t num_commands, - uint32_t num_direct_distance_codes, - uint32_t distance_postfix_bits) { - if (num_direct_distance_codes == 0 && distance_postfix_bits == 0) { - return; - } - for (size_t i = 0; i < num_commands; ++i) { - Command* cmd = &cmds[i]; - if (cmd->copy_len() && cmd->cmd_prefix_ >= 128) { - PrefixEncodeCopyDistance(cmd->DistanceCode(), - num_direct_distance_codes, - distance_postfix_bits, - &cmd->dist_prefix_, - &cmd->dist_extra_); - } - } -} - -/* Wraps 64-bit input position to 32-bit ringbuffer position preserving - "not-a-first-lap" feature. */ -static uint32_t WrapPosition(uint64_t position) { - uint32_t result = static_cast<uint32_t>(position); - if (position > (1u << 30)) { - result = (result & ((1u << 30) - 1)) | (1u << 30); - } - return result; -} - -uint8_t* BrotliCompressor::GetBrotliStorage(size_t size) { - if (storage_size_ < size) { - delete[] storage_; - storage_ = new uint8_t[size]; - storage_size_ = size; - } - return storage_; -} - -static size_t MaxHashTableSize(int quality) { - return quality == 0 ? 1 << 15 : 1 << 17; -} - -static size_t HashTableSize(size_t max_table_size, size_t input_size) { - size_t htsize = 256; - while (htsize < max_table_size && htsize < input_size) { - htsize <<= 1; - } - return htsize; -} - -int* BrotliCompressor::GetHashTable(int quality, - size_t input_size, - size_t* table_size) { - // Use smaller hash table when input.size() is smaller, since we - // fill the table, incurring O(hash table size) overhead for - // compression, and if the input is short, we won't need that - // many hash table entries anyway. - const size_t max_table_size = MaxHashTableSize(quality); - assert(max_table_size >= 256); - size_t htsize = HashTableSize(max_table_size, input_size); - - int* table; - if (htsize <= sizeof(small_table_) / sizeof(small_table_[0])) { - table = small_table_; - } else { - if (large_table_ == NULL) { - large_table_ = new int[max_table_size]; - } - table = large_table_; - } - - *table_size = htsize; - memset(table, 0, htsize * sizeof(*table)); - return table; -} - -static void EncodeWindowBits(int lgwin, uint8_t* last_byte, - uint8_t* last_byte_bits) { - if (lgwin == 16) { - *last_byte = 0; - *last_byte_bits = 1; - } else if (lgwin == 17) { - *last_byte = 1; - *last_byte_bits = 7; - } else if (lgwin > 17) { - *last_byte = static_cast<uint8_t>(((lgwin - 17) << 1) | 1); - *last_byte_bits = 4; - } else { - *last_byte = static_cast<uint8_t>(((lgwin - 8) << 4) | 1); - *last_byte_bits = 7; - } -} - -// Initializes the command and distance prefix codes for the first block. -static void InitCommandPrefixCodes(uint8_t cmd_depths[128], - uint16_t cmd_bits[128], - uint8_t cmd_code[512], - size_t* cmd_code_numbits) { - static const uint8_t kDefaultCommandDepths[128] = { - 0, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, - 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, - 7, 7, 10, 10, 10, 10, 10, 10, 0, 4, 4, 5, 5, 5, 6, 6, - 7, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, - 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 10, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - }; - static const uint16_t kDefaultCommandBits[128] = { - 0, 0, 8, 9, 3, 35, 7, 71, - 39, 103, 23, 47, 175, 111, 239, 31, - 0, 0, 0, 4, 12, 2, 10, 6, - 13, 29, 11, 43, 27, 59, 87, 55, - 15, 79, 319, 831, 191, 703, 447, 959, - 0, 14, 1, 25, 5, 21, 19, 51, - 119, 159, 95, 223, 479, 991, 63, 575, - 127, 639, 383, 895, 255, 767, 511, 1023, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 27, 59, 7, 39, 23, 55, 30, 1, 17, 9, 25, 5, 0, 8, 4, 12, - 2, 10, 6, 21, 13, 29, 3, 19, 11, 15, 47, 31, 95, 63, 127, 255, - 767, 2815, 1791, 3839, 511, 2559, 1535, 3583, 1023, 3071, 2047, 4095, - }; - COPY_ARRAY(cmd_depths, kDefaultCommandDepths); - COPY_ARRAY(cmd_bits, kDefaultCommandBits); - - // Initialize the pre-compressed form of the command and distance prefix - // codes. - static const uint8_t kDefaultCommandCode[] = { - 0xff, 0x77, 0xd5, 0xbf, 0xe7, 0xde, 0xea, 0x9e, 0x51, 0x5d, 0xde, 0xc6, - 0x70, 0x57, 0xbc, 0x58, 0x58, 0x58, 0xd8, 0xd8, 0x58, 0xd5, 0xcb, 0x8c, - 0xea, 0xe0, 0xc3, 0x87, 0x1f, 0x83, 0xc1, 0x60, 0x1c, 0x67, 0xb2, 0xaa, - 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0xcc, 0xa1, 0xce, 0x88, 0x54, 0x94, - 0x46, 0xe1, 0xb0, 0xd0, 0x4e, 0xb2, 0xf7, 0x04, 0x00, - }; - static const int kDefaultCommandCodeNumBits = 448; - COPY_ARRAY(cmd_code, kDefaultCommandCode); - *cmd_code_numbits = kDefaultCommandCodeNumBits; -} - -// Decide about the context map based on the ability of the prediction -// ability of the previous byte UTF8-prefix on the next byte. The -// prediction ability is calculated as shannon entropy. Here we need -// shannon entropy instead of 'BitsEntropy' since the prefix will be -// encoded with the remaining 6 bits of the following byte, and -// BitsEntropy will assume that symbol to be stored alone using Huffman -// coding. -static void ChooseContextMap(int quality, - uint32_t* bigram_histo, - size_t* num_literal_contexts, - const uint32_t** literal_context_map) { - uint32_t monogram_histo[3] = { 0 }; - uint32_t two_prefix_histo[6] = { 0 }; - size_t total = 0; - for (size_t i = 0; i < 9; ++i) { - total += bigram_histo[i]; - monogram_histo[i % 3] += bigram_histo[i]; - size_t j = i; - if (j >= 6) { - j -= 6; - } - two_prefix_histo[j] += bigram_histo[i]; - } - size_t dummy; - double entropy1 = ShannonEntropy(monogram_histo, 3, &dummy); - double entropy2 = (ShannonEntropy(two_prefix_histo, 3, &dummy) + - ShannonEntropy(two_prefix_histo + 3, 3, &dummy)); - double entropy3 = 0; - for (size_t k = 0; k < 3; ++k) { - entropy3 += ShannonEntropy(bigram_histo + 3 * k, 3, &dummy); - } - - assert(total != 0); - double scale = 1.0 / static_cast<double>(total); - entropy1 *= scale; - entropy2 *= scale; - entropy3 *= scale; - - static const uint32_t kStaticContextMapContinuation[64] = { - 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - static const uint32_t kStaticContextMapSimpleUTF8[64] = { - 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - if (quality < 7) { - // 3 context models is a bit slower, don't use it at lower qualities. - entropy3 = entropy1 * 10; - } - // If expected savings by symbol are less than 0.2 bits, skip the - // context modeling -- in exchange for faster decoding speed. - if (entropy1 - entropy2 < 0.2 && - entropy1 - entropy3 < 0.2) { - *num_literal_contexts = 1; - } else if (entropy2 - entropy3 < 0.02) { - *num_literal_contexts = 2; - *literal_context_map = kStaticContextMapSimpleUTF8; - } else { - *num_literal_contexts = 3; - *literal_context_map = kStaticContextMapContinuation; - } -} - -static void DecideOverLiteralContextModeling( - const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - int quality, - ContextType* literal_context_mode, - size_t* num_literal_contexts, - const uint32_t** literal_context_map) { - if (quality < kMinQualityForContextModeling || length < 64) { - return; - } - // Gather bigram data of the UTF8 byte prefixes. To make the analysis of - // UTF8 data faster we only examine 64 byte long strides at every 4kB - // intervals. - const size_t end_pos = start_pos + length; - uint32_t bigram_prefix_histo[9] = { 0 }; - for (; start_pos + 64 <= end_pos; start_pos += 4096) { - static const int lut[4] = { 0, 0, 1, 2 }; - const size_t stride_end_pos = start_pos + 64; - int prev = lut[input[start_pos & mask] >> 6] * 3; - for (size_t pos = start_pos + 1; pos < stride_end_pos; ++pos) { - const uint8_t literal = input[pos & mask]; - ++bigram_prefix_histo[prev + lut[literal >> 6]]; - prev = lut[literal >> 6] * 3; - } - } - *literal_context_mode = CONTEXT_UTF8; - ChooseContextMap(quality, &bigram_prefix_histo[0], num_literal_contexts, - literal_context_map); -} - -static bool ShouldCompress(const uint8_t* data, - const size_t mask, - const uint64_t last_flush_pos, - const size_t bytes, - const size_t num_literals, - const size_t num_commands) { - if (num_commands < (bytes >> 8) + 2) { - if (num_literals > 0.99 * static_cast<double>(bytes)) { - uint32_t literal_histo[256] = { 0 }; - static const uint32_t kSampleRate = 13; - static const double kMinEntropy = 7.92; - const double bit_cost_threshold = - static_cast<double>(bytes) * kMinEntropy / kSampleRate; - size_t t = (bytes + kSampleRate - 1) / kSampleRate; - uint32_t pos = static_cast<uint32_t>(last_flush_pos); - for (size_t i = 0; i < t; i++) { - ++literal_histo[data[pos & mask]]; - pos += kSampleRate; - } - if (BitsEntropy(literal_histo, 256) > bit_cost_threshold) { - return false; - } - } - } - return true; -} - -static void WriteMetaBlockInternal(const uint8_t* data, - const size_t mask, - const uint64_t last_flush_pos, - const size_t bytes, - const bool is_last, - const int quality, - const bool font_mode, - const uint8_t prev_byte, - const uint8_t prev_byte2, - const size_t num_literals, - const size_t num_commands, - Command* commands, - const int* saved_dist_cache, - int* dist_cache, - size_t* storage_ix, - uint8_t* storage) { - if (bytes == 0) { - // Write the ISLAST and ISEMPTY bits. - WriteBits(2, 3, storage_ix, storage); - *storage_ix = (*storage_ix + 7u) & ~7u; - return; - } - - if (!ShouldCompress(data, mask, last_flush_pos, bytes, - num_literals, num_commands)) { - // Restore the distance cache, as its last update by - // CreateBackwardReferences is now unused. - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); - StoreUncompressedMetaBlock(is_last, data, - WrapPosition(last_flush_pos), mask, bytes, - storage_ix, storage); - return; - } - - const uint8_t last_byte = storage[0]; - const uint8_t last_byte_bits = static_cast<uint8_t>(*storage_ix & 0xff); - uint32_t num_direct_distance_codes = 0; - uint32_t distance_postfix_bits = 0; - if (quality > 9 && font_mode) { - num_direct_distance_codes = 12; - distance_postfix_bits = 1; - RecomputeDistancePrefixes(commands, - num_commands, - num_direct_distance_codes, - distance_postfix_bits); - } - if (quality == 2) { - StoreMetaBlockFast(data, WrapPosition(last_flush_pos), - bytes, mask, is_last, - commands, num_commands, - storage_ix, storage); - } else if (quality < kMinQualityForBlockSplit) { - StoreMetaBlockTrivial(data, WrapPosition(last_flush_pos), - bytes, mask, is_last, - commands, num_commands, - storage_ix, storage); - } else { - MetaBlockSplit mb; - ContextType literal_context_mode = CONTEXT_UTF8; - if (quality <= 9) { - size_t num_literal_contexts = 1; - const uint32_t* literal_context_map = NULL; - DecideOverLiteralContextModeling(data, WrapPosition(last_flush_pos), - bytes, mask, - quality, - &literal_context_mode, - &num_literal_contexts, - &literal_context_map); - if (literal_context_map == NULL) { - BuildMetaBlockGreedy(data, WrapPosition(last_flush_pos), mask, - commands, num_commands, &mb); - } else { - BuildMetaBlockGreedyWithContexts(data, WrapPosition(last_flush_pos), - mask, - prev_byte, prev_byte2, - literal_context_mode, - num_literal_contexts, - literal_context_map, - commands, num_commands, - &mb); - } - } else { - if (!IsMostlyUTF8(data, WrapPosition(last_flush_pos), mask, bytes, - kMinUTF8Ratio)) { - literal_context_mode = CONTEXT_SIGNED; - } - BuildMetaBlock(data, WrapPosition(last_flush_pos), mask, - prev_byte, prev_byte2, - commands, num_commands, - literal_context_mode, - &mb); - } - if (quality >= kMinQualityForOptimizeHistograms) { - OptimizeHistograms(num_direct_distance_codes, - distance_postfix_bits, - &mb); - } - StoreMetaBlock(data, WrapPosition(last_flush_pos), bytes, mask, - prev_byte, prev_byte2, - is_last, - num_direct_distance_codes, - distance_postfix_bits, - literal_context_mode, - commands, num_commands, - mb, - storage_ix, storage); - } - if (bytes + 4 < (*storage_ix >> 3)) { - // Restore the distance cache and last byte. - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); - storage[0] = last_byte; - *storage_ix = last_byte_bits; - StoreUncompressedMetaBlock(is_last, data, - WrapPosition(last_flush_pos), mask, - bytes, storage_ix, storage); - } -} - -BrotliCompressor::BrotliCompressor(BrotliParams params) - : params_(params), - hashers_(new Hashers()), - input_pos_(0), - num_commands_(0), - num_literals_(0), - last_insert_len_(0), - last_flush_pos_(0), - last_processed_pos_(0), - prev_byte_(0), - prev_byte2_(0), - storage_size_(0), - storage_(0), - large_table_(NULL), - cmd_code_numbits_(0), - command_buf_(NULL), - literal_buf_(NULL) { - // Sanitize params. - params_.quality = std::max(0, params_.quality); - if (params_.lgwin < kMinWindowBits) { - params_.lgwin = kMinWindowBits; - } else if (params_.lgwin > kMaxWindowBits) { - params_.lgwin = kMaxWindowBits; - } - if (params_.quality <= 1) { - params_.lgblock = params_.lgwin; - } else if (params_.quality < kMinQualityForBlockSplit) { - params_.lgblock = 14; - } else if (params_.lgblock == 0) { - params_.lgblock = 16; - if (params_.quality >= 9 && params_.lgwin > params_.lgblock) { - params_.lgblock = std::min(18, params_.lgwin); - } - } else { - params_.lgblock = std::min(kMaxInputBlockBits, - std::max(kMinInputBlockBits, params_.lgblock)); - } - - // Initialize input and literal cost ring buffers. - // We allocate at least lgwin + 1 bits for the ring buffer so that the newly - // added block fits there completely and we still get lgwin bits and at least - // read_block_size_bits + 1 bits because the copy tail length needs to be - // smaller than ringbuffer size. - int ringbuffer_bits = std::max(params_.lgwin + 1, params_.lgblock + 1); - ringbuffer_ = new RingBuffer(ringbuffer_bits, params_.lgblock); - - commands_ = 0; - cmd_alloc_size_ = 0; - - // Initialize last byte with stream header. - EncodeWindowBits(params_.lgwin, &last_byte_, &last_byte_bits_); - - // Initialize distance cache. - dist_cache_[0] = 4; - dist_cache_[1] = 11; - dist_cache_[2] = 15; - dist_cache_[3] = 16; - // Save the state of the distance cache in case we need to restore it for - // emitting an uncompressed block. - memcpy(saved_dist_cache_, dist_cache_, sizeof(dist_cache_)); - - if (params_.quality == 0) { - InitCommandPrefixCodes(cmd_depths_, cmd_bits_, - cmd_code_, &cmd_code_numbits_); - } else if (params_.quality == 1) { - command_buf_ = new uint32_t[kCompressFragmentTwoPassBlockSize]; - literal_buf_ = new uint8_t[kCompressFragmentTwoPassBlockSize]; - } - - // Initialize hashers. - hash_type_ = std::min(10, params_.quality); - hashers_->Init(hash_type_); -} - -BrotliCompressor::~BrotliCompressor(void) { - delete[] storage_; - free(commands_); - delete ringbuffer_; - delete hashers_; - delete[] large_table_; - delete[] command_buf_; - delete[] literal_buf_; -} - -void BrotliCompressor::CopyInputToRingBuffer(const size_t input_size, - const uint8_t* input_buffer) { - ringbuffer_->Write(input_buffer, input_size); - input_pos_ += input_size; - - // TL;DR: If needed, initialize 7 more bytes in the ring buffer to make the - // hashing not depend on uninitialized data. This makes compression - // deterministic and it prevents uninitialized memory warnings in Valgrind. - // Even without erasing, the output would be valid (but nondeterministic). - // - // Background information: The compressor stores short (at most 8 bytes) - // substrings of the input already read in a hash table, and detects - // repetitions by looking up such substrings in the hash table. If it - // can find a substring, it checks whether the substring is really there - // in the ring buffer (or it's just a hash collision). Should the hash - // table become corrupt, this check makes sure that the output is - // still valid, albeit the compression ratio would be bad. - // - // The compressor populates the hash table from the ring buffer as it's - // reading new bytes from the input. However, at the last few indexes of - // the ring buffer, there are not enough bytes to build full-length - // substrings from. Since the hash table always contains full-length - // substrings, we erase with dummy 0s here to make sure that those - // substrings will contain 0s at the end instead of uninitialized - // data. - // - // Please note that erasing is not necessary (because the - // memory region is already initialized since he ring buffer - // has a `tail' that holds a copy of the beginning,) so we - // skip erasing if we have already gone around at least once in - // the ring buffer. - size_t pos = ringbuffer_->position(); - // Only clear during the first round of ringbuffer writes. On - // subsequent rounds data in the ringbuffer would be affected. - if (pos <= ringbuffer_->mask()) { - // This is the first time when the ring buffer is being written. - // We clear 7 bytes just after the bytes that have been copied from - // the input buffer. - // - // The ringbuffer has a "tail" that holds a copy of the beginning, - // but only once the ring buffer has been fully written once, i.e., - // pos <= mask. For the first time, we need to write values - // in this tail (where index may be larger than mask), so that - // we have exactly defined behavior and don't read un-initialized - // memory. Due to performance reasons, hashing reads data using a - // LOAD64, which can go 7 bytes beyond the bytes written in the - // ringbuffer. - memset(ringbuffer_->start() + pos, 0, 7); - } -} - -void BrotliCompressor::BrotliSetCustomDictionary( - const size_t size, const uint8_t* dict) { - CopyInputToRingBuffer(size, dict); - last_flush_pos_ = size; - last_processed_pos_ = size; - if (size > 0) { - prev_byte_ = dict[size - 1]; - } - if (size > 1) { - prev_byte2_ = dict[size - 2]; - } - hashers_->PrependCustomDictionary(hash_type_, params_.lgwin, size, dict); -} - -bool BrotliCompressor::WriteBrotliData(const bool is_last, - const bool force_flush, - size_t* out_size, - uint8_t** output) { - const uint64_t delta = input_pos_ - last_processed_pos_; - const uint8_t* data = ringbuffer_->start(); - const uint32_t mask = ringbuffer_->mask(); - - if (delta > input_block_size()) { - return false; - } - const uint32_t bytes = static_cast<uint32_t>(delta); - - if (params_.quality <= 1) { - if (delta == 0 && !is_last) { - // We have no new input data and we don't have to finish the stream, so - // nothing to do. - *out_size = 0; - return true; - } - const size_t max_out_size = 2 * bytes + 500; - uint8_t* storage = GetBrotliStorage(max_out_size); - storage[0] = last_byte_; - size_t storage_ix = last_byte_bits_; - size_t table_size; - int* table = GetHashTable(params_.quality, bytes, &table_size); - if (params_.quality == 0) { - BrotliCompressFragmentFast( - &data[WrapPosition(last_processed_pos_) & mask], - bytes, is_last, - table, table_size, - cmd_depths_, cmd_bits_, - &cmd_code_numbits_, cmd_code_, - &storage_ix, storage); - } else { - BrotliCompressFragmentTwoPass( - &data[WrapPosition(last_processed_pos_) & mask], - bytes, is_last, - command_buf_, literal_buf_, - table, table_size, - &storage_ix, storage); - } - last_byte_ = storage[storage_ix >> 3]; - last_byte_bits_ = storage_ix & 7u; - last_processed_pos_ = input_pos_; - *output = &storage[0]; - *out_size = storage_ix >> 3; - return true; - } - - // Theoretical max number of commands is 1 per 2 bytes. - size_t newsize = num_commands_ + bytes / 2 + 1; - if (newsize > cmd_alloc_size_) { - // Reserve a bit more memory to allow merging with a next block - // without realloc: that would impact speed. - newsize += (bytes / 4) + 16; - cmd_alloc_size_ = newsize; - commands_ = - static_cast<Command*>(realloc(commands_, sizeof(Command) * newsize)); - } - - CreateBackwardReferences(bytes, WrapPosition(last_processed_pos_), - is_last, data, mask, - params_.quality, - params_.lgwin, - hashers_, - hash_type_, - dist_cache_, - &last_insert_len_, - &commands_[num_commands_], - &num_commands_, - &num_literals_); - - size_t max_length = std::min<size_t>(mask + 1, 1u << kMaxInputBlockBits); - const size_t max_literals = max_length / 8; - const size_t max_commands = max_length / 8; - if (!is_last && !force_flush && - (params_.quality >= kMinQualityForBlockSplit || - (num_literals_ + num_commands_ < kMaxNumDelayedSymbols)) && - num_literals_ < max_literals && - num_commands_ < max_commands && - input_pos_ + input_block_size() <= last_flush_pos_ + max_length) { - // Merge with next input block. Everything will happen later. - last_processed_pos_ = input_pos_; - *out_size = 0; - return true; - } - - // Create the last insert-only command. - if (last_insert_len_ > 0) { - brotli::Command cmd(last_insert_len_); - commands_[num_commands_++] = cmd; - num_literals_ += last_insert_len_; - last_insert_len_ = 0; - } - - if (!is_last && input_pos_ == last_flush_pos_) { - // We have no new input data and we don't have to finish the stream, so - // nothing to do. - *out_size = 0; - return true; - } - assert(input_pos_ >= last_flush_pos_); - assert(input_pos_ > last_flush_pos_ || is_last); - assert(input_pos_ - last_flush_pos_ <= 1u << 24); - const uint32_t metablock_size = - static_cast<uint32_t>(input_pos_ - last_flush_pos_); - const size_t max_out_size = 2 * metablock_size + 500; - uint8_t* storage = GetBrotliStorage(max_out_size); - storage[0] = last_byte_; - size_t storage_ix = last_byte_bits_; - bool font_mode = params_.mode == BrotliParams::MODE_FONT; - WriteMetaBlockInternal( - data, mask, last_flush_pos_, metablock_size, is_last, params_.quality, - font_mode, prev_byte_, prev_byte2_, num_literals_, num_commands_, - commands_, saved_dist_cache_, dist_cache_, &storage_ix, storage); - last_byte_ = storage[storage_ix >> 3]; - last_byte_bits_ = storage_ix & 7u; - last_flush_pos_ = input_pos_; - last_processed_pos_ = input_pos_; - if (last_flush_pos_ > 0) { - prev_byte_ = data[(static_cast<uint32_t>(last_flush_pos_) - 1) & mask]; - } - if (last_flush_pos_ > 1) { - prev_byte2_ = data[(static_cast<uint32_t>(last_flush_pos_) - 2) & mask]; - } - num_commands_ = 0; - num_literals_ = 0; - // Save the state of the distance cache in case we need to restore it for - // emitting an uncompressed block. - memcpy(saved_dist_cache_, dist_cache_, sizeof(dist_cache_)); - *output = &storage[0]; - *out_size = storage_ix >> 3; - return true; -} - -bool BrotliCompressor::WriteMetaBlock(const size_t input_size, - const uint8_t* input_buffer, - const bool is_last, - size_t* encoded_size, - uint8_t* encoded_buffer) { - CopyInputToRingBuffer(input_size, input_buffer); - size_t out_size = 0; - uint8_t* output; - if (!WriteBrotliData(is_last, /* force_flush = */ true, &out_size, &output) || - out_size > *encoded_size) { - return false; - } - if (out_size > 0) { - memcpy(encoded_buffer, output, out_size); - } - *encoded_size = out_size; - return true; -} - -bool BrotliCompressor::WriteMetadata(const size_t input_size, - const uint8_t* input_buffer, - const bool is_last, - size_t* encoded_size, - uint8_t* encoded_buffer) { - if (input_size > (1 << 24) || input_size + 6 > *encoded_size) { - return false; - } - uint64_t hdr_buffer_data[2]; - uint8_t* hdr_buffer = reinterpret_cast<uint8_t*>(&hdr_buffer_data[0]); - size_t storage_ix = last_byte_bits_; - hdr_buffer[0] = last_byte_; - WriteBits(1, 0, &storage_ix, hdr_buffer); - WriteBits(2, 3, &storage_ix, hdr_buffer); - WriteBits(1, 0, &storage_ix, hdr_buffer); - if (input_size == 0) { - WriteBits(2, 0, &storage_ix, hdr_buffer); - *encoded_size = (storage_ix + 7u) >> 3; - memcpy(encoded_buffer, hdr_buffer, *encoded_size); - } else { - uint32_t nbits = (input_size == 1) ? 0 : (Log2FloorNonZero( - static_cast<uint32_t>(input_size) - 1) + 1); - uint32_t nbytes = (nbits + 7) / 8; - WriteBits(2, nbytes, &storage_ix, hdr_buffer); - WriteBits(8 * nbytes, input_size - 1, &storage_ix, hdr_buffer); - size_t hdr_size = (storage_ix + 7u) >> 3; - memcpy(encoded_buffer, hdr_buffer, hdr_size); - memcpy(&encoded_buffer[hdr_size], input_buffer, input_size); - *encoded_size = hdr_size + input_size; - } - if (is_last) { - encoded_buffer[(*encoded_size)++] = 3; - } - last_byte_ = 0; - last_byte_bits_ = 0; - return true; -} - -bool BrotliCompressor::FinishStream( - size_t* encoded_size, uint8_t* encoded_buffer) { - return WriteMetaBlock(0, NULL, true, encoded_size, encoded_buffer); -} - -static int BrotliCompressBufferQuality10(int lgwin, - size_t input_size, - const uint8_t* input_buffer, - size_t* encoded_size, - uint8_t* encoded_buffer) { - const size_t mask = std::numeric_limits<size_t>::max() >> 1; - assert(input_size <= mask + 1); - const size_t max_backward_limit = (1 << lgwin) - 16; - int dist_cache[4] = { 4, 11, 15, 16 }; - int saved_dist_cache[4] = { 4, 11, 15, 16 }; - int ok = 1; - const size_t max_out_size = *encoded_size; - size_t total_out_size = 0; - uint8_t last_byte; - uint8_t last_byte_bits; - EncodeWindowBits(lgwin, &last_byte, &last_byte_bits); - - Hashers::H10* hasher = new Hashers::H10; - const size_t hasher_eff_size = std::min(input_size, max_backward_limit + 16); - hasher->Init(lgwin, 0, hasher_eff_size, true); - - const int lgblock = std::min(18, lgwin); - const int lgmetablock = std::min(24, lgwin + 1); - const size_t max_block_size = static_cast<size_t>(1) << lgblock; - const size_t max_metablock_size = static_cast<size_t>(1) << lgmetablock; - const size_t max_literals_per_metablock = max_metablock_size / 8; - const size_t max_commands_per_metablock = max_metablock_size / 8; - size_t metablock_start = 0; - uint8_t prev_byte = 0; - uint8_t prev_byte2 = 0; - while (ok && metablock_start < input_size) { - const size_t metablock_end = - std::min(input_size, metablock_start + max_metablock_size); - const size_t expected_num_commands = - (metablock_end - metablock_start) / 12 + 16; - Command* commands = 0; - size_t num_commands = 0; - size_t last_insert_len = 0; - size_t num_literals = 0; - size_t metablock_size = 0; - size_t cmd_alloc_size = 0; - - for (size_t block_start = metablock_start; block_start < metablock_end; ) { - size_t block_size = std::min(metablock_end - block_start, max_block_size); - ZopfliNode* nodes = new ZopfliNode[block_size + 1]; - std::vector<uint32_t> path; - hasher->StitchToPreviousBlock(block_size, block_start, - input_buffer, mask); - ZopfliComputeShortestPath(block_size, block_start, input_buffer, mask, - max_backward_limit, dist_cache, - hasher, nodes, &path); - // We allocate a command buffer in the first iteration of this loop that - // will be likely big enough for the whole metablock, so that for most - // inputs we will not have to reallocate in later iterations. We do the - // allocation here and not before the loop, because if the input is small, - // this will be allocated after the zopfli cost model is freed, so this - // will not increase peak memory usage. - // TODO: If the first allocation is too small, increase command - // buffer size exponentially. - size_t new_cmd_alloc_size = std::max(expected_num_commands, - num_commands + path.size() + 1); - if (cmd_alloc_size != new_cmd_alloc_size) { - cmd_alloc_size = new_cmd_alloc_size; - commands = static_cast<Command*>( - realloc(commands, cmd_alloc_size * sizeof(Command))); - } - ZopfliCreateCommands(block_size, block_start, max_backward_limit, path, - &nodes[0], dist_cache, &last_insert_len, - &commands[num_commands], &num_literals); - num_commands += path.size(); - block_start += block_size; - metablock_size += block_size; - delete[] nodes; - if (num_literals > max_literals_per_metablock || - num_commands > max_commands_per_metablock) { - break; - } - } - - if (last_insert_len > 0) { - Command cmd(last_insert_len); - commands[num_commands++] = cmd; - num_literals += last_insert_len; - } - - const bool is_last = (metablock_start + metablock_size == input_size); - uint8_t* storage = NULL; - size_t storage_ix = last_byte_bits; - - if (metablock_size == 0) { - // Write the ISLAST and ISEMPTY bits. - storage = new uint8_t[16]; - storage[0] = last_byte; - WriteBits(2, 3, &storage_ix, storage); - storage_ix = (storage_ix + 7u) & ~7u; - } else if (!ShouldCompress(input_buffer, mask, metablock_start, - metablock_size, num_literals, num_commands)) { - // Restore the distance cache, as its last update by - // CreateBackwardReferences is now unused. - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); - storage = new uint8_t[metablock_size + 16]; - storage[0] = last_byte; - StoreUncompressedMetaBlock(is_last, input_buffer, - metablock_start, mask, metablock_size, - &storage_ix, storage); - } else { - uint32_t num_direct_distance_codes = 0; - uint32_t distance_postfix_bits = 0; - MetaBlockSplit mb; - ContextType literal_context_mode = CONTEXT_UTF8; - if (!IsMostlyUTF8( - input_buffer, metablock_start, mask, metablock_size, - kMinUTF8Ratio)) { - literal_context_mode = CONTEXT_SIGNED; - } - BuildMetaBlock(input_buffer, metablock_start, mask, - prev_byte, prev_byte2, - commands, num_commands, - literal_context_mode, - &mb); - OptimizeHistograms(num_direct_distance_codes, - distance_postfix_bits, - &mb); - const size_t max_out_metablock_size = 2 * metablock_size + 500; - storage = new uint8_t[max_out_metablock_size]; - storage[0] = last_byte; - StoreMetaBlock(input_buffer, metablock_start, metablock_size, mask, - prev_byte, prev_byte2, - is_last, - num_direct_distance_codes, - distance_postfix_bits, - literal_context_mode, - commands, num_commands, - mb, - &storage_ix, storage); - if (metablock_size + 4 < (storage_ix >> 3)) { - // Restore the distance cache and last byte. - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); - storage[0] = last_byte; - storage_ix = last_byte_bits; - StoreUncompressedMetaBlock(is_last, input_buffer, - metablock_start, mask, - metablock_size, &storage_ix, storage); - } - } - last_byte = storage[storage_ix >> 3]; - last_byte_bits = storage_ix & 7u; - metablock_start += metablock_size; - prev_byte = input_buffer[metablock_start - 1]; - prev_byte2 = input_buffer[metablock_start - 2]; - // Save the state of the distance cache in case we need to restore it for - // emitting an uncompressed block. - memcpy(saved_dist_cache, dist_cache, 4 * sizeof(dist_cache[0])); - - const size_t out_size = storage_ix >> 3; - total_out_size += out_size; - if (total_out_size <= max_out_size) { - memcpy(encoded_buffer, storage, out_size); - encoded_buffer += out_size; - } else { - ok = 0; - } - delete[] storage; - free(commands); - } - - *encoded_size = total_out_size; - delete hasher; - return ok; -} - -int BrotliCompressBuffer(BrotliParams params, - size_t input_size, - const uint8_t* input_buffer, - size_t* encoded_size, - uint8_t* encoded_buffer) { - if (*encoded_size == 0) { - // Output buffer needs at least one byte. - return 0; - } - if (input_size == 0) { - // Handle the special case of empty input. - *encoded_size = 1; - *encoded_buffer = 6; - return 1; - } - if (params.quality == 10) { - // TODO: Implement this direct path for all quality levels. - const int lgwin = std::min(24, std::max(16, params.lgwin)); - return BrotliCompressBufferQuality10(lgwin, input_size, input_buffer, - encoded_size, encoded_buffer); - } - BrotliMemIn in(input_buffer, input_size); - BrotliMemOut out(encoded_buffer, *encoded_size); - if (!BrotliCompress(params, &in, &out)) { - return 0; - } - *encoded_size = out.position(); - return 1; -} - -static bool BrotliInIsFinished(BrotliIn* r) { - size_t read_bytes; - return r->Read(0, &read_bytes) == NULL; -} - -static const uint8_t* BrotliInReadAndCheckEnd(const size_t block_size, - BrotliIn* r, - size_t* bytes_read, - bool* is_last) { - *bytes_read = 0; - const uint8_t* data = reinterpret_cast<const uint8_t*>( - r->Read(block_size, bytes_read)); - assert((data == NULL) == (*bytes_read == 0)); - *is_last = BrotliInIsFinished(r); - return data; -} - -static bool CopyOneBlockToRingBuffer(BrotliIn* r, - BrotliCompressor* compressor, - size_t* bytes_read, - bool* is_last) { - const size_t block_size = compressor->input_block_size(); - const uint8_t* data = BrotliInReadAndCheckEnd(block_size, r, - bytes_read, is_last); - if (data == NULL) { - return *is_last; - } - compressor->CopyInputToRingBuffer(*bytes_read, data); - - // Read more bytes until block_size is filled or an EOF (data == NULL) is - // received. This is useful to get deterministic compressed output for the - // same input no matter how r->Read splits the input to chunks. - for (size_t remaining = block_size - *bytes_read; remaining > 0; ) { - size_t more_bytes_read = 0; - data = BrotliInReadAndCheckEnd(remaining, r, &more_bytes_read, is_last); - if (data == NULL) { - return *is_last; - } - compressor->CopyInputToRingBuffer(more_bytes_read, data); - *bytes_read += more_bytes_read; - remaining -= more_bytes_read; - } - return true; -} - - -int BrotliCompress(BrotliParams params, BrotliIn* in, BrotliOut* out) { - return BrotliCompressWithCustomDictionary(0, 0, params, in, out); -} - -// Reads the provided input in 'block_size' blocks. Only the last read can be -// smaller than 'block_size'. -class BrotliBlockReader { - public: - explicit BrotliBlockReader(size_t block_size) - : block_size_(block_size), buf_(NULL) {} - ~BrotliBlockReader(void) { delete[] buf_; } - - const uint8_t* Read(BrotliIn* in, size_t* bytes_read, bool* is_last) { - *bytes_read = 0; - const uint8_t* data = BrotliInReadAndCheckEnd(block_size_, in, - bytes_read, is_last); - if (data == NULL || *bytes_read == block_size_ || *is_last) { - // If we could get the whole block in one read, or it is the last block, - // we just return the pointer to the data without copying. - return data; - } - // If the data comes in smaller chunks, we need to copy it into an internal - // buffer until we get a whole block or reach the last chunk. - if (buf_ == NULL) { - buf_ = new uint8_t[block_size_]; - } - memcpy(buf_, data, *bytes_read); - do { - size_t cur_bytes_read = 0; - data = BrotliInReadAndCheckEnd(block_size_ - *bytes_read, in, - &cur_bytes_read, is_last); - if (data == NULL) { - return *is_last ? buf_ : NULL; - } - memcpy(&buf_[*bytes_read], data, cur_bytes_read); - *bytes_read += cur_bytes_read; - } while (*bytes_read < block_size_ && !*is_last); - return buf_; - } - - private: - const size_t block_size_; - uint8_t* buf_; -}; - -int BrotliCompressWithCustomDictionary(size_t dictsize, const uint8_t* dict, - BrotliParams params, - BrotliIn* in, BrotliOut* out) { - if (params.quality <= 1) { - const int quality = std::max(0, params.quality); - const int lgwin = std::min(kMaxWindowBits, - std::max(kMinWindowBits, params.lgwin)); - uint8_t* storage = NULL; - int* table = NULL; - uint32_t* command_buf = NULL; - uint8_t* literal_buf = NULL; - uint8_t cmd_depths[128]; - uint16_t cmd_bits[128]; - uint8_t cmd_code[512]; - size_t cmd_code_numbits; - if (quality == 0) { - InitCommandPrefixCodes(cmd_depths, cmd_bits, cmd_code, &cmd_code_numbits); - } - uint8_t last_byte; - uint8_t last_byte_bits; - EncodeWindowBits(lgwin, &last_byte, &last_byte_bits); - BrotliBlockReader r(1u << lgwin); - int ok = 1; - bool is_last = false; - while (ok && !is_last) { - // Read next block of input. - size_t bytes; - const uint8_t* data = r.Read(in, &bytes, &is_last); - if (data == NULL) { - if (!is_last) { - ok = 0; - break; - } - assert(bytes == 0); - } - // Set up output storage. - const size_t max_out_size = 2 * bytes + 500; - if (storage == NULL) { - storage = new uint8_t[max_out_size]; - } - storage[0] = last_byte; - size_t storage_ix = last_byte_bits; - // Set up hash table. - size_t htsize = HashTableSize(MaxHashTableSize(quality), bytes); - if (table == NULL) { - table = new int[htsize]; - } - memset(table, 0, htsize * sizeof(table[0])); - // Set up command and literal buffers for two pass mode. - if (quality == 1 && command_buf == NULL) { - size_t buf_size = std::min(bytes, kCompressFragmentTwoPassBlockSize); - command_buf = new uint32_t[buf_size]; - literal_buf = new uint8_t[buf_size]; - } - // Do the actual compression. - if (quality == 0) { - BrotliCompressFragmentFast(data, bytes, is_last, table, htsize, - cmd_depths, cmd_bits, - &cmd_code_numbits, cmd_code, - &storage_ix, storage); - } else { - BrotliCompressFragmentTwoPass(data, bytes, is_last, - command_buf, literal_buf, - table, htsize, - &storage_ix, storage); - } - // Save last bytes to stitch it together with the next output block. - last_byte = storage[storage_ix >> 3]; - last_byte_bits = storage_ix & 7u; - // Write output block. - size_t out_bytes = storage_ix >> 3; - if (out_bytes > 0 && !out->Write(storage, out_bytes)) { - ok = 0; - break; - } - } - delete[] storage; - delete[] table; - delete[] command_buf; - delete[] literal_buf; - return ok; - } - - size_t in_bytes = 0; - size_t out_bytes = 0; - uint8_t* output; - bool final_block = false; - BrotliCompressor compressor(params); - if (dictsize != 0) compressor.BrotliSetCustomDictionary(dictsize, dict); - while (!final_block) { - if (!CopyOneBlockToRingBuffer(in, &compressor, &in_bytes, &final_block)) { - return false; - } - out_bytes = 0; - if (!compressor.WriteBrotliData(final_block, - /* force_flush = */ false, - &out_bytes, &output)) { - return false; - } - if (out_bytes > 0 && !out->Write(output, out_bytes)) { - return false; - } - } - return true; -} - - -} // namespace brotli diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/encode.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/encode.h deleted file mode 100644 index a06aa4085fb..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/encode.h +++ /dev/null @@ -1,207 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// API for Brotli compression - -#ifndef BROTLI_ENC_ENCODE_H_ -#define BROTLI_ENC_ENCODE_H_ - -#include <string> -#include <vector> -#include "./command.h" -#include "./hash.h" -#include "./ringbuffer.h" -#include "./static_dict.h" -#include "./streams.h" -#include "./types.h" - -namespace brotli { - -static const int kMaxWindowBits = 24; -static const int kMinWindowBits = 10; -static const int kMinInputBlockBits = 16; -static const int kMaxInputBlockBits = 24; - -struct BrotliParams { - BrotliParams(void) - : mode(MODE_GENERIC), - quality(11), - lgwin(22), - lgblock(0), - enable_dictionary(true), - enable_transforms(false), - greedy_block_split(false), - enable_context_modeling(true) {} - - enum Mode { - // Default compression mode. The compressor does not know anything in - // advance about the properties of the input. - MODE_GENERIC = 0, - // Compression mode for UTF-8 format text input. - MODE_TEXT = 1, - // Compression mode used in WOFF 2.0. - MODE_FONT = 2 - }; - Mode mode; - - // Controls the compression-speed vs compression-density tradeoffs. The higher - // the quality, the slower the compression. Range is 0 to 11. - int quality; - // Base 2 logarithm of the sliding window size. Range is 10 to 24. - int lgwin; - // Base 2 logarithm of the maximum input block size. Range is 16 to 24. - // If set to 0, the value will be set based on the quality. - int lgblock; - - // These settings are deprecated and will be ignored. - // All speed vs. size compromises are controlled by the quality param. - bool enable_dictionary; - bool enable_transforms; - bool greedy_block_split; - bool enable_context_modeling; -}; - -// An instance can not be reused for multiple brotli streams. -class BrotliCompressor { - public: - explicit BrotliCompressor(BrotliParams params); - ~BrotliCompressor(void); - - // The maximum input size that can be processed at once. - size_t input_block_size(void) const { return size_t(1) << params_.lgblock; } - - // Encodes the data in input_buffer as a meta-block and writes it to - // encoded_buffer (*encoded_size should be set to the size of - // encoded_buffer) and sets *encoded_size to the number of bytes that - // was written. The input_size must be <= input_block_size(). - // Returns 0 if there was an error and 1 otherwise. - bool WriteMetaBlock(const size_t input_size, - const uint8_t* input_buffer, - const bool is_last, - size_t* encoded_size, - uint8_t* encoded_buffer); - - // Writes a metadata meta-block containing the given input to encoded_buffer. - // *encoded_size should be set to the size of the encoded_buffer. - // Sets *encoded_size to the number of bytes that was written. - // Note that the given input data will not be part of the sliding window and - // thus no backward references can be made to this data from subsequent - // metablocks. - bool WriteMetadata(const size_t input_size, - const uint8_t* input_buffer, - const bool is_last, - size_t* encoded_size, - uint8_t* encoded_buffer); - - // Writes a zero-length meta-block with end-of-input bit set to the - // internal output buffer and copies the output buffer to encoded_buffer - // (*encoded_size should be set to the size of encoded_buffer) and sets - // *encoded_size to the number of bytes written. Returns false if there was - // an error and true otherwise. - bool FinishStream(size_t* encoded_size, uint8_t* encoded_buffer); - - // Copies the given input data to the internal ring buffer of the compressor. - // No processing of the data occurs at this time and this function can be - // called multiple times before calling WriteBrotliData() to process the - // accumulated input. At most input_block_size() bytes of input data can be - // copied to the ring buffer, otherwise the next WriteBrotliData() will fail. - void CopyInputToRingBuffer(const size_t input_size, - const uint8_t* input_buffer); - - // Processes the accumulated input data and sets *out_size to the length of - // the new output meta-block, or to zero if no new output meta-block was - // created (in this case the processed input data is buffered internally). - // If *out_size is positive, *output points to the start of the output data. - // If is_last or force_flush is true, an output meta-block is always created. - // Returns false if the size of the input data is larger than - // input_block_size(). - bool WriteBrotliData(const bool is_last, const bool force_flush, - size_t* out_size, uint8_t** output); - - // Fills the new state with a dictionary for LZ77, warming up the ringbuffer, - // e.g. for custom static dictionaries for data formats. - // Not to be confused with the built-in transformable dictionary of Brotli. - // To decode, use BrotliSetCustomDictionary of the decoder with the same - // dictionary. - void BrotliSetCustomDictionary(size_t size, const uint8_t* dict); - - // No-op, but we keep it here for API backward-compatibility. - void WriteStreamHeader(void) {} - - private: - uint8_t* GetBrotliStorage(size_t size); - - // Allocates and clears a hash table using memory in "*this", - // stores the number of buckets in "*table_size" and returns a pointer to - // the base of the hash table. - int* GetHashTable(int quality, - size_t input_size, size_t* table_size); - - BrotliParams params_; - Hashers* hashers_; - int hash_type_; - uint64_t input_pos_; - RingBuffer* ringbuffer_; - size_t cmd_alloc_size_; - Command* commands_; - size_t num_commands_; - size_t num_literals_; - size_t last_insert_len_; - uint64_t last_flush_pos_; - uint64_t last_processed_pos_; - int dist_cache_[4]; - int saved_dist_cache_[4]; - uint8_t last_byte_; - uint8_t last_byte_bits_; - uint8_t prev_byte_; - uint8_t prev_byte2_; - size_t storage_size_; - uint8_t* storage_; - // Hash table for quality 0 mode. - int small_table_[1 << 10]; // 2KB - int* large_table_; // Allocated only when needed - // Command and distance prefix codes (each 64 symbols, stored back-to-back) - // used for the next block in quality 0. The command prefix code is over a - // smaller alphabet with the following 64 symbols: - // 0 - 15: insert length code 0, copy length code 0 - 15, same distance - // 16 - 39: insert length code 0, copy length code 0 - 23 - // 40 - 63: insert length code 0 - 23, copy length code 0 - // Note that symbols 16 and 40 represent the same code in the full alphabet, - // but we do not use either of them in quality 0. - uint8_t cmd_depths_[128]; - uint16_t cmd_bits_[128]; - // The compressed form of the command and distance prefix codes for the next - // block in quality 0. - uint8_t cmd_code_[512]; - size_t cmd_code_numbits_; - // Command and literal buffers for quality 1. - uint32_t* command_buf_; - uint8_t* literal_buf_; -}; - -// Compresses the data in input_buffer into encoded_buffer, and sets -// *encoded_size to the compressed length. -// Returns 0 if there was an error and 1 otherwise. -int BrotliCompressBuffer(BrotliParams params, - size_t input_size, - const uint8_t* input_buffer, - size_t* encoded_size, - uint8_t* encoded_buffer); - -// Same as above, but uses the specified input and output classes instead -// of reading from and writing to pre-allocated memory buffers. -int BrotliCompress(BrotliParams params, BrotliIn* in, BrotliOut* out); - -// Before compressing the data, sets a custom LZ77 dictionary with -// BrotliCompressor::BrotliSetCustomDictionary. -int BrotliCompressWithCustomDictionary(size_t dictsize, const uint8_t* dict, - BrotliParams params, - BrotliIn* in, BrotliOut* out); - - -} // namespace brotli - -#endif // BROTLI_ENC_ENCODE_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/encode_parallel.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/encode_parallel.cc deleted file mode 100644 index cbad975415d..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/encode_parallel.cc +++ /dev/null @@ -1,279 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Implementation of parallel Brotli compressor. - -#include "./encode_parallel.h" - -#include <algorithm> -#include <limits> - -#include "./backward_references.h" -#include "./bit_cost.h" -#include "./block_splitter.h" -#include "./brotli_bit_stream.h" -#include "./cluster.h" -#include "./context.h" -#include "./metablock.h" -#include "./transform.h" -#include "./entropy_encode.h" -#include "./fast_log.h" -#include "./hash.h" -#include "./histogram.h" -#include "./prefix.h" -#include "./utf8_util.h" -#include "./write_bits.h" - -namespace brotli { - -namespace { - -void RecomputeDistancePrefixes(Command* cmds, size_t num_commands, - uint32_t num_direct_distance_codes, - uint32_t distance_postfix_bits) { - if (num_direct_distance_codes == 0 && - distance_postfix_bits == 0) { - return; - } - for (size_t i = 0; i < num_commands; ++i) { - Command* cmd = &cmds[i]; - if (cmd->copy_len() && cmd->cmd_prefix_ >= 128) { - PrefixEncodeCopyDistance(cmd->DistanceCode(), - num_direct_distance_codes, - distance_postfix_bits, - &cmd->dist_prefix_, - &cmd->dist_extra_); - } - } -} - -bool WriteMetaBlockParallel(const BrotliParams& params, - const uint32_t input_size, - const uint8_t* input_buffer, - const uint32_t prefix_size, - const uint8_t* prefix_buffer, - const bool is_first, - const bool is_last, - size_t* encoded_size, - uint8_t* encoded_buffer) { - if (input_size == 0) { - return false; - } - - // Copy prefix + next input block into a continuous area. - uint32_t input_pos = prefix_size; - // CreateBackwardReferences reads up to 3 bytes past the end of input if the - // mask points past the end of input. - // FindMatchLengthWithLimit could do another 8 bytes look-forward. - std::vector<uint8_t> input(prefix_size + input_size + 4 + 8); - memcpy(&input[0], prefix_buffer, prefix_size); - memcpy(&input[input_pos], input_buffer, input_size); - // Since we don't have a ringbuffer, masking is a no-op. - // We use one less bit than the full range because some of the code uses - // mask + 1 as the size of the ringbuffer. - const uint32_t mask = std::numeric_limits<uint32_t>::max() >> 1; - - uint8_t prev_byte = input_pos > 0 ? input[(input_pos - 1) & mask] : 0; - uint8_t prev_byte2 = input_pos > 1 ? input[(input_pos - 2) & mask] : 0; - - // Decide about UTF8 mode. - static const double kMinUTF8Ratio = 0.75; - bool utf8_mode = IsMostlyUTF8(&input[0], input_pos, mask, input_size, - kMinUTF8Ratio); - - // Initialize hashers. - int hash_type = std::min(10, params.quality); - Hashers* hashers = new Hashers(); - hashers->Init(hash_type); - - // Compute backward references. - size_t last_insert_len = 0; - size_t num_commands = 0; - size_t num_literals = 0; - int dist_cache[4] = { -4, -4, -4, -4 }; - Command* commands = static_cast<Command*>( - malloc(sizeof(Command) * ((input_size + 1) >> 1))); - if (commands == 0) { - delete hashers; - return false; - } - CreateBackwardReferences( - input_size, input_pos, is_last, - &input[0], mask, - params.quality, - params.lgwin, - hashers, - hash_type, - dist_cache, - &last_insert_len, - commands, - &num_commands, - &num_literals); - delete hashers; - if (last_insert_len > 0) { - commands[num_commands++] = Command(last_insert_len); - num_literals += last_insert_len; - } - assert(num_commands != 0); - - // Build the meta-block. - MetaBlockSplit mb; - uint32_t num_direct_distance_codes = - params.mode == BrotliParams::MODE_FONT ? 12 : 0; - uint32_t distance_postfix_bits = - params.mode == BrotliParams::MODE_FONT ? 1 : 0; - ContextType literal_context_mode = utf8_mode ? CONTEXT_UTF8 : CONTEXT_SIGNED; - RecomputeDistancePrefixes(commands, num_commands, - num_direct_distance_codes, - distance_postfix_bits); - if (params.quality <= 9) { - BuildMetaBlockGreedy(&input[0], input_pos, mask, - commands, num_commands, - &mb); - } else { - BuildMetaBlock(&input[0], input_pos, mask, - prev_byte, prev_byte2, - commands, num_commands, - literal_context_mode, - &mb); - } - - // Set up the temporary output storage. - const size_t max_out_size = 2 * input_size + 500; - std::vector<uint8_t> storage(max_out_size); - uint8_t first_byte = 0; - size_t first_byte_bits = 0; - if (is_first) { - if (params.lgwin == 16) { - first_byte = 0; - first_byte_bits = 1; - } else if (params.lgwin == 17) { - first_byte = 1; - first_byte_bits = 7; - } else { - first_byte = static_cast<uint8_t>(((params.lgwin - 17) << 1) | 1); - first_byte_bits = 4; - } - } - storage[0] = static_cast<uint8_t>(first_byte); - size_t storage_ix = first_byte_bits; - - // Store the meta-block to the temporary output. - StoreMetaBlock(&input[0], input_pos, input_size, mask, - prev_byte, prev_byte2, - is_last, - num_direct_distance_codes, - distance_postfix_bits, - literal_context_mode, - commands, num_commands, - mb, - &storage_ix, &storage[0]); - free(commands); - - // If this is not the last meta-block, store an empty metadata - // meta-block so that the meta-block will end at a byte boundary. - if (!is_last) { - StoreSyncMetaBlock(&storage_ix, &storage[0]); - } - - // If the compressed data is too large, fall back to an uncompressed - // meta-block. - size_t output_size = storage_ix >> 3; - if (input_size + 4 < output_size) { - storage[0] = static_cast<uint8_t>(first_byte); - storage_ix = first_byte_bits; - StoreUncompressedMetaBlock(is_last, &input[0], input_pos, mask, - input_size, - &storage_ix, &storage[0]); - output_size = storage_ix >> 3; - } - - // Copy the temporary output with size-check to the output. - if (output_size > *encoded_size) { - return false; - } - memcpy(encoded_buffer, &storage[0], output_size); - *encoded_size = output_size; - return true; -} - -} // namespace - -int BrotliCompressBufferParallel(BrotliParams params, - size_t input_size, - const uint8_t* input_buffer, - size_t* encoded_size, - uint8_t* encoded_buffer) { - if (*encoded_size == 0) { - // Output buffer needs at least one byte. - return 0; - } else if (input_size == 0) { - encoded_buffer[0] = 6; - *encoded_size = 1; - return 1; - } - - // Sanitize params. - if (params.lgwin < kMinWindowBits) { - params.lgwin = kMinWindowBits; - } else if (params.lgwin > kMaxWindowBits) { - params.lgwin = kMaxWindowBits; - } - if (params.lgblock == 0) { - params.lgblock = 16; - if (params.quality >= 9 && params.lgwin > params.lgblock) { - params.lgblock = std::min(21, params.lgwin); - } - } else if (params.lgblock < kMinInputBlockBits) { - params.lgblock = kMinInputBlockBits; - } else if (params.lgblock > kMaxInputBlockBits) { - params.lgblock = kMaxInputBlockBits; - } - size_t max_input_block_size = 1 << params.lgblock; - size_t max_prefix_size = 1u << params.lgwin; - - std::vector<std::vector<uint8_t> > compressed_pieces; - - // Compress block-by-block independently. - for (size_t pos = 0; pos < input_size; ) { - uint32_t input_block_size = - static_cast<uint32_t>(std::min(max_input_block_size, input_size - pos)); - uint32_t prefix_size = - static_cast<uint32_t>(std::min(max_prefix_size, pos)); - size_t out_size = input_block_size + (input_block_size >> 3) + 1024; - std::vector<uint8_t> out(out_size); - if (!WriteMetaBlockParallel(params, - input_block_size, - &input_buffer[pos], - prefix_size, - &input_buffer[pos - prefix_size], - pos == 0, - pos + input_block_size == input_size, - &out_size, - &out[0])) { - return false; - } - out.resize(out_size); - compressed_pieces.push_back(out); - pos += input_block_size; - } - - // Piece together the output. - size_t out_pos = 0; - for (size_t i = 0; i < compressed_pieces.size(); ++i) { - const std::vector<uint8_t>& out = compressed_pieces[i]; - if (out_pos + out.size() > *encoded_size) { - return false; - } - memcpy(&encoded_buffer[out_pos], &out[0], out.size()); - out_pos += out.size(); - } - *encoded_size = out_pos; - - return true; -} - -} // namespace brotli diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/encode_parallel.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/encode_parallel.h deleted file mode 100644 index 8d637b7c02e..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/encode_parallel.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// API for parallel Brotli compression -// Note that this is only a proof of concept currently and not part of the -// final API yet. - -#ifndef BROTLI_ENC_ENCODE_PARALLEL_H_ -#define BROTLI_ENC_ENCODE_PARALLEL_H_ - - -#include "./encode.h" -#include "./types.h" - -namespace brotli { - -int BrotliCompressBufferParallel(BrotliParams params, - size_t input_size, - const uint8_t* input_buffer, - size_t* encoded_size, - uint8_t* encoded_buffer); - -} // namespace brotli - -#endif // BROTLI_ENC_ENCODE_PARALLEL_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/entropy_encode.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/entropy_encode.cc deleted file mode 100644 index f18355d88db..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/entropy_encode.cc +++ /dev/null @@ -1,480 +0,0 @@ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Entropy encoding (Huffman) utilities. - -#include "./entropy_encode.h" - -#include <algorithm> -#include <limits> -#include <cstdlib> - -#include "./histogram.h" -#include "./port.h" -#include "./types.h" - -namespace brotli { - -void SetDepth(const HuffmanTree &p, - HuffmanTree *pool, - uint8_t *depth, - uint8_t level) { - if (p.index_left_ >= 0) { - ++level; - SetDepth(pool[p.index_left_], pool, depth, level); - SetDepth(pool[p.index_right_or_value_], pool, depth, level); - } else { - depth[p.index_right_or_value_] = level; - } -} - -// Sort the root nodes, least popular first. -static inline bool SortHuffmanTree(const HuffmanTree& v0, - const HuffmanTree& v1) { - if (v0.total_count_ != v1.total_count_) { - return v0.total_count_ < v1.total_count_; - } - return v0.index_right_or_value_ > v1.index_right_or_value_; -} - -// This function will create a Huffman tree. -// -// The catch here is that the tree cannot be arbitrarily deep. -// Brotli specifies a maximum depth of 15 bits for "code trees" -// and 7 bits for "code length code trees." -// -// count_limit is the value that is to be faked as the minimum value -// and this minimum value is raised until the tree matches the -// maximum length requirement. -// -// This algorithm is not of excellent performance for very long data blocks, -// especially when population counts are longer than 2**tree_limit, but -// we are not planning to use this with extremely long blocks. -// -// See http://en.wikipedia.org/wiki/Huffman_coding -void CreateHuffmanTree(const uint32_t *data, - const size_t length, - const int tree_limit, - HuffmanTree* tree, - uint8_t *depth) { - // For block sizes below 64 kB, we never need to do a second iteration - // of this loop. Probably all of our block sizes will be smaller than - // that, so this loop is mostly of academic interest. If we actually - // would need this, we would be better off with the Katajainen algorithm. - for (uint32_t count_limit = 1; ; count_limit *= 2) { - size_t n = 0; - for (size_t i = length; i != 0;) { - --i; - if (data[i]) { - const uint32_t count = std::max(data[i], count_limit); - tree[n++] = HuffmanTree(count, -1, static_cast<int16_t>(i)); - } - } - - if (n == 1) { - depth[tree[0].index_right_or_value_] = 1; // Only one element. - break; - } - - std::sort(tree, tree + n, SortHuffmanTree); - - // The nodes are: - // [0, n): the sorted leaf nodes that we start with. - // [n]: we add a sentinel here. - // [n + 1, 2n): new parent nodes are added here, starting from - // (n+1). These are naturally in ascending order. - // [2n]: we add a sentinel at the end as well. - // There will be (2n+1) elements at the end. - const HuffmanTree sentinel(std::numeric_limits<uint32_t>::max(), -1, -1); - tree[n] = sentinel; - tree[n + 1] = sentinel; - - size_t i = 0; // Points to the next leaf node. - size_t j = n + 1; // Points to the next non-leaf node. - for (size_t k = n - 1; k != 0; --k) { - size_t left, right; - if (tree[i].total_count_ <= tree[j].total_count_) { - left = i; - ++i; - } else { - left = j; - ++j; - } - if (tree[i].total_count_ <= tree[j].total_count_) { - right = i; - ++i; - } else { - right = j; - ++j; - } - - // The sentinel node becomes the parent node. - size_t j_end = 2 * n - k; - tree[j_end].total_count_ = - tree[left].total_count_ + tree[right].total_count_; - tree[j_end].index_left_ = static_cast<int16_t>(left); - tree[j_end].index_right_or_value_ = static_cast<int16_t>(right); - - // Add back the last sentinel node. - tree[j_end + 1] = sentinel; - } - SetDepth(tree[2 * n - 1], &tree[0], depth, 0); - - // We need to pack the Huffman tree in tree_limit bits. - // If this was not successful, add fake entities to the lowest values - // and retry. - if (*std::max_element(&depth[0], &depth[length]) <= tree_limit) { - break; - } - } -} - -static void Reverse(uint8_t* v, size_t start, size_t end) { - --end; - while (start < end) { - uint8_t tmp = v[start]; - v[start] = v[end]; - v[end] = tmp; - ++start; - --end; - } -} - -static void WriteHuffmanTreeRepetitions( - const uint8_t previous_value, - const uint8_t value, - size_t repetitions, - size_t* tree_size, - uint8_t* tree, - uint8_t* extra_bits_data) { - assert(repetitions > 0); - if (previous_value != value) { - tree[*tree_size] = value; - extra_bits_data[*tree_size] = 0; - ++(*tree_size); - --repetitions; - } - if (repetitions == 7) { - tree[*tree_size] = value; - extra_bits_data[*tree_size] = 0; - ++(*tree_size); - --repetitions; - } - if (repetitions < 3) { - for (size_t i = 0; i < repetitions; ++i) { - tree[*tree_size] = value; - extra_bits_data[*tree_size] = 0; - ++(*tree_size); - } - } else { - repetitions -= 3; - size_t start = *tree_size; - while (true) { - tree[*tree_size] = 16; - extra_bits_data[*tree_size] = repetitions & 0x3; - ++(*tree_size); - repetitions >>= 2; - if (repetitions == 0) { - break; - } - --repetitions; - } - Reverse(tree, start, *tree_size); - Reverse(extra_bits_data, start, *tree_size); - } -} - -static void WriteHuffmanTreeRepetitionsZeros( - size_t repetitions, - size_t* tree_size, - uint8_t* tree, - uint8_t* extra_bits_data) { - if (repetitions == 11) { - tree[*tree_size] = 0; - extra_bits_data[*tree_size] = 0; - ++(*tree_size); - --repetitions; - } - if (repetitions < 3) { - for (size_t i = 0; i < repetitions; ++i) { - tree[*tree_size] = 0; - extra_bits_data[*tree_size] = 0; - ++(*tree_size); - } - } else { - repetitions -= 3; - size_t start = *tree_size; - while (true) { - tree[*tree_size] = 17; - extra_bits_data[*tree_size] = repetitions & 0x7; - ++(*tree_size); - repetitions >>= 3; - if (repetitions == 0) { - break; - } - --repetitions; - } - Reverse(tree, start, *tree_size); - Reverse(extra_bits_data, start, *tree_size); - } -} - -void OptimizeHuffmanCountsForRle(size_t length, uint32_t* counts, - uint8_t* good_for_rle) { - size_t nonzero_count = 0; - size_t stride; - size_t limit; - size_t sum; - const size_t streak_limit = 1240; - // Let's make the Huffman code more compatible with rle encoding. - size_t i; - for (i = 0; i < length; i++) { - if (counts[i]) { - ++nonzero_count; - } - } - if (nonzero_count < 16) { - return; - } - while (length != 0 && counts[length - 1] == 0) { - --length; - } - if (length == 0) { - return; // All zeros. - } - // Now counts[0..length - 1] does not have trailing zeros. - { - size_t nonzeros = 0; - uint32_t smallest_nonzero = 1 << 30; - for (i = 0; i < length; ++i) { - if (counts[i] != 0) { - ++nonzeros; - if (smallest_nonzero > counts[i]) { - smallest_nonzero = counts[i]; - } - } - } - if (nonzeros < 5) { - // Small histogram will model it well. - return; - } - size_t zeros = length - nonzeros; - if (smallest_nonzero < 4) { - if (zeros < 6) { - for (i = 1; i < length - 1; ++i) { - if (counts[i - 1] != 0 && counts[i] == 0 && counts[i + 1] != 0) { - counts[i] = 1; - } - } - } - } - if (nonzeros < 28) { - return; - } - } - // 2) Let's mark all population counts that already can be encoded - // with an rle code. - memset(good_for_rle, 0, length); - { - // Let's not spoil any of the existing good rle codes. - // Mark any seq of 0's that is longer as 5 as a good_for_rle. - // Mark any seq of non-0's that is longer as 7 as a good_for_rle. - uint32_t symbol = counts[0]; - size_t step = 0; - for (i = 0; i <= length; ++i) { - if (i == length || counts[i] != symbol) { - if ((symbol == 0 && step >= 5) || - (symbol != 0 && step >= 7)) { - size_t k; - for (k = 0; k < step; ++k) { - good_for_rle[i - k - 1] = 1; - } - } - step = 1; - if (i != length) { - symbol = counts[i]; - } - } else { - ++step; - } - } - } - // 3) Let's replace those population counts that lead to more rle codes. - // Math here is in 24.8 fixed point representation. - stride = 0; - limit = 256 * (counts[0] + counts[1] + counts[2]) / 3 + 420; - sum = 0; - for (i = 0; i <= length; ++i) { - if (i == length || good_for_rle[i] || - (i != 0 && good_for_rle[i - 1]) || - (256 * counts[i] - limit + streak_limit) >= 2 * streak_limit) { - if (stride >= 4 || (stride >= 3 && sum == 0)) { - size_t k; - // The stride must end, collapse what we have, if we have enough (4). - size_t count = (sum + stride / 2) / stride; - if (count == 0) { - count = 1; - } - if (sum == 0) { - // Don't make an all zeros stride to be upgraded to ones. - count = 0; - } - for (k = 0; k < stride; ++k) { - // We don't want to change value at counts[i], - // that is already belonging to the next stride. Thus - 1. - counts[i - k - 1] = static_cast<uint32_t>(count); - } - } - stride = 0; - sum = 0; - if (i < length - 2) { - // All interesting strides have a count of at least 4, - // at least when non-zeros. - limit = 256 * (counts[i] + counts[i + 1] + counts[i + 2]) / 3 + 420; - } else if (i < length) { - limit = 256 * counts[i]; - } else { - limit = 0; - } - } - ++stride; - if (i != length) { - sum += counts[i]; - if (stride >= 4) { - limit = (256 * sum + stride / 2) / stride; - } - if (stride == 4) { - limit += 120; - } - } - } -} - -static void DecideOverRleUse(const uint8_t* depth, const size_t length, - bool *use_rle_for_non_zero, - bool *use_rle_for_zero) { - size_t total_reps_zero = 0; - size_t total_reps_non_zero = 0; - size_t count_reps_zero = 1; - size_t count_reps_non_zero = 1; - for (size_t i = 0; i < length;) { - const uint8_t value = depth[i]; - size_t reps = 1; - for (size_t k = i + 1; k < length && depth[k] == value; ++k) { - ++reps; - } - if (reps >= 3 && value == 0) { - total_reps_zero += reps; - ++count_reps_zero; - } - if (reps >= 4 && value != 0) { - total_reps_non_zero += reps; - ++count_reps_non_zero; - } - i += reps; - } - *use_rle_for_non_zero = total_reps_non_zero > count_reps_non_zero * 2; - *use_rle_for_zero = total_reps_zero > count_reps_zero * 2; -} - -void WriteHuffmanTree(const uint8_t* depth, - size_t length, - size_t* tree_size, - uint8_t* tree, - uint8_t* extra_bits_data) { - uint8_t previous_value = 8; - - // Throw away trailing zeros. - size_t new_length = length; - for (size_t i = 0; i < length; ++i) { - if (depth[length - i - 1] == 0) { - --new_length; - } else { - break; - } - } - - // First gather statistics on if it is a good idea to do rle. - bool use_rle_for_non_zero = false; - bool use_rle_for_zero = false; - if (length > 50) { - // Find rle coding for longer codes. - // Shorter codes seem not to benefit from rle. - DecideOverRleUse(depth, new_length, - &use_rle_for_non_zero, &use_rle_for_zero); - } - - // Actual rle coding. - for (size_t i = 0; i < new_length;) { - const uint8_t value = depth[i]; - size_t reps = 1; - if ((value != 0 && use_rle_for_non_zero) || - (value == 0 && use_rle_for_zero)) { - for (size_t k = i + 1; k < new_length && depth[k] == value; ++k) { - ++reps; - } - } - if (value == 0) { - WriteHuffmanTreeRepetitionsZeros(reps, tree_size, tree, extra_bits_data); - } else { - WriteHuffmanTreeRepetitions(previous_value, - value, reps, tree_size, - tree, extra_bits_data); - previous_value = value; - } - i += reps; - } -} - -namespace { - -uint16_t ReverseBits(int num_bits, uint16_t bits) { - static const size_t kLut[16] = { // Pre-reversed 4-bit values. - 0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe, - 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf - }; - size_t retval = kLut[bits & 0xf]; - for (int i = 4; i < num_bits; i += 4) { - retval <<= 4; - bits = static_cast<uint16_t>(bits >> 4); - retval |= kLut[bits & 0xf]; - } - retval >>= (-num_bits & 0x3); - return static_cast<uint16_t>(retval); -} - -} // namespace - -void ConvertBitDepthsToSymbols(const uint8_t *depth, - size_t len, - uint16_t *bits) { - // In Brotli, all bit depths are [1..15] - // 0 bit depth means that the symbol does not exist. - const int kMaxBits = 16; // 0..15 are values for bits - uint16_t bl_count[kMaxBits] = { 0 }; - { - for (size_t i = 0; i < len; ++i) { - ++bl_count[depth[i]]; - } - bl_count[0] = 0; - } - uint16_t next_code[kMaxBits]; - next_code[0] = 0; - { - int code = 0; - for (int bits = 1; bits < kMaxBits; ++bits) { - code = (code + bl_count[bits - 1]) << 1; - next_code[bits] = static_cast<uint16_t>(code); - } - } - for (size_t i = 0; i < len; ++i) { - if (depth[i]) { - bits[i] = ReverseBits(depth[i], next_code[depth[i]]++); - } - } -} - -} // namespace brotli diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/entropy_encode.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/entropy_encode.h deleted file mode 100644 index 090f9546c1b..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/entropy_encode.h +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Entropy encoding (Huffman) utilities. - -#ifndef BROTLI_ENC_ENTROPY_ENCODE_H_ -#define BROTLI_ENC_ENTROPY_ENCODE_H_ - -#include <string.h> -#include "./histogram.h" -#include "./prefix.h" -#include "./types.h" - -namespace brotli { - -// A node of a Huffman tree. -struct HuffmanTree { - HuffmanTree() {} - HuffmanTree(uint32_t count, int16_t left, int16_t right) - : total_count_(count), - index_left_(left), - index_right_or_value_(right) { - } - uint32_t total_count_; - int16_t index_left_; - int16_t index_right_or_value_; -}; - -void SetDepth(const HuffmanTree &p, HuffmanTree *pool, - uint8_t *depth, uint8_t level); - -// This function will create a Huffman tree. -// -// The (data,length) contains the population counts. -// The tree_limit is the maximum bit depth of the Huffman codes. -// -// The depth contains the tree, i.e., how many bits are used for -// the symbol. -// -// The actual Huffman tree is constructed in the tree[] array, which has to -// be at least 2 * length + 1 long. -// -// See http://en.wikipedia.org/wiki/Huffman_coding -void CreateHuffmanTree(const uint32_t *data, - const size_t length, - const int tree_limit, - HuffmanTree* tree, - uint8_t *depth); - -// Change the population counts in a way that the consequent -// Huffman tree compression, especially its rle-part will be more -// likely to compress this data more efficiently. -// -// length contains the size of the histogram. -// counts contains the population counts. -// good_for_rle is a buffer of at least length size -void OptimizeHuffmanCountsForRle(size_t length, uint32_t* counts, - uint8_t* good_for_rle); - -// Write a Huffman tree from bit depths into the bitstream representation -// of a Huffman tree. The generated Huffman tree is to be compressed once -// more using a Huffman tree -void WriteHuffmanTree(const uint8_t* depth, - size_t num, - size_t* tree_size, - uint8_t* tree, - uint8_t* extra_bits_data); - -// Get the actual bit values for a tree of bit depths. -void ConvertBitDepthsToSymbols(const uint8_t *depth, - size_t len, - uint16_t *bits); - -template<int kSize> -struct EntropyCode { - // How many bits for symbol. - uint8_t depth_[kSize]; - // Actual bits used to represent the symbol. - uint16_t bits_[kSize]; - // How many non-zero depth. - int count_; - // First four symbols with non-zero depth. - int symbols_[4]; -}; - -static const int kCodeLengthCodes = 18; - -// Literal entropy code. -typedef EntropyCode<256> EntropyCodeLiteral; -// Prefix entropy codes. -typedef EntropyCode<kNumCommandPrefixes> EntropyCodeCommand; -typedef EntropyCode<kNumDistancePrefixes> EntropyCodeDistance; -typedef EntropyCode<kNumBlockLenPrefixes> EntropyCodeBlockLength; -// Context map entropy code, 256 Huffman tree indexes + 16 run length codes. -typedef EntropyCode<272> EntropyCodeContextMap; -// Block type entropy code, 256 block types + 2 special symbols. -typedef EntropyCode<258> EntropyCodeBlockType; - -} // namespace brotli - -#endif // BROTLI_ENC_ENTROPY_ENCODE_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/find_match_length.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/find_match_length.h deleted file mode 100644 index 1337ec36861..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/find_match_length.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Function to find maximal matching prefixes of strings. - -#ifndef BROTLI_ENC_FIND_MATCH_LENGTH_H_ -#define BROTLI_ENC_FIND_MATCH_LENGTH_H_ - - -#include "./port.h" -#include "./types.h" - -namespace brotli { - -// Separate implementation for little-endian 64-bit targets, for speed. -#if defined(__GNUC__) && defined(_LP64) && defined(IS_LITTLE_ENDIAN) - -static inline size_t FindMatchLengthWithLimit(const uint8_t* s1, - const uint8_t* s2, - size_t limit) { - size_t matched = 0; - size_t limit2 = (limit >> 3) + 1; // + 1 is for pre-decrement in while - while (PREDICT_TRUE(--limit2)) { - if (PREDICT_FALSE(BROTLI_UNALIGNED_LOAD64(s2) == - BROTLI_UNALIGNED_LOAD64(s1 + matched))) { - s2 += 8; - matched += 8; - } else { - uint64_t x = - BROTLI_UNALIGNED_LOAD64(s2) ^ BROTLI_UNALIGNED_LOAD64(s1 + matched); - size_t matching_bits = static_cast<size_t>(__builtin_ctzll(x)); - matched += matching_bits >> 3; - return matched; - } - } - limit = (limit & 7) + 1; // + 1 is for pre-decrement in while - while (--limit) { - if (PREDICT_TRUE(s1[matched] == *s2)) { - ++s2; - ++matched; - } else { - return matched; - } - } - return matched; -} -#else -static inline size_t FindMatchLengthWithLimit(const uint8_t* s1, - const uint8_t* s2, - size_t limit) { - size_t matched = 0; - const uint8_t* s2_limit = s2 + limit; - const uint8_t* s2_ptr = s2; - // Find out how long the match is. We loop over the data 32 bits at a - // time until we find a 32-bit block that doesn't match; then we find - // the first non-matching bit and use that to calculate the total - // length of the match. - while (s2_ptr <= s2_limit - 4 && - BROTLI_UNALIGNED_LOAD32(s2_ptr) == - BROTLI_UNALIGNED_LOAD32(s1 + matched)) { - s2_ptr += 4; - matched += 4; - } - while ((s2_ptr < s2_limit) && (s1[matched] == *s2_ptr)) { - ++s2_ptr; - ++matched; - } - return matched; -} -#endif - -} // namespace brotli - -#endif // BROTLI_ENC_FIND_MATCH_LENGTH_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/hash.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/hash.h deleted file mode 100644 index 8716863bff0..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/hash.h +++ /dev/null @@ -1,974 +0,0 @@ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// A (forgetful) hash table to the data seen by the compressor, to -// help create backward references to previous data. - -#ifndef BROTLI_ENC_HASH_H_ -#define BROTLI_ENC_HASH_H_ - -#include <sys/types.h> -#include <algorithm> -#include <cstring> -#include <limits> - -#include "./dictionary_hash.h" -#include "./fast_log.h" -#include "./find_match_length.h" -#include "./port.h" -#include "./prefix.h" -#include "./static_dict.h" -#include "./transform.h" -#include "./types.h" - -namespace brotli { - -static const size_t kMaxTreeSearchDepth = 64; -static const size_t kMaxTreeCompLength = 128; - -static const uint32_t kDistanceCacheIndex[] = { - 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, -}; -static const int kDistanceCacheOffset[] = { - 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3 -}; - -static const uint32_t kCutoffTransformsCount = 10; -static const uint8_t kCutoffTransforms[] = { - 0, 12, 27, 23, 42, 63, 56, 48, 59, 64 -}; - -// kHashMul32 multiplier has these properties: -// * The multiplier must be odd. Otherwise we may lose the highest bit. -// * No long streaks of 1s or 0s. -// * There is no effort to ensure that it is a prime, the oddity is enough -// for this use. -// * The number has been tuned heuristically against compression benchmarks. -static const uint32_t kHashMul32 = 0x1e35a7bd; - -template<int kShiftBits> -inline uint32_t Hash(const uint8_t *data) { - uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kHashMul32; - // The higher bits contain more mixture from the multiplication, - // so we take our results from there. - return h >> (32 - kShiftBits); -} - -// Usually, we always choose the longest backward reference. This function -// allows for the exception of that rule. -// -// If we choose a backward reference that is further away, it will -// usually be coded with more bits. We approximate this by assuming -// log2(distance). If the distance can be expressed in terms of the -// last four distances, we use some heuristic constants to estimate -// the bits cost. For the first up to four literals we use the bit -// cost of the literals from the literal cost model, after that we -// use the average bit cost of the cost model. -// -// This function is used to sometimes discard a longer backward reference -// when it is not much longer and the bit cost for encoding it is more -// than the saved literals. -// -// backward_reference_offset MUST be positive. -inline double BackwardReferenceScore(size_t copy_length, - size_t backward_reference_offset) { - return 5.4 * static_cast<double>(copy_length) - - 1.20 * Log2FloorNonZero(backward_reference_offset); -} - -inline double BackwardReferenceScoreUsingLastDistance(size_t copy_length, - size_t distance_short_code) { - static const double kDistanceShortCodeBitCost[16] = { - -0.6, 0.95, 1.17, 1.27, - 0.93, 0.93, 0.96, 0.96, 0.99, 0.99, - 1.05, 1.05, 1.15, 1.15, 1.25, 1.25 - }; - return 5.4 * static_cast<double>(copy_length) - - kDistanceShortCodeBitCost[distance_short_code]; -} - -struct BackwardMatch { - BackwardMatch(void) : distance(0), length_and_code(0) {} - - BackwardMatch(size_t dist, size_t len) - : distance(static_cast<uint32_t>(dist)) - , length_and_code(static_cast<uint32_t>(len << 5)) {} - - BackwardMatch(size_t dist, size_t len, size_t len_code) - : distance(static_cast<uint32_t>(dist)) - , length_and_code(static_cast<uint32_t>( - (len << 5) | (len == len_code ? 0 : len_code))) {} - - size_t length(void) const { - return length_and_code >> 5; - } - size_t length_code(void) const { - size_t code = length_and_code & 31; - return code ? code : length(); - } - - uint32_t distance; - uint32_t length_and_code; -}; - -// A (forgetful) hash table to the data seen by the compressor, to -// help create backward references to previous data. -// -// This is a hash map of fixed size (kBucketSize). Starting from the -// given index, kBucketSweep buckets are used to store values of a key. -template <int kBucketBits, int kBucketSweep, bool kUseDictionary> -class HashLongestMatchQuickly { - public: - HashLongestMatchQuickly(void) { - Reset(); - } - void Reset(void) { - need_init_ = true; - num_dict_lookups_ = 0; - num_dict_matches_ = 0; - } - void Init(void) { - if (need_init_) { - // It is not strictly necessary to fill this buffer here, but - // not filling will make the results of the compression stochastic - // (but correct). This is because random data would cause the - // system to find accidentally good backward references here and there. - memset(&buckets_[0], 0, sizeof(buckets_)); - need_init_ = false; - } - } - void InitForData(const uint8_t* data, size_t num) { - for (size_t i = 0; i < num; ++i) { - const uint32_t key = HashBytes(&data[i]); - memset(&buckets_[key], 0, kBucketSweep * sizeof(buckets_[0])); - need_init_ = false; - } - } - // Look at 4 bytes at data. - // Compute a hash from these, and store the value somewhere within - // [ix .. ix+3]. - inline void Store(const uint8_t *data, const uint32_t ix) { - const uint32_t key = HashBytes(data); - // Wiggle the value with the bucket sweep range. - const uint32_t off = (ix >> 3) % kBucketSweep; - buckets_[key + off] = ix; - } - - // Find a longest backward match of &ring_buffer[cur_ix & ring_buffer_mask] - // up to the length of max_length and stores the position cur_ix in the - // hash table. - // - // Does not look for matches longer than max_length. - // Does not look for matches further away than max_backward. - // Writes the best found match length into best_len_out. - // Writes the index (&data[index]) of the start of the best match into - // best_distance_out. - inline bool FindLongestMatch(const uint8_t * __restrict ring_buffer, - const size_t ring_buffer_mask, - const int* __restrict distance_cache, - const size_t cur_ix, - const size_t max_length, - const size_t max_backward, - size_t * __restrict best_len_out, - size_t * __restrict best_len_code_out, - size_t * __restrict best_distance_out, - double* __restrict best_score_out) { - const size_t best_len_in = *best_len_out; - const size_t cur_ix_masked = cur_ix & ring_buffer_mask; - const uint32_t key = HashBytes(&ring_buffer[cur_ix_masked]); - int compare_char = ring_buffer[cur_ix_masked + best_len_in]; - double best_score = *best_score_out; - size_t best_len = best_len_in; - size_t cached_backward = static_cast<size_t>(distance_cache[0]); - size_t prev_ix = cur_ix - cached_backward; - bool match_found = false; - if (prev_ix < cur_ix) { - prev_ix &= static_cast<uint32_t>(ring_buffer_mask); - if (compare_char == ring_buffer[prev_ix + best_len]) { - size_t len = FindMatchLengthWithLimit(&ring_buffer[prev_ix], - &ring_buffer[cur_ix_masked], - max_length); - if (len >= 4) { - best_score = BackwardReferenceScoreUsingLastDistance(len, 0); - best_len = len; - *best_len_out = len; - *best_len_code_out = len; - *best_distance_out = cached_backward; - *best_score_out = best_score; - compare_char = ring_buffer[cur_ix_masked + best_len]; - if (kBucketSweep == 1) { - buckets_[key] = static_cast<uint32_t>(cur_ix); - return true; - } else { - match_found = true; - } - } - } - } - if (kBucketSweep == 1) { - // Only one to look for, don't bother to prepare for a loop. - prev_ix = buckets_[key]; - buckets_[key] = static_cast<uint32_t>(cur_ix); - size_t backward = cur_ix - prev_ix; - prev_ix &= static_cast<uint32_t>(ring_buffer_mask); - if (compare_char != ring_buffer[prev_ix + best_len_in]) { - return false; - } - if (PREDICT_FALSE(backward == 0 || backward > max_backward)) { - return false; - } - const size_t len = FindMatchLengthWithLimit(&ring_buffer[prev_ix], - &ring_buffer[cur_ix_masked], - max_length); - if (len >= 4) { - *best_len_out = len; - *best_len_code_out = len; - *best_distance_out = backward; - *best_score_out = BackwardReferenceScore(len, backward); - return true; - } - } else { - uint32_t *bucket = buckets_ + key; - prev_ix = *bucket++; - for (int i = 0; i < kBucketSweep; ++i, prev_ix = *bucket++) { - const size_t backward = cur_ix - prev_ix; - prev_ix &= static_cast<uint32_t>(ring_buffer_mask); - if (compare_char != ring_buffer[prev_ix + best_len]) { - continue; - } - if (PREDICT_FALSE(backward == 0 || backward > max_backward)) { - continue; - } - const size_t len = FindMatchLengthWithLimit(&ring_buffer[prev_ix], - &ring_buffer[cur_ix_masked], - max_length); - if (len >= 4) { - const double score = BackwardReferenceScore(len, backward); - if (best_score < score) { - best_score = score; - best_len = len; - *best_len_out = best_len; - *best_len_code_out = best_len; - *best_distance_out = backward; - *best_score_out = score; - compare_char = ring_buffer[cur_ix_masked + best_len]; - match_found = true; - } - } - } - } - if (kUseDictionary && !match_found && - num_dict_matches_ >= (num_dict_lookups_ >> 7)) { - ++num_dict_lookups_; - const uint32_t dict_key = Hash<14>(&ring_buffer[cur_ix_masked]) << 1; - const uint16_t v = kStaticDictionaryHash[dict_key]; - if (v > 0) { - const uint32_t len = v & 31; - const uint32_t dist = v >> 5; - const size_t offset = - kBrotliDictionaryOffsetsByLength[len] + len * dist; - if (len <= max_length) { - const size_t matchlen = - FindMatchLengthWithLimit(&ring_buffer[cur_ix_masked], - &kBrotliDictionary[offset], len); - if (matchlen + kCutoffTransformsCount > len && matchlen > 0) { - const size_t transform_id = kCutoffTransforms[len - matchlen]; - const size_t word_id = - transform_id * (1u << kBrotliDictionarySizeBitsByLength[len]) + - dist; - const size_t backward = max_backward + word_id + 1; - const double score = BackwardReferenceScore(matchlen, backward); - if (best_score < score) { - ++num_dict_matches_; - best_score = score; - best_len = matchlen; - *best_len_out = best_len; - *best_len_code_out = len; - *best_distance_out = backward; - *best_score_out = best_score; - match_found = true; - } - } - } - } - } - const uint32_t off = (cur_ix >> 3) % kBucketSweep; - buckets_[key + off] = static_cast<uint32_t>(cur_ix); - return match_found; - } - - enum { kHashLength = 5 }; - enum { kHashTypeLength = 8 }; - // HashBytes is the function that chooses the bucket to place - // the address in. The HashLongestMatch and HashLongestMatchQuickly - // classes have separate, different implementations of hashing. - static uint32_t HashBytes(const uint8_t *data) { - // Computing a hash based on 5 bytes works much better for - // qualities 1 and 3, where the next hash value is likely to replace - uint64_t h = (BROTLI_UNALIGNED_LOAD64(data) << 24) * kHashMul32; - // The higher bits contain more mixture from the multiplication, - // so we take our results from there. - return static_cast<uint32_t>(h >> (64 - kBucketBits)); - } - - enum { kHashMapSize = 4 << kBucketBits }; - - private: - static const uint32_t kBucketSize = 1 << kBucketBits; - uint32_t buckets_[kBucketSize + kBucketSweep]; - // True if buckets_ array needs to be initialized. - bool need_init_; - size_t num_dict_lookups_; - size_t num_dict_matches_; -}; - -// A (forgetful) hash table to the data seen by the compressor, to -// help create backward references to previous data. -// -// This is a hash map of fixed size (kBucketSize) to a ring buffer of -// fixed size (kBlockSize). The ring buffer contains the last kBlockSize -// index positions of the given hash key in the compressed data. -template <int kBucketBits, - int kBlockBits, - int kNumLastDistancesToCheck> -class HashLongestMatch { - public: - HashLongestMatch(void) { - Reset(); - } - - void Reset(void) { - need_init_ = true; - num_dict_lookups_ = 0; - num_dict_matches_ = 0; - } - - void Init(void) { - if (need_init_) { - memset(&num_[0], 0, sizeof(num_)); - need_init_ = false; - } - } - - void InitForData(const uint8_t* data, size_t num) { - for (size_t i = 0; i < num; ++i) { - const uint32_t key = HashBytes(&data[i]); - num_[key] = 0; - need_init_ = false; - } - } - - // Look at 3 bytes at data. - // Compute a hash from these, and store the value of ix at that position. - inline void Store(const uint8_t *data, const uint32_t ix) { - const uint32_t key = HashBytes(data); - const int minor_ix = num_[key] & kBlockMask; - buckets_[key][minor_ix] = ix; - ++num_[key]; - } - - // Find a longest backward match of &data[cur_ix] up to the length of - // max_length and stores the position cur_ix in the hash table. - // - // Does not look for matches longer than max_length. - // Does not look for matches further away than max_backward. - // Writes the best found match length into best_len_out. - // Writes the index (&data[index]) offset from the start of the best match - // into best_distance_out. - // Write the score of the best match into best_score_out. - bool FindLongestMatch(const uint8_t * __restrict data, - const size_t ring_buffer_mask, - const int* __restrict distance_cache, - const size_t cur_ix, - const size_t max_length, - const size_t max_backward, - size_t * __restrict best_len_out, - size_t * __restrict best_len_code_out, - size_t * __restrict best_distance_out, - double * __restrict best_score_out) { - *best_len_code_out = 0; - const size_t cur_ix_masked = cur_ix & ring_buffer_mask; - bool match_found = false; - // Don't accept a short copy from far away. - double best_score = *best_score_out; - size_t best_len = *best_len_out; - *best_len_out = 0; - // Try last distance first. - for (size_t i = 0; i < kNumLastDistancesToCheck; ++i) { - const size_t idx = kDistanceCacheIndex[i]; - const size_t backward = - static_cast<size_t>(distance_cache[idx] + kDistanceCacheOffset[i]); - size_t prev_ix = static_cast<size_t>(cur_ix - backward); - if (prev_ix >= cur_ix) { - continue; - } - if (PREDICT_FALSE(backward > max_backward)) { - continue; - } - prev_ix &= ring_buffer_mask; - - if (cur_ix_masked + best_len > ring_buffer_mask || - prev_ix + best_len > ring_buffer_mask || - data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { - continue; - } - const size_t len = FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); - if (len >= 3 || (len == 2 && i < 2)) { - // Comparing for >= 2 does not change the semantics, but just saves for - // a few unnecessary binary logarithms in backward reference score, - // since we are not interested in such short matches. - double score = BackwardReferenceScoreUsingLastDistance(len, i); - if (best_score < score) { - best_score = score; - best_len = len; - *best_len_out = best_len; - *best_len_code_out = best_len; - *best_distance_out = backward; - *best_score_out = best_score; - match_found = true; - } - } - } - const uint32_t key = HashBytes(&data[cur_ix_masked]); - const uint32_t * __restrict const bucket = &buckets_[key][0]; - const size_t down = (num_[key] > kBlockSize) ? (num_[key] - kBlockSize) : 0; - for (size_t i = num_[key]; i > down;) { - --i; - size_t prev_ix = bucket[i & kBlockMask]; - const size_t backward = cur_ix - prev_ix; - if (PREDICT_FALSE(backward == 0 || backward > max_backward)) { - break; - } - prev_ix &= ring_buffer_mask; - if (cur_ix_masked + best_len > ring_buffer_mask || - prev_ix + best_len > ring_buffer_mask || - data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { - continue; - } - const size_t len = FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); - if (len >= 4) { - // Comparing for >= 3 does not change the semantics, but just saves - // for a few unnecessary binary logarithms in backward reference - // score, since we are not interested in such short matches. - double score = BackwardReferenceScore(len, backward); - if (best_score < score) { - best_score = score; - best_len = len; - *best_len_out = best_len; - *best_len_code_out = best_len; - *best_distance_out = backward; - *best_score_out = best_score; - match_found = true; - } - } - } - buckets_[key][num_[key] & kBlockMask] = static_cast<uint32_t>(cur_ix); - ++num_[key]; - if (!match_found && num_dict_matches_ >= (num_dict_lookups_ >> 7)) { - size_t dict_key = Hash<14>(&data[cur_ix_masked]) << 1; - for (int k = 0; k < 2; ++k, ++dict_key) { - ++num_dict_lookups_; - const uint16_t v = kStaticDictionaryHash[dict_key]; - if (v > 0) { - const size_t len = v & 31; - const size_t dist = v >> 5; - const size_t offset = - kBrotliDictionaryOffsetsByLength[len] + len * dist; - if (len <= max_length) { - const size_t matchlen = - FindMatchLengthWithLimit(&data[cur_ix_masked], - &kBrotliDictionary[offset], len); - if (matchlen + kCutoffTransformsCount > len && matchlen > 0) { - const size_t transform_id = kCutoffTransforms[len - matchlen]; - const size_t word_id = - transform_id * (1 << kBrotliDictionarySizeBitsByLength[len]) + - dist; - const size_t backward = max_backward + word_id + 1; - double score = BackwardReferenceScore(matchlen, backward); - if (best_score < score) { - ++num_dict_matches_; - best_score = score; - best_len = matchlen; - *best_len_out = best_len; - *best_len_code_out = len; - *best_distance_out = backward; - *best_score_out = best_score; - match_found = true; - } - } - } - } - } - } - return match_found; - } - - // Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to the - // length of max_length and stores the position cur_ix in the hash table. - // - // Sets *num_matches to the number of matches found, and stores the found - // matches in matches[0] to matches[*num_matches - 1]. The matches will be - // sorted by strictly increasing length and (non-strictly) increasing - // distance. - size_t FindAllMatches(const uint8_t* data, - const size_t ring_buffer_mask, - const size_t cur_ix, - const size_t max_length, - const size_t max_backward, - BackwardMatch* matches) { - BackwardMatch* const orig_matches = matches; - const size_t cur_ix_masked = cur_ix & ring_buffer_mask; - size_t best_len = 1; - size_t stop = cur_ix - 64; - if (cur_ix < 64) { stop = 0; } - for (size_t i = cur_ix - 1; i > stop && best_len <= 2; --i) { - size_t prev_ix = i; - const size_t backward = cur_ix - prev_ix; - if (PREDICT_FALSE(backward > max_backward)) { - break; - } - prev_ix &= ring_buffer_mask; - if (data[cur_ix_masked] != data[prev_ix] || - data[cur_ix_masked + 1] != data[prev_ix + 1]) { - continue; - } - const size_t len = - FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked], - max_length); - if (len > best_len) { - best_len = len; - *matches++ = BackwardMatch(backward, len); - } - } - const uint32_t key = HashBytes(&data[cur_ix_masked]); - const uint32_t * __restrict const bucket = &buckets_[key][0]; - const size_t down = (num_[key] > kBlockSize) ? (num_[key] - kBlockSize) : 0; - for (size_t i = num_[key]; i > down;) { - --i; - size_t prev_ix = bucket[i & kBlockMask]; - const size_t backward = cur_ix - prev_ix; - if (PREDICT_FALSE(backward == 0 || backward > max_backward)) { - break; - } - prev_ix &= ring_buffer_mask; - if (cur_ix_masked + best_len > ring_buffer_mask || - prev_ix + best_len > ring_buffer_mask || - data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { - continue; - } - const size_t len = - FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked], - max_length); - if (len > best_len) { - best_len = len; - *matches++ = BackwardMatch(backward, len); - } - } - buckets_[key][num_[key] & kBlockMask] = static_cast<uint32_t>(cur_ix); - ++num_[key]; - uint32_t dict_matches[kMaxDictionaryMatchLen + 1]; - for (size_t i = 0; i <= kMaxDictionaryMatchLen; ++i) { - dict_matches[i] = kInvalidMatch; - } - size_t minlen = std::max<size_t>(4, best_len + 1); - if (FindAllStaticDictionaryMatches(&data[cur_ix_masked], minlen, max_length, - &dict_matches[0])) { - size_t maxlen = std::min<size_t>(kMaxDictionaryMatchLen, max_length); - for (size_t l = minlen; l <= maxlen; ++l) { - uint32_t dict_id = dict_matches[l]; - if (dict_id < kInvalidMatch) { - *matches++ = BackwardMatch(max_backward + (dict_id >> 5) + 1, l, - dict_id & 31); - } - } - } - return static_cast<size_t>(matches - orig_matches); - } - - enum { kHashLength = 4 }; - enum { kHashTypeLength = 4 }; - - // HashBytes is the function that chooses the bucket to place - // the address in. The HashLongestMatch and HashLongestMatchQuickly - // classes have separate, different implementations of hashing. - static uint32_t HashBytes(const uint8_t *data) { - uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kHashMul32; - // The higher bits contain more mixture from the multiplication, - // so we take our results from there. - return h >> (32 - kBucketBits); - } - - enum { kHashMapSize = 2 << kBucketBits }; - - static const size_t kMaxNumMatches = 64 + (1 << kBlockBits); - - private: - // Number of hash buckets. - static const uint32_t kBucketSize = 1 << kBucketBits; - - // Only kBlockSize newest backward references are kept, - // and the older are forgotten. - static const uint32_t kBlockSize = 1 << kBlockBits; - - // Mask for accessing entries in a block (in a ringbuffer manner). - static const uint32_t kBlockMask = (1 << kBlockBits) - 1; - - // Number of entries in a particular bucket. - uint16_t num_[kBucketSize]; - - // Buckets containing kBlockSize of backward references. - uint32_t buckets_[kBucketSize][kBlockSize]; - - // True if num_ array needs to be initialized. - bool need_init_; - - size_t num_dict_lookups_; - size_t num_dict_matches_; -}; - -// A (forgetful) hash table where each hash bucket contains a binary tree of -// sequences whose first 4 bytes share the same hash code. -// Each sequence is kMaxTreeCompLength long and is identified by its starting -// position in the input data. The binary tree is sorted by the lexicographic -// order of the sequences, and it is also a max-heap with respect to the -// starting positions. -class HashToBinaryTree { - public: - HashToBinaryTree() : forest_(NULL) { - Reset(); - } - - ~HashToBinaryTree() { - delete[] forest_; - } - - void Reset() { - need_init_ = true; - } - - void Init(int lgwin, size_t position, size_t bytes, bool is_last) { - if (need_init_) { - window_mask_ = (1u << lgwin) - 1u; - invalid_pos_ = static_cast<uint32_t>(-window_mask_); - for (uint32_t i = 0; i < kBucketSize; i++) { - buckets_[i] = invalid_pos_; - } - size_t num_nodes = (position == 0 && is_last) ? bytes : window_mask_ + 1; - forest_ = new uint32_t[2 * num_nodes]; - need_init_ = false; - } - } - - // Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to the - // length of max_length and stores the position cur_ix in the hash table. - // - // Sets *num_matches to the number of matches found, and stores the found - // matches in matches[0] to matches[*num_matches - 1]. The matches will be - // sorted by strictly increasing length and (non-strictly) increasing - // distance. - size_t FindAllMatches(const uint8_t* data, - const size_t ring_buffer_mask, - const size_t cur_ix, - const size_t max_length, - const size_t max_backward, - BackwardMatch* matches) { - BackwardMatch* const orig_matches = matches; - const size_t cur_ix_masked = cur_ix & ring_buffer_mask; - size_t best_len = 1; - size_t stop = cur_ix - 64; - if (cur_ix < 64) { stop = 0; } - for (size_t i = cur_ix - 1; i > stop && best_len <= 2; --i) { - size_t prev_ix = i; - const size_t backward = cur_ix - prev_ix; - if (PREDICT_FALSE(backward > max_backward)) { - break; - } - prev_ix &= ring_buffer_mask; - if (data[cur_ix_masked] != data[prev_ix] || - data[cur_ix_masked + 1] != data[prev_ix + 1]) { - continue; - } - const size_t len = - FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked], - max_length); - if (len > best_len) { - best_len = len; - *matches++ = BackwardMatch(backward, len); - } - } - if (best_len < max_length) { - matches = StoreAndFindMatches(data, cur_ix, ring_buffer_mask, - max_length, &best_len, matches); - } - uint32_t dict_matches[kMaxDictionaryMatchLen + 1]; - for (size_t i = 0; i <= kMaxDictionaryMatchLen; ++i) { - dict_matches[i] = kInvalidMatch; - } - size_t minlen = std::max<size_t>(4, best_len + 1); - if (FindAllStaticDictionaryMatches(&data[cur_ix_masked], minlen, max_length, - &dict_matches[0])) { - size_t maxlen = std::min<size_t>(kMaxDictionaryMatchLen, max_length); - for (size_t l = minlen; l <= maxlen; ++l) { - uint32_t dict_id = dict_matches[l]; - if (dict_id < kInvalidMatch) { - *matches++ = BackwardMatch(max_backward + (dict_id >> 5) + 1, l, - dict_id & 31); - } - } - } - return static_cast<size_t>(matches - orig_matches); - } - - // Stores the hash of the next 4 bytes and re-roots the binary tree at the - // current sequence, without returning any matches. - // REQUIRES: cur_ix + kMaxTreeCompLength <= end-of-current-block - void Store(const uint8_t* data, - const size_t ring_buffer_mask, - const size_t cur_ix) { - size_t best_len = 0; - StoreAndFindMatches(data, cur_ix, ring_buffer_mask, kMaxTreeCompLength, - &best_len, NULL); - } - - void StitchToPreviousBlock(size_t num_bytes, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask) { - if (num_bytes >= 3 && position >= kMaxTreeCompLength) { - // Store the last `kMaxTreeCompLength - 1` positions in the hasher. - // These could not be calculated before, since they require knowledge - // of both the previous and the current block. - const size_t i_start = position - kMaxTreeCompLength + 1; - const size_t i_end = std::min(position, i_start + num_bytes); - for (size_t i = i_start; i < i_end; ++i) { - // We know that i + kMaxTreeCompLength <= position + num_bytes, i.e. the - // end of the current block and that we have at least - // kMaxTreeCompLength tail in the ringbuffer. - Store(ringbuffer, ringbuffer_mask, i); - } - } - } - - static const size_t kMaxNumMatches = 64 + kMaxTreeSearchDepth; - - private: - // Stores the hash of the next 4 bytes and in a single tree-traversal, the - // hash bucket's binary tree is searched for matches and is re-rooted at the - // current position. - // - // If less than kMaxTreeCompLength data is available, the hash bucket of the - // current position is searched for matches, but the state of the hash table - // is not changed, since we can not know the final sorting order of the - // current (incomplete) sequence. - // - // This function must be called with increasing cur_ix positions. - BackwardMatch* StoreAndFindMatches(const uint8_t* const __restrict data, - const size_t cur_ix, - const size_t ring_buffer_mask, - const size_t max_length, - size_t* const __restrict best_len, - BackwardMatch* __restrict matches) { - const size_t cur_ix_masked = cur_ix & ring_buffer_mask; - const size_t max_backward = window_mask_ - 15; - const size_t max_comp_len = std::min(max_length, kMaxTreeCompLength); - const bool reroot_tree = max_length >= kMaxTreeCompLength; - const uint32_t key = HashBytes(&data[cur_ix_masked]); - size_t prev_ix = buckets_[key]; - // The forest index of the rightmost node of the left subtree of the new - // root, updated as we traverse and reroot the tree of the hash bucket. - size_t node_left = LeftChildIndex(cur_ix); - // The forest index of the leftmost node of the right subtree of the new - // root, updated as we traverse and reroot the tree of the hash bucket. - size_t node_right = RightChildIndex(cur_ix); - // The match length of the rightmost node of the left subtree of the new - // root, updated as we traverse and reroot the tree of the hash bucket. - size_t best_len_left = 0; - // The match length of the leftmost node of the right subtree of the new - // root, updated as we traverse and reroot the tree of the hash bucket. - size_t best_len_right = 0; - if (reroot_tree) { - buckets_[key] = static_cast<uint32_t>(cur_ix); - } - for (size_t depth_remaining = kMaxTreeSearchDepth; ; --depth_remaining) { - const size_t backward = cur_ix - prev_ix; - const size_t prev_ix_masked = prev_ix & ring_buffer_mask; - if (backward == 0 || backward > max_backward || depth_remaining == 0) { - if (reroot_tree) { - forest_[node_left] = invalid_pos_; - forest_[node_right] = invalid_pos_; - } - break; - } - const size_t cur_len = std::min(best_len_left, best_len_right); - const size_t len = cur_len + - FindMatchLengthWithLimit(&data[cur_ix_masked + cur_len], - &data[prev_ix_masked + cur_len], - max_length - cur_len); - if (len > *best_len) { - *best_len = len; - if (matches) { - *matches++ = BackwardMatch(backward, len); - } - if (len >= max_comp_len) { - if (reroot_tree) { - forest_[node_left] = forest_[LeftChildIndex(prev_ix)]; - forest_[node_right] = forest_[RightChildIndex(prev_ix)]; - } - break; - } - } - if (data[cur_ix_masked + len] > data[prev_ix_masked + len]) { - best_len_left = len; - if (reroot_tree) { - forest_[node_left] = static_cast<uint32_t>(prev_ix); - } - node_left = RightChildIndex(prev_ix); - prev_ix = forest_[node_left]; - } else { - best_len_right = len; - if (reroot_tree) { - forest_[node_right] = static_cast<uint32_t>(prev_ix); - } - node_right = LeftChildIndex(prev_ix); - prev_ix = forest_[node_right]; - } - } - return matches; - } - - inline size_t LeftChildIndex(const size_t pos) { - return 2 * (pos & window_mask_); - } - - inline size_t RightChildIndex(const size_t pos) { - return 2 * (pos & window_mask_) + 1; - } - - static uint32_t HashBytes(const uint8_t *data) { - uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kHashMul32; - // The higher bits contain more mixture from the multiplication, - // so we take our results from there. - return h >> (32 - kBucketBits); - } - - static const int kBucketBits = 17; - static const size_t kBucketSize = 1 << kBucketBits; - - // The window size minus 1 - size_t window_mask_; - - // Hash table that maps the 4-byte hashes of the sequence to the last - // position where this hash was found, which is the root of the binary - // tree of sequences that share this hash bucket. - uint32_t buckets_[kBucketSize]; - - // The union of the binary trees of each hash bucket. The root of the tree - // corresponding to a hash is a sequence starting at buckets_[hash] and - // the left and right children of a sequence starting at pos are - // forest_[2 * pos] and forest_[2 * pos + 1]. - uint32_t* forest_; - - // A position used to mark a non-existent sequence, i.e. a tree is empty if - // its root is at invalid_pos_ and a node is a leaf if both its children - // are at invalid_pos_. - uint32_t invalid_pos_; - - bool need_init_; -}; - -struct Hashers { - // For kBucketSweep == 1, enabling the dictionary lookup makes compression - // a little faster (0.5% - 1%) and it compresses 0.15% better on small text - // and html inputs. - typedef HashLongestMatchQuickly<16, 1, true> H2; - typedef HashLongestMatchQuickly<16, 2, false> H3; - typedef HashLongestMatchQuickly<17, 4, true> H4; - typedef HashLongestMatch<14, 4, 4> H5; - typedef HashLongestMatch<14, 5, 4> H6; - typedef HashLongestMatch<15, 6, 10> H7; - typedef HashLongestMatch<15, 7, 10> H8; - typedef HashLongestMatch<15, 8, 16> H9; - typedef HashToBinaryTree H10; - - Hashers(void) : hash_h2(0), hash_h3(0), hash_h4(0), hash_h5(0), - hash_h6(0), hash_h7(0), hash_h8(0), hash_h9(0), hash_h10(0) {} - - ~Hashers(void) { - delete hash_h2; - delete hash_h3; - delete hash_h4; - delete hash_h5; - delete hash_h6; - delete hash_h7; - delete hash_h8; - delete hash_h9; - delete hash_h10; - } - - void Init(int type) { - switch (type) { - case 2: hash_h2 = new H2; break; - case 3: hash_h3 = new H3; break; - case 4: hash_h4 = new H4; break; - case 5: hash_h5 = new H5; break; - case 6: hash_h6 = new H6; break; - case 7: hash_h7 = new H7; break; - case 8: hash_h8 = new H8; break; - case 9: hash_h9 = new H9; break; - case 10: hash_h10 = new H10; break; - default: break; - } - } - - template<typename Hasher> - void WarmupHash(const size_t size, const uint8_t* dict, Hasher* hasher) { - hasher->Init(); - for (size_t i = 0; i + Hasher::kHashTypeLength - 1 < size; i++) { - hasher->Store(&dict[i], static_cast<uint32_t>(i)); - } - } - - // Custom LZ77 window. - void PrependCustomDictionary( - int type, int lgwin, const size_t size, const uint8_t* dict) { - switch (type) { - case 2: WarmupHash(size, dict, hash_h2); break; - case 3: WarmupHash(size, dict, hash_h3); break; - case 4: WarmupHash(size, dict, hash_h4); break; - case 5: WarmupHash(size, dict, hash_h5); break; - case 6: WarmupHash(size, dict, hash_h6); break; - case 7: WarmupHash(size, dict, hash_h7); break; - case 8: WarmupHash(size, dict, hash_h8); break; - case 9: WarmupHash(size, dict, hash_h9); break; - case 10: - hash_h10->Init(lgwin, 0, size, false); - for (size_t i = 0; i + kMaxTreeCompLength - 1 < size; ++i) { - hash_h10->Store(dict, std::numeric_limits<size_t>::max(), i); - } - break; - default: break; - } - } - - - H2* hash_h2; - H3* hash_h3; - H4* hash_h4; - H5* hash_h5; - H6* hash_h6; - H7* hash_h7; - H8* hash_h8; - H9* hash_h9; - H10* hash_h10; -}; - -} // namespace brotli - -#endif // BROTLI_ENC_HASH_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/histogram.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/histogram.cc deleted file mode 100644 index 9d733d80554..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/histogram.cc +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Build per-context histograms of literals, commands and distance codes. - -#include "./histogram.h" - -#include <cmath> - -#include "./block_splitter.h" -#include "./command.h" -#include "./context.h" -#include "./prefix.h" - -namespace brotli { - -void BuildHistograms( - const Command* cmds, - const size_t num_commands, - const BlockSplit& literal_split, - const BlockSplit& insert_and_copy_split, - const BlockSplit& dist_split, - const uint8_t* ringbuffer, - size_t start_pos, - size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - const std::vector<ContextType>& context_modes, - std::vector<HistogramLiteral>* literal_histograms, - std::vector<HistogramCommand>* insert_and_copy_histograms, - std::vector<HistogramDistance>* copy_dist_histograms) { - size_t pos = start_pos; - BlockSplitIterator literal_it(literal_split); - BlockSplitIterator insert_and_copy_it(insert_and_copy_split); - BlockSplitIterator dist_it(dist_split); - for (size_t i = 0; i < num_commands; ++i) { - const Command &cmd = cmds[i]; - insert_and_copy_it.Next(); - (*insert_and_copy_histograms)[insert_and_copy_it.type_].Add( - cmd.cmd_prefix_); - for (size_t j = cmd.insert_len_; j != 0; --j) { - literal_it.Next(); - size_t context = (literal_it.type_ << kLiteralContextBits) + - Context(prev_byte, prev_byte2, context_modes[literal_it.type_]); - (*literal_histograms)[context].Add(ringbuffer[pos & mask]); - prev_byte2 = prev_byte; - prev_byte = ringbuffer[pos & mask]; - ++pos; - } - pos += cmd.copy_len(); - if (cmd.copy_len()) { - prev_byte2 = ringbuffer[(pos - 2) & mask]; - prev_byte = ringbuffer[(pos - 1) & mask]; - if (cmd.cmd_prefix_ >= 128) { - dist_it.Next(); - size_t context = (dist_it.type_ << kDistanceContextBits) + - cmd.DistanceContext(); - (*copy_dist_histograms)[context].Add(cmd.dist_prefix_); - } - } - } -} - -} // namespace brotli diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/histogram.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/histogram.h deleted file mode 100644 index a1153c859a4..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/histogram.h +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Models the histograms of literals, commands and distance codes. - -#ifndef BROTLI_ENC_HISTOGRAM_H_ -#define BROTLI_ENC_HISTOGRAM_H_ - -#include <cstring> -#include <limits> -#include <vector> -#include "./context.h" -#include "./command.h" -#include "./fast_log.h" -#include "./prefix.h" -#include "./types.h" - -namespace brotli { - -struct BlockSplit; - -// A simple container for histograms of data in blocks. -template<int kDataSize> -struct Histogram { - Histogram(void) { - Clear(); - } - void Clear(void) { - memset(data_, 0, sizeof(data_)); - total_count_ = 0; - bit_cost_ = std::numeric_limits<double>::infinity(); - } - void Add(size_t val) { - ++data_[val]; - ++total_count_; - } - void Remove(size_t val) { - --data_[val]; - --total_count_; - } - template<typename DataType> - void Add(const DataType *p, size_t n) { - total_count_ += n; - n += 1; - while(--n) ++data_[*p++]; - } - void AddHistogram(const Histogram& v) { - total_count_ += v.total_count_; - for (size_t i = 0; i < kDataSize; ++i) { - data_[i] += v.data_[i]; - } - } - - uint32_t data_[kDataSize]; - size_t total_count_; - double bit_cost_; -}; - -// Literal histogram. -typedef Histogram<256> HistogramLiteral; -// Prefix histograms. -typedef Histogram<kNumCommandPrefixes> HistogramCommand; -typedef Histogram<kNumDistancePrefixes> HistogramDistance; -typedef Histogram<kNumBlockLenPrefixes> HistogramBlockLength; -// Context map histogram, 256 Huffman tree indexes + 16 run length codes. -typedef Histogram<272> HistogramContextMap; -// Block type histogram, 256 block types + 2 special symbols. -typedef Histogram<258> HistogramBlockType; - -static const size_t kLiteralContextBits = 6; -static const size_t kDistanceContextBits = 2; - -void BuildHistograms( - const Command* cmds, - const size_t num_commands, - const BlockSplit& literal_split, - const BlockSplit& insert_and_copy_split, - const BlockSplit& dist_split, - const uint8_t* ringbuffer, - size_t pos, - size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - const std::vector<ContextType>& context_modes, - std::vector<HistogramLiteral>* literal_histograms, - std::vector<HistogramCommand>* insert_and_copy_histograms, - std::vector<HistogramDistance>* copy_dist_histograms); - -} // namespace brotli - -#endif // BROTLI_ENC_HISTOGRAM_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/literal_cost.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/literal_cost.cc deleted file mode 100644 index e6be86fc64e..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/literal_cost.cc +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Literal cost model to allow backward reference replacement to be efficient. - -#include "./literal_cost.h" - -#include <math.h> -#include <algorithm> - -#include "./fast_log.h" -#include "./types.h" -#include "./utf8_util.h" - -namespace brotli { - -static size_t UTF8Position(size_t last, size_t c, size_t clamp) { - if (c < 128) { - return 0; // Next one is the 'Byte 1' again. - } else if (c >= 192) { // Next one is the 'Byte 2' of utf-8 encoding. - return std::min<size_t>(1, clamp); - } else { - // Let's decide over the last byte if this ends the sequence. - if (last < 0xe0) { - return 0; // Completed two or three byte coding. - } else { // Next one is the 'Byte 3' of utf-8 encoding. - return std::min<size_t>(2, clamp); - } - } -} - -static size_t DecideMultiByteStatsLevel(size_t pos, size_t len, size_t mask, - const uint8_t *data) { - size_t counts[3] = { 0 }; - size_t max_utf8 = 1; // should be 2, but 1 compresses better. - size_t last_c = 0; - size_t utf8_pos = 0; - for (size_t i = 0; i < len; ++i) { - size_t c = data[(pos + i) & mask]; - utf8_pos = UTF8Position(last_c, c, 2); - ++counts[utf8_pos]; - last_c = c; - } - if (counts[2] < 500) { - max_utf8 = 1; - } - if (counts[1] + counts[2] < 25) { - max_utf8 = 0; - } - return max_utf8; -} - -static void EstimateBitCostsForLiteralsUTF8(size_t pos, size_t len, size_t mask, - const uint8_t *data, float *cost) { - - // max_utf8 is 0 (normal ascii single byte modeling), - // 1 (for 2-byte utf-8 modeling), or 2 (for 3-byte utf-8 modeling). - const size_t max_utf8 = DecideMultiByteStatsLevel(pos, len, mask, data); - size_t histogram[3][256] = { { 0 } }; - size_t window_half = 495; - size_t in_window = std::min(window_half, len); - size_t in_window_utf8[3] = { 0 }; - - // Bootstrap histograms. - size_t last_c = 0; - size_t utf8_pos = 0; - for (size_t i = 0; i < in_window; ++i) { - size_t c = data[(pos + i) & mask]; - ++histogram[utf8_pos][c]; - ++in_window_utf8[utf8_pos]; - utf8_pos = UTF8Position(last_c, c, max_utf8); - last_c = c; - } - - // Compute bit costs with sliding window. - for (size_t i = 0; i < len; ++i) { - if (i >= window_half) { - // Remove a byte in the past. - size_t c = i < window_half + 1 ? - 0 : data[(pos + i - window_half - 1) & mask]; - size_t last_c = i < window_half + 2 ? - 0 : data[(pos + i - window_half - 2) & mask]; - size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8); - --histogram[utf8_pos2][data[(pos + i - window_half) & mask]]; - --in_window_utf8[utf8_pos2]; - } - if (i + window_half < len) { - // Add a byte in the future. - size_t c = data[(pos + i + window_half - 1) & mask]; - size_t last_c = data[(pos + i + window_half - 2) & mask]; - size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8); - ++histogram[utf8_pos2][data[(pos + i + window_half) & mask]]; - ++in_window_utf8[utf8_pos2]; - } - size_t c = i < 1 ? 0 : data[(pos + i - 1) & mask]; - size_t last_c = i < 2 ? 0 : data[(pos + i - 2) & mask]; - size_t utf8_pos = UTF8Position(last_c, c, max_utf8); - size_t masked_pos = (pos + i) & mask; - size_t histo = histogram[utf8_pos][data[masked_pos]]; - if (histo == 0) { - histo = 1; - } - double lit_cost = FastLog2(in_window_utf8[utf8_pos]) - FastLog2(histo); - lit_cost += 0.02905; - if (lit_cost < 1.0) { - lit_cost *= 0.5; - lit_cost += 0.5; - } - // Make the first bytes more expensive -- seems to help, not sure why. - // Perhaps because the entropy source is changing its properties - // rapidly in the beginning of the file, perhaps because the beginning - // of the data is a statistical "anomaly". - if (i < 2000) { - lit_cost += 0.7 - (static_cast<double>(2000 - i) / 2000.0 * 0.35); - } - cost[i] = static_cast<float>(lit_cost); - } -} - -void EstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask, - const uint8_t *data, float *cost) { - if (IsMostlyUTF8(data, pos, mask, len, kMinUTF8Ratio)) { - EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, cost); - return; - } - size_t histogram[256] = { 0 }; - size_t window_half = 2000; - size_t in_window = std::min(window_half, len); - - // Bootstrap histogram. - for (size_t i = 0; i < in_window; ++i) { - ++histogram[data[(pos + i) & mask]]; - } - - // Compute bit costs with sliding window. - for (size_t i = 0; i < len; ++i) { - if (i >= window_half) { - // Remove a byte in the past. - --histogram[data[(pos + i - window_half) & mask]]; - --in_window; - } - if (i + window_half < len) { - // Add a byte in the future. - ++histogram[data[(pos + i + window_half) & mask]]; - ++in_window; - } - size_t histo = histogram[data[(pos + i) & mask]]; - if (histo == 0) { - histo = 1; - } - double lit_cost = FastLog2(in_window) - FastLog2(histo); - lit_cost += 0.029; - if (lit_cost < 1.0) { - lit_cost *= 0.5; - lit_cost += 0.5; - } - cost[i] = static_cast<float>(lit_cost); - } -} - - -} // namespace brotli diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/literal_cost.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/literal_cost.h deleted file mode 100644 index 291aa8a1d70..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/literal_cost.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Literal cost model to allow backward reference replacement to be efficient. - -#ifndef BROTLI_ENC_LITERAL_COST_H_ -#define BROTLI_ENC_LITERAL_COST_H_ - -#include "./types.h" - -namespace brotli { - -// Estimates how many bits the literals in the interval [pos, pos + len) in the -// ringbuffer (data, mask) will take entropy coded and writes these estimates -// to the cost[0..len) array. -void EstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask, - const uint8_t *data, float *cost); - -} // namespace brotli - -#endif // BROTLI_ENC_LITERAL_COST_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/metablock.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/metablock.cc deleted file mode 100644 index fc962c5c8e3..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/metablock.cc +++ /dev/null @@ -1,539 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Algorithms for distributing the literals and commands of a metablock between -// block types and contexts. - -#include "./metablock.h" - -#include "./block_splitter.h" -#include "./context.h" -#include "./cluster.h" -#include "./histogram.h" - -namespace brotli { - -void BuildMetaBlock(const uint8_t* ringbuffer, - const size_t pos, - const size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - const Command* cmds, - size_t num_commands, - ContextType literal_context_mode, - MetaBlockSplit* mb) { - SplitBlock(cmds, num_commands, - ringbuffer, pos, mask, - &mb->literal_split, - &mb->command_split, - &mb->distance_split); - - std::vector<ContextType> literal_context_modes(mb->literal_split.num_types, - literal_context_mode); - - size_t num_literal_contexts = - mb->literal_split.num_types << kLiteralContextBits; - size_t num_distance_contexts = - mb->distance_split.num_types << kDistanceContextBits; - std::vector<HistogramLiteral> literal_histograms(num_literal_contexts); - mb->command_histograms.resize(mb->command_split.num_types); - std::vector<HistogramDistance> distance_histograms(num_distance_contexts); - BuildHistograms(cmds, num_commands, - mb->literal_split, - mb->command_split, - mb->distance_split, - ringbuffer, - pos, - mask, - prev_byte, - prev_byte2, - literal_context_modes, - &literal_histograms, - &mb->command_histograms, - &distance_histograms); - - // Histogram ids need to fit in one byte. - static const size_t kMaxNumberOfHistograms = 256; - - ClusterHistograms(literal_histograms, - 1u << kLiteralContextBits, - mb->literal_split.num_types, - kMaxNumberOfHistograms, - &mb->literal_histograms, - &mb->literal_context_map); - - ClusterHistograms(distance_histograms, - 1u << kDistanceContextBits, - mb->distance_split.num_types, - kMaxNumberOfHistograms, - &mb->distance_histograms, - &mb->distance_context_map); -} - -// Greedy block splitter for one block category (literal, command or distance). -template<typename HistogramType> -class BlockSplitter { - public: - BlockSplitter(size_t alphabet_size, - size_t min_block_size, - double split_threshold, - size_t num_symbols, - BlockSplit* split, - std::vector<HistogramType>* histograms) - : alphabet_size_(alphabet_size), - min_block_size_(min_block_size), - split_threshold_(split_threshold), - num_blocks_(0), - split_(split), - histograms_(histograms), - target_block_size_(min_block_size), - block_size_(0), - curr_histogram_ix_(0), - merge_last_count_(0) { - size_t max_num_blocks = num_symbols / min_block_size + 1; - // We have to allocate one more histogram than the maximum number of block - // types for the current histogram when the meta-block is too big. - size_t max_num_types = std::min<size_t>(max_num_blocks, kMaxBlockTypes + 1); - split_->lengths.resize(max_num_blocks); - split_->types.resize(max_num_blocks); - histograms_->resize(max_num_types); - last_histogram_ix_[0] = last_histogram_ix_[1] = 0; - } - - // Adds the next symbol to the current histogram. When the current histogram - // reaches the target size, decides on merging the block. - void AddSymbol(size_t symbol) { - (*histograms_)[curr_histogram_ix_].Add(symbol); - ++block_size_; - if (block_size_ == target_block_size_) { - FinishBlock(/* is_final = */ false); - } - } - - // Does either of three things: - // (1) emits the current block with a new block type; - // (2) emits the current block with the type of the second last block; - // (3) merges the current block with the last block. - void FinishBlock(bool is_final) { - if (block_size_ < min_block_size_) { - block_size_ = min_block_size_; - } - if (num_blocks_ == 0) { - // Create first block. - split_->lengths[0] = static_cast<uint32_t>(block_size_); - split_->types[0] = 0; - last_entropy_[0] = - BitsEntropy(&(*histograms_)[0].data_[0], alphabet_size_); - last_entropy_[1] = last_entropy_[0]; - ++num_blocks_; - ++split_->num_types; - ++curr_histogram_ix_; - block_size_ = 0; - } else if (block_size_ > 0) { - double entropy = BitsEntropy(&(*histograms_)[curr_histogram_ix_].data_[0], - alphabet_size_); - HistogramType combined_histo[2]; - double combined_entropy[2]; - double diff[2]; - for (size_t j = 0; j < 2; ++j) { - size_t last_histogram_ix = last_histogram_ix_[j]; - combined_histo[j] = (*histograms_)[curr_histogram_ix_]; - combined_histo[j].AddHistogram((*histograms_)[last_histogram_ix]); - combined_entropy[j] = BitsEntropy( - &combined_histo[j].data_[0], alphabet_size_); - diff[j] = combined_entropy[j] - entropy - last_entropy_[j]; - } - - if (split_->num_types < kMaxBlockTypes && - diff[0] > split_threshold_ && - diff[1] > split_threshold_) { - // Create new block. - split_->lengths[num_blocks_] = static_cast<uint32_t>(block_size_); - split_->types[num_blocks_] = static_cast<uint8_t>(split_->num_types); - last_histogram_ix_[1] = last_histogram_ix_[0]; - last_histogram_ix_[0] = static_cast<uint8_t>(split_->num_types); - last_entropy_[1] = last_entropy_[0]; - last_entropy_[0] = entropy; - ++num_blocks_; - ++split_->num_types; - ++curr_histogram_ix_; - block_size_ = 0; - merge_last_count_ = 0; - target_block_size_ = min_block_size_; - } else if (diff[1] < diff[0] - 20.0) { - // Combine this block with second last block. - split_->lengths[num_blocks_] = static_cast<uint32_t>(block_size_); - split_->types[num_blocks_] = split_->types[num_blocks_ - 2]; - std::swap(last_histogram_ix_[0], last_histogram_ix_[1]); - (*histograms_)[last_histogram_ix_[0]] = combined_histo[1]; - last_entropy_[1] = last_entropy_[0]; - last_entropy_[0] = combined_entropy[1]; - ++num_blocks_; - block_size_ = 0; - (*histograms_)[curr_histogram_ix_].Clear(); - merge_last_count_ = 0; - target_block_size_ = min_block_size_; - } else { - // Combine this block with last block. - split_->lengths[num_blocks_ - 1] += static_cast<uint32_t>(block_size_); - (*histograms_)[last_histogram_ix_[0]] = combined_histo[0]; - last_entropy_[0] = combined_entropy[0]; - if (split_->num_types == 1) { - last_entropy_[1] = last_entropy_[0]; - } - block_size_ = 0; - (*histograms_)[curr_histogram_ix_].Clear(); - if (++merge_last_count_ > 1) { - target_block_size_ += min_block_size_; - } - } - } - if (is_final) { - (*histograms_).resize(split_->num_types); - split_->types.resize(num_blocks_); - split_->lengths.resize(num_blocks_); - } - } - - private: - static const uint16_t kMaxBlockTypes = 256; - - // Alphabet size of particular block category. - const size_t alphabet_size_; - // We collect at least this many symbols for each block. - const size_t min_block_size_; - // We merge histograms A and B if - // entropy(A+B) < entropy(A) + entropy(B) + split_threshold_, - // where A is the current histogram and B is the histogram of the last or the - // second last block type. - const double split_threshold_; - - size_t num_blocks_; - BlockSplit* split_; // not owned - std::vector<HistogramType>* histograms_; // not owned - - // The number of symbols that we want to collect before deciding on whether - // or not to merge the block with a previous one or emit a new block. - size_t target_block_size_; - // The number of symbols in the current histogram. - size_t block_size_; - // Offset of the current histogram. - size_t curr_histogram_ix_; - // Offset of the histograms of the previous two block types. - size_t last_histogram_ix_[2]; - // Entropy of the previous two block types. - double last_entropy_[2]; - // The number of times we merged the current block with the last one. - size_t merge_last_count_; -}; - -void BuildMetaBlockGreedy(const uint8_t* ringbuffer, - size_t pos, - size_t mask, - const Command *commands, - size_t n_commands, - MetaBlockSplit* mb) { - size_t num_literals = 0; - for (size_t i = 0; i < n_commands; ++i) { - num_literals += commands[i].insert_len_; - } - - BlockSplitter<HistogramLiteral> lit_blocks( - 256, 512, 400.0, num_literals, - &mb->literal_split, &mb->literal_histograms); - BlockSplitter<HistogramCommand> cmd_blocks( - kNumCommandPrefixes, 1024, 500.0, n_commands, - &mb->command_split, &mb->command_histograms); - BlockSplitter<HistogramDistance> dist_blocks( - 64, 512, 100.0, n_commands, - &mb->distance_split, &mb->distance_histograms); - - for (size_t i = 0; i < n_commands; ++i) { - const Command cmd = commands[i]; - cmd_blocks.AddSymbol(cmd.cmd_prefix_); - for (size_t j = cmd.insert_len_; j != 0; --j) { - lit_blocks.AddSymbol(ringbuffer[pos & mask]); - ++pos; - } - pos += cmd.copy_len(); - if (cmd.copy_len() && cmd.cmd_prefix_ >= 128) { - dist_blocks.AddSymbol(cmd.dist_prefix_); - } - } - - lit_blocks.FinishBlock(/* is_final = */ true); - cmd_blocks.FinishBlock(/* is_final = */ true); - dist_blocks.FinishBlock(/* is_final = */ true); -} - -// Greedy block splitter for one block category (literal, command or distance). -// Gathers histograms for all context buckets. -template<typename HistogramType> -class ContextBlockSplitter { - public: - ContextBlockSplitter(size_t alphabet_size, - size_t num_contexts, - size_t min_block_size, - double split_threshold, - size_t num_symbols, - BlockSplit* split, - std::vector<HistogramType>* histograms) - : alphabet_size_(alphabet_size), - num_contexts_(num_contexts), - max_block_types_(kMaxBlockTypes / num_contexts), - min_block_size_(min_block_size), - split_threshold_(split_threshold), - num_blocks_(0), - split_(split), - histograms_(histograms), - target_block_size_(min_block_size), - block_size_(0), - curr_histogram_ix_(0), - last_entropy_(2 * num_contexts), - merge_last_count_(0) { - size_t max_num_blocks = num_symbols / min_block_size + 1; - // We have to allocate one more histogram than the maximum number of block - // types for the current histogram when the meta-block is too big. - size_t max_num_types = std::min(max_num_blocks, max_block_types_ + 1); - split_->lengths.resize(max_num_blocks); - split_->types.resize(max_num_blocks); - histograms_->resize(max_num_types * num_contexts); - last_histogram_ix_[0] = last_histogram_ix_[1] = 0; - } - - // Adds the next symbol to the current block type and context. When the - // current block reaches the target size, decides on merging the block. - void AddSymbol(size_t symbol, size_t context) { - (*histograms_)[curr_histogram_ix_ + context].Add(symbol); - ++block_size_; - if (block_size_ == target_block_size_) { - FinishBlock(/* is_final = */ false); - } - } - - // Does either of three things: - // (1) emits the current block with a new block type; - // (2) emits the current block with the type of the second last block; - // (3) merges the current block with the last block. - void FinishBlock(bool is_final) { - if (block_size_ < min_block_size_) { - block_size_ = min_block_size_; - } - if (num_blocks_ == 0) { - // Create first block. - split_->lengths[0] = static_cast<uint32_t>(block_size_); - split_->types[0] = 0; - for (size_t i = 0; i < num_contexts_; ++i) { - last_entropy_[i] = - BitsEntropy(&(*histograms_)[i].data_[0], alphabet_size_); - last_entropy_[num_contexts_ + i] = last_entropy_[i]; - } - ++num_blocks_; - ++split_->num_types; - curr_histogram_ix_ += num_contexts_; - block_size_ = 0; - } else if (block_size_ > 0) { - // Try merging the set of histograms for the current block type with the - // respective set of histograms for the last and second last block types. - // Decide over the split based on the total reduction of entropy across - // all contexts. - std::vector<double> entropy(num_contexts_); - std::vector<HistogramType> combined_histo(2 * num_contexts_); - std::vector<double> combined_entropy(2 * num_contexts_); - double diff[2] = { 0.0 }; - for (size_t i = 0; i < num_contexts_; ++i) { - size_t curr_histo_ix = curr_histogram_ix_ + i; - entropy[i] = BitsEntropy(&(*histograms_)[curr_histo_ix].data_[0], - alphabet_size_); - for (size_t j = 0; j < 2; ++j) { - size_t jx = j * num_contexts_ + i; - size_t last_histogram_ix = last_histogram_ix_[j] + i; - combined_histo[jx] = (*histograms_)[curr_histo_ix]; - combined_histo[jx].AddHistogram((*histograms_)[last_histogram_ix]); - combined_entropy[jx] = BitsEntropy( - &combined_histo[jx].data_[0], alphabet_size_); - diff[j] += combined_entropy[jx] - entropy[i] - last_entropy_[jx]; - } - } - - if (split_->num_types < max_block_types_ && - diff[0] > split_threshold_ && - diff[1] > split_threshold_) { - // Create new block. - split_->lengths[num_blocks_] = static_cast<uint32_t>(block_size_); - split_->types[num_blocks_] = static_cast<uint8_t>(split_->num_types); - last_histogram_ix_[1] = last_histogram_ix_[0]; - last_histogram_ix_[0] = split_->num_types * num_contexts_; - for (size_t i = 0; i < num_contexts_; ++i) { - last_entropy_[num_contexts_ + i] = last_entropy_[i]; - last_entropy_[i] = entropy[i]; - } - ++num_blocks_; - ++split_->num_types; - curr_histogram_ix_ += num_contexts_; - block_size_ = 0; - merge_last_count_ = 0; - target_block_size_ = min_block_size_; - } else if (diff[1] < diff[0] - 20.0) { - // Combine this block with second last block. - split_->lengths[num_blocks_] = static_cast<uint32_t>(block_size_); - split_->types[num_blocks_] = split_->types[num_blocks_ - 2]; - std::swap(last_histogram_ix_[0], last_histogram_ix_[1]); - for (size_t i = 0; i < num_contexts_; ++i) { - (*histograms_)[last_histogram_ix_[0] + i] = - combined_histo[num_contexts_ + i]; - last_entropy_[num_contexts_ + i] = last_entropy_[i]; - last_entropy_[i] = combined_entropy[num_contexts_ + i]; - (*histograms_)[curr_histogram_ix_ + i].Clear(); - } - ++num_blocks_; - block_size_ = 0; - merge_last_count_ = 0; - target_block_size_ = min_block_size_; - } else { - // Combine this block with last block. - split_->lengths[num_blocks_ - 1] += static_cast<uint32_t>(block_size_); - for (size_t i = 0; i < num_contexts_; ++i) { - (*histograms_)[last_histogram_ix_[0] + i] = combined_histo[i]; - last_entropy_[i] = combined_entropy[i]; - if (split_->num_types == 1) { - last_entropy_[num_contexts_ + i] = last_entropy_[i]; - } - (*histograms_)[curr_histogram_ix_ + i].Clear(); - } - block_size_ = 0; - if (++merge_last_count_ > 1) { - target_block_size_ += min_block_size_; - } - } - } - if (is_final) { - (*histograms_).resize(split_->num_types * num_contexts_); - split_->types.resize(num_blocks_); - split_->lengths.resize(num_blocks_); - } - } - - private: - static const int kMaxBlockTypes = 256; - - // Alphabet size of particular block category. - const size_t alphabet_size_; - const size_t num_contexts_; - const size_t max_block_types_; - // We collect at least this many symbols for each block. - const size_t min_block_size_; - // We merge histograms A and B if - // entropy(A+B) < entropy(A) + entropy(B) + split_threshold_, - // where A is the current histogram and B is the histogram of the last or the - // second last block type. - const double split_threshold_; - - size_t num_blocks_; - BlockSplit* split_; // not owned - std::vector<HistogramType>* histograms_; // not owned - - // The number of symbols that we want to collect before deciding on whether - // or not to merge the block with a previous one or emit a new block. - size_t target_block_size_; - // The number of symbols in the current histogram. - size_t block_size_; - // Offset of the current histogram. - size_t curr_histogram_ix_; - // Offset of the histograms of the previous two block types. - size_t last_histogram_ix_[2]; - // Entropy of the previous two block types. - std::vector<double> last_entropy_; - // The number of times we merged the current block with the last one. - size_t merge_last_count_; -}; - -void BuildMetaBlockGreedyWithContexts(const uint8_t* ringbuffer, - size_t pos, - size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - ContextType literal_context_mode, - size_t num_contexts, - const uint32_t* static_context_map, - const Command *commands, - size_t n_commands, - MetaBlockSplit* mb) { - size_t num_literals = 0; - for (size_t i = 0; i < n_commands; ++i) { - num_literals += commands[i].insert_len_; - } - - ContextBlockSplitter<HistogramLiteral> lit_blocks( - 256, num_contexts, 512, 400.0, num_literals, - &mb->literal_split, &mb->literal_histograms); - BlockSplitter<HistogramCommand> cmd_blocks( - kNumCommandPrefixes, 1024, 500.0, n_commands, - &mb->command_split, &mb->command_histograms); - BlockSplitter<HistogramDistance> dist_blocks( - 64, 512, 100.0, n_commands, - &mb->distance_split, &mb->distance_histograms); - - for (size_t i = 0; i < n_commands; ++i) { - const Command cmd = commands[i]; - cmd_blocks.AddSymbol(cmd.cmd_prefix_); - for (size_t j = cmd.insert_len_; j != 0; --j) { - size_t context = Context(prev_byte, prev_byte2, literal_context_mode); - uint8_t literal = ringbuffer[pos & mask]; - lit_blocks.AddSymbol(literal, static_context_map[context]); - prev_byte2 = prev_byte; - prev_byte = literal; - ++pos; - } - pos += cmd.copy_len(); - if (cmd.copy_len()) { - prev_byte2 = ringbuffer[(pos - 2) & mask]; - prev_byte = ringbuffer[(pos - 1) & mask]; - if (cmd.cmd_prefix_ >= 128) { - dist_blocks.AddSymbol(cmd.dist_prefix_); - } - } - } - - lit_blocks.FinishBlock(/* is_final = */ true); - cmd_blocks.FinishBlock(/* is_final = */ true); - dist_blocks.FinishBlock(/* is_final = */ true); - - mb->literal_context_map.resize( - mb->literal_split.num_types << kLiteralContextBits); - for (size_t i = 0; i < mb->literal_split.num_types; ++i) { - for (size_t j = 0; j < (1u << kLiteralContextBits); ++j) { - mb->literal_context_map[(i << kLiteralContextBits) + j] = - static_cast<uint32_t>(i * num_contexts) + static_context_map[j]; - } - } -} - -void OptimizeHistograms(size_t num_direct_distance_codes, - size_t distance_postfix_bits, - MetaBlockSplit* mb) { - uint8_t* good_for_rle = new uint8_t[kNumCommandPrefixes]; - for (size_t i = 0; i < mb->literal_histograms.size(); ++i) { - OptimizeHuffmanCountsForRle(256, &mb->literal_histograms[i].data_[0], - good_for_rle); - } - for (size_t i = 0; i < mb->command_histograms.size(); ++i) { - OptimizeHuffmanCountsForRle(kNumCommandPrefixes, - &mb->command_histograms[i].data_[0], - good_for_rle); - } - size_t num_distance_codes = - kNumDistanceShortCodes + num_direct_distance_codes + - (48u << distance_postfix_bits); - for (size_t i = 0; i < mb->distance_histograms.size(); ++i) { - OptimizeHuffmanCountsForRle(num_distance_codes, - &mb->distance_histograms[i].data_[0], - good_for_rle); - } - delete[] good_for_rle; -} - -} // namespace brotli diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/metablock.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/metablock.h deleted file mode 100644 index d1928850590..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/metablock.h +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Algorithms for distributing the literals and commands of a metablock between -// block types and contexts. - -#ifndef BROTLI_ENC_METABLOCK_H_ -#define BROTLI_ENC_METABLOCK_H_ - -#include <vector> - -#include "./command.h" -#include "./histogram.h" - -namespace brotli { - -struct BlockSplit { - BlockSplit(void) : num_types(0) {} - - size_t num_types; - std::vector<uint8_t> types; - std::vector<uint32_t> lengths; -}; - -struct MetaBlockSplit { - BlockSplit literal_split; - BlockSplit command_split; - BlockSplit distance_split; - std::vector<uint32_t> literal_context_map; - std::vector<uint32_t> distance_context_map; - std::vector<HistogramLiteral> literal_histograms; - std::vector<HistogramCommand> command_histograms; - std::vector<HistogramDistance> distance_histograms; -}; - -// Uses the slow shortest-path block splitter and does context clustering. -void BuildMetaBlock(const uint8_t* ringbuffer, - const size_t pos, - const size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - const Command* cmds, - size_t num_commands, - ContextType literal_context_mode, - MetaBlockSplit* mb); - -// Uses a fast greedy block splitter that tries to merge current block with the -// last or the second last block and does not do any context modeling. -void BuildMetaBlockGreedy(const uint8_t* ringbuffer, - size_t pos, - size_t mask, - const Command *commands, - size_t n_commands, - MetaBlockSplit* mb); - -// Uses a fast greedy block splitter that tries to merge current block with the -// last or the second last block and uses a static context clustering which -// is the same for all block types. -void BuildMetaBlockGreedyWithContexts(const uint8_t* ringbuffer, - size_t pos, - size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - ContextType literal_context_mode, - size_t num_contexts, - const uint32_t* static_context_map, - const Command *commands, - size_t n_commands, - MetaBlockSplit* mb); - -void OptimizeHistograms(size_t num_direct_distance_codes, - size_t distance_postfix_bits, - MetaBlockSplit* mb); - -} // namespace brotli - -#endif // BROTLI_ENC_METABLOCK_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/port.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/port.h deleted file mode 100644 index e73df63a8fe..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/port.h +++ /dev/null @@ -1,142 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Macros for endianness, branch prediction and unaligned loads and stores. - -#ifndef BROTLI_ENC_PORT_H_ -#define BROTLI_ENC_PORT_H_ - -#include <assert.h> -#include <string.h> -#include "./types.h" - -#if defined OS_LINUX || defined OS_CYGWIN -#include <endian.h> -#elif defined OS_FREEBSD -#include <machine/endian.h> -#elif defined OS_MACOSX -#include <machine/endian.h> -/* Let's try and follow the Linux convention */ -#define __BYTE_ORDER BYTE_ORDER -#define __LITTLE_ENDIAN LITTLE_ENDIAN -#endif - -// define the macro IS_LITTLE_ENDIAN -// using the above endian definitions from endian.h if -// endian.h was included -#ifdef __BYTE_ORDER -#if __BYTE_ORDER == __LITTLE_ENDIAN -#define IS_LITTLE_ENDIAN -#endif - -#else - -#if defined(__LITTLE_ENDIAN__) -#define IS_LITTLE_ENDIAN -#endif -#endif // __BYTE_ORDER - -#if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) -#define IS_LITTLE_ENDIAN -#endif - -// Enable little-endian optimization for x64 architecture on Windows. -#if (defined(_WIN32) || defined(_WIN64)) && defined(_M_X64) -#define IS_LITTLE_ENDIAN -#endif - -/* Compatibility with non-clang compilers. */ -#ifndef __has_builtin -#define __has_builtin(x) 0 -#endif - -#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ > 95) || \ - (defined(__llvm__) && __has_builtin(__builtin_expect)) -#define PREDICT_FALSE(x) (__builtin_expect(x, 0)) -#define PREDICT_TRUE(x) (__builtin_expect(!!(x), 1)) -#else -#define PREDICT_FALSE(x) (x) -#define PREDICT_TRUE(x) (x) -#endif - -// Portable handling of unaligned loads, stores, and copies. -// On some platforms, like ARM, the copy functions can be more efficient -// then a load and a store. - -#if defined(ARCH_PIII) || \ - defined(ARCH_ATHLON) || defined(ARCH_K8) || defined(_ARCH_PPC) - -// x86 and x86-64 can perform unaligned loads/stores directly; -// modern PowerPC hardware can also do unaligned integer loads and stores; -// but note: the FPU still sends unaligned loads and stores to a trap handler! - -#define BROTLI_UNALIGNED_LOAD32(_p) (*reinterpret_cast<const uint32_t *>(_p)) -#define BROTLI_UNALIGNED_LOAD64(_p) (*reinterpret_cast<const uint64_t *>(_p)) - -#define BROTLI_UNALIGNED_STORE32(_p, _val) \ - (*reinterpret_cast<uint32_t *>(_p) = (_val)) -#define BROTLI_UNALIGNED_STORE64(_p, _val) \ - (*reinterpret_cast<uint64_t *>(_p) = (_val)) - -#elif defined(__arm__) && \ - !defined(__ARM_ARCH_5__) && \ - !defined(__ARM_ARCH_5T__) && \ - !defined(__ARM_ARCH_5TE__) && \ - !defined(__ARM_ARCH_5TEJ__) && \ - !defined(__ARM_ARCH_6__) && \ - !defined(__ARM_ARCH_6J__) && \ - !defined(__ARM_ARCH_6K__) && \ - !defined(__ARM_ARCH_6Z__) && \ - !defined(__ARM_ARCH_6ZK__) && \ - !defined(__ARM_ARCH_6T2__) - -// ARMv7 and newer support native unaligned accesses, but only of 16-bit -// and 32-bit values (not 64-bit); older versions either raise a fatal signal, -// do an unaligned read and rotate the words around a bit, or do the reads very -// slowly (trip through kernel mode). - -#define BROTLI_UNALIGNED_LOAD32(_p) (*reinterpret_cast<const uint32_t *>(_p)) -#define BROTLI_UNALIGNED_STORE32(_p, _val) \ - (*reinterpret_cast<uint32_t *>(_p) = (_val)) - -inline uint64_t BROTLI_UNALIGNED_LOAD64(const void *p) { - uint64_t t; - memcpy(&t, p, sizeof t); - return t; -} - -inline void BROTLI_UNALIGNED_STORE64(void *p, uint64_t v) { - memcpy(p, &v, sizeof v); -} - -#else - -// These functions are provided for architectures that don't support -// unaligned loads and stores. - -inline uint32_t BROTLI_UNALIGNED_LOAD32(const void *p) { - uint32_t t; - memcpy(&t, p, sizeof t); - return t; -} - -inline uint64_t BROTLI_UNALIGNED_LOAD64(const void *p) { - uint64_t t; - memcpy(&t, p, sizeof t); - return t; -} - -inline void BROTLI_UNALIGNED_STORE32(void *p, uint32_t v) { - memcpy(p, &v, sizeof v); -} - -inline void BROTLI_UNALIGNED_STORE64(void *p, uint64_t v) { - memcpy(p, &v, sizeof v); -} - -#endif - -#endif // BROTLI_ENC_PORT_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/prefix.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/prefix.h deleted file mode 100644 index 86fff8d522d..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/prefix.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Functions for encoding of integers into prefix codes the amount of extra -// bits, and the actual values of the extra bits. - -#ifndef BROTLI_ENC_PREFIX_H_ -#define BROTLI_ENC_PREFIX_H_ - -#include "./fast_log.h" -#include "./types.h" - -namespace brotli { - -static const uint32_t kNumInsertLenPrefixes = 24; -static const uint32_t kNumCopyLenPrefixes = 24; -static const uint32_t kNumCommandPrefixes = 704; -static const uint32_t kNumBlockLenPrefixes = 26; -static const uint32_t kNumDistanceShortCodes = 16; -static const uint32_t kNumDistancePrefixes = 520; - -// Represents the range of values belonging to a prefix code: -// [offset, offset + 2^nbits) -struct PrefixCodeRange { - uint32_t offset; - uint32_t nbits; -}; - -static const PrefixCodeRange kBlockLengthPrefixCode[kNumBlockLenPrefixes] = { - { 1, 2}, { 5, 2}, { 9, 2}, { 13, 2}, - { 17, 3}, { 25, 3}, { 33, 3}, { 41, 3}, - { 49, 4}, { 65, 4}, { 81, 4}, { 97, 4}, - { 113, 5}, { 145, 5}, { 177, 5}, { 209, 5}, - { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8}, - { 753, 9}, { 1265, 10}, {2289, 11}, {4337, 12}, - {8433, 13}, {16625, 24} -}; - -inline void GetBlockLengthPrefixCode(uint32_t len, uint32_t* code, - uint32_t* n_extra, uint32_t* extra) { - *code = 0; - while (*code < 25 && len >= kBlockLengthPrefixCode[*code + 1].offset) { - ++(*code); - } - *n_extra = kBlockLengthPrefixCode[*code].nbits; - *extra = len - kBlockLengthPrefixCode[*code].offset; -} - -inline void PrefixEncodeCopyDistance(size_t distance_code, - size_t num_direct_codes, - size_t postfix_bits, - uint16_t* code, - uint32_t* extra_bits) { - if (distance_code < kNumDistanceShortCodes + num_direct_codes) { - *code = static_cast<uint16_t>(distance_code); - *extra_bits = 0; - return; - } - distance_code -= kNumDistanceShortCodes + num_direct_codes; /* >= 0 */ - distance_code += (1u << (postfix_bits + 2u)); /* > 0 */ - size_t bucket = Log2FloorNonZero(distance_code) - 1; - size_t postfix_mask = (1 << postfix_bits) - 1; - size_t postfix = distance_code & postfix_mask; - size_t prefix = (distance_code >> bucket) & 1; - size_t offset = (2 + prefix) << bucket; - size_t nbits = bucket - postfix_bits; - *code = static_cast<uint16_t>( - (kNumDistanceShortCodes + num_direct_codes + - ((2 * (nbits - 1) + prefix) << postfix_bits) + postfix)); - *extra_bits = static_cast<uint32_t>( - (nbits << 24) | ((distance_code - offset) >> postfix_bits)); -} - -} // namespace brotli - -#endif // BROTLI_ENC_PREFIX_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/ringbuffer.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/ringbuffer.h deleted file mode 100644 index 13e1b8360e2..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/ringbuffer.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Sliding window over the input data. - -#ifndef BROTLI_ENC_RINGBUFFER_H_ -#define BROTLI_ENC_RINGBUFFER_H_ - -#include <cstdlib> /* free, realloc */ - -#include "./port.h" -#include "./types.h" - -namespace brotli { - -// A RingBuffer(window_bits, tail_bits) contains `1 << window_bits' bytes of -// data in a circular manner: writing a byte writes it to: -// `position() % (1 << window_bits)'. -// For convenience, the RingBuffer array contains another copy of the -// first `1 << tail_bits' bytes: -// buffer_[i] == buffer_[i + (1 << window_bits)], if i < (1 << tail_bits), -// and another copy of the last two bytes: -// buffer_[-1] == buffer_[(1 << window_bits) - 1] and -// buffer_[-2] == buffer_[(1 << window_bits) - 2]. -class RingBuffer { - public: - RingBuffer(int window_bits, int tail_bits) - : size_(1u << window_bits), - mask_((1u << window_bits) - 1), - tail_size_(1u << tail_bits), - total_size_(size_ + tail_size_), - cur_size_(0), - pos_(0), - data_(0), - buffer_(0) {} - - ~RingBuffer(void) { - free(data_); - } - - // Allocates or re-allocates data_ to the given length + plus some slack - // region before and after. Fills the slack regions with zeros. - inline void InitBuffer(const uint32_t buflen) { - static const size_t kSlackForEightByteHashingEverywhere = 7; - cur_size_ = buflen; - data_ = static_cast<uint8_t*>(realloc( - data_, 2 + buflen + kSlackForEightByteHashingEverywhere)); - buffer_ = data_ + 2; - buffer_[-2] = buffer_[-1] = 0; - for (size_t i = 0; i < kSlackForEightByteHashingEverywhere; ++i) { - buffer_[cur_size_ + i] = 0; - } - } - - // Push bytes into the ring buffer. - void Write(const uint8_t *bytes, size_t n) { - if (pos_ == 0 && n < tail_size_) { - // Special case for the first write: to process the first block, we don't - // need to allocate the whole ringbuffer and we don't need the tail - // either. However, we do this memory usage optimization only if the - // first write is less than the tail size, which is also the input block - // size, otherwise it is likely that other blocks will follow and we - // will need to reallocate to the full size anyway. - pos_ = static_cast<uint32_t>(n); - InitBuffer(pos_); - memcpy(buffer_, bytes, n); - return; - } - if (cur_size_ < total_size_) { - // Lazily allocate the full buffer. - InitBuffer(total_size_); - // Initialize the last two bytes to zero, so that we don't have to worry - // later when we copy the last two bytes to the first two positions. - buffer_[size_ - 2] = 0; - buffer_[size_ - 1] = 0; - } - const size_t masked_pos = pos_ & mask_; - // The length of the writes is limited so that we do not need to worry - // about a write - WriteTail(bytes, n); - if (PREDICT_TRUE(masked_pos + n <= size_)) { - // A single write fits. - memcpy(&buffer_[masked_pos], bytes, n); - } else { - // Split into two writes. - // Copy into the end of the buffer, including the tail buffer. - memcpy(&buffer_[masked_pos], bytes, - std::min(n, total_size_ - masked_pos)); - // Copy into the beginning of the buffer - memcpy(&buffer_[0], bytes + (size_ - masked_pos), - n - (size_ - masked_pos)); - } - buffer_[-2] = buffer_[size_ - 2]; - buffer_[-1] = buffer_[size_ - 1]; - pos_ += static_cast<uint32_t>(n); - if (pos_ > (1u << 30)) { /* Wrap, but preserve not-a-first-lap feature. */ - pos_ = (pos_ & ((1u << 30) - 1)) | (1u << 30); - } - } - - void Reset(void) { - pos_ = 0; - } - - // Logical cursor position in the ring buffer. - uint32_t position(void) const { return pos_; } - - // Bit mask for getting the physical position for a logical position. - uint32_t mask(void) const { return mask_; } - - uint8_t *start(void) { return &buffer_[0]; } - const uint8_t *start(void) const { return &buffer_[0]; } - - private: - void WriteTail(const uint8_t *bytes, size_t n) { - const size_t masked_pos = pos_ & mask_; - if (PREDICT_FALSE(masked_pos < tail_size_)) { - // Just fill the tail buffer with the beginning data. - const size_t p = size_ + masked_pos; - memcpy(&buffer_[p], bytes, std::min(n, tail_size_ - masked_pos)); - } - } - - // Size of the ringbuffer is (1 << window_bits) + tail_size_. - const uint32_t size_; - const uint32_t mask_; - const uint32_t tail_size_; - const uint32_t total_size_; - - uint32_t cur_size_; - // Position to write in the ring buffer. - uint32_t pos_; - // The actual ring buffer containing the copy of the last two bytes, the data, - // and the copy of the beginning as a tail. - uint8_t *data_; - // The start of the ringbuffer. - uint8_t *buffer_; -}; - -} // namespace brotli - -#endif // BROTLI_ENC_RINGBUFFER_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/static_dict.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/static_dict.h deleted file mode 100644 index d293934dfb7..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/static_dict.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Class to model the static dictionary. - -#ifndef BROTLI_ENC_STATIC_DICT_H_ -#define BROTLI_ENC_STATIC_DICT_H_ - -#include "./types.h" - -namespace brotli { - -static const size_t kMaxDictionaryMatchLen = 37; -static const uint32_t kInvalidMatch = 0xfffffff; - -// Matches data against static dictionary words, and for each length l, -// for which a match is found, updates matches[l] to be the minimum possible -// (distance << 5) + len_code. -// Prerequisites: -// matches array is at least kMaxDictionaryMatchLen + 1 long -// all elements are initialized to kInvalidMatch -bool FindAllStaticDictionaryMatches(const uint8_t* data, - size_t min_length, - size_t max_length, - uint32_t* matches); - -} // namespace brotli - -#endif // BROTLI_ENC_STATIC_DICT_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/static_dict_lut.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/static_dict_lut.h deleted file mode 100644 index 489c03a1be1..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/static_dict_lut.h +++ /dev/null @@ -1,12055 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Lookup table for static dictionary and transforms. - -#ifndef BROTLI_ENC_DICTIONARY_LUT_H_ -#define BROTLI_ENC_DICTIONARY_LUT_H_ - -#include "./types.h" - -namespace brotli { - -static const int kDictNumBits = 15 -;static const uint32_t kDictHashMul32 = 0x1e35a7bd; - -struct DictWord { - uint8_t len; - uint8_t transform; - uint16_t idx; -}; - -static const uint32_t kStaticDictionaryBuckets[] = { - 0x000002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000203, 0x00050e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x001301, 0x000000, 0x000000, 0x000000, 0x001401, 0x000000, 0x001501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x001602, - 0x000000, 0x000000, 0x001804, 0x000000, 0x001c18, 0x000000, 0x003402, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x003606, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x003c0f, 0x004b12, 0x000000, 0x000000, - 0x000000, 0x005d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x005f01, 0x000000, 0x006001, 0x000000, 0x006101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x006202, 0x006405, 0x006902, 0x006b02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x006d01, 0x000000, 0x006e01, - 0x006f01, 0x000000, 0x007005, 0x007506, 0x007b01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x007c03, 0x007f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x008002, 0x000000, 0x000000, 0x008201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x008303, 0x000000, 0x000000, 0x008602, 0x000000, 0x000000, - 0x000000, 0x008801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x008901, - 0x008a03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x008d01, 0x008e01, 0x008f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x009001, 0x000000, 0x000000, 0x000000, 0x009103, 0x009402, 0x009601, 0x009701, - 0x000000, 0x000000, 0x009801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x009901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x009a05, 0x000000, 0x000000, 0x000000, 0x000000, 0x009f16, 0x00b501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00b605, 0x000000, - 0x000000, 0x000000, 0x00bb01, 0x00bc03, 0x000000, 0x000000, 0x00bf02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00c103, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00c405, 0x00c907, - 0x00d001, 0x000000, 0x000000, 0x00d10e, 0x000000, 0x00df01, 0x000000, 0x000000, - 0x000000, 0x00e006, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x00e601, 0x000000, 0x000000, 0x000000, - 0x00e708, 0x000000, 0x00ef02, 0x000000, 0x000000, 0x00f102, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x00f302, 0x000000, 0x000000, 0x000000, 0x00f503, 0x000000, 0x000000, - 0x00f802, 0x00fa02, 0x00fc05, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x010103, 0x000000, 0x000000, 0x010402, 0x010604, 0x000000, 0x000000, 0x000000, - 0x010a01, 0x000000, 0x000000, 0x010b01, 0x000000, 0x010c02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x010e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x010f01, 0x000000, - 0x011004, 0x000000, 0x011401, 0x000000, 0x011508, 0x011d01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x011e02, 0x000000, 0x012001, 0x012101, 0x012204, 0x000000, - 0x000000, 0x000000, 0x012601, 0x000000, 0x000000, 0x012701, 0x012801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x012901, 0x000000, 0x000000, 0x000000, 0x012a06, 0x000000, 0x000000, - 0x013013, 0x000000, 0x014303, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x014601, 0x000000, 0x014701, 0x014807, 0x000000, 0x000000, 0x000000, 0x000000, - 0x014f04, 0x000000, 0x000000, 0x015301, 0x000000, 0x015401, 0x015501, 0x015603, - 0x000000, 0x000000, 0x015902, 0x000000, 0x015b01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x015c02, 0x015e04, 0x000000, 0x000000, 0x016208, - 0x000000, 0x016a01, 0x000000, 0x016b04, 0x000000, 0x016f01, 0x017001, 0x000000, - 0x017102, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x017301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x017402, 0x000000, 0x017601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x017701, 0x017811, 0x000000, 0x000000, 0x018901, - 0x018a01, 0x018b02, 0x000000, 0x000000, 0x018d02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x018f08, 0x000000, 0x000000, 0x01970c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x01a301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x01a401, 0x000000, 0x000000, 0x01a501, 0x01a606, 0x000000, 0x000000, 0x01ac06, - 0x01b201, 0x01b306, 0x01b901, 0x000000, 0x000000, 0x01ba01, 0x000000, 0x01bb01, - 0x01bc08, 0x01c403, 0x01c701, 0x000000, 0x01c801, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x01c901, 0x000000, 0x000000, 0x000000, 0x01ca01, 0x000000, - 0x000000, 0x000000, 0x01cb02, 0x000000, 0x01cd01, 0x01ce02, 0x01d001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x01d103, 0x01d401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x01d504, 0x000000, 0x000000, - 0x000000, 0x01d902, 0x000000, 0x01db07, 0x000000, 0x000000, 0x000000, 0x000000, - 0x01e202, 0x000000, 0x01e401, 0x000000, 0x000000, 0x000000, 0x01e502, 0x000000, - 0x000000, 0x01e703, 0x01ea01, 0x01eb05, 0x000000, 0x000000, 0x01f002, 0x01f201, - 0x01f301, 0x000000, 0x01f404, 0x000000, 0x000000, 0x000000, 0x01f801, 0x000000, - 0x000000, 0x01f901, 0x000000, 0x000000, 0x000000, 0x01fa02, 0x000000, 0x000000, - 0x000000, 0x01fc02, 0x000000, 0x000000, 0x000000, 0x000000, 0x01fe01, 0x01ff07, - 0x02060a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x021001, - 0x021104, 0x000000, 0x000000, 0x000000, 0x021509, 0x000000, 0x000000, 0x000000, - 0x000000, 0x021e0a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x022804, 0x000000, 0x000000, 0x000000, 0x000000, - 0x022c03, 0x022f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x023003, 0x000000, 0x023301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x023401, 0x023509, 0x000000, 0x023e2c, 0x000000, 0x026a01, 0x000000, - 0x026b03, 0x000000, 0x000000, 0x026e01, 0x026f01, 0x000000, 0x000000, 0x000000, - 0x027001, 0x000000, 0x000000, 0x027101, 0x027201, 0x000000, 0x000000, 0x027302, - 0x000000, 0x000000, 0x000000, 0x000000, 0x027501, 0x000000, 0x02760a, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x028002, 0x000000, 0x000000, 0x000000, 0x000000, 0x02820d, 0x028f0c, 0x029b05, - 0x000000, 0x000000, 0x000000, 0x02a001, 0x000000, 0x000000, 0x000000, 0x02a108, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x02a905, 0x000000, 0x02ae03, 0x000000, 0x02b103, 0x000000, 0x02b406, 0x02ba01, - 0x02bb04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x02bf01, - 0x02c002, 0x000000, 0x000000, 0x000000, 0x000000, 0x02c203, 0x02c501, 0x000000, - 0x02c60f, 0x000000, 0x000000, 0x000000, 0x000000, 0x02d503, 0x000000, 0x000000, - 0x02d801, 0x000000, 0x000000, 0x000000, 0x02d901, 0x02da15, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x02ef0a, 0x000000, 0x000000, 0x000000, 0x02f901, - 0x000000, 0x02fa04, 0x000000, 0x000000, 0x02fe03, 0x000000, 0x000000, 0x000000, - 0x030104, 0x030501, 0x000000, 0x000000, 0x030601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x030701, - 0x000000, 0x000000, 0x000000, 0x030806, 0x030e02, 0x000000, 0x000000, 0x000000, - 0x031003, 0x031302, 0x000000, 0x000000, 0x000000, 0x000000, 0x031503, 0x000000, - 0x000000, 0x000000, 0x031801, 0x000000, 0x000000, 0x000000, 0x000000, 0x03190a, - 0x000000, 0x000000, 0x03230f, 0x033202, 0x033406, 0x000000, 0x033a07, 0x000000, - 0x000000, 0x000000, 0x034101, 0x000000, 0x000000, 0x034206, 0x000000, 0x000000, - 0x000000, 0x034803, 0x000000, 0x034b06, 0x000000, 0x035101, 0x035208, 0x035a01, - 0x000000, 0x035b0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x036902, 0x000000, 0x036b01, 0x000000, 0x036c0d, 0x037903, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x037c01, - 0x037d04, 0x038101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x038201, 0x000000, 0x000000, 0x000000, 0x038304, 0x038702, 0x038901, - 0x000000, 0x000000, 0x000000, 0x038a01, 0x000000, 0x038b01, 0x038c01, 0x000000, - 0x038d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x038e05, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x039306, 0x000000, 0x000000, 0x000000, 0x039903, - 0x039c05, 0x000000, 0x03a104, 0x000000, 0x03a509, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x03ae01, 0x000000, 0x000000, 0x03af09, 0x000000, 0x03b801, - 0x03b901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x03ba07, - 0x000000, 0x03c101, 0x03c20d, 0x000000, 0x000000, 0x03cf01, 0x000000, 0x000000, - 0x03d001, 0x03d101, 0x03d201, 0x03d301, 0x000000, 0x03d403, 0x000000, 0x000000, - 0x000000, 0x000000, 0x03d701, 0x000000, 0x000000, 0x03d802, 0x000000, 0x000000, - 0x03da02, 0x03dc02, 0x03de01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x03df01, 0x000000, 0x000000, 0x000000, - 0x03e003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x03e304, - 0x000000, 0x000000, 0x000000, 0x03e702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x03e903, 0x000000, 0x000000, 0x000000, 0x000000, 0x03ec02, 0x03ee02, - 0x000000, 0x000000, 0x000000, 0x03f001, 0x000000, 0x000000, 0x000000, 0x03f101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x03f201, 0x000000, - 0x03f302, 0x000000, 0x000000, 0x000000, 0x000000, 0x03f502, 0x03f704, 0x000000, - 0x000000, 0x000000, 0x03fb01, 0x000000, 0x03fc01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x03fd02, 0x000000, 0x000000, 0x000000, 0x03ff01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x040001, 0x000000, 0x000000, 0x040101, - 0x040204, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x040602, 0x000000, - 0x040801, 0x000000, 0x000000, 0x000000, 0x000000, 0x040903, 0x000000, 0x000000, - 0x000000, 0x040c03, 0x040f02, 0x000000, 0x000000, 0x000000, 0x041101, 0x04120a, - 0x000000, 0x000000, 0x041c01, 0x000000, 0x041d03, 0x000000, 0x000000, 0x042001, - 0x000000, 0x000000, 0x000000, 0x042102, 0x000000, 0x000000, 0x042301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x042401, 0x000000, - 0x000000, 0x042501, 0x000000, 0x000000, 0x000000, 0x000000, 0x042601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x042701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x042801, 0x000000, 0x000000, 0x000000, 0x000000, 0x042901, 0x042a02, - 0x000000, 0x000000, 0x000000, 0x042c01, 0x042d02, 0x042f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x043002, 0x000000, 0x043205, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x043704, 0x043b04, 0x000000, - 0x000000, 0x000000, 0x000000, 0x043f06, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x044501, 0x000000, 0x04460c, 0x000000, 0x045205, 0x000000, - 0x000000, 0x000000, 0x045702, 0x045905, 0x000000, 0x045e03, 0x000000, 0x046104, - 0x000000, 0x000000, 0x046503, 0x000000, 0x046801, 0x000000, 0x046902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x046b0c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x047701, 0x000000, 0x000000, 0x047801, 0x047902, - 0x000000, 0x047b01, 0x047c01, 0x000000, 0x000000, 0x047d01, 0x047e01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x047f01, 0x000000, 0x048001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x048109, 0x000000, 0x048a01, 0x000000, 0x000000, - 0x000000, 0x048b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x048c02, - 0x000000, 0x048e03, 0x000000, 0x049101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x049201, 0x049301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x049402, 0x049602, 0x049809, 0x000000, 0x04a109, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x04aa1a, 0x000000, 0x000000, 0x04c403, 0x000000, 0x000000, - 0x04c703, 0x000000, 0x000000, 0x04ca01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x04cb01, 0x04cc01, 0x000000, 0x000000, 0x04cd01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x04ce02, - 0x000000, 0x000000, 0x000000, 0x04d00a, 0x000000, 0x000000, 0x04da01, 0x04db02, - 0x04dd02, 0x04df06, 0x000000, 0x000000, 0x000000, 0x000000, 0x04e501, 0x04e603, - 0x04e901, 0x04ea01, 0x000000, 0x000000, 0x000000, 0x04eb01, 0x000000, 0x000000, - 0x04ec01, 0x000000, 0x000000, 0x000000, 0x04ed02, 0x04ef01, 0x000000, 0x000000, - 0x04f001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x04f101, 0x000000, 0x04f206, - 0x000000, 0x000000, 0x000000, 0x000000, 0x04f801, 0x04f902, 0x04fb0d, 0x050802, - 0x000000, 0x000000, 0x050a01, 0x050b01, 0x050c01, 0x000000, 0x000000, 0x050d01, - 0x050e01, 0x050f06, 0x000000, 0x000000, 0x000000, 0x000000, 0x051502, 0x000000, - 0x051707, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x051e01, 0x051f02, 0x000000, 0x052102, 0x000000, 0x052304, - 0x052701, 0x052801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x052901, 0x052a01, 0x052b0b, 0x000000, 0x053601, 0x000000, 0x053705, - 0x000000, 0x000000, 0x000000, 0x000000, 0x053c01, 0x053d04, 0x000000, 0x05410b, - 0x000000, 0x054c01, 0x000000, 0x000000, 0x000000, 0x054d02, 0x054f01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x055001, 0x000000, 0x000000, - 0x000000, 0x055103, 0x055401, 0x000000, 0x05550d, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x056207, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x056902, 0x000000, 0x056b07, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x057208, 0x000000, 0x000000, 0x000000, 0x000000, 0x057a02, - 0x000000, 0x057c02, 0x000000, 0x000000, 0x057e01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x057f01, 0x058001, 0x000000, 0x058102, 0x000000, 0x000000, - 0x000000, 0x058301, 0x058403, 0x05870d, 0x000000, 0x000000, 0x059416, 0x05aa03, - 0x000000, 0x000000, 0x05ad01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x05ae01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x05af03, 0x000000, 0x000000, 0x000000, 0x000000, 0x05b201, - 0x05b301, 0x05b40e, 0x05c202, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x05c403, 0x000000, 0x05c701, 0x000000, 0x05c805, 0x000000, 0x000000, - 0x05cd09, 0x000000, 0x000000, 0x05d601, 0x000000, 0x000000, 0x000000, 0x05d702, - 0x000000, 0x000000, 0x05d901, 0x05da02, 0x05dc13, 0x05ef01, 0x05f005, 0x000000, - 0x000000, 0x000000, 0x05f502, 0x000000, 0x000000, 0x000000, 0x000000, 0x05f701, - 0x05f804, 0x000000, 0x05fc03, 0x05ff01, 0x000000, 0x000000, 0x000000, 0x060001, - 0x06010b, 0x060c01, 0x000000, 0x060d08, 0x061501, 0x06160d, 0x062301, 0x000000, - 0x062402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x062604, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x062a14, 0x000000, 0x063e04, 0x000000, 0x064201, 0x000000, 0x064301, 0x000000, - 0x064403, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x064702, 0x064901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x064a04, 0x000000, 0x064e01, 0x000000, - 0x064f02, 0x065101, 0x000000, 0x065203, 0x000000, 0x000000, 0x06550c, 0x000000, - 0x000000, 0x000000, 0x000000, 0x066101, 0x000000, 0x000000, 0x000000, 0x066206, - 0x000000, 0x000000, 0x000000, 0x066802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x066a07, 0x000000, 0x000000, - 0x000000, 0x067102, 0x000000, 0x000000, 0x067301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x067401, 0x000000, 0x000000, 0x000000, 0x067501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x067607, 0x000000, 0x067d01, 0x000000, 0x000000, - 0x067e01, 0x067f04, 0x000000, 0x000000, 0x068301, 0x000000, 0x000000, 0x068401, - 0x068502, 0x000000, 0x068701, 0x068801, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x068901, 0x000000, 0x000000, 0x000000, 0x068a01, 0x068b04, 0x068f02, - 0x000000, 0x069105, 0x000000, 0x000000, 0x069611, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x06a701, 0x000000, 0x000000, 0x06a810, 0x000000, 0x000000, - 0x06b80d, 0x000000, 0x000000, 0x000000, 0x000000, 0x06c501, 0x06c602, 0x000000, - 0x000000, 0x000000, 0x000000, 0x06c802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x06ca01, 0x000000, 0x000000, 0x06cb01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x06cc02, 0x06ce02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x06d004, 0x000000, 0x000000, 0x000000, - 0x06d402, 0x000000, 0x000000, 0x000000, 0x06d609, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x06df05, 0x000000, 0x000000, 0x000000, 0x000000, - 0x06e413, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x06f701, 0x000000, - 0x06f802, 0x06fa01, 0x000000, 0x000000, 0x000000, 0x000000, 0x06fb01, 0x06fc01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x06fd01, 0x06fe02, 0x070005, 0x000000, - 0x070501, 0x070602, 0x000000, 0x000000, 0x000000, 0x000000, 0x070802, 0x000000, - 0x070a02, 0x070c01, 0x000000, 0x000000, 0x000000, 0x070d05, 0x071201, 0x000000, - 0x071302, 0x071507, 0x000000, 0x071c01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x071d0b, 0x07280f, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x073709, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x074002, 0x000000, 0x000000, 0x000000, 0x074202, 0x000000, 0x000000, 0x000000, - 0x000000, 0x074405, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x074937, 0x000000, 0x078004, 0x078404, 0x000000, 0x000000, 0x000000, - 0x078801, 0x078901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x078a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x078b02, 0x000000, 0x000000, 0x000000, 0x078d0c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x079902, 0x000000, 0x000000, - 0x079b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x079d07, 0x000000, 0x07a401, - 0x000000, 0x07a507, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x07ac02, - 0x07ae01, 0x000000, 0x000000, 0x000000, 0x000000, 0x07af01, 0x000000, 0x07b002, - 0x000000, 0x07b201, 0x07b301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x07b402, 0x000000, 0x000000, 0x000000, 0x000000, 0x07b601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x07b703, 0x07ba03, 0x000000, 0x07bd02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x07bf04, 0x07c302, 0x000000, 0x000000, - 0x000000, 0x000000, 0x07c50e, 0x07d304, 0x07d704, 0x000000, 0x000000, 0x000000, - 0x07db01, 0x07dc02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x07de01, 0x000000, 0x07df01, 0x07e004, - 0x000000, 0x000000, 0x000000, 0x000000, 0x07e404, 0x000000, 0x000000, 0x07e804, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x07ec07, 0x07f304, 0x07f702, - 0x000000, 0x07f901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x07fa02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x07fc01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x07fd01, 0x07fe01, - 0x000000, 0x07ff01, 0x08000a, 0x000000, 0x080a04, 0x000000, 0x000000, 0x080e01, - 0x000000, 0x080f01, 0x081001, 0x000000, 0x000000, 0x081103, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x081401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x081501, 0x000000, 0x081601, 0x000000, 0x081708, 0x000000, 0x000000, - 0x000000, 0x000000, 0x081f02, 0x082101, 0x082202, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x082401, 0x000000, 0x082502, 0x082701, 0x082810, 0x083802, - 0x000000, 0x000000, 0x000000, 0x000000, 0x083a09, 0x000000, 0x000000, 0x084301, - 0x084403, 0x000000, 0x084702, 0x000000, 0x000000, 0x084901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x084a02, 0x000000, 0x000000, 0x084c02, 0x084e01, - 0x084f02, 0x000000, 0x000000, 0x000000, 0x085107, 0x000000, 0x000000, 0x000000, - 0x085802, 0x085a01, 0x085b01, 0x085c03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x085f01, 0x086001, 0x000000, - 0x000000, 0x086103, 0x086401, 0x000000, 0x000000, 0x000000, 0x000000, 0x086501, - 0x000000, 0x000000, 0x086607, 0x086d01, 0x000000, 0x086e01, 0x000000, 0x086f01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x087001, 0x087120, - 0x000000, 0x000000, 0x089108, 0x089903, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x089c0c, 0x08a803, 0x000000, 0x08ab01, 0x000000, 0x08ac01, - 0x000000, 0x08ad02, 0x08af0d, 0x000000, 0x000000, 0x000000, 0x000000, 0x08bc01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x08bd01, 0x000000, 0x08be02, - 0x08c001, 0x000000, 0x000000, 0x08c101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x08c209, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x08cb01, 0x000000, 0x000000, 0x08cc04, 0x000000, 0x000000, 0x000000, 0x08d001, - 0x08d102, 0x000000, 0x000000, 0x000000, 0x08d302, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x08d502, 0x000000, 0x08d705, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x08dc01, 0x08dd01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x08de02, - 0x000000, 0x08e004, 0x000000, 0x000000, 0x000000, 0x000000, 0x08e401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x08e501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x08e601, 0x000000, 0x08e703, 0x000000, 0x08ea04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x08ee02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x08f001, - 0x08f101, 0x000000, 0x000000, 0x000000, 0x000000, 0x08f201, 0x000000, 0x08f301, - 0x000000, 0x000000, 0x000000, 0x08f402, 0x08f601, 0x08f702, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x08f905, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x08fe02, 0x000000, 0x090001, 0x000000, 0x000000, - 0x090101, 0x000000, 0x090206, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x090801, - 0x090901, 0x090a01, 0x090b02, 0x000000, 0x000000, 0x090d01, 0x000000, 0x090e03, - 0x000000, 0x091101, 0x000000, 0x000000, 0x091201, 0x000000, 0x091302, 0x000000, - 0x091509, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x091e01, 0x000000, 0x091f02, 0x092101, 0x092201, 0x000000, 0x09230f, 0x000000, - 0x000000, 0x000000, 0x093214, 0x000000, 0x094607, 0x000000, 0x094d04, 0x095101, - 0x000000, 0x095207, 0x000000, 0x000000, 0x095901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x095a02, 0x000000, 0x095c01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x095d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x095e03, 0x096102, 0x096304, 0x096703, 0x096a02, 0x000000, 0x000000, - 0x000000, 0x096c02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x096e01, 0x000000, 0x000000, 0x096f01, 0x097002, 0x097201, 0x000000, 0x097305, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x097801, 0x000000, 0x000000, - 0x000000, 0x097901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x097a01, 0x097b01, - 0x000000, 0x097c01, 0x000000, 0x000000, 0x097d04, 0x098102, 0x000000, 0x098305, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x098801, 0x098903, - 0x000000, 0x098c01, 0x000000, 0x000000, 0x098d0b, 0x099802, 0x000000, 0x099a03, - 0x000000, 0x000000, 0x099d02, 0x000000, 0x099f0d, 0x000000, 0x09ac01, 0x000000, - 0x09ad08, 0x09b505, 0x000000, 0x000000, 0x000000, 0x09ba02, 0x000000, 0x000000, - 0x09bc01, 0x000000, 0x000000, 0x09bd01, 0x000000, 0x09be12, 0x000000, 0x09d00a, - 0x09da01, 0x000000, 0x000000, 0x000000, 0x000000, 0x09db04, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x09df01, 0x09e001, 0x09e101, 0x000000, - 0x000000, 0x09e202, 0x000000, 0x09e401, 0x000000, 0x000000, 0x09e501, 0x09e601, - 0x000000, 0x09e701, 0x09e801, 0x000000, 0x09e901, 0x000000, 0x09ea01, 0x09eb05, - 0x000000, 0x000000, 0x000000, 0x09f001, 0x09f102, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x09f301, 0x000000, 0x000000, 0x09f401, - 0x000000, 0x09f505, 0x09fa02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x09fc03, 0x000000, 0x09ff01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0a000f, 0x000000, - 0x0a0f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0a1001, 0x0a1101, 0x000000, 0x000000, 0x000000, 0x0a1201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0a1301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0a1402, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0a1601, 0x000000, 0x0a1704, 0x000000, 0x0a1b02, 0x0a1d01, 0x000000, - 0x000000, 0x000000, 0x0a1e02, 0x000000, 0x000000, 0x000000, 0x000000, 0x0a2001, - 0x0a2101, 0x000000, 0x0a2206, 0x000000, 0x0a2801, 0x0a2901, 0x000000, 0x000000, - 0x0a2a02, 0x000000, 0x0a2c01, 0x000000, 0x000000, 0x000000, 0x0a2d01, 0x0a2e04, - 0x0a3204, 0x000000, 0x0a3602, 0x000000, 0x000000, 0x000000, 0x0a3802, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0a3a01, 0x000000, 0x000000, 0x0a3b01, - 0x000000, 0x000000, 0x000000, 0x0a3c02, 0x000000, 0x0a3e02, 0x000000, 0x0a4003, - 0x000000, 0x000000, 0x0a4301, 0x0a4406, 0x000000, 0x000000, 0x0a4a01, 0x0a4b01, - 0x0a4c02, 0x000000, 0x000000, 0x0a4e03, 0x000000, 0x000000, 0x000000, 0x0a5101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0a5201, 0x000000, 0x0a5305, 0x000000, - 0x0a5806, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0a5e01, - 0x0a5f01, 0x000000, 0x000000, 0x0a6001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0a6101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0a6205, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0a6715, 0x0a7c02, 0x000000, 0x0a7e01, - 0x000000, 0x0a7f01, 0x000000, 0x000000, 0x0a8005, 0x000000, 0x000000, 0x0a8501, - 0x000000, 0x0a8603, 0x000000, 0x000000, 0x0a8903, 0x000000, 0x0a8c05, 0x0a9101, - 0x000000, 0x000000, 0x000000, 0x0a9202, 0x000000, 0x0a9401, 0x0a9501, 0x0a9609, - 0x000000, 0x000000, 0x000000, 0x0a9f0a, 0x0aa905, 0x0aae03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0ab102, 0x0ab307, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0aba01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0abb01, - 0x000000, 0x000000, 0x0abc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0abd02, 0x000000, 0x000000, 0x0abf02, 0x0ac104, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0ac504, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ac901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0aca01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0acb03, 0x0ace01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0acf02, 0x000000, 0x000000, 0x0ad101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ad201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ad301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ad403, 0x0ad707, 0x000000, - 0x000000, 0x0ade01, 0x000000, 0x000000, 0x0adf05, 0x000000, 0x0ae401, 0x000000, - 0x0ae502, 0x000000, 0x000000, 0x000000, 0x0ae701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ae802, - 0x0aea01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0aeb01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0aec02, 0x0aee04, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0af203, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0af501, 0x000000, 0x0af601, 0x0af709, 0x0b0002, 0x0b0202, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0b0401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0b0501, 0x0b0601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0b0704, 0x000000, 0x000000, 0x0b0b06, 0x000000, 0x0b1102, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b1302, 0x000000, - 0x0b1501, 0x000000, 0x000000, 0x0b1602, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b1801, 0x000000, 0x000000, - 0x000000, 0x0b1901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b1a01, - 0x0b1b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b1d01, 0x000000, 0x000000, - 0x0b1e02, 0x000000, 0x0b2004, 0x000000, 0x0b2404, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0b2801, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b2901, - 0x000000, 0x0b2a01, 0x000000, 0x000000, 0x0b2b02, 0x000000, 0x0b2d06, 0x0b3307, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0b3a01, 0x000000, 0x0b3b01, 0x000000, - 0x000000, 0x0b3c01, 0x0b3d06, 0x0b4305, 0x0b4801, 0x0b4901, 0x000000, 0x000000, - 0x0b4a01, 0x000000, 0x000000, 0x0b4b0e, 0x000000, 0x000000, 0x000000, 0x0b5906, - 0x0b5f01, 0x000000, 0x0b6003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0b6312, 0x000000, 0x0b7501, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0b7604, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0b7a01, 0x000000, 0x0b7b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0b7c05, 0x000000, 0x000000, 0x000000, 0x0b8103, 0x000000, - 0x0b8401, 0x000000, 0x000000, 0x0b8504, 0x0b8901, 0x0b8a04, 0x000000, 0x000000, - 0x000000, 0x0b8e02, 0x0b9001, 0x000000, 0x000000, 0x0b9101, 0x000000, 0x0b9201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b9301, 0x0b9401, - 0x0b9501, 0x0b9602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0b9801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b9905, - 0x0b9e07, 0x000000, 0x0ba501, 0x0ba601, 0x0ba705, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0bac01, 0x000000, 0x000000, 0x0bad01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0bae07, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0bb502, 0x000000, - 0x0bb701, 0x0bb801, 0x000000, 0x000000, 0x0bb901, 0x000000, 0x000000, 0x000000, - 0x0bba09, 0x000000, 0x000000, 0x0bc30a, 0x000000, 0x000000, 0x0bcd02, 0x000000, - 0x000000, 0x0bcf01, 0x000000, 0x000000, 0x0bd002, 0x0bd203, 0x000000, 0x000000, - 0x000000, 0x0bd504, 0x000000, 0x000000, 0x000000, 0x000000, 0x0bd901, 0x0bda01, - 0x000000, 0x000000, 0x0bdb03, 0x000000, 0x0bde0a, 0x000000, 0x0be801, 0x000000, - 0x000000, 0x0be901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0bea02, 0x000000, 0x0bec04, 0x000000, 0x000000, 0x000000, 0x000000, 0x0bf001, - 0x000000, 0x0bf105, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0bf60a, 0x000000, 0x000000, 0x0c0001, 0x0c0104, 0x0c0501, - 0x0c0601, 0x000000, 0x0c0706, 0x0c0d01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0c0e05, 0x000000, 0x0c1303, 0x000000, - 0x0c1604, 0x000000, 0x0c1a01, 0x000000, 0x000000, 0x000000, 0x0c1b01, 0x000000, - 0x0c1c01, 0x0c1d14, 0x000000, 0x0c3102, 0x000000, 0x000000, 0x000000, 0x0c3301, - 0x000000, 0x0c3407, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0c3b02, 0x0c3d02, 0x000000, 0x000000, 0x0c3f0b, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0c4a02, 0x000000, 0x000000, 0x0c4c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0c4d01, 0x0c4e01, 0x0c4f06, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0c5502, 0x000000, 0x000000, 0x0c5701, - 0x000000, 0x000000, 0x0c5801, 0x000000, 0x000000, 0x0c5901, 0x000000, 0x0c5a03, - 0x0c5d02, 0x0c5f01, 0x000000, 0x000000, 0x0c6001, 0x0c6101, 0x000000, 0x000000, - 0x0c620b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0c6d02, 0x000000, 0x0c6f04, 0x000000, 0x000000, 0x0c7306, 0x000000, 0x000000, - 0x0c790a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0c8305, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0c8807, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0c8f01, 0x0c9002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0c9201, 0x000000, 0x000000, 0x0c9302, 0x0c9501, 0x000000, 0x0c9601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0c9701, 0x000000, 0x0c9801, 0x0c9902, - 0x000000, 0x0c9b05, 0x0ca006, 0x000000, 0x0ca602, 0x0ca801, 0x0ca909, 0x000000, - 0x000000, 0x0cb201, 0x0cb301, 0x0cb402, 0x0cb605, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0cbb01, 0x000000, 0x000000, - 0x0cbc06, 0x000000, 0x000000, 0x000000, 0x0cc204, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0cc607, 0x000000, 0x000000, - 0x000000, 0x0ccd04, 0x000000, 0x0cd102, 0x000000, 0x000000, 0x000000, 0x0cd301, - 0x000000, 0x000000, 0x000000, 0x0cd401, 0x0cd501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0cd605, 0x0cdb02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0cdd02, 0x0cdf03, 0x000000, 0x000000, 0x0ce201, 0x0ce301, - 0x0ce401, 0x000000, 0x0ce502, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0ce702, 0x0ce902, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0ceb03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0cee01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0cef02, 0x0cf101, 0x0cf203, 0x000000, 0x0cf501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0cf602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0cf801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0cf902, 0x000000, 0x000000, 0x0cfb01, 0x0cfc01, 0x000000, 0x000000, 0x0cfd02, - 0x000000, 0x000000, 0x0cff01, 0x0d0002, 0x0d0204, 0x000000, 0x000000, 0x0d0602, - 0x000000, 0x000000, 0x0d0801, 0x000000, 0x0d0905, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0d0e04, 0x0d1201, 0x000000, 0x000000, 0x000000, 0x0d1303, 0x000000, - 0x000000, 0x0d1603, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0d1901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0d1a0a, 0x000000, 0x000000, 0x0d2401, 0x0d2501, - 0x0d2601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0d2701, - 0x0d2801, 0x000000, 0x0d2903, 0x000000, 0x000000, 0x0d2c03, 0x000000, 0x000000, - 0x0d2f01, 0x000000, 0x000000, 0x0d3002, 0x000000, 0x0d3208, 0x0d3a03, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0d3d0c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0d4901, 0x000000, 0x0d4a21, 0x0d6b01, - 0x0d6c02, 0x0d6e02, 0x000000, 0x000000, 0x0d7001, 0x000000, 0x000000, 0x000000, - 0x0d7107, 0x000000, 0x000000, 0x0d7801, 0x000000, 0x000000, 0x000000, 0x0d7901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0d7a01, - 0x000000, 0x000000, 0x0d7b01, 0x000000, 0x0d7c03, 0x0d7f01, 0x000000, 0x0d8001, - 0x000000, 0x000000, 0x0d8101, 0x000000, 0x0d8201, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0d8309, 0x000000, - 0x000000, 0x0d8c01, 0x0d8d05, 0x000000, 0x000000, 0x0d9205, 0x000000, 0x000000, - 0x000000, 0x0d9707, 0x0d9e02, 0x0da001, 0x000000, 0x0da101, 0x000000, 0x000000, - 0x0da208, 0x0daa01, 0x000000, 0x0dab01, 0x000000, 0x000000, 0x0dac01, 0x000000, - 0x000000, 0x000000, 0x0dad0c, 0x000000, 0x0db902, 0x000000, 0x000000, 0x000000, - 0x0dbb01, 0x0dbc01, 0x000000, 0x000000, 0x000000, 0x0dbd02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0dbf01, 0x0dc001, 0x0dc104, 0x000000, 0x000000, 0x0dc504, - 0x0dc901, 0x000000, 0x000000, 0x000000, 0x000000, 0x0dca05, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0dcf03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0dd202, 0x0dd401, 0x000000, 0x000000, 0x0dd502, 0x0dd703, - 0x000000, 0x0dda01, 0x0ddb02, 0x000000, 0x000000, 0x0ddd03, 0x000000, 0x0de001, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0de101, - 0x000000, 0x0de203, 0x000000, 0x0de501, 0x000000, 0x0de604, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0dea12, 0x000000, - 0x0dfc12, 0x000000, 0x000000, 0x000000, 0x0e0e01, 0x000000, 0x000000, 0x000000, - 0x0e0f01, 0x000000, 0x0e1001, 0x000000, 0x0e1101, 0x0e1203, 0x000000, 0x000000, - 0x0e1502, 0x0e1702, 0x000000, 0x0e1901, 0x0e1a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e1b04, 0x0e1f03, - 0x0e2205, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e2704, 0x0e2b01, - 0x000000, 0x0e2c05, 0x0e3101, 0x0e3201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0e3301, 0x000000, 0x0e3401, 0x000000, 0x000000, 0x0e350d, - 0x0e4201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e4301, - 0x0e4403, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e4701, 0x0e4801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0e4901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0e4a02, 0x000000, 0x0e4c02, 0x0e4e01, 0x0e4f01, 0x000000, 0x0e501b, - 0x000000, 0x0e6b02, 0x000000, 0x000000, 0x000000, 0x0e6d02, 0x0e6f02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0e7102, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0e7301, 0x000000, 0x000000, 0x0e7407, 0x000000, - 0x000000, 0x000000, 0x0e7b01, 0x0e7c02, 0x000000, 0x000000, 0x000000, 0x0e7e01, - 0x0e7f0b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e8a01, 0x000000, - 0x0e8b01, 0x0e8c01, 0x000000, 0x000000, 0x0e8d02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0e8f01, 0x0e9005, 0x000000, 0x0e9501, 0x0e9602, - 0x0e9806, 0x000000, 0x000000, 0x000000, 0x0e9e02, 0x000000, 0x0ea001, 0x000000, - 0x000000, 0x0ea101, 0x000000, 0x000000, 0x0ea201, 0x0ea309, 0x000000, 0x0eac02, - 0x000000, 0x0eae07, 0x0eb501, 0x0eb601, 0x000000, 0x0eb701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0eb802, 0x000000, 0x000000, 0x0eba03, 0x000000, 0x0ebd01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ebe01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ebf01, 0x000000, 0x0ec009, - 0x0ec902, 0x000000, 0x0ecb01, 0x0ecc02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ece14, 0x000000, 0x0ee203, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ee501, 0x0ee601, 0x0ee704, - 0x0eeb01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0eec04, 0x000000, 0x000000, 0x0ef00a, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0efa0d, 0x000000, 0x000000, 0x0f0701, 0x0f0801, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0f0901, 0x0f0a02, 0x0f0c06, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0f1201, 0x000000, 0x0f1302, 0x0f1501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0f160a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0f2001, 0x000000, 0x0f2101, 0x000000, 0x0f220b, 0x0f2d01, - 0x000000, 0x0f2e05, 0x000000, 0x000000, 0x000000, 0x000000, 0x0f3315, 0x0f4801, - 0x000000, 0x0f490b, 0x000000, 0x000000, 0x000000, 0x0f5406, 0x0f5a03, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0f5d07, 0x0f6401, 0x0f6501, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0f6601, 0x000000, 0x000000, 0x000000, 0x0f6701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0f6802, 0x000000, 0x0f6a09, 0x000000, - 0x000000, 0x000000, 0x0f7301, 0x0f7401, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0f7501, 0x000000, 0x0f7606, - 0x0f7c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x0f7d01, 0x000000, 0x000000, - 0x000000, 0x0f7e01, 0x000000, 0x000000, 0x000000, 0x0f7f06, 0x0f8501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0f8602, 0x0f8801, 0x0f8902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0f8b05, 0x000000, 0x0f9001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0f9119, 0x0faa06, - 0x000000, 0x000000, 0x0fb001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0fb101, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0fb204, 0x000000, 0x0fb604, 0x000000, 0x000000, - 0x000000, 0x0fba01, 0x0fbb03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0fbe03, 0x0fc101, 0x000000, 0x000000, 0x0fc202, - 0x0fc402, 0x0fc601, 0x0fc713, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0fda01, 0x000000, 0x0fdb01, 0x0fdc01, 0x000000, 0x0fdd01, 0x0fde03, 0x0fe106, - 0x000000, 0x000000, 0x0fe710, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0ff703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ffa03, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0ffd01, 0x0ffe01, 0x000000, 0x000000, 0x0fff02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x100101, 0x100202, 0x000000, - 0x000000, 0x000000, 0x100403, 0x000000, 0x100701, 0x000000, 0x000000, 0x000000, - 0x100803, 0x100b05, 0x000000, 0x101002, 0x000000, 0x000000, 0x101201, 0x10130a, - 0x000000, 0x101d01, 0x000000, 0x000000, 0x101e01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x101f04, 0x102301, 0x102401, 0x000000, - 0x102503, 0x000000, 0x000000, 0x000000, 0x102804, 0x000000, 0x000000, 0x102c03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x102f02, 0x103101, 0x103201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1033a3, 0x000000, 0x000000, 0x10d603, 0x000000, - 0x000000, 0x000000, 0x10d90f, 0x10e802, 0x000000, 0x10ea01, 0x10eb01, 0x000000, - 0x10ec01, 0x000000, 0x10ed01, 0x000000, 0x000000, 0x000000, 0x10ee01, 0x000000, - 0x10ef01, 0x000000, 0x000000, 0x000000, 0x10f005, 0x000000, 0x000000, 0x000000, - 0x10f503, 0x10f801, 0x10f904, 0x10fd01, 0x000000, 0x10fe01, 0x10ff02, 0x000000, - 0x110101, 0x110209, 0x000000, 0x000000, 0x110b05, 0x000000, 0x000000, 0x000000, - 0x000000, 0x111004, 0x000000, 0x000000, 0x000000, 0x111401, 0x000000, 0x111503, - 0x000000, 0x000000, 0x000000, 0x000000, 0x111801, 0x000000, 0x000000, 0x000000, - 0x000000, 0x111902, 0x000000, 0x000000, 0x000000, 0x111b01, 0x000000, 0x000000, - 0x000000, 0x111c01, 0x111d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x111f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x112001, - 0x000000, 0x000000, 0x000000, 0x112105, 0x000000, 0x000000, 0x000000, 0x112607, - 0x112d09, 0x000000, 0x000000, 0x000000, 0x000000, 0x113602, 0x113801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x113901, 0x000000, 0x000000, 0x113a03, 0x000000, - 0x113d01, 0x113e03, 0x114109, 0x000000, 0x114a01, 0x114b02, 0x114d01, 0x000000, - 0x114e11, 0x000000, 0x115f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x116002, 0x000000, 0x000000, 0x000000, 0x116201, 0x116301, 0x000000, 0x116401, - 0x116502, 0x000000, 0x116703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x116a04, 0x000000, 0x116e03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x117101, 0x000000, 0x117202, 0x000000, 0x117401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x117501, 0x117602, 0x000000, 0x117802, - 0x000000, 0x000000, 0x117a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x117c01, - 0x117d01, 0x000000, 0x000000, 0x000000, 0x117e02, 0x118001, 0x000000, 0x118102, - 0x000000, 0x118302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x118502, 0x000000, 0x000000, 0x118709, 0x000000, 0x000000, 0x11900b, - 0x000000, 0x119b02, 0x000000, 0x000000, 0x119d01, 0x119e09, 0x000000, 0x11a703, - 0x11aa01, 0x000000, 0x11ab01, 0x000000, 0x11ac02, 0x000000, 0x11ae01, 0x000000, - 0x000000, 0x11af02, 0x000000, 0x000000, 0x000000, 0x000000, 0x11b101, 0x000000, - 0x11b201, 0x000000, 0x000000, 0x11b301, 0x000000, 0x000000, 0x000000, 0x11b402, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x11b601, 0x000000, 0x000000, - 0x000000, 0x11b705, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x11bc02, - 0x11be01, 0x11bf01, 0x11c002, 0x11c201, 0x000000, 0x11c302, 0x000000, 0x000000, - 0x000000, 0x000000, 0x11c501, 0x11c602, 0x000000, 0x11c809, 0x000000, 0x000000, - 0x000000, 0x000000, 0x11d109, 0x000000, 0x000000, 0x11da03, 0x000000, 0x000000, - 0x000000, 0x11dd01, 0x000000, 0x000000, 0x000000, 0x11de01, 0x000000, 0x11df01, - 0x000000, 0x11e004, 0x000000, 0x000000, 0x000000, 0x11e401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x11e504, 0x000000, 0x000000, 0x11e902, 0x000000, - 0x000000, 0x000000, 0x11eb09, 0x000000, 0x000000, 0x11f401, 0x000000, 0x11f512, - 0x000000, 0x000000, 0x000000, 0x000000, 0x120701, 0x120801, 0x000000, 0x120901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x120a01, 0x000000, 0x120b01, 0x000000, - 0x000000, 0x120c03, 0x000000, 0x120f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x121020, 0x000000, 0x000000, 0x000000, 0x000000, 0x123002, 0x000000, - 0x123208, 0x000000, 0x123a01, 0x000000, 0x000000, 0x000000, 0x123b02, 0x123d02, - 0x000000, 0x123f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x124003, - 0x12430b, 0x000000, 0x000000, 0x000000, 0x000000, 0x124e0a, 0x000000, 0x000000, - 0x000000, 0x000000, 0x125802, 0x000000, 0x000000, 0x000000, 0x000000, 0x125a02, - 0x000000, 0x125c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x125d04, 0x000000, - 0x000000, 0x126107, 0x000000, 0x000000, 0x126801, 0x000000, 0x000000, 0x000000, - 0x126901, 0x126a01, 0x126b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x126c03, - 0x000000, 0x000000, 0x126f01, 0x000000, 0x127008, 0x127806, 0x127e02, 0x000000, - 0x000000, 0x000000, 0x128002, 0x000000, 0x000000, 0x000000, 0x128201, 0x000000, - 0x000000, 0x000000, 0x128301, 0x000000, 0x000000, 0x000000, 0x128401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x128503, 0x000000, 0x128801, 0x128901, - 0x128a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x128b01, 0x000000, 0x000000, 0x000000, 0x128c02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x128e23, 0x12b101, 0x000000, 0x12b201, 0x000000, - 0x12b308, 0x12bb01, 0x000000, 0x000000, 0x12bc01, 0x12bd01, 0x000000, 0x12be07, - 0x12c501, 0x12c602, 0x000000, 0x000000, 0x000000, 0x000000, 0x12c801, 0x12c901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x12ca01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x12cb01, 0x000000, 0x12cc02, 0x000000, - 0x000000, 0x12ce06, 0x000000, 0x12d401, 0x12d501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x12d601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x12d702, 0x000000, 0x000000, 0x000000, - 0x000000, 0x12d902, 0x000000, 0x000000, 0x000000, 0x12db01, 0x000000, 0x12dc0e, - 0x000000, 0x000000, 0x000000, 0x12ea04, 0x000000, 0x000000, 0x12ee06, 0x000000, - 0x12f402, 0x12f603, 0x12f901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x12fa05, 0x000000, 0x12ff0f, 0x000000, 0x000000, 0x130e01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x130f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x131001, - 0x000000, 0x131101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x131201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x131302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x131501, 0x131601, - 0x131706, 0x131d02, 0x131f06, 0x000000, 0x132503, 0x000000, 0x000000, 0x13280a, - 0x000000, 0x000000, 0x133201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x133301, 0x133402, 0x133602, 0x133805, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x133d01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x133e02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x134001, 0x000000, 0x134101, 0x134207, 0x000000, 0x13490e, 0x000000, - 0x135701, 0x000000, 0x135804, 0x135c03, 0x135f04, 0x136337, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x139a01, 0x139b02, 0x139d01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x139e01, 0x000000, 0x000000, - 0x000000, 0x139f01, 0x000000, 0x000000, 0x000000, 0x13a003, 0x000000, 0x000000, - 0x000000, 0x000000, 0x13a301, 0x000000, 0x000000, 0x000000, 0x000000, 0x13a401, - 0x13a501, 0x13a602, 0x000000, 0x13a801, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x13a901, 0x13aa01, 0x000000, - 0x13ab01, 0x000000, 0x000000, 0x13ac01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x13ad01, 0x000000, 0x000000, 0x13ae02, 0x000000, 0x000000, 0x000000, 0x13b001, - 0x13b102, 0x000000, 0x000000, 0x000000, 0x000000, 0x13b305, 0x13b805, 0x13bd01, - 0x000000, 0x13be02, 0x000000, 0x13c003, 0x000000, 0x000000, 0x000000, 0x13c303, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x13c601, 0x000000, 0x13c701, - 0x13c802, 0x000000, 0x13ca01, 0x000000, 0x000000, 0x000000, 0x13cb08, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x13d301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x13d401, 0x000000, 0x000000, 0x13d502, 0x13d703, - 0x000000, 0x000000, 0x13da02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x13dc0d, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x13e901, 0x13ea02, 0x13ec04, 0x13f002, 0x13f201, 0x000000, - 0x13f301, 0x000000, 0x13f401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x13f507, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x13fc01, 0x13fd03, 0x000000, 0x140001, 0x000000, 0x140108, 0x000000, 0x000000, - 0x140907, 0x000000, 0x000000, 0x000000, 0x14100b, 0x000000, 0x000000, 0x000000, - 0x141b03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x141e03, 0x142101, 0x000000, 0x000000, 0x000000, 0x142201, 0x000000, 0x000000, - 0x142303, 0x142602, 0x142801, 0x000000, 0x000000, 0x000000, 0x000000, 0x142901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x142a01, 0x142b02, 0x000000, 0x142d01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x142e05, 0x000000, 0x000000, 0x000000, 0x143306, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x143901, 0x143a0b, 0x000000, - 0x000000, 0x144501, 0x000000, 0x000000, 0x144601, 0x144702, 0x144904, 0x000000, - 0x000000, 0x144d03, 0x145002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x145203, 0x000000, 0x145503, 0x145804, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x145c01, 0x000000, 0x145d02, 0x145f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x146001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x146101, 0x14620c, 0x000000, 0x146e0d, - 0x000000, 0x000000, 0x147b05, 0x148005, 0x000000, 0x148501, 0x000000, 0x148602, - 0x000000, 0x000000, 0x148801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x148902, 0x000000, 0x148b0a, 0x149507, 0x000000, 0x149c03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x149f01, 0x14a001, 0x14a101, 0x14a201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x14a301, 0x000000, 0x14a402, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x14a601, 0x14a701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x14a802, 0x14aa03, 0x000000, 0x000000, 0x14ad01, 0x000000, 0x000000, - 0x14ae09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x14b702, 0x000000, 0x000000, 0x14b901, 0x14ba01, 0x14bb01, 0x000000, 0x14bc01, - 0x000000, 0x000000, 0x14bd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x14be01, - 0x14bf01, 0x000000, 0x14c003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x14c301, 0x000000, 0x000000, 0x000000, 0x14c408, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x14cc01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x14cd01, 0x000000, 0x14ce02, - 0x14d003, 0x000000, 0x14d306, 0x000000, 0x000000, 0x000000, 0x000000, 0x14d902, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x14db01, 0x000000, 0x000000, 0x14dc01, 0x000000, 0x000000, 0x000000, 0x14dd01, - 0x000000, 0x14de01, 0x14df01, 0x000000, 0x000000, 0x14e002, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x14e201, 0x14e301, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x14e401, - 0x000000, 0x14e504, 0x000000, 0x14e904, 0x000000, 0x000000, 0x000000, 0x000000, - 0x14ed01, 0x000000, 0x000000, 0x14ee02, 0x000000, 0x000000, 0x14f004, 0x000000, - 0x000000, 0x14f402, 0x000000, 0x14f606, 0x000000, 0x14fc06, 0x000000, 0x000000, - 0x000000, 0x150201, 0x000000, 0x000000, 0x000000, 0x150302, 0x000000, 0x000000, - 0x000000, 0x150502, 0x000000, 0x150701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x150802, 0x000000, 0x000000, 0x000000, 0x000000, 0x150a01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x150b02, 0x150d03, - 0x151003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x151301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x151405, 0x151901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x151a01, 0x000000, 0x000000, 0x000000, 0x151b01, 0x151c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x151d04, 0x000000, 0x000000, 0x000000, 0x000000, 0x152101, - 0x000000, 0x000000, 0x152204, 0x000000, 0x152601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x152712, 0x153904, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x153d02, 0x000000, - 0x153f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x154001, - 0x154101, 0x000000, 0x000000, 0x000000, 0x154201, 0x154303, 0x154601, 0x000000, - 0x000000, 0x154701, 0x154802, 0x154a05, 0x000000, 0x000000, 0x000000, 0x154f01, - 0x155002, 0x000000, 0x000000, 0x000000, 0x155202, 0x000000, 0x000000, 0x000000, - 0x155403, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x155702, - 0x000000, 0x155901, 0x000000, 0x000000, 0x155a03, 0x000000, 0x155d03, 0x000000, - 0x000000, 0x156001, 0x000000, 0x000000, 0x156102, 0x000000, 0x000000, 0x156301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x156407, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x156b01, 0x000000, 0x000000, 0x156c01, 0x156d02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x156f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x157012, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x158203, 0x000000, 0x000000, 0x000000, 0x158501, - 0x000000, 0x158601, 0x000000, 0x000000, 0x158701, 0x000000, 0x000000, 0x000000, - 0x158802, 0x000000, 0x158a01, 0x000000, 0x000000, 0x158b01, 0x158c01, 0x000000, - 0x158d04, 0x000000, 0x000000, 0x15910c, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x159d01, 0x159e01, 0x000000, 0x000000, 0x159f02, 0x000000, 0x15a105, - 0x000000, 0x000000, 0x15a601, 0x000000, 0x15a701, 0x000000, 0x000000, 0x15a802, - 0x000000, 0x15aa0a, 0x000000, 0x15b401, 0x000000, 0x000000, 0x15b502, 0x000000, - 0x15b707, 0x15be01, 0x000000, 0x000000, 0x000000, 0x000000, 0x15bf03, 0x000000, - 0x000000, 0x000000, 0x15c202, 0x15c401, 0x000000, 0x15c501, 0x000000, 0x15c602, - 0x000000, 0x000000, 0x000000, 0x000000, 0x15c815, 0x000000, 0x000000, 0x15dd02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x15df09, 0x15e801, 0x000000, 0x000000, 0x000000, 0x000000, 0x15e902, - 0x000000, 0x000000, 0x15eb0c, 0x000000, 0x15f701, 0x000000, 0x15f804, 0x000000, - 0x000000, 0x000000, 0x15fc0c, 0x000000, 0x160801, 0x000000, 0x160901, 0x160a08, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x161201, 0x000000, - 0x000000, 0x000000, 0x161301, 0x161408, 0x000000, 0x161c01, 0x161d10, 0x162d01, - 0x000000, 0x162e06, 0x000000, 0x000000, 0x000000, 0x000000, 0x163401, 0x163504, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x163902, 0x163b0b, 0x000000, - 0x164603, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x164901, 0x000000, - 0x000000, 0x000000, 0x000000, 0x164a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x164b01, 0x000000, 0x000000, 0x164c01, 0x000000, 0x164d02, - 0x000000, 0x000000, 0x000000, 0x164f15, 0x000000, 0x166401, 0x000000, 0x166501, - 0x166609, 0x000000, 0x000000, 0x166f07, 0x167601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x167702, 0x000000, 0x167903, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x167c01, 0x167d02, 0x000000, 0x167f01, 0x168002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x168201, 0x168301, 0x168401, 0x000000, 0x168501, - 0x000000, 0x168601, 0x168702, 0x000000, 0x168906, 0x000000, 0x000000, 0x000000, - 0x000000, 0x168f04, 0x169302, 0x000000, 0x000000, 0x000000, 0x000000, 0x169502, - 0x000000, 0x000000, 0x000000, 0x000000, 0x169704, 0x000000, 0x000000, 0x169b09, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x16a402, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x16a602, 0x000000, 0x000000, 0x16a80a, 0x000000, - 0x000000, 0x000000, 0x16b205, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x16b70b, 0x000000, 0x000000, 0x16c203, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x16c501, 0x16c601, 0x000000, - 0x000000, 0x16c701, 0x000000, 0x000000, 0x16c802, 0x000000, 0x16ca09, 0x16d301, - 0x16d401, 0x000000, 0x16d504, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x16d902, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x16db03, 0x000000, - 0x16de02, 0x16e002, 0x000000, 0x000000, 0x16e202, 0x000000, 0x16e402, 0x000000, - 0x000000, 0x16e602, 0x000000, 0x16e808, 0x000000, 0x000000, 0x000000, 0x16f002, - 0x16f202, 0x000000, 0x000000, 0x000000, 0x16f402, 0x000000, 0x16f609, 0x000000, - 0x000000, 0x000000, 0x16ff01, 0x000000, 0x000000, 0x170002, 0x170203, 0x000000, - 0x170501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x170602, - 0x000000, 0x17080a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x171204, 0x000000, 0x171601, 0x000000, 0x000000, 0x171701, 0x000000, 0x171809, - 0x172102, 0x172303, 0x000000, 0x172601, 0x172701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x172801, 0x172903, 0x000000, 0x172c10, 0x000000, 0x000000, 0x000000, - 0x000000, 0x173c02, 0x000000, 0x000000, 0x173e02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x174001, 0x000000, 0x000000, - 0x174105, 0x000000, 0x174601, 0x174701, 0x174803, 0x000000, 0x174b0c, 0x000000, - 0x000000, 0x000000, 0x175702, 0x175909, 0x176203, 0x176501, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x176601, 0x000000, 0x176702, 0x000000, 0x000000, - 0x000000, 0x176901, 0x176a01, 0x000000, 0x000000, 0x176b05, 0x000000, 0x000000, - 0x177002, 0x177204, 0x000000, 0x000000, 0x000000, 0x000000, 0x177601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x177701, 0x000000, 0x000000, 0x177801, - 0x000000, 0x177901, 0x000000, 0x000000, 0x000000, 0x177a04, 0x177e02, 0x000000, - 0x178002, 0x000000, 0x178204, 0x000000, 0x178602, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x178801, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x178904, - 0x000000, 0x178d02, 0x000000, 0x000000, 0x178f01, 0x000000, 0x000000, 0x000000, - 0x179005, 0x179502, 0x179701, 0x000000, 0x000000, 0x000000, 0x179804, 0x179c01, - 0x000000, 0x000000, 0x179d07, 0x000000, 0x000000, 0x17a401, 0x000000, 0x000000, - 0x17a501, 0x000000, 0x17a602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x17a806, 0x000000, 0x17ae01, 0x000000, 0x000000, 0x000000, 0x17af02, - 0x000000, 0x17b105, 0x17b601, 0x17b703, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x17ba01, 0x17bb01, 0x000000, 0x000000, 0x17bc01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x17bd01, 0x17be01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x17bf03, 0x000000, 0x17c201, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x17c304, 0x000000, 0x000000, 0x17c701, 0x000000, 0x17c804, - 0x000000, 0x000000, 0x17cc0c, 0x17d802, 0x000000, 0x000000, 0x17da03, 0x000000, - 0x17dd01, 0x000000, 0x000000, 0x000000, 0x17de0e, 0x17ec01, 0x17ed03, 0x000000, - 0x000000, 0x000000, 0x17f001, 0x000000, 0x000000, 0x000000, 0x000000, 0x17f101, - 0x000000, 0x000000, 0x000000, 0x17f203, 0x17f508, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x17fd02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x17ff02, 0x000000, 0x000000, 0x180105, 0x180602, 0x180803, 0x000000, - 0x180b07, 0x000000, 0x181211, 0x000000, 0x182301, 0x182401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x182502, 0x000000, 0x000000, 0x000000, 0x000000, - 0x18270b, 0x18320b, 0x000000, 0x000000, 0x183d02, 0x000000, 0x183f04, 0x000000, - 0x000000, 0x184301, 0x184401, 0x184501, 0x000000, 0x18460d, 0x000000, 0x000000, - 0x000000, 0x185306, 0x000000, 0x000000, 0x000000, 0x185901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x185a05, 0x185f02, 0x000000, 0x186101, - 0x186201, 0x186306, 0x000000, 0x186905, 0x186e02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x187001, 0x000000, 0x000000, 0x000000, 0x187114, 0x188506, - 0x000000, 0x188b01, 0x000000, 0x000000, 0x000000, 0x188c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x188d22, 0x000000, - 0x000000, 0x000000, 0x18af02, 0x000000, 0x000000, 0x18b10a, 0x18bb02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x18bd01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x18be02, - 0x000000, 0x000000, 0x18c001, 0x000000, 0x18c101, 0x000000, 0x18c201, 0x18c310, - 0x000000, 0x000000, 0x18d301, 0x18d40c, 0x18e001, 0x000000, 0x000000, 0x000000, - 0x18e101, 0x18e201, 0x18e301, 0x000000, 0x18e403, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x18e706, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x18ed01, 0x18ee01, 0x18ef02, 0x000000, 0x000000, 0x000000, 0x000000, 0x18f103, - 0x000000, 0x18f408, 0x18fc03, 0x18ff0b, 0x190a03, 0x000000, 0x190d01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x190e01, 0x190f01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x191001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x191102, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x191301, 0x000000, 0x191402, 0x191602, 0x191804, - 0x000000, 0x191c01, 0x191d03, 0x000000, 0x192005, 0x192501, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x192601, 0x192701, 0x000000, 0x000000, 0x192803, 0x000000, 0x000000, 0x192b02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x192d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x192e01, 0x192f02, 0x000000, 0x000000, 0x193104, 0x000000, 0x000000, - 0x000000, 0x193501, 0x000000, 0x000000, 0x193606, 0x000000, 0x193c01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x193d01, 0x000000, 0x000000, - 0x193e01, 0x000000, 0x193f01, 0x000000, 0x194002, 0x194201, 0x000000, 0x000000, - 0x000000, 0x19430b, 0x000000, 0x194e01, 0x194f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x195004, 0x000000, 0x000000, 0x195402, - 0x195606, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x195c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x195d01, 0x195e01, 0x195f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x196109, 0x000000, 0x000000, 0x000000, 0x196a01, 0x196b03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x196e01, 0x196f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x197001, 0x000000, - 0x000000, 0x000000, 0x197102, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x197301, 0x000000, 0x000000, 0x197401, 0x197501, 0x000000, 0x000000, 0x000000, - 0x197601, 0x197701, 0x197802, 0x000000, 0x197a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x197b04, 0x197f02, 0x000000, 0x198102, 0x000000, 0x000000, 0x19832e, - 0x000000, 0x19b105, 0x000000, 0x000000, 0x000000, 0x19b601, 0x000000, 0x19b703, - 0x000000, 0x000000, 0x000000, 0x19ba03, 0x000000, 0x000000, 0x000000, 0x19bd01, - 0x000000, 0x19be01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x19bf01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x19c001, 0x19c105, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x19c601, 0x19c701, 0x000000, 0x000000, 0x19c801, - 0x19c902, 0x19cb04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x19cf02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x19d101, 0x19d204, 0x000000, 0x19d601, 0x000000, 0x19d702, 0x19d902, - 0x19db11, 0x000000, 0x19ec02, 0x000000, 0x000000, 0x000000, 0x000000, 0x19ee02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x19f001, 0x000000, 0x19f105, 0x000000, - 0x000000, 0x000000, 0x19f60d, 0x000000, 0x1a0303, 0x1a0601, 0x000000, 0x1a0702, - 0x000000, 0x1a0903, 0x1a0c06, 0x000000, 0x1a1201, 0x1a1301, 0x1a1401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1a1501, 0x000000, 0x000000, 0x000000, 0x1a1601, 0x000000, 0x1a170d, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1a240b, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1a2f01, 0x1a3001, 0x1a3105, 0x000000, 0x000000, 0x1a3602, 0x1a3803, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1a3b01, 0x000000, 0x000000, 0x000000, - 0x1a3c02, 0x000000, 0x1a3e05, 0x1a4301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1a4401, 0x1a4502, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1a4701, 0x1a4806, 0x1a4e02, 0x000000, 0x1a5005, - 0x1a5501, 0x000000, 0x000000, 0x1a5607, 0x1a5d01, 0x000000, 0x1a5e01, 0x000000, - 0x000000, 0x1a5f01, 0x1a6001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1a6102, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1a6307, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1a6a01, 0x000000, - 0x000000, 0x1a6b01, 0x1a6c05, 0x000000, 0x000000, 0x000000, 0x1a7106, 0x000000, - 0x000000, 0x000000, 0x1a7704, 0x1a7b01, 0x000000, 0x1a7c02, 0x000000, 0x000000, - 0x000000, 0x1a7e01, 0x000000, 0x1a7f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1a8007, - 0x000000, 0x000000, 0x000000, 0x1a8701, 0x000000, 0x000000, 0x000000, 0x1a8809, - 0x000000, 0x000000, 0x1a9101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1a9201, 0x000000, 0x000000, 0x000000, 0x1a9308, 0x000000, 0x000000, 0x000000, - 0x1a9b0b, 0x000000, 0x000000, 0x1aa601, 0x000000, 0x1aa70f, 0x1ab60d, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1ac302, 0x000000, 0x000000, 0x1ac502, 0x000000, - 0x1ac701, 0x1ac80a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1ad201, 0x000000, 0x1ad302, 0x1ad502, 0x1ad701, - 0x000000, 0x000000, 0x000000, 0x1ad801, 0x1ad901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1ada02, 0x000000, 0x000000, 0x1adc01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1add01, 0x000000, 0x000000, - 0x000000, 0x1ade01, 0x000000, 0x1adf07, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1ae601, 0x000000, - 0x1ae703, 0x1aea02, 0x1aec02, 0x000000, 0x1aee04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1af202, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1af409, 0x000000, 0x000000, 0x000000, 0x000000, 0x1afd01, - 0x000000, 0x1afe01, 0x000000, 0x000000, 0x1aff01, 0x000000, 0x000000, 0x1b0001, - 0x1b0101, 0x000000, 0x000000, 0x000000, 0x1b0201, 0x000000, 0x000000, 0x000000, - 0x1b0303, 0x1b0605, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1b0b01, 0x000000, 0x1b0c01, 0x000000, 0x000000, 0x000000, 0x1b0d01, 0x1b0e01, - 0x1b0f01, 0x000000, 0x1b1001, 0x000000, 0x1b1101, 0x000000, 0x000000, 0x1b1204, - 0x1b1601, 0x000000, 0x1b1703, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b1a01, - 0x1b1b01, 0x1b1c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1b1d06, 0x1b2301, 0x1b2403, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1b2702, 0x1b2909, 0x1b3202, 0x1b3401, 0x1b3501, - 0x000000, 0x000000, 0x1b3601, 0x1b3701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b3801, 0x000000, 0x000000, - 0x1b3909, 0x1b4201, 0x000000, 0x000000, 0x1b4303, 0x000000, 0x000000, 0x1b4601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b4704, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b4b02, 0x1b4d02, 0x1b4f03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b5211, - 0x000000, 0x000000, 0x000000, 0x1b6307, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b6a02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b6c01, 0x000000, - 0x000000, 0x1b6d01, 0x1b6e05, 0x1b7302, 0x000000, 0x1b7503, 0x1b7805, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b7d01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1b7e07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b8501, 0x000000, - 0x1b8601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1b8704, 0x1b8b02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1b8d06, 0x000000, 0x1b9301, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1b9404, 0x000000, 0x1b9802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1b9a02, 0x1b9c01, 0x000000, 0x1b9d01, 0x1b9e01, 0x1b9f06, 0x000000, - 0x000000, 0x1ba502, 0x000000, 0x1ba701, 0x1ba802, 0x000000, 0x1baa01, 0x000000, - 0x000000, 0x000000, 0x1bab03, 0x1bae01, 0x1baf02, 0x000000, 0x000000, 0x1bb103, - 0x000000, 0x1bb40e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1bc201, 0x000000, 0x000000, 0x1bc302, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1bc504, 0x000000, 0x1bc901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1bca01, - 0x000000, 0x1bcb01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1bcc01, - 0x000000, 0x000000, 0x1bcd06, 0x000000, 0x000000, 0x1bd301, 0x000000, 0x1bd401, - 0x000000, 0x000000, 0x1bd502, 0x000000, 0x000000, 0x000000, 0x000000, 0x1bd701, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1bd801, 0x000000, 0x1bd902, - 0x000000, 0x1bdb01, 0x1bdc01, 0x000000, 0x000000, 0x1bdd05, 0x000000, 0x000000, - 0x1be209, 0x000000, 0x1beb02, 0x1bed02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1bef01, 0x000000, 0x000000, 0x000000, 0x1bf003, 0x1bf301, 0x1bf401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1bf505, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1bfa02, - 0x1bfc04, 0x1c0002, 0x000000, 0x1c0201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1c0301, 0x000000, 0x1c0408, - 0x1c0c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1c0d03, 0x1c1002, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1c120e, 0x000000, 0x1c2003, 0x1c2302, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1c2501, 0x1c2604, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1c2a05, 0x1c2f02, 0x000000, 0x1c3108, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1c3902, 0x1c3b02, 0x1c3d02, 0x1c3f01, 0x1c4002, - 0x1c4202, 0x1c4401, 0x000000, 0x000000, 0x000000, 0x000000, 0x1c4503, 0x1c4801, - 0x000000, 0x1c4905, 0x000000, 0x000000, 0x1c4e13, 0x000000, 0x000000, 0x000000, - 0x1c6117, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1c7801, 0x000000, 0x000000, 0x1c7901, 0x1c7a01, 0x000000, 0x000000, 0x1c7b05, - 0x000000, 0x1c8003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1c8301, 0x000000, 0x1c8401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1c8503, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1c8802, 0x000000, 0x000000, 0x000000, 0x000000, 0x1c8a01, 0x000000, 0x1c8b02, - 0x000000, 0x1c8d19, 0x000000, 0x1ca602, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1ca806, 0x000000, 0x1cae04, 0x1cb201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1cb301, 0x000000, 0x1cb401, 0x1cb502, - 0x1cb702, 0x1cb903, 0x000000, 0x000000, 0x000000, 0x000000, 0x1cbc01, 0x000000, - 0x1cbd08, 0x1cc501, 0x000000, 0x1cc601, 0x1cc705, 0x000000, 0x000000, 0x1ccc01, - 0x000000, 0x000000, 0x000000, 0x1ccd02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1ccf01, 0x000000, 0x000000, 0x000000, 0x1cd001, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1cd101, 0x000000, 0x1cd201, - 0x1cd303, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1cd603, 0x000000, - 0x000000, 0x1cd90c, 0x000000, 0x000000, 0x000000, 0x000000, 0x1ce501, 0x000000, - 0x000000, 0x000000, 0x1ce601, 0x1ce701, 0x000000, 0x1ce801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1ce903, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1cec01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1ced0f, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1cfc06, 0x1d0202, 0x1d0406, 0x000000, 0x000000, 0x000000, - 0x1d0a01, 0x000000, 0x000000, 0x1d0b01, 0x000000, 0x000000, 0x000000, 0x1d0c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1d0d05, 0x1d1203, - 0x000000, 0x1d1502, 0x000000, 0x1d1708, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1d1f01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1d2004, 0x000000, 0x000000, 0x1d2401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1d2501, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1d2603, 0x1d2906, 0x1d2f04, 0x000000, - 0x1d330e, 0x000000, 0x000000, 0x1d4101, 0x000000, 0x1d4202, 0x000000, 0x000000, - 0x1d4405, 0x000000, 0x000000, 0x000000, 0x1d4901, 0x1d4a09, 0x000000, 0x000000, - 0x1d5304, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1d5701, 0x000000, - 0x000000, 0x000000, 0x1d5801, 0x1d5902, 0x1d5b02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1d5d01, 0x000000, 0x000000, 0x1d5e02, 0x1d6001, 0x1d6104, 0x000000, - 0x000000, 0x000000, 0x1d6503, 0x000000, 0x000000, 0x1d6802, 0x000000, 0x000000, - 0x1d6a05, 0x000000, 0x1d6f02, 0x000000, 0x1d7101, 0x000000, 0x1d7202, 0x000000, - 0x000000, 0x1d7401, 0x1d7504, 0x1d7901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1d7a01, 0x000000, 0x1d7b02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1d7d02, 0x000000, 0x000000, 0x1d7f01, 0x1d8001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1d8109, 0x1d8a0a, 0x000000, 0x1d9401, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1d9502, 0x1d9702, 0x000000, 0x1d9903, 0x1d9c02, 0x1d9e01, - 0x000000, 0x000000, 0x000000, 0x1d9f03, 0x000000, 0x1da202, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1da405, 0x000000, 0x000000, 0x000000, 0x1da901, - 0x000000, 0x000000, 0x1daa05, 0x000000, 0x000000, 0x1daf02, 0x1db108, 0x1db902, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1dbb01, 0x000000, 0x1dbc01, - 0x1dbd01, 0x000000, 0x000000, 0x1dbe01, 0x000000, 0x000000, 0x1dbf04, 0x000000, - 0x1dc301, 0x000000, 0x1dc401, 0x1dc501, 0x000000, 0x1dc603, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1dc901, 0x000000, 0x000000, 0x000000, 0x000000, 0x1dca02, - 0x1dcc02, 0x1dce02, 0x000000, 0x000000, 0x1dd006, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1dd601, 0x000000, 0x1dd702, 0x1dd901, 0x000000, 0x000000, - 0x1dda01, 0x000000, 0x000000, 0x000000, 0x000000, 0x1ddb01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1ddc10, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1dec01, 0x1ded01, 0x1dee02, 0x1df001, 0x000000, - 0x1df101, 0x000000, 0x1df211, 0x000000, 0x1e0304, 0x1e0702, 0x1e0901, 0x000000, - 0x1e0a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e0b08, - 0x000000, 0x000000, 0x1e1307, 0x000000, 0x1e1a01, 0x000000, 0x1e1b01, 0x000000, - 0x1e1c0c, 0x000000, 0x1e2801, 0x000000, 0x000000, 0x000000, 0x1e2902, 0x000000, - 0x1e2b05, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e3002, - 0x1e3201, 0x000000, 0x1e3301, 0x000000, 0x1e3402, 0x1e3604, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e3a02, 0x000000, 0x000000, - 0x1e3c04, 0x1e4003, 0x000000, 0x1e4303, 0x000000, 0x000000, 0x000000, 0x1e4601, - 0x000000, 0x000000, 0x000000, 0x1e4701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1e4803, 0x000000, 0x000000, 0x1e4b01, 0x000000, - 0x1e4c02, 0x000000, 0x1e4e01, 0x000000, 0x1e4f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1e5007, 0x1e5701, 0x000000, 0x000000, 0x1e5801, 0x000000, 0x000000, - 0x1e5901, 0x000000, 0x000000, 0x1e5a01, 0x000000, 0x000000, 0x1e5b01, 0x000000, - 0x000000, 0x1e5c05, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e6105, - 0x1e6601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e6701, 0x1e6805, - 0x000000, 0x1e6d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e6f06, 0x000000, - 0x1e7501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e760b, 0x000000, - 0x1e8103, 0x000000, 0x000000, 0x1e8401, 0x000000, 0x1e8502, 0x000000, 0x1e8702, - 0x000000, 0x1e8906, 0x1e8f01, 0x1e9001, 0x1e9102, 0x000000, 0x1e9302, 0x1e950a, - 0x000000, 0x000000, 0x000000, 0x1e9f02, 0x000000, 0x1ea101, 0x000000, 0x1ea201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1ea302, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1ea50a, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1eaf01, 0x1eb001, 0x1eb104, 0x1eb503, 0x000000, 0x1eb801, - 0x000000, 0x000000, 0x1eb92f, 0x000000, 0x000000, 0x1ee801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1ee901, 0x000000, 0x000000, 0x1eea02, 0x1eec01, 0x1eed01, - 0x1eee01, 0x000000, 0x1eef01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1ef001, 0x1ef102, 0x000000, 0x1ef301, 0x000000, 0x000000, - 0x1ef402, 0x000000, 0x000000, 0x1ef603, 0x000000, 0x1ef905, 0x1efe02, 0x000000, - 0x000000, 0x1f0002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1f0201, 0x000000, 0x1f0301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1f0404, 0x000000, 0x000000, 0x000000, 0x000000, 0x1f0804, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1f0c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1f0d03, 0x000000, 0x1f100f, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1f1f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1f2003, 0x1f2314, 0x1f3701, 0x000000, 0x1f3801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1f390d, 0x000000, 0x000000, 0x000000, 0x000000, 0x1f4601, - 0x1f4702, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1f4902, 0x000000, 0x000000, - 0x000000, 0x1f4b06, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1f510a, 0x000000, 0x1f5b01, 0x1f5c01, 0x000000, 0x000000, - 0x1f5d02, 0x000000, 0x000000, 0x1f5f01, 0x1f6001, 0x000000, 0x000000, 0x1f6102, - 0x1f6301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1f6406, 0x000000, 0x000000, 0x000000, 0x1f6a09, - 0x1f7307, 0x1f7a01, 0x1f7b01, 0x000000, 0x000000, 0x1f7c01, 0x000000, 0x000000, - 0x000000, 0x1f7d01, 0x000000, 0x1f7e01, 0x000000, 0x1f7f02, 0x000000, 0x1f8102, - 0x1f830c, 0x000000, 0x000000, 0x000000, 0x1f8f01, 0x1f9008, 0x000000, 0x1f9803, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1f9b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1f9c11, 0x1fad01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1fae01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1faf03, 0x1fb202, 0x000000, 0x1fb403, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1fb701, - 0x1fb801, 0x1fb906, 0x1fbf01, 0x1fc001, 0x1fc101, 0x1fc208, 0x000000, 0x000000, - 0x1fca05, 0x000000, 0x000000, 0x1fcf01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1fd001, 0x1fd107, 0x1fd801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1fd903, 0x000000, 0x1fdc03, 0x1fdf02, 0x1fe102, - 0x000000, 0x1fe301, 0x1fe401, 0x000000, 0x000000, 0x000000, 0x000000, 0x1fe501, - 0x1fe60c, 0x000000, 0x000000, 0x1ff206, 0x000000, 0x000000, 0x000000, 0x1ff801, - 0x000000, 0x000000, 0x000000, 0x1ff901, 0x000000, 0x000000, 0x1ffa01, 0x000000, - 0x000000, 0x000000, 0x1ffb10, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x200b06, 0x000000, 0x000000, 0x000000, 0x000000, 0x201103, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x201401, 0x000000, 0x201501, 0x000000, 0x000000, - 0x201603, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x201901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x201a02, 0x000000, 0x201c01, 0x000000, 0x000000, 0x201d03, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x202008, - 0x000000, 0x000000, 0x000000, 0x202809, 0x000000, 0x000000, 0x203105, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x203601, 0x000000, 0x203704, 0x203b04, 0x000000, 0x203f01, - 0x204004, 0x000000, 0x000000, 0x204403, 0x000000, 0x204701, 0x204802, 0x000000, - 0x000000, 0x000000, 0x000000, 0x204a02, 0x000000, 0x000000, 0x000000, 0x204c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x204d08, 0x000000, 0x000000, 0x000000, 0x205501, 0x000000, 0x205604, - 0x205a02, 0x000000, 0x000000, 0x205c01, 0x205d03, 0x206003, 0x206301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x206402, 0x206604, 0x206a01, 0x206b01, 0x206c03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x206f03, 0x20720e, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x208001, - 0x000000, 0x000000, 0x000000, 0x208101, 0x208202, 0x208401, 0x208501, 0x208605, - 0x000000, 0x000000, 0x208b06, 0x209102, 0x000000, 0x000000, 0x20930a, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x209d01, 0x000000, 0x000000, 0x209e03, - 0x000000, 0x20a101, 0x20a205, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x20a70c, 0x20b305, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x20b803, 0x000000, 0x000000, 0x000000, 0x000000, - 0x20bb03, 0x000000, 0x000000, 0x000000, 0x20be01, 0x000000, 0x20bf02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x20c106, 0x20c702, 0x000000, 0x000000, 0x20c902, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x20cb01, - 0x20cc01, 0x000000, 0x20cd01, 0x000000, 0x20ce01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x20cf01, 0x000000, 0x20d009, 0x20d901, 0x20da01, 0x000000, - 0x20db01, 0x20dc09, 0x20e501, 0x000000, 0x000000, 0x000000, 0x000000, 0x20e601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x20e701, 0x000000, 0x000000, 0x20e810, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x20f801, - 0x20f901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x20fa01, - 0x000000, 0x000000, 0x20fb03, 0x000000, 0x20fe04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x210207, 0x000000, 0x210904, 0x000000, 0x210d06, 0x000000, 0x000000, - 0x211301, 0x000000, 0x211401, 0x000000, 0x000000, 0x000000, 0x211503, 0x000000, - 0x211806, 0x211e01, 0x211f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x212002, - 0x212201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x212306, 0x000000, 0x000000, 0x212901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x212a02, 0x212c01, 0x212d22, 0x000000, - 0x214f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x215104, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x215504, 0x215902, 0x215b01, 0x000000, 0x000000, 0x215c04, 0x000000, - 0x000000, 0x21600c, 0x000000, 0x216c0c, 0x000000, 0x000000, 0x217801, 0x217901, - 0x000000, 0x000000, 0x217a03, 0x217d01, 0x217e04, 0x218204, 0x000000, 0x218608, - 0x000000, 0x000000, 0x000000, 0x000000, 0x218e0f, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x219d01, 0x000000, 0x219e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x219f01, 0x000000, 0x000000, 0x21a001, 0x000000, 0x000000, 0x000000, - 0x21a101, 0x000000, 0x000000, 0x000000, 0x21a202, 0x000000, 0x000000, 0x21a404, - 0x21a804, 0x21ac01, 0x000000, 0x000000, 0x21ad01, 0x000000, 0x21ae01, 0x000000, - 0x21af01, 0x21b00c, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x21bc01, 0x21bd01, 0x21be0b, 0x21c902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x21cb02, 0x21cd01, 0x21ce01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x21cf01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x21d001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x21d101, 0x000000, 0x000000, 0x21d201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x21d301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x21d402, - 0x21d601, 0x21d701, 0x000000, 0x000000, 0x000000, 0x000000, 0x21d804, 0x000000, - 0x21dc02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x21de03, 0x21e10a, 0x000000, 0x21eb02, 0x000000, 0x21ed03, 0x000000, 0x000000, - 0x000000, 0x21f001, 0x000000, 0x000000, 0x000000, 0x21f110, 0x000000, 0x220104, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x220501, 0x000000, 0x220602, 0x220801, 0x22090a, - 0x221303, 0x221601, 0x221705, 0x221c03, 0x221f01, 0x000000, 0x222002, 0x222203, - 0x000000, 0x000000, 0x000000, 0x000000, 0x222501, 0x222602, 0x222809, 0x223102, - 0x000000, 0x000000, 0x000000, 0x000000, 0x223301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x223403, 0x223702, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x223901, 0x223a01, 0x223b02, 0x000000, 0x223d03, 0x224001, - 0x224103, 0x224401, 0x000000, 0x224505, 0x000000, 0x224a01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x224b01, 0x000000, 0x000000, 0x224c02, 0x000000, 0x000000, - 0x224e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x224f01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x225001, 0x000000, 0x000000, 0x000000, 0x000000, 0x225102, 0x000000, 0x000000, - 0x000000, 0x000000, 0x225302, 0x22550d, 0x000000, 0x000000, 0x000000, 0x22620a, - 0x000000, 0x226c01, 0x226d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x226e01, 0x226f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x227104, 0x000000, - 0x000000, 0x000000, 0x000000, 0x227506, 0x227b01, 0x227c02, 0x000000, 0x227e02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x228001, 0x000000, 0x000000, 0x000000, - 0x228101, 0x000000, 0x000000, 0x000000, 0x228201, 0x000000, 0x228301, 0x000000, - 0x000000, 0x000000, 0x228401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x228501, 0x228601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x228701, 0x000000, - 0x000000, 0x000000, 0x228801, 0x000000, 0x228904, 0x000000, 0x000000, 0x000000, - 0x228d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x228e01, 0x000000, 0x228f10, 0x000000, 0x000000, 0x229f02, 0x000000, 0x000000, - 0x22a104, 0x000000, 0x000000, 0x22a502, 0x22a701, 0x000000, 0x000000, 0x22a801, - 0x22a901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x22aa01, - 0x000000, 0x22ab14, 0x000000, 0x000000, 0x000000, 0x000000, 0x22bf04, 0x22c301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x22c403, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x22c703, 0x000000, 0x22ca04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x22ce01, 0x22cf01, 0x22d001, 0x000000, 0x000000, 0x000000, 0x22d101, - 0x000000, 0x22d201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x22d30d, 0x000000, - 0x000000, 0x000000, 0x22e001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x22e102, 0x000000, 0x22e30b, - 0x000000, 0x22ee02, 0x000000, 0x000000, 0x000000, 0x22f002, 0x22f202, 0x000000, - 0x000000, 0x000000, 0x000000, 0x22f401, 0x000000, 0x22f504, 0x000000, 0x22f903, - 0x22fc0d, 0x000000, 0x000000, 0x230901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x230a19, 0x000000, 0x232301, 0x000000, 0x000000, 0x000000, 0x000000, 0x232403, - 0x232701, 0x000000, 0x000000, 0x000000, 0x000000, 0x232801, 0x232902, 0x000000, - 0x232b05, 0x23300f, 0x233f03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x234237, - 0x237901, 0x000000, 0x000000, 0x237a06, 0x238001, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x238102, 0x000000, 0x000000, 0x000000, 0x238301, - 0x000000, 0x000000, 0x238402, 0x000000, 0x238601, 0x000000, 0x000000, 0x238701, - 0x238804, 0x238c01, 0x238d0a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x239702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x239906, 0x000000, 0x000000, 0x239f01, 0x000000, 0x23a001, - 0x23a101, 0x000000, 0x000000, 0x000000, 0x23a201, 0x23a301, 0x000000, 0x000000, - 0x23a401, 0x000000, 0x000000, 0x23a501, 0x000000, 0x23a602, 0x000000, 0x000000, - 0x23a802, 0x23aa01, 0x000000, 0x000000, 0x000000, 0x23ab04, 0x000000, 0x000000, - 0x23af08, 0x000000, 0x23b704, 0x000000, 0x000000, 0x23bb01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x23bc03, 0x000000, 0x23bf0b, 0x23ca02, - 0x000000, 0x000000, 0x23cc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x23cd03, 0x000000, 0x23d001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x23d102, 0x000000, 0x000000, 0x000000, 0x000000, 0x23d302, - 0x000000, 0x23d501, 0x23d601, 0x23d701, 0x000000, 0x23d809, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x23e101, 0x000000, - 0x23e201, 0x000000, 0x000000, 0x000000, 0x23e301, 0x23e401, 0x000000, 0x000000, - 0x23e501, 0x000000, 0x000000, 0x000000, 0x000000, 0x23e602, 0x000000, 0x000000, - 0x000000, 0x23e804, 0x000000, 0x000000, 0x000000, 0x000000, 0x23ec01, 0x23ed0a, - 0x000000, 0x000000, 0x000000, 0x23f703, 0x23fa05, 0x000000, 0x000000, 0x000000, - 0x000000, 0x23ff01, 0x240003, 0x000000, 0x240301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x240401, 0x240501, 0x240601, 0x000000, 0x240701, 0x240802, 0x000000, - 0x000000, 0x240a01, 0x000000, 0x240b01, 0x240c01, 0x000000, 0x000000, 0x240d02, - 0x000000, 0x240f01, 0x000000, 0x241001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x241101, 0x241202, 0x000000, 0x000000, 0x241401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x241502, 0x241701, - 0x000000, 0x000000, 0x241803, 0x000000, 0x000000, 0x000000, 0x000000, 0x241b03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x241e01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x241f01, - 0x000000, 0x000000, 0x000000, 0x242001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x242101, 0x000000, 0x000000, 0x000000, 0x000000, 0x242201, 0x000000, - 0x000000, 0x242303, 0x242601, 0x000000, 0x000000, 0x000000, 0x242701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x242801, 0x000000, - 0x000000, 0x242901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x242a03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x242d01, 0x242e02, - 0x000000, 0x000000, 0x243001, 0x243102, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x243303, 0x243602, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x243803, - 0x000000, 0x000000, 0x000000, 0x243b01, 0x243c02, 0x243e01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x243f0d, 0x000000, 0x000000, - 0x244c04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x245004, 0x245407, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x245b01, 0x245c04, 0x246008, 0x246801, 0x246904, - 0x000000, 0x246d01, 0x246e96, 0x000000, 0x000000, 0x250402, 0x000000, 0x250603, - 0x000000, 0x000000, 0x000000, 0x000000, 0x250901, 0x000000, 0x000000, 0x000000, - 0x250a01, 0x000000, 0x250b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x250c01, 0x000000, 0x000000, 0x250d03, - 0x000000, 0x000000, 0x000000, 0x251001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x251101, 0x251202, 0x000000, 0x000000, 0x000000, 0x000000, 0x251402, 0x000000, - 0x251601, 0x251704, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x251b02, 0x000000, 0x251d02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x251f03, 0x252202, 0x000000, 0x252402, 0x000000, 0x252602, - 0x000000, 0x000000, 0x252802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x252a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x252b01, 0x252c0f, 0x000000, 0x000000, 0x000000, 0x000000, - 0x253b01, 0x000000, 0x000000, 0x253c05, 0x000000, 0x000000, 0x254101, 0x000000, - 0x254201, 0x254301, 0x000000, 0x000000, 0x000000, 0x000000, 0x254401, 0x000000, - 0x000000, 0x000000, 0x254502, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x254701, 0x254801, 0x000000, 0x254901, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x254a01, 0x254b02, 0x000000, - 0x000000, 0x000000, 0x254d07, 0x000000, 0x255401, 0x000000, 0x255503, 0x000000, - 0x255802, 0x000000, 0x255a07, 0x256102, 0x000000, 0x256302, 0x256501, 0x256602, - 0x000000, 0x000000, 0x000000, 0x25680f, 0x257704, 0x000000, 0x000000, 0x257b02, - 0x000000, 0x000000, 0x000000, 0x257d02, 0x000000, 0x257f01, 0x000000, 0x258007, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x25871e, 0x000000, - 0x25a501, 0x25a602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x25a802, 0x000000, 0x000000, 0x25aa01, 0x25ab01, 0x25ac01, 0x25ad02, - 0x000000, 0x000000, 0x000000, 0x25af02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x25b104, 0x25b501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x25b601, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x25b701, 0x000000, 0x25b801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x25b901, 0x000000, 0x000000, 0x25ba05, 0x000000, 0x000000, - 0x25bf01, 0x000000, 0x000000, 0x25c002, 0x000000, 0x25c202, 0x25c402, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x25c602, 0x000000, 0x25c808, 0x25d001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x25d101, 0x25d201, 0x25d302, 0x000000, 0x000000, - 0x000000, 0x000000, 0x25d50c, 0x25e102, 0x000000, 0x000000, 0x25e301, 0x25e401, - 0x25e501, 0x000000, 0x25e60e, 0x25f401, 0x000000, 0x000000, 0x000000, 0x000000, - 0x25f508, 0x000000, 0x25fd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x25fe01, - 0x000000, 0x000000, 0x000000, 0x25ff0e, 0x000000, 0x260d02, 0x000000, 0x260f06, - 0x000000, 0x000000, 0x000000, 0x261504, 0x000000, 0x261901, 0x261a01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x261b01, 0x000000, 0x261c0b, 0x262701, - 0x000000, 0x262801, 0x000000, 0x000000, 0x000000, 0x262901, 0x262a02, 0x000000, - 0x262c01, 0x000000, 0x262d01, 0x000000, 0x262e01, 0x000000, 0x000000, 0x000000, - 0x262f01, 0x263007, 0x263702, 0x000000, 0x000000, 0x000000, 0x263903, 0x000000, - 0x263c04, 0x000000, 0x000000, 0x000000, 0x000000, 0x264001, 0x26410e, 0x000000, - 0x000000, 0x000000, 0x264f03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x265201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x265308, 0x000000, 0x265b03, - 0x000000, 0x265e05, 0x000000, 0x266302, 0x000000, 0x000000, 0x000000, 0x000000, - 0x266503, 0x000000, 0x000000, 0x266803, 0x266b04, 0x000000, 0x000000, 0x000000, - 0x266f01, 0x000000, 0x000000, 0x000000, 0x267001, 0x000000, 0x000000, 0x267103, - 0x000000, 0x267402, 0x000000, 0x000000, 0x000000, 0x267601, 0x267707, 0x000000, - 0x000000, 0x267e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x267f07, 0x268602, 0x268801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x268901, 0x268a01, 0x268b05, 0x269002, 0x269205, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x269706, 0x000000, - 0x269d01, 0x000000, 0x000000, 0x000000, 0x269e04, 0x000000, 0x000000, 0x26a20f, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x26b101, - 0x26b201, 0x26b301, 0x000000, 0x000000, 0x000000, 0x26b401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x26b503, 0x000000, 0x000000, 0x000000, - 0x000000, 0x26b801, 0x000000, 0x000000, 0x000000, 0x000000, 0x26b908, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x26c101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x26c202, 0x26c405, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x26c901, 0x000000, 0x000000, 0x000000, 0x26ca01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x26cb07, 0x000000, 0x26d201, - 0x000000, 0x000000, 0x26d316, 0x26e904, 0x26ed03, 0x000000, 0x26f001, 0x26f104, - 0x000000, 0x000000, 0x26f505, 0x000000, 0x26fa02, 0x26fc01, 0x26fd03, 0x000000, - 0x000000, 0x000000, 0x270002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x270201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x270305, 0x270801, 0x000000, 0x000000, 0x270903, 0x000000, 0x000000, - 0x000000, 0x270c07, 0x000000, 0x271303, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x27160c, 0x272201, 0x272302, 0x272509, 0x000000, 0x000000, 0x000000, - 0x272e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x272f02, 0x000000, - 0x000000, 0x273102, 0x000000, 0x273302, 0x000000, 0x000000, 0x000000, 0x000000, - 0x273501, 0x000000, 0x273601, 0x273701, 0x273801, 0x273901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x273a02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x273c09, 0x274501, 0x000000, 0x000000, 0x000000, 0x000000, 0x274602, - 0x000000, 0x000000, 0x274801, 0x274901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x274a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x274b03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x274e03, 0x000000, 0x275104, 0x000000, 0x000000, 0x000000, - 0x275502, 0x000000, 0x275704, 0x000000, 0x000000, 0x275b01, 0x275c07, 0x000000, - 0x000000, 0x276303, 0x000000, 0x276603, 0x276901, 0x276a03, 0x000000, 0x000000, - 0x000000, 0x276d03, 0x277001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x277105, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x277601, 0x000000, 0x277704, 0x000000, 0x277b0c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x278702, 0x000000, 0x000000, - 0x000000, 0x278903, 0x000000, 0x000000, 0x278c02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x278e01, 0x278f06, 0x000000, 0x000000, 0x279501, 0x000000, 0x279601, - 0x279701, 0x000000, 0x27980a, 0x000000, 0x000000, 0x27a202, 0x000000, 0x27a401, - 0x27a506, 0x000000, 0x000000, 0x27ab02, 0x000000, 0x27ad01, 0x27ae01, 0x27af08, - 0x27b703, 0x000000, 0x000000, 0x27ba02, 0x000000, 0x27bc03, 0x000000, 0x000000, - 0x000000, 0x27bf01, 0x000000, 0x000000, 0x000000, 0x000000, 0x27c001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x27c110, 0x000000, 0x000000, 0x000000, 0x000000, - 0x27d108, 0x000000, 0x27d901, 0x000000, 0x000000, 0x27da01, 0x27db01, 0x000000, - 0x27dc01, 0x27dd01, 0x000000, 0x27de02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x27e004, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x27e404, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x27e80c, - 0x000000, 0x27f401, 0x000000, 0x27f501, 0x27f601, 0x000000, 0x000000, 0x27f705, - 0x000000, 0x000000, 0x27fc01, 0x27fd06, 0x280306, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x280902, 0x000000, 0x280b03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x280e02, 0x000000, 0x000000, 0x281001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x281101, 0x000000, 0x281201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x281318, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x282b04, 0x282f01, 0x283001, 0x000000, 0x000000, 0x000000, 0x283106, 0x000000, - 0x283701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x283801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x283901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x283a04, 0x283e03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x284101, 0x000000, 0x000000, 0x000000, 0x284201, 0x000000, 0x284303, - 0x000000, 0x000000, 0x000000, 0x000000, 0x284604, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x284a02, 0x284c01, 0x000000, 0x000000, - 0x000000, 0x284d01, 0x284e02, 0x000000, 0x285005, 0x000000, 0x285502, 0x000000, - 0x285701, 0x000000, 0x000000, 0x000000, 0x000000, 0x285802, 0x000000, 0x000000, - 0x285a01, 0x000000, 0x285b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x285d01, 0x000000, 0x000000, 0x285e03, 0x286101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x28620a, 0x286c02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x286e02, 0x000000, 0x287009, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x287906, 0x000000, 0x287f01, 0x000000, - 0x288003, 0x000000, 0x000000, 0x000000, 0x288301, 0x288401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x288501, 0x000000, 0x000000, 0x000000, 0x288601, - 0x000000, 0x28870a, 0x000000, 0x000000, 0x289102, 0x289302, 0x289501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x289601, 0x000000, - 0x000000, 0x289702, 0x289902, 0x000000, 0x000000, 0x289b01, 0x000000, 0x289c06, - 0x000000, 0x28a201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x28a301, 0x000000, 0x28a405, 0x28a901, 0x000000, 0x000000, - 0x28aa01, 0x000000, 0x28ab09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x28b401, 0x28b501, 0x28b602, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x28b802, 0x000000, - 0x000000, 0x28ba03, 0x000000, 0x000000, 0x28bd02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x28bf01, 0x000000, 0x28c001, 0x28c102, 0x000000, 0x000000, - 0x000000, 0x000000, 0x28c301, 0x28c401, 0x000000, 0x28c501, 0x000000, 0x28c605, - 0x000000, 0x28cb02, 0x28cd02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x28cf01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x28d002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x28d202, 0x000000, - 0x28d401, 0x000000, 0x000000, 0x000000, 0x28d503, 0x28d802, 0x000000, 0x000000, - 0x28da0a, 0x000000, 0x28e403, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x28e709, 0x28f001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x28f101, - 0x28f209, 0x000000, 0x28fb07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x290203, 0x000000, 0x000000, - 0x000000, 0x290508, 0x000000, 0x000000, 0x290d0b, 0x000000, 0x291803, 0x291b01, - 0x000000, 0x000000, 0x291c01, 0x291d02, 0x291f02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x292103, 0x000000, 0x000000, - 0x000000, 0x000000, 0x292401, 0x000000, 0x292501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x292601, - 0x292708, 0x000000, 0x000000, 0x292f09, 0x000000, 0x293803, 0x293b01, 0x000000, - 0x293c02, 0x293e03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x294101, - 0x294201, 0x294301, 0x000000, 0x294401, 0x000000, 0x000000, 0x000000, 0x294501, - 0x000000, 0x294608, 0x000000, 0x000000, 0x000000, 0x000000, 0x294e01, 0x000000, - 0x000000, 0x294f02, 0x000000, 0x295107, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x295801, 0x295901, - 0x295a02, 0x295c01, 0x000000, 0x295d04, 0x000000, 0x000000, 0x296104, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x296503, 0x000000, 0x000000, 0x296801, - 0x000000, 0x000000, 0x000000, 0x296901, 0x000000, 0x296a01, 0x000000, 0x296b01, - 0x000000, 0x296c02, 0x000000, 0x000000, 0x296e13, 0x000000, 0x298101, 0x000000, - 0x298202, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x298401, 0x298501, - 0x29860f, 0x000000, 0x000000, 0x000000, 0x299501, 0x000000, 0x000000, 0x000000, - 0x299603, 0x000000, 0x299901, 0x000000, 0x299a01, 0x000000, 0x000000, 0x000000, - 0x299b01, 0x299c02, 0x299e03, 0x000000, 0x29a101, 0x000000, 0x000000, 0x29a208, - 0x000000, 0x29aa02, 0x000000, 0x000000, 0x000000, 0x000000, 0x29ac01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x29ad01, 0x000000, 0x000000, 0x000000, 0x29ae01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x29af01, 0x29b001, 0x000000, 0x29b102, 0x000000, 0x000000, 0x000000, - 0x29b302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x29b504, - 0x000000, 0x29b90a, 0x000000, 0x000000, 0x29c305, 0x000000, 0x29c801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x29c902, 0x000000, 0x000000, 0x000000, 0x29cb03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x29ce01, 0x000000, 0x29cf01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x29d00a, - 0x000000, 0x29da03, 0x29dd02, 0x29df02, 0x000000, 0x000000, 0x29e101, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x29e203, - 0x000000, 0x000000, 0x000000, 0x000000, 0x29e501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x29e603, 0x29e90d, 0x29f601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x29f701, 0x000000, 0x000000, 0x29f803, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x29fb02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x29fd02, 0x000000, 0x000000, 0x29ff01, 0x2a0003, 0x000000, - 0x000000, 0x000000, 0x2a0302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2a0501, 0x000000, 0x000000, 0x000000, 0x2a060a, 0x000000, 0x2a1003, - 0x000000, 0x000000, 0x2a1301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2a1404, 0x000000, 0x000000, 0x000000, 0x2a1802, 0x000000, 0x000000, - 0x2a1a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2a1b04, 0x2a1f05, 0x000000, 0x000000, 0x000000, 0x2a2402, 0x000000, - 0x000000, 0x000000, 0x2a2604, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2a2a01, 0x000000, 0x000000, 0x2a2b0c, - 0x000000, 0x2a3701, 0x000000, 0x2a3801, 0x000000, 0x000000, 0x000000, 0x2a3902, - 0x000000, 0x000000, 0x000000, 0x2a3b02, 0x000000, 0x000000, 0x2a3d01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2a3e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x2a3f01, 0x2a4002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2a4201, 0x000000, 0x2a4301, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2a4401, 0x2a4501, 0x2a4603, 0x000000, 0x2a4917, 0x2a6001, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2a6102, 0x000000, 0x000000, 0x2a6301, - 0x000000, 0x2a6403, 0x000000, 0x000000, 0x2a6701, 0x000000, 0x000000, 0x2a6801, - 0x2a6901, 0x2a6a01, 0x2a6b03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2a6e03, 0x000000, 0x2a7101, 0x2a7205, 0x2a7712, 0x2a8901, 0x000000, - 0x000000, 0x2a8a01, 0x2a8b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2a8c03, 0x000000, 0x000000, 0x000000, 0x2a8f03, 0x2a9201, 0x000000, 0x000000, - 0x2a9302, 0x2a9501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2a9602, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2a9801, 0x000000, 0x2a9902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2a9b03, 0x2a9e01, 0x000000, 0x2a9f04, 0x000000, - 0x000000, 0x2aa301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2aa401, - 0x000000, 0x2aa505, 0x000000, 0x000000, 0x000000, 0x2aaa01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2aab04, 0x000000, 0x000000, 0x2aaf01, 0x2ab001, - 0x000000, 0x000000, 0x2ab102, 0x000000, 0x000000, 0x000000, 0x2ab307, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2aba06, 0x000000, 0x000000, 0x2ac002, 0x000000, - 0x000000, 0x000000, 0x2ac201, 0x000000, 0x000000, 0x2ac30a, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2acd02, 0x000000, 0x2acf02, 0x2ad102, 0x000000, 0x000000, - 0x2ad302, 0x000000, 0x000000, 0x000000, 0x2ad501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2ad601, - 0x000000, 0x000000, 0x000000, 0x2ad705, 0x000000, 0x000000, 0x000000, 0x2adc02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2ade01, 0x000000, 0x000000, - 0x000000, 0x2adf02, 0x2ae104, 0x000000, 0x000000, 0x2ae502, 0x2ae703, 0x2aea01, - 0x000000, 0x000000, 0x2aeb01, 0x000000, 0x2aec02, 0x000000, 0x000000, 0x2aee01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2aef01, 0x000000, 0x000000, 0x000000, - 0x2af002, 0x000000, 0x2af201, 0x000000, 0x000000, 0x000000, 0x2af301, 0x2af401, - 0x000000, 0x000000, 0x000000, 0x2af501, 0x000000, 0x2af602, 0x000000, 0x2af809, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b0102, 0x2b0301, - 0x000000, 0x2b0403, 0x2b0701, 0x2b0802, 0x000000, 0x000000, 0x2b0a01, 0x2b0b01, - 0x2b0c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b0d01, 0x000000, 0x000000, - 0x2b0e06, 0x2b1402, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b1603, 0x000000, - 0x000000, 0x000000, 0x2b1915, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b2e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b2f04, 0x2b3301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b3403, 0x000000, 0x000000, - 0x2b3701, 0x2b3801, 0x000000, 0x2b3903, 0x000000, 0x2b3c10, 0x000000, 0x2b4c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b4d02, 0x000000, 0x000000, - 0x000000, 0x2b4f06, 0x000000, 0x000000, 0x000000, 0x2b5501, 0x000000, 0x000000, - 0x000000, 0x2b5601, 0x2b5701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2b5801, 0x2b5901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2b5a03, 0x000000, 0x000000, 0x2b5d06, 0x2b6301, 0x000000, 0x000000, - 0x000000, 0x2b6405, 0x000000, 0x2b6905, 0x2b6e0c, 0x000000, 0x2b7a0b, 0x000000, - 0x000000, 0x000000, 0x2b8501, 0x000000, 0x000000, 0x2b8603, 0x000000, 0x2b8901, - 0x000000, 0x2b8a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2b8b01, 0x000000, 0x2b8c03, 0x2b8f01, 0x2b9001, 0x2b9102, 0x000000, - 0x2b9301, 0x000000, 0x2b9401, 0x000000, 0x000000, 0x000000, 0x2b9501, 0x000000, - 0x000000, 0x2b9601, 0x2b9703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b9a01, - 0x000000, 0x000000, 0x2b9b02, 0x2b9d06, 0x000000, 0x000000, 0x000000, 0x2ba302, - 0x2ba502, 0x000000, 0x000000, 0x000000, 0x2ba706, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2bad01, 0x2bae01, 0x000000, 0x000000, 0x000000, 0x2baf03, - 0x2bb201, 0x000000, 0x000000, 0x2bb301, 0x2bb405, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2bb906, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2bbf02, 0x2bc101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2bc201, 0x000000, 0x2bc301, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2bc401, 0x000000, 0x000000, 0x000000, 0x2bc501, - 0x000000, 0x2bc602, 0x000000, 0x000000, 0x2bc802, 0x000000, 0x2bca03, 0x000000, - 0x2bcd11, 0x000000, 0x000000, 0x2bde3e, 0x000000, 0x000000, 0x000000, 0x2c1c02, - 0x2c1e01, 0x000000, 0x000000, 0x2c1f01, 0x2c2005, 0x2c2505, 0x000000, 0x000000, - 0x000000, 0x2c2a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x2c2c01, 0x2c2d01, - 0x000000, 0x2c2e02, 0x000000, 0x000000, 0x000000, 0x2c3001, 0x000000, 0x2c3114, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2c4504, 0x000000, 0x2c4901, 0x000000, - 0x000000, 0x000000, 0x2c4a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2c4b01, 0x000000, 0x2c4c01, 0x2c4d02, 0x000000, 0x2c4f01, 0x000000, 0x2c5003, - 0x000000, 0x000000, 0x000000, 0x2c5301, 0x2c5401, 0x000000, 0x000000, 0x2c5505, - 0x000000, 0x000000, 0x000000, 0x2c5a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2c5b01, 0x000000, 0x2c5c0d, 0x2c6901, 0x000000, 0x000000, - 0x2c6a03, 0x000000, 0x2c6d02, 0x2c6f01, 0x000000, 0x000000, 0x000000, 0x2c7001, - 0x000000, 0x000000, 0x2c7105, 0x2c7603, 0x000000, 0x2c790d, 0x2c8601, 0x000000, - 0x2c8706, 0x2c8d02, 0x000000, 0x000000, 0x000000, 0x2c8f01, 0x000000, 0x000000, - 0x2c9003, 0x2c9305, 0x000000, 0x000000, 0x000000, 0x000000, 0x2c9801, 0x000000, - 0x000000, 0x000000, 0x2c9903, 0x000000, 0x2c9c05, 0x000000, 0x2ca103, 0x2ca401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2ca507, 0x000000, 0x2cac01, - 0x000000, 0x2cad02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2caf0d, - 0x2cbc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2cbd01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2cbe01, 0x000000, 0x000000, 0x2cbf04, - 0x2cc301, 0x2cc402, 0x2cc606, 0x000000, 0x2ccc04, 0x000000, 0x2cd001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2cd101, 0x000000, 0x000000, 0x000000, 0x2cd201, - 0x000000, 0x2cd301, 0x2cd403, 0x2cd701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2cd803, 0x000000, 0x000000, 0x2cdb03, 0x000000, 0x000000, 0x2cde0a, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2ce805, 0x000000, 0x000000, 0x2ced07, 0x000000, 0x2cf401, 0x000000, - 0x000000, 0x2cf501, 0x2cf602, 0x2cf802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2cfa01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2cfb04, 0x000000, 0x2cff01, 0x2d0008, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2d0801, 0x2d0901, 0x2d0a03, 0x2d0d09, 0x000000, 0x000000, - 0x2d1604, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2d1a01, 0x000000, - 0x2d1b04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2d1f04, 0x2d2301, - 0x000000, 0x2d2402, 0x000000, 0x000000, 0x2d2601, 0x000000, 0x2d2701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2d2802, 0x000000, 0x000000, - 0x2d2a01, 0x2d2b01, 0x000000, 0x2d2c02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2d2e02, 0x000000, 0x000000, 0x000000, 0x2d3005, 0x000000, 0x2d3501, 0x000000, - 0x2d3602, 0x000000, 0x000000, 0x000000, 0x2d3801, 0x000000, 0x2d3902, 0x000000, - 0x000000, 0x000000, 0x2d3b01, 0x2d3c01, 0x000000, 0x000000, 0x000000, 0x2d3d02, - 0x2d3f03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2d4201, 0x000000, 0x2d4303, 0x2d4604, 0x000000, 0x2d4a01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2d4b01, 0x000000, - 0x2d4c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x2d4d03, 0x2d5001, 0x000000, - 0x000000, 0x000000, 0x2d5101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2d5201, 0x2d5302, 0x000000, - 0x2d5502, 0x000000, 0x000000, 0x2d5702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2d5901, 0x000000, 0x000000, 0x2d5a02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2d5c09, 0x000000, 0x2d6501, 0x000000, 0x000000, 0x000000, 0x2d6602, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2d6801, 0x000000, 0x000000, 0x2d6901, 0x2d6a01, - 0x2d6b02, 0x2d6d09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2d7607, 0x000000, 0x000000, 0x2d7d02, 0x000000, 0x2d7f01, 0x2d8001, 0x000000, - 0x2d8101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2d8201, 0x000000, 0x000000, 0x2d8301, 0x2d8403, 0x2d8715, - 0x000000, 0x000000, 0x2d9c02, 0x2d9e01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2d9f01, 0x000000, 0x000000, 0x2da004, 0x000000, 0x2da403, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2da71c, 0x000000, - 0x000000, 0x000000, 0x2dc303, 0x000000, 0x2dc602, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2dc803, 0x000000, 0x000000, 0x2dcb13, 0x2dde02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2de003, - 0x2de302, 0x2de501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2de601, - 0x000000, 0x000000, 0x000000, 0x2de702, 0x2de901, 0x000000, 0x2dea04, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2dee01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2def01, 0x000000, 0x000000, - 0x000000, 0x2df005, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2df501, 0x2df605, 0x000000, 0x2dfb01, 0x2dfc01, 0x000000, 0x2dfd01, 0x000000, - 0x000000, 0x2dfe02, 0x000000, 0x2e0001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2e0102, - 0x2e0303, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2e0601, 0x000000, 0x2e0701, 0x000000, 0x000000, 0x000000, 0x2e0801, 0x000000, - 0x000000, 0x000000, 0x2e0902, 0x000000, 0x000000, 0x000000, 0x000000, 0x2e0b01, - 0x000000, 0x000000, 0x2e0c02, 0x2e0e01, 0x2e0f03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2e1227, 0x2e3901, 0x2e3a01, 0x2e3b01, 0x000000, 0x000000, 0x2e3c01, - 0x000000, 0x000000, 0x000000, 0x2e3d08, 0x000000, 0x000000, 0x2e4505, 0x2e4a01, - 0x000000, 0x2e4b11, 0x000000, 0x2e5c02, 0x000000, 0x000000, 0x000000, 0x2e5e01, - 0x000000, 0x000000, 0x000000, 0x2e5f02, 0x2e6101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2e6201, 0x000000, 0x2e6301, 0x2e6406, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2e6a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2e6b01, 0x000000, 0x2e6c01, 0x000000, 0x2e6d01, 0x000000, 0x000000, - 0x2e6e07, 0x000000, 0x2e7501, 0x2e7602, 0x2e780c, 0x2e8401, 0x2e8502, 0x000000, - 0x2e8706, 0x2e8d02, 0x000000, 0x000000, 0x2e8f02, 0x000000, 0x2e9102, 0x2e9303, - 0x2e9601, 0x2e9701, 0x000000, 0x000000, 0x000000, 0x000000, 0x2e9805, 0x000000, - 0x2e9d07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2ea402, 0x2ea601, - 0x2ea701, 0x000000, 0x2ea803, 0x000000, 0x000000, 0x000000, 0x000000, 0x2eab01, - 0x2eac04, 0x000000, 0x000000, 0x000000, 0x000000, 0x2eb001, 0x000000, 0x2eb101, - 0x000000, 0x2eb201, 0x000000, 0x2eb301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2eb402, 0x000000, 0x000000, 0x2eb602, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2eb811, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2ec901, 0x000000, 0x000000, 0x000000, 0x2eca01, - 0x2ecb06, 0x2ed101, 0x2ed205, 0x000000, 0x2ed701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2ed801, 0x000000, 0x000000, 0x000000, 0x2ed905, 0x000000, - 0x2ede05, 0x2ee301, 0x2ee401, 0x2ee505, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2eea01, 0x000000, 0x000000, 0x2eeb02, 0x2eed01, 0x000000, 0x000000, - 0x2eee04, 0x000000, 0x000000, 0x2ef209, 0x2efb01, 0x000000, 0x000000, 0x2efc03, - 0x000000, 0x000000, 0x2eff01, 0x2f0001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2f0107, 0x000000, 0x2f0802, 0x2f0a01, 0x000000, 0x000000, 0x2f0b02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f0d08, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f1501, 0x2f1601, - 0x000000, 0x2f1704, 0x000000, 0x000000, 0x000000, 0x2f1b04, 0x2f1f01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2f2002, 0x2f2201, 0x2f2306, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f2901, - 0x000000, 0x000000, 0x000000, 0x2f2a01, 0x2f2b03, 0x000000, 0x000000, 0x000000, - 0x2f2e02, 0x000000, 0x2f3005, 0x2f3501, 0x2f3601, 0x000000, 0x000000, 0x2f3701, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2f3803, 0x000000, 0x2f3b05, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2f4001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2f4104, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2f4501, 0x2f4601, 0x2f4707, 0x2f4e03, 0x000000, 0x000000, - 0x2f5102, 0x2f5302, 0x000000, 0x000000, 0x000000, 0x2f5501, 0x000000, 0x000000, - 0x000000, 0x2f5601, 0x2f5708, 0x2f5f02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2f6101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f6201, - 0x000000, 0x000000, 0x000000, 0x2f6302, 0x2f6503, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2f6802, 0x000000, 0x2f6a02, 0x000000, 0x2f6c01, 0x000000, 0x000000, - 0x2f6d02, 0x000000, 0x000000, 0x000000, 0x2f6f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2f7003, 0x000000, 0x2f7305, 0x000000, 0x2f7801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2f7911, 0x2f8a02, 0x2f8c02, 0x000000, 0x000000, - 0x000000, 0x2f8e03, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f9105, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f9601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f9702, - 0x000000, 0x000000, 0x000000, 0x2f9901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2f9a01, 0x2f9b01, 0x000000, 0x000000, 0x2f9c07, 0x000000, 0x2fa301, - 0x000000, 0x2fa401, 0x000000, 0x000000, 0x2fa503, 0x000000, 0x2fa802, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2faa06, 0x000000, 0x2fb001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2fb101, 0x2fb201, 0x2fb301, 0x2fb404, 0x000000, 0x2fb801, - 0x2fb904, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2fbd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2fbe06, 0x000000, 0x000000, 0x2fc404, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2fc801, 0x000000, 0x000000, 0x000000, 0x000000, 0x2fc902, - 0x000000, 0x000000, 0x2fcb06, 0x2fd101, 0x000000, 0x000000, 0x000000, 0x2fd201, - 0x000000, 0x000000, 0x000000, 0x2fd309, 0x2fdc01, 0x000000, 0x2fdd02, 0x2fdf01, - 0x000000, 0x2fe012, 0x000000, 0x000000, 0x2ff202, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2ff401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2ff50b, 0x000000, 0x300001, 0x000000, 0x000000, 0x300102, 0x000000, 0x300301, - 0x300401, 0x000000, 0x000000, 0x300501, 0x000000, 0x300601, 0x000000, 0x000000, - 0x300701, 0x000000, 0x300801, 0x000000, 0x300903, 0x000000, 0x000000, 0x000000, - 0x000000, 0x300c08, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x30141d, - 0x000000, 0x303102, 0x303301, 0x000000, 0x000000, 0x000000, 0x000000, 0x303401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x303501, 0x303601, 0x000000, 0x303701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x303801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x303902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x303b02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x303d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x303e04, 0x000000, 0x304201, 0x304301, 0x30440a, 0x000000, 0x000000, 0x304e03, - 0x305101, 0x305201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x305304, - 0x305703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x305a03, 0x000000, 0x305d01, 0x000000, 0x305e01, 0x000000, 0x000000, - 0x305f09, 0x000000, 0x000000, 0x000000, 0x000000, 0x306801, 0x000000, 0x000000, - 0x306904, 0x000000, 0x000000, 0x000000, 0x000000, 0x306d05, 0x307201, 0x000000, - 0x000000, 0x307306, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x307901, - 0x000000, 0x000000, 0x000000, 0x307a01, 0x000000, 0x000000, 0x000000, 0x307b08, - 0x000000, 0x000000, 0x000000, 0x000000, 0x308301, 0x000000, 0x308402, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x308602, 0x000000, 0x308804, 0x308c02, - 0x000000, 0x000000, 0x000000, 0x308e01, 0x308f02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x309101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x309201, - 0x309301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x309401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x309507, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x309c05, 0x000000, 0x000000, 0x000000, 0x30a101, 0x30a201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x30a317, 0x30ba12, - 0x000000, 0x000000, 0x30cc01, 0x30cd01, 0x000000, 0x000000, 0x000000, 0x30ce01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x30cf06, 0x30d507, 0x30dc01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x30dd02, 0x000000, 0x30df01, 0x30e001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x30e101, 0x000000, 0x000000, 0x000000, 0x30e205, - 0x000000, 0x30e704, 0x000000, 0x000000, 0x000000, 0x30eb03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x30ee01, 0x000000, - 0x000000, 0x000000, 0x30ef01, 0x000000, 0x000000, 0x000000, 0x30f001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x30f105, 0x000000, 0x30f601, 0x000000, - 0x000000, 0x30f702, 0x000000, 0x30f902, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x30fb08, 0x000000, 0x310302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x310501, 0x000000, 0x000000, 0x000000, 0x310601, 0x310702, 0x000000, 0x000000, - 0x000000, 0x310901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x310a07, 0x000000, 0x000000, 0x311103, 0x000000, 0x311401, - 0x000000, 0x311503, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x311802, 0x000000, - 0x000000, 0x000000, 0x311a03, 0x311d03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x312001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x312101, 0x312218, 0x313a05, 0x000000, 0x313f03, - 0x000000, 0x000000, 0x314201, 0x000000, 0x314303, 0x000000, 0x31460a, 0x000000, - 0x315002, 0x000000, 0x000000, 0x000000, 0x000000, 0x315213, 0x316502, 0x000000, - 0x316709, 0x000000, 0x000000, 0x31700d, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x317d01, 0x000000, 0x000000, 0x317e02, 0x000000, 0x318004, - 0x318402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x318602, 0x000000, 0x318801, 0x000000, - 0x31890b, 0x319401, 0x000000, 0x319503, 0x000000, 0x319804, 0x000000, 0x319c02, - 0x000000, 0x000000, 0x000000, 0x319e01, 0x319f03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x31a21e, 0x31c002, 0x000000, 0x000000, 0x31c201, 0x000000, 0x000000, - 0x31c302, 0x000000, 0x000000, 0x31c501, 0x31c602, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x31c801, 0x000000, - 0x31c901, 0x31ca01, 0x000000, 0x31cb0b, 0x000000, 0x000000, 0x31d608, 0x31de06, - 0x000000, 0x000000, 0x000000, 0x000000, 0x31e401, 0x000000, 0x31e504, 0x31e901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x31ea01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x31eb0d, 0x31f81f, 0x000000, - 0x321701, 0x000000, 0x32180b, 0x000000, 0x322303, 0x000000, 0x000000, 0x000000, - 0x000000, 0x322603, 0x000000, 0x322901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x322a02, 0x322c01, 0x000000, 0x322d01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x322e03, 0x000000, 0x000000, 0x323102, 0x323301, 0x323401, 0x000000, 0x000000, - 0x000000, 0x323501, 0x000000, 0x000000, 0x000000, 0x323601, 0x000000, 0x323702, - 0x000000, 0x323901, 0x000000, 0x000000, 0x323a03, 0x000000, 0x323d01, 0x000000, - 0x323e03, 0x000000, 0x000000, 0x324103, 0x000000, 0x324403, 0x324701, 0x324802, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x324a02, 0x000000, 0x324c01, 0x000000, 0x000000, 0x324d06, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x325301, 0x325403, 0x325701, 0x000000, 0x325804, 0x000000, 0x000000, 0x000000, - 0x000000, 0x325c02, 0x000000, 0x000000, 0x000000, 0x325e01, 0x325f02, 0x326104, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x326507, - 0x000000, 0x326c01, 0x326d10, 0x000000, 0x327d02, 0x000000, 0x327f01, 0x000000, - 0x000000, 0x000000, 0x328001, 0x000000, 0x328101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x328201, 0x000000, 0x328301, 0x328401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x328508, 0x000000, 0x328d02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x328f02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x329102, 0x000000, 0x000000, - 0x329301, 0x000000, 0x000000, 0x329401, 0x000000, 0x000000, 0x000000, 0x000000, - 0x329501, 0x000000, 0x000000, 0x000000, 0x000000, 0x329601, 0x000000, 0x329701, - 0x000000, 0x329801, 0x000000, 0x000000, 0x000000, 0x329904, 0x329d01, 0x329e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x329f04, 0x32a302, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x32a504, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x32a901, 0x000000, 0x32aa01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x32ab0a, 0x000000, - 0x000000, 0x32b502, 0x000000, 0x000000, 0x000000, 0x32b701, 0x32b801, 0x000000, - 0x32b90a, 0x32c301, 0x32c404, 0x32c801, 0x32c902, 0x000000, 0x000000, 0x000000, - 0x000000, 0x32cb01, 0x000000, 0x000000, 0x32cc02, 0x000000, 0x000000, 0x32ce02, - 0x32d008, 0x000000, 0x32d803, 0x000000, 0x000000, 0x000000, 0x32db01, 0x000000, - 0x32dc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x32dd02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x32df03, 0x32e201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x32e301, 0x000000, 0x000000, 0x32e403, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x32e705, 0x000000, - 0x32ec03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x32ef01, - 0x000000, 0x000000, 0x32f002, 0x000000, 0x000000, 0x000000, 0x32f201, 0x32f302, - 0x32f501, 0x000000, 0x000000, 0x000000, 0x000000, 0x32f602, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x32f805, 0x32fd02, 0x000000, - 0x32ff04, 0x000000, 0x000000, 0x330301, 0x330406, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x330a01, 0x000000, 0x000000, 0x330b03, 0x000000, 0x330e06, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x331401, 0x331501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x331601, 0x331701, 0x331801, 0x000000, - 0x331903, 0x000000, 0x000000, 0x000000, 0x331c01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x331d01, 0x000000, 0x331e01, 0x331f06, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x332505, 0x000000, 0x332a01, - 0x000000, 0x332b01, 0x000000, 0x000000, 0x000000, 0x332c18, 0x000000, 0x334401, - 0x334502, 0x334701, 0x334801, 0x000000, 0x000000, 0x334901, 0x000000, 0x334a03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x334d10, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x335d12, 0x000000, 0x336f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x337001, 0x000000, - 0x000000, 0x337104, 0x000000, 0x000000, 0x000000, 0x000000, 0x337502, 0x000000, - 0x000000, 0x000000, 0x337701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x337801, 0x000000, 0x337905, 0x337e04, 0x338202, 0x000000, 0x000000, 0x000000, - 0x338401, 0x000000, 0x000000, 0x338501, 0x000000, 0x000000, 0x33860f, 0x000000, - 0x000000, 0x339501, 0x000000, 0x000000, 0x000000, 0x339605, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x339b07, 0x000000, 0x000000, 0x33a20d, 0x33af09, 0x000000, 0x000000, 0x000000, - 0x33b808, 0x000000, 0x33c004, 0x33c402, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x33c604, 0x33ca01, 0x000000, 0x33cb01, 0x33cc01, 0x000000, 0x33cd0a, - 0x000000, 0x33d704, 0x000000, 0x000000, 0x000000, 0x000000, 0x33db01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x33dc16, 0x33f202, 0x000000, 0x000000, 0x33f401, - 0x33f501, 0x000000, 0x000000, 0x33f602, 0x000000, 0x000000, 0x33f805, 0x000000, - 0x33fd01, 0x000000, 0x000000, 0x000000, 0x33fe0e, 0x000000, 0x000000, 0x000000, - 0x000000, 0x340c03, 0x000000, 0x340f01, 0x000000, 0x000000, 0x000000, 0x341001, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x341101, 0x000000, - 0x000000, 0x341204, 0x000000, 0x341607, 0x000000, 0x000000, 0x341d01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x341e0b, 0x000000, 0x342908, 0x000000, - 0x343104, 0x000000, 0x343501, 0x343602, 0x343802, 0x000000, 0x000000, 0x343a01, - 0x343b01, 0x000000, 0x343c01, 0x343d02, 0x000000, 0x343f04, 0x000000, 0x344301, - 0x344405, 0x344901, 0x000000, 0x344a01, 0x344b01, 0x000000, 0x344c02, 0x344e04, - 0x345206, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x345808, 0x346001, - 0x000000, 0x34610a, 0x000000, 0x000000, 0x000000, 0x000000, 0x346b02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x346d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x346e02, 0x000000, 0x000000, 0x000000, 0x000000, 0x347002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x347201, 0x000000, 0x000000, 0x000000, - 0x347302, 0x000000, 0x000000, 0x347508, 0x347d01, 0x000000, 0x347e06, 0x000000, - 0x348403, 0x000000, 0x348701, 0x348802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x348a06, 0x000000, 0x349001, 0x000000, 0x000000, 0x000000, - 0x000000, 0x349101, 0x349201, 0x000000, 0x349304, 0x000000, 0x000000, 0x000000, - 0x000000, 0x349701, 0x349801, 0x349904, 0x349d01, 0x000000, 0x349e01, 0x349f02, - 0x34a101, 0x34a201, 0x000000, 0x34a302, 0x000000, 0x000000, 0x34a501, 0x34a602, - 0x000000, 0x34a806, 0x000000, 0x000000, 0x000000, 0x000000, 0x34ae03, 0x000000, - 0x34b103, 0x000000, 0x34b401, 0x000000, 0x000000, 0x34b501, 0x000000, 0x000000, - 0x34b601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x34b701, - 0x34b803, 0x000000, 0x34bb10, 0x000000, 0x000000, 0x34cb06, 0x34d103, 0x000000, - 0x000000, 0x34d403, 0x34d702, 0x000000, 0x000000, 0x000000, 0x34d905, 0x34de02, - 0x000000, 0x34e002, 0x34e201, 0x000000, 0x34e303, 0x000000, 0x34e601, 0x000000, - 0x34e701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x34e802, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x34ea02, 0x000000, - 0x000000, 0x000000, 0x34ec06, 0x34f201, 0x000000, 0x000000, 0x000000, 0x34f301, - 0x34f401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x34f505, 0x000000, 0x34fa01, 0x000000, 0x000000, 0x000000, 0x000000, 0x34fb02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x34fd03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x350002, - 0x000000, 0x000000, 0x350202, 0x000000, 0x000000, 0x000000, 0x000000, 0x350405, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x350903, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x350c05, 0x000000, 0x351109, 0x000000, 0x351a05, 0x000000, 0x351f01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x352002, 0x352201, 0x000000, 0x352301, 0x352401, 0x352501, 0x35260a, 0x000000, - 0x000000, 0x353001, 0x353105, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x353602, 0x000000, 0x353802, 0x353a02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x353c05, 0x000000, - 0x000000, 0x000000, 0x354104, 0x000000, 0x000000, 0x000000, 0x354510, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x355502, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x355703, 0x000000, 0x355a01, 0x000000, 0x000000, 0x355b02, - 0x000000, 0x000000, 0x355d01, 0x000000, 0x000000, 0x000000, 0x355e01, 0x000000, - 0x355f04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x356301, 0x000000, - 0x356402, 0x356601, 0x000000, 0x000000, 0x356703, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x356a0a, 0x357401, 0x000000, 0x357501, 0x000000, - 0x000000, 0x000000, 0x357605, 0x000000, 0x000000, 0x000000, 0x357b02, 0x357d03, - 0x358005, 0x000000, 0x000000, 0x000000, 0x358503, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x358802, 0x000000, 0x000000, 0x000000, 0x000000, 0x358a07, - 0x000000, 0x000000, 0x000000, 0x359101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x359201, 0x000000, 0x359301, - 0x359402, 0x000000, 0x000000, 0x359605, 0x359b06, 0x35a101, 0x35a201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x35a302, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x35a502, - 0x000000, 0x35a701, 0x000000, 0x000000, 0x35a801, 0x35a909, 0x35b204, 0x000000, - 0x35b601, 0x000000, 0x000000, 0x35b701, 0x000000, 0x000000, 0x000000, 0x35b804, - 0x000000, 0x35bc05, 0x000000, 0x000000, 0x35c101, 0x35c201, 0x000000, 0x35c301, - 0x35c401, 0x000000, 0x35c501, 0x000000, 0x000000, 0x35c601, 0x000000, 0x000000, - 0x000000, 0x35c701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x35c803, 0x000000, 0x000000, 0x35cb03, 0x000000, 0x35ce01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x35cf02, 0x35d109, 0x35da0a, 0x000000, 0x000000, 0x000000, 0x35e401, - 0x000000, 0x35e503, 0x000000, 0x35e803, 0x000000, 0x35eb02, 0x35ed0a, 0x000000, - 0x000000, 0x000000, 0x000000, 0x35f701, 0x35f811, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x360902, 0x000000, 0x360b02, 0x000000, 0x000000, 0x360d01, - 0x000000, 0x000000, 0x360e01, 0x000000, 0x360f02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x361101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x361202, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x36140d, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x362102, 0x000000, 0x000000, 0x362301, 0x000000, 0x000000, 0x362401, 0x000000, - 0x000000, 0x362501, 0x362605, 0x000000, 0x362b01, 0x000000, 0x362c01, 0x362d02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x362f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x363005, - 0x363508, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x363d02, 0x000000, 0x363f01, 0x364001, 0x364101, - 0x000000, 0x000000, 0x364203, 0x364503, 0x000000, 0x364802, 0x364a01, 0x364b04, - 0x364f02, 0x000000, 0x000000, 0x365103, 0x000000, 0x000000, 0x000000, 0x365401, - 0x000000, 0x000000, 0x000000, 0x365501, 0x000000, 0x000000, 0x000000, 0x365601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x365705, 0x365c01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x365d01, 0x000000, 0x365e01, 0x000000, 0x000000, - 0x365f01, 0x000000, 0x000000, 0x000000, 0x366001, 0x000000, 0x000000, 0x366102, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x366303, - 0x000000, 0x366605, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x366b01, - 0x000000, 0x366c01, 0x000000, 0x366d01, 0x000000, 0x000000, 0x366e09, 0x000000, - 0x36770a, 0x000000, 0x000000, 0x000000, 0x368101, 0x000000, 0x000000, 0x368201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x368301, 0x000000, 0x36840a, 0x000000, - 0x368e02, 0x369001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x369114, 0x36a501, - 0x000000, 0x36a603, 0x36a901, 0x000000, 0x36aa01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x36ab03, 0x000000, 0x000000, 0x36ae13, 0x000000, 0x000000, 0x000000, - 0x36c101, 0x000000, 0x36c202, 0x000000, 0x36c414, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x36d802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x36da03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x36dd02, 0x000000, 0x000000, 0x000000, 0x36df01, 0x36e002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x36e201, 0x000000, 0x000000, 0x36e304, 0x36e707, 0x000000, 0x36ee01, - 0x000000, 0x36ef02, 0x36f101, 0x000000, 0x000000, 0x36f201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x36f304, - 0x000000, 0x000000, 0x000000, 0x36f702, 0x000000, 0x36f901, 0x36fa01, 0x000000, - 0x36fb03, 0x36fe06, 0x370401, 0x370501, 0x370606, 0x370c02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x370e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x370f01, 0x371001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x371104, 0x000000, 0x371501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x371601, 0x000000, 0x000000, 0x000000, 0x371701, 0x000000, - 0x000000, 0x371802, 0x000000, 0x000000, 0x000000, 0x371a01, 0x371b01, 0x000000, - 0x000000, 0x371c08, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x372401, 0x000000, 0x000000, 0x000000, 0x000000, 0x372501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x372601, 0x000000, 0x000000, 0x372701, - 0x000000, 0x000000, 0x372801, 0x000000, 0x372905, 0x372e01, 0x000000, 0x372f08, - 0x373702, 0x000000, 0x000000, 0x373902, 0x000000, 0x373b01, 0x000000, 0x000000, - 0x000000, 0x373c01, 0x373d04, 0x000000, 0x000000, 0x000000, 0x000000, 0x374103, - 0x000000, 0x000000, 0x374402, 0x000000, 0x374601, 0x000000, 0x000000, 0x000000, - 0x374701, 0x000000, 0x000000, 0x374801, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x374902, 0x000000, 0x374b01, - 0x374c02, 0x000000, 0x000000, 0x374e02, 0x000000, 0x375001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x375101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x37520a, 0x000000, 0x000000, 0x375c01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x375d02, 0x000000, 0x000000, 0x375f02, 0x000000, - 0x000000, 0x376101, 0x000000, 0x000000, 0x376202, 0x376401, 0x000000, 0x000000, - 0x376503, 0x376802, 0x376a03, 0x000000, 0x376d07, 0x000000, 0x000000, 0x377401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x377501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x377601, 0x377704, 0x000000, 0x000000, 0x000000, - 0x377b04, 0x000000, 0x000000, 0x377f17, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x379603, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x379901, 0x000000, 0x000000, 0x379a05, 0x000000, 0x000000, 0x000000, - 0x379f01, 0x37a005, 0x000000, 0x000000, 0x000000, 0x37a501, 0x000000, 0x000000, - 0x000000, 0x37a603, 0x000000, 0x37a901, 0x000000, 0x000000, 0x37aa03, 0x000000, - 0x000000, 0x37ad02, 0x000000, 0x000000, 0x37af04, 0x000000, 0x000000, 0x000000, - 0x37b301, 0x000000, 0x37b401, 0x000000, 0x000000, 0x000000, 0x000000, 0x37b505, - 0x37ba02, 0x37bc08, 0x000000, 0x000000, 0x37c401, 0x000000, 0x000000, 0x37c501, - 0x000000, 0x37c603, 0x37c901, 0x000000, 0x000000, 0x000000, 0x37ca01, 0x000000, - 0x000000, 0x000000, 0x37cb01, 0x37cc01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x37cd02, 0x000000, 0x000000, 0x000000, 0x37cf01, 0x000000, 0x000000, 0x000000, - 0x37d001, 0x000000, 0x37d103, 0x000000, 0x37d408, 0x37dc01, 0x37dd02, 0x37df01, - 0x37e002, 0x000000, 0x37e201, 0x000000, 0x37e301, 0x37e402, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x37e601, 0x37e705, 0x000000, 0x000000, 0x37ec01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x37ed02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x37ef01, 0x000000, 0x000000, 0x000000, 0x000000, 0x37f001, - 0x37f104, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x37f503, 0x37f801, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x37f901, 0x37fa01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x37fb01, 0x000000, 0x000000, 0x000000, - 0x37fc04, 0x000000, 0x000000, 0x380003, 0x380301, 0x000000, 0x380401, 0x000000, - 0x000000, 0x380503, 0x000000, 0x380801, 0x380901, 0x000000, 0x000000, 0x380a0f, - 0x000000, 0x381902, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x381b01, - 0x381c06, 0x382202, 0x000000, 0x382401, 0x000000, 0x000000, 0x382505, 0x000000, - 0x382a15, 0x000000, 0x383f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x384004, 0x000000, 0x000000, 0x384401, 0x000000, 0x384502, 0x000000, 0x384701, - 0x384808, 0x000000, 0x000000, 0x000000, 0x385007, 0x000000, 0x000000, 0x385706, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x385d01, 0x000000, 0x000000, 0x000000, 0x385e04, 0x000000, 0x000000, - 0x386205, 0x000000, 0x386702, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x386901, 0x000000, 0x000000, 0x386a03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x386d08, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x387503, 0x000000, 0x387803, 0x000000, 0x387b06, 0x000000, - 0x000000, 0x388101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x388202, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x388408, 0x000000, - 0x388c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x388d04, - 0x389101, 0x000000, 0x000000, 0x000000, 0x389202, 0x000000, 0x000000, 0x000000, - 0x389401, 0x389501, 0x000000, 0x000000, 0x000000, 0x389601, 0x389701, 0x389803, - 0x389b01, 0x389c01, 0x389d01, 0x389e01, 0x389f01, 0x38a002, 0x000000, 0x38a202, - 0x000000, 0x38a401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x38a505, 0x000000, 0x38aa05, 0x38af01, - 0x38b001, 0x38b101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x38b20b, 0x38bd04, 0x38c107, - 0x000000, 0x38c807, 0x000000, 0x38cf03, 0x000000, 0x38d201, 0x000000, 0x000000, - 0x38d302, 0x38d501, 0x38d601, 0x000000, 0x000000, 0x38d701, 0x000000, 0x000000, - 0x000000, 0x38d801, 0x000000, 0x38d902, 0x000000, 0x000000, 0x000000, 0x000000, - 0x38db08, 0x38e301, 0x000000, 0x000000, 0x38e401, 0x38e502, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x38e701, 0x000000, 0x000000, 0x38e802, - 0x000000, 0x000000, 0x000000, 0x38ea05, 0x38ef01, 0x000000, 0x000000, 0x38f001, - 0x38f101, 0x38f201, 0x000000, 0x000000, 0x38f302, 0x000000, 0x000000, 0x000000, - 0x000000, 0x38f501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x38f604, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x38fa01, 0x000000, 0x38fb0c, 0x000000, - 0x000000, 0x390701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x390803, 0x000000, - 0x000000, 0x390b01, 0x390c06, 0x391202, 0x000000, 0x391402, 0x000000, 0x000000, - 0x000000, 0x000000, 0x39160c, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x392201, 0x000000, 0x392303, 0x000000, 0x000000, 0x000000, 0x000000, - 0x392602, 0x000000, 0x392801, 0x392901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x392a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x392b03, 0x000000, 0x000000, 0x392e03, 0x393102, 0x000000, 0x000000, - 0x000000, 0x000000, 0x393301, 0x000000, 0x000000, 0x000000, 0x000000, 0x393401, - 0x393507, 0x000000, 0x393c01, 0x000000, 0x000000, 0x393d04, 0x000000, 0x394103, - 0x000000, 0x394404, 0x000000, 0x000000, 0x000000, 0x394803, 0x000000, 0x000000, - 0x000000, 0x394b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x394c01, 0x000000, 0x000000, 0x394d0a, 0x000000, - 0x000000, 0x000000, 0x395701, 0x000000, 0x000000, 0x395801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x395901, 0x395a03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x395d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x395e0a, 0x396802, - 0x000000, 0x000000, 0x000000, 0x000000, 0x396a06, 0x397006, 0x397601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x397701, 0x000000, 0x000000, 0x000000, 0x397806, 0x000000, 0x000000, - 0x000000, 0x000000, 0x397e01, 0x000000, 0x397f01, 0x398005, 0x398502, 0x000000, - 0x000000, 0x000000, 0x398701, 0x398802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x398a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x398c03, 0x398f01, 0x399003, 0x000000, 0x000000, 0x399302, 0x399502, 0x000000, - 0x000000, 0x000000, 0x399709, 0x39a002, 0x000000, 0x000000, 0x000000, 0x000000, - 0x39a203, 0x39a502, 0x39a701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x39a801, 0x39a903, 0x39ac06, 0x39b201, 0x000000, 0x39b301, 0x000000, 0x39b401, - 0x39b501, 0x000000, 0x000000, 0x39b601, 0x000000, 0x000000, 0x39b701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x39b802, 0x000000, 0x39ba03, 0x000000, 0x000000, - 0x39bd03, 0x000000, 0x000000, 0x39c001, 0x39c102, 0x39c307, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x39ca03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x39cd05, 0x000000, 0x39d201, 0x39d302, 0x39d503, 0x000000, - 0x000000, 0x000000, 0x39d801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x39d901, 0x000000, 0x000000, 0x000000, 0x000000, 0x39da01, 0x000000, - 0x39db03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x39de01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x39df02, - 0x000000, 0x39e101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x39e201, 0x000000, 0x39e303, 0x000000, 0x39e601, 0x000000, 0x000000, 0x000000, - 0x39e702, 0x000000, 0x000000, 0x39e901, 0x39ea03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x39ed03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x39f00c, - 0x000000, 0x39fc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x39fd01, - 0x000000, 0x000000, 0x39fe18, 0x3a1602, 0x000000, 0x3a1803, 0x000000, 0x3a1b01, - 0x000000, 0x3a1c01, 0x3a1d02, 0x3a1f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3a2001, 0x000000, 0x3a210c, 0x3a2d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3a2e0c, 0x000000, 0x3a3a01, 0x000000, 0x3a3b03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3a3e09, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3a470b, 0x000000, 0x000000, 0x3a5201, 0x000000, 0x3a5302, - 0x3a5501, 0x3a5601, 0x000000, 0x000000, 0x3a5709, 0x000000, 0x3a6002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3a6201, 0x000000, - 0x000000, 0x3a6301, 0x3a6402, 0x3a6601, 0x000000, 0x000000, 0x3a670c, 0x000000, - 0x000000, 0x000000, 0x3a7309, 0x3a7c11, 0x000000, 0x000000, 0x3a8d05, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3a9203, 0x000000, 0x000000, 0x3a9503, 0x3a9801, - 0x000000, 0x000000, 0x3a9912, 0x3aab01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3aac01, 0x000000, 0x3aad01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3aae02, 0x000000, 0x000000, 0x3ab004, 0x3ab404, 0x3ab801, 0x000000, - 0x000000, 0x000000, 0x3ab901, 0x000000, 0x000000, 0x000000, 0x3aba08, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3ac201, 0x3ac301, 0x000000, 0x000000, - 0x000000, 0x3ac401, 0x3ac502, 0x3ac702, 0x3ac90f, 0x000000, 0x3ad801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3ad909, 0x000000, 0x000000, 0x3ae207, 0x3ae902, - 0x3aeb01, 0x000000, 0x000000, 0x3aec01, 0x3aed02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3aef01, 0x000000, 0x000000, - 0x000000, 0x3af005, 0x000000, 0x000000, 0x000000, 0x000000, 0x3af502, 0x000000, - 0x3af701, 0x000000, 0x3af803, 0x000000, 0x3afb02, 0x000000, 0x000000, 0x3afd03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3b0001, 0x000000, 0x000000, 0x3b0103, 0x000000, 0x3b0404, 0x3b0802, 0x000000, - 0x000000, 0x000000, 0x3b0a03, 0x000000, 0x3b0d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3b0e01, 0x000000, 0x000000, 0x3b0f03, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3b1206, 0x3b1801, 0x000000, 0x000000, - 0x000000, 0x3b1901, 0x000000, 0x3b1a03, 0x000000, 0x000000, 0x3b1d01, 0x000000, - 0x3b1e02, 0x000000, 0x000000, 0x000000, 0x3b2001, 0x3b2101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3b2201, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3b230e, 0x000000, 0x000000, 0x3b3108, 0x3b3907, 0x000000, - 0x3b4001, 0x3b4105, 0x000000, 0x3b4602, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3b4801, 0x000000, 0x3b4901, 0x3b4a04, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3b4e02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3b5002, 0x3b5207, 0x000000, 0x3b5901, 0x3b5a01, 0x3b5b08, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3b6302, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3b6501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3b6606, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3b6c01, 0x000000, 0x3b6d12, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3b7f02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3b8104, 0x000000, 0x3b8502, 0x3b8708, 0x000000, 0x3b8f02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3b9101, 0x3b9201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3b9303, 0x000000, 0x000000, - 0x000000, 0x3b9607, 0x3b9d04, 0x3ba101, 0x000000, 0x000000, 0x000000, 0x3ba20a, - 0x000000, 0x000000, 0x000000, 0x3bac02, 0x3bae01, 0x000000, 0x000000, 0x000000, - 0x3baf01, 0x3bb001, 0x3bb103, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3bb404, 0x000000, 0x000000, 0x000000, 0x000000, 0x3bb802, 0x000000, 0x000000, - 0x3bba05, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3bbf01, 0x3bc007, 0x000000, 0x000000, 0x3bc702, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3bc901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3bca01, 0x3bcb01, 0x000000, 0x3bcc02, 0x000000, 0x000000, 0x3bce01, 0x000000, - 0x000000, 0x3bcf01, 0x3bd001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3bd103, - 0x3bd401, 0x000000, 0x000000, 0x000000, 0x3bd501, 0x3bd601, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3bd701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3bd803, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3bdb01, 0x000000, 0x3bdc01, 0x3bdd04, 0x000000, 0x3be104, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3be501, 0x000000, 0x3be606, 0x000000, 0x3bec01, - 0x000000, 0x000000, 0x3bed01, 0x000000, 0x000000, 0x3bee01, 0x3bef01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3bf002, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3bf201, 0x000000, 0x000000, 0x3bf301, 0x3bf401, 0x3bf506, 0x000000, 0x3bfb01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3bfc01, 0x000000, 0x3bfd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3bfe01, 0x3bff04, 0x3c0310, 0x000000, 0x3c130c, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3c1f01, 0x000000, 0x000000, 0x3c2002, - 0x000000, 0x3c2201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3c2301, 0x000000, 0x000000, 0x3c2401, 0x3c2501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3c2601, 0x000000, 0x3c2702, 0x000000, 0x000000, 0x000000, 0x3c2903, 0x000000, - 0x3c2c05, 0x3c3101, 0x000000, 0x000000, 0x000000, 0x000000, 0x3c3201, 0x000000, - 0x000000, 0x000000, 0x3c3304, 0x000000, 0x3c370c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3c4307, 0x000000, 0x3c4a03, 0x000000, - 0x000000, 0x3c4d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x3c4e01, 0x000000, - 0x000000, 0x000000, 0x3c4f01, 0x000000, 0x000000, 0x000000, 0x3c5008, 0x3c5802, - 0x3c5a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3c5b03, 0x000000, 0x000000, 0x3c5e01, 0x000000, 0x000000, 0x000000, 0x3c5f02, - 0x000000, 0x000000, 0x3c6102, 0x000000, 0x3c6301, 0x3c6401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3c6502, 0x3c6701, 0x000000, 0x3c6801, 0x000000, - 0x000000, 0x3c6901, 0x000000, 0x000000, 0x3c6a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3c6b0d, 0x000000, 0x000000, 0x000000, 0x000000, 0x3c7803, - 0x000000, 0x000000, 0x3c7b01, 0x000000, 0x3c7c01, 0x3c7d01, 0x000000, 0x000000, - 0x000000, 0x3c7e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3c7f04, - 0x000000, 0x3c8306, 0x3c8901, 0x000000, 0x000000, 0x000000, 0x3c8a01, 0x000000, - 0x000000, 0x000000, 0x3c8b01, 0x000000, 0x3c8c0b, 0x000000, 0x000000, 0x3c970a, - 0x000000, 0x3ca102, 0x000000, 0x000000, 0x000000, 0x3ca301, 0x000000, 0x3ca401, - 0x3ca501, 0x000000, 0x000000, 0x3ca612, 0x000000, 0x000000, 0x3cb801, 0x3cb902, - 0x000000, 0x3cbb04, 0x3cbf01, 0x000000, 0x3cc001, 0x000000, 0x000000, 0x000000, - 0x3cc101, 0x000000, 0x3cc202, 0x000000, 0x3cc408, 0x3ccc08, 0x3cd404, 0x3cd801, - 0x3cd904, 0x000000, 0x3cdd01, 0x000000, 0x3cde03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3ce102, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3ce301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3ce404, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3ce801, - 0x3ce901, 0x000000, 0x000000, 0x000000, 0x000000, 0x3cea01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3ceb01, 0x000000, 0x000000, 0x000000, - 0x3cec03, 0x000000, 0x000000, 0x000000, 0x000000, 0x3cef01, 0x000000, 0x000000, - 0x3cf001, 0x000000, 0x000000, 0x000000, 0x000000, 0x3cf101, 0x3cf201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3cf305, 0x000000, 0x3cf803, - 0x000000, 0x000000, 0x3cfb01, 0x000000, 0x000000, 0x3cfc02, 0x000000, 0x000000, - 0x3cfe02, 0x3d0001, 0x3d0102, 0x000000, 0x000000, 0x3d0310, 0x000000, 0x3d1301, - 0x3d140c, 0x000000, 0x000000, 0x3d2001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3d2101, 0x000000, 0x000000, 0x3d2205, 0x000000, - 0x000000, 0x000000, 0x3d2702, 0x000000, 0x3d2906, 0x000000, 0x000000, 0x000000, - 0x3d2f01, 0x000000, 0x000000, 0x3d3003, 0x000000, 0x000000, 0x3d3301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3d3405, 0x000000, 0x000000, 0x3d3901, - 0x000000, 0x000000, 0x3d3a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x3d3b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3d3c01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3d3d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3d3e02, 0x000000, - 0x000000, 0x3d4005, 0x000000, 0x3d4501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3d4601, 0x000000, 0x3d4702, 0x000000, 0x000000, 0x3d4907, 0x000000, 0x000000, - 0x000000, 0x3d5002, 0x000000, 0x3d5201, 0x3d5301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3d5401, 0x000000, - 0x3d5501, 0x3d5601, 0x000000, 0x3d5701, 0x000000, 0x3d5802, 0x000000, 0x3d5a02, - 0x000000, 0x3d5c03, 0x000000, 0x3d5f04, 0x3d6301, 0x000000, 0x3d6401, 0x000000, - 0x3d6502, 0x3d6704, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3d6b01, - 0x000000, 0x000000, 0x000000, 0x3d6c01, 0x000000, 0x3d6d0e, 0x000000, 0x000000, - 0x000000, 0x3d7b05, 0x000000, 0x3d8001, 0x3d8101, 0x000000, 0x000000, 0x3d8201, - 0x000000, 0x3d8301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3d8403, - 0x000000, 0x000000, 0x000000, 0x3d8701, 0x000000, 0x3d8806, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3d8e06, 0x000000, 0x000000, 0x000000, - 0x3d9402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3d9604, 0x000000, 0x000000, 0x000000, 0x3d9a0d, 0x000000, - 0x000000, 0x3da701, 0x000000, 0x000000, 0x000000, 0x000000, 0x3da805, 0x3dad01, - 0x3dae01, 0x000000, 0x000000, 0x3daf0f, 0x000000, 0x000000, 0x000000, 0x3dbe04, - 0x000000, 0x3dc207, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3dc901, 0x000000, - 0x000000, 0x000000, 0x3dca02, 0x000000, 0x000000, 0x000000, 0x000000, 0x3dcc01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3dcd02, 0x3dcf03, 0x000000, - 0x000000, 0x3dd202, 0x000000, 0x000000, 0x3dd402, 0x3dd601, 0x000000, 0x3dd701, - 0x000000, 0x000000, 0x3dd802, 0x000000, 0x3dda03, 0x3ddd01, 0x3dde04, 0x3de201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3de301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3de406, 0x3dea05, 0x3def02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3df102, 0x3df301, 0x000000, 0x3df403, 0x000000, 0x000000, - 0x000000, 0x3df701, 0x000000, 0x000000, 0x000000, 0x000000, 0x3df801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3df906, 0x000000, 0x3dff04, - 0x000000, 0x000000, 0x3e0301, 0x000000, 0x000000, 0x000000, 0x000000, 0x3e0401, - 0x3e0505, 0x3e0a02, 0x3e0c03, 0x000000, 0x000000, 0x3e0f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3e1001, 0x3e1102, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3e1301, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3e1401, 0x000000, 0x000000, - 0x3e1501, 0x000000, 0x000000, 0x000000, 0x3e1601, 0x000000, 0x3e1701, 0x3e1801, - 0x000000, 0x3e1903, 0x3e1c01, 0x3e1d09, 0x000000, 0x3e2604, 0x3e2a01, 0x000000, - 0x3e2b08, 0x000000, 0x3e330b, 0x3e3e02, 0x000000, 0x3e400d, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3e4d08, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3e5503, 0x000000, 0x000000, 0x000000, 0x3e5805, - 0x000000, 0x000000, 0x3e5d01, 0x000000, 0x3e5e0a, 0x000000, 0x000000, 0x3e6801, - 0x000000, 0x000000, 0x3e6903, 0x000000, 0x000000, 0x3e6c01, 0x3e6d01, 0x3e6e03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3e7104, - 0x000000, 0x000000, 0x000000, 0x3e7501, 0x000000, 0x3e7604, 0x3e7a03, 0x3e7d01, - 0x000000, 0x3e7e01, 0x000000, 0x3e7f08, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3e8701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3e8802, 0x3e8a02, 0x000000, 0x3e8c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3e8d01, 0x000000, 0x000000, 0x3e8e08, 0x3e9601, 0x3e9701, 0x3e9801, 0x000000, - 0x000000, 0x3e9904, 0x000000, 0x3e9d02, 0x000000, 0x3e9f01, 0x000000, 0x3ea002, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3ea201, 0x3ea301, - 0x3ea402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3ea602, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3ea802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3eaa01, 0x3eab03, 0x000000, 0x000000, 0x3eae01, 0x000000, 0x000000, - 0x000000, 0x3eaf01, 0x000000, 0x000000, 0x3eb001, 0x3eb102, 0x3eb303, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3eb601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3eb702, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3eb902, 0x3ebb01, 0x3ebc02, - 0x000000, 0x000000, 0x3ebe01, 0x000000, 0x000000, 0x3ebf03, 0x000000, 0x000000, - 0x000000, 0x3ec201, 0x3ec301, 0x000000, 0x000000, 0x3ec409, 0x3ecd01, 0x000000, - 0x000000, 0x000000, 0x3ece01, 0x000000, 0x000000, 0x000000, 0x3ecf01, 0x000000, - 0x3ed007, 0x000000, 0x000000, 0x000000, 0x3ed701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3ed804, 0x3edc04, 0x000000, 0x3ee006, 0x000000, 0x3ee601, 0x000000, 0x3ee701, - 0x3ee897, 0x000000, 0x000000, 0x3f7f03, 0x000000, 0x000000, 0x3f8201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3f8301, 0x3f8401, - 0x000000, 0x000000, 0x3f8501, 0x000000, 0x000000, 0x3f8605, 0x000000, 0x3f8b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3f8c01, - 0x000000, 0x000000, 0x3f8d03, 0x3f9001, 0x000000, 0x3f9101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3f9201, 0x3f9301, 0x3f9403, 0x3f9701, 0x000000, 0x000000, - 0x000000, 0x3f9803, 0x3f9b02, 0x000000, 0x000000, 0x000000, 0x3f9d03, 0x000000, - 0x3fa001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3fa101, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fa201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fa301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3fa402, 0x3fa602, 0x3fa805, 0x000000, 0x3fad02, 0x000000, 0x3faf01, 0x000000, - 0x3fb001, 0x000000, 0x3fb101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fb201, - 0x3fb304, 0x3fb701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3fb802, 0x3fba03, 0x000000, 0x3fbd03, 0x000000, 0x000000, 0x000000, 0x3fc005, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fc507, - 0x3fcc03, 0x3fcf01, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fd003, 0x3fd305, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fd801, 0x000000, 0x000000, - 0x3fd901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3fda01, 0x000000, 0x000000, 0x3fdb01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3fdc01, 0x000000, 0x000000, 0x000000, 0x3fdd07, 0x000000, - 0x3fe402, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fe601, 0x3fe702, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3fe901, 0x3fea01, 0x3feb01, 0x3fec01, 0x000000, - 0x000000, 0x3fed01, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fee01, 0x3fef01, - 0x000000, 0x3ff005, 0x3ff502, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3ff702, 0x000000, 0x000000, 0x000000, 0x000000, 0x3ff901, - 0x3ffa01, 0x000000, 0x3ffb01, 0x000000, 0x000000, 0x000000, 0x3ffc02, 0x3ffe07, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x400509, 0x000000, 0x000000, - 0x000000, 0x400e03, 0x000000, 0x401102, 0x401302, 0x401501, 0x401602, 0x000000, - 0x000000, 0x000000, 0x401802, 0x401a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x401b01, 0x000000, 0x401c02, 0x401e08, 0x402601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x402704, 0x000000, 0x000000, 0x000000, 0x402b06, 0x403101, - 0x40320e, 0x404001, 0x000000, 0x404101, 0x404202, 0x000000, 0x000000, 0x000000, - 0x404401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x404502, 0x000000, 0x000000, 0x404702, 0x404901, 0x000000, 0x000000, 0x404a01, - 0x000000, 0x000000, 0x404b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x404d01, - 0x000000, 0x404e03, 0x000000, 0x000000, 0x40510d, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x405e01, 0x000000, 0x000000, 0x405f01, 0x000000, 0x406003, - 0x406301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x406404, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x406802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x406a07, 0x000000, 0x000000, 0x407105, 0x000000, 0x000000, 0x407602, 0x000000, - 0x407801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x407902, 0x000000, 0x000000, 0x000000, 0x407b01, 0x407c02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x407e02, - 0x408003, 0x000000, 0x000000, 0x000000, 0x408301, 0x000000, 0x408402, 0x000000, - 0x40860a, 0x000000, 0x409002, 0x000000, 0x000000, 0x409203, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x409507, 0x000000, 0x000000, 0x409c01, - 0x409d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x409e04, 0x40a201, 0x40a303, 0x000000, 0x000000, 0x000000, - 0x40a601, 0x000000, 0x40a701, 0x000000, 0x000000, 0x000000, 0x40a805, 0x000000, - 0x000000, 0x40ad04, 0x000000, 0x000000, 0x40b103, 0x40b405, 0x000000, 0x000000, - 0x000000, 0x40b903, 0x000000, 0x000000, 0x000000, 0x40bc0c, 0x40c801, 0x000000, - 0x000000, 0x000000, 0x40c901, 0x40ca08, 0x40d201, 0x000000, 0x40d302, 0x000000, - 0x40d502, 0x000000, 0x000000, 0x000000, 0x40d701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x40d802, 0x000000, 0x000000, 0x000000, 0x000000, 0x40da01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x40db08, - 0x40e301, 0x000000, 0x000000, 0x000000, 0x000000, 0x40e405, 0x000000, 0x40e916, - 0x000000, 0x000000, 0x000000, 0x40ff01, 0x000000, 0x000000, 0x410004, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x410401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x410505, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x410a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x410c01, 0x410d01, - 0x000000, 0x000000, 0x000000, 0x410e01, 0x000000, 0x000000, 0x410f0b, 0x411a04, - 0x000000, 0x000000, 0x000000, 0x000000, 0x411e01, 0x000000, 0x411f01, 0x000000, - 0x000000, 0x000000, 0x412003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x41230a, 0x000000, 0x412d03, 0x000000, 0x000000, 0x000000, 0x000000, 0x413001, - 0x000000, 0x413102, 0x000000, 0x413301, 0x000000, 0x413401, 0x000000, 0x413502, - 0x000000, 0x413709, 0x000000, 0x000000, 0x000000, 0x414002, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x414202, 0x000000, 0x000000, 0x000000, - 0x414402, 0x000000, 0x000000, 0x000000, 0x000000, 0x414601, 0x000000, 0x414701, - 0x414802, 0x000000, 0x000000, 0x000000, 0x414a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x414b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x414d06, 0x415302, 0x000000, 0x000000, 0x415501, - 0x415601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x415701, 0x000000, 0x415801, 0x000000, 0x000000, 0x415901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x415a01, 0x000000, 0x000000, 0x000000, 0x415b02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x415d04, 0x416105, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x416602, 0x000000, - 0x000000, 0x416804, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x416c03, - 0x000000, 0x416f04, 0x000000, 0x000000, 0x000000, 0x000000, 0x417302, 0x000000, - 0x000000, 0x417501, 0x000000, 0x417601, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x417702, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x417907, 0x000000, 0x418001, 0x000000, 0x418102, 0x000000, 0x418305, - 0x000000, 0x000000, 0x000000, 0x418803, 0x418b01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x418c01, 0x000000, 0x000000, 0x418d02, 0x000000, - 0x418f01, 0x000000, 0x000000, 0x419002, 0x419205, 0x419702, 0x000000, 0x000000, - 0x419904, 0x000000, 0x000000, 0x000000, 0x419d0b, 0x000000, 0x000000, 0x41a805, - 0x000000, 0x000000, 0x41ad02, 0x41af01, 0x41b002, 0x000000, 0x41b201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x41b310, 0x000000, 0x000000, 0x41c303, 0x41c602, 0x000000, 0x000000, - 0x41c80a, 0x41d206, 0x41d801, 0x000000, 0x000000, 0x41d901, 0x41da01, 0x000000, - 0x000000, 0x41db02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x41dd01, 0x000000, 0x41de01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x41df0c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x41eb05, 0x000000, 0x41f001, 0x41f103, - 0x000000, 0x41f401, 0x41f501, 0x000000, 0x41f602, 0x000000, 0x000000, 0x000000, - 0x41f802, 0x41fa03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x41fd01, - 0x41fe02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x420001, 0x000000, 0x42010f, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x42100b, 0x000000, 0x000000, 0x421b01, - 0x421c01, 0x421d01, 0x000000, 0x000000, 0x421e0a, 0x000000, 0x000000, 0x000000, - 0x422801, 0x422902, 0x000000, 0x000000, 0x000000, 0x422b01, 0x422c01, 0x000000, - 0x000000, 0x000000, 0x422d03, 0x423001, 0x000000, 0x423103, 0x423401, 0x423502, - 0x000000, 0x000000, 0x000000, 0x423703, 0x423a0a, 0x000000, 0x000000, 0x000000, - 0x424404, 0x000000, 0x424806, 0x000000, 0x000000, 0x424e01, 0x000000, 0x000000, - 0x424f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x425103, 0x000000, 0x000000, - 0x425402, 0x000000, 0x425606, 0x425c01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x425d01, 0x000000, 0x000000, 0x425e02, 0x000000, 0x000000, 0x000000, 0x426001, - 0x000000, 0x426102, 0x426304, 0x426702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x426902, 0x426b02, 0x000000, 0x426d01, 0x000000, 0x000000, 0x426e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x426f05, 0x427401, 0x427507, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x427c0a, 0x000000, 0x428602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x428803, 0x428b02, 0x000000, 0x428d01, 0x000000, 0x000000, 0x428e06, 0x000000, - 0x429401, 0x000000, 0x000000, 0x429501, 0x429601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x429701, 0x000000, 0x429801, 0x429901, 0x000000, 0x429a02, 0x429c01, - 0x000000, 0x429d01, 0x000000, 0x429e08, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x42a601, 0x000000, 0x000000, 0x42a701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x42a803, 0x000000, 0x000000, 0x42ab04, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x42af01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x42b001, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x42b106, - 0x000000, 0x42b701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x42b802, - 0x42ba01, 0x42bb01, 0x000000, 0x000000, 0x000000, 0x42bc07, 0x000000, 0x000000, - 0x000000, 0x000000, 0x42c301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x42c402, 0x000000, 0x42c607, 0x42cd01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x42ce02, 0x000000, - 0x000000, 0x42d002, 0x000000, 0x42d207, 0x000000, 0x000000, 0x000000, 0x000000, - 0x42d901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x42da0a, 0x42e402, - 0x42e601, 0x000000, 0x000000, 0x42e701, 0x000000, 0x000000, 0x000000, 0x42e801, - 0x42e901, 0x000000, 0x42ea01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x42eb03, 0x42ee0a, 0x42f801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x42f901, 0x000000, 0x42fa01, 0x000000, 0x42fb01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x42fc01, 0x42fd01, - 0x000000, 0x42fe02, 0x430002, 0x000000, 0x430208, 0x000000, 0x000000, 0x000000, - 0x000000, 0x430a08, 0x431203, 0x000000, 0x431505, 0x000000, 0x000000, 0x000000, - 0x000000, 0x431a03, 0x000000, 0x000000, 0x431d03, 0x432001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x432102, 0x000000, 0x000000, 0x432301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x432402, 0x432603, - 0x000000, 0x432901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x432a01, 0x432b07, 0x433201, 0x433301, 0x000000, - 0x000000, 0x43340c, 0x434001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x434101, 0x000000, 0x000000, 0x000000, 0x000000, 0x434201, 0x000000, 0x434301, - 0x000000, 0x434409, 0x000000, 0x000000, 0x434d06, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x435302, 0x000000, 0x435501, 0x435602, 0x000000, 0x000000, - 0x000000, 0x435803, 0x435b01, 0x000000, 0x000000, 0x435c03, 0x000000, 0x435f03, - 0x000000, 0x000000, 0x436201, 0x000000, 0x43630c, 0x000000, 0x000000, 0x436f02, - 0x000000, 0x437102, 0x000000, 0x000000, 0x000000, 0x437303, 0x000000, 0x000000, - 0x000000, 0x000000, 0x437601, 0x437701, 0x000000, 0x437816, 0x000000, 0x438e07, - 0x000000, 0x439503, 0x000000, 0x439801, 0x000000, 0x000000, 0x000000, 0x439902, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x439b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x439c01, 0x000000, 0x439d03, 0x43a001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x43a101, 0x43a202, 0x000000, 0x43a401, 0x000000, 0x000000, 0x000000, 0x000000, - 0x43a502, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x43a70e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x43b50a, - 0x000000, 0x43bf04, 0x43c302, 0x000000, 0x000000, 0x000000, 0x43c501, 0x43c602, - 0x000000, 0x000000, 0x43c801, 0x000000, 0x000000, 0x43c901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x43ca01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x43cb01, 0x43cc02, - 0x000000, 0x000000, 0x43ce0c, 0x000000, 0x000000, 0x000000, 0x43da01, 0x000000, - 0x43db15, 0x000000, 0x000000, 0x000000, 0x43f001, 0x000000, 0x000000, 0x000000, - 0x000000, 0x43f101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x43f204, - 0x000000, 0x000000, 0x43f602, 0x000000, 0x000000, 0x000000, 0x43f810, 0x440801, - 0x000000, 0x440901, 0x000000, 0x440a03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x440d01, 0x440e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x440f04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x441301, 0x441404, - 0x441804, 0x000000, 0x000000, 0x000000, 0x441c04, 0x000000, 0x000000, 0x442001, - 0x000000, 0x000000, 0x44210b, 0x000000, 0x000000, 0x442c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x442d02, 0x442f06, - 0x443504, 0x000000, 0x000000, 0x443902, 0x000000, 0x000000, 0x443b01, 0x000000, - 0x000000, 0x443c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x443d05, 0x000000, - 0x444204, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x444604, 0x000000, - 0x000000, 0x000000, 0x444a01, 0x444b01, 0x000000, 0x444c01, 0x000000, 0x444d05, - 0x000000, 0x445201, 0x445301, 0x000000, 0x000000, 0x445401, 0x000000, 0x445501, - 0x445601, 0x000000, 0x000000, 0x000000, 0x445701, 0x000000, 0x000000, 0x000000, - 0x445805, 0x000000, 0x000000, 0x000000, 0x445d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x445e02, 0x000000, 0x446002, 0x000000, 0x446205, 0x000000, - 0x000000, 0x000000, 0x446701, 0x446801, 0x446901, 0x000000, 0x000000, 0x446a04, - 0x000000, 0x000000, 0x000000, 0x446e03, 0x000000, 0x000000, 0x000000, 0x447101, - 0x000000, 0x000000, 0x447204, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x447601, 0x000000, 0x000000, 0x000000, - 0x447706, 0x000000, 0x000000, 0x000000, 0x447d02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x447f03, 0x000000, 0x000000, 0x000000, 0x448201, 0x000000, 0x448303, - 0x448606, 0x448c07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x449302, 0x000000, 0x000000, 0x449501, 0x000000, 0x449601, - 0x000000, 0x000000, 0x449703, 0x000000, 0x000000, 0x000000, 0x449a01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x449b01, 0x000000, 0x000000, - 0x449c01, 0x449d01, 0x000000, 0x449e02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x44a001, 0x44a105, 0x000000, 0x44a606, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x44ac01, 0x000000, 0x000000, 0x000000, 0x44ad01, 0x44ae03, 0x000000, - 0x44b101, 0x000000, 0x000000, 0x44b201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x44b308, 0x000000, 0x000000, 0x000000, 0x000000, - 0x44bb01, 0x44bc01, 0x000000, 0x000000, 0x44bd02, 0x44bf01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x44c003, 0x000000, 0x000000, 0x000000, - 0x44c301, 0x000000, 0x000000, 0x44c402, 0x000000, 0x000000, 0x44c605, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x44cb06, 0x000000, 0x000000, 0x44d103, 0x000000, 0x44d401, - 0x44d501, 0x000000, 0x000000, 0x000000, 0x000000, 0x44d601, 0x000000, 0x000000, - 0x44d706, 0x000000, 0x000000, 0x44dd01, 0x000000, 0x000000, 0x44de02, 0x44e001, - 0x44e101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x44e201, 0x000000, 0x000000, 0x44e301, 0x000000, 0x000000, 0x44e401, 0x000000, - 0x44e502, 0x000000, 0x44e701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x44e802, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x44ea02, 0x000000, 0x000000, 0x000000, 0x000000, 0x44ec01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x44ed10, 0x44fd01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x44fe01, 0x44ff01, 0x000000, 0x450001, 0x450103, 0x000000, 0x000000, - 0x000000, 0x450402, 0x450602, 0x450806, 0x000000, 0x450e05, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x451302, 0x000000, 0x000000, - 0x000000, 0x45151c, 0x000000, 0x453106, 0x000000, 0x000000, 0x453702, 0x453904, - 0x453d02, 0x000000, 0x000000, 0x453f01, 0x000000, 0x000000, 0x454003, 0x000000, - 0x000000, 0x000000, 0x454301, 0x000000, 0x454401, 0x000000, 0x454501, 0x000000, - 0x000000, 0x000000, 0x454602, 0x000000, 0x000000, 0x000000, 0x000000, 0x454802, - 0x000000, 0x000000, 0x000000, 0x000000, 0x454a02, 0x000000, 0x000000, 0x000000, - 0x454c01, 0x454d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x454e01, 0x454f01, - 0x455004, 0x000000, 0x000000, 0x000000, 0x455401, 0x000000, 0x455501, 0x455601, - 0x455702, 0x455907, 0x456001, 0x456101, 0x000000, 0x456203, 0x000000, 0x456506, - 0x000000, 0x456b03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x456e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x456f01, - 0x000000, 0x000000, 0x457001, 0x000000, 0x000000, 0x457101, 0x457203, 0x000000, - 0x457501, 0x457601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x457725, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x459c01, 0x000000, 0x000000, 0x000000, - 0x459d01, 0x000000, 0x000000, 0x000000, 0x459e02, 0x45a001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x45a105, 0x45a601, 0x45a701, 0x45a80c, 0x000000, - 0x000000, 0x45b401, 0x000000, 0x000000, 0x000000, 0x45b502, 0x000000, 0x000000, - 0x000000, 0x45b702, 0x45b904, 0x45bd01, 0x000000, 0x45be04, 0x000000, 0x000000, - 0x45c201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x45c301, - 0x45c409, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x45cd01, 0x45ce01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x45cf07, 0x000000, 0x000000, 0x000000, - 0x45d602, 0x000000, 0x000000, 0x000000, 0x45d802, 0x45da01, 0x000000, 0x45db01, - 0x000000, 0x45dc01, 0x000000, 0x000000, 0x45dd01, 0x000000, 0x000000, 0x45de04, - 0x45e23e, 0x462001, 0x000000, 0x000000, 0x000000, 0x000000, 0x462101, 0x000000, - 0x000000, 0x46220d, 0x000000, 0x462f04, 0x000000, 0x000000, 0x463302, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x463502, 0x000000, 0x000000, 0x000000, - 0x000000, 0x463702, 0x463905, 0x000000, 0x000000, 0x463e14, 0x000000, 0x000000, - 0x000000, 0x000000, 0x465204, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x465602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x465801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x465902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x465b02, 0x000000, 0x000000, - 0x465d01, 0x000000, 0x000000, 0x000000, 0x465e01, 0x000000, 0x000000, 0x000000, - 0x465f01, 0x000000, 0x46600d, 0x000000, 0x000000, 0x000000, 0x466d01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x466e05, 0x000000, - 0x000000, 0x467301, 0x467401, 0x46750b, 0x000000, 0x000000, 0x468007, 0x468701, - 0x000000, 0x468801, 0x468901, 0x000000, 0x468a03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x468d02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x468f03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x469201, 0x000000, 0x000000, 0x000000, 0x469307, - 0x000000, 0x000000, 0x469a03, 0x000000, 0x000000, 0x469d0f, 0x46ac01, 0x46ad03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x46b001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x46b102, 0x46b308, - 0x000000, 0x000000, 0x000000, 0x46bb03, 0x000000, 0x46be01, 0x000000, 0x000000, - 0x46bf01, 0x000000, 0x46c002, 0x000000, 0x000000, 0x46c201, 0x46c302, 0x000000, - 0x46c503, 0x000000, 0x000000, 0x000000, 0x000000, 0x46c802, 0x000000, 0x000000, - 0x000000, 0x000000, 0x46ca01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x46cb01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x46cc01, 0x46cd01, 0x000000, 0x46ce01, 0x000000, 0x000000, 0x46cf07, - 0x46d60f, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x46e501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x46e601, 0x46e704, 0x000000, 0x000000, 0x46eb08, 0x46f302, 0x000000, 0x46f505, - 0x46fa01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x46fb0b, 0x470601, 0x000000, 0x470701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x470802, 0x000000, 0x470a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x470b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x470c01, 0x000000, 0x000000, 0x470d01, 0x000000, - 0x000000, 0x470e01, 0x470f02, 0x000000, 0x000000, 0x471101, 0x471201, 0x471301, - 0x000000, 0x000000, 0x000000, 0x471406, 0x000000, 0x471a01, 0x000000, 0x471b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x471c02, 0x000000, 0x000000, 0x000000, - 0x471e01, 0x471f06, 0x000000, 0x000000, 0x472501, 0x000000, 0x000000, 0x000000, - 0x472601, 0x472704, 0x000000, 0x000000, 0x000000, 0x472b02, 0x000000, 0x000000, - 0x472d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x472e02, 0x000000, - 0x473006, 0x473603, 0x000000, 0x473901, 0x000000, 0x473a05, 0x000000, 0x000000, - 0x000000, 0x000000, 0x473f01, 0x000000, 0x000000, 0x474001, 0x474101, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x474208, 0x474a02, 0x000000, 0x474c01, - 0x000000, 0x474d0c, 0x000000, 0x000000, 0x000000, 0x475903, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x475c01, 0x475d01, 0x475e02, 0x476008, - 0x476801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x476901, 0x000000, 0x476a01, - 0x000000, 0x476b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x476c02, 0x000000, 0x476e02, 0x477001, 0x000000, 0x000000, 0x477112, 0x000000, - 0x000000, 0x000000, 0x000000, 0x478302, 0x000000, 0x000000, 0x000000, 0x478501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x478601, 0x000000, 0x478701, 0x478802, - 0x000000, 0x478a01, 0x000000, 0x000000, 0x478b04, 0x478f0b, 0x000000, 0x479a01, - 0x000000, 0x479b04, 0x000000, 0x479f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x47a003, 0x000000, 0x47a301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x47a403, 0x000000, 0x47a701, 0x47a801, - 0x000000, 0x47a902, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x47ab03, - 0x000000, 0x47ae05, 0x000000, 0x000000, 0x47b301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x47b40a, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x47be01, 0x000000, 0x000000, 0x000000, 0x47bf01, 0x000000, 0x47c001, - 0x000000, 0x47c101, 0x47c242, 0x000000, 0x000000, 0x000000, 0x480407, 0x480b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x480c05, 0x481101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x481201, 0x000000, 0x481301, 0x000000, - 0x000000, 0x000000, 0x481402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x481601, 0x000000, 0x000000, 0x000000, 0x481701, 0x000000, 0x481803, 0x000000, - 0x481b01, 0x000000, 0x000000, 0x481c05, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x482101, 0x000000, 0x000000, 0x482206, - 0x000000, 0x000000, 0x000000, 0x000000, 0x482803, 0x000000, 0x000000, 0x000000, - 0x482b01, 0x000000, 0x482c01, 0x000000, 0x000000, 0x000000, 0x482d01, 0x482e01, - 0x482f05, 0x000000, 0x000000, 0x000000, 0x483401, 0x000000, 0x000000, 0x000000, - 0x483502, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x483702, - 0x483901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x483a04, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x483e01, 0x000000, 0x000000, - 0x483f09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x484810, - 0x000000, 0x485801, 0x000000, 0x485901, 0x485a02, 0x000000, 0x000000, 0x000000, - 0x485c01, 0x485d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x485e05, - 0x000000, 0x000000, 0x000000, 0x000000, 0x486301, 0x486401, 0x000000, 0x486501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x486602, 0x486801, - 0x000000, 0x486902, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x486b01, 0x486c01, 0x486d01, 0x486e03, 0x000000, 0x487107, 0x000000, 0x000000, - 0x000000, 0x000000, 0x487803, 0x487b02, 0x000000, 0x000000, 0x487d0b, 0x000000, - 0x000000, 0x488802, 0x488a01, 0x000000, 0x000000, 0x000000, 0x488b02, 0x000000, - 0x488d0c, 0x000000, 0x000000, 0x000000, 0x000000, 0x489902, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x489b01, 0x000000, 0x000000, 0x489c01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x489d02, 0x000000, 0x489f02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x48a102, 0x000000, 0x000000, 0x000000, - 0x48a301, 0x000000, 0x000000, 0x48a401, 0x48a503, 0x000000, 0x000000, 0x48a801, - 0x000000, 0x000000, 0x000000, 0x000000, 0x48a901, 0x000000, 0x000000, 0x000000, - 0x48aa01, 0x48ab01, 0x000000, 0x48ac03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x48af03, 0x000000, 0x000000, 0x48b201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x48b304, 0x000000, 0x48b701, - 0x000000, 0x000000, 0x48b802, 0x48ba09, 0x000000, 0x000000, 0x000000, 0x48c301, - 0x000000, 0x000000, 0x000000, 0x48c401, 0x000000, 0x000000, 0x48c501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x48c601, 0x000000, - 0x48c703, 0x000000, 0x000000, 0x48ca02, 0x48cc04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x48d002, 0x48d205, 0x48d704, 0x000000, 0x48db01, - 0x000000, 0x000000, 0x48dc02, 0x000000, 0x48de01, 0x48df01, 0x000000, 0x000000, - 0x000000, 0x48e009, 0x000000, 0x000000, 0x48e908, 0x48f103, 0x000000, 0x000000, - 0x000000, 0x000000, 0x48f407, 0x48fb01, 0x48fc01, 0x000000, 0x000000, 0x48fd04, - 0x000000, 0x000000, 0x490105, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x490601, 0x490701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x490803, 0x000000, - 0x000000, 0x490b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x490d06, 0x000000, 0x491301, 0x000000, 0x000000, 0x491401, 0x000000, 0x491501, - 0x000000, 0x000000, 0x491603, 0x000000, 0x491904, 0x000000, 0x000000, 0x491d01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x491e03, 0x000000, - 0x000000, 0x492104, 0x000000, 0x492505, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x492a08, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x493202, - 0x493401, 0x000000, 0x000000, 0x493501, 0x000000, 0x493601, 0x493702, 0x493902, - 0x493b04, 0x000000, 0x493f01, 0x494001, 0x000000, 0x000000, 0x494109, 0x494a02, - 0x000000, 0x494c01, 0x000000, 0x000000, 0x000000, 0x494d03, 0x000000, 0x000000, - 0x000000, 0x495004, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x495405, - 0x495901, 0x495a02, 0x495c03, 0x000000, 0x000000, 0x495f03, 0x496201, 0x000000, - 0x496305, 0x000000, 0x496802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x496a05, 0x000000, 0x000000, 0x496f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x497003, 0x497302, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x497505, 0x000000, 0x000000, 0x000000, 0x497a04, - 0x497e01, 0x497f09, 0x000000, 0x000000, 0x000000, 0x000000, 0x498802, 0x000000, - 0x000000, 0x498a02, 0x498c01, 0x000000, 0x000000, 0x498d01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x498e01, 0x000000, 0x000000, 0x498f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x499007, 0x000000, 0x499701, 0x000000, 0x499801, 0x000000, - 0x499901, 0x000000, 0x000000, 0x000000, 0x000000, 0x499a01, 0x000000, 0x499b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x499c01, 0x499d02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x499f05, 0x000000, 0x000000, 0x000000, 0x49a407, - 0x49ab02, 0x000000, 0x000000, 0x49ad04, 0x49b101, 0x000000, 0x000000, 0x49b202, - 0x49b405, 0x000000, 0x000000, 0x49b907, 0x49c00a, 0x49ca01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x49cb03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x49ce01, 0x000000, 0x49cf04, 0x000000, 0x000000, 0x000000, 0x49d301, - 0x000000, 0x000000, 0x000000, 0x49d401, 0x000000, 0x49d50d, 0x49e201, 0x49e303, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x49e601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x49e701, 0x000000, - 0x000000, 0x000000, 0x49e808, 0x49f001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x49f102, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x49f302, - 0x000000, 0x000000, 0x000000, 0x000000, 0x49f508, 0x49fd09, 0x000000, 0x000000, - 0x000000, 0x4a0606, 0x4a0c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x4a0d01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4a0e01, 0x4a0f01, 0x000000, 0x000000, - 0x4a1001, 0x000000, 0x000000, 0x4a1101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4a1201, 0x4a1301, 0x000000, 0x000000, 0x000000, 0x4a1402, 0x000000, 0x4a1601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4a1701, 0x000000, 0x4a1801, 0x000000, 0x4a1903, 0x4a1c03, 0x4a1f01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4a2004, 0x000000, - 0x000000, 0x000000, 0x4a2409, 0x000000, 0x000000, 0x000000, 0x4a2d08, 0x000000, - 0x4a3501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4a3604, 0x4a3a02, - 0x000000, 0x000000, 0x4a3c01, 0x000000, 0x000000, 0x000000, 0x4a3d02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4a3f03, 0x4a4207, 0x000000, - 0x000000, 0x4a4901, 0x000000, 0x000000, 0x4a4a05, 0x000000, 0x4a4f07, 0x000000, - 0x4a5601, 0x4a5707, 0x000000, 0x4a5e02, 0x000000, 0x4a6009, 0x4a6901, 0x000000, - 0x000000, 0x000000, 0x4a6a04, 0x4a6e01, 0x4a6f03, 0x000000, 0x4a7204, 0x4a7601, - 0x4a7718, 0x000000, 0x000000, 0x4a8f05, 0x000000, 0x000000, 0x000000, 0x4a9401, - 0x4a9501, 0x000000, 0x000000, 0x000000, 0x000000, 0x4a9601, 0x000000, 0x4a9701, - 0x000000, 0x000000, 0x000000, 0x4a9801, 0x000000, 0x000000, 0x4a9901, 0x000000, - 0x4a9a01, 0x4a9b03, 0x000000, 0x000000, 0x4a9e08, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4aa601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4aa704, 0x000000, 0x000000, 0x000000, 0x4aab01, - 0x4aac04, 0x000000, 0x4ab001, 0x4ab101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4ab201, 0x4ab301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4ab401, 0x4ab502, 0x000000, 0x4ab701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4ab801, 0x4ab901, 0x4aba01, 0x4abb0e, 0x000000, 0x000000, 0x4ac901, - 0x000000, 0x000000, 0x4aca09, 0x4ad302, 0x4ad518, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4aed03, 0x4af002, 0x000000, - 0x000000, 0x4af206, 0x000000, 0x000000, 0x000000, 0x4af801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4af903, 0x000000, 0x4afc01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4afd04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4b0101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4b0202, 0x000000, - 0x4b0405, 0x4b0903, 0x000000, 0x000000, 0x000000, 0x4b0c05, 0x000000, 0x4b1105, - 0x000000, 0x000000, 0x000000, 0x4b1606, 0x4b1c01, 0x000000, 0x000000, 0x4b1d01, - 0x000000, 0x000000, 0x4b1e01, 0x4b1f01, 0x4b2006, 0x4b2601, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4b2708, 0x000000, 0x4b2f01, 0x4b3005, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4b3502, 0x000000, 0x4b3702, 0x4b3901, 0x4b3a02, - 0x000000, 0x000000, 0x4b3c05, 0x000000, 0x4b4106, 0x000000, 0x000000, 0x000000, - 0x4b4706, 0x000000, 0x4b4d03, 0x4b5001, 0x4b5101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4b5201, 0x000000, 0x000000, 0x4b5301, 0x000000, 0x000000, 0x4b5402, - 0x4b5601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4b5703, - 0x4b5a01, 0x000000, 0x4b5b05, 0x000000, 0x000000, 0x000000, 0x000000, 0x4b6001, - 0x000000, 0x4b6104, 0x000000, 0x000000, 0x000000, 0x000000, 0x4b6501, 0x4b6601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4b6701, 0x4b6809, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4b7101, 0x000000, 0x000000, 0x4b7206, 0x000000, 0x000000, - 0x4b7801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4b790b, 0x000000, 0x4b8401, 0x000000, 0x4b8501, 0x4b8601, 0x000000, 0x4b8701, - 0x4b8809, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4b9107, 0x000000, 0x000000, 0x4b9801, - 0x000000, 0x4b9908, 0x4ba104, 0x000000, 0x4ba501, 0x4ba602, 0x000000, 0x000000, - 0x4ba806, 0x000000, 0x4bae02, 0x000000, 0x4bb003, 0x4bb308, 0x4bbb01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4bbc01, 0x4bbd02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4bbf0a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4bc90a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4bd301, 0x000000, 0x000000, 0x4bd409, 0x4bdd02, 0x000000, 0x4bdf01, - 0x000000, 0x000000, 0x000000, 0x4be003, 0x000000, 0x000000, 0x000000, 0x4be303, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4be601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4be710, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4bf70b, 0x4c0202, 0x000000, 0x000000, 0x4c0401, 0x000000, 0x4c0501, 0x4c0604, - 0x000000, 0x4c0a07, 0x4c1108, 0x4c190c, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4c2507, 0x000000, 0x000000, 0x000000, 0x000000, 0x4c2c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4c2d02, 0x4c2f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4c3001, 0x000000, 0x000000, 0x000000, 0x000000, 0x4c3101, 0x4c3201, - 0x000000, 0x000000, 0x000000, 0x4c3303, 0x000000, 0x000000, 0x4c3603, 0x000000, - 0x000000, 0x4c3901, 0x000000, 0x4c3a01, 0x000000, 0x4c3b02, 0x000000, 0x4c3d0c, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4c4907, 0x000000, 0x4c5001, 0x4c5105, 0x000000, 0x4c5603, - 0x4c5901, 0x000000, 0x4c5a04, 0x4c5e01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4c5f01, 0x4c6002, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4c6201, 0x000000, 0x000000, 0x4c6304, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4c6701, 0x4c6801, 0x000000, 0x000000, 0x4c6903, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4c6c02, 0x4c6e01, 0x000000, 0x4c6f01, 0x000000, - 0x000000, 0x000000, 0x4c7001, 0x4c7108, 0x000000, 0x4c7902, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4c7b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x4c7c03, - 0x4c7f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4c8001, 0x4c8101, 0x000000, 0x000000, 0x000000, 0x4c8201, 0x4c8301, 0x000000, - 0x4c8403, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4c8701, - 0x4c8806, 0x4c8e01, 0x000000, 0x4c8f04, 0x000000, 0x000000, 0x4c9301, 0x000000, - 0x000000, 0x4c9401, 0x000000, 0x4c9502, 0x4c9702, 0x4c9903, 0x000000, 0x4c9c01, - 0x4c9d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4c9f01, - 0x4ca001, 0x000000, 0x000000, 0x4ca101, 0x000000, 0x000000, 0x4ca201, 0x000000, - 0x000000, 0x000000, 0x4ca301, 0x4ca40a, 0x4cae01, 0x000000, 0x000000, 0x4caf02, - 0x4cb102, 0x4cb307, 0x000000, 0x4cba01, 0x000000, 0x000000, 0x4cbb0e, 0x4cc901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4cca10, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4cda02, 0x4cdc02, 0x000000, 0x000000, 0x000000, 0x000000, 0x4cde04, 0x000000, - 0x4ce201, 0x000000, 0x4ce303, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4ce601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4ce701, 0x4ce803, 0x4ceb03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4cee02, 0x4cf001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4cf101, 0x4cf201, 0x000000, 0x000000, 0x4cf302, - 0x000000, 0x4cf501, 0x000000, 0x000000, 0x4cf601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4cf704, 0x4cfb02, 0x000000, 0x4cfd03, 0x000000, - 0x4d0002, 0x000000, 0x000000, 0x000000, 0x4d0203, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4d0502, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4d0702, 0x000000, 0x4d0903, 0x000000, 0x000000, 0x4d0c05, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4d1101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4d1203, 0x000000, 0x4d1501, 0x4d1604, 0x4d1a01, 0x000000, - 0x000000, 0x4d1b01, 0x000000, 0x4d1c05, 0x000000, 0x000000, 0x000000, 0x4d2101, - 0x000000, 0x000000, 0x4d2218, 0x000000, 0x4d3a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4d3b03, 0x4d3e03, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4d4101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4d4201, 0x000000, 0x000000, 0x4d430a, 0x4d4d01, - 0x000000, 0x4d4e01, 0x000000, 0x000000, 0x4d4f01, 0x000000, 0x000000, 0x000000, - 0x4d5003, 0x000000, 0x000000, 0x4d5301, 0x4d5402, 0x000000, 0x000000, 0x000000, - 0x4d5602, 0x000000, 0x000000, 0x000000, 0x4d5802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4d5a01, 0x000000, 0x4d5b01, 0x000000, 0x4d5c02, 0x000000, 0x000000, - 0x4d5e01, 0x000000, 0x000000, 0x000000, 0x4d5f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4d6007, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4d6705, 0x000000, 0x4d6c01, - 0x000000, 0x4d6d08, 0x4d7501, 0x4d7602, 0x000000, 0x000000, 0x000000, 0x4d7805, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4d7d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x4d7e04, - 0x000000, 0x000000, 0x4d8202, 0x000000, 0x000000, 0x000000, 0x000000, 0x4d8402, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4d8601, 0x000000, 0x000000, 0x4d8701, - 0x000000, 0x4d8802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4d8a03, 0x000000, 0x000000, 0x000000, 0x4d8d0a, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4d9701, - 0x000000, 0x4d9801, 0x000000, 0x4d9902, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4d9b02, 0x000000, 0x000000, 0x4d9d01, 0x000000, - 0x000000, 0x4d9e01, 0x000000, 0x000000, 0x4d9f01, 0x4da002, 0x4da205, 0x000000, - 0x4da702, 0x4da902, 0x4dab01, 0x000000, 0x000000, 0x4dac01, 0x4dad02, 0x4daf02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4db102, 0x4db301, 0x4db401, 0x000000, - 0x000000, 0x4db501, 0x000000, 0x000000, 0x000000, 0x4db601, 0x000000, 0x4db706, - 0x4dbd01, 0x000000, 0x000000, 0x4dbe02, 0x000000, 0x000000, 0x4dc001, 0x000000, - 0x000000, 0x000000, 0x4dc102, 0x000000, 0x4dc301, 0x000000, 0x4dc402, 0x4dc602, - 0x000000, 0x000000, 0x000000, 0x4dc807, 0x4dcf12, 0x000000, 0x4de101, 0x4de201, - 0x4de302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4de501, 0x000000, 0x4de602, 0x000000, 0x4de806, 0x000000, 0x000000, 0x000000, - 0x4dee01, 0x4def02, 0x4df106, 0x4df705, 0x000000, 0x4dfc06, 0x000000, 0x4e0204, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e0601, 0x000000, 0x4e070e, - 0x000000, 0x4e1501, 0x000000, 0x000000, 0x4e1602, 0x000000, 0x4e1802, 0x000000, - 0x4e1a03, 0x000000, 0x000000, 0x000000, 0x4e1d01, 0x4e1e02, 0x4e2002, 0x000000, - 0x4e2202, 0x4e2406, 0x000000, 0x4e2a01, 0x4e2b02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4e2d06, 0x000000, 0x4e3301, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4e3402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4e3601, 0x4e3701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e3802, - 0x000000, 0x000000, 0x4e3a02, 0x000000, 0x000000, 0x4e3c03, 0x000000, 0x000000, - 0x4e3f0c, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e4b01, 0x4e4c03, 0x000000, - 0x4e4f01, 0x4e5001, 0x000000, 0x000000, 0x4e5102, 0x000000, 0x4e5302, 0x000000, - 0x000000, 0x4e5503, 0x4e5802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4e5a02, 0x000000, 0x000000, 0x4e5c01, - 0x000000, 0x4e5d02, 0x000000, 0x4e5f02, 0x000000, 0x000000, 0x4e6101, 0x000000, - 0x000000, 0x4e6202, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e6401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e6501, 0x4e6601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4e6701, 0x000000, 0x000000, 0x4e6801, 0x4e6901, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4e6a03, 0x000000, 0x4e6d02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4e6f01, 0x000000, 0x4e700e, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4e7e03, 0x000000, 0x4e8109, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e8a05, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e8f01, - 0x000000, 0x000000, 0x000000, 0x4e9001, 0x4e9101, 0x000000, 0x000000, 0x000000, - 0x4e9208, 0x4e9a01, 0x4e9b07, 0x000000, 0x000000, 0x000000, 0x4ea202, 0x4ea401, - 0x4ea502, 0x000000, 0x000000, 0x000000, 0x000000, 0x4ea701, 0x000000, 0x000000, - 0x4ea801, 0x4ea90c, 0x4eb502, 0x000000, 0x4eb701, 0x000000, 0x000000, 0x000000, - 0x4eb801, 0x000000, 0x000000, 0x4eb904, 0x000000, 0x000000, 0x000000, 0x4ebd05, - 0x000000, 0x4ec201, 0x000000, 0x000000, 0x4ec302, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4ec502, 0x000000, 0x4ec702, 0x000000, - 0x4ec905, 0x000000, 0x4ece03, 0x000000, 0x000000, 0x4ed12d, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4efe01, 0x000000, 0x000000, 0x000000, 0x000000, 0x4eff02, - 0x000000, 0x4f0104, 0x000000, 0x000000, 0x4f0501, 0x000000, 0x4f0601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4f0701, 0x000000, 0x000000, 0x4f0801, 0x4f090a, - 0x000000, 0x4f1303, 0x000000, 0x4f1602, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4f1801, 0x000000, 0x000000, 0x000000, 0x4f1901, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4f1a02, 0x000000, 0x4f1c01, 0x000000, 0x4f1d02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4f1f08, 0x000000, 0x000000, 0x4f2702, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4f290c, 0x000000, 0x000000, 0x000000, - 0x4f3501, 0x000000, 0x000000, 0x4f3603, 0x4f3901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4f3a01, 0x000000, 0x4f3b01, 0x000000, 0x4f3c02, 0x000000, - 0x4f3e03, 0x4f4102, 0x000000, 0x000000, 0x000000, 0x000000, 0x4f4301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4f4404, 0x4f4802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4f4a01, 0x000000, 0x4f4b03, 0x4f4e04, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4f5201, 0x000000, 0x000000, - 0x4f5301, 0x000000, 0x4f5401, 0x000000, 0x4f5502, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4f5702, 0x000000, 0x000000, 0x000000, 0x4f5901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4f5a01, 0x4f5b06, 0x000000, 0x4f6111, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4f7203, 0x000000, - 0x000000, 0x000000, 0x4f750a, 0x000000, 0x000000, 0x000000, 0x000000, 0x4f7f0a, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4f8903, 0x000000, 0x000000, 0x4f8c0a, 0x000000, 0x4f9602, - 0x4f9801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4f9901, 0x4f9a01, 0x000000, 0x4f9b01, - 0x000000, 0x000000, 0x4f9c01, 0x000000, 0x4f9d01, 0x000000, 0x4f9e05, 0x000000, - 0x4fa302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4fa502, - 0x4fa701, 0x4fa802, 0x000000, 0x000000, 0x4faa01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4fab02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4fad11, 0x4fbe02, 0x000000, 0x000000, 0x000000, - 0x4fc003, 0x000000, 0x000000, 0x4fc306, 0x000000, 0x000000, 0x4fc902, 0x4fcb03, - 0x000000, 0x4fce01, 0x000000, 0x000000, 0x4fcf01, 0x000000, 0x4fd001, 0x4fd101, - 0x4fd205, 0x000000, 0x000000, 0x000000, 0x000000, 0x4fd702, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4fd901, 0x000000, 0x4fda03, 0x000000, 0x4fdd02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4fdf03, 0x000000, 0x4fe201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4fe301, 0x4fe401, 0x000000, 0x000000, 0x4fe503, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4fe801, 0x000000, 0x4fe907, 0x000000, 0x000000, - 0x000000, 0x4ff004, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4ff404, - 0x000000, 0x000000, 0x000000, 0x4ff803, 0x000000, 0x4ffb01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4ffc08, 0x000000, - 0x000000, 0x500401, 0x000000, 0x000000, 0x500501, 0x000000, 0x000000, 0x500609, - 0x000000, 0x500f01, 0x000000, 0x501001, 0x000000, 0x000000, 0x501101, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x501201, 0x501301, 0x000000, 0x501413, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x502707, 0x502e02, 0x000000, 0x50300a, 0x000000, 0x000000, - 0x000000, 0x000000, 0x503a01, 0x000000, 0x000000, 0x503b03, 0x000000, 0x000000, - 0x000000, 0x503e03, 0x000000, 0x000000, 0x000000, 0x504102, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x50430f, 0x000000, 0x000000, 0x505201, 0x000000, - 0x000000, 0x505302, 0x000000, 0x505517, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x506c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x506d03, 0x000000, - 0x000000, 0x507001, 0x507101, 0x000000, 0x000000, 0x000000, 0x000000, 0x507202, - 0x000000, 0x507401, 0x507514, 0x000000, 0x000000, 0x000000, 0x508902, 0x508b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x508c06, 0x000000, 0x000000, 0x000000, - 0x000000, 0x509201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x509301, - 0x000000, 0x000000, 0x000000, 0x509401, 0x000000, 0x509509, 0x000000, 0x000000, - 0x509e44, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x50e202, 0x000000, - 0x000000, 0x50e404, 0x000000, 0x000000, 0x000000, 0x50e801, 0x50e90a, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x50f301, 0x50f401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x50f502, 0x50f701, 0x50f804, 0x000000, 0x50fc01, 0x000000, - 0x50fd01, 0x000000, 0x50fe01, 0x50ff01, 0x000000, 0x510007, 0x000000, 0x000000, - 0x510701, 0x000000, 0x510803, 0x000000, 0x510b01, 0x000000, 0x000000, 0x510c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x510d04, 0x000000, 0x000000, 0x000000, 0x000000, 0x511107, 0x000000, 0x000000, - 0x000000, 0x511802, 0x000000, 0x000000, 0x511a03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x511d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x511e01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x511f01, 0x000000, 0x512008, 0x512808, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x513001, 0x000000, 0x000000, 0x000000, 0x513109, 0x513a06, - 0x514001, 0x000000, 0x514105, 0x000000, 0x514601, 0x000000, 0x000000, 0x514702, - 0x000000, 0x000000, 0x514901, 0x000000, 0x000000, 0x514a01, 0x000000, 0x514b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x514c05, 0x000000, 0x000000, - 0x515102, 0x515301, 0x515401, 0x000000, 0x000000, 0x000000, 0x515501, 0x000000, - 0x515603, 0x000000, 0x000000, 0x000000, 0x515903, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x515c01, 0x515d01, 0x515e01, 0x000000, - 0x515f04, 0x516303, 0x000000, 0x000000, 0x516601, 0x000000, 0x000000, 0x516702, - 0x516901, 0x000000, 0x516a01, 0x000000, 0x516b0a, 0x000000, 0x517501, 0x000000, - 0x000000, 0x000000, 0x517601, 0x000000, 0x000000, 0x000000, 0x000000, 0x51770d, - 0x000000, 0x000000, 0x000000, 0x518402, 0x000000, 0x000000, 0x518602, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x518803, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x518b04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x518f02, 0x000000, 0x000000, 0x519101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x519201, 0x519306, 0x000000, 0x000000, 0x519901, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x519a0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x51a801, 0x000000, - 0x51a904, 0x51ad02, 0x000000, 0x000000, 0x51af03, 0x51b201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x51b301, 0x000000, 0x51b402, 0x000000, 0x51b601, - 0x51b702, 0x51b905, 0x000000, 0x51be01, 0x000000, 0x51bf01, 0x51c001, 0x51c105, - 0x000000, 0x000000, 0x51c604, 0x000000, 0x000000, 0x51ca02, 0x000000, 0x000000, - 0x51cc02, 0x000000, 0x000000, 0x000000, 0x51ce03, 0x000000, 0x000000, 0x000000, - 0x51d101, 0x51d203, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x51d504, - 0x000000, 0x51d901, 0x000000, 0x000000, 0x51da09, 0x51e303, 0x000000, 0x000000, - 0x51e606, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x51ec02, 0x51ee09, - 0x000000, 0x000000, 0x000000, 0x51f703, 0x000000, 0x51fa01, 0x51fb01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x51fc06, 0x000000, 0x000000, 0x000000, - 0x520203, 0x000000, 0x520501, 0x000000, 0x520601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x520701, 0x520807, 0x000000, 0x000000, 0x000000, 0x000000, 0x520f02, - 0x000000, 0x521106, 0x000000, 0x521701, 0x000000, 0x000000, 0x000000, 0x521801, - 0x521903, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x521c05, 0x522101, - 0x522201, 0x522301, 0x000000, 0x000000, 0x522401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x522501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x522601, 0x522705, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x522c01, - 0x000000, 0x000000, 0x522d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x522e02, 0x000000, 0x523005, 0x000000, - 0x523501, 0x523602, 0x000000, 0x000000, 0x000000, 0x523804, 0x523c04, 0x000000, - 0x000000, 0x524007, 0x524701, 0x524801, 0x000000, 0x000000, 0x524901, 0x524a02, - 0x000000, 0x000000, 0x000000, 0x524c02, 0x000000, 0x000000, 0x000000, 0x524e01, - 0x524f01, 0x000000, 0x000000, 0x525001, 0x000000, 0x525104, 0x000000, 0x000000, - 0x525501, 0x000000, 0x000000, 0x000000, 0x000000, 0x525601, 0x000000, 0x000000, - 0x525701, 0x525805, 0x000000, 0x000000, 0x525d01, 0x525e02, 0x000000, 0x526002, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x526202, - 0x000000, 0x526401, 0x000000, 0x526501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x526601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x526702, 0x000000, 0x526901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x526a01, 0x000000, 0x000000, 0x526b01, - 0x526c01, 0x526d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x526e01, - 0x000000, 0x526f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x527003, - 0x527301, 0x527403, 0x000000, 0x000000, 0x527701, 0x527802, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x527a07, 0x528101, 0x528202, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x528404, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x528802, 0x528a03, 0x000000, - 0x000000, 0x528d03, 0x000000, 0x000000, 0x000000, 0x529005, 0x529501, 0x000000, - 0x529601, 0x000000, 0x000000, 0x529701, 0x000000, 0x529801, 0x529906, 0x000000, - 0x529f02, 0x52a101, 0x52a201, 0x52a304, 0x000000, 0x000000, 0x000000, 0x52a701, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x52a803, 0x000000, - 0x52ab02, 0x000000, 0x52ad04, 0x000000, 0x000000, 0x000000, 0x000000, 0x52b101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x52b201, 0x000000, 0x000000, 0x52b302, - 0x000000, 0x52b501, 0x000000, 0x52b601, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x52b703, 0x52ba09, 0x52c301, 0x000000, 0x000000, 0x000000, 0x52c401, - 0x000000, 0x000000, 0x52c502, 0x000000, 0x000000, 0x000000, 0x52c701, 0x000000, - 0x000000, 0x52c805, 0x000000, 0x000000, 0x000000, 0x52cd0e, 0x000000, 0x52db01, - 0x000000, 0x000000, 0x52dc02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x52de01, 0x52df07, 0x000000, 0x000000, 0x52e602, 0x52e801, 0x000000, - 0x52e901, 0x000000, 0x000000, 0x000000, 0x000000, 0x52ea01, 0x52eb01, 0x000000, - 0x000000, 0x52ec01, 0x000000, 0x000000, 0x000000, 0x000000, 0x52ed06, 0x52f301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x52f401, 0x000000, 0x000000, - 0x52f501, 0x52f611, 0x000000, 0x000000, 0x000000, 0x000000, 0x530701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x530802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x530a04, 0x000000, 0x000000, 0x000000, - 0x530e09, 0x000000, 0x531702, 0x000000, 0x531908, 0x000000, 0x532101, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x53220b, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x532d03, 0x000000, 0x000000, 0x533001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x533101, 0x000000, 0x000000, 0x000000, 0x533201, 0x000000, 0x533302, 0x53350e, - 0x000000, 0x534302, 0x000000, 0x534504, 0x534901, 0x534a01, 0x000000, 0x534b02, - 0x000000, 0x534d01, 0x000000, 0x000000, 0x000000, 0x534e01, 0x534f18, 0x000000, - 0x000000, 0x000000, 0x536702, 0x000000, 0x000000, 0x536907, 0x537001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x537101, 0x000000, 0x000000, 0x000000, - 0x537203, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x537501, 0x000000, 0x000000, 0x537605, 0x537b02, 0x537d01, - 0x000000, 0x000000, 0x000000, 0x537e02, 0x538001, 0x000000, 0x538102, 0x000000, - 0x000000, 0x000000, 0x538301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x538401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x538501, 0x000000, 0x538601, 0x000000, - 0x000000, 0x538701, 0x000000, 0x000000, 0x538804, 0x000000, 0x000000, 0x000000, - 0x000000, 0x538c01, 0x538d07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x539401, 0x539501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x539601, 0x000000, 0x539702, 0x000000, - 0x000000, 0x000000, 0x000000, 0x539901, 0x000000, 0x000000, 0x000000, 0x539a01, - 0x539b01, 0x000000, 0x539c01, 0x539d01, 0x000000, 0x000000, 0x000000, 0x539e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x539f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x53a00c, 0x000000, 0x53ac01, 0x000000, 0x53ad03, 0x000000, 0x000000, - 0x000000, 0x53b003, 0x53b301, 0x000000, 0x000000, 0x000000, 0x000000, 0x53b404, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x53b801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x53b909, 0x000000, 0x53c201, 0x000000, 0x53c305, 0x53c803, 0x000000, 0x53cb01, - 0x000000, 0x53cc01, 0x53cd03, 0x000000, 0x000000, 0x000000, 0x53d001, 0x000000, - 0x000000, 0x53d102, 0x000000, 0x000000, 0x000000, 0x53d301, 0x53d403, 0x000000, - 0x000000, 0x53d709, 0x000000, 0x000000, 0x000000, 0x53e005, 0x53e501, 0x000000, - 0x000000, 0x53e602, 0x000000, 0x000000, 0x53e802, 0x53ea01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x53eb01, 0x000000, - 0x000000, 0x53ec01, 0x53ed02, 0x000000, 0x000000, 0x53ef23, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x541202, 0x000000, 0x000000, 0x541401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x541503, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x541801, 0x541901, - 0x000000, 0x000000, 0x541a02, 0x000000, 0x000000, 0x541c06, 0x000000, 0x000000, - 0x542219, 0x543b03, 0x000000, 0x543e08, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x544602, 0x000000, 0x000000, 0x000000, - 0x000000, 0x54480e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x54560d, - 0x000000, 0x000000, 0x546301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x546401, 0x000000, 0x54650b, 0x000000, - 0x000000, 0x547001, 0x547101, 0x547201, 0x547303, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x547608, 0x000000, 0x000000, 0x000000, 0x000000, 0x547e04, - 0x000000, 0x548204, 0x000000, 0x000000, 0x000000, 0x000000, 0x548607, 0x548d07, - 0x549409, 0x549d01, 0x000000, 0x000000, 0x549e01, 0x549f02, 0x000000, 0x54a101, - 0x000000, 0x000000, 0x54a203, 0x000000, 0x54a502, 0x54a701, 0x54a801, 0x000000, - 0x54a909, 0x54b201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x54b30a, - 0x000000, 0x54bd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x54be05, 0x54c303, - 0x000000, 0x54c601, 0x000000, 0x54c705, 0x000000, 0x000000, 0x54cc01, 0x000000, - 0x000000, 0x000000, 0x54cd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x54ce01, 0x000000, 0x000000, 0x000000, 0x54cf05, - 0x000000, 0x54d40d, 0x000000, 0x54e101, 0x000000, 0x000000, 0x000000, 0x54e202, - 0x54e404, 0x000000, 0x000000, 0x000000, 0x000000, 0x54e804, 0x54ec01, 0x54ed05, - 0x000000, 0x54f202, 0x000000, 0x000000, 0x000000, 0x54f401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x54f502, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x54f701, 0x000000, 0x000000, 0x000000, 0x000000, 0x54f802, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x54fa01, 0x54fb01, 0x000000, - 0x54fc03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x54ff03, - 0x000000, 0x000000, 0x550201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x550302, 0x000000, 0x000000, 0x550501, - 0x000000, 0x000000, 0x550606, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x550c01, 0x000000, 0x550d01, 0x000000, - 0x000000, 0x550e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x550f01, 0x000000, - 0x000000, 0x551003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x551307, 0x551a01, 0x551b03, 0x551e06, 0x000000, - 0x000000, 0x000000, 0x552408, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x552c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x552d01, 0x000000, 0x552e02, - 0x553001, 0x000000, 0x553101, 0x553206, 0x000000, 0x553802, 0x553a01, 0x553b03, - 0x000000, 0x553e01, 0x000000, 0x553f01, 0x000000, 0x000000, 0x554001, 0x000000, - 0x000000, 0x554106, 0x554701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x55480f, 0x555701, 0x555812, 0x000000, 0x000000, 0x556a03, 0x556d01, 0x556e02, - 0x557001, 0x000000, 0x000000, 0x000000, 0x557101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x557203, 0x000000, - 0x557501, 0x000000, 0x000000, 0x000000, 0x557602, 0x000000, 0x557805, 0x557d01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x557e01, 0x000000, 0x000000, 0x557f06, - 0x558501, 0x558602, 0x558804, 0x000000, 0x558c03, 0x000000, 0x558f02, 0x000000, - 0x000000, 0x559103, 0x000000, 0x000000, 0x000000, 0x559401, 0x559501, 0x559601, - 0x000000, 0x000000, 0x559701, 0x000000, 0x000000, 0x559801, 0x559901, 0x559a04, - 0x000000, 0x559e02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x55a001, 0x000000, 0x000000, 0x55a10b, 0x55ac06, 0x55b205, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x55b701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x55b802, 0x000000, 0x55ba02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x55bc01, 0x000000, 0x000000, - 0x000000, 0x55bd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x55be01, - 0x000000, 0x55bf02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x55c103, 0x55c401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x55c501, 0x000000, 0x55c603, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x55c901, 0x55ca01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x55cb01, 0x55cc04, 0x000000, 0x000000, - 0x55d001, 0x55d104, 0x000000, 0x000000, 0x000000, 0x55d506, 0x000000, 0x000000, - 0x55db01, 0x55dc01, 0x000000, 0x55dd03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x55e003, 0x000000, 0x55e304, 0x000000, 0x55e707, 0x000000, 0x55ee02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x55f001, 0x000000, - 0x55f101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x55f201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x55f304, 0x000000, 0x000000, - 0x000000, 0x55f701, 0x000000, 0x55f806, 0x55fe01, 0x000000, 0x000000, 0x55ff01, - 0x000000, 0x000000, 0x000000, 0x560002, 0x560201, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x560301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x560410, 0x561402, 0x000000, 0x561601, 0x000000, 0x000000, 0x000000, - 0x561708, 0x000000, 0x000000, 0x000000, 0x561f01, 0x562004, 0x000000, 0x000000, - 0x562402, 0x562601, 0x562703, 0x562a01, 0x000000, 0x000000, 0x562b01, 0x562c03, - 0x000000, 0x000000, 0x562f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x563107, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x563801, - 0x000000, 0x000000, 0x000000, 0x563901, 0x563a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x563b01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x563c07, 0x56430f, 0x565205, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x565703, 0x000000, 0x000000, 0x565a01, 0x000000, - 0x565b01, 0x000000, 0x565c01, 0x000000, 0x565d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x565e08, 0x566601, 0x000000, 0x566702, - 0x566903, 0x000000, 0x000000, 0x000000, 0x000000, 0x566c03, 0x000000, 0x000000, - 0x000000, 0x566f01, 0x56700c, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x567c01, 0x000000, 0x000000, 0x000000, 0x567d02, 0x000000, 0x000000, - 0x567f02, 0x568102, 0x000000, 0x568301, 0x568402, 0x568603, 0x568908, 0x000000, - 0x000000, 0x000000, 0x569102, 0x000000, 0x000000, 0x000000, 0x000000, 0x56930d, - 0x56a002, 0x000000, 0x000000, 0x000000, 0x000000, 0x56a203, 0x000000, 0x56a501, - 0x56a601, 0x000000, 0x000000, 0x56a704, 0x56ab02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x56ad04, 0x000000, 0x56b107, - 0x56b807, 0x000000, 0x000000, 0x56bf01, 0x000000, 0x56c003, 0x000000, 0x56c303, - 0x000000, 0x000000, 0x56c608, 0x000000, 0x56ce08, 0x56d601, 0x000000, 0x000000, - 0x56d702, 0x000000, 0x56d901, 0x000000, 0x000000, 0x56da01, 0x56db01, 0x000000, - 0x56dc03, 0x000000, 0x56df01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x56e001, 0x000000, 0x000000, 0x000000, 0x56e104, 0x56e501, 0x56e60c, 0x000000, - 0x000000, 0x000000, 0x56f209, 0x56fb01, 0x000000, 0x56fc01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x56fd01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x56fe01, 0x000000, 0x56ff05, 0x000000, 0x570401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x570502, 0x570703, 0x570a03, 0x570d01, - 0x000000, 0x000000, 0x570e02, 0x571001, 0x000000, 0x000000, 0x571103, 0x000000, - 0x571402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x571606, 0x000000, 0x571c01, 0x571d03, 0x000000, - 0x000000, 0x000000, 0x572003, 0x000000, 0x572307, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x572a02, - 0x000000, 0x000000, 0x000000, 0x572c11, 0x000000, 0x573d01, 0x000000, 0x000000, - 0x000000, 0x573e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x573f02, - 0x000000, 0x574106, 0x574703, 0x000000, 0x574a02, 0x574c01, 0x000000, 0x574d07, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x575401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x575501, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x575601, 0x575701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x575805, 0x575d03, 0x000000, 0x000000, 0x576001, 0x000000, - 0x576103, 0x576402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x576602, - 0x000000, 0x576801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x576903, - 0x000000, 0x000000, 0x000000, 0x000000, 0x576c01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x576d01, 0x000000, 0x576e08, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x577601, 0x000000, 0x000000, - 0x577703, 0x577a01, 0x577b06, 0x578103, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x578401, 0x000000, 0x000000, 0x578502, 0x000000, 0x000000, 0x578701, - 0x000000, 0x000000, 0x578801, 0x57890e, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x579702, 0x000000, 0x000000, 0x000000, 0x000000, 0x579901, - 0x000000, 0x000000, 0x000000, 0x579a01, 0x000000, 0x579b04, 0x000000, 0x579f03, - 0x000000, 0x57a207, 0x57a901, 0x57aa01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x57ab02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x57ad08, 0x000000, - 0x57b501, 0x000000, 0x57b60a, 0x000000, 0x000000, 0x000000, 0x57c005, 0x000000, - 0x57c501, 0x000000, 0x57c601, 0x000000, 0x000000, 0x000000, 0x000000, 0x57c701, - 0x57c80e, 0x000000, 0x57d601, 0x000000, 0x000000, 0x000000, 0x57d701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x57d80a, 0x000000, 0x000000, 0x57e20f, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x57f101, 0x000000, 0x000000, - 0x57f201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x57f301, 0x000000, 0x000000, 0x000000, 0x57f403, 0x57f70e, 0x000000, 0x000000, - 0x000000, 0x580501, 0x000000, 0x000000, 0x580601, 0x000000, 0x000000, 0x580704, - 0x000000, 0x580b0d, 0x581802, 0x000000, 0x581a06, 0x000000, 0x000000, 0x000000, - 0x000000, 0x582001, 0x000000, 0x000000, 0x582104, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x582501, 0x000000, 0x000000, 0x000000, 0x000000, 0x582601, 0x582707, 0x000000, - 0x000000, 0x582e04, 0x000000, 0x583203, 0x000000, 0x583501, 0x583602, 0x583801, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x583901, 0x000000, 0x000000, - 0x583a03, 0x000000, 0x000000, 0x583d01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x583e01, 0x000000, 0x583f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x584009, 0x000000, 0x584902, 0x000000, 0x000000, 0x584b05, 0x000000, - 0x000000, 0x585009, 0x000000, 0x000000, 0x585901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x585a05, 0x000000, 0x585f01, 0x58600d, 0x000000, - 0x000000, 0x586d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x586e01, - 0x000000, 0x000000, 0x586f04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x587301, 0x000000, 0x587402, 0x587605, 0x000000, 0x000000, - 0x000000, 0x000000, 0x587b01, 0x587c01, 0x000000, 0x000000, 0x000000, 0x587d01, - 0x000000, 0x587e01, 0x000000, 0x000000, 0x000000, 0x587f11, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x589002, 0x589201, 0x589302, 0x000000, 0x000000, 0x589501, 0x58960c, 0x000000, - 0x58a202, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x58a403, 0x000000, 0x000000, 0x58a703, 0x000000, 0x58aa08, 0x58b201, 0x58b30a, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x58bd01, 0x000000, 0x58be04, 0x000000, 0x000000, 0x000000, 0x000000, 0x58c201, - 0x000000, 0x000000, 0x000000, 0x58c301, 0x58c401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x58c502, 0x58c701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x58c802, 0x000000, 0x000000, - 0x58ca01, 0x000000, 0x000000, 0x000000, 0x000000, 0x58cb03, 0x58ce01, 0x58cf03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x58d20a, 0x000000, 0x58dc02, 0x000000, - 0x000000, 0x58de07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x58e502, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x58e704, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x58eb01, 0x58ec01, 0x58ed02, 0x000000, 0x58ef01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x58f001, 0x58f101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x58f201, 0x000000, 0x000000, 0x58f303, 0x58f601, - 0x000000, 0x58f701, 0x58f803, 0x58fb02, 0x000000, 0x000000, 0x58fd02, 0x58ff03, - 0x000000, 0x590202, 0x000000, 0x590407, 0x590b02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x590d04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x591101, 0x000000, 0x591201, 0x591301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x591405, - 0x000000, 0x000000, 0x591901, 0x591a03, 0x591d02, 0x591f09, 0x000000, 0x592801, - 0x592905, 0x000000, 0x592e02, 0x593001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x593102, 0x000000, 0x593302, - 0x593501, 0x000000, 0x593601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x593707, 0x000000, 0x593e09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x594701, 0x594801, 0x000000, 0x594901, 0x594a03, 0x000000, 0x000000, 0x594d02, - 0x000000, 0x000000, 0x594f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x595001, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x595101, 0x000000, 0x595201, 0x595301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x595402, 0x000000, 0x595601, 0x000000, 0x595701, - 0x000000, 0x595808, 0x596001, 0x596102, 0x596301, 0x596401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x596501, 0x596607, 0x000000, - 0x596d01, 0x000000, 0x596e05, 0x000000, 0x000000, 0x000000, 0x597301, 0x000000, - 0x597403, 0x000000, 0x000000, 0x000000, 0x000000, 0x597701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x597802, 0x597a08, 0x000000, 0x000000, 0x000000, 0x598202, - 0x598401, 0x000000, 0x000000, 0x598502, 0x000000, 0x000000, 0x000000, 0x598709, - 0x000000, 0x000000, 0x000000, 0x599001, 0x59910b, 0x000000, 0x000000, 0x000000, - 0x599c01, 0x599d01, 0x000000, 0x000000, 0x000000, 0x599e01, 0x000000, 0x000000, - 0x000000, 0x599f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x59a101, 0x000000, 0x59a207, 0x000000, 0x000000, 0x59a902, 0x000000, - 0x59ab06, 0x000000, 0x000000, 0x59b101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x59b201, 0x000000, 0x000000, 0x59b301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x59b403, 0x000000, - 0x59b701, 0x000000, 0x000000, 0x000000, 0x59b801, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x59b901, 0x000000, 0x59ba07, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x59c101, 0x000000, 0x000000, 0x59c208, 0x000000, 0x59ca02, - 0x000000, 0x000000, 0x59cc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x59cd0f, 0x000000, 0x59dc01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x59dd01, 0x59de01, 0x59df0f, 0x000000, 0x000000, - 0x59ee01, 0x59ef05, 0x59f401, 0x000000, 0x000000, 0x000000, 0x000000, 0x59f502, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x59f703, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x59fa03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x59fd0a, 0x000000, 0x000000, 0x000000, 0x5a0701, 0x000000, 0x5a0803, 0x5a0b01, - 0x5a0c07, 0x5a1301, 0x5a1402, 0x000000, 0x5a1604, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5a1a01, 0x5a1b01, 0x000000, 0x000000, 0x000000, 0x5a1c04, 0x5a2036, - 0x000000, 0x000000, 0x000000, 0x5a5601, 0x000000, 0x5a5701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5a5809, 0x000000, 0x5a6103, 0x5a6408, 0x000000, - 0x5a6c01, 0x000000, 0x000000, 0x5a6d02, 0x000000, 0x000000, 0x000000, 0x5a6f02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5a7103, 0x000000, 0x000000, 0x000000, 0x000000, 0x5a7402, 0x5a7601, 0x5a7714, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5a8b01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5a8c07, 0x000000, 0x000000, 0x5a9301, 0x000000, 0x5a9406, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5a9a01, 0x000000, 0x000000, 0x5a9b03, 0x5a9e03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5aa102, 0x000000, 0x5aa303, 0x000000, 0x5aa602, 0x000000, 0x5aa801, - 0x5aa911, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5aba02, - 0x5abc01, 0x000000, 0x000000, 0x5abd04, 0x5ac104, 0x5ac507, 0x000000, 0x000000, - 0x000000, 0x5acc01, 0x5acd02, 0x5acf01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5ad005, 0x5ad50b, 0x000000, 0x000000, 0x000000, 0x5ae003, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5ae308, 0x000000, 0x5aeb01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5aec14, 0x000000, 0x5b0001, 0x000000, - 0x5b0101, 0x000000, 0x000000, 0x000000, 0x000000, 0x5b0203, 0x000000, 0x5b0501, - 0x000000, 0x000000, 0x5b0609, 0x5b0f02, 0x000000, 0x000000, 0x5b1106, 0x000000, - 0x5b1704, 0x000000, 0x000000, 0x000000, 0x000000, 0x5b1b01, 0x000000, 0x5b1c03, - 0x000000, 0x5b1f06, 0x000000, 0x5b2503, 0x000000, 0x000000, 0x000000, 0x5b2806, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5b2e01, 0x5b2f02, 0x5b3102, 0x000000, - 0x5b3305, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5b3802, 0x000000, 0x000000, 0x000000, 0x000000, 0x5b3a01, 0x000000, - 0x5b3b02, 0x5b3d01, 0x000000, 0x000000, 0x000000, 0x5b3e01, 0x5b3f01, 0x000000, - 0x5b4006, 0x000000, 0x5b4602, 0x000000, 0x5b4804, 0x000000, 0x000000, 0x5b4c05, - 0x000000, 0x5b5101, 0x5b5203, 0x000000, 0x5b5501, 0x5b5604, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5b5a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5b5b02, 0x5b5d03, 0x000000, 0x000000, 0x5b6005, - 0x5b6501, 0x000000, 0x000000, 0x000000, 0x5b6601, 0x000000, 0x000000, 0x000000, - 0x5b6701, 0x000000, 0x000000, 0x000000, 0x000000, 0x5b680e, 0x000000, 0x000000, - 0x000000, 0x5b7601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5b7706, 0x000000, 0x5b7d15, 0x000000, 0x5b9201, 0x5b9304, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5b9706, 0x000000, 0x5b9d02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5b9f02, 0x000000, 0x000000, - 0x5ba106, 0x5ba701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5ba805, 0x000000, 0x000000, 0x000000, 0x5bad01, 0x5bae01, 0x000000, 0x000000, - 0x5baf01, 0x000000, 0x000000, 0x000000, 0x5bb017, 0x5bc701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5bc802, 0x000000, - 0x5bca03, 0x000000, 0x000000, 0x5bcd01, 0x000000, 0x000000, 0x5bce0a, 0x000000, - 0x000000, 0x5bd802, 0x000000, 0x000000, 0x5bda02, 0x000000, 0x000000, 0x000000, - 0x5bdc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x5bdd01, 0x5bde02, 0x5be003, - 0x5be301, 0x000000, 0x5be403, 0x5be70b, 0x5bf202, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5bf403, 0x000000, 0x000000, 0x5bf70c, 0x000000, 0x000000, - 0x5c0301, 0x000000, 0x000000, 0x5c0402, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5c0601, 0x000000, 0x5c0701, 0x000000, 0x000000, 0x5c0805, 0x000000, - 0x000000, 0x5c0d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c0f01, - 0x5c1001, 0x5c1101, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c1203, 0x000000, - 0x5c1501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5c1604, 0x000000, 0x5c1a02, 0x000000, - 0x000000, 0x5c1c06, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5c2209, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5c2b02, 0x5c2d04, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c3104, 0x5c3501, - 0x000000, 0x000000, 0x5c3601, 0x000000, 0x5c3706, 0x000000, 0x000000, 0x000000, - 0x5c3d02, 0x5c3f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c4101, - 0x000000, 0x000000, 0x5c4202, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c4405, - 0x5c4901, 0x000000, 0x5c4a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5c4c01, 0x000000, 0x5c4d04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5c5102, 0x000000, 0x5c5302, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5c5502, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c571b, - 0x5c7202, 0x000000, 0x5c740c, 0x000000, 0x000000, 0x000000, 0x5c8001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c8101, 0x000000, - 0x5c8201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c8301, 0x000000, - 0x000000, 0x000000, 0x5c8404, 0x5c8804, 0x000000, 0x5c8c01, 0x5c8d06, 0x5c9302, - 0x000000, 0x5c9507, 0x000000, 0x5c9c03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5c9f02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5ca101, 0x000000, 0x000000, 0x5ca203, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5ca502, 0x000000, 0x000000, 0x5ca702, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5ca904, 0x000000, 0x000000, 0x000000, 0x5cad03, 0x5cb00c, 0x000000, - 0x5cbc05, 0x5cc102, 0x000000, 0x5cc301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5cc401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5cc501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5cc602, 0x000000, 0x5cc804, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5ccc08, 0x5cd405, 0x000000, 0x000000, 0x000000, 0x5cd901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5cda01, - 0x000000, 0x5cdb09, 0x5ce40f, 0x000000, 0x000000, 0x5cf302, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5cf501, 0x000000, 0x5cf603, 0x000000, 0x000000, 0x000000, - 0x5cf904, 0x000000, 0x000000, 0x5cfd01, 0x000000, 0x5cfe01, 0x000000, 0x000000, - 0x5cff01, 0x000000, 0x5d000a, 0x000000, 0x5d0a02, 0x000000, 0x000000, 0x000000, - 0x5d0c06, 0x000000, 0x5d1202, 0x000000, 0x000000, 0x000000, 0x5d1401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5d1502, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5d1701, 0x5d1801, 0x5d1901, - 0x5d1a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x5d1c01, 0x5d1d08, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5d2501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5d2620, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5d4602, 0x5d4801, 0x000000, 0x000000, 0x5d4901, 0x5d4a0c, 0x5d5604, - 0x000000, 0x5d5a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x5d5c01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5d5d01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5d5e02, 0x5d6001, 0x000000, 0x5d6101, 0x000000, - 0x5d620b, 0x5d6d01, 0x5d6e01, 0x5d6f02, 0x000000, 0x5d7102, 0x000000, 0x5d7303, - 0x000000, 0x5d7607, 0x000000, 0x5d7d03, 0x000000, 0x5d8004, 0x5d8401, 0x000000, - 0x5d8504, 0x5d8909, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5d9201, - 0x5d9302, 0x5d9501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5d9603, 0x000000, 0x5d9903, 0x5d9c01, 0x000000, 0x5d9d01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5d9e01, 0x5d9f05, 0x000000, 0x000000, 0x5da401, 0x000000, - 0x000000, 0x5da501, 0x000000, 0x000000, 0x000000, 0x000000, 0x5da601, 0x000000, - 0x5da701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5da803, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5dab04, - 0x000000, 0x000000, 0x5daf01, 0x000000, 0x5db002, 0x000000, 0x000000, 0x5db201, - 0x000000, 0x000000, 0x5db302, 0x5db501, 0x5db601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5db702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5db904, 0x000000, 0x000000, 0x000000, - 0x5dbd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5dbe04, 0x000000, 0x000000, 0x5dc201, 0x000000, 0x5dc302, - 0x000000, 0x5dc501, 0x000000, 0x000000, 0x000000, 0x5dc601, 0x000000, 0x000000, - 0x5dc701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5dc801, 0x000000, 0x000000, 0x5dc901, 0x000000, 0x000000, 0x5dca02, 0x000000, - 0x000000, 0x5dcc01, 0x5dcd01, 0x000000, 0x000000, 0x5dce01, 0x5dcf0b, 0x5dda01, - 0x000000, 0x5ddb01, 0x5ddc01, 0x000000, 0x5ddd03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5de001, 0x5de101, 0x000000, 0x5de201, 0x000000, 0x000000, - 0x5de308, 0x000000, 0x000000, 0x5deb04, 0x000000, 0x5def01, 0x5df00e, 0x5dfe04, - 0x5e0201, 0x000000, 0x5e0302, 0x5e0501, 0x000000, 0x000000, 0x5e0607, 0x5e0d09, - 0x5e1603, 0x000000, 0x5e1905, 0x000000, 0x000000, 0x000000, 0x5e1e03, 0x000000, - 0x5e2103, 0x5e2403, 0x5e2702, 0x5e2901, 0x000000, 0x5e2a01, 0x000000, 0x000000, - 0x000000, 0x5e2b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x5e2d01, 0x5e2e02, - 0x000000, 0x5e3002, 0x000000, 0x000000, 0x5e3205, 0x5e3704, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5e3b01, 0x000000, 0x5e3c01, 0x000000, - 0x5e3d01, 0x000000, 0x5e3e08, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5e4601, 0x000000, 0x000000, 0x5e4701, 0x000000, 0x5e4805, 0x5e4d04, 0x000000, - 0x000000, 0x000000, 0x5e5101, 0x000000, 0x000000, 0x5e5202, 0x5e5405, 0x5e5909, - 0x000000, 0x5e6202, 0x000000, 0x000000, 0x000000, 0x5e6401, 0x5e6501, 0x5e6602, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5e6801, 0x5e6905, 0x5e6e03, 0x000000, 0x000000, 0x000000, - 0x5e7101, 0x000000, 0x000000, 0x5e7202, 0x000000, 0x000000, 0x5e7403, 0x000000, - 0x5e770d, 0x5e8404, 0x000000, 0x5e8803, 0x5e8b02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5e8d06, 0x5e9308, 0x5e9b04, 0x000000, 0x000000, - 0x000000, 0x5e9f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5ea108, 0x000000, 0x5ea901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5eaa01, 0x000000, 0x5eab03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5eae01, 0x5eaf01, 0x5eb007, - 0x000000, 0x000000, 0x5eb701, 0x000000, 0x000000, 0x5eb802, 0x000000, 0x5eba02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5ebc0f, 0x000000, - 0x5ecb01, 0x000000, 0x000000, 0x000000, 0x5ecc02, 0x000000, 0x5ece01, 0x5ecf01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5ed001, 0x000000, 0x000000, 0x5ed105, - 0x000000, 0x000000, 0x5ed601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5ed70d, 0x000000, 0x5ee401, 0x5ee502, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5ee71b, 0x000000, 0x000000, 0x5f0206, - 0x000000, 0x000000, 0x000000, 0x5f0801, 0x5f0901, 0x5f0a08, 0x5f120c, 0x000000, - 0x5f1e12, 0x000000, 0x000000, 0x5f3001, 0x5f3101, 0x000000, 0x000000, 0x000000, - 0x5f3201, 0x000000, 0x000000, 0x000000, 0x000000, 0x5f3301, 0x5f3401, 0x5f3504, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5f3901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5f3a02, 0x000000, 0x5f3c02, 0x000000, 0x5f3e06, 0x5f4401, - 0x000000, 0x5f4504, 0x000000, 0x000000, 0x5f4901, 0x5f4a05, 0x5f4f01, 0x000000, - 0x000000, 0x000000, 0x5f5001, 0x5f5104, 0x000000, 0x5f5505, 0x000000, 0x000000, - 0x000000, 0x5f5a04, 0x000000, 0x000000, 0x000000, 0x5f5e01, 0x000000, 0x5f5f01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5f6002, 0x000000, 0x5f6203, - 0x000000, 0x5f6501, 0x000000, 0x5f6605, 0x5f6b07, 0x000000, 0x5f7204, 0x000000, - 0x000000, 0x000000, 0x5f7601, 0x000000, 0x000000, 0x000000, 0x5f7702, 0x5f7904, - 0x5f7d01, 0x000000, 0x000000, 0x000000, 0x5f7e01, 0x5f7f01, 0x5f8003, 0x5f8301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5f8404, 0x5f8801, 0x000000, 0x000000, - 0x5f8901, 0x5f8a01, 0x5f8b05, 0x000000, 0x5f9005, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5f9501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5f9602, - 0x000000, 0x5f9801, 0x5f9901, 0x5f9a01, 0x5f9b02, 0x000000, 0x5f9d02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5f9f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5fa001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5fa103, 0x5fa401, 0x000000, 0x000000, 0x000000, 0x000000, 0x5fa502, - 0x000000, 0x000000, 0x000000, 0x5fa706, 0x000000, 0x000000, 0x000000, 0x5fad03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5fb001, 0x000000, 0x000000, 0x5fb101, - 0x000000, 0x000000, 0x000000, 0x5fb207, 0x5fb901, 0x000000, 0x000000, 0x000000, - 0x5fba04, 0x000000, 0x000000, 0x5fbe02, 0x000000, 0x000000, 0x5fc001, 0x5fc103, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5fc401, 0x000000, 0x5fc502, - 0x000000, 0x5fc701, 0x000000, 0x5fc803, 0x5fcb01, 0x5fcc02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5fce01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5fcf09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5fd802, 0x5fda01, 0x000000, 0x5fdb08, 0x000000, - 0x000000, 0x000000, 0x5fe301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5fe401, 0x5fe503, 0x000000, 0x000000, 0x000000, 0x5fe801, 0x5fe901, 0x000000, - 0x5fea01, 0x000000, 0x5feb02, 0x000000, 0x5fed02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5fef01, 0x000000, 0x000000, 0x000000, 0x5ff001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5ff105, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5ff602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5ff805, 0x000000, 0x000000, 0x000000, 0x5ffd01, 0x000000, 0x5ffe02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x600004, 0x600403, 0x000000, 0x600701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x600801, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x600901, 0x000000, 0x000000, 0x600a01, 0x000000, 0x600b02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x600d01, 0x600e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x600f02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x601102, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x601301, - 0x601405, 0x000000, 0x000000, 0x000000, 0x000000, 0x601901, 0x601a01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x601b01, 0x000000, 0x000000, 0x601c05, 0x000000, - 0x602101, 0x000000, 0x000000, 0x602201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x602303, 0x602601, 0x602708, 0x602f03, 0x000000, 0x000000, 0x000000, 0x60320b, - 0x000000, 0x603d01, 0x603e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x603f0f, - 0x000000, 0x000000, 0x000000, 0x604e01, 0x604f01, 0x605005, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x605501, 0x000000, - 0x605601, 0x605701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x605802, - 0x000000, 0x000000, 0x000000, 0x000000, 0x605a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x605b01, 0x605c01, 0x000000, 0x605d04, 0x606101, - 0x000000, 0x000000, 0x000000, 0x606203, 0x000000, 0x606501, 0x000000, 0x000000, - 0x606602, 0x000000, 0x000000, 0x000000, 0x606802, 0x000000, 0x606a01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x606b01, 0x000000, 0x606c01, 0x000000, 0x000000, - 0x606d02, 0x000000, 0x000000, 0x606f01, 0x607001, 0x000000, 0x000000, 0x000000, - 0x000000, 0x607101, 0x607206, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x607801, 0x000000, 0x60790b, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x608401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x608502, 0x000000, 0x608701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x608801, 0x608901, 0x000000, 0x608a01, - 0x000000, 0x608b02, 0x608d01, 0x000000, 0x608e01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x608f05, 0x000000, 0x000000, 0x60940d, 0x000000, 0x000000, 0x60a10b, - 0x000000, 0x60ac01, 0x60ad02, 0x000000, 0x000000, 0x000000, 0x60af01, 0x000000, - 0x000000, 0x000000, 0x60b005, 0x000000, 0x000000, 0x000000, 0x60b504, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x60b901, 0x000000, 0x60ba01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x60bb01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x60bc02, 0x60be01, 0x60bf04, 0x000000, - 0x60c301, 0x000000, 0x000000, 0x000000, 0x000000, 0x60c404, 0x000000, 0x000000, - 0x000000, 0x000000, 0x60c808, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x60d001, 0x000000, 0x60d102, 0x60d301, 0x000000, 0x000000, 0x000000, 0x60d405, - 0x000000, 0x000000, 0x000000, 0x000000, 0x60d904, 0x60dd01, 0x000000, 0x60de01, - 0x60df03, 0x000000, 0x000000, 0x000000, 0x60e201, 0x000000, 0x60e302, 0x60e501, - 0x000000, 0x60e603, 0x000000, 0x000000, 0x000000, 0x60e911, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x60fa01, 0x60fb07, 0x000000, 0x610201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x610303, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x610604, 0x000000, 0x610a01, 0x610b03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x610e01, 0x000000, 0x000000, 0x610f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x611001, 0x000000, 0x611101, 0x611201, - 0x000000, 0x000000, 0x000000, 0x611301, 0x000000, 0x611401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x611501, - 0x000000, 0x61160d, 0x000000, 0x000000, 0x61230f, 0x000000, 0x000000, 0x000000, - 0x613201, 0x000000, 0x000000, 0x000000, 0x61330b, 0x000000, 0x613e02, 0x614002, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x614201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x61430d, 0x000000, 0x615001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x615103, 0x000000, 0x000000, 0x61540d, - 0x616101, 0x616201, 0x000000, 0x000000, 0x000000, 0x616307, 0x000000, 0x000000, - 0x616a03, 0x000000, 0x000000, 0x616d03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x617005, 0x617501, 0x000000, - 0x617602, 0x000000, 0x000000, 0x617801, 0x000000, 0x000000, 0x000000, 0x617905, - 0x000000, 0x617e02, 0x000000, 0x000000, 0x000000, 0x618001, 0x000000, 0x000000, - 0x618102, 0x000000, 0x618304, 0x618702, 0x618902, 0x618b04, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x618f01, 0x000000, 0x000000, 0x000000, 0x619005, - 0x000000, 0x619501, 0x000000, 0x000000, 0x619601, 0x000000, 0x000000, 0x619709, - 0x000000, 0x000000, 0x000000, 0x61a001, 0x000000, 0x000000, 0x000000, 0x61a107, - 0x000000, 0x000000, 0x61a802, 0x000000, 0x000000, 0x000000, 0x61aa0f, 0x000000, - 0x000000, 0x61b905, 0x000000, 0x000000, 0x61be0b, 0x000000, 0x000000, 0x000000, - 0x61c901, 0x000000, 0x000000, 0x61ca01, 0x61cb01, 0x000000, 0x61cc02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x61ce01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x61cf02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x61d101, 0x000000, 0x000000, 0x61d202, - 0x61d404, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x61d802, - 0x000000, 0x000000, 0x61da01, 0x000000, 0x61db01, 0x61dc01, 0x000000, 0x000000, - 0x61dd01, 0x000000, 0x000000, 0x000000, 0x61de02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x61e002, 0x61e201, 0x000000, 0x000000, 0x61e304, 0x61e701, 0x000000, - 0x61e804, 0x61ec01, 0x61ed02, 0x000000, 0x000000, 0x000000, 0x000000, 0x61ef01, - 0x000000, 0x61f011, 0x000000, 0x620102, 0x000000, 0x000000, 0x620301, 0x620408, - 0x620c04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x621003, - 0x621305, 0x000000, 0x000000, 0x621802, 0x000000, 0x000000, 0x621a01, 0x621b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x621c03, 0x000000, - 0x000000, 0x000000, 0x621f01, 0x622004, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x622401, 0x000000, 0x000000, 0x000000, 0x622504, - 0x000000, 0x622904, 0x622d05, 0x000000, 0x623204, 0x000000, 0x623608, 0x000000, - 0x000000, 0x000000, 0x623e0a, 0x000000, 0x624802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x624a0b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x625501, 0x000000, 0x625620, 0x000000, 0x627602, 0x000000, 0x000000, 0x000000, - 0x627804, 0x000000, 0x000000, 0x000000, 0x000000, 0x627c06, 0x000000, 0x628204, - 0x000000, 0x628602, 0x000000, 0x628802, 0x000000, 0x000000, 0x000000, 0x628a01, - 0x000000, 0x000000, 0x000000, 0x628b01, 0x000000, 0x000000, 0x000000, 0x628c02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x628e02, - 0x629004, 0x000000, 0x000000, 0x000000, 0x000000, 0x629402, 0x629604, 0x000000, - 0x000000, 0x000000, 0x629a09, 0x000000, 0x000000, 0x000000, 0x62a305, 0x000000, - 0x62a801, 0x62a902, 0x000000, 0x000000, 0x000000, 0x000000, 0x62ab05, 0x62b003, - 0x000000, 0x62b305, 0x000000, 0x000000, 0x62b833, 0x62eb01, 0x000000, 0x62ec01, - 0x000000, 0x62ed01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x62ee01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x62ef04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x62f301, - 0x000000, 0x000000, 0x000000, 0x62f403, 0x000000, 0x000000, 0x000000, 0x62f701, - 0x62f801, 0x62f905, 0x000000, 0x000000, 0x62fe07, 0x000000, 0x630502, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x630702, 0x000000, - 0x630915, 0x000000, 0x631e04, 0x000000, 0x632205, 0x000000, 0x000000, 0x000000, - 0x000000, 0x632702, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x632902, 0x000000, 0x632b02, 0x000000, 0x632d09, - 0x000000, 0x000000, 0x633602, 0x000000, 0x000000, 0x633801, 0x000000, 0x000000, - 0x000000, 0x633905, 0x000000, 0x000000, 0x000000, 0x633e06, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x634402, 0x634602, 0x000000, 0x000000, 0x634802, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x634a02, 0x000000, 0x000000, - 0x000000, 0x634c03, 0x000000, 0x000000, 0x000000, 0x634f09, 0x000000, 0x000000, - 0x000000, 0x000000, 0x635802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x635a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x635b01, 0x000000, 0x000000, 0x000000, 0x635c03, - 0x000000, 0x000000, 0x635f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x636101, 0x000000, 0x000000, 0x636203, 0x000000, 0x636503, 0x000000, - 0x000000, 0x636801, 0x000000, 0x000000, 0x000000, 0x636902, 0x000000, 0x000000, - 0x000000, 0x000000, 0x636b01, 0x000000, 0x636c01, 0x636d01, 0x636e01, 0x000000, - 0x000000, 0x000000, 0x636f01, 0x000000, 0x637002, 0x000000, 0x000000, 0x000000, - 0x637202, 0x000000, 0x637407, 0x000000, 0x637b01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x637c02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x637e03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x638101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x638202, 0x000000, 0x000000, 0x000000, 0x000000, 0x638406, - 0x000000, 0x000000, 0x000000, 0x000000, 0x638a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x638b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x638c0c, - 0x000000, 0x639801, 0x000000, 0x000000, 0x639906, 0x000000, 0x639f06, 0x000000, - 0x63a502, 0x000000, 0x63a701, 0x000000, 0x000000, 0x63a801, 0x63a903, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x63ac01, 0x63ad01, 0x63ae01, - 0x000000, 0x63af01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x63b001, 0x000000, 0x63b105, 0x63b607, 0x63bd02, 0x000000, 0x63bf01, - 0x000000, 0x63c00b, 0x000000, 0x000000, 0x63cb02, 0x63cd01, 0x000000, 0x000000, - 0x63ce01, 0x000000, 0x63cf02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x63d101, 0x000000, 0x63d201, 0x000000, 0x63d301, 0x63d40b, 0x63df02, 0x000000, - 0x000000, 0x000000, 0x63e101, 0x63e203, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x63e505, 0x000000, 0x000000, 0x000000, 0x000000, 0x63ea02, - 0x000000, 0x000000, 0x000000, 0x63ec01, 0x000000, 0x000000, 0x000000, 0x63ed06, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x63f301, 0x000000, 0x000000, 0x000000, 0x000000, 0x63f401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x63f501, 0x000000, 0x63f601, 0x63f701, 0x63f801, - 0x000000, 0x63f902, 0x000000, 0x000000, 0x000000, 0x63fb01, 0x000000, 0x63fc12, - 0x640e03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x641101, 0x000000, - 0x000000, 0x000000, 0x000000, 0x641204, 0x641606, 0x000000, 0x000000, 0x641c02, - 0x000000, 0x000000, 0x641e04, 0x000000, 0x000000, 0x000000, 0x642201, 0x64230d, - 0x000000, 0x000000, 0x643005, 0x000000, 0x000000, 0x000000, 0x000000, 0x643507, - 0x000000, 0x000000, 0x000000, 0x643c02, 0x643e08, 0x000000, 0x000000, 0x644607, - 0x000000, 0x000000, 0x644d14, 0x646101, 0x000000, 0x646203, 0x646501, 0x646601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x646702, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x646904, 0x000000, - 0x000000, 0x646d01, 0x000000, 0x646e01, 0x000000, 0x646f03, 0x000000, 0x647201, - 0x647301, 0x647401, 0x000000, 0x000000, 0x64750a, 0x647f04, 0x648302, 0x000000, - 0x000000, 0x000000, 0x648503, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x648802, 0x000000, 0x000000, 0x648a01, - 0x000000, 0x000000, 0x000000, 0x648b01, 0x000000, 0x648c04, 0x649001, 0x000000, - 0x649102, 0x000000, 0x649318, 0x64ab06, 0x64b102, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x64b301, 0x000000, 0x000000, 0x000000, 0x000000, 0x64b401, - 0x000000, 0x64b502, 0x64b701, 0x64b804, 0x000000, 0x000000, 0x000000, 0x64bc08, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x64c404, 0x64c807, - 0x000000, 0x000000, 0x000000, 0x64cf01, 0x64d002, 0x000000, 0x000000, 0x64d203, - 0x64d501, 0x64d602, 0x000000, 0x000000, 0x64d803, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x64db0c, 0x000000, 0x000000, - 0x000000, 0x000000, 0x64e701, 0x64e80d, 0x000000, 0x000000, 0x000000, 0x64f501, - 0x000000, 0x000000, 0x000000, 0x64f601, 0x64f701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x64f801, 0x64f901, - 0x000000, 0x000000, 0x64fa01, 0x000000, 0x000000, 0x64fb0a, 0x000000, 0x650501, - 0x000000, 0x000000, 0x000000, 0x650602, 0x650802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x650a01, 0x650b01, 0x000000, 0x650c05, - 0x651101, 0x000000, 0x651201, 0x000000, 0x651301, 0x651401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x651518, 0x652d01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x652e01, 0x652f01, 0x653003, 0x000000, 0x000000, - 0x000000, 0x653301, 0x653401, 0x000000, 0x000000, 0x000000, 0x000000, 0x653502, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x653701, - 0x000000, 0x653801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x653902, 0x000000, 0x000000, 0x653b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x653c0a, 0x654601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x654702, 0x000000, 0x000000, 0x654903, 0x000000, 0x000000, 0x000000, - 0x654c05, 0x000000, 0x000000, 0x655104, 0x655503, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x655805, 0x000000, 0x655d06, 0x000000, - 0x656305, 0x000000, 0x000000, 0x656801, 0x656901, 0x000000, 0x000000, 0x656a01, - 0x000000, 0x656b01, 0x656c01, 0x656d01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x656e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x656f01, 0x000000, - 0x000000, 0x000000, 0x657002, 0x657202, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x657402, 0x657603, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x657903, 0x000000, 0x657c01, 0x000000, 0x000000, 0x000000, - 0x657d02, 0x000000, 0x000000, 0x000000, 0x657f09, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x658809, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x659103, 0x000000, 0x000000, 0x000000, 0x659401, 0x000000, - 0x000000, 0x000000, 0x659501, 0x659607, 0x000000, 0x000000, 0x659d01, 0x659e01, - 0x659f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x65a001, - 0x65a102, 0x65a302, 0x000000, 0x65a501, 0x65a601, 0x000000, 0x000000, 0x000000, - 0x65a704, 0x65ab01, 0x000000, 0x65ac04, 0x65b001, 0x65b10a, 0x65bb02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x65bd01, 0x000000, 0x000000, 0x65be02, - 0x000000, 0x000000, 0x65c001, 0x000000, 0x65c101, 0x000000, 0x65c202, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x65c401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x65c505, 0x65ca01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x65cb06, 0x000000, 0x65d101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x65d202, 0x000000, 0x65d402, 0x000000, 0x000000, 0x65d602, 0x000000, 0x000000, - 0x000000, 0x65d801, 0x000000, 0x65d903, 0x65dc01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x65dd01, 0x000000, 0x000000, 0x000000, 0x65de0b, 0x000000, 0x65e904, - 0x000000, 0x000000, 0x65ed01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x65ee01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x65ef05, - 0x65f406, 0x000000, 0x65fa0f, 0x660902, 0x000000, 0x660b01, 0x000000, 0x000000, - 0x660c0b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x661705, - 0x661c0e, 0x662a09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x663302, 0x663501, 0x000000, 0x000000, 0x000000, - 0x663603, 0x000000, 0x663901, 0x663a01, 0x000000, 0x000000, 0x663b02, 0x000000, - 0x000000, 0x663d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x663e01, - 0x000000, 0x000000, 0x000000, 0x663f01, 0x664090, 0x000000, 0x66d001, 0x66d101, - 0x000000, 0x66d201, 0x000000, 0x000000, 0x66d301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x66d406, 0x000000, 0x66da04, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x66de0f, 0x000000, 0x000000, - 0x000000, 0x66ed1d, 0x000000, 0x000000, 0x000000, 0x670a03, 0x000000, 0x000000, - 0x670d01, 0x670e02, 0x671007, 0x000000, 0x000000, 0x67170e, 0x672505, 0x000000, - 0x000000, 0x000000, 0x000000, 0x672a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x672b08, 0x000000, 0x000000, 0x673303, 0x000000, 0x000000, 0x673601, - 0x000000, 0x673702, 0x673906, 0x673f03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x674201, 0x000000, 0x674305, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x674803, 0x000000, 0x674b02, 0x000000, - 0x000000, 0x000000, 0x674d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x674e02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x675001, 0x000000, 0x675102, 0x675301, - 0x000000, 0x675401, 0x675501, 0x000000, 0x000000, 0x000000, 0x675601, 0x000000, - 0x000000, 0x000000, 0x675702, 0x000000, 0x000000, 0x675902, 0x000000, 0x000000, - 0x675b03, 0x000000, 0x675e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x675f06, 0x676503, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x676801, 0x000000, - 0x000000, 0x676901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x676a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x676c08, 0x000000, 0x677401, 0x000000, 0x000000, 0x677501, 0x000000, - 0x677601, 0x000000, 0x000000, 0x677705, 0x677c01, 0x677d01, 0x000000, 0x000000, - 0x677e02, 0x000000, 0x678007, 0x678702, 0x678901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x678a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x678c01, 0x000000, 0x000000, 0x678d02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x678f01, 0x000000, 0x679002, 0x679203, 0x000000, 0x000000, 0x000000, - 0x679501, 0x000000, 0x000000, 0x000000, 0x679605, 0x000000, 0x679b02, 0x679d01, - 0x000000, 0x000000, 0x000000, 0x679e05, 0x000000, 0x67a301, 0x000000, 0x67a404, - 0x67a815, 0x67bd01, 0x000000, 0x000000, 0x000000, 0x67be0c, 0x000000, 0x000000, - 0x000000, 0x67ca02, 0x000000, 0x000000, 0x67cc0f, 0x000000, 0x67db05, 0x000000, - 0x67e00a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x67ea01, - 0x000000, 0x67eb02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x67ed01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x67ee02, 0x67f002, 0x67f203, 0x67f502, - 0x000000, 0x000000, 0x000000, 0x67f704, 0x67fb01, 0x000000, 0x67fc06, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x680202, 0x000000, 0x680401, 0x000000, - 0x000000, 0x680502, 0x000000, 0x000000, 0x68070b, 0x681201, 0x000000, 0x000000, - 0x000000, 0x681302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x681501, 0x681603, 0x000000, 0x000000, 0x000000, - 0x681906, 0x000000, 0x000000, 0x681f07, 0x000000, 0x000000, 0x000000, 0x000000, - 0x682607, 0x682d01, 0x682e0e, 0x000000, 0x000000, 0x000000, 0x683c01, 0x683d01, - 0x683e02, 0x000000, 0x684037, 0x000000, 0x000000, 0x000000, 0x000000, 0x687701, - 0x000000, 0x687802, 0x000000, 0x687a01, 0x687b01, 0x000000, 0x687c01, 0x687d01, - 0x687e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x687f03, 0x688201, 0x000000, - 0x000000, 0x000000, 0x68830d, 0x689005, 0x000000, 0x000000, 0x000000, 0x689501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x689602, 0x000000, 0x689801, - 0x689908, 0x000000, 0x68a101, 0x000000, 0x000000, 0x000000, 0x68a201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x68a301, 0x000000, 0x000000, 0x68a402, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x68a601, 0x000000, 0x68a701, - 0x68a801, 0x000000, 0x000000, 0x000000, 0x68a903, 0x000000, 0x68ac01, 0x68ad02, - 0x000000, 0x000000, 0x000000, 0x68af03, 0x000000, 0x000000, 0x68b201, 0x000000, - 0x68b301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x68b403, 0x000000, 0x000000, 0x68b701, 0x000000, 0x000000, - 0x68b803, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x68bb0d, 0x000000, 0x68c801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x68c901, 0x000000, 0x000000, 0x68ca02, 0x68cc05, 0x68d101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x68d20e, 0x000000, 0x000000, 0x68e002, - 0x000000, 0x68e201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x68e301, 0x000000, 0x68e404, 0x68e801, 0x000000, - 0x68e901, 0x000000, 0x68ea11, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x68fb02, 0x000000, 0x68fd04, 0x690101, 0x690207, 0x000000, - 0x000000, 0x000000, 0x000000, 0x690904, 0x690d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x690e01, 0x690f04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x69130b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x691e02, 0x692001, 0x692101, 0x692201, 0x692303, 0x692602, 0x000000, 0x000000, - 0x000000, 0x692801, 0x692903, 0x000000, 0x000000, 0x692c03, 0x000000, 0x000000, - 0x000000, 0x692f01, 0x000000, 0x000000, 0x693001, 0x693101, 0x000000, 0x000000, - 0x000000, 0x693201, 0x000000, 0x693301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x693404, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x693806, 0x000000, 0x000000, 0x693e01, 0x000000, 0x000000, 0x693f02, 0x000000, - 0x000000, 0x000000, 0x69410a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x694b02, 0x000000, 0x694d05, 0x000000, 0x000000, 0x695202, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x695404, - 0x000000, 0x695801, 0x695902, 0x695b01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x695c01, 0x000000, 0x695d04, 0x000000, 0x696102, 0x000000, 0x696302, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x696504, 0x000000, - 0x696901, 0x696a03, 0x000000, 0x696d0d, 0x000000, 0x000000, 0x000000, 0x000000, - 0x697a03, 0x697d01, 0x000000, 0x000000, 0x697e03, 0x698102, 0x698301, 0x698401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x698501, 0x698603, 0x698901, 0x000000, 0x698a06, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x699001, 0x000000, 0x000000, 0x000000, 0x699103, 0x000000, - 0x000000, 0x000000, 0x000000, 0x699401, 0x699501, 0x699603, 0x699902, 0x000000, - 0x000000, 0x699b01, 0x699c01, 0x000000, 0x000000, 0x000000, 0x699d04, 0x69a102, - 0x000000, 0x000000, 0x000000, 0x69a301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x69a401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x69a501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x69a602, 0x69a801, 0x000000, 0x69a901, 0x000000, 0x000000, - 0x000000, 0x69aa01, 0x69ab03, 0x000000, 0x69ae01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x69af02, 0x69b101, 0x69b202, 0x000000, 0x69b403, 0x000000, 0x69b705, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x69bc01, 0x000000, 0x000000, 0x69bd02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x69bf04, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x69c302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x69c501, 0x000000, - 0x69c602, 0x000000, 0x000000, 0x000000, 0x69c801, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x69c901, 0x000000, 0x69ca03, 0x69cd01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x69ce01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x69cf02, 0x69d104, 0x000000, 0x69d501, 0x000000, 0x000000, 0x69d604, - 0x000000, 0x69da03, 0x69dd01, 0x000000, 0x000000, 0x000000, 0x69de02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x69e001, 0x000000, 0x000000, 0x000000, 0x69e101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x69e201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x69e309, 0x69ec01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x69ed06, 0x000000, 0x000000, 0x69f302, 0x000000, 0x69f504, 0x000000, - 0x000000, 0x69f901, 0x69fa10, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6a0a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x6a0b01, 0x6a0c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6a0d01, 0x6a0e01, 0x000000, 0x6a0f07, - 0x000000, 0x6a1605, 0x000000, 0x000000, 0x000000, 0x6a1b0b, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6a260e, 0x000000, 0x6a3402, - 0x000000, 0x000000, 0x6a3602, 0x000000, 0x6a3802, 0x000000, 0x6a3a03, 0x000000, - 0x6a3d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6a3f02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6a4101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6a4201, 0x000000, 0x000000, 0x6a4302, 0x000000, 0x000000, 0x6a4501, 0x000000, - 0x6a4602, 0x000000, 0x000000, 0x000000, 0x000000, 0x6a4804, 0x000000, 0x000000, - 0x000000, 0x6a4c03, 0x000000, 0x000000, 0x6a4f03, 0x6a5201, 0x6a5302, 0x6a5501, - 0x6a5601, 0x000000, 0x6a5701, 0x000000, 0x6a5801, 0x6a5907, 0x000000, 0x000000, - 0x6a6002, 0x000000, 0x000000, 0x000000, 0x000000, 0x6a6202, 0x000000, 0x6a6401, - 0x000000, 0x6a6501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6a6603, 0x000000, 0x6a6901, 0x6a6a07, 0x000000, 0x6a7101, 0x000000, 0x000000, - 0x000000, 0x6a7202, 0x000000, 0x6a7401, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6a7501, 0x6a7603, 0x6a7901, 0x000000, 0x000000, 0x000000, 0x6a7a08, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6a8209, 0x000000, - 0x6a8b02, 0x6a8d12, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6a9f01, 0x6aa004, 0x6aa401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6aa50a, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6aaf01, 0x6ab005, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6ab502, 0x000000, 0x6ab709, 0x000000, 0x6ac001, 0x000000, - 0x6ac101, 0x6ac201, 0x000000, 0x6ac308, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6acb08, 0x000000, 0x000000, 0x000000, 0x6ad302, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6ad501, 0x000000, 0x6ad604, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6ada03, 0x000000, 0x000000, 0x6add01, 0x6ade02, 0x6ae004, - 0x000000, 0x000000, 0x000000, 0x6ae402, 0x000000, 0x6ae609, 0x000000, 0x6aef02, - 0x6af101, 0x000000, 0x000000, 0x6af211, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6b0301, 0x000000, 0x6b0407, 0x6b0b04, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6b0f2d, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6b3c03, 0x000000, 0x000000, 0x000000, 0x6b3f02, 0x000000, 0x000000, 0x000000, - 0x6b4101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6b4201, 0x000000, 0x000000, 0x000000, 0x6b4301, 0x000000, 0x000000, 0x6b4404, - 0x000000, 0x6b4802, 0x6b4a02, 0x000000, 0x000000, 0x6b4c01, 0x000000, 0x6b4d01, - 0x000000, 0x6b4e06, 0x000000, 0x6b5405, 0x6b5902, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6b5b01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6b5c08, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6b6401, 0x000000, 0x6b6508, 0x6b6d09, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6b7615, 0x6b8b01, 0x000000, 0x000000, 0x000000, 0x6b8c0c, 0x6b9801, 0x000000, - 0x000000, 0x000000, 0x6b9901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6b9a02, 0x000000, 0x000000, - 0x6b9c01, 0x6b9d01, 0x000000, 0x6b9e04, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6ba210, 0x000000, 0x000000, 0x6bb202, 0x000000, - 0x6bb401, 0x6bb501, 0x6bb602, 0x6bb801, 0x000000, 0x6bb901, 0x000000, 0x000000, - 0x6bba06, 0x6bc001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6bc102, - 0x000000, 0x000000, 0x6bc301, 0x6bc407, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6bcb04, 0x000000, 0x000000, 0x6bcf08, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6bd702, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6bd908, 0x000000, 0x000000, 0x000000, 0x6be102, - 0x000000, 0x000000, 0x6be30b, 0x000000, 0x000000, 0x000000, 0x6bee01, 0x000000, - 0x000000, 0x6bef02, 0x6bf102, 0x000000, 0x6bf302, 0x6bf505, 0x000000, 0x000000, - 0x000000, 0x6bfa01, 0x000000, 0x6bfb05, 0x6c0002, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6c0209, 0x6c0b01, 0x000000, 0x6c0c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6c0d02, 0x000000, 0x000000, - 0x6c0f01, 0x000000, 0x6c1004, 0x000000, 0x000000, 0x000000, 0x6c1402, 0x000000, - 0x6c1602, 0x000000, 0x000000, 0x000000, 0x6c1801, 0x6c1908, 0x000000, 0x000000, - 0x000000, 0x6c211d, 0x000000, 0x000000, 0x000000, 0x6c3e01, 0x000000, 0x6c3f01, - 0x6c4006, 0x6c4601, 0x6c4708, 0x000000, 0x000000, 0x6c4f01, 0x000000, 0x6c5002, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6c5201, 0x000000, 0x000000, 0x6c5301, 0x000000, 0x6c5405, 0x000000, - 0x6c5904, 0x000000, 0x000000, 0x000000, 0x6c5d01, 0x000000, 0x000000, 0x000000, - 0x6c5e01, 0x6c5f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6c6001, 0x6c6101, 0x000000, 0x000000, 0x000000, 0x6c6201, 0x6c6303, 0x6c6601, - 0x6c6710, 0x000000, 0x000000, 0x000000, 0x6c7702, 0x6c7904, 0x000000, 0x000000, - 0x000000, 0x6c7d01, 0x6c7e01, 0x000000, 0x6c7f01, 0x6c8004, 0x000000, 0x000000, - 0x6c8403, 0x000000, 0x6c8702, 0x000000, 0x6c8905, 0x000000, 0x000000, 0x6c8e01, - 0x000000, 0x6c8f01, 0x6c900b, 0x6c9b08, 0x000000, 0x6ca301, 0x6ca401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6ca50b, - 0x000000, 0x6cb002, 0x000000, 0x6cb201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6cb321, 0x6cd401, 0x6cd502, 0x000000, 0x000000, 0x000000, 0x6cd701, 0x000000, - 0x000000, 0x000000, 0x6cd813, 0x6ceb05, 0x000000, 0x6cf001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6cf101, 0x000000, 0x6cf201, 0x000000, 0x000000, - 0x000000, 0x6cf305, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6cf801, - 0x6cf901, 0x000000, 0x000000, 0x6cfa02, 0x000000, 0x000000, 0x000000, 0x6cfc04, - 0x6d000f, 0x000000, 0x000000, 0x6d0f01, 0x000000, 0x000000, 0x6d1001, 0x000000, - 0x6d1109, 0x000000, 0x000000, 0x000000, 0x6d1a03, 0x6d1d07, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6d2401, 0x000000, 0x6d2503, 0x000000, 0x6d2802, 0x000000, 0x6d2a07, 0x6d3106, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6d3703, 0x6d3a01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6d3b01, 0x6d3c02, - 0x000000, 0x000000, 0x000000, 0x6d3e02, 0x000000, 0x6d4006, 0x6d4601, 0x000000, - 0x6d4701, 0x6d4804, 0x000000, 0x6d4c02, 0x000000, 0x6d4e44, 0x6d9201, 0x6d9304, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6d9702, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6d9901, 0x6d9a02, 0x000000, 0x000000, - 0x6d9c02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6d9e03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6da103, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6da401, 0x6da502, - 0x6da701, 0x000000, 0x6da801, 0x000000, 0x000000, 0x6da901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6daa03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6dad07, 0x000000, 0x000000, 0x000000, 0x000000, 0x6db401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6db502, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6db702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6db907, 0x000000, 0x6dc011, 0x6dd101, - 0x6dd201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6dd302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6dd50b, 0x000000, - 0x6de002, 0x000000, 0x6de204, 0x000000, 0x000000, 0x6de605, 0x000000, 0x000000, - 0x000000, 0x6deb01, 0x6dec05, 0x000000, 0x000000, 0x000000, 0x6df106, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6df703, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6dfa02, 0x6dfc04, 0x6e0005, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e0501, - 0x000000, 0x6e0605, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e0b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6e0c02, 0x000000, 0x000000, 0x6e0e03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6e110a, 0x6e1b02, 0x000000, 0x6e1d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6e1e02, 0x000000, 0x6e200d, 0x6e2d01, 0x000000, 0x000000, - 0x6e2e02, 0x6e3002, 0x000000, 0x6e3202, 0x000000, 0x6e3402, 0x000000, 0x000000, - 0x000000, 0x6e3601, 0x6e3701, 0x6e3805, 0x000000, 0x6e3d01, 0x000000, 0x6e3e02, - 0x6e4001, 0x000000, 0x000000, 0x000000, 0x6e4101, 0x000000, 0x6e4202, 0x6e4403, - 0x6e4703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6e4a06, 0x000000, 0x6e5001, 0x000000, 0x000000, 0x6e5101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6e5202, 0x000000, 0x000000, 0x000000, - 0x6e5403, 0x000000, 0x000000, 0x000000, 0x6e5702, 0x6e5901, 0x000000, 0x6e5a01, - 0x6e5b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e5c01, - 0x000000, 0x000000, 0x6e5d01, 0x6e5e01, 0x000000, 0x000000, 0x6e5f02, 0x000000, - 0x000000, 0x6e6101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e6201, - 0x000000, 0x000000, 0x6e6301, 0x000000, 0x000000, 0x6e6401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6e6501, 0x6e6601, 0x000000, 0x000000, 0x6e6702, 0x000000, - 0x000000, 0x000000, 0x6e6902, 0x000000, 0x6e6b01, 0x6e6c01, 0x000000, 0x6e6d02, - 0x6e6f02, 0x6e7103, 0x000000, 0x6e7401, 0x6e7501, 0x000000, 0x000000, 0x000000, - 0x6e7601, 0x000000, 0x6e7701, 0x6e7802, 0x6e7a09, 0x000000, 0x6e8302, 0x000000, - 0x6e8503, 0x000000, 0x6e8802, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e8a01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e8b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e8c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6e8d01, 0x6e8e01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6e8f01, 0x000000, 0x000000, 0x6e9007, 0x000000, 0x6e9701, 0x000000, - 0x6e9801, 0x6e9901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6e9a05, 0x000000, 0x000000, 0x000000, 0x6e9f01, 0x6ea007, 0x000000, 0x000000, - 0x6ea701, 0x000000, 0x000000, 0x000000, 0x6ea809, 0x6eb101, 0x000000, 0x6eb205, - 0x000000, 0x000000, 0x6eb703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6eba01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6ebb3f, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6efa01, 0x000000, 0x6efb01, 0x6efc03, 0x000000, 0x6eff04, - 0x000000, 0x000000, 0x000000, 0x6f0301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6f0402, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f0601, 0x000000, - 0x000000, 0x000000, 0x6f0704, 0x000000, 0x000000, 0x6f0b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6f0c02, 0x000000, 0x000000, 0x000000, 0x6f0e03, - 0x6f1118, 0x000000, 0x6f2906, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f2f01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6f3002, 0x000000, 0x6f3204, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6f3603, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6f3906, 0x000000, 0x6f3f01, 0x000000, 0x6f4004, 0x000000, 0x000000, - 0x6f4401, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f4502, 0x6f4701, 0x000000, - 0x000000, 0x6f4803, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f4b03, 0x000000, - 0x000000, 0x000000, 0x6f4e02, 0x000000, 0x6f5002, 0x000000, 0x6f5201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6f5302, 0x000000, 0x000000, 0x6f5501, 0x6f5605, - 0x000000, 0x000000, 0x000000, 0x6f5b02, 0x000000, 0x000000, 0x000000, 0x6f5d02, - 0x000000, 0x000000, 0x6f5f01, 0x6f6001, 0x6f6107, 0x6f6805, 0x000000, 0x6f6d01, - 0x000000, 0x6f6e01, 0x6f6f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f7003, - 0x000000, 0x000000, 0x6f7305, 0x000000, 0x000000, 0x6f7801, 0x6f7901, 0x000000, - 0x000000, 0x000000, 0x6f7a09, 0x000000, 0x6f8305, 0x000000, 0x6f8801, 0x6f8906, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6f8f03, 0x6f9201, 0x000000, 0x000000, - 0x6f9301, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f9401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f9502, 0x6f9701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f9801, 0x000000, 0x000000, - 0x000000, 0x6f9902, 0x000000, 0x6f9b01, 0x6f9c02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6f9e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f9f05, 0x6fa407, - 0x6fab01, 0x000000, 0x000000, 0x6fac01, 0x000000, 0x000000, 0x000000, 0x6fad05, - 0x6fb203, 0x000000, 0x6fb503, 0x000000, 0x000000, 0x6fb804, 0x000000, 0x000000, - 0x6fbc09, 0x000000, 0x000000, 0x000000, 0x000000, 0x6fc501, 0x6fc604, 0x6fca01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6fcb06, 0x000000, - 0x6fd102, 0x000000, 0x000000, 0x6fd303, 0x000000, 0x6fd601, 0x000000, 0x6fd703, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6fda02, 0x000000, - 0x000000, 0x000000, 0x6fdc01, 0x6fdd01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6fde04, 0x000000, 0x6fe209, 0x000000, 0x000000, 0x6feb0a, 0x000000, - 0x000000, 0x000000, 0x6ff508, 0x000000, 0x6ffd01, 0x6ffe01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6fff01, - 0x700002, 0x700201, 0x70030f, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x701204, 0x000000, 0x000000, 0x000000, 0x701601, 0x000000, - 0x000000, 0x000000, 0x701701, 0x000000, 0x701801, 0x701907, 0x000000, 0x702002, - 0x000000, 0x702201, 0x702302, 0x702501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x702611, 0x703708, 0x000000, 0x000000, 0x000000, - 0x703f01, 0x000000, 0x000000, 0x000000, 0x704001, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x704101, 0x000000, - 0x704202, 0x000000, 0x704401, 0x000000, 0x000000, 0x704503, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x704804, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x704c01, 0x704d02, 0x704f02, 0x705102, 0x705301, 0x000000, 0x705402, 0x000000, - 0x000000, 0x000000, 0x000000, 0x705601, 0x705702, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x705902, 0x000000, 0x000000, 0x000000, 0x705b02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x705d01, 0x000000, - 0x705e01, 0x705f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x706001, 0x706101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x706201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x706301, 0x000000, 0x706409, - 0x000000, 0x706d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x706f01, 0x000000, 0x707001, 0x000000, 0x707101, 0x000000, 0x000000, 0x000000, - 0x70720a, 0x000000, 0x000000, 0x000000, 0x707c02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x707e02, 0x000000, 0x000000, 0x708001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x708103, 0x000000, 0x708401, 0x000000, 0x000000, - 0x708501, 0x000000, 0x000000, 0x708601, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x708702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x708902, 0x708b04, 0x000000, 0x000000, 0x708f03, 0x709202, 0x000000, - 0x000000, 0x709405, 0x000000, 0x709910, 0x000000, 0x000000, 0x000000, 0x70a90a, - 0x70b301, 0x000000, 0x000000, 0x70b401, 0x000000, 0x70b501, 0x70b602, 0x000000, - 0x000000, 0x000000, 0x70b801, 0x000000, 0x000000, 0x000000, 0x70b909, 0x000000, - 0x70c201, 0x70c301, 0x70c405, 0x000000, 0x000000, 0x000000, 0x70c906, 0x70cf02, - 0x70d108, 0x70d902, 0x70db03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x70de03, 0x000000, 0x000000, 0x000000, 0x70e101, 0x70e201, - 0x000000, 0x000000, 0x000000, 0x70e304, 0x000000, 0x000000, 0x70e702, 0x000000, - 0x70e901, 0x000000, 0x000000, 0x000000, 0x000000, 0x70ea01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x70eb02, 0x000000, 0x000000, 0x000000, - 0x70ed04, 0x000000, 0x70f101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x70f201, 0x70f303, 0x70f601, 0x000000, 0x000000, 0x70f701, - 0x000000, 0x70f803, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x70fb02, 0x000000, 0x000000, 0x000000, 0x000000, 0x70fd03, - 0x710001, 0x000000, 0x000000, 0x000000, 0x710106, 0x000000, 0x710703, 0x000000, - 0x710a03, 0x000000, 0x000000, 0x000000, 0x000000, 0x710d0e, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x711b0a, 0x000000, 0x000000, 0x000000, - 0x712501, 0x000000, 0x000000, 0x000000, 0x000000, 0x712601, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x712703, - 0x000000, 0x712a04, 0x000000, 0x712e01, 0x712f06, 0x000000, 0x713501, 0x713601, - 0x000000, 0x000000, 0x713705, 0x713c07, 0x714301, 0x714401, 0x714501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x714601, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x714701, 0x000000, 0x714808, 0x000000, 0x000000, - 0x000000, 0x715002, 0x000000, 0x000000, 0x71520a, 0x000000, 0x000000, 0x715c03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x715f01, 0x000000, 0x716001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x71610a, 0x000000, 0x000000, 0x000000, - 0x716b01, 0x000000, 0x000000, 0x000000, 0x716c01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x716d07, 0x000000, 0x717402, 0x000000, 0x717604, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x717a03, - 0x000000, 0x000000, 0x000000, 0x717d02, 0x717f06, 0x718508, 0x000000, 0x718d0c, - 0x719901, 0x000000, 0x000000, 0x000000, 0x719a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x719b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x719c03, 0x719f02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x71a107, 0x71a806, 0x000000, 0x000000, 0x000000, - 0x71ae02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x71b002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x71b202, - 0x000000, 0x71b406, 0x000000, 0x000000, 0x000000, 0x71ba05, 0x000000, 0x000000, - 0x71bf12, 0x000000, 0x000000, 0x71d102, 0x71d30c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x71df08, 0x000000, - 0x71e70e, 0x71f502, 0x000000, 0x71f704, 0x000000, 0x000000, 0x71fb01, 0x000000, - 0x71fc2f, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x722b01, 0x000000, 0x000000, 0x722c01, 0x000000, 0x000000, 0x722d04, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x723107, 0x000000, 0x000000, 0x000000, 0x723804, 0x000000, - 0x723c03, 0x000000, 0x723f02, 0x000000, 0x724106, 0x724718, 0x725f02, 0x000000, - 0x726103, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x726401, 0x000000, 0x000000, 0x726505, 0x726a01, 0x726b02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x726d01, 0x000000, 0x726e01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x726f01, 0x727001, 0x727102, 0x727302, 0x000000, 0x727502, - 0x000000, 0x000000, 0x727703, 0x727a05, 0x000000, 0x727f0a, 0x000000, 0x000000, - 0x000000, 0x728901, 0x000000, 0x000000, 0x728a01, 0x000000, 0x000000, 0x728b02, - 0x728d02, 0x728f07, 0x000000, 0x729603, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x729901, 0x729a02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x729c02, 0x729e01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x729f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x72a001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x72a101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x72a201, 0x72a301, 0x72a405, 0x000000, - 0x000000, 0x72a901, 0x000000, 0x000000, 0x72aa02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x72ac07, 0x000000, 0x000000, - 0x000000, 0x000000, 0x72b301, 0x000000, 0x72b401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x72b502, 0x000000, 0x000000, 0x72b70a, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x72c103, 0x000000, 0x72c405, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x72c903, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x72cc01, 0x000000, 0x000000, 0x000000, 0x72cd01, 0x000000, - 0x000000, 0x72ce06, 0x72d401, 0x000000, 0x72d50e, 0x72e302, 0x72e504, 0x72e901, - 0x72ea01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x72eb03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x72ee0c, 0x000000, 0x000000, 0x000000, 0x72fa02, 0x000000, 0x000000, 0x000000, - 0x72fc02, 0x000000, 0x000000, 0x72fe02, 0x000000, 0x730002, 0x000000, 0x000000, - 0x000000, 0x000000, 0x730203, 0x000000, 0x730504, 0x730902, 0x730b04, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x730f05, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x731403, 0x000000, 0x000000, 0x000000, 0x731704, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x731b05, - 0x000000, 0x73200d, 0x000000, 0x000000, 0x000000, 0x732d04, 0x000000, 0x000000, - 0x000000, 0x733101, 0x000000, 0x000000, 0x000000, 0x733201, 0x733305, 0x000000, - 0x000000, 0x733801, 0x000000, 0x000000, 0x000000, 0x733901, 0x000000, 0x733a03, - 0x000000, 0x733d03, 0x734004, 0x000000, 0x734401, 0x000000, 0x000000, 0x000000, - 0x734502, 0x000000, 0x000000, 0x000000, 0x734704, 0x000000, 0x000000, 0x000000, - 0x734b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x734d01, 0x000000, 0x734e01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x734f01, 0x735008, 0x735801, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x735901, 0x000000, 0x000000, 0x735a07, - 0x736102, 0x000000, 0x736302, 0x000000, 0x000000, 0x000000, 0x736501, 0x000000, - 0x736601, 0x736703, 0x736a01, 0x000000, 0x000000, 0x736b01, 0x000000, 0x000000, - 0x000000, 0x736c01, 0x000000, 0x000000, 0x000000, 0x736d02, 0x000000, 0x000000, - 0x736f06, 0x000000, 0x000000, 0x000000, 0x000000, 0x737503, 0x737801, 0x000000, - 0x737902, 0x737b01, 0x000000, 0x000000, 0x737c01, 0x000000, 0x000000, 0x737d0c, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x738906, 0x738f02, 0x739105, 0x739602, 0x000000, 0x000000, - 0x000000, 0x000000, 0x739801, 0x739903, 0x000000, 0x000000, 0x739c10, 0x000000, - 0x000000, 0x73ac01, 0x000000, 0x73ad01, 0x000000, 0x73ae01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x73af01, 0x73b008, 0x000000, 0x000000, 0x73b807, 0x000000, - 0x000000, 0x000000, 0x73bf01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x73c001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x73c101, 0x73c202, 0x73c401, 0x000000, 0x73c503, 0x000000, 0x73c802, 0x73ca01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x73cb01, 0x000000, - 0x73cc04, 0x000000, 0x73d001, 0x000000, 0x000000, 0x000000, 0x73d103, 0x000000, - 0x73d403, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x73d703, - 0x73da01, 0x000000, 0x000000, 0x73db01, 0x000000, 0x000000, 0x000000, 0x73dc03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x73df07, 0x000000, 0x000000, - 0x000000, 0x73e602, 0x73e802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x73ea02, 0x000000, 0x73ec02, 0x73ee05, 0x000000, 0x000000, - 0x73f301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x73f402, 0x000000, - 0x000000, 0x000000, 0x73f601, 0x000000, 0x000000, 0x000000, 0x73f701, 0x000000, - 0x73f801, 0x73f90a, 0x740301, 0x000000, 0x740401, 0x000000, 0x000000, 0x000000, - 0x740504, 0x000000, 0x74090e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x741701, 0x000000, 0x741806, 0x000000, 0x741e06, 0x000000, - 0x742401, 0x742510, 0x000000, 0x74350b, 0x744002, 0x000000, 0x744201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x744301, 0x000000, 0x000000, 0x744406, - 0x000000, 0x000000, 0x000000, 0x744a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x744b01, 0x000000, 0x000000, 0x000000, 0x744c01, 0x744d01, 0x744e2f, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x747d02, 0x000000, 0x000000, 0x000000, 0x747f01, 0x000000, - 0x748002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x748202, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x748403, - 0x000000, 0x748702, 0x748901, 0x000000, 0x000000, 0x748a02, 0x000000, 0x000000, - 0x748c01, 0x748d05, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x749201, 0x000000, 0x000000, 0x000000, - 0x000000, 0x749301, 0x749404, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x749814, 0x000000, 0x000000, 0x74ac03, - 0x74af12, 0x74c10f, 0x74d002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x74d20e, 0x74e001, 0x000000, 0x74e101, 0x000000, 0x000000, 0x74e203, 0x74e512, - 0x74f702, 0x74f901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x74fa01, 0x74fb03, 0x000000, 0x000000, 0x000000, 0x74fe02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x750003, 0x000000, 0x000000, 0x750301, - 0x000000, 0x750405, 0x000000, 0x000000, 0x750909, 0x000000, 0x000000, 0x000000, - 0x000000, 0x751201, 0x000000, 0x000000, 0x000000, 0x751306, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x751901, 0x000000, 0x751a0d, 0x75270f, 0x753601, - 0x753702, 0x753903, 0x000000, 0x000000, 0x000000, 0x753c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x753d02, 0x753f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x754006, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x754608, 0x754e02, 0x000000, - 0x000000, 0x755001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x755104, 0x000000, 0x755501, 0x000000, - 0x755601, 0x000000, 0x75571b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x757201, 0x757301, 0x000000, 0x000000, 0x000000, 0x757403, 0x000000, - 0x757701, 0x000000, 0x000000, 0x000000, 0x757802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x757a04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x757e01, 0x000000, 0x000000, 0x757f02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x758102, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x758306, 0x758901, 0x000000, - 0x000000, 0x758a07, 0x000000, 0x000000, 0x000000, 0x000000, 0x759114, 0x75a501, - 0x000000, 0x75a602, 0x000000, 0x75a809, 0x75b101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x75b201, 0x75b301, 0x75b402, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x75b601, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x75b701, - 0x000000, 0x000000, 0x75b801, 0x75b901, 0x000000, 0x000000, 0x000000, 0x75ba07, - 0x75c101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x75c201, 0x000000, - 0x000000, 0x75c303, 0x75c611, 0x000000, 0x000000, 0x000000, 0x75d704, 0x000000, - 0x75db01, 0x75dc07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x75e301, 0x75e40b, 0x000000, 0x75ef02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x75f102, 0x75f303, 0x000000, - 0x000000, 0x75f603, 0x000000, 0x000000, 0x75f901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x75fa0a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x760403, 0x000000, 0x000000, 0x000000, - 0x760701, 0x000000, 0x000000, 0x760801, 0x000000, 0x000000, 0x000000, 0x760901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x760a01, 0x000000, 0x760b02, 0x000000, - 0x760d05, 0x761204, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x761602, - 0x000000, 0x000000, 0x761802, 0x761a03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x761d02, 0x000000, 0x761f03, 0x762202, 0x762405, 0x000000, 0x762902, 0x762b11, - 0x000000, 0x000000, 0x000000, 0x763c02, 0x000000, 0x000000, 0x763e01, 0x763f06, - 0x000000, 0x000000, 0x000000, 0x764502, 0x764702, 0x000000, 0x000000, 0x764902, - 0x000000, 0x764b0a, 0x000000, 0x765501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x765601, 0x765702, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x765901, - 0x765a03, 0x765d02, 0x765f02, 0x76610a, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x766b01, 0x766c01, 0x000000, 0x000000, 0x000000, 0x766d01, - 0x000000, 0x000000, 0x000000, 0x766e01, 0x000000, 0x766f02, 0x767104, 0x767501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x767605, 0x000000, 0x767b10, - 0x768b01, 0x768c07, 0x000000, 0x000000, 0x769301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x769401, 0x000000, 0x769501, - 0x000000, 0x769601, 0x769705, 0x000000, 0x000000, 0x769c01, 0x769d0c, 0x76a901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x76aa02, 0x000000, 0x000000, 0x76ac04, - 0x000000, 0x76b003, 0x000000, 0x76b309, 0x76bc04, 0x000000, 0x000000, 0x000000, - 0x76c002, 0x000000, 0x000000, 0x000000, 0x000000, 0x76c201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x76c301, 0x000000, 0x000000, 0x76c401, 0x000000, - 0x76c502, 0x76c701, 0x000000, 0x76c801, 0x000000, 0x76c907, 0x000000, 0x000000, - 0x000000, 0x76d001, 0x000000, 0x000000, 0x76d101, 0x76d201, 0x000000, 0x76d304, - 0x000000, 0x76d703, 0x000000, 0x000000, 0x000000, 0x76da03, 0x76dd02, 0x76df01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x76e003, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x76e301, 0x000000, 0x76e401, 0x76e503, 0x000000, - 0x76e801, 0x76e903, 0x000000, 0x000000, 0x000000, 0x76ec07, 0x000000, 0x000000, - 0x000000, 0x000000, 0x76f304, 0x76f701, 0x76f801, 0x000000, 0x000000, 0x000000, - 0x76f906, 0x000000, 0x76ff03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x770202, 0x000000, 0x770408, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x770c07, 0x000000, 0x000000, 0x771301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x771401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x771501, 0x77160a, 0x772001, 0x772107, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x772803, 0x000000, - 0x772b01, 0x000000, 0x000000, 0x000000, 0x772c01, 0x772d04, 0x000000, 0x773102, - 0x773307, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x773a01, 0x000000, 0x773b01, 0x000000, - 0x773c0c, 0x000000, 0x000000, 0x000000, 0x000000, 0x774801, 0x000000, 0x000000, - 0x77490f, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x775802, 0x000000, - 0x000000, 0x775a01, 0x775b02, 0x775d01, 0x775e01, 0x775f01, 0x000000, 0x000000, - 0x776001, 0x000000, 0x776101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x776207, 0x776901, 0x776a0f, 0x000000, 0x777901, - 0x777a03, 0x000000, 0x000000, 0x777d04, 0x000000, 0x000000, 0x778111, 0x000000, - 0x000000, 0x000000, 0x000000, 0x779201, 0x77930b, 0x779e0b, 0x77a902, 0x000000, - 0x000000, 0x77ab04, 0x77af0f, 0x77be01, 0x77bf01, 0x000000, 0x77c001, 0x000000, - 0x000000, 0x77c10b, 0x77cc01, 0x000000, 0x77cd06, 0x000000, 0x77d302, 0x77d501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x77d610, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x77e603, 0x000000, 0x000000, 0x77e902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x77eb01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x77ec01, 0x000000, 0x77ed01, 0x77ee04, 0x000000, 0x000000, 0x000000, 0x000000, - 0x77f202, 0x000000, 0x000000, 0x000000, 0x77f401, 0x000000, 0x000000, 0x77f509, - 0x77fe0a, 0x780802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x780a02, 0x000000, 0x000000, 0x780c01, 0x000000, - 0x000000, 0x000000, 0x780d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x780f01, 0x781003, 0x000000, 0x000000, 0x000000, 0x781303, 0x000000, 0x000000, - 0x000000, 0x781603, 0x000000, 0x781901, 0x000000, 0x781a01, 0x781b03, 0x000000, - 0x000000, 0x781e01, 0x781f01, 0x782001, 0x000000, 0x000000, 0x000000, 0x782106, - 0x000000, 0x000000, 0x782703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x782a01, 0x000000, 0x782b02, 0x000000, 0x000000, 0x782d03, - 0x000000, 0x783001, 0x783101, 0x783203, 0x783503, 0x783802, 0x000000, 0x000000, - 0x783a01, 0x783b01, 0x783c09, 0x000000, 0x000000, 0x000000, 0x000000, 0x784502, - 0x000000, 0x000000, 0x000000, 0x784712, 0x000000, 0x000000, 0x000000, 0x000000, - 0x785902, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x785b07, 0x786204, 0x000000, 0x000000, 0x786601, 0x786701, 0x000000, 0x786802, - 0x000000, 0x786a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x786b02, 0x000000, 0x000000, 0x786d04, 0x000000, 0x000000, 0x000000, 0x787101, - 0x000000, 0x787202, 0x000000, 0x787401, 0x787507, 0x000000, 0x787c01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x787d01, 0x787e02, 0x000000, 0x000000, - 0x788002, 0x000000, 0x788201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x788306, 0x788901, 0x000000, 0x000000, 0x788a06, 0x000000, 0x789001, 0x000000, - 0x000000, 0x789102, 0x000000, 0x000000, 0x789301, 0x000000, 0x000000, 0x78940c, - 0x000000, 0x000000, 0x000000, 0x78a002, 0x78a206, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x78a802, 0x000000, 0x78aa03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x78ad01, 0x000000, 0x78ae02, 0x000000, 0x78b001, 0x000000, 0x78b106, - 0x000000, 0x000000, 0x000000, 0x78b702, 0x78b903, 0x000000, 0x78bc01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x78bd05, 0x000000, 0x000000, - 0x000000, 0x78c212, 0x78d409, 0x78dd01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x78de02, 0x000000, 0x000000, 0x78e001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x78e101, 0x000000, 0x000000, 0x78e208, 0x000000, 0x000000, - 0x78ea01, 0x78eb04, 0x000000, 0x000000, 0x78ef01, 0x000000, 0x000000, 0x78f001, - 0x78f104, 0x78f503, 0x000000, 0x000000, 0x78f805, 0x78fd02, 0x000000, 0x000000, - 0x000000, 0x78ff01, 0x000000, 0x000000, 0x790001, 0x000000, 0x790104, 0x79050c, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x791101, - 0x791203, 0x791502, 0x000000, 0x791701, 0x000000, 0x000000, 0x791802, 0x000000, - 0x000000, 0x791a02, 0x791c01, 0x000000, 0x000000, 0x791d05, 0x792203, 0x000000, - 0x000000, 0x792502, 0x000000, 0x792702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x792902, 0x000000, 0x000000, 0x792b03, 0x792e01, 0x792f01, 0x793002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x793201, 0x793301, 0x793403, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x793704, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x793b01, 0x793c01, 0x793d03, 0x000000, 0x000000, 0x000000, - 0x794002, 0x794202, 0x794402, 0x000000, 0x794601, 0x000000, 0x000000, 0x000000, - 0x794701, 0x000000, 0x794804, 0x000000, 0x000000, 0x000000, 0x794c01, 0x794d01, - 0x794e08, 0x000000, 0x000000, 0x795603, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x795902, 0x000000, 0x795b03, 0x795e01, 0x000000, 0x000000, 0x000000, - 0x795f01, 0x796002, 0x000000, 0x000000, 0x000000, 0x000000, 0x796201, 0x000000, - 0x000000, 0x796301, 0x000000, 0x000000, 0x000000, 0x796402, 0x796601, 0x000000, - 0x796707, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x796e37, 0x000000, 0x79a502, 0x000000, 0x79a701, - 0x000000, 0x000000, 0x79a801, 0x79a901, 0x79aa02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x79ac02, 0x000000, 0x79ae01, 0x79af0a, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x79b909, 0x79c203, - 0x79c501, 0x79c601, 0x000000, 0x000000, 0x000000, 0x79c703, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x79ca07, 0x000000, 0x000000, - 0x000000, 0x79d106, 0x000000, 0x000000, 0x000000, 0x79d703, 0x79da01, 0x000000, - 0x000000, 0x79db02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x79dd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x79de06, 0x000000, 0x000000, 0x000000, 0x79e406, 0x000000, 0x000000, 0x000000, - 0x000000, 0x79ea04, 0x79ee10, 0x000000, 0x000000, 0x000000, 0x000000, 0x79fe01, - 0x000000, 0x79ff01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x7a0003, 0x7a0311, 0x7a1401, 0x000000, - 0x7a1501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a1602, - 0x000000, 0x000000, 0x7a1801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x7a1901, 0x7a1a01, 0x000000, 0x000000, - 0x7a1b01, 0x000000, 0x7a1c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7a1d01, 0x7a1e01, 0x000000, 0x000000, 0x7a1f02, 0x000000, 0x7a2101, 0x000000, - 0x7a220e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a3001, 0x000000, - 0x7a3102, 0x000000, 0x7a3301, 0x000000, 0x000000, 0x7a3402, 0x7a3601, 0x7a3702, - 0x000000, 0x000000, 0x7a3902, 0x000000, 0x000000, 0x000000, 0x7a3b03, 0x7a3e04, - 0x000000, 0x7a4201, 0x000000, 0x7a4302, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x7a4501, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a4601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a4701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x7a4803, 0x7a4b01, 0x7a4c06, 0x7a5202, 0x000000, - 0x7a5406, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a5a01, 0x000000, - 0x7a5b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a5c02, 0x7a5e04, - 0x000000, 0x000000, 0x7a6202, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7a6403, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a6701, 0x000000, - 0x000000, 0x7a6801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7a6901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a6a03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a6d03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7a7002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x7a7201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7a7302, 0x000000, 0x000000, 0x7a7501, 0x7a7601, 0x000000, - 0x7a7702, 0x000000, 0x000000, 0x7a7901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7a7a01, 0x000000, 0x000000, 0x7a7b07, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a8209, 0x000000, - 0x7a8b01, 0x000000, 0x000000, 0x7a8c03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a8f0c, 0x000000, 0x7a9b01, - 0x000000, 0x7a9c03, 0x000000, 0x7a9f09, 0x000000, 0x7aa804, 0x000000, 0x7aac02, - 0x7aae01, 0x7aaf01, 0x000000, 0x7ab004, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7ab402, 0x7ab601, 0x000000, 0x000000, 0x000000, 0x7ab702, - 0x7ab904, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7abd01, - 0x7abe01, 0x000000, 0x000000, 0x7abf01, 0x000000, 0x7ac007, 0x7ac701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7ac801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x7ac901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7aca03, 0x000000, 0x000000, 0x000000, 0x000000, 0x7acd04, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7ad102, 0x000000, 0x7ad304, 0x000000, 0x7ad703, 0x000000, 0x000000, 0x7ada01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x7adb09, 0x000000, 0x7ae404, 0x7ae801, - 0x000000, 0x000000, 0x7ae901, 0x000000, 0x000000, 0x7aea01, 0x000000, 0x000000, - 0x7aeb01, 0x000000, 0x000000, 0x000000, 0x7aec04, 0x7af003, 0x000000, 0x7af30d, - 0x000000, 0x000000, 0x000000, 0x000000, 0x7b0001, 0x7b0102, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b0301, 0x7b0401, 0x7b0507, - 0x000000, 0x000000, 0x000000, 0x000000, 0x7b0c03, 0x7b0f01, 0x7b1004, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7b1401, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b1501, 0x000000, 0x000000, - 0x7b1602, 0x000000, 0x000000, 0x7b1801, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b1908, 0x000000, 0x7b210e, - 0x7b2f03, 0x7b3201, 0x7b3301, 0x000000, 0x7b3405, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x7b3907, 0x7b4006, 0x7b4601, 0x000000, 0x000000, - 0x000000, 0x7b4701, 0x7b4801, 0x7b4902, 0x000000, 0x000000, 0x7b4b03, 0x7b4e02, - 0x000000, 0x7b5001, 0x000000, 0x000000, 0x000000, 0x7b5101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7b5201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x7b5302, 0x7b5506, 0x7b5b01, 0x7b5c01, 0x000000, 0x000000, 0x7b5d02, - 0x7b5f01, 0x7b6001, 0x7b6109, 0x7b6a01, 0x000000, 0x7b6b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7b6c02, 0x000000, 0x7b6e01, 0x000000, 0x7b6f01, 0x7b7002, - 0x000000, 0x000000, 0x7b7201, 0x7b7304, 0x000000, 0x000000, 0x7b7702, 0x7b7901, - 0x000000, 0x000000, 0x000000, 0x7b7a04, 0x000000, 0x7b7e01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7b7f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x7b8001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b8103, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b8401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7b8503, 0x7b8802, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b8a0e, 0x000000, - 0x7b9801, 0x000000, 0x000000, 0x7b9901, 0x000000, 0x000000, 0x7b9a01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7b9b02, 0x000000, 0x7b9d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b9f04, - 0x000000, 0x000000, 0x000000, 0x7ba305, 0x000000, 0x000000, 0x000000, 0x7ba813, - 0x000000, 0x000000, 0x7bbb0d, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7bc802, 0x7bca01, 0x7bcb02, 0x000000, 0x7bcd02, 0x000000, - 0x000000, 0x000000, 0x7bcf06, 0x000000, 0x7bd501, 0x000000, 0x7bd602, 0x000000, -}; - -static const DictWord kStaticDictionaryWords[] = { - { 8, 0, 1002 }, { 8, 0, 1015 }, { 4, 0, 683 }, { 4, 10, 325 }, - { 10, 10, 125 }, { 7, 11, 572 }, { 9, 11, 592 }, { 11, 11, 680 }, - { 11, 11, 842 }, { 11, 11, 924 }, { 12, 11, 356 }, { 12, 11, 550 }, - { 13, 11, 317 }, { 13, 11, 370 }, { 13, 11, 469 }, { 13, 11, 471 }, - { 14, 11, 397 }, { 18, 11, 69 }, { 18, 11, 145 }, { 6, 0, 1265 }, - { 8, 11, 534 }, { 6, 0, 1431 }, { 11, 0, 138 }, { 12, 0, 40 }, - { 4, 0, 155 }, { 7, 0, 1689 }, { 4, 10, 718 }, { 7, 10, 1216 }, - { 4, 0, 245 }, { 5, 0, 151 }, { 5, 0, 741 }, { 6, 0, 1147 }, - { 7, 0, 498 }, { 7, 0, 870 }, { 7, 0, 1542 }, { 12, 0, 213 }, - { 14, 0, 36 }, { 14, 0, 391 }, { 17, 0, 111 }, { 18, 0, 6 }, - { 18, 0, 46 }, { 18, 0, 151 }, { 19, 0, 36 }, { 20, 0, 32 }, - { 20, 0, 56 }, { 20, 0, 69 }, { 20, 0, 102 }, { 21, 0, 4 }, - { 22, 0, 8 }, { 22, 0, 10 }, { 22, 0, 14 }, { 22, 0, 31 }, - { 4, 0, 624 }, { 7, 0, 1752 }, { 5, 10, 124 }, { 5, 10, 144 }, - { 6, 10, 548 }, { 7, 10, 15 }, { 7, 10, 153 }, { 9, 10, 629 }, - { 6, 0, 503 }, { 9, 0, 586 }, { 13, 0, 468 }, { 14, 0, 66 }, - { 16, 0, 58 }, { 7, 10, 1531 }, { 8, 10, 416 }, { 9, 10, 275 }, - { 10, 10, 100 }, { 11, 10, 658 }, { 11, 10, 979 }, { 12, 10, 86 }, - { 14, 10, 207 }, { 15, 10, 20 }, { 15, 10, 25 }, { 5, 0, 603 }, - { 7, 0, 1212 }, { 9, 0, 565 }, { 14, 0, 301 }, { 5, 10, 915 }, - { 6, 10, 1783 }, { 7, 10, 211 }, { 7, 10, 1353 }, { 9, 10, 83 }, - { 10, 10, 376 }, { 10, 10, 431 }, { 11, 10, 543 }, { 12, 10, 664 }, - { 13, 10, 280 }, { 13, 10, 428 }, { 14, 10, 128 }, { 17, 10, 52 }, - { 17, 10, 81 }, { 4, 0, 492 }, { 5, 0, 451 }, { 7, 0, 835 }, - { 13, 0, 70 }, { 4, 0, 539 }, { 7, 11, 748 }, { 11, 11, 700 }, - { 7, 11, 1517 }, { 11, 11, 597 }, { 14, 11, 76 }, { 14, 11, 335 }, - { 20, 11, 33 }, { 6, 0, 113 }, { 7, 0, 436 }, { 4, 10, 338 }, - { 5, 10, 400 }, { 8, 0, 718 }, { 5, 11, 127 }, { 5, 11, 418 }, - { 6, 0, 1505 }, { 7, 0, 520 }, { 6, 11, 198 }, { 11, 10, 892 }, - { 12, 11, 83 }, { 4, 10, 221 }, { 5, 10, 659 }, { 5, 10, 989 }, - { 7, 10, 697 }, { 7, 10, 1211 }, { 10, 10, 284 }, { 7, 0, 1070 }, - { 5, 11, 276 }, { 6, 11, 55 }, { 7, 11, 1369 }, { 6, 0, 1515 }, - { 6, 11, 1752 }, { 8, 11, 726 }, { 10, 10, 507 }, { 15, 0, 78 }, - { 4, 10, 188 }, { 7, 10, 805 }, { 5, 10, 884 }, { 11, 10, 991 }, - { 5, 11, 764 }, { 6, 10, 1653 }, { 6, 11, 309 }, { 7, 11, 331 }, - { 10, 11, 550 }, { 7, 11, 1861 }, { 4, 11, 348 }, { 7, 11, 986 }, - { 7, 11, 1573 }, { 12, 0, 610 }, { 13, 0, 431 }, { 16, 0, 59 }, - { 9, 11, 799 }, { 12, 10, 166 }, { 6, 0, 1530 }, { 4, 0, 750 }, - { 4, 0, 307 }, { 5, 0, 964 }, { 6, 11, 194 }, { 7, 11, 133 }, - { 10, 11, 493 }, { 10, 11, 570 }, { 11, 11, 664 }, { 5, 11, 24 }, - { 5, 11, 569 }, { 6, 11, 3 }, { 6, 11, 119 }, { 6, 11, 143 }, - { 6, 11, 440 }, { 7, 11, 295 }, { 7, 11, 599 }, { 7, 11, 1686 }, - { 7, 11, 1854 }, { 8, 11, 424 }, { 9, 11, 43 }, { 9, 11, 584 }, - { 9, 11, 760 }, { 10, 11, 148 }, { 10, 11, 328 }, { 11, 11, 159 }, - { 11, 11, 253 }, { 11, 11, 506 }, { 12, 11, 487 }, { 12, 11, 531 }, - { 16, 11, 33 }, { 8, 10, 760 }, { 5, 11, 14 }, { 5, 11, 892 }, - { 6, 11, 283 }, { 7, 11, 234 }, { 8, 11, 537 }, { 7, 11, 1251 }, - { 4, 11, 126 }, { 8, 11, 635 }, { 19, 11, 34 }, { 4, 11, 316 }, - { 7, 11, 1561 }, { 6, 0, 999 }, { 6, 0, 1310 }, { 9, 11, 861 }, - { 4, 11, 64 }, { 5, 11, 352 }, { 5, 11, 720 }, { 6, 11, 368 }, - { 11, 11, 359 }, { 4, 0, 75 }, { 5, 0, 180 }, { 6, 0, 500 }, - { 7, 0, 58 }, { 7, 0, 710 }, { 10, 0, 645 }, { 8, 10, 770 }, - { 5, 0, 649 }, { 6, 0, 276 }, { 7, 0, 282 }, { 7, 0, 879 }, - { 7, 0, 924 }, { 8, 0, 459 }, { 9, 0, 599 }, { 9, 0, 754 }, - { 11, 0, 574 }, { 12, 0, 128 }, { 12, 0, 494 }, { 13, 0, 52 }, - { 13, 0, 301 }, { 15, 0, 30 }, { 15, 0, 132 }, { 4, 0, 200 }, - { 4, 10, 89 }, { 5, 10, 489 }, { 6, 10, 315 }, { 7, 10, 553 }, - { 7, 10, 1745 }, { 10, 10, 243 }, { 7, 11, 1050 }, { 7, 0, 1621 }, - { 6, 10, 1658 }, { 9, 10, 3 }, { 10, 10, 154 }, { 11, 10, 641 }, - { 13, 10, 85 }, { 13, 10, 201 }, { 13, 10, 346 }, { 6, 11, 175 }, - { 9, 11, 289 }, { 5, 11, 432 }, { 5, 11, 913 }, { 6, 0, 225 }, - { 9, 0, 211 }, { 7, 0, 718 }, { 8, 0, 687 }, { 11, 0, 374 }, - { 4, 10, 166 }, { 5, 10, 505 }, { 9, 0, 110 }, { 6, 10, 1670 }, - { 8, 0, 58 }, { 9, 0, 724 }, { 11, 0, 809 }, { 13, 0, 113 }, - { 17, 0, 72 }, { 6, 0, 345 }, { 7, 0, 1247 }, { 16, 11, 82 }, - { 5, 11, 931 }, { 6, 11, 1698 }, { 8, 0, 767 }, { 8, 0, 803 }, - { 9, 0, 301 }, { 9, 0, 903 }, { 11, 0, 203 }, { 6, 0, 1154 }, - { 7, 0, 1949 }, { 8, 0, 674 }, { 6, 0, 259 }, { 7, 0, 1275 }, - { 5, 11, 774 }, { 6, 11, 1637 }, { 6, 11, 1686 }, { 6, 11, 1751 }, - { 6, 0, 1231 }, { 7, 10, 445 }, { 8, 10, 307 }, { 8, 10, 704 }, - { 10, 10, 41 }, { 10, 10, 439 }, { 11, 10, 237 }, { 11, 10, 622 }, - { 12, 10, 201 }, { 8, 0, 254 }, { 6, 11, 260 }, { 7, 11, 1484 }, - { 11, 0, 277 }, { 7, 10, 1977 }, { 4, 10, 189 }, { 5, 10, 713 }, - { 6, 11, 573 }, { 8, 10, 57 }, { 10, 10, 371 }, { 4, 10, 552 }, - { 6, 11, 344 }, { 5, 0, 248 }, { 9, 0, 800 }, { 10, 0, 693 }, - { 11, 0, 482 }, { 11, 0, 734 }, { 11, 0, 789 }, { 6, 11, 240 }, - { 4, 0, 116 }, { 5, 0, 95 }, { 5, 0, 445 }, { 7, 0, 1688 }, - { 8, 0, 29 }, { 9, 0, 272 }, { 11, 0, 509 }, { 11, 0, 915 }, - { 4, 11, 292 }, { 4, 11, 736 }, { 5, 11, 871 }, { 6, 11, 171 }, - { 6, 11, 1689 }, { 7, 11, 1324 }, { 7, 11, 1944 }, { 9, 11, 415 }, - { 9, 11, 580 }, { 14, 11, 230 }, { 18, 11, 68 }, { 7, 0, 490 }, - { 13, 0, 100 }, { 15, 0, 75 }, { 7, 0, 1641 }, { 5, 0, 543 }, - { 7, 11, 209 }, { 8, 11, 661 }, { 10, 11, 42 }, { 11, 11, 58 }, - { 12, 11, 58 }, { 12, 11, 118 }, { 13, 11, 32 }, { 5, 0, 181 }, - { 8, 0, 41 }, { 6, 11, 63 }, { 7, 11, 920 }, { 5, 0, 657 }, - { 5, 11, 793 }, { 10, 0, 709 }, { 7, 0, 25 }, { 8, 0, 202 }, - { 10, 0, 536 }, { 5, 11, 665 }, { 7, 10, 1788 }, { 17, 10, 49 }, - { 9, 0, 423 }, { 12, 0, 89 }, { 5, 11, 67 }, { 6, 11, 62 }, - { 6, 11, 374 }, { 7, 11, 1391 }, { 8, 0, 113 }, { 9, 0, 877 }, - { 10, 0, 554 }, { 11, 0, 83 }, { 12, 0, 136 }, { 19, 0, 109 }, - { 9, 11, 790 }, { 12, 11, 47 }, { 10, 10, 661 }, { 4, 0, 963 }, - { 10, 0, 927 }, { 14, 0, 442 }, { 7, 10, 1945 }, { 5, 0, 976 }, - { 4, 0, 206 }, { 4, 11, 391 }, { 7, 11, 1169 }, { 6, 0, 2002 }, - { 6, 0, 696 }, { 6, 0, 1008 }, { 6, 0, 1170 }, { 4, 11, 271 }, - { 7, 0, 13 }, { 8, 0, 226 }, { 10, 0, 537 }, { 11, 0, 570 }, - { 11, 0, 605 }, { 11, 0, 799 }, { 11, 0, 804 }, { 12, 0, 85 }, - { 12, 0, 516 }, { 12, 0, 623 }, { 13, 0, 112 }, { 13, 0, 361 }, - { 14, 0, 77 }, { 14, 0, 78 }, { 17, 0, 28 }, { 19, 0, 110 }, - { 12, 11, 314 }, { 4, 0, 769 }, { 6, 0, 1544 }, { 4, 0, 551 }, - { 9, 0, 678 }, { 5, 10, 84 }, { 6, 10, 163 }, { 9, 0, 57 }, - { 9, 0, 459 }, { 10, 0, 425 }, { 11, 0, 119 }, { 12, 0, 184 }, - { 12, 0, 371 }, { 13, 0, 358 }, { 17, 0, 51 }, { 5, 0, 188 }, - { 5, 0, 814 }, { 8, 0, 10 }, { 9, 0, 421 }, { 9, 0, 729 }, - { 10, 0, 609 }, { 11, 0, 689 }, { 4, 11, 253 }, { 5, 10, 410 }, - { 5, 11, 544 }, { 7, 11, 300 }, { 9, 11, 340 }, { 6, 0, 624 }, - { 10, 11, 321 }, { 7, 0, 1941 }, { 18, 0, 130 }, { 5, 10, 322 }, - { 8, 10, 186 }, { 9, 10, 262 }, { 10, 10, 187 }, { 14, 10, 208 }, - { 5, 11, 53 }, { 5, 11, 541 }, { 6, 11, 94 }, { 6, 11, 499 }, - { 7, 11, 230 }, { 11, 11, 321 }, { 5, 10, 227 }, { 4, 0, 378 }, - { 4, 11, 920 }, { 5, 11, 25 }, { 5, 11, 790 }, { 6, 11, 457 }, - { 7, 11, 853 }, { 9, 0, 269 }, { 4, 0, 528 }, { 6, 0, 1146 }, - { 7, 10, 1395 }, { 8, 10, 486 }, { 9, 10, 236 }, { 9, 10, 878 }, - { 10, 10, 218 }, { 11, 10, 95 }, { 19, 10, 17 }, { 19, 10, 31 }, - { 7, 10, 2043 }, { 8, 10, 672 }, { 13, 10, 448 }, { 6, 0, 1105 }, - { 6, 0, 1616 }, { 6, 11, 1765 }, { 12, 11, 163 }, { 5, 10, 412 }, - { 5, 11, 822 }, { 4, 11, 634 }, { 6, 0, 656 }, { 6, 11, 1730 }, - { 6, 0, 1940 }, { 5, 0, 104 }, { 6, 0, 173 }, { 7, 0, 1631 }, - { 8, 10, 562 }, { 6, 11, 36 }, { 7, 11, 658 }, { 8, 11, 454 }, - { 19, 11, 86 }, { 5, 0, 457 }, { 6, 10, 1771 }, { 7, 0, 810 }, - { 8, 0, 138 }, { 8, 0, 342 }, { 9, 0, 84 }, { 10, 0, 193 }, - { 11, 0, 883 }, { 12, 0, 359 }, { 9, 0, 620 }, { 7, 10, 1190 }, - { 9, 10, 132 }, { 7, 11, 975 }, { 9, 11, 789 }, { 6, 0, 95 }, - { 6, 0, 1934 }, { 8, 0, 967 }, { 13, 11, 335 }, { 6, 0, 406 }, - { 10, 0, 409 }, { 10, 0, 447 }, { 11, 0, 44 }, { 12, 0, 100 }, - { 4, 10, 317 }, { 7, 10, 1279 }, { 4, 0, 477 }, { 6, 0, 1268 }, - { 6, 0, 1941 }, { 8, 0, 944 }, { 5, 10, 63 }, { 5, 10, 509 }, - { 4, 0, 629 }, { 4, 11, 104 }, { 4, 0, 246 }, { 5, 0, 375 }, - { 6, 0, 1636 }, { 4, 10, 288 }, { 7, 11, 1614 }, { 9, 0, 49 }, - { 10, 0, 774 }, { 8, 10, 89 }, { 8, 10, 620 }, { 11, 10, 628 }, - { 12, 10, 322 }, { 15, 10, 124 }, { 4, 0, 282 }, { 7, 0, 1034 }, - { 11, 0, 398 }, { 11, 0, 634 }, { 12, 0, 1 }, { 12, 0, 79 }, - { 12, 0, 544 }, { 14, 0, 237 }, { 17, 0, 10 }, { 18, 0, 20 }, - { 4, 0, 824 }, { 7, 11, 45 }, { 9, 11, 542 }, { 9, 11, 566 }, - { 10, 11, 728 }, { 5, 0, 118 }, { 5, 0, 499 }, { 6, 0, 476 }, - { 6, 0, 665 }, { 6, 0, 1176 }, { 6, 0, 1196 }, { 7, 0, 600 }, - { 7, 0, 888 }, { 7, 0, 1096 }, { 7, 0, 296 }, { 7, 0, 596 }, - { 8, 0, 560 }, { 8, 0, 586 }, { 9, 0, 612 }, { 11, 0, 304 }, - { 12, 0, 46 }, { 13, 0, 89 }, { 14, 0, 112 }, { 17, 0, 122 }, - { 5, 0, 894 }, { 6, 0, 1772 }, { 9, 0, 1009 }, { 10, 10, 120 }, - { 5, 11, 533 }, { 7, 11, 755 }, { 10, 11, 780 }, { 23, 10, 1 }, - { 6, 0, 1474 }, { 7, 11, 87 }, { 14, 11, 288 }, { 11, 0, 366 }, - { 9, 10, 461 }, { 7, 11, 988 }, { 7, 11, 1939 }, { 9, 11, 64 }, - { 9, 11, 502 }, { 12, 11, 7 }, { 12, 11, 34 }, { 13, 11, 12 }, - { 13, 11, 234 }, { 19, 11, 77 }, { 7, 0, 1599 }, { 7, 0, 1723 }, - { 8, 0, 79 }, { 8, 0, 106 }, { 8, 0, 190 }, { 8, 0, 302 }, - { 8, 0, 383 }, { 8, 0, 713 }, { 9, 0, 119 }, { 9, 0, 233 }, - { 9, 0, 419 }, { 9, 0, 471 }, { 10, 0, 181 }, { 10, 0, 406 }, - { 11, 0, 57 }, { 11, 0, 85 }, { 11, 0, 120 }, { 11, 0, 177 }, - { 11, 0, 296 }, { 11, 0, 382 }, { 11, 0, 454 }, { 11, 0, 758 }, - { 11, 0, 999 }, { 12, 0, 27 }, { 12, 0, 98 }, { 12, 0, 131 }, - { 12, 0, 245 }, { 12, 0, 312 }, { 12, 0, 446 }, { 12, 0, 454 }, - { 13, 0, 25 }, { 13, 0, 98 }, { 13, 0, 426 }, { 13, 0, 508 }, - { 14, 0, 70 }, { 14, 0, 163 }, { 14, 0, 272 }, { 14, 0, 277 }, - { 14, 0, 370 }, { 15, 0, 95 }, { 15, 0, 138 }, { 15, 0, 167 }, - { 17, 0, 38 }, { 20, 0, 96 }, { 7, 10, 1346 }, { 10, 0, 200 }, - { 19, 0, 2 }, { 23, 0, 22 }, { 7, 11, 141 }, { 6, 10, 85 }, - { 6, 0, 1759 }, { 10, 0, 372 }, { 17, 0, 16 }, { 8, 0, 943 }, - { 4, 11, 619 }, { 11, 11, 88 }, { 5, 11, 246 }, { 8, 11, 189 }, - { 9, 11, 355 }, { 9, 11, 512 }, { 10, 11, 124 }, { 10, 11, 453 }, - { 11, 11, 143 }, { 11, 11, 416 }, { 11, 11, 859 }, { 13, 11, 341 }, - { 5, 0, 258 }, { 6, 0, 719 }, { 6, 0, 1798 }, { 6, 0, 1839 }, - { 8, 0, 900 }, { 10, 0, 874 }, { 10, 0, 886 }, { 12, 0, 698 }, - { 12, 0, 732 }, { 12, 0, 770 }, { 16, 0, 106 }, { 18, 0, 163 }, - { 18, 0, 170 }, { 18, 0, 171 }, { 24, 0, 20 }, { 9, 0, 707 }, - { 11, 0, 326 }, { 11, 0, 339 }, { 12, 0, 423 }, { 12, 0, 502 }, - { 20, 0, 62 }, { 9, 11, 707 }, { 11, 11, 326 }, { 11, 11, 339 }, - { 12, 11, 423 }, { 12, 11, 502 }, { 20, 11, 62 }, { 5, 0, 30 }, - { 7, 0, 495 }, { 8, 0, 134 }, { 9, 0, 788 }, { 12, 0, 438 }, - { 5, 11, 678 }, { 5, 10, 279 }, { 6, 10, 235 }, { 7, 10, 468 }, - { 8, 10, 446 }, { 9, 10, 637 }, { 10, 10, 717 }, { 11, 10, 738 }, - { 12, 10, 514 }, { 5, 11, 35 }, { 6, 11, 287 }, { 7, 11, 862 }, - { 7, 11, 1886 }, { 10, 11, 179 }, { 7, 0, 1948 }, { 7, 0, 2004 }, - { 4, 11, 517 }, { 5, 10, 17 }, { 6, 10, 371 }, { 9, 10, 528 }, - { 4, 0, 115 }, { 5, 0, 669 }, { 6, 0, 407 }, { 8, 0, 311 }, - { 11, 0, 10 }, { 13, 0, 5 }, { 9, 0, 381 }, { 5, 0, 50 }, - { 6, 0, 439 }, { 7, 0, 780 }, { 7, 0, 1040 }, { 8, 11, 667 }, - { 11, 11, 403 }, { 18, 11, 83 }, { 5, 0, 1 }, { 6, 0, 81 }, - { 10, 0, 520 }, { 6, 0, 738 }, { 5, 0, 482 }, { 8, 0, 98 }, - { 9, 0, 172 }, { 10, 0, 360 }, { 10, 0, 700 }, { 10, 0, 822 }, - { 11, 0, 302 }, { 11, 0, 778 }, { 12, 0, 50 }, { 12, 0, 127 }, - { 12, 0, 396 }, { 13, 0, 62 }, { 13, 0, 328 }, { 14, 0, 122 }, - { 19, 0, 72 }, { 9, 11, 157 }, { 10, 11, 131 }, { 12, 11, 72 }, - { 7, 11, 714 }, { 7, 11, 539 }, { 5, 0, 2 }, { 6, 0, 512 }, - { 7, 0, 797 }, { 7, 0, 1494 }, { 8, 0, 253 }, { 8, 0, 589 }, - { 9, 0, 77 }, { 10, 0, 1 }, { 10, 0, 129 }, { 10, 0, 225 }, - { 11, 0, 118 }, { 11, 0, 226 }, { 11, 0, 251 }, { 11, 0, 430 }, - { 11, 0, 701 }, { 11, 0, 974 }, { 11, 0, 982 }, { 12, 0, 64 }, - { 12, 0, 260 }, { 12, 0, 488 }, { 12, 0, 690 }, { 5, 11, 394 }, - { 7, 11, 367 }, { 7, 11, 487 }, { 7, 11, 857 }, { 7, 11, 1713 }, - { 8, 11, 246 }, { 9, 11, 537 }, { 10, 11, 165 }, { 12, 11, 219 }, - { 12, 11, 561 }, { 8, 0, 557 }, { 5, 10, 779 }, { 5, 10, 807 }, - { 6, 10, 1655 }, { 6, 10, 1676 }, { 4, 10, 196 }, { 5, 10, 558 }, - { 5, 10, 949 }, { 11, 11, 827 }, { 12, 11, 56 }, { 14, 11, 34 }, - { 15, 11, 148 }, { 9, 0, 347 }, { 5, 0, 572 }, { 6, 0, 832 }, - { 4, 0, 12 }, { 7, 0, 504 }, { 7, 0, 522 }, { 7, 0, 809 }, - { 8, 0, 797 }, { 13, 0, 88 }, { 4, 10, 752 }, { 5, 11, 449 }, - { 7, 11, 86 }, { 8, 11, 103 }, { 17, 11, 69 }, { 7, 11, 2028 }, - { 10, 11, 641 }, { 5, 0, 528 }, { 6, 11, 1 }, { 14, 11, 2 }, - { 6, 0, 861 }, { 10, 0, 294 }, { 4, 10, 227 }, { 5, 10, 159 }, - { 5, 10, 409 }, { 7, 10, 80 }, { 10, 10, 479 }, { 12, 10, 418 }, - { 14, 10, 50 }, { 14, 10, 249 }, { 14, 10, 295 }, { 7, 10, 1470 }, - { 8, 10, 66 }, { 8, 10, 137 }, { 8, 10, 761 }, { 9, 10, 638 }, - { 11, 10, 80 }, { 11, 10, 212 }, { 11, 10, 368 }, { 11, 10, 418 }, - { 12, 10, 8 }, { 13, 10, 15 }, { 16, 10, 61 }, { 17, 10, 59 }, - { 19, 10, 28 }, { 20, 10, 84 }, { 20, 0, 109 }, { 7, 11, 1148 }, - { 6, 11, 277 }, { 7, 11, 1274 }, { 7, 11, 1386 }, { 7, 11, 1392 }, - { 12, 11, 129 }, { 18, 11, 87 }, { 6, 11, 187 }, { 7, 11, 39 }, - { 7, 11, 1203 }, { 8, 11, 380 }, { 8, 11, 542 }, { 14, 11, 117 }, - { 21, 11, 28 }, { 6, 0, 1187 }, { 5, 0, 266 }, { 9, 0, 290 }, - { 9, 0, 364 }, { 10, 0, 293 }, { 11, 0, 606 }, { 14, 0, 45 }, - { 6, 11, 297 }, { 7, 11, 793 }, { 11, 11, 938 }, { 4, 0, 50 }, - { 6, 0, 594 }, { 9, 0, 121 }, { 10, 0, 49 }, { 10, 0, 412 }, - { 11, 0, 834 }, { 8, 0, 748 }, { 7, 11, 464 }, { 8, 11, 438 }, - { 11, 11, 105 }, { 11, 11, 363 }, { 12, 11, 231 }, { 14, 11, 386 }, - { 15, 11, 102 }, { 20, 11, 75 }, { 4, 0, 466 }, { 13, 0, 399 }, - { 14, 0, 337 }, { 6, 10, 38 }, { 7, 10, 1220 }, { 8, 10, 185 }, - { 8, 10, 256 }, { 9, 10, 22 }, { 9, 10, 331 }, { 10, 10, 738 }, - { 11, 10, 205 }, { 11, 10, 540 }, { 11, 10, 746 }, { 13, 10, 465 }, - { 14, 10, 194 }, { 9, 0, 378 }, { 13, 0, 162 }, { 9, 0, 519 }, - { 4, 10, 159 }, { 6, 10, 115 }, { 7, 10, 252 }, { 7, 10, 257 }, - { 7, 10, 1928 }, { 8, 10, 69 }, { 9, 10, 384 }, { 10, 10, 91 }, - { 10, 10, 615 }, { 12, 10, 375 }, { 14, 10, 235 }, { 18, 10, 117 }, - { 19, 10, 123 }, { 5, 11, 604 }, { 5, 10, 911 }, { 8, 10, 278 }, - { 4, 0, 667 }, { 8, 0, 351 }, { 9, 0, 322 }, { 4, 10, 151 }, - { 7, 10, 1567 }, { 6, 0, 902 }, { 5, 10, 990 }, { 12, 0, 180 }, - { 5, 10, 194 }, { 7, 10, 1662 }, { 9, 10, 90 }, { 4, 0, 869 }, - { 6, 0, 1996 }, { 6, 0, 813 }, { 5, 10, 425 }, { 9, 11, 761 }, - { 4, 0, 260 }, { 5, 10, 971 }, { 5, 11, 20 }, { 6, 11, 298 }, - { 7, 11, 659 }, { 7, 11, 1366 }, { 9, 11, 219 }, { 4, 0, 39 }, - { 5, 0, 36 }, { 7, 0, 1843 }, { 8, 0, 407 }, { 11, 0, 144 }, - { 12, 0, 523 }, { 4, 0, 510 }, { 10, 0, 587 }, { 11, 10, 752 }, - { 7, 0, 29 }, { 7, 0, 66 }, { 7, 0, 1980 }, { 10, 0, 487 }, - { 10, 0, 809 }, { 13, 0, 260 }, { 14, 0, 82 }, { 18, 0, 63 }, - { 9, 10, 662 }, { 5, 10, 72 }, { 6, 10, 264 }, { 7, 10, 21 }, - { 7, 10, 46 }, { 7, 10, 2013 }, { 8, 10, 215 }, { 8, 10, 513 }, - { 10, 10, 266 }, { 11, 10, 22 }, { 6, 0, 570 }, { 6, 0, 565 }, - { 7, 0, 1667 }, { 4, 11, 439 }, { 10, 10, 95 }, { 11, 10, 603 }, - { 12, 11, 242 }, { 13, 10, 443 }, { 14, 10, 160 }, { 15, 10, 4 }, - { 6, 0, 1464 }, { 6, 10, 431 }, { 9, 0, 372 }, { 15, 0, 2 }, - { 19, 0, 10 }, { 19, 0, 18 }, { 5, 10, 874 }, { 6, 10, 1677 }, - { 15, 10, 0 }, { 4, 0, 787 }, { 6, 0, 380 }, { 12, 0, 399 }, - { 21, 0, 19 }, { 7, 10, 939 }, { 7, 10, 1172 }, { 7, 10, 1671 }, - { 9, 10, 540 }, { 10, 10, 696 }, { 11, 10, 265 }, { 11, 10, 732 }, - { 11, 10, 928 }, { 11, 10, 937 }, { 13, 10, 438 }, { 9, 0, 200 }, - { 4, 11, 233 }, { 4, 0, 516 }, { 6, 11, 577 }, { 4, 0, 844 }, - { 11, 0, 887 }, { 14, 0, 365 }, { 14, 0, 375 }, { 4, 11, 482 }, - { 8, 0, 821 }, { 12, 0, 44 }, { 7, 0, 1655 }, { 8, 0, 305 }, - { 5, 10, 682 }, { 7, 10, 1887 }, { 7, 11, 346 }, { 4, 10, 696 }, - { 4, 0, 10 }, { 7, 0, 917 }, { 11, 0, 786 }, { 5, 11, 795 }, - { 6, 11, 1741 }, { 8, 11, 417 }, { 9, 11, 782 }, { 4, 0, 1016 }, - { 6, 0, 2031 }, { 5, 0, 684 }, { 4, 10, 726 }, { 5, 10, 630 }, - { 6, 0, 1021 }, { 6, 0, 1480 }, { 8, 10, 802 }, { 8, 10, 838 }, - { 6, 0, 27 }, { 6, 0, 395 }, { 7, 11, 622 }, { 7, 11, 625 }, - { 7, 11, 1750 }, { 4, 11, 203 }, { 7, 11, 1936 }, { 6, 10, 118 }, - { 7, 10, 215 }, { 7, 10, 1521 }, { 12, 10, 11 }, { 4, 0, 813 }, - { 8, 0, 511 }, { 7, 10, 615 }, { 10, 10, 251 }, { 7, 10, 1044 }, - { 17, 0, 56 }, { 5, 10, 225 }, { 6, 0, 342 }, { 6, 0, 496 }, - { 8, 0, 275 }, { 9, 0, 206 }, { 4, 0, 909 }, { 5, 0, 940 }, - { 4, 0, 891 }, { 7, 11, 311 }, { 9, 11, 308 }, { 12, 11, 255 }, - { 4, 10, 370 }, { 5, 10, 756 }, { 7, 10, 1326 }, { 4, 0, 687 }, - { 6, 0, 1596 }, { 6, 0, 1342 }, { 6, 10, 1662 }, { 7, 10, 48 }, - { 8, 10, 771 }, { 10, 10, 116 }, { 13, 10, 104 }, { 14, 10, 105 }, - { 14, 10, 184 }, { 15, 10, 168 }, { 19, 10, 92 }, { 20, 10, 68 }, - { 10, 10, 209 }, { 4, 11, 400 }, { 5, 11, 267 }, { 7, 11, 232 }, - { 23, 11, 12 }, { 6, 0, 41 }, { 13, 0, 160 }, { 13, 11, 314 }, - { 6, 0, 1718 }, { 8, 0, 778 }, { 14, 11, 261 }, { 6, 0, 1610 }, - { 5, 0, 115 }, { 4, 0, 294 }, { 14, 0, 314 }, { 4, 10, 120 }, - { 4, 0, 983 }, { 5, 0, 193 }, { 12, 0, 178 }, { 10, 10, 429 }, - { 5, 10, 820 }, { 7, 10, 931 }, { 6, 0, 994 }, { 6, 0, 1051 }, - { 6, 0, 1439 }, { 7, 0, 174 }, { 5, 11, 732 }, { 4, 11, 100 }, - { 7, 11, 679 }, { 8, 11, 313 }, { 10, 10, 199 }, { 6, 10, 151 }, - { 6, 10, 1675 }, { 7, 10, 383 }, { 23, 10, 10 }, { 6, 0, 1796 }, - { 8, 0, 848 }, { 8, 0, 867 }, { 8, 0, 907 }, { 10, 0, 855 }, - { 12, 0, 703 }, { 12, 0, 221 }, { 4, 0, 122 }, { 5, 0, 796 }, - { 5, 0, 952 }, { 6, 0, 1660 }, { 6, 0, 1671 }, { 8, 0, 567 }, - { 9, 0, 687 }, { 9, 0, 742 }, { 10, 0, 686 }, { 11, 0, 682 }, - { 11, 0, 909 }, { 12, 0, 281 }, { 5, 11, 362 }, { 5, 11, 443 }, - { 6, 11, 318 }, { 7, 11, 1019 }, { 11, 11, 623 }, { 5, 11, 463 }, - { 8, 11, 296 }, { 11, 0, 583 }, { 13, 0, 262 }, { 6, 10, 1624 }, - { 12, 10, 422 }, { 14, 10, 360 }, { 5, 0, 179 }, { 7, 0, 1095 }, - { 7, 0, 1213 }, { 4, 10, 43 }, { 4, 11, 454 }, { 5, 10, 344 }, - { 5, 10, 357 }, { 4, 0, 66 }, { 7, 0, 722 }, { 7, 0, 904 }, - { 6, 0, 773 }, { 7, 0, 352 }, { 5, 10, 888 }, { 5, 11, 48 }, - { 5, 11, 404 }, { 6, 11, 557 }, { 7, 11, 458 }, { 8, 11, 597 }, - { 10, 11, 455 }, { 10, 11, 606 }, { 11, 11, 49 }, { 11, 11, 548 }, - { 12, 11, 476 }, { 13, 11, 18 }, { 13, 11, 450 }, { 6, 11, 418 }, - { 4, 10, 711 }, { 5, 11, 442 }, { 7, 11, 1984 }, { 13, 0, 35 }, - { 9, 0, 152 }, { 6, 0, 1197 }, { 7, 11, 1093 }, { 9, 11, 203 }, - { 9, 10, 440 }, { 10, 0, 592 }, { 10, 0, 753 }, { 12, 0, 317 }, - { 12, 0, 355 }, { 12, 0, 465 }, { 12, 0, 469 }, { 12, 0, 560 }, - { 12, 0, 578 }, { 13, 0, 243 }, { 5, 0, 564 }, { 6, 0, 797 }, - { 5, 10, 958 }, { 5, 10, 987 }, { 5, 11, 55 }, { 7, 11, 376 }, - { 12, 11, 161 }, { 5, 11, 450 }, { 6, 0, 556 }, { 6, 0, 819 }, - { 11, 10, 276 }, { 14, 10, 293 }, { 7, 0, 544 }, { 10, 0, 61 }, - { 8, 0, 719 }, { 4, 10, 65 }, { 5, 10, 479 }, { 5, 10, 1004 }, - { 7, 10, 1913 }, { 8, 10, 317 }, { 9, 10, 302 }, { 10, 10, 612 }, - { 13, 10, 22 }, { 4, 0, 5 }, { 5, 0, 498 }, { 8, 0, 637 }, - { 9, 0, 521 }, { 4, 11, 213 }, { 4, 10, 261 }, { 7, 11, 223 }, - { 7, 10, 510 }, { 8, 11, 80 }, { 5, 0, 927 }, { 7, 0, 101 }, - { 4, 10, 291 }, { 7, 11, 381 }, { 7, 11, 806 }, { 7, 11, 820 }, - { 8, 11, 354 }, { 8, 11, 437 }, { 8, 11, 787 }, { 9, 10, 515 }, - { 9, 11, 657 }, { 10, 11, 58 }, { 10, 11, 339 }, { 10, 11, 749 }, - { 11, 11, 914 }, { 12, 10, 152 }, { 12, 11, 162 }, { 12, 10, 443 }, - { 13, 11, 75 }, { 13, 10, 392 }, { 14, 11, 106 }, { 14, 11, 198 }, - { 14, 11, 320 }, { 14, 10, 357 }, { 14, 11, 413 }, { 18, 11, 43 }, - { 6, 0, 1153 }, { 7, 0, 1441 }, { 8, 11, 747 }, { 4, 0, 893 }, - { 5, 0, 780 }, { 5, 0, 893 }, { 10, 11, 654 }, { 5, 11, 692 }, - { 5, 0, 238 }, { 6, 11, 191 }, { 4, 10, 130 }, { 7, 10, 843 }, - { 6, 0, 1296 }, { 5, 10, 42 }, { 5, 10, 879 }, { 7, 10, 245 }, - { 7, 10, 324 }, { 7, 10, 1532 }, { 11, 10, 463 }, { 11, 10, 472 }, - { 13, 10, 363 }, { 16, 10, 52 }, { 6, 0, 1729 }, { 6, 0, 1999 }, - { 8, 0, 969 }, { 4, 10, 134 }, { 5, 10, 372 }, { 4, 0, 60 }, - { 7, 0, 941 }, { 7, 0, 1800 }, { 8, 0, 314 }, { 9, 0, 700 }, - { 11, 0, 487 }, { 6, 0, 1144 }, { 6, 11, 162 }, { 7, 11, 1960 }, - { 8, 11, 831 }, { 4, 11, 706 }, { 7, 0, 1147 }, { 10, 11, 426 }, - { 10, 11, 89 }, { 7, 0, 1853 }, { 10, 0, 437 }, { 8, 0, 419 }, - { 7, 10, 1634 }, { 5, 0, 828 }, { 5, 0, 806 }, { 7, 0, 176 }, - { 7, 0, 178 }, { 7, 0, 1240 }, { 7, 0, 1976 }, { 4, 10, 644 }, - { 7, 11, 1877 }, { 5, 11, 420 }, { 7, 11, 1449 }, { 4, 0, 51 }, - { 5, 0, 39 }, { 6, 0, 4 }, { 7, 0, 591 }, { 7, 0, 849 }, - { 7, 0, 951 }, { 7, 0, 1613 }, { 7, 0, 1760 }, { 7, 0, 1988 }, - { 9, 0, 434 }, { 10, 0, 754 }, { 11, 0, 25 }, { 11, 0, 37 }, - { 10, 11, 57 }, { 10, 11, 277 }, { 7, 10, 540 }, { 4, 11, 204 }, - { 7, 0, 159 }, { 11, 11, 231 }, { 5, 0, 902 }, { 7, 0, 928 }, - { 7, 11, 366 }, { 9, 11, 287 }, { 12, 11, 199 }, { 12, 11, 556 }, - { 12, 11, 577 }, { 6, 10, 623 }, { 8, 10, 789 }, { 4, 10, 908 }, - { 5, 10, 359 }, { 5, 10, 508 }, { 6, 10, 1723 }, { 7, 10, 343 }, - { 7, 10, 1996 }, { 7, 10, 2026 }, { 6, 0, 270 }, { 4, 10, 341 }, - { 7, 10, 480 }, { 5, 11, 356 }, { 7, 11, 224 }, { 11, 11, 588 }, - { 11, 11, 864 }, { 11, 11, 968 }, { 15, 11, 160 }, { 4, 0, 556 }, - { 9, 0, 801 }, { 4, 0, 416 }, { 14, 0, 372 }, { 5, 0, 152 }, - { 5, 0, 197 }, { 7, 0, 340 }, { 7, 0, 867 }, { 10, 0, 548 }, - { 10, 0, 581 }, { 11, 0, 6 }, { 12, 0, 3 }, { 12, 0, 19 }, - { 14, 0, 110 }, { 14, 0, 289 }, { 11, 0, 369 }, { 7, 11, 630 }, - { 9, 11, 567 }, { 11, 11, 150 }, { 11, 11, 444 }, { 13, 11, 119 }, - { 6, 11, 539 }, { 7, 10, 1995 }, { 8, 10, 299 }, { 11, 10, 890 }, - { 12, 10, 674 }, { 7, 0, 34 }, { 7, 0, 190 }, { 8, 0, 28 }, - { 8, 0, 141 }, { 8, 0, 444 }, { 8, 0, 811 }, { 9, 0, 468 }, - { 11, 0, 334 }, { 12, 0, 24 }, { 12, 0, 386 }, { 12, 0, 576 }, - { 5, 0, 757 }, { 7, 0, 1553 }, { 8, 0, 898 }, { 5, 0, 721 }, - { 8, 0, 1012 }, { 4, 0, 789 }, { 5, 0, 647 }, { 7, 0, 1102 }, - { 4, 0, 898 }, { 10, 0, 183 }, { 4, 10, 238 }, { 5, 10, 503 }, - { 6, 10, 179 }, { 7, 10, 2003 }, { 8, 10, 381 }, { 8, 10, 473 }, - { 9, 10, 149 }, { 10, 10, 788 }, { 15, 10, 45 }, { 15, 10, 86 }, - { 20, 10, 110 }, { 22, 10, 57 }, { 9, 0, 136 }, { 19, 0, 107 }, - { 4, 10, 121 }, { 5, 10, 156 }, { 5, 10, 349 }, { 10, 10, 605 }, - { 14, 10, 342 }, { 4, 11, 235 }, { 7, 11, 255 }, { 4, 11, 194 }, - { 5, 11, 584 }, { 6, 11, 384 }, { 7, 11, 583 }, { 10, 11, 761 }, - { 11, 11, 760 }, { 11, 11, 851 }, { 6, 10, 80 }, { 6, 10, 1694 }, - { 7, 10, 173 }, { 7, 10, 1974 }, { 9, 10, 547 }, { 10, 10, 730 }, - { 14, 10, 18 }, { 22, 10, 39 }, { 4, 10, 923 }, { 6, 10, 1711 }, - { 5, 0, 277 }, { 13, 0, 247 }, { 4, 0, 435 }, { 5, 11, 562 }, - { 6, 0, 1311 }, { 5, 11, 191 }, { 9, 11, 271 }, { 4, 10, 595 }, - { 7, 11, 1537 }, { 14, 11, 96 }, { 15, 11, 73 }, { 5, 0, 437 }, - { 7, 0, 502 }, { 7, 0, 519 }, { 7, 0, 1122 }, { 7, 0, 1751 }, - { 14, 0, 211 }, { 6, 10, 459 }, { 7, 10, 1753 }, { 7, 10, 1805 }, - { 8, 10, 658 }, { 9, 10, 1 }, { 11, 10, 959 }, { 13, 10, 446 }, - { 6, 0, 814 }, { 4, 11, 470 }, { 5, 11, 473 }, { 6, 11, 153 }, - { 7, 11, 1503 }, { 7, 11, 1923 }, { 10, 11, 701 }, { 11, 11, 132 }, - { 11, 11, 168 }, { 11, 11, 227 }, { 11, 11, 320 }, { 11, 11, 436 }, - { 11, 11, 525 }, { 11, 11, 855 }, { 12, 11, 41 }, { 12, 11, 286 }, - { 13, 11, 103 }, { 13, 11, 284 }, { 14, 11, 255 }, { 14, 11, 262 }, - { 15, 11, 117 }, { 15, 11, 127 }, { 5, 0, 265 }, { 6, 0, 212 }, - { 7, 0, 28 }, { 10, 0, 750 }, { 5, 11, 327 }, { 6, 11, 552 }, - { 7, 11, 1754 }, { 9, 11, 604 }, { 6, 0, 2012 }, { 4, 0, 702 }, - { 5, 11, 80 }, { 6, 11, 405 }, { 7, 11, 403 }, { 7, 11, 1502 }, - { 7, 11, 1626 }, { 8, 11, 456 }, { 9, 11, 487 }, { 9, 11, 853 }, - { 9, 11, 889 }, { 10, 11, 309 }, { 11, 11, 721 }, { 11, 11, 994 }, - { 12, 11, 430 }, { 13, 11, 165 }, { 5, 0, 808 }, { 7, 0, 2045 }, - { 5, 0, 166 }, { 8, 0, 739 }, { 12, 0, 511 }, { 6, 10, 490 }, - { 4, 11, 453 }, { 5, 11, 887 }, { 6, 11, 535 }, { 8, 11, 6 }, - { 8, 11, 543 }, { 4, 0, 119 }, { 5, 0, 170 }, { 5, 0, 447 }, - { 7, 0, 1708 }, { 7, 0, 1889 }, { 9, 0, 357 }, { 9, 0, 719 }, - { 12, 0, 486 }, { 12, 0, 596 }, { 9, 0, 500 }, { 7, 10, 250 }, - { 8, 10, 507 }, { 4, 10, 158 }, { 6, 0, 809 }, { 6, 0, 1500 }, - { 9, 0, 327 }, { 11, 0, 350 }, { 11, 0, 831 }, { 13, 0, 352 }, - { 4, 10, 140 }, { 7, 10, 362 }, { 8, 10, 209 }, { 9, 10, 10 }, - { 9, 10, 503 }, { 9, 10, 614 }, { 10, 10, 689 }, { 11, 10, 327 }, - { 11, 10, 725 }, { 12, 10, 252 }, { 12, 10, 583 }, { 13, 10, 192 }, - { 14, 10, 269 }, { 14, 10, 356 }, { 20, 10, 50 }, { 7, 11, 741 }, - { 4, 0, 450 }, { 7, 0, 1158 }, { 19, 10, 1 }, { 19, 10, 26 }, - { 22, 10, 9 }, { 6, 0, 597 }, { 7, 0, 1318 }, { 6, 0, 1602 }, - { 6, 10, 228 }, { 7, 10, 1341 }, { 9, 10, 408 }, { 10, 10, 343 }, - { 7, 0, 1375 }, { 7, 0, 1466 }, { 10, 0, 331 }, { 4, 0, 754 }, - { 4, 10, 557 }, { 5, 11, 101 }, { 6, 11, 88 }, { 6, 11, 543 }, - { 7, 11, 1677 }, { 9, 11, 100 }, { 10, 11, 677 }, { 14, 11, 169 }, - { 14, 11, 302 }, { 14, 11, 313 }, { 15, 11, 48 }, { 15, 11, 84 }, - { 6, 0, 1368 }, { 4, 11, 310 }, { 9, 11, 795 }, { 10, 11, 733 }, - { 11, 11, 451 }, { 12, 11, 249 }, { 14, 11, 115 }, { 14, 11, 286 }, - { 15, 11, 100 }, { 4, 10, 548 }, { 10, 0, 557 }, { 7, 10, 197 }, - { 8, 10, 142 }, { 8, 10, 325 }, { 9, 10, 150 }, { 9, 10, 596 }, - { 10, 10, 353 }, { 11, 10, 74 }, { 11, 10, 315 }, { 12, 10, 662 }, - { 12, 10, 681 }, { 14, 10, 423 }, { 15, 10, 141 }, { 5, 11, 587 }, - { 5, 0, 850 }, { 8, 0, 799 }, { 10, 0, 908 }, { 12, 0, 701 }, - { 12, 0, 757 }, { 14, 0, 466 }, { 4, 0, 62 }, { 5, 0, 275 }, - { 18, 0, 19 }, { 6, 10, 399 }, { 6, 10, 579 }, { 7, 10, 692 }, - { 7, 10, 846 }, { 7, 10, 1015 }, { 7, 10, 1799 }, { 8, 10, 403 }, - { 9, 10, 394 }, { 10, 10, 133 }, { 12, 10, 4 }, { 12, 10, 297 }, - { 12, 10, 452 }, { 16, 10, 81 }, { 18, 10, 25 }, { 21, 10, 14 }, - { 22, 10, 12 }, { 23, 10, 18 }, { 12, 0, 459 }, { 7, 10, 1546 }, - { 11, 10, 299 }, { 14, 10, 407 }, { 4, 10, 177 }, { 4, 11, 498 }, - { 7, 11, 217 }, { 8, 11, 140 }, { 10, 11, 610 }, { 5, 10, 411 }, - { 7, 10, 653 }, { 6, 0, 1802 }, { 7, 10, 439 }, { 10, 10, 727 }, - { 11, 10, 260 }, { 11, 10, 684 }, { 5, 11, 905 }, { 11, 11, 580 }, - { 14, 11, 201 }, { 6, 0, 1397 }, { 5, 10, 208 }, { 7, 10, 753 }, - { 7, 10, 1528 }, { 7, 0, 238 }, { 7, 0, 2033 }, { 8, 0, 120 }, - { 8, 0, 188 }, { 8, 0, 659 }, { 9, 0, 598 }, { 10, 0, 466 }, - { 12, 0, 342 }, { 12, 0, 588 }, { 13, 0, 503 }, { 14, 0, 246 }, - { 15, 0, 92 }, { 7, 11, 1041 }, { 4, 11, 456 }, { 7, 11, 105 }, - { 7, 11, 358 }, { 7, 11, 1637 }, { 8, 11, 643 }, { 11, 11, 483 }, - { 6, 0, 1318 }, { 6, 0, 1324 }, { 4, 0, 201 }, { 7, 0, 1744 }, - { 8, 0, 602 }, { 11, 0, 247 }, { 11, 0, 826 }, { 17, 0, 65 }, - { 5, 10, 242 }, { 8, 0, 164 }, { 18, 0, 62 }, { 5, 10, 953 }, - { 11, 10, 802 }, { 5, 0, 615 }, { 7, 11, 1566 }, { 8, 11, 269 }, - { 9, 11, 212 }, { 9, 11, 718 }, { 14, 11, 15 }, { 14, 11, 132 }, - { 14, 11, 227 }, { 5, 10, 290 }, { 4, 10, 380 }, { 5, 10, 52 }, - { 7, 10, 277 }, { 9, 10, 368 }, { 11, 10, 791 }, { 7, 0, 1243 }, - { 5, 11, 539 }, { 11, 11, 919 }, { 13, 11, 409 }, { 8, 0, 968 }, - { 5, 11, 470 }, { 6, 0, 882 }, { 4, 0, 907 }, { 5, 0, 100 }, - { 10, 0, 329 }, { 12, 0, 416 }, { 21, 0, 29 }, { 10, 10, 138 }, - { 11, 10, 476 }, { 5, 10, 725 }, { 5, 10, 727 }, { 6, 11, 91 }, - { 7, 11, 435 }, { 7, 10, 1811 }, { 4, 11, 16 }, { 5, 11, 316 }, - { 5, 11, 842 }, { 6, 11, 370 }, { 6, 11, 1778 }, { 8, 11, 166 }, - { 11, 11, 812 }, { 12, 11, 206 }, { 12, 11, 351 }, { 14, 11, 418 }, - { 16, 11, 15 }, { 16, 11, 34 }, { 18, 11, 3 }, { 19, 11, 3 }, - { 19, 11, 7 }, { 20, 11, 4 }, { 21, 11, 21 }, { 4, 0, 176 }, - { 5, 0, 636 }, { 5, 0, 998 }, { 7, 0, 9 }, { 7, 0, 1508 }, - { 8, 0, 26 }, { 9, 0, 317 }, { 9, 0, 358 }, { 10, 0, 210 }, - { 10, 0, 292 }, { 10, 0, 533 }, { 11, 0, 555 }, { 12, 0, 526 }, - { 12, 0, 607 }, { 13, 0, 263 }, { 13, 0, 459 }, { 14, 0, 271 }, - { 6, 0, 256 }, { 8, 0, 265 }, { 4, 10, 38 }, { 7, 10, 307 }, - { 7, 10, 999 }, { 7, 10, 1481 }, { 7, 10, 1732 }, { 7, 10, 1738 }, - { 9, 10, 414 }, { 11, 10, 316 }, { 12, 10, 52 }, { 13, 10, 420 }, - { 19, 10, 100 }, { 7, 10, 1296 }, { 4, 11, 611 }, { 5, 11, 606 }, - { 4, 0, 643 }, { 14, 11, 21 }, { 5, 11, 715 }, { 5, 10, 723 }, - { 6, 0, 610 }, { 7, 11, 597 }, { 10, 0, 127 }, { 13, 0, 27 }, - { 6, 0, 1995 }, { 6, 0, 2001 }, { 8, 0, 119 }, { 8, 0, 973 }, - { 4, 11, 149 }, { 10, 11, 368 }, { 12, 0, 522 }, { 4, 11, 154 }, - { 5, 10, 109 }, { 6, 10, 1784 }, { 7, 11, 1134 }, { 7, 10, 1895 }, - { 8, 11, 105 }, { 12, 10, 296 }, { 12, 10, 302 }, { 4, 11, 31 }, - { 6, 11, 429 }, { 7, 11, 962 }, { 9, 11, 458 }, { 11, 11, 691 }, - { 10, 0, 553 }, { 11, 0, 876 }, { 13, 0, 193 }, { 13, 0, 423 }, - { 14, 0, 166 }, { 19, 0, 84 }, { 4, 11, 312 }, { 5, 10, 216 }, - { 7, 10, 1879 }, { 9, 10, 141 }, { 9, 10, 270 }, { 9, 10, 679 }, - { 10, 10, 159 }, { 11, 10, 197 }, { 12, 10, 538 }, { 12, 10, 559 }, - { 14, 10, 144 }, { 14, 10, 167 }, { 15, 10, 67 }, { 6, 0, 1582 }, - { 7, 0, 1578 }, { 7, 11, 1578 }, { 9, 10, 81 }, { 4, 11, 236 }, - { 6, 10, 391 }, { 6, 0, 795 }, { 7, 10, 322 }, { 8, 10, 249 }, - { 5, 11, 836 }, { 5, 11, 857 }, { 6, 11, 1680 }, { 7, 11, 59 }, - { 19, 11, 53 }, { 7, 0, 432 }, { 10, 11, 68 }, { 11, 11, 494 }, - { 4, 11, 81 }, { 11, 11, 867 }, { 7, 0, 126 }, { 8, 0, 84 }, - { 14, 11, 280 }, { 5, 11, 282 }, { 8, 11, 650 }, { 9, 11, 295 }, - { 9, 11, 907 }, { 10, 11, 443 }, { 8, 0, 790 }, { 5, 10, 632 }, - { 10, 10, 526 }, { 6, 0, 64 }, { 12, 0, 377 }, { 13, 0, 309 }, - { 14, 0, 141 }, { 14, 0, 429 }, { 14, 11, 141 }, { 14, 11, 429 }, - { 6, 0, 1529 }, { 6, 0, 321 }, { 7, 0, 1857 }, { 9, 0, 530 }, - { 19, 0, 99 }, { 7, 10, 948 }, { 7, 10, 1042 }, { 8, 10, 235 }, - { 8, 10, 461 }, { 9, 10, 453 }, { 10, 10, 354 }, { 17, 10, 77 }, - { 7, 0, 1104 }, { 11, 0, 269 }, { 11, 0, 539 }, { 11, 0, 627 }, - { 11, 0, 706 }, { 11, 0, 975 }, { 12, 0, 248 }, { 12, 0, 434 }, - { 12, 0, 600 }, { 12, 0, 622 }, { 13, 0, 297 }, { 13, 0, 485 }, - { 14, 0, 69 }, { 14, 0, 409 }, { 15, 0, 108 }, { 4, 10, 362 }, - { 7, 10, 52 }, { 7, 10, 303 }, { 10, 11, 70 }, { 12, 11, 26 }, - { 14, 11, 17 }, { 14, 11, 178 }, { 15, 11, 34 }, { 21, 11, 12 }, - { 11, 0, 977 }, { 13, 0, 507 }, { 9, 0, 34 }, { 11, 0, 484 }, - { 5, 10, 196 }, { 6, 10, 486 }, { 7, 10, 212 }, { 8, 10, 309 }, - { 8, 10, 346 }, { 6, 0, 1700 }, { 7, 0, 26 }, { 7, 0, 293 }, - { 7, 0, 382 }, { 7, 0, 1026 }, { 7, 0, 1087 }, { 7, 0, 2027 }, - { 8, 0, 24 }, { 8, 0, 114 }, { 8, 0, 252 }, { 8, 0, 727 }, - { 8, 0, 729 }, { 9, 0, 30 }, { 9, 0, 199 }, { 9, 0, 231 }, - { 9, 0, 251 }, { 9, 0, 334 }, { 9, 0, 361 }, { 9, 0, 712 }, - { 10, 0, 55 }, { 10, 0, 60 }, { 10, 0, 232 }, { 10, 0, 332 }, - { 10, 0, 384 }, { 10, 0, 396 }, { 10, 0, 504 }, { 10, 0, 542 }, - { 10, 0, 652 }, { 11, 0, 20 }, { 11, 0, 48 }, { 11, 0, 207 }, - { 11, 0, 291 }, { 11, 0, 298 }, { 11, 0, 342 }, { 11, 0, 365 }, - { 11, 0, 394 }, { 11, 0, 620 }, { 11, 0, 705 }, { 11, 0, 1017 }, - { 12, 0, 123 }, { 12, 0, 340 }, { 12, 0, 406 }, { 12, 0, 643 }, - { 13, 0, 61 }, { 13, 0, 269 }, { 13, 0, 311 }, { 13, 0, 319 }, - { 13, 0, 486 }, { 14, 0, 234 }, { 15, 0, 62 }, { 15, 0, 85 }, - { 16, 0, 71 }, { 18, 0, 119 }, { 20, 0, 105 }, { 7, 10, 1912 }, - { 4, 11, 71 }, { 5, 11, 376 }, { 7, 11, 119 }, { 10, 11, 665 }, - { 10, 0, 918 }, { 10, 0, 926 }, { 4, 10, 686 }, { 8, 11, 55 }, - { 10, 10, 625 }, { 8, 10, 706 }, { 4, 11, 479 }, { 4, 10, 30 }, - { 5, 10, 43 }, { 6, 0, 379 }, { 7, 0, 270 }, { 8, 0, 176 }, - { 8, 0, 183 }, { 9, 0, 432 }, { 9, 0, 661 }, { 12, 0, 247 }, - { 12, 0, 617 }, { 18, 0, 125 }, { 7, 11, 607 }, { 8, 11, 99 }, - { 24, 11, 4 }, { 5, 0, 792 }, { 5, 0, 900 }, { 4, 11, 612 }, - { 5, 11, 561 }, { 4, 11, 41 }, { 4, 10, 220 }, { 5, 11, 74 }, - { 7, 10, 1535 }, { 7, 11, 1627 }, { 11, 11, 871 }, { 12, 11, 619 }, - { 7, 0, 1920 }, { 7, 11, 94 }, { 11, 11, 329 }, { 11, 11, 965 }, - { 12, 11, 241 }, { 14, 11, 354 }, { 15, 11, 22 }, { 20, 11, 63 }, - { 9, 11, 209 }, { 9, 11, 300 }, { 6, 0, 771 }, { 7, 0, 1979 }, - { 4, 0, 901 }, { 5, 0, 776 }, { 14, 0, 254 }, { 5, 11, 98 }, - { 9, 11, 16 }, { 13, 11, 386 }, { 5, 11, 984 }, { 4, 11, 182 }, - { 6, 11, 205 }, { 7, 11, 220 }, { 7, 10, 1725 }, { 7, 10, 1774 }, - { 10, 10, 393 }, { 5, 10, 263 }, { 6, 10, 414 }, { 4, 11, 42 }, - { 9, 11, 205 }, { 9, 11, 786 }, { 10, 11, 659 }, { 14, 0, 140 }, - { 20, 0, 41 }, { 8, 0, 440 }, { 10, 0, 359 }, { 6, 10, 178 }, - { 6, 11, 289 }, { 6, 10, 1750 }, { 7, 11, 1670 }, { 9, 10, 690 }, - { 10, 10, 155 }, { 10, 10, 373 }, { 11, 10, 698 }, { 12, 11, 57 }, - { 13, 10, 155 }, { 20, 10, 93 }, { 23, 11, 4 }, { 4, 0, 37 }, - { 5, 0, 334 }, { 7, 0, 1253 }, { 23, 11, 25 }, { 4, 0, 508 }, - { 4, 11, 635 }, { 5, 10, 97 }, { 9, 10, 393 }, { 11, 11, 533 }, - { 4, 0, 640 }, { 5, 0, 513 }, { 6, 10, 1639 }, { 4, 11, 371 }, - { 4, 11, 272 }, { 7, 11, 836 }, { 7, 11, 1651 }, { 17, 11, 89 }, - { 5, 11, 825 }, { 6, 11, 444 }, { 6, 11, 1640 }, { 8, 11, 308 }, - { 4, 10, 191 }, { 7, 10, 934 }, { 8, 10, 647 }, { 17, 10, 97 }, - { 12, 0, 246 }, { 15, 0, 162 }, { 19, 0, 64 }, { 20, 0, 8 }, - { 20, 0, 95 }, { 22, 0, 24 }, { 24, 0, 17 }, { 4, 0, 533 }, - { 5, 10, 165 }, { 9, 10, 346 }, { 10, 10, 655 }, { 5, 11, 737 }, - { 11, 10, 885 }, { 5, 10, 877 }, { 8, 10, 128 }, { 11, 10, 179 }, - { 9, 11, 307 }, { 12, 0, 752 }, { 5, 0, 920 }, { 7, 0, 1048 }, - { 5, 0, 153 }, { 6, 0, 580 }, { 6, 10, 1663 }, { 7, 10, 132 }, - { 7, 10, 1154 }, { 7, 10, 1415 }, { 7, 10, 1507 }, { 12, 10, 493 }, - { 15, 10, 105 }, { 23, 10, 15 }, { 5, 10, 459 }, { 7, 10, 1073 }, - { 8, 10, 241 }, { 8, 10, 334 }, { 10, 0, 391 }, { 7, 0, 1952 }, - { 5, 11, 525 }, { 8, 11, 641 }, { 11, 11, 388 }, { 12, 11, 580 }, - { 14, 0, 126 }, { 6, 0, 640 }, { 4, 0, 483 }, { 7, 0, 1616 }, - { 9, 0, 69 }, { 6, 10, 324 }, { 6, 10, 520 }, { 7, 10, 338 }, - { 7, 10, 1729 }, { 8, 10, 228 }, { 11, 10, 750 }, { 5, 11, 493 }, - { 6, 11, 528 }, { 7, 0, 734 }, { 4, 11, 174 }, { 7, 11, 911 }, - { 10, 0, 480 }, { 9, 0, 495 }, { 18, 0, 104 }, { 7, 10, 705 }, - { 9, 0, 472 }, { 4, 10, 73 }, { 6, 10, 612 }, { 7, 10, 927 }, - { 7, 10, 1330 }, { 7, 10, 1822 }, { 8, 10, 217 }, { 9, 10, 765 }, - { 9, 10, 766 }, { 10, 10, 408 }, { 11, 10, 51 }, { 11, 10, 793 }, - { 12, 10, 266 }, { 15, 10, 158 }, { 20, 10, 89 }, { 22, 10, 32 }, - { 7, 11, 548 }, { 9, 11, 58 }, { 4, 11, 32 }, { 5, 11, 215 }, - { 6, 11, 269 }, { 7, 11, 1782 }, { 7, 11, 1892 }, { 10, 11, 16 }, - { 11, 11, 822 }, { 11, 11, 954 }, { 13, 11, 481 }, { 4, 0, 874 }, - { 9, 0, 229 }, { 5, 10, 389 }, { 8, 10, 636 }, { 7, 11, 1749 }, - { 8, 11, 477 }, { 6, 0, 948 }, { 5, 11, 308 }, { 7, 11, 1088 }, - { 4, 0, 748 }, { 11, 0, 1009 }, { 8, 10, 21 }, { 6, 0, 555 }, - { 7, 0, 485 }, { 5, 11, 126 }, { 8, 11, 297 }, { 9, 11, 366 }, - { 9, 11, 445 }, { 12, 11, 53 }, { 12, 11, 374 }, { 13, 11, 492 }, - { 7, 11, 1551 }, { 11, 11, 361 }, { 8, 0, 193 }, { 8, 0, 472 }, - { 8, 0, 653 }, { 13, 0, 93 }, { 19, 0, 14 }, { 4, 0, 984 }, - { 4, 11, 175 }, { 5, 0, 172 }, { 6, 0, 1971 }, { 4, 11, 685 }, - { 21, 11, 8 }, { 5, 11, 797 }, { 13, 0, 83 }, { 5, 10, 189 }, - { 7, 10, 442 }, { 7, 10, 443 }, { 8, 10, 281 }, { 12, 10, 174 }, - { 13, 10, 261 }, { 6, 0, 1568 }, { 5, 11, 565 }, { 11, 0, 384 }, - { 5, 0, 260 }, { 7, 0, 758 }, { 7, 0, 880 }, { 7, 0, 1359 }, - { 9, 0, 164 }, { 9, 0, 167 }, { 10, 0, 156 }, { 10, 0, 588 }, - { 12, 0, 101 }, { 14, 0, 48 }, { 15, 0, 70 }, { 6, 10, 2 }, - { 7, 10, 1262 }, { 7, 10, 1737 }, { 8, 10, 22 }, { 8, 10, 270 }, - { 8, 10, 612 }, { 9, 10, 312 }, { 9, 10, 436 }, { 10, 10, 311 }, - { 10, 10, 623 }, { 11, 10, 72 }, { 11, 10, 330 }, { 11, 10, 455 }, - { 12, 10, 321 }, { 12, 10, 504 }, { 12, 10, 530 }, { 12, 10, 543 }, - { 13, 10, 17 }, { 13, 10, 156 }, { 13, 10, 334 }, { 17, 10, 60 }, - { 20, 10, 64 }, { 4, 11, 252 }, { 7, 11, 1068 }, { 10, 11, 434 }, - { 11, 11, 228 }, { 11, 11, 426 }, { 13, 11, 231 }, { 18, 11, 106 }, - { 20, 11, 87 }, { 7, 10, 354 }, { 10, 10, 410 }, { 11, 10, 815 }, - { 6, 0, 367 }, { 7, 10, 670 }, { 7, 10, 1327 }, { 8, 10, 411 }, - { 8, 10, 435 }, { 9, 10, 653 }, { 9, 10, 740 }, { 10, 10, 385 }, - { 11, 10, 222 }, { 11, 10, 324 }, { 11, 10, 829 }, { 12, 10, 611 }, - { 7, 0, 1174 }, { 6, 10, 166 }, { 7, 10, 374 }, { 18, 0, 121 }, - { 4, 0, 828 }, { 5, 11, 231 }, { 10, 11, 509 }, { 7, 11, 601 }, - { 9, 11, 277 }, { 9, 11, 674 }, { 10, 11, 178 }, { 10, 11, 257 }, - { 10, 11, 418 }, { 11, 11, 531 }, { 11, 11, 544 }, { 11, 11, 585 }, - { 12, 11, 113 }, { 12, 11, 475 }, { 13, 11, 99 }, { 14, 11, 428 }, - { 6, 0, 1541 }, { 7, 11, 1779 }, { 5, 0, 343 }, { 6, 10, 398 }, - { 7, 10, 50 }, { 7, 11, 1683 }, { 4, 0, 440 }, { 7, 0, 57 }, - { 8, 0, 167 }, { 8, 0, 375 }, { 9, 0, 82 }, { 9, 0, 561 }, - { 9, 0, 744 }, { 10, 0, 620 }, { 9, 11, 744 }, { 6, 0, 926 }, - { 6, 10, 517 }, { 7, 10, 1159 }, { 10, 10, 621 }, { 11, 10, 192 }, - { 9, 0, 827 }, { 8, 0, 194 }, { 8, 0, 756 }, { 10, 10, 223 }, - { 11, 10, 645 }, { 7, 10, 64 }, { 8, 10, 245 }, { 4, 11, 399 }, - { 5, 11, 119 }, { 5, 11, 494 }, { 7, 11, 751 }, { 9, 11, 556 }, - { 4, 0, 808 }, { 7, 0, 22 }, { 7, 10, 1763 }, { 12, 10, 310 }, - { 5, 0, 639 }, { 7, 0, 1249 }, { 11, 0, 896 }, { 6, 11, 584 }, - { 6, 0, 1614 }, { 7, 0, 860 }, { 7, 11, 1121 }, { 5, 10, 129 }, - { 6, 10, 61 }, { 7, 10, 947 }, { 4, 0, 102 }, { 7, 0, 815 }, - { 7, 0, 1699 }, { 11, 0, 964 }, { 13, 10, 505 }, { 13, 10, 506 }, - { 11, 10, 1000 }, { 4, 11, 679 }, { 4, 0, 899 }, { 4, 0, 569 }, - { 5, 11, 694 }, { 9, 11, 714 }, { 8, 0, 795 }, { 6, 0, 2045 }, - { 11, 11, 7 }, { 6, 0, 52 }, { 9, 0, 104 }, { 9, 0, 559 }, - { 12, 0, 308 }, { 19, 0, 87 }, { 4, 0, 301 }, { 4, 0, 604 }, - { 5, 10, 637 }, { 8, 0, 779 }, { 5, 11, 143 }, { 5, 11, 769 }, - { 6, 11, 1760 }, { 7, 11, 682 }, { 7, 11, 1992 }, { 8, 11, 736 }, - { 9, 10, 590 }, { 19, 0, 32 }, { 9, 11, 527 }, { 5, 10, 280 }, - { 7, 10, 1226 }, { 6, 0, 494 }, { 6, 0, 677 }, { 6, 0, 682 }, - { 6, 0, 1044 }, { 5, 10, 281 }, { 7, 10, 1064 }, { 7, 0, 508 }, - { 5, 11, 860 }, { 6, 11, 422 }, { 7, 11, 0 }, { 7, 11, 1544 }, - { 9, 11, 577 }, { 11, 11, 990 }, { 12, 11, 141 }, { 12, 11, 453 }, - { 13, 11, 47 }, { 13, 11, 266 }, { 6, 0, 1014 }, { 5, 11, 515 }, - { 9, 11, 131 }, { 6, 0, 957 }, { 4, 11, 646 }, { 6, 0, 310 }, - { 7, 0, 1849 }, { 8, 0, 72 }, { 8, 0, 272 }, { 8, 0, 431 }, - { 9, 0, 12 }, { 9, 0, 376 }, { 10, 0, 563 }, { 10, 0, 630 }, - { 10, 0, 796 }, { 10, 0, 810 }, { 11, 0, 367 }, { 11, 0, 599 }, - { 11, 0, 686 }, { 12, 0, 672 }, { 7, 0, 570 }, { 4, 11, 396 }, - { 7, 10, 120 }, { 7, 11, 728 }, { 8, 10, 489 }, { 9, 11, 117 }, - { 9, 10, 319 }, { 10, 10, 820 }, { 11, 10, 1004 }, { 12, 10, 379 }, - { 12, 10, 679 }, { 13, 10, 117 }, { 13, 11, 202 }, { 13, 10, 412 }, - { 14, 10, 25 }, { 15, 10, 52 }, { 15, 10, 161 }, { 16, 10, 47 }, - { 20, 11, 51 }, { 21, 10, 2 }, { 6, 11, 121 }, { 6, 11, 124 }, - { 6, 11, 357 }, { 7, 11, 1138 }, { 7, 11, 1295 }, { 8, 11, 162 }, - { 11, 11, 655 }, { 8, 0, 449 }, { 4, 10, 937 }, { 5, 10, 801 }, - { 8, 11, 449 }, { 11, 11, 958 }, { 6, 0, 181 }, { 7, 0, 537 }, - { 8, 0, 64 }, { 9, 0, 127 }, { 10, 0, 496 }, { 12, 0, 510 }, - { 13, 0, 384 }, { 10, 11, 253 }, { 4, 0, 244 }, { 7, 0, 233 }, - { 5, 11, 237 }, { 4, 10, 365 }, { 6, 0, 1650 }, { 10, 0, 702 }, - { 11, 0, 245 }, { 5, 10, 7 }, { 11, 10, 774 }, { 13, 0, 463 }, - { 20, 0, 49 }, { 13, 11, 463 }, { 20, 11, 49 }, { 4, 10, 734 }, - { 5, 10, 662 }, { 6, 10, 430 }, { 4, 10, 746 }, { 7, 10, 1090 }, - { 5, 10, 360 }, { 8, 10, 237 }, { 9, 0, 338 }, { 15, 11, 10 }, - { 7, 11, 571 }, { 10, 11, 366 }, { 6, 0, 1279 }, { 9, 11, 513 }, - { 10, 11, 22 }, { 10, 11, 39 }, { 12, 11, 122 }, { 12, 11, 187 }, - { 5, 0, 896 }, { 18, 0, 178 }, { 6, 0, 695 }, { 9, 0, 808 }, - { 6, 11, 587 }, { 7, 11, 107 }, { 7, 11, 838 }, { 8, 11, 550 }, - { 10, 11, 401 }, { 7, 0, 1117 }, { 8, 0, 539 }, { 4, 10, 277 }, - { 5, 10, 608 }, { 6, 10, 493 }, { 7, 10, 457 }, { 12, 10, 384 }, - { 5, 11, 768 }, { 12, 0, 257 }, { 7, 10, 27 }, { 7, 10, 316 }, - { 12, 0, 1003 }, { 4, 0, 207 }, { 5, 0, 586 }, { 5, 0, 676 }, - { 6, 0, 448 }, { 8, 0, 244 }, { 11, 0, 1 }, { 13, 0, 3 }, - { 16, 0, 54 }, { 17, 0, 4 }, { 18, 0, 13 }, { 5, 10, 552 }, - { 4, 10, 401 }, { 9, 10, 264 }, { 5, 0, 516 }, { 7, 0, 1883 }, - { 7, 11, 1883 }, { 12, 0, 960 }, { 4, 11, 894 }, { 5, 0, 4 }, - { 5, 0, 810 }, { 6, 0, 13 }, { 6, 0, 538 }, { 6, 0, 1690 }, - { 6, 0, 1726 }, { 7, 0, 499 }, { 7, 0, 1819 }, { 8, 0, 148 }, - { 8, 0, 696 }, { 8, 0, 791 }, { 12, 0, 125 }, { 15, 0, 9 }, - { 7, 0, 1268 }, { 11, 0, 30 }, { 14, 0, 315 }, { 9, 10, 543 }, - { 10, 10, 524 }, { 12, 10, 524 }, { 16, 10, 18 }, { 20, 10, 26 }, - { 20, 10, 65 }, { 6, 0, 748 }, { 4, 10, 205 }, { 5, 10, 623 }, - { 7, 10, 104 }, { 8, 10, 519 }, { 11, 0, 542 }, { 11, 0, 852 }, - { 12, 0, 6 }, { 4, 0, 848 }, { 7, 0, 1385 }, { 11, 0, 582 }, - { 11, 0, 650 }, { 11, 0, 901 }, { 11, 0, 949 }, { 12, 0, 232 }, - { 12, 0, 236 }, { 13, 0, 413 }, { 13, 0, 501 }, { 18, 0, 116 }, - { 7, 10, 579 }, { 9, 10, 41 }, { 9, 10, 244 }, { 9, 10, 669 }, - { 10, 10, 5 }, { 11, 10, 861 }, { 11, 10, 951 }, { 11, 10, 980 }, - { 4, 0, 945 }, { 6, 0, 1811 }, { 6, 0, 1845 }, { 6, 0, 1853 }, - { 6, 0, 1858 }, { 8, 0, 862 }, { 12, 0, 782 }, { 12, 0, 788 }, - { 18, 0, 160 }, { 20, 0, 117 }, { 4, 10, 717 }, { 4, 0, 925 }, - { 5, 0, 803 }, { 8, 0, 698 }, { 10, 0, 828 }, { 6, 0, 1416 }, - { 4, 0, 610 }, { 11, 0, 992 }, { 6, 0, 878 }, { 6, 0, 1477 }, - { 7, 0, 1847 }, { 10, 11, 531 }, { 9, 11, 539 }, { 6, 11, 272 }, - { 5, 0, 383 }, { 6, 0, 1404 }, { 4, 10, 489 }, { 4, 11, 9 }, - { 5, 11, 128 }, { 7, 11, 368 }, { 11, 11, 480 }, { 20, 11, 3 }, - { 8, 0, 986 }, { 9, 0, 660 }, { 10, 0, 347 }, { 7, 10, 892 }, - { 8, 11, 682 }, { 7, 0, 572 }, { 9, 0, 592 }, { 11, 0, 680 }, - { 12, 0, 356 }, { 12, 0, 550 }, { 7, 0, 1411 }, { 10, 11, 527 }, - { 4, 11, 2 }, { 7, 11, 545 }, { 7, 11, 894 }, { 9, 10, 473 }, - { 11, 0, 64 }, { 7, 11, 481 }, { 7, 10, 819 }, { 9, 10, 26 }, - { 9, 10, 392 }, { 9, 11, 792 }, { 10, 10, 152 }, { 10, 10, 226 }, - { 12, 10, 276 }, { 12, 10, 426 }, { 12, 10, 589 }, { 13, 10, 460 }, - { 15, 10, 97 }, { 19, 10, 48 }, { 20, 10, 104 }, { 7, 10, 51 }, - { 8, 11, 445 }, { 8, 11, 646 }, { 7, 0, 606 }, { 4, 10, 674 }, - { 6, 0, 1829 }, { 6, 0, 1830 }, { 4, 10, 770 }, { 5, 10, 79 }, - { 7, 10, 1027 }, { 7, 10, 1477 }, { 11, 10, 52 }, { 5, 11, 530 }, - { 14, 11, 113 }, { 6, 10, 1666 }, { 7, 0, 748 }, { 11, 0, 700 }, - { 6, 10, 195 }, { 5, 10, 789 }, { 9, 0, 87 }, { 10, 0, 365 }, - { 4, 10, 251 }, { 4, 10, 688 }, { 7, 10, 513 }, { 7, 10, 1284 }, - { 8, 11, 111 }, { 5, 0, 127 }, { 6, 0, 198 }, { 12, 0, 83 }, - { 5, 11, 556 }, { 5, 10, 889 }, { 4, 10, 160 }, { 5, 10, 330 }, - { 7, 10, 1434 }, { 8, 10, 174 }, { 5, 0, 276 }, { 6, 0, 55 }, - { 7, 0, 1369 }, { 10, 0, 864 }, { 8, 11, 16 }, { 12, 11, 568 }, - { 6, 0, 1752 }, { 8, 0, 726 }, { 7, 0, 1066 }, { 5, 0, 764 }, - { 6, 11, 186 }, { 9, 11, 426 }, { 11, 0, 683 }, { 11, 11, 683 }, - { 6, 0, 309 }, { 7, 0, 331 }, { 10, 0, 550 }, { 5, 10, 374 }, - { 6, 0, 1212 }, { 6, 0, 1852 }, { 7, 0, 1062 }, { 8, 0, 874 }, - { 8, 0, 882 }, { 10, 0, 936 }, { 4, 11, 585 }, { 6, 0, 1364 }, - { 7, 0, 986 }, { 5, 10, 731 }, { 6, 0, 723 }, { 6, 0, 1408 }, - { 10, 0, 381 }, { 7, 0, 1573 }, { 6, 0, 1025 }, { 4, 10, 626 }, - { 5, 10, 642 }, { 6, 10, 425 }, { 10, 10, 202 }, { 11, 10, 141 }, - { 4, 11, 93 }, { 5, 11, 252 }, { 6, 11, 229 }, { 7, 11, 291 }, - { 9, 11, 550 }, { 11, 11, 644 }, { 9, 11, 749 }, { 9, 11, 162 }, - { 4, 11, 381 }, { 7, 0, 1559 }, { 6, 0, 194 }, { 7, 0, 133 }, - { 10, 0, 493 }, { 10, 0, 570 }, { 11, 0, 664 }, { 5, 0, 24 }, - { 5, 0, 569 }, { 6, 0, 3 }, { 6, 0, 119 }, { 6, 0, 143 }, - { 6, 0, 440 }, { 7, 0, 295 }, { 7, 0, 599 }, { 7, 0, 1686 }, - { 7, 0, 1854 }, { 8, 0, 424 }, { 9, 0, 43 }, { 9, 0, 584 }, - { 9, 0, 760 }, { 10, 0, 148 }, { 10, 0, 328 }, { 11, 0, 159 }, - { 11, 0, 253 }, { 11, 0, 506 }, { 12, 0, 487 }, { 12, 0, 531 }, - { 6, 0, 661 }, { 6, 0, 1517 }, { 8, 10, 835 }, { 23, 10, 17 }, - { 5, 0, 14 }, { 5, 0, 892 }, { 6, 0, 283 }, { 7, 0, 234 }, - { 8, 0, 537 }, { 11, 0, 541 }, { 4, 0, 126 }, { 8, 0, 635 }, - { 19, 0, 34 }, { 4, 0, 316 }, { 4, 0, 495 }, { 7, 0, 1561 }, - { 4, 11, 187 }, { 5, 11, 184 }, { 5, 11, 690 }, { 7, 11, 1869 }, - { 10, 11, 756 }, { 11, 11, 783 }, { 4, 0, 998 }, { 9, 0, 861 }, - { 8, 0, 1009 }, { 11, 11, 292 }, { 5, 11, 21 }, { 6, 11, 77 }, - { 6, 11, 157 }, { 7, 11, 974 }, { 7, 11, 1301 }, { 7, 11, 1339 }, - { 7, 11, 1490 }, { 7, 11, 1873 }, { 9, 11, 628 }, { 7, 11, 1283 }, - { 9, 11, 227 }, { 9, 11, 499 }, { 10, 11, 341 }, { 11, 11, 325 }, - { 11, 11, 408 }, { 14, 11, 180 }, { 15, 11, 144 }, { 18, 11, 47 }, - { 19, 11, 49 }, { 4, 0, 64 }, { 5, 0, 352 }, { 5, 0, 720 }, - { 6, 0, 368 }, { 11, 0, 359 }, { 5, 10, 384 }, { 8, 10, 455 }, - { 12, 10, 48 }, { 5, 10, 264 }, { 6, 10, 184 }, { 7, 0, 1577 }, - { 10, 0, 304 }, { 10, 0, 549 }, { 12, 0, 365 }, { 13, 0, 220 }, - { 13, 0, 240 }, { 14, 0, 33 }, { 6, 0, 1107 }, { 6, 0, 929 }, - { 7, 0, 1142 }, { 6, 0, 175 }, { 9, 0, 289 }, { 5, 0, 432 }, - { 5, 0, 913 }, { 6, 0, 279 }, { 7, 0, 219 }, { 5, 10, 633 }, - { 7, 10, 1323 }, { 7, 0, 785 }, { 7, 10, 359 }, { 8, 10, 243 }, - { 12, 10, 175 }, { 11, 0, 595 }, { 4, 10, 105 }, { 8, 11, 398 }, - { 9, 11, 681 }, { 11, 11, 632 }, { 12, 0, 80 }, { 5, 0, 931 }, - { 6, 0, 1698 }, { 14, 11, 241 }, { 6, 11, 20 }, { 6, 0, 1323 }, - { 11, 0, 526 }, { 11, 0, 939 }, { 13, 0, 290 }, { 5, 0, 774 }, - { 6, 0, 780 }, { 6, 0, 1637 }, { 6, 0, 1686 }, { 6, 0, 1751 }, - { 8, 0, 559 }, { 13, 0, 109 }, { 13, 0, 127 }, { 7, 0, 1167 }, - { 11, 0, 934 }, { 13, 0, 391 }, { 17, 0, 76 }, { 7, 11, 709 }, - { 7, 0, 963 }, { 6, 0, 260 }, { 7, 0, 1484 }, { 6, 0, 573 }, - { 4, 10, 758 }, { 11, 11, 941 }, { 7, 10, 1649 }, { 17, 11, 36 }, - { 4, 0, 292 }, { 9, 0, 580 }, { 4, 0, 736 }, { 5, 0, 871 }, - { 6, 0, 1689 }, { 7, 0, 1944 }, { 7, 11, 945 }, { 11, 11, 713 }, - { 11, 11, 744 }, { 6, 0, 1164 }, { 7, 11, 937 }, { 6, 0, 1922 }, - { 9, 0, 982 }, { 15, 0, 173 }, { 15, 0, 178 }, { 15, 0, 200 }, - { 18, 0, 189 }, { 18, 0, 207 }, { 21, 0, 47 }, { 7, 11, 1652 }, - { 7, 0, 1695 }, { 11, 10, 128 }, { 6, 0, 63 }, { 7, 0, 920 }, - { 5, 0, 793 }, { 15, 11, 134 }, { 5, 10, 918 }, { 5, 0, 67 }, - { 6, 0, 62 }, { 6, 0, 374 }, { 7, 0, 1391 }, { 9, 0, 790 }, - { 12, 0, 47 }, { 4, 11, 579 }, { 5, 11, 226 }, { 5, 11, 323 }, - { 7, 11, 960 }, { 10, 11, 784 }, { 13, 11, 191 }, { 4, 0, 391 }, - { 7, 0, 1169 }, { 9, 0, 443 }, { 13, 11, 232 }, { 18, 11, 35 }, - { 4, 10, 340 }, { 4, 0, 271 }, { 9, 11, 313 }, { 5, 11, 973 }, - { 9, 11, 659 }, { 6, 0, 1140 }, { 6, 11, 135 }, { 7, 11, 1176 }, - { 4, 0, 253 }, { 5, 0, 544 }, { 7, 0, 300 }, { 9, 0, 340 }, - { 7, 0, 897 }, { 5, 10, 985 }, { 7, 10, 509 }, { 17, 10, 96 }, - { 10, 11, 735 }, { 7, 10, 1919 }, { 10, 0, 890 }, { 5, 0, 818 }, - { 6, 0, 1122 }, { 5, 0, 53 }, { 5, 0, 541 }, { 6, 0, 94 }, - { 6, 0, 499 }, { 7, 0, 230 }, { 11, 0, 321 }, { 4, 0, 920 }, - { 5, 0, 25 }, { 5, 0, 790 }, { 6, 0, 457 }, { 7, 0, 853 }, - { 8, 0, 788 }, { 14, 11, 31 }, { 4, 10, 247 }, { 7, 11, 314 }, - { 4, 0, 468 }, { 7, 0, 243 }, { 6, 10, 337 }, { 7, 10, 494 }, - { 8, 10, 27 }, { 8, 10, 599 }, { 10, 10, 153 }, { 4, 10, 184 }, - { 5, 10, 390 }, { 7, 10, 618 }, { 7, 10, 1456 }, { 11, 10, 710 }, - { 6, 0, 870 }, { 6, 0, 1238 }, { 6, 0, 1765 }, { 10, 0, 853 }, - { 10, 0, 943 }, { 14, 0, 437 }, { 14, 0, 439 }, { 14, 0, 443 }, - { 14, 0, 446 }, { 14, 0, 452 }, { 14, 0, 469 }, { 14, 0, 471 }, - { 14, 0, 473 }, { 16, 0, 93 }, { 16, 0, 102 }, { 16, 0, 110 }, - { 20, 0, 121 }, { 4, 0, 605 }, { 7, 0, 518 }, { 7, 0, 1282 }, - { 7, 0, 1918 }, { 10, 0, 180 }, { 11, 0, 218 }, { 5, 0, 822 }, - { 4, 0, 634 }, { 11, 0, 916 }, { 14, 0, 419 }, { 6, 11, 281 }, - { 7, 11, 6 }, { 8, 11, 282 }, { 8, 11, 480 }, { 8, 11, 499 }, - { 9, 11, 198 }, { 10, 11, 143 }, { 10, 11, 169 }, { 10, 11, 211 }, - { 10, 11, 417 }, { 10, 11, 574 }, { 11, 11, 147 }, { 11, 11, 395 }, - { 12, 11, 75 }, { 12, 11, 407 }, { 12, 11, 608 }, { 13, 11, 500 }, - { 14, 11, 251 }, { 6, 0, 898 }, { 6, 0, 36 }, { 7, 0, 658 }, - { 8, 0, 454 }, { 22, 11, 48 }, { 5, 11, 674 }, { 7, 11, 1776 }, - { 4, 11, 419 }, { 10, 10, 227 }, { 11, 10, 497 }, { 11, 10, 709 }, - { 12, 10, 415 }, { 6, 10, 360 }, { 7, 10, 1664 }, { 8, 10, 478 }, - { 9, 0, 806 }, { 12, 11, 508 }, { 14, 11, 102 }, { 14, 11, 226 }, - { 16, 11, 57 }, { 7, 11, 1123 }, { 4, 11, 138 }, { 7, 11, 1012 }, - { 7, 11, 1280 }, { 9, 11, 76 }, { 5, 11, 29 }, { 12, 11, 638 }, - { 8, 10, 699 }, { 6, 0, 1326 }, { 4, 0, 104 }, { 7, 11, 735 }, - { 4, 10, 739 }, { 6, 0, 1331 }, { 7, 0, 260 }, { 7, 11, 260 }, - { 7, 11, 1063 }, { 7, 0, 45 }, { 9, 0, 542 }, { 9, 0, 566 }, - { 10, 0, 728 }, { 9, 10, 869 }, { 4, 10, 67 }, { 5, 10, 422 }, - { 7, 10, 1037 }, { 7, 10, 1289 }, { 7, 10, 1555 }, { 9, 10, 741 }, - { 17, 10, 108 }, { 11, 0, 263 }, { 6, 0, 1516 }, { 14, 0, 146 }, - { 15, 0, 42 }, { 16, 0, 23 }, { 17, 0, 86 }, { 18, 0, 17 }, - { 10, 0, 468 }, { 8, 0, 1005 }, { 4, 11, 17 }, { 5, 11, 23 }, - { 7, 11, 995 }, { 11, 11, 383 }, { 11, 11, 437 }, { 12, 11, 460 }, - { 12, 11, 532 }, { 7, 0, 87 }, { 14, 0, 288 }, { 10, 10, 96 }, - { 7, 11, 626 }, { 16, 10, 26 }, { 7, 0, 988 }, { 7, 0, 1939 }, - { 9, 0, 64 }, { 9, 0, 502 }, { 12, 0, 22 }, { 12, 0, 34 }, - { 13, 0, 12 }, { 13, 0, 234 }, { 19, 0, 77 }, { 13, 0, 133 }, - { 8, 10, 203 }, { 11, 10, 823 }, { 11, 10, 846 }, { 12, 10, 482 }, - { 13, 10, 277 }, { 13, 10, 302 }, { 13, 10, 464 }, { 14, 10, 205 }, - { 14, 10, 221 }, { 4, 10, 449 }, { 5, 10, 718 }, { 7, 0, 141 }, - { 6, 0, 1842 }, { 8, 0, 872 }, { 8, 11, 70 }, { 12, 11, 171 }, - { 13, 11, 272 }, { 4, 10, 355 }, { 6, 10, 311 }, { 9, 10, 256 }, - { 10, 10, 404 }, { 4, 0, 619 }, { 9, 0, 261 }, { 10, 11, 233 }, - { 10, 10, 758 }, { 11, 11, 76 }, { 5, 0, 246 }, { 8, 0, 189 }, - { 9, 0, 355 }, { 9, 0, 512 }, { 10, 0, 124 }, { 10, 0, 453 }, - { 11, 0, 143 }, { 11, 0, 416 }, { 11, 0, 859 }, { 13, 0, 341 }, - { 6, 11, 442 }, { 5, 10, 827 }, { 5, 10, 64 }, { 12, 10, 581 }, - { 4, 10, 442 }, { 7, 10, 1047 }, { 7, 10, 1352 }, { 7, 10, 1643 }, - { 6, 11, 1709 }, { 5, 0, 678 }, { 6, 0, 305 }, { 7, 0, 775 }, - { 7, 0, 1065 }, { 5, 10, 977 }, { 11, 11, 69 }, { 12, 11, 105 }, - { 12, 11, 117 }, { 13, 11, 213 }, { 14, 11, 13 }, { 14, 11, 62 }, - { 14, 11, 177 }, { 14, 11, 421 }, { 15, 11, 19 }, { 18, 11, 141 }, - { 9, 11, 309 }, { 5, 0, 35 }, { 7, 0, 862 }, { 7, 0, 1886 }, - { 10, 0, 179 }, { 8, 0, 285 }, { 4, 0, 517 }, { 7, 11, 976 }, - { 9, 11, 146 }, { 10, 11, 206 }, { 10, 11, 596 }, { 13, 11, 218 }, - { 14, 11, 153 }, { 4, 10, 254 }, { 6, 0, 214 }, { 12, 0, 540 }, - { 4, 10, 275 }, { 7, 10, 1219 }, { 12, 10, 376 }, { 8, 0, 667 }, - { 11, 0, 403 }, { 18, 0, 83 }, { 12, 0, 74 }, { 10, 11, 648 }, - { 11, 11, 671 }, { 15, 11, 46 }, { 7, 0, 125 }, { 6, 10, 1753 }, - { 5, 0, 761 }, { 6, 0, 912 }, { 4, 11, 518 }, { 6, 10, 369 }, - { 6, 10, 502 }, { 7, 10, 1036 }, { 7, 11, 1136 }, { 8, 10, 348 }, - { 9, 10, 452 }, { 10, 10, 26 }, { 11, 10, 224 }, { 11, 10, 387 }, - { 11, 10, 772 }, { 12, 10, 95 }, { 12, 10, 629 }, { 13, 10, 195 }, - { 13, 10, 207 }, { 13, 10, 241 }, { 14, 10, 260 }, { 14, 10, 270 }, - { 15, 10, 140 }, { 10, 0, 131 }, { 12, 0, 72 }, { 4, 10, 269 }, - { 5, 10, 480 }, { 7, 10, 532 }, { 7, 10, 1197 }, { 7, 10, 1358 }, - { 8, 10, 291 }, { 11, 10, 349 }, { 14, 10, 396 }, { 8, 11, 689 }, - { 9, 11, 863 }, { 8, 0, 333 }, { 10, 0, 182 }, { 4, 11, 18 }, - { 7, 11, 145 }, { 7, 11, 444 }, { 7, 11, 1278 }, { 8, 11, 49 }, - { 8, 11, 400 }, { 9, 11, 71 }, { 9, 11, 250 }, { 10, 11, 459 }, - { 12, 11, 160 }, { 16, 11, 24 }, { 14, 11, 35 }, { 14, 11, 191 }, - { 7, 11, 1864 }, { 7, 0, 1338 }, { 20, 10, 15 }, { 14, 0, 94 }, - { 15, 0, 65 }, { 16, 0, 4 }, { 16, 0, 77 }, { 16, 0, 80 }, - { 17, 0, 5 }, { 12, 11, 82 }, { 15, 11, 36 }, { 5, 11, 1010 }, - { 5, 0, 449 }, { 5, 0, 646 }, { 7, 0, 86 }, { 8, 0, 103 }, - { 7, 10, 657 }, { 7, 0, 2028 }, { 10, 0, 641 }, { 8, 10, 533 }, - { 6, 0, 1 }, { 11, 11, 970 }, { 5, 11, 87 }, { 7, 11, 313 }, - { 7, 11, 1103 }, { 10, 11, 112 }, { 10, 11, 582 }, { 11, 11, 389 }, - { 11, 11, 813 }, { 12, 11, 385 }, { 13, 11, 286 }, { 14, 11, 124 }, - { 18, 11, 108 }, { 6, 0, 869 }, { 4, 11, 267 }, { 6, 0, 277 }, - { 7, 0, 1274 }, { 7, 0, 1386 }, { 18, 0, 87 }, { 6, 0, 187 }, - { 7, 0, 39 }, { 7, 0, 1203 }, { 8, 0, 380 }, { 14, 0, 117 }, - { 21, 0, 28 }, { 4, 10, 211 }, { 4, 10, 332 }, { 5, 10, 335 }, - { 6, 10, 238 }, { 7, 10, 269 }, { 7, 10, 811 }, { 7, 10, 1797 }, - { 8, 10, 836 }, { 9, 10, 507 }, { 13, 10, 242 }, { 4, 0, 785 }, - { 5, 0, 368 }, { 6, 0, 297 }, { 7, 0, 793 }, { 11, 0, 938 }, - { 7, 0, 464 }, { 8, 0, 558 }, { 11, 0, 105 }, { 12, 0, 231 }, - { 14, 0, 386 }, { 15, 0, 102 }, { 20, 0, 75 }, { 5, 10, 1009 }, - { 8, 0, 877 }, { 12, 0, 731 }, { 11, 11, 289 }, { 10, 11, 249 }, - { 11, 11, 209 }, { 4, 11, 561 }, { 6, 0, 1608 }, { 4, 11, 760 }, - { 6, 0, 1429 }, { 9, 11, 154 }, { 12, 11, 485 }, { 5, 10, 228 }, - { 6, 10, 203 }, { 7, 10, 156 }, { 8, 10, 347 }, { 9, 10, 265 }, - { 7, 0, 1010 }, { 11, 0, 733 }, { 11, 0, 759 }, { 13, 0, 34 }, - { 14, 0, 427 }, { 18, 0, 45 }, { 7, 10, 1131 }, { 7, 10, 1468 }, - { 8, 11, 255 }, { 7, 0, 1656 }, { 9, 0, 369 }, { 10, 0, 338 }, - { 10, 0, 490 }, { 11, 0, 154 }, { 11, 0, 545 }, { 11, 0, 775 }, - { 13, 0, 77 }, { 13, 0, 274 }, { 5, 11, 621 }, { 6, 0, 1038 }, - { 4, 11, 368 }, { 7, 11, 641 }, { 6, 0, 2010 }, { 8, 0, 979 }, - { 8, 0, 985 }, { 10, 0, 951 }, { 10, 0, 1011 }, { 6, 0, 1005 }, - { 19, 0, 121 }, { 5, 10, 291 }, { 5, 10, 318 }, { 7, 10, 765 }, - { 9, 10, 389 }, { 12, 10, 548 }, { 5, 0, 20 }, { 6, 0, 298 }, - { 7, 0, 659 }, { 9, 0, 219 }, { 7, 0, 1440 }, { 11, 0, 854 }, - { 11, 0, 872 }, { 11, 0, 921 }, { 12, 0, 551 }, { 13, 0, 472 }, - { 14, 0, 367 }, { 5, 0, 490 }, { 6, 0, 615 }, { 6, 0, 620 }, - { 7, 0, 683 }, { 6, 0, 1070 }, { 6, 0, 1597 }, { 11, 0, 522 }, - { 4, 0, 439 }, { 8, 0, 669 }, { 6, 0, 766 }, { 6, 0, 1143 }, - { 6, 0, 1245 }, { 10, 10, 525 }, { 11, 10, 82 }, { 9, 11, 92 }, - { 19, 11, 91 }, { 6, 0, 668 }, { 6, 0, 1218 }, { 6, 11, 525 }, - { 9, 11, 876 }, { 12, 11, 284 }, { 4, 0, 233 }, { 8, 0, 547 }, - { 4, 10, 422 }, { 5, 10, 355 }, { 17, 10, 0 }, { 6, 11, 300 }, - { 7, 11, 1515 }, { 4, 0, 482 }, { 9, 10, 905 }, { 4, 0, 886 }, - { 7, 0, 346 }, { 5, 11, 594 }, { 5, 10, 865 }, { 5, 10, 914 }, - { 6, 10, 1625 }, { 7, 0, 334 }, { 5, 0, 795 }, { 6, 0, 1741 }, - { 5, 10, 234 }, { 7, 10, 1383 }, { 6, 11, 1641 }, { 8, 11, 820 }, - { 7, 0, 371 }, { 7, 11, 1313 }, { 10, 11, 660 }, { 7, 10, 1312 }, - { 7, 0, 622 }, { 7, 0, 625 }, { 7, 0, 1750 }, { 7, 0, 339 }, - { 4, 0, 203 }, { 7, 0, 1936 }, { 15, 0, 29 }, { 16, 0, 38 }, - { 15, 11, 29 }, { 16, 11, 38 }, { 5, 0, 338 }, { 7, 0, 1256 }, - { 7, 10, 1493 }, { 10, 0, 130 }, { 6, 10, 421 }, { 7, 10, 61 }, - { 7, 10, 1540 }, { 10, 10, 501 }, { 6, 11, 389 }, { 7, 11, 149 }, - { 9, 11, 142 }, { 10, 11, 94 }, { 9, 10, 341 }, { 11, 0, 678 }, - { 12, 0, 307 }, { 14, 10, 98 }, { 6, 11, 8 }, { 7, 11, 1881 }, - { 8, 11, 91 }, { 7, 0, 2044 }, { 6, 0, 770 }, { 6, 0, 802 }, - { 6, 0, 812 }, { 7, 0, 311 }, { 9, 0, 308 }, { 12, 0, 255 }, - { 6, 10, 102 }, { 7, 10, 72 }, { 15, 10, 142 }, { 19, 10, 67 }, - { 23, 10, 30 }, { 7, 10, 823 }, { 7, 0, 1266 }, { 7, 11, 1746 }, - { 7, 10, 1870 }, { 4, 0, 400 }, { 5, 0, 267 }, { 7, 0, 232 }, - { 7, 11, 24 }, { 11, 11, 542 }, { 11, 11, 852 }, { 7, 11, 1739 }, - { 4, 11, 503 }, { 7, 11, 1661 }, { 5, 11, 130 }, { 7, 11, 1314 }, - { 9, 11, 610 }, { 10, 11, 718 }, { 11, 11, 601 }, { 11, 11, 819 }, - { 11, 11, 946 }, { 12, 11, 536 }, { 10, 11, 149 }, { 11, 11, 280 }, - { 14, 11, 336 }, { 7, 0, 739 }, { 11, 0, 690 }, { 7, 11, 1946 }, - { 8, 10, 48 }, { 8, 10, 88 }, { 8, 10, 582 }, { 8, 10, 681 }, - { 9, 10, 373 }, { 9, 10, 864 }, { 11, 10, 157 }, { 11, 10, 843 }, - { 20, 10, 27 }, { 6, 0, 990 }, { 4, 10, 88 }, { 5, 10, 137 }, - { 5, 10, 174 }, { 5, 10, 777 }, { 6, 10, 1664 }, { 6, 10, 1725 }, - { 7, 10, 77 }, { 7, 10, 426 }, { 7, 10, 1317 }, { 7, 10, 1355 }, - { 8, 10, 126 }, { 8, 10, 563 }, { 9, 10, 523 }, { 9, 10, 750 }, - { 10, 10, 310 }, { 10, 10, 836 }, { 11, 10, 42 }, { 11, 10, 318 }, - { 11, 10, 731 }, { 12, 10, 68 }, { 12, 10, 92 }, { 12, 10, 507 }, - { 12, 10, 692 }, { 13, 10, 81 }, { 13, 10, 238 }, { 13, 10, 374 }, - { 14, 10, 436 }, { 18, 10, 138 }, { 19, 10, 78 }, { 19, 10, 111 }, - { 20, 10, 55 }, { 20, 10, 77 }, { 20, 10, 92 }, { 13, 10, 418 }, - { 7, 0, 1831 }, { 4, 10, 938 }, { 6, 0, 776 }, { 6, 0, 915 }, - { 10, 10, 351 }, { 5, 11, 348 }, { 6, 11, 522 }, { 6, 10, 1668 }, - { 7, 10, 1499 }, { 8, 10, 117 }, { 9, 10, 314 }, { 10, 10, 174 }, - { 7, 10, 707 }, { 4, 0, 613 }, { 5, 10, 403 }, { 4, 11, 392 }, - { 5, 11, 433 }, { 9, 11, 633 }, { 11, 11, 629 }, { 5, 0, 763 }, - { 4, 0, 878 }, { 4, 0, 977 }, { 4, 0, 100 }, { 6, 0, 463 }, - { 4, 10, 44 }, { 5, 10, 311 }, { 7, 10, 639 }, { 7, 10, 762 }, - { 7, 10, 1827 }, { 9, 10, 8 }, { 9, 10, 462 }, { 20, 10, 83 }, - { 6, 11, 234 }, { 4, 10, 346 }, { 7, 10, 115 }, { 9, 10, 180 }, - { 9, 10, 456 }, { 10, 10, 363 }, { 5, 0, 362 }, { 5, 0, 443 }, - { 6, 0, 318 }, { 7, 0, 1019 }, { 11, 0, 623 }, { 5, 0, 463 }, - { 8, 0, 296 }, { 7, 11, 140 }, { 7, 11, 1950 }, { 8, 11, 680 }, - { 11, 11, 817 }, { 19, 11, 88 }, { 7, 11, 1222 }, { 10, 11, 386 }, - { 14, 0, 137 }, { 4, 0, 454 }, { 7, 0, 1914 }, { 6, 11, 5 }, - { 7, 10, 1051 }, { 9, 10, 545 }, { 11, 11, 249 }, { 12, 11, 313 }, - { 16, 11, 66 }, { 17, 11, 26 }, { 7, 0, 1527 }, { 17, 0, 58 }, - { 20, 11, 59 }, { 5, 0, 48 }, { 5, 0, 404 }, { 6, 0, 557 }, - { 7, 0, 458 }, { 8, 0, 597 }, { 10, 0, 455 }, { 10, 0, 606 }, - { 11, 0, 49 }, { 11, 0, 548 }, { 12, 0, 476 }, { 13, 0, 18 }, - { 13, 0, 450 }, { 5, 11, 963 }, { 6, 11, 1773 }, { 5, 0, 729 }, - { 10, 11, 586 }, { 5, 0, 442 }, { 7, 0, 1984 }, { 6, 0, 449 }, - { 16, 0, 40 }, { 4, 0, 853 }, { 7, 11, 180 }, { 8, 11, 509 }, - { 8, 11, 792 }, { 6, 10, 185 }, { 7, 10, 1899 }, { 9, 10, 875 }, - { 11, 10, 673 }, { 6, 11, 524 }, { 12, 0, 227 }, { 4, 10, 327 }, - { 5, 10, 478 }, { 7, 10, 1332 }, { 8, 10, 753 }, { 6, 0, 1491 }, - { 5, 10, 1020 }, { 5, 10, 1022 }, { 4, 10, 103 }, { 5, 10, 401 }, - { 4, 11, 931 }, { 4, 10, 499 }, { 7, 10, 1421 }, { 5, 0, 55 }, - { 7, 0, 376 }, { 12, 0, 161 }, { 5, 0, 450 }, { 6, 0, 1174 }, - { 6, 0, 1562 }, { 10, 0, 62 }, { 13, 0, 400 }, { 7, 11, 1837 }, - { 12, 0, 207 }, { 7, 0, 869 }, { 4, 11, 773 }, { 5, 11, 618 }, - { 9, 11, 756 }, { 4, 10, 96 }, { 4, 0, 213 }, { 7, 0, 223 }, - { 8, 0, 80 }, { 7, 10, 968 }, { 4, 11, 90 }, { 5, 11, 337 }, - { 5, 11, 545 }, { 7, 11, 754 }, { 9, 11, 186 }, { 10, 11, 72 }, - { 10, 11, 782 }, { 11, 11, 513 }, { 11, 11, 577 }, { 11, 11, 610 }, - { 11, 11, 889 }, { 11, 11, 961 }, { 12, 11, 354 }, { 12, 11, 362 }, - { 12, 11, 461 }, { 12, 11, 595 }, { 13, 11, 79 }, { 15, 11, 121 }, - { 7, 0, 381 }, { 7, 0, 806 }, { 7, 0, 820 }, { 8, 0, 354 }, - { 8, 0, 437 }, { 8, 0, 787 }, { 9, 0, 657 }, { 10, 0, 58 }, - { 10, 0, 339 }, { 10, 0, 749 }, { 11, 0, 914 }, { 12, 0, 162 }, - { 13, 0, 75 }, { 14, 0, 106 }, { 14, 0, 198 }, { 14, 0, 320 }, - { 14, 0, 413 }, { 18, 0, 43 }, { 8, 0, 747 }, { 8, 0, 954 }, - { 6, 0, 1073 }, { 7, 0, 556 }, { 7, 11, 151 }, { 9, 11, 329 }, - { 11, 11, 254 }, { 5, 0, 692 }, { 6, 0, 1395 }, { 6, 10, 563 }, - { 9, 10, 224 }, { 6, 0, 191 }, { 4, 0, 804 }, { 9, 11, 187 }, - { 10, 11, 36 }, { 17, 11, 44 }, { 18, 11, 64 }, { 7, 11, 165 }, - { 7, 11, 919 }, { 8, 11, 517 }, { 4, 11, 506 }, { 5, 11, 295 }, - { 7, 11, 1680 }, { 15, 11, 14 }, { 16, 11, 5 }, { 4, 0, 706 }, - { 6, 0, 162 }, { 7, 0, 1960 }, { 8, 0, 831 }, { 7, 11, 1376 }, - { 7, 11, 987 }, { 9, 11, 688 }, { 10, 11, 522 }, { 11, 11, 788 }, - { 12, 11, 566 }, { 22, 0, 35 }, { 10, 0, 426 }, { 7, 0, 1235 }, - { 7, 11, 1741 }, { 7, 11, 389 }, { 7, 11, 700 }, { 7, 11, 940 }, - { 8, 11, 514 }, { 9, 11, 116 }, { 9, 11, 535 }, { 10, 11, 118 }, - { 11, 11, 107 }, { 11, 11, 148 }, { 11, 11, 922 }, { 12, 11, 254 }, - { 12, 11, 421 }, { 14, 11, 238 }, { 6, 0, 1234 }, { 4, 11, 743 }, - { 4, 10, 910 }, { 5, 10, 832 }, { 7, 11, 1335 }, { 13, 0, 96 }, - { 7, 11, 185 }, { 18, 0, 149 }, { 4, 0, 204 }, { 9, 0, 902 }, - { 4, 11, 784 }, { 5, 11, 745 }, { 8, 0, 833 }, { 8, 0, 949 }, - { 7, 0, 366 }, { 9, 0, 287 }, { 12, 0, 199 }, { 12, 0, 556 }, - { 12, 0, 577 }, { 5, 11, 81 }, { 7, 11, 146 }, { 7, 11, 1342 }, - { 7, 11, 1446 }, { 8, 11, 53 }, { 8, 11, 561 }, { 8, 11, 694 }, - { 8, 11, 754 }, { 9, 11, 97 }, { 9, 11, 115 }, { 9, 11, 894 }, - { 10, 11, 462 }, { 10, 11, 813 }, { 11, 11, 230 }, { 11, 11, 657 }, - { 11, 11, 699 }, { 11, 11, 748 }, { 12, 11, 119 }, { 12, 11, 200 }, - { 12, 11, 283 }, { 14, 11, 273 }, { 17, 11, 15 }, { 5, 11, 408 }, - { 9, 11, 747 }, { 9, 11, 498 }, { 12, 11, 181 }, { 6, 0, 2020 }, - { 8, 0, 992 }, { 5, 0, 356 }, { 7, 0, 224 }, { 6, 0, 784 }, - { 7, 0, 630 }, { 9, 0, 567 }, { 11, 0, 150 }, { 11, 0, 444 }, - { 13, 0, 119 }, { 8, 10, 528 }, { 9, 10, 348 }, { 6, 0, 539 }, - { 4, 10, 20 }, { 5, 10, 616 }, { 14, 0, 27 }, { 7, 11, 30 }, - { 8, 11, 86 }, { 8, 11, 315 }, { 8, 11, 700 }, { 9, 11, 576 }, - { 9, 11, 858 }, { 11, 11, 310 }, { 11, 11, 888 }, { 11, 11, 904 }, - { 12, 11, 361 }, { 13, 11, 248 }, { 10, 11, 839 }, { 6, 0, 755 }, - { 6, 0, 1063 }, { 7, 10, 1091 }, { 7, 10, 1765 }, { 6, 11, 428 }, - { 7, 11, 524 }, { 8, 11, 169 }, { 8, 11, 234 }, { 9, 11, 480 }, - { 10, 11, 646 }, { 11, 0, 814 }, { 7, 11, 1462 }, { 11, 11, 659 }, - { 4, 10, 26 }, { 5, 10, 429 }, { 6, 10, 245 }, { 7, 10, 704 }, - { 7, 10, 1379 }, { 7, 10, 1474 }, { 7, 11, 1205 }, { 10, 11, 637 }, - { 11, 11, 803 }, { 4, 10, 621 }, { 8, 0, 987 }, { 4, 11, 266 }, - { 8, 11, 4 }, { 9, 11, 39 }, { 10, 11, 166 }, { 11, 11, 918 }, - { 12, 11, 635 }, { 20, 11, 10 }, { 22, 11, 27 }, { 22, 11, 43 }, - { 4, 0, 235 }, { 7, 0, 255 }, { 4, 0, 194 }, { 5, 0, 584 }, - { 6, 0, 384 }, { 7, 0, 583 }, { 10, 0, 761 }, { 11, 0, 760 }, - { 11, 0, 851 }, { 5, 10, 542 }, { 6, 0, 1086 }, { 5, 10, 868 }, - { 8, 0, 1016 }, { 8, 0, 1018 }, { 7, 0, 1396 }, { 7, 11, 1396 }, - { 8, 10, 433 }, { 7, 10, 1495 }, { 10, 10, 215 }, { 13, 10, 124 }, - { 7, 11, 157 }, { 8, 11, 279 }, { 9, 11, 759 }, { 16, 11, 31 }, - { 16, 11, 39 }, { 16, 11, 75 }, { 18, 11, 24 }, { 20, 11, 42 }, - { 24, 11, 1 }, { 5, 0, 562 }, { 6, 11, 604 }, { 6, 0, 913 }, - { 5, 0, 191 }, { 9, 0, 271 }, { 4, 0, 470 }, { 6, 0, 153 }, - { 7, 0, 1503 }, { 7, 0, 1923 }, { 10, 0, 701 }, { 11, 0, 132 }, - { 11, 0, 227 }, { 11, 0, 320 }, { 11, 0, 436 }, { 11, 0, 525 }, - { 11, 0, 855 }, { 11, 0, 873 }, { 12, 0, 41 }, { 12, 0, 286 }, - { 13, 0, 103 }, { 13, 0, 284 }, { 14, 0, 255 }, { 14, 0, 262 }, - { 15, 0, 117 }, { 15, 0, 127 }, { 7, 0, 475 }, { 12, 0, 45 }, - { 19, 10, 112 }, { 4, 11, 567 }, { 9, 11, 859 }, { 6, 0, 713 }, - { 6, 0, 969 }, { 6, 0, 1290 }, { 6, 0, 1551 }, { 5, 0, 327 }, - { 6, 0, 552 }, { 6, 0, 1292 }, { 7, 0, 1754 }, { 9, 0, 604 }, - { 4, 0, 223 }, { 6, 0, 359 }, { 11, 0, 3 }, { 13, 0, 108 }, - { 14, 0, 89 }, { 16, 0, 22 }, { 5, 11, 762 }, { 7, 11, 1880 }, - { 9, 11, 680 }, { 11, 11, 798 }, { 5, 0, 80 }, { 6, 0, 405 }, - { 7, 0, 403 }, { 7, 0, 1502 }, { 8, 0, 456 }, { 9, 0, 487 }, - { 9, 0, 853 }, { 9, 0, 889 }, { 10, 0, 309 }, { 11, 0, 721 }, - { 11, 0, 994 }, { 12, 0, 430 }, { 13, 0, 165 }, { 5, 11, 298 }, - { 4, 10, 647 }, { 6, 0, 2016 }, { 18, 10, 10 }, { 18, 11, 10 }, - { 4, 0, 453 }, { 5, 0, 887 }, { 6, 0, 535 }, { 8, 0, 6 }, - { 8, 0, 543 }, { 8, 0, 826 }, { 8, 0, 975 }, { 10, 0, 961 }, - { 10, 0, 962 }, { 10, 10, 220 }, { 6, 0, 1891 }, { 6, 0, 1893 }, - { 9, 0, 916 }, { 9, 0, 965 }, { 9, 0, 972 }, { 12, 0, 801 }, - { 12, 0, 859 }, { 12, 0, 883 }, { 15, 0, 226 }, { 21, 0, 51 }, - { 4, 10, 109 }, { 7, 11, 267 }, { 7, 11, 92 }, { 7, 11, 182 }, - { 8, 11, 453 }, { 9, 11, 204 }, { 11, 11, 950 }, { 12, 11, 94 }, - { 12, 11, 644 }, { 16, 11, 20 }, { 16, 11, 70 }, { 16, 11, 90 }, - { 19, 11, 55 }, { 6, 10, 1746 }, { 6, 11, 71 }, { 7, 11, 845 }, - { 7, 11, 1308 }, { 8, 11, 160 }, { 9, 11, 318 }, { 5, 0, 101 }, - { 6, 0, 88 }, { 7, 0, 263 }, { 7, 0, 628 }, { 7, 0, 1677 }, - { 8, 0, 349 }, { 9, 0, 100 }, { 10, 0, 677 }, { 14, 0, 169 }, - { 14, 0, 302 }, { 14, 0, 313 }, { 15, 0, 48 }, { 15, 0, 84 }, - { 7, 11, 237 }, { 8, 11, 664 }, { 9, 11, 42 }, { 9, 11, 266 }, - { 9, 11, 380 }, { 9, 11, 645 }, { 10, 11, 177 }, { 10, 11, 276 }, - { 10, 11, 69 }, { 4, 0, 310 }, { 7, 0, 708 }, { 7, 0, 996 }, - { 9, 0, 795 }, { 10, 0, 390 }, { 10, 0, 733 }, { 11, 0, 451 }, - { 12, 0, 249 }, { 14, 0, 115 }, { 14, 0, 286 }, { 15, 0, 100 }, - { 5, 0, 587 }, { 4, 10, 40 }, { 10, 10, 67 }, { 11, 10, 117 }, - { 11, 10, 768 }, { 11, 10, 935 }, { 6, 0, 1942 }, { 7, 0, 512 }, - { 8, 0, 983 }, { 7, 10, 992 }, { 8, 10, 301 }, { 9, 10, 722 }, - { 12, 10, 63 }, { 13, 10, 29 }, { 14, 10, 161 }, { 15, 10, 18 }, - { 8, 11, 76 }, { 11, 10, 923 }, { 6, 0, 645 }, { 6, 0, 851 }, - { 4, 0, 498 }, { 4, 11, 293 }, { 7, 0, 217 }, { 8, 0, 140 }, - { 10, 0, 610 }, { 14, 11, 352 }, { 17, 11, 53 }, { 18, 11, 146 }, - { 18, 11, 152 }, { 19, 11, 11 }, { 22, 11, 54 }, { 6, 0, 1448 }, - { 10, 11, 841 }, { 5, 0, 905 }, { 4, 11, 605 }, { 7, 11, 518 }, - { 7, 11, 1282 }, { 7, 11, 1918 }, { 10, 11, 180 }, { 11, 11, 218 }, - { 11, 11, 917 }, { 7, 10, 825 }, { 12, 10, 328 }, { 4, 0, 456 }, - { 7, 0, 105 }, { 7, 0, 358 }, { 7, 0, 1637 }, { 8, 0, 643 }, - { 11, 0, 483 }, { 6, 0, 792 }, { 6, 11, 96 }, { 7, 11, 1426 }, - { 9, 11, 691 }, { 4, 11, 651 }, { 5, 11, 289 }, { 7, 11, 688 }, - { 8, 11, 35 }, { 9, 11, 511 }, { 10, 11, 767 }, { 19, 11, 118 }, - { 22, 0, 56 }, { 5, 0, 243 }, { 5, 0, 535 }, { 6, 10, 204 }, - { 10, 10, 320 }, { 10, 10, 583 }, { 13, 10, 502 }, { 14, 10, 72 }, - { 14, 10, 274 }, { 14, 10, 312 }, { 14, 10, 344 }, { 15, 10, 159 }, - { 16, 10, 62 }, { 16, 10, 69 }, { 17, 10, 30 }, { 18, 10, 42 }, - { 18, 10, 53 }, { 18, 10, 84 }, { 18, 10, 140 }, { 19, 10, 68 }, - { 19, 10, 85 }, { 20, 10, 5 }, { 20, 10, 45 }, { 20, 10, 101 }, - { 22, 10, 7 }, { 22, 10, 20 }, { 4, 10, 558 }, { 6, 10, 390 }, - { 7, 10, 162 }, { 7, 10, 689 }, { 9, 10, 360 }, { 10, 10, 653 }, - { 18, 11, 23 }, { 7, 0, 1748 }, { 5, 10, 856 }, { 6, 10, 1672 }, - { 6, 10, 1757 }, { 6, 10, 1781 }, { 5, 0, 539 }, { 5, 0, 754 }, - { 6, 0, 876 }, { 4, 11, 704 }, { 7, 11, 1078 }, { 5, 10, 92 }, - { 10, 10, 736 }, { 12, 10, 102 }, { 17, 0, 91 }, { 5, 10, 590 }, - { 9, 10, 213 }, { 6, 0, 1565 }, { 6, 0, 91 }, { 7, 0, 435 }, - { 4, 0, 939 }, { 12, 0, 792 }, { 6, 0, 1399 }, { 4, 0, 16 }, - { 5, 0, 316 }, { 5, 0, 842 }, { 6, 0, 370 }, { 6, 0, 1778 }, - { 8, 0, 166 }, { 11, 0, 812 }, { 12, 0, 206 }, { 12, 0, 351 }, - { 14, 0, 418 }, { 16, 0, 15 }, { 16, 0, 34 }, { 18, 0, 3 }, - { 19, 0, 3 }, { 19, 0, 7 }, { 20, 0, 4 }, { 21, 0, 21 }, - { 4, 11, 720 }, { 5, 11, 306 }, { 16, 0, 95 }, { 5, 11, 431 }, - { 4, 11, 234 }, { 7, 0, 551 }, { 4, 0, 999 }, { 6, 0, 1966 }, - { 6, 0, 2042 }, { 7, 0, 619 }, { 10, 0, 547 }, { 11, 0, 122 }, - { 12, 0, 601 }, { 15, 0, 7 }, { 20, 0, 20 }, { 5, 11, 464 }, - { 6, 11, 236 }, { 7, 11, 276 }, { 7, 11, 696 }, { 7, 11, 914 }, - { 7, 11, 1108 }, { 7, 11, 1448 }, { 9, 11, 15 }, { 9, 11, 564 }, - { 10, 11, 14 }, { 12, 11, 565 }, { 13, 11, 449 }, { 14, 11, 53 }, - { 15, 11, 13 }, { 16, 11, 64 }, { 17, 11, 41 }, { 6, 0, 884 }, - { 6, 0, 1019 }, { 6, 0, 1150 }, { 6, 11, 1767 }, { 12, 11, 194 }, - { 17, 11, 107 }, { 8, 10, 503 }, { 5, 11, 840 }, { 7, 0, 671 }, - { 6, 10, 466 }, { 4, 0, 888 }, { 4, 0, 149 }, { 10, 0, 368 }, - { 4, 0, 154 }, { 7, 0, 1134 }, { 8, 0, 105 }, { 7, 0, 983 }, - { 9, 11, 642 }, { 11, 11, 236 }, { 14, 11, 193 }, { 4, 0, 31 }, - { 6, 0, 429 }, { 7, 0, 962 }, { 9, 0, 458 }, { 11, 0, 691 }, - { 6, 0, 643 }, { 6, 0, 1102 }, { 4, 0, 312 }, { 4, 11, 68 }, - { 5, 11, 634 }, { 6, 11, 386 }, { 7, 11, 794 }, { 8, 11, 273 }, - { 9, 11, 563 }, { 10, 11, 105 }, { 10, 11, 171 }, { 11, 11, 94 }, - { 11, 11, 354 }, { 5, 0, 740 }, { 7, 0, 1642 }, { 4, 11, 95 }, - { 7, 11, 416 }, { 8, 11, 211 }, { 11, 11, 830 }, { 4, 0, 236 }, - { 10, 10, 241 }, { 7, 11, 731 }, { 13, 11, 20 }, { 15, 11, 11 }, - { 5, 0, 836 }, { 5, 0, 857 }, { 6, 0, 1680 }, { 7, 0, 59 }, - { 10, 0, 68 }, { 11, 0, 494 }, { 24, 11, 6 }, { 4, 0, 81 }, - { 11, 0, 867 }, { 7, 0, 795 }, { 5, 11, 689 }, { 4, 0, 1001 }, - { 5, 0, 282 }, { 6, 0, 1932 }, { 6, 0, 1977 }, { 6, 0, 1987 }, - { 6, 0, 1992 }, { 8, 0, 650 }, { 8, 0, 919 }, { 8, 0, 920 }, - { 8, 0, 923 }, { 8, 0, 926 }, { 8, 0, 927 }, { 8, 0, 931 }, - { 8, 0, 939 }, { 8, 0, 947 }, { 8, 0, 956 }, { 8, 0, 997 }, - { 9, 0, 907 }, { 10, 0, 950 }, { 10, 0, 953 }, { 10, 0, 954 }, - { 10, 0, 956 }, { 10, 0, 958 }, { 10, 0, 959 }, { 10, 0, 964 }, - { 10, 0, 970 }, { 10, 0, 972 }, { 10, 0, 973 }, { 10, 0, 975 }, - { 10, 0, 976 }, { 10, 0, 980 }, { 10, 0, 981 }, { 10, 0, 984 }, - { 10, 0, 988 }, { 10, 0, 990 }, { 10, 0, 995 }, { 10, 0, 999 }, - { 10, 0, 1002 }, { 10, 0, 1003 }, { 10, 0, 1005 }, { 10, 0, 1006 }, - { 10, 0, 1008 }, { 10, 0, 1009 }, { 10, 0, 1012 }, { 10, 0, 1014 }, - { 10, 0, 1015 }, { 10, 0, 1019 }, { 10, 0, 1020 }, { 10, 0, 1022 }, - { 12, 0, 959 }, { 12, 0, 961 }, { 12, 0, 962 }, { 12, 0, 963 }, - { 12, 0, 964 }, { 12, 0, 965 }, { 12, 0, 967 }, { 12, 0, 968 }, - { 12, 0, 969 }, { 12, 0, 970 }, { 12, 0, 971 }, { 12, 0, 972 }, - { 12, 0, 973 }, { 12, 0, 974 }, { 12, 0, 975 }, { 12, 0, 976 }, - { 12, 0, 977 }, { 12, 0, 979 }, { 12, 0, 981 }, { 12, 0, 982 }, - { 12, 0, 983 }, { 12, 0, 984 }, { 12, 0, 985 }, { 12, 0, 986 }, - { 12, 0, 987 }, { 12, 0, 989 }, { 12, 0, 990 }, { 12, 0, 992 }, - { 12, 0, 993 }, { 12, 0, 995 }, { 12, 0, 998 }, { 12, 0, 999 }, - { 12, 0, 1000 }, { 12, 0, 1001 }, { 12, 0, 1002 }, { 12, 0, 1004 }, - { 12, 0, 1005 }, { 12, 0, 1006 }, { 12, 0, 1007 }, { 12, 0, 1008 }, - { 12, 0, 1009 }, { 12, 0, 1010 }, { 12, 0, 1011 }, { 12, 0, 1012 }, - { 12, 0, 1014 }, { 12, 0, 1015 }, { 12, 0, 1016 }, { 12, 0, 1017 }, - { 12, 0, 1018 }, { 12, 0, 1019 }, { 12, 0, 1022 }, { 12, 0, 1023 }, - { 14, 0, 475 }, { 14, 0, 477 }, { 14, 0, 478 }, { 14, 0, 479 }, - { 14, 0, 480 }, { 14, 0, 482 }, { 14, 0, 483 }, { 14, 0, 484 }, - { 14, 0, 485 }, { 14, 0, 486 }, { 14, 0, 487 }, { 14, 0, 488 }, - { 14, 0, 489 }, { 14, 0, 490 }, { 14, 0, 491 }, { 14, 0, 492 }, - { 14, 0, 493 }, { 14, 0, 494 }, { 14, 0, 495 }, { 14, 0, 496 }, - { 14, 0, 497 }, { 14, 0, 498 }, { 14, 0, 499 }, { 14, 0, 500 }, - { 14, 0, 501 }, { 14, 0, 502 }, { 14, 0, 503 }, { 14, 0, 504 }, - { 14, 0, 506 }, { 14, 0, 507 }, { 14, 0, 508 }, { 14, 0, 509 }, - { 14, 0, 510 }, { 14, 0, 511 }, { 16, 0, 113 }, { 16, 0, 114 }, - { 16, 0, 115 }, { 16, 0, 117 }, { 16, 0, 118 }, { 16, 0, 119 }, - { 16, 0, 121 }, { 16, 0, 122 }, { 16, 0, 123 }, { 16, 0, 124 }, - { 16, 0, 125 }, { 16, 0, 126 }, { 16, 0, 127 }, { 18, 0, 242 }, - { 18, 0, 243 }, { 18, 0, 244 }, { 18, 0, 245 }, { 18, 0, 248 }, - { 18, 0, 249 }, { 18, 0, 250 }, { 18, 0, 251 }, { 18, 0, 252 }, - { 18, 0, 253 }, { 18, 0, 254 }, { 18, 0, 255 }, { 20, 0, 125 }, - { 20, 0, 126 }, { 20, 0, 127 }, { 7, 11, 1717 }, { 7, 11, 1769 }, - { 10, 11, 546 }, { 7, 11, 1127 }, { 7, 11, 1572 }, { 10, 11, 297 }, - { 10, 11, 422 }, { 11, 11, 764 }, { 11, 11, 810 }, { 12, 11, 264 }, - { 13, 11, 102 }, { 13, 11, 300 }, { 13, 11, 484 }, { 14, 11, 147 }, - { 14, 11, 229 }, { 17, 11, 71 }, { 18, 11, 118 }, { 19, 11, 120 }, - { 6, 0, 1148 }, { 6, 0, 1586 }, { 4, 0, 775 }, { 7, 10, 954 }, - { 5, 11, 864 }, { 5, 11, 928 }, { 10, 11, 189 }, { 7, 10, 1958 }, - { 6, 10, 549 }, { 8, 10, 34 }, { 8, 10, 283 }, { 9, 10, 165 }, - { 10, 10, 475 }, { 5, 10, 652 }, { 5, 10, 701 }, { 7, 10, 449 }, - { 7, 11, 695 }, { 4, 10, 655 }, { 7, 10, 850 }, { 17, 10, 75 }, - { 18, 10, 137 }, { 12, 11, 682 }, { 5, 11, 523 }, { 8, 0, 970 }, - { 8, 10, 670 }, { 8, 11, 555 }, { 7, 11, 76 }, { 8, 11, 44 }, - { 9, 11, 884 }, { 10, 11, 580 }, { 11, 11, 399 }, { 11, 11, 894 }, - { 15, 11, 122 }, { 18, 11, 144 }, { 19, 11, 61 }, { 6, 10, 159 }, - { 6, 10, 364 }, { 7, 10, 516 }, { 7, 10, 1439 }, { 9, 10, 518 }, - { 4, 0, 71 }, { 5, 0, 376 }, { 7, 0, 119 }, { 10, 0, 665 }, - { 13, 10, 151 }, { 11, 0, 827 }, { 14, 0, 34 }, { 15, 0, 148 }, - { 5, 11, 518 }, { 4, 0, 479 }, { 7, 11, 1787 }, { 7, 11, 1852 }, - { 7, 10, 993 }, { 7, 0, 607 }, { 8, 0, 99 }, { 6, 0, 1960 }, - { 4, 0, 793 }, { 4, 0, 41 }, { 5, 0, 74 }, { 7, 0, 1627 }, - { 11, 0, 871 }, { 12, 0, 619 }, { 7, 0, 94 }, { 11, 0, 329 }, - { 11, 0, 965 }, { 12, 0, 241 }, { 14, 0, 354 }, { 15, 0, 22 }, - { 20, 0, 63 }, { 7, 10, 501 }, { 9, 10, 111 }, { 10, 10, 141 }, - { 11, 10, 332 }, { 13, 10, 43 }, { 13, 10, 429 }, { 14, 10, 130 }, - { 14, 10, 415 }, { 17, 10, 102 }, { 9, 0, 209 }, { 9, 0, 300 }, - { 6, 0, 1497 }, { 10, 11, 255 }, { 4, 11, 934 }, { 5, 11, 138 }, - { 8, 11, 610 }, { 5, 0, 98 }, { 6, 0, 1316 }, { 10, 11, 804 }, - { 10, 11, 832 }, { 8, 11, 96 }, { 9, 11, 36 }, { 10, 11, 607 }, - { 11, 11, 423 }, { 11, 11, 442 }, { 12, 11, 309 }, { 14, 11, 199 }, - { 15, 11, 90 }, { 17, 11, 110 }, { 4, 0, 463 }, { 5, 10, 149 }, - { 8, 10, 233 }, { 5, 10, 935 }, { 4, 11, 652 }, { 8, 11, 320 }, - { 9, 11, 13 }, { 9, 11, 398 }, { 9, 11, 727 }, { 10, 11, 75 }, - { 10, 11, 184 }, { 10, 11, 230 }, { 10, 11, 564 }, { 10, 11, 569 }, - { 11, 11, 973 }, { 12, 11, 70 }, { 12, 11, 189 }, { 13, 11, 57 }, - { 13, 11, 257 }, { 22, 11, 6 }, { 22, 11, 16 }, { 14, 0, 291 }, - { 12, 10, 582 }, { 18, 10, 131 }, { 8, 10, 801 }, { 5, 0, 984 }, - { 17, 11, 116 }, { 4, 11, 692 }, { 5, 11, 321 }, { 4, 0, 182 }, - { 6, 0, 205 }, { 7, 0, 220 }, { 4, 0, 42 }, { 9, 0, 205 }, - { 9, 0, 786 }, { 10, 0, 659 }, { 6, 0, 801 }, { 11, 11, 130 }, - { 12, 11, 609 }, { 4, 0, 635 }, { 5, 11, 345 }, { 7, 11, 1016 }, - { 11, 0, 533 }, { 4, 0, 371 }, { 4, 0, 272 }, { 7, 0, 836 }, - { 6, 0, 1282 }, { 7, 11, 1100 }, { 5, 0, 825 }, { 6, 0, 1640 }, - { 7, 11, 1325 }, { 5, 11, 673 }, { 4, 11, 287 }, { 5, 11, 1018 }, - { 7, 0, 357 }, { 6, 0, 467 }, { 9, 0, 879 }, { 7, 0, 317 }, - { 7, 0, 569 }, { 6, 0, 924 }, { 6, 0, 1588 }, { 5, 11, 34 }, - { 5, 10, 406 }, { 10, 11, 724 }, { 12, 11, 444 }, { 13, 11, 354 }, - { 18, 11, 32 }, { 23, 11, 24 }, { 23, 11, 31 }, { 24, 11, 5 }, - { 6, 0, 1795 }, { 6, 0, 1835 }, { 6, 0, 1836 }, { 6, 0, 1856 }, - { 8, 0, 844 }, { 8, 0, 849 }, { 8, 0, 854 }, { 8, 0, 870 }, - { 8, 0, 887 }, { 10, 0, 852 }, { 10, 0, 942 }, { 6, 10, 69 }, - { 7, 10, 117 }, { 9, 0, 307 }, { 4, 0, 944 }, { 6, 0, 1799 }, - { 6, 0, 1825 }, { 10, 0, 848 }, { 10, 0, 875 }, { 10, 0, 895 }, - { 10, 0, 899 }, { 10, 0, 902 }, { 12, 0, 773 }, { 11, 0, 43 }, - { 13, 0, 72 }, { 13, 0, 142 }, { 7, 10, 1830 }, { 6, 11, 382 }, - { 4, 10, 432 }, { 7, 10, 824 }, { 4, 11, 329 }, { 7, 0, 1820 }, - { 11, 11, 124 }, { 5, 10, 826 }, { 5, 0, 525 }, { 4, 11, 906 }, - { 7, 11, 1940 }, { 8, 11, 366 }, { 10, 11, 10 }, { 4, 11, 123 }, - { 4, 11, 649 }, { 5, 11, 605 }, { 7, 11, 1509 }, { 8, 11, 36 }, - { 6, 0, 110 }, { 7, 0, 1681 }, { 5, 0, 493 }, { 5, 11, 767 }, - { 4, 0, 174 }, { 7, 0, 911 }, { 10, 11, 786 }, { 8, 0, 417 }, - { 9, 0, 782 }, { 5, 10, 1000 }, { 7, 0, 733 }, { 9, 0, 583 }, - { 4, 10, 297 }, { 6, 10, 529 }, { 7, 10, 152 }, { 7, 10, 713 }, - { 7, 10, 1845 }, { 8, 10, 710 }, { 8, 10, 717 }, { 12, 10, 639 }, - { 12, 10, 685 }, { 4, 0, 32 }, { 5, 0, 215 }, { 6, 0, 269 }, - { 7, 0, 1782 }, { 7, 0, 1892 }, { 10, 0, 16 }, { 11, 0, 822 }, - { 11, 0, 954 }, { 13, 0, 481 }, { 4, 11, 273 }, { 5, 11, 658 }, - { 5, 11, 995 }, { 8, 0, 477 }, { 6, 11, 72 }, { 7, 11, 1345 }, - { 5, 0, 308 }, { 7, 0, 1088 }, { 4, 10, 520 }, { 7, 10, 575 }, - { 5, 11, 589 }, { 5, 0, 126 }, { 8, 0, 297 }, { 9, 0, 366 }, - { 12, 0, 374 }, { 7, 0, 1551 }, { 11, 0, 361 }, { 5, 11, 117 }, - { 6, 11, 514 }, { 6, 11, 541 }, { 7, 11, 1164 }, { 7, 11, 1436 }, - { 8, 11, 220 }, { 8, 11, 648 }, { 10, 11, 688 }, { 11, 11, 560 }, - { 5, 11, 686 }, { 4, 0, 946 }, { 6, 0, 1807 }, { 8, 0, 871 }, - { 10, 0, 854 }, { 10, 0, 870 }, { 10, 0, 888 }, { 10, 0, 897 }, - { 10, 0, 920 }, { 12, 0, 722 }, { 12, 0, 761 }, { 12, 0, 763 }, - { 12, 0, 764 }, { 14, 0, 454 }, { 14, 0, 465 }, { 16, 0, 107 }, - { 18, 0, 167 }, { 18, 0, 168 }, { 18, 0, 172 }, { 4, 0, 175 }, - { 7, 0, 1307 }, { 4, 0, 685 }, { 7, 11, 1834 }, { 5, 0, 797 }, - { 6, 0, 745 }, { 6, 0, 858 }, { 6, 0, 963 }, { 5, 0, 565 }, - { 5, 10, 397 }, { 6, 10, 154 }, { 7, 11, 196 }, { 7, 10, 676 }, - { 8, 10, 443 }, { 8, 10, 609 }, { 9, 10, 24 }, { 9, 10, 325 }, - { 10, 10, 35 }, { 10, 11, 765 }, { 11, 11, 347 }, { 11, 10, 535 }, - { 11, 11, 552 }, { 11, 11, 576 }, { 11, 10, 672 }, { 11, 11, 790 }, - { 11, 10, 1018 }, { 12, 11, 263 }, { 12, 10, 637 }, { 13, 11, 246 }, - { 13, 11, 270 }, { 13, 11, 395 }, { 14, 11, 74 }, { 14, 11, 176 }, - { 14, 11, 190 }, { 14, 11, 398 }, { 14, 11, 412 }, { 15, 11, 32 }, - { 15, 11, 63 }, { 16, 10, 30 }, { 16, 11, 88 }, { 19, 11, 105 }, - { 13, 11, 84 }, { 13, 11, 122 }, { 4, 0, 252 }, { 7, 0, 1068 }, - { 10, 0, 434 }, { 11, 0, 228 }, { 11, 0, 426 }, { 13, 0, 231 }, - { 18, 0, 106 }, { 20, 0, 87 }, { 9, 0, 826 }, { 4, 11, 589 }, - { 11, 11, 282 }, { 5, 11, 381 }, { 7, 11, 1792 }, { 4, 0, 791 }, - { 5, 0, 231 }, { 10, 0, 509 }, { 5, 10, 981 }, { 7, 0, 601 }, - { 9, 0, 277 }, { 9, 0, 674 }, { 10, 0, 178 }, { 10, 0, 418 }, - { 10, 0, 571 }, { 11, 0, 531 }, { 12, 0, 113 }, { 12, 0, 475 }, - { 13, 0, 99 }, { 14, 0, 428 }, { 4, 10, 56 }, { 7, 11, 616 }, - { 7, 10, 1791 }, { 8, 10, 607 }, { 8, 10, 651 }, { 10, 11, 413 }, - { 11, 10, 465 }, { 11, 10, 835 }, { 12, 10, 337 }, { 13, 10, 480 }, - { 7, 0, 1591 }, { 16, 0, 43 }, { 9, 10, 158 }, { 10, 10, 411 }, - { 7, 0, 1683 }, { 8, 0, 289 }, { 11, 0, 45 }, { 12, 0, 278 }, - { 12, 0, 537 }, { 6, 11, 120 }, { 7, 11, 1188 }, { 7, 11, 1710 }, - { 8, 11, 286 }, { 9, 11, 667 }, { 11, 11, 592 }, { 11, 11, 730 }, - { 8, 10, 617 }, { 7, 0, 1120 }, { 7, 11, 1146 }, { 11, 10, 563 }, - { 4, 11, 352 }, { 4, 10, 369 }, { 7, 11, 687 }, { 15, 11, 38 }, - { 4, 0, 399 }, { 5, 0, 119 }, { 5, 0, 494 }, { 7, 0, 751 }, - { 9, 0, 556 }, { 14, 11, 179 }, { 15, 11, 151 }, { 22, 11, 11 }, - { 4, 11, 192 }, { 5, 11, 49 }, { 6, 11, 200 }, { 6, 11, 293 }, - { 6, 11, 1696 }, { 7, 11, 488 }, { 4, 0, 398 }, { 5, 0, 660 }, - { 7, 0, 1030 }, { 6, 10, 622 }, { 7, 11, 595 }, { 13, 0, 168 }, - { 4, 11, 147 }, { 7, 0, 973 }, { 10, 10, 624 }, { 14, 10, 279 }, - { 4, 10, 363 }, { 4, 0, 642 }, { 5, 11, 934 }, { 6, 0, 1615 }, - { 7, 11, 505 }, { 7, 11, 523 }, { 7, 0, 594 }, { 7, 0, 851 }, - { 7, 0, 1858 }, { 9, 0, 411 }, { 9, 0, 574 }, { 9, 0, 666 }, - { 9, 0, 737 }, { 10, 0, 346 }, { 10, 0, 712 }, { 11, 0, 246 }, - { 11, 0, 432 }, { 11, 0, 517 }, { 11, 0, 647 }, { 11, 0, 679 }, - { 11, 0, 727 }, { 12, 0, 304 }, { 12, 0, 305 }, { 12, 0, 323 }, - { 12, 0, 483 }, { 12, 0, 572 }, { 12, 0, 593 }, { 12, 0, 602 }, - { 13, 0, 95 }, { 13, 0, 101 }, { 13, 0, 171 }, { 13, 0, 315 }, - { 13, 0, 378 }, { 13, 0, 425 }, { 13, 0, 475 }, { 14, 0, 63 }, - { 14, 0, 380 }, { 14, 0, 384 }, { 15, 0, 133 }, { 18, 0, 112 }, - { 20, 0, 72 }, { 7, 0, 1093 }, { 4, 0, 679 }, { 8, 0, 913 }, - { 10, 0, 903 }, { 10, 0, 915 }, { 12, 0, 648 }, { 12, 0, 649 }, - { 14, 0, 455 }, { 16, 0, 112 }, { 10, 11, 438 }, { 9, 0, 203 }, - { 6, 10, 292 }, { 6, 0, 1492 }, { 7, 0, 1374 }, { 8, 0, 540 }, - { 5, 10, 177 }, { 6, 10, 616 }, { 7, 10, 827 }, { 9, 10, 525 }, - { 10, 10, 656 }, { 7, 0, 1486 }, { 9, 0, 714 }, { 10, 10, 31 }, - { 8, 0, 825 }, { 6, 0, 1511 }, { 4, 11, 637 }, { 6, 0, 952 }, - { 4, 10, 161 }, { 5, 10, 631 }, { 5, 0, 143 }, { 5, 0, 769 }, - { 6, 0, 1760 }, { 7, 0, 682 }, { 7, 0, 1992 }, { 8, 0, 736 }, - { 4, 0, 700 }, { 6, 0, 1540 }, { 4, 11, 777 }, { 9, 11, 867 }, - { 10, 11, 837 }, { 7, 0, 1557 }, { 7, 10, 1684 }, { 5, 0, 860 }, - { 6, 0, 422 }, { 7, 0, 0 }, { 7, 0, 1544 }, { 9, 0, 605 }, - { 11, 0, 990 }, { 12, 0, 235 }, { 12, 0, 453 }, { 13, 0, 47 }, - { 13, 0, 266 }, { 9, 10, 469 }, { 9, 10, 709 }, { 12, 10, 512 }, - { 14, 10, 65 }, { 17, 10, 12 }, { 11, 0, 807 }, { 10, 10, 229 }, - { 11, 10, 73 }, { 11, 10, 376 }, { 6, 11, 170 }, { 7, 11, 1080 }, - { 8, 11, 395 }, { 8, 11, 487 }, { 11, 11, 125 }, { 13, 11, 147 }, - { 5, 0, 515 }, { 9, 0, 131 }, { 7, 0, 1605 }, { 11, 0, 962 }, - { 18, 0, 139 }, { 4, 0, 646 }, { 4, 0, 396 }, { 7, 0, 728 }, - { 9, 0, 117 }, { 13, 0, 202 }, { 20, 0, 51 }, { 6, 0, 121 }, - { 6, 0, 124 }, { 6, 0, 357 }, { 7, 0, 1138 }, { 7, 0, 1295 }, - { 8, 0, 162 }, { 8, 0, 508 }, { 11, 0, 655 }, { 4, 11, 535 }, - { 6, 10, 558 }, { 7, 10, 651 }, { 8, 11, 618 }, { 9, 10, 0 }, - { 10, 10, 34 }, { 11, 10, 1008 }, { 7, 11, 1245 }, { 10, 0, 357 }, - { 22, 11, 23 }, { 5, 0, 237 }, { 7, 0, 1784 }, { 7, 10, 1832 }, - { 10, 10, 374 }, { 4, 0, 713 }, { 4, 11, 46 }, { 6, 0, 1536 }, - { 10, 0, 348 }, { 5, 11, 811 }, { 6, 11, 1679 }, { 6, 11, 1714 }, - { 7, 11, 2032 }, { 11, 11, 182 }, { 14, 11, 195 }, { 6, 0, 523 }, - { 7, 0, 738 }, { 7, 10, 771 }, { 7, 10, 1731 }, { 9, 10, 405 }, - { 10, 10, 421 }, { 7, 11, 1458 }, { 9, 11, 407 }, { 11, 11, 15 }, - { 6, 11, 34 }, { 7, 11, 69 }, { 7, 11, 640 }, { 7, 11, 1089 }, - { 8, 11, 708 }, { 8, 11, 721 }, { 9, 11, 363 }, { 9, 11, 643 }, - { 10, 11, 628 }, { 20, 11, 98 }, { 5, 0, 434 }, { 7, 0, 1877 }, - { 7, 0, 571 }, { 10, 0, 366 }, { 5, 10, 881 }, { 5, 10, 885 }, - { 9, 0, 513 }, { 10, 0, 25 }, { 10, 0, 39 }, { 12, 0, 122 }, - { 12, 0, 187 }, { 4, 0, 580 }, { 5, 10, 142 }, { 6, 10, 546 }, - { 4, 11, 462 }, { 9, 0, 873 }, { 5, 10, 466 }, { 11, 10, 571 }, - { 12, 10, 198 }, { 13, 10, 283 }, { 14, 10, 186 }, { 15, 10, 21 }, - { 15, 10, 103 }, { 7, 0, 171 }, { 4, 10, 185 }, { 5, 10, 257 }, - { 5, 10, 839 }, { 5, 10, 936 }, { 9, 10, 399 }, { 10, 10, 258 }, - { 10, 10, 395 }, { 10, 10, 734 }, { 11, 10, 1014 }, { 12, 10, 23 }, - { 13, 10, 350 }, { 14, 10, 150 }, { 19, 10, 6 }, { 6, 0, 625 }, - { 7, 0, 107 }, { 7, 0, 838 }, { 8, 0, 550 }, { 10, 0, 401 }, - { 5, 11, 73 }, { 6, 11, 23 }, { 6, 11, 338 }, { 4, 0, 943 }, - { 6, 0, 1850 }, { 12, 0, 713 }, { 14, 0, 434 }, { 11, 0, 588 }, - { 11, 0, 864 }, { 11, 0, 936 }, { 11, 0, 968 }, { 12, 0, 73 }, - { 12, 0, 343 }, { 12, 0, 394 }, { 13, 0, 275 }, { 14, 0, 257 }, - { 15, 0, 160 }, { 7, 10, 404 }, { 7, 10, 1377 }, { 7, 10, 1430 }, - { 7, 10, 2017 }, { 8, 10, 149 }, { 8, 10, 239 }, { 8, 10, 512 }, - { 8, 10, 793 }, { 8, 10, 818 }, { 9, 10, 474 }, { 9, 10, 595 }, - { 10, 10, 122 }, { 10, 10, 565 }, { 10, 10, 649 }, { 10, 10, 783 }, - { 11, 10, 239 }, { 11, 10, 295 }, { 11, 10, 447 }, { 11, 10, 528 }, - { 11, 10, 639 }, { 11, 10, 800 }, { 12, 10, 25 }, { 12, 10, 157 }, - { 12, 10, 316 }, { 12, 10, 390 }, { 12, 10, 391 }, { 12, 10, 395 }, - { 12, 10, 478 }, { 12, 10, 503 }, { 12, 10, 592 }, { 12, 10, 680 }, - { 13, 10, 50 }, { 13, 10, 53 }, { 13, 10, 132 }, { 13, 10, 198 }, - { 13, 10, 322 }, { 13, 10, 415 }, { 13, 10, 511 }, { 14, 10, 71 }, - { 14, 10, 395 }, { 15, 10, 71 }, { 15, 10, 136 }, { 17, 10, 123 }, - { 18, 10, 93 }, { 19, 10, 58 }, { 5, 0, 768 }, { 11, 0, 103 }, - { 14, 0, 0 }, { 8, 10, 712 }, { 4, 0, 799 }, { 4, 0, 894 }, - { 7, 11, 725 }, { 8, 11, 498 }, { 11, 11, 268 }, { 7, 11, 1798 }, - { 7, 11, 773 }, { 13, 11, 360 }, { 4, 10, 377 }, { 24, 10, 13 }, - { 7, 0, 1673 }, { 4, 11, 583 }, { 6, 0, 1052 }, { 5, 11, 220 }, - { 12, 11, 69 }, { 4, 11, 544 }, { 4, 10, 180 }, { 7, 10, 1906 }, - { 6, 0, 272 }, { 4, 0, 441 }, { 6, 0, 1421 }, { 4, 0, 9 }, - { 5, 0, 128 }, { 7, 0, 368 }, { 11, 0, 480 }, { 20, 0, 3 }, - { 5, 11, 176 }, { 6, 11, 437 }, { 6, 11, 564 }, { 11, 11, 181 }, - { 13, 11, 183 }, { 4, 10, 491 }, { 7, 0, 1182 }, { 13, 11, 67 }, - { 6, 0, 1346 }, { 4, 10, 171 }, { 10, 10, 234 }, { 4, 10, 586 }, - { 7, 10, 1186 }, { 10, 10, 631 }, { 8, 0, 682 }, { 6, 0, 1004 }, - { 15, 0, 24 }, { 15, 11, 24 }, { 6, 0, 968 }, { 4, 0, 2 }, - { 6, 0, 742 }, { 6, 0, 793 }, { 7, 0, 545 }, { 7, 0, 894 }, - { 9, 10, 931 }, { 10, 10, 334 }, { 20, 10, 71 }, { 8, 11, 600 }, - { 5, 10, 765 }, { 9, 0, 769 }, { 12, 0, 185 }, { 4, 11, 790 }, - { 5, 11, 273 }, { 6, 11, 394 }, { 7, 0, 474 }, { 9, 0, 578 }, - { 4, 11, 135 }, { 6, 11, 127 }, { 7, 11, 1185 }, { 7, 11, 1511 }, - { 8, 11, 613 }, { 11, 11, 5 }, { 12, 11, 133 }, { 12, 11, 495 }, - { 12, 11, 586 }, { 14, 11, 385 }, { 15, 11, 118 }, { 17, 11, 20 }, - { 18, 11, 98 }, { 5, 10, 424 }, { 5, 0, 530 }, { 14, 0, 113 }, - { 6, 11, 230 }, { 7, 11, 961 }, { 7, 11, 1085 }, { 8, 11, 462 }, - { 7, 11, 1954 }, { 9, 11, 636 }, { 8, 10, 714 }, { 21, 11, 6 }, - { 7, 10, 685 }, { 9, 10, 420 }, { 10, 10, 269 }, { 10, 10, 285 }, - { 10, 10, 576 }, { 11, 10, 397 }, { 13, 10, 175 }, { 17, 10, 90 }, - { 4, 10, 429 }, { 5, 0, 556 }, { 5, 11, 162 }, { 8, 11, 68 }, - { 4, 11, 654 }, { 4, 11, 156 }, { 7, 11, 998 }, { 7, 11, 1045 }, - { 7, 11, 1860 }, { 9, 11, 48 }, { 9, 11, 692 }, { 11, 11, 419 }, - { 11, 11, 602 }, { 6, 0, 1317 }, { 8, 0, 16 }, { 9, 0, 825 }, - { 12, 0, 568 }, { 7, 11, 1276 }, { 8, 11, 474 }, { 9, 11, 652 }, - { 18, 0, 97 }, { 7, 10, 18 }, { 7, 10, 699 }, { 7, 10, 1966 }, - { 8, 10, 752 }, { 9, 10, 273 }, { 9, 10, 412 }, { 9, 10, 703 }, - { 10, 10, 71 }, { 10, 10, 427 }, { 10, 10, 508 }, { 10, 0, 703 }, - { 7, 11, 1454 }, { 10, 11, 703 }, { 4, 10, 53 }, { 5, 10, 186 }, - { 7, 10, 752 }, { 6, 0, 892 }, { 6, 0, 1571 }, { 8, 10, 575 }, - { 10, 10, 289 }, { 11, 10, 319 }, { 6, 0, 186 }, { 9, 0, 426 }, - { 6, 0, 1101 }, { 4, 10, 675 }, { 4, 0, 585 }, { 6, 0, 1870 }, - { 9, 0, 937 }, { 24, 11, 10 }, { 9, 11, 197 }, { 10, 11, 300 }, - { 12, 11, 473 }, { 13, 11, 90 }, { 13, 11, 405 }, { 4, 0, 93 }, - { 5, 0, 252 }, { 6, 0, 229 }, { 7, 0, 291 }, { 9, 0, 550 }, - { 11, 0, 644 }, { 9, 0, 749 }, { 9, 0, 162 }, { 6, 10, 209 }, - { 8, 10, 468 }, { 9, 10, 210 }, { 11, 10, 36 }, { 12, 10, 28 }, - { 12, 10, 630 }, { 13, 10, 21 }, { 13, 10, 349 }, { 14, 10, 7 }, - { 17, 10, 13 }, { 4, 0, 381 }, { 4, 11, 606 }, { 4, 10, 342 }, - { 7, 10, 1179 }, { 7, 11, 1587 }, { 7, 11, 1707 }, { 10, 11, 528 }, - { 11, 11, 504 }, { 12, 11, 39 }, { 13, 11, 265 }, { 13, 11, 439 }, - { 4, 10, 928 }, { 5, 10, 910 }, { 7, 10, 1838 }, { 7, 11, 1978 }, - { 8, 11, 676 }, { 6, 0, 762 }, { 6, 0, 796 }, { 6, 0, 956 }, - { 4, 10, 318 }, { 4, 10, 496 }, { 7, 10, 856 }, { 11, 10, 654 }, - { 9, 11, 242 }, { 4, 11, 361 }, { 5, 11, 315 }, { 4, 11, 461 }, - { 4, 11, 472 }, { 4, 0, 857 }, { 5, 0, 21 }, { 6, 0, 77 }, - { 6, 0, 157 }, { 7, 0, 974 }, { 7, 0, 1301 }, { 7, 0, 1339 }, - { 7, 0, 1490 }, { 7, 0, 1873 }, { 9, 0, 628 }, { 7, 10, 915 }, - { 8, 10, 247 }, { 19, 10, 0 }, { 4, 10, 202 }, { 5, 10, 382 }, - { 6, 10, 454 }, { 7, 10, 936 }, { 7, 10, 1803 }, { 8, 10, 758 }, - { 9, 10, 375 }, { 9, 10, 895 }, { 10, 10, 743 }, { 10, 10, 792 }, - { 11, 10, 978 }, { 11, 10, 1012 }, { 14, 10, 109 }, { 7, 11, 617 }, - { 10, 11, 498 }, { 11, 11, 501 }, { 12, 11, 16 }, { 12, 11, 150 }, - { 7, 10, 1150 }, { 7, 10, 1425 }, { 7, 10, 1453 }, { 10, 11, 747 }, - { 12, 10, 513 }, { 5, 11, 155 }, { 11, 0, 919 }, { 13, 0, 409 }, - { 10, 10, 791 }, { 10, 0, 633 }, { 11, 11, 729 }, { 7, 11, 163 }, - { 8, 11, 319 }, { 9, 11, 402 }, { 10, 11, 24 }, { 10, 11, 681 }, - { 11, 11, 200 }, { 11, 11, 567 }, { 12, 11, 253 }, { 12, 11, 410 }, - { 14, 11, 219 }, { 5, 11, 475 }, { 7, 11, 1780 }, { 9, 11, 230 }, - { 11, 11, 297 }, { 11, 11, 558 }, { 14, 11, 322 }, { 19, 11, 76 }, - { 7, 0, 332 }, { 6, 10, 445 }, { 9, 10, 909 }, { 7, 11, 1956 }, - { 8, 11, 274 }, { 6, 10, 578 }, { 7, 0, 1489 }, { 7, 11, 1848 }, - { 5, 11, 944 }, { 6, 11, 1769 }, { 4, 11, 144 }, { 8, 10, 766 }, - { 4, 0, 832 }, { 7, 10, 541 }, { 8, 0, 398 }, { 9, 0, 681 }, - { 11, 0, 632 }, { 8, 0, 645 }, { 9, 0, 791 }, { 10, 0, 93 }, - { 16, 0, 13 }, { 17, 0, 23 }, { 18, 0, 135 }, { 19, 0, 12 }, - { 20, 0, 1 }, { 20, 0, 12 }, { 20, 0, 14 }, { 6, 11, 247 }, - { 9, 11, 555 }, { 6, 0, 20 }, { 4, 0, 800 }, { 7, 0, 1841 }, - { 11, 10, 983 }, { 9, 10, 768 }, { 4, 10, 584 }, { 13, 11, 51 }, - { 6, 0, 1993 }, { 4, 11, 620 }, { 10, 11, 280 }, { 8, 0, 769 }, - { 11, 0, 290 }, { 11, 0, 665 }, { 7, 11, 1810 }, { 11, 11, 866 }, - { 12, 11, 103 }, { 13, 11, 495 }, { 17, 11, 67 }, { 19, 11, 74 }, - { 6, 0, 1426 }, { 11, 0, 60 }, { 4, 10, 326 }, { 7, 10, 1770 }, - { 7, 0, 1874 }, { 9, 0, 641 }, { 4, 10, 226 }, { 6, 0, 644 }, - { 5, 10, 426 }, { 8, 10, 30 }, { 9, 10, 2 }, { 11, 10, 549 }, - { 19, 10, 122 }, { 5, 11, 428 }, { 10, 11, 442 }, { 7, 11, 1871 }, - { 7, 0, 1757 }, { 19, 10, 117 }, { 7, 0, 937 }, { 7, 0, 1652 }, - { 6, 0, 654 }, { 6, 0, 1476 }, { 5, 11, 99 }, { 7, 0, 527 }, - { 4, 10, 345 }, { 4, 10, 385 }, { 4, 11, 397 }, { 7, 10, 265 }, - { 7, 10, 587 }, { 4, 0, 579 }, { 5, 0, 226 }, { 5, 0, 323 }, - { 7, 0, 960 }, { 6, 0, 1486 }, { 8, 11, 502 }, { 16, 11, 9 }, - { 4, 10, 347 }, { 5, 10, 423 }, { 5, 10, 996 }, { 7, 10, 1329 }, - { 7, 11, 727 }, { 18, 11, 73 }, { 4, 11, 485 }, { 7, 11, 353 }, - { 7, 10, 1259 }, { 7, 11, 1523 }, { 9, 10, 125 }, { 11, 10, 65 }, - { 6, 0, 325 }, { 5, 10, 136 }, { 6, 11, 366 }, { 7, 11, 1384 }, - { 7, 11, 1601 }, { 8, 10, 644 }, { 10, 11, 160 }, { 6, 0, 1345 }, - { 9, 11, 282 }, { 18, 0, 91 }, { 19, 0, 70 }, { 8, 0, 404 }, - { 4, 11, 157 }, { 5, 11, 471 }, { 5, 0, 973 }, { 6, 0, 135 }, - { 7, 0, 1176 }, { 8, 11, 116 }, { 11, 11, 551 }, { 14, 11, 159 }, - { 4, 0, 549 }, { 4, 10, 433 }, { 5, 10, 719 }, { 8, 0, 976 }, - { 5, 11, 160 }, { 7, 11, 363 }, { 7, 11, 589 }, { 10, 11, 170 }, - { 13, 11, 55 }, { 16, 0, 21 }, { 16, 0, 51 }, { 7, 0, 314 }, - { 7, 10, 1363 }, { 4, 11, 108 }, { 7, 11, 405 }, { 10, 11, 491 }, - { 11, 11, 498 }, { 18, 0, 4 }, { 4, 10, 555 }, { 8, 10, 536 }, - { 10, 10, 288 }, { 11, 10, 1005 }, { 7, 11, 1005 }, { 6, 0, 281 }, - { 7, 0, 6 }, { 8, 0, 282 }, { 8, 0, 480 }, { 8, 0, 499 }, - { 9, 0, 198 }, { 10, 0, 143 }, { 10, 0, 169 }, { 10, 0, 211 }, - { 10, 0, 417 }, { 10, 0, 574 }, { 11, 0, 147 }, { 11, 0, 395 }, - { 12, 0, 75 }, { 12, 0, 407 }, { 12, 0, 608 }, { 13, 0, 500 }, - { 14, 0, 251 }, { 6, 0, 1093 }, { 6, 0, 1405 }, { 9, 10, 370 }, - { 10, 10, 90 }, { 4, 11, 926 }, { 5, 11, 983 }, { 7, 0, 1776 }, - { 6, 0, 1528 }, { 4, 0, 419 }, { 4, 11, 538 }, { 6, 11, 294 }, - { 7, 11, 1267 }, { 8, 11, 624 }, { 7, 11, 1772 }, { 10, 11, 301 }, - { 4, 10, 257 }, { 7, 10, 2031 }, { 4, 0, 138 }, { 7, 0, 1012 }, - { 7, 0, 1280 }, { 9, 0, 76 }, { 7, 10, 1768 }, { 4, 11, 757 }, - { 5, 0, 29 }, { 12, 0, 638 }, { 7, 11, 655 }, { 7, 11, 1844 }, - { 7, 0, 1418 }, { 6, 11, 257 }, { 7, 11, 1522 }, { 8, 11, 469 }, - { 10, 11, 47 }, { 14, 11, 278 }, { 6, 10, 83 }, { 6, 10, 1733 }, - { 7, 10, 1389 }, { 11, 11, 204 }, { 11, 11, 243 }, { 12, 11, 293 }, - { 7, 11, 1875 }, { 6, 0, 1710 }, { 7, 0, 2038 }, { 9, 11, 299 }, - { 4, 0, 17 }, { 5, 0, 23 }, { 7, 0, 995 }, { 11, 0, 383 }, - { 11, 0, 437 }, { 12, 0, 460 }, { 12, 0, 532 }, { 5, 0, 862 }, - { 9, 10, 696 }, { 6, 0, 592 }, { 10, 0, 946 }, { 10, 11, 599 }, - { 7, 10, 1718 }, { 9, 10, 95 }, { 9, 10, 274 }, { 10, 10, 279 }, - { 10, 10, 317 }, { 10, 10, 420 }, { 11, 10, 303 }, { 11, 10, 808 }, - { 12, 10, 134 }, { 12, 10, 367 }, { 13, 10, 149 }, { 13, 10, 347 }, - { 14, 10, 349 }, { 14, 10, 406 }, { 18, 10, 22 }, { 18, 10, 89 }, - { 18, 10, 122 }, { 19, 10, 47 }, { 8, 0, 70 }, { 12, 0, 171 }, - { 13, 0, 272 }, { 5, 10, 26 }, { 4, 10, 550 }, { 9, 0, 812 }, - { 10, 0, 233 }, { 11, 0, 76 }, { 6, 0, 988 }, { 6, 0, 442 }, - { 8, 10, 822 }, { 7, 0, 896 }, { 4, 10, 902 }, { 5, 10, 809 }, - { 6, 10, 122 }, { 5, 11, 150 }, { 7, 11, 106 }, { 8, 11, 603 }, - { 9, 11, 593 }, { 9, 11, 634 }, { 10, 11, 44 }, { 10, 11, 173 }, - { 11, 11, 462 }, { 11, 11, 515 }, { 13, 11, 216 }, { 13, 11, 288 }, - { 14, 11, 400 }, { 8, 0, 483 }, { 7, 10, 262 }, { 6, 0, 1709 }, - { 5, 10, 620 }, { 4, 10, 34 }, { 5, 10, 574 }, { 7, 10, 279 }, - { 7, 10, 1624 }, { 8, 10, 601 }, { 9, 10, 170 }, { 19, 0, 119 }, - { 12, 11, 108 }, { 13, 11, 291 }, { 11, 0, 69 }, { 12, 0, 105 }, - { 12, 0, 117 }, { 13, 0, 213 }, { 14, 0, 13 }, { 14, 0, 62 }, - { 14, 0, 177 }, { 14, 0, 421 }, { 15, 0, 19 }, { 18, 0, 141 }, - { 9, 0, 309 }, { 11, 11, 278 }, { 14, 11, 73 }, { 7, 0, 608 }, - { 7, 0, 976 }, { 9, 0, 146 }, { 10, 0, 206 }, { 10, 0, 596 }, - { 13, 0, 218 }, { 14, 0, 153 }, { 5, 10, 332 }, { 6, 10, 261 }, - { 8, 10, 182 }, { 11, 10, 943 }, { 4, 11, 493 }, { 16, 11, 55 }, - { 6, 10, 1721 }, { 4, 0, 768 }, { 4, 10, 933 }, { 5, 10, 880 }, - { 7, 11, 555 }, { 7, 11, 1316 }, { 7, 11, 1412 }, { 7, 11, 1839 }, - { 9, 11, 192 }, { 9, 11, 589 }, { 11, 11, 241 }, { 11, 11, 676 }, - { 11, 11, 811 }, { 11, 11, 891 }, { 12, 11, 140 }, { 12, 11, 346 }, - { 12, 11, 479 }, { 13, 11, 30 }, { 13, 11, 49 }, { 13, 11, 381 }, - { 14, 11, 188 }, { 15, 11, 150 }, { 16, 11, 76 }, { 18, 11, 30 }, - { 20, 11, 52 }, { 4, 0, 518 }, { 7, 0, 1136 }, { 6, 11, 568 }, - { 7, 11, 112 }, { 7, 11, 1804 }, { 8, 11, 362 }, { 8, 11, 410 }, - { 8, 11, 830 }, { 9, 11, 514 }, { 11, 11, 649 }, { 14, 11, 157 }, - { 7, 11, 673 }, { 8, 0, 689 }, { 9, 0, 863 }, { 4, 0, 18 }, - { 7, 0, 145 }, { 7, 0, 444 }, { 7, 0, 1278 }, { 8, 0, 49 }, - { 8, 0, 400 }, { 9, 0, 71 }, { 9, 0, 250 }, { 10, 0, 459 }, - { 12, 0, 160 }, { 16, 0, 24 }, { 4, 11, 625 }, { 12, 0, 1020 }, - { 4, 0, 997 }, { 6, 0, 1946 }, { 6, 0, 1984 }, { 6, 0, 1998 }, - { 6, 11, 16 }, { 6, 11, 158 }, { 7, 11, 43 }, { 7, 11, 129 }, - { 7, 11, 181 }, { 8, 11, 276 }, { 8, 11, 377 }, { 10, 11, 523 }, - { 11, 11, 816 }, { 12, 11, 455 }, { 13, 11, 303 }, { 14, 11, 135 }, - { 5, 10, 812 }, { 6, 0, 658 }, { 4, 11, 1 }, { 7, 11, 1143 }, - { 7, 11, 1463 }, { 8, 11, 61 }, { 9, 11, 207 }, { 9, 11, 390 }, - { 9, 11, 467 }, { 11, 11, 836 }, { 22, 11, 26 }, { 12, 0, 106 }, - { 6, 0, 1827 }, { 10, 0, 931 }, { 18, 0, 166 }, { 20, 0, 114 }, - { 4, 10, 137 }, { 7, 10, 1178 }, { 7, 11, 1319 }, { 7, 10, 1520 }, - { 5, 0, 1010 }, { 4, 11, 723 }, { 5, 11, 895 }, { 7, 11, 1031 }, - { 8, 11, 199 }, { 8, 11, 340 }, { 9, 11, 153 }, { 9, 11, 215 }, - { 10, 11, 21 }, { 10, 11, 59 }, { 10, 11, 80 }, { 10, 11, 224 }, - { 11, 11, 229 }, { 11, 11, 652 }, { 12, 11, 192 }, { 13, 11, 146 }, - { 14, 11, 91 }, { 4, 11, 295 }, { 6, 11, 619 }, { 7, 11, 898 }, - { 7, 11, 1092 }, { 8, 11, 485 }, { 18, 11, 28 }, { 19, 11, 116 }, - { 9, 11, 51 }, { 6, 10, 1661 }, { 7, 10, 1975 }, { 7, 10, 2009 }, - { 7, 10, 2011 }, { 5, 11, 309 }, { 12, 11, 211 }, { 5, 0, 87 }, - { 7, 0, 313 }, { 7, 0, 1103 }, { 10, 0, 208 }, { 10, 0, 582 }, - { 11, 0, 389 }, { 11, 0, 813 }, { 12, 0, 385 }, { 13, 0, 286 }, - { 14, 0, 124 }, { 18, 0, 108 }, { 5, 11, 125 }, { 8, 11, 77 }, - { 10, 11, 15 }, { 4, 0, 267 }, { 5, 0, 703 }, { 9, 11, 155 }, - { 5, 11, 439 }, { 11, 11, 164 }, { 12, 11, 76 }, { 9, 0, 496 }, - { 5, 10, 89 }, { 7, 10, 1915 }, { 9, 10, 185 }, { 9, 10, 235 }, - { 10, 10, 64 }, { 10, 10, 270 }, { 10, 10, 403 }, { 10, 10, 469 }, - { 10, 10, 529 }, { 10, 10, 590 }, { 11, 10, 140 }, { 11, 10, 860 }, - { 13, 10, 1 }, { 13, 10, 422 }, { 14, 10, 341 }, { 14, 10, 364 }, - { 17, 10, 93 }, { 18, 10, 113 }, { 19, 10, 97 }, { 19, 10, 113 }, - { 5, 10, 695 }, { 7, 0, 1121 }, { 5, 10, 6 }, { 6, 10, 183 }, - { 7, 10, 680 }, { 7, 10, 978 }, { 7, 10, 1013 }, { 7, 10, 1055 }, - { 12, 10, 230 }, { 13, 10, 172 }, { 18, 10, 29 }, { 4, 11, 8 }, - { 7, 11, 1152 }, { 7, 11, 1153 }, { 7, 11, 1715 }, { 9, 11, 374 }, - { 10, 11, 478 }, { 11, 11, 648 }, { 7, 11, 1099 }, { 6, 10, 29 }, - { 11, 10, 63 }, { 4, 0, 561 }, { 10, 0, 249 }, { 11, 0, 209 }, - { 4, 0, 760 }, { 7, 11, 799 }, { 10, 11, 511 }, { 8, 11, 87 }, - { 9, 0, 154 }, { 12, 0, 485 }, { 8, 0, 255 }, { 4, 0, 323 }, - { 12, 0, 419 }, { 4, 10, 311 }, { 6, 10, 1740 }, { 4, 0, 368 }, - { 7, 0, 641 }, { 7, 10, 170 }, { 8, 10, 90 }, { 8, 10, 177 }, - { 8, 10, 415 }, { 11, 10, 714 }, { 14, 10, 281 }, { 4, 11, 69 }, - { 5, 11, 122 }, { 9, 11, 656 }, { 10, 11, 464 }, { 5, 11, 849 }, - { 6, 11, 1633 }, { 8, 0, 522 }, { 14, 0, 328 }, { 11, 10, 91 }, - { 13, 10, 129 }, { 15, 10, 101 }, { 17, 10, 125 }, { 7, 0, 562 }, - { 8, 0, 551 }, { 4, 10, 494 }, { 6, 10, 74 }, { 7, 10, 44 }, - { 11, 11, 499 }, { 12, 10, 17 }, { 15, 10, 5 }, { 20, 10, 11 }, - { 4, 10, 276 }, { 5, 10, 296 }, { 9, 0, 92 }, { 19, 0, 91 }, - { 4, 10, 7 }, { 5, 10, 90 }, { 5, 10, 158 }, { 6, 10, 542 }, - { 7, 10, 221 }, { 7, 10, 1574 }, { 9, 10, 490 }, { 10, 10, 540 }, - { 11, 10, 443 }, { 11, 10, 757 }, { 6, 0, 525 }, { 6, 0, 1976 }, - { 8, 0, 806 }, { 9, 0, 876 }, { 12, 0, 284 }, { 5, 11, 859 }, - { 7, 10, 588 }, { 7, 11, 1160 }, { 8, 11, 107 }, { 9, 10, 175 }, - { 9, 11, 291 }, { 9, 11, 439 }, { 10, 10, 530 }, { 10, 11, 663 }, - { 11, 11, 609 }, { 12, 11, 197 }, { 7, 11, 168 }, { 13, 11, 196 }, - { 13, 11, 237 }, { 11, 0, 958 }, { 5, 0, 594 }, { 7, 10, 580 }, - { 7, 10, 88 }, { 8, 10, 627 }, { 6, 0, 479 }, { 6, 0, 562 }, - { 7, 0, 1060 }, { 13, 0, 6 }, { 5, 10, 872 }, { 6, 10, 57 }, - { 7, 10, 471 }, { 9, 10, 447 }, { 9, 10, 454 }, { 8, 11, 413 }, - { 17, 11, 19 }, { 4, 11, 117 }, { 6, 11, 372 }, { 7, 11, 1905 }, - { 14, 11, 323 }, { 4, 11, 722 }, { 11, 11, 471 }, { 17, 0, 61 }, - { 5, 10, 31 }, { 6, 10, 614 }, { 8, 10, 330 }, { 12, 10, 477 }, - { 7, 10, 1200 }, { 10, 10, 460 }, { 6, 10, 424 }, { 7, 10, 1866 }, - { 6, 0, 1641 }, { 8, 0, 820 }, { 6, 0, 1556 }, { 6, 0, 1618 }, - { 9, 11, 5 }, { 12, 11, 216 }, { 12, 11, 294 }, { 12, 11, 298 }, - { 12, 11, 400 }, { 12, 11, 518 }, { 13, 11, 229 }, { 15, 11, 139 }, - { 15, 11, 155 }, { 16, 11, 79 }, { 4, 0, 302 }, { 7, 0, 1766 }, - { 5, 10, 13 }, { 6, 10, 142 }, { 6, 0, 148 }, { 7, 0, 1313 }, - { 7, 10, 116 }, { 8, 10, 322 }, { 8, 10, 755 }, { 9, 10, 548 }, - { 10, 10, 714 }, { 11, 10, 884 }, { 13, 10, 324 }, { 9, 0, 676 }, - { 9, 11, 88 }, { 11, 11, 270 }, { 5, 11, 12 }, { 7, 11, 375 }, - { 9, 11, 438 }, { 6, 0, 1674 }, { 7, 10, 1472 }, { 7, 10, 1554 }, - { 11, 0, 178 }, { 7, 10, 1071 }, { 7, 10, 1541 }, { 7, 10, 1767 }, - { 7, 10, 1806 }, { 11, 10, 162 }, { 11, 10, 242 }, { 12, 10, 605 }, - { 15, 10, 26 }, { 16, 10, 44 }, { 6, 0, 389 }, { 7, 0, 149 }, - { 9, 0, 142 }, { 10, 0, 94 }, { 12, 11, 71 }, { 17, 10, 115 }, - { 6, 0, 8 }, { 7, 0, 1881 }, { 8, 0, 91 }, { 11, 11, 966 }, - { 12, 11, 287 }, { 13, 11, 342 }, { 13, 11, 402 }, { 15, 11, 110 }, - { 15, 11, 163 }, { 4, 11, 258 }, { 8, 11, 639 }, { 6, 11, 22 }, - { 7, 11, 903 }, { 10, 11, 577 }, { 5, 11, 681 }, { 7, 10, 1111 }, - { 7, 11, 1286 }, { 9, 0, 112 }, { 8, 10, 1 }, { 10, 10, 326 }, - { 5, 10, 488 }, { 6, 10, 527 }, { 7, 10, 489 }, { 7, 10, 1636 }, - { 8, 10, 121 }, { 8, 10, 144 }, { 8, 10, 359 }, { 9, 10, 193 }, - { 9, 10, 241 }, { 9, 10, 336 }, { 9, 10, 882 }, { 11, 10, 266 }, - { 11, 10, 372 }, { 11, 10, 944 }, { 12, 10, 401 }, { 12, 10, 641 }, - { 4, 11, 664 }, { 5, 11, 804 }, { 6, 0, 747 }, { 6, 0, 1015 }, - { 7, 0, 1746 }, { 9, 10, 31 }, { 10, 10, 244 }, { 10, 10, 699 }, - { 12, 10, 149 }, { 13, 10, 497 }, { 5, 10, 377 }, { 7, 0, 24 }, - { 6, 0, 1352 }, { 5, 11, 32 }, { 17, 10, 101 }, { 7, 0, 1530 }, - { 10, 0, 158 }, { 13, 0, 13 }, { 13, 0, 137 }, { 13, 0, 258 }, - { 14, 0, 111 }, { 14, 0, 225 }, { 14, 0, 253 }, { 14, 0, 304 }, - { 14, 0, 339 }, { 14, 0, 417 }, { 18, 0, 33 }, { 4, 0, 503 }, - { 7, 0, 1661 }, { 5, 0, 130 }, { 6, 0, 845 }, { 7, 0, 1314 }, - { 9, 0, 610 }, { 10, 0, 718 }, { 11, 0, 601 }, { 11, 0, 819 }, - { 11, 0, 946 }, { 12, 0, 536 }, { 10, 0, 149 }, { 11, 0, 280 }, - { 14, 0, 336 }, { 6, 0, 1401 }, { 7, 0, 1946 }, { 8, 0, 663 }, - { 16, 0, 8 }, { 6, 0, 1607 }, { 7, 10, 2023 }, { 4, 11, 289 }, - { 7, 11, 629 }, { 7, 11, 1698 }, { 7, 11, 1711 }, { 12, 11, 215 }, - { 6, 11, 450 }, { 8, 11, 109 }, { 10, 0, 882 }, { 10, 0, 883 }, - { 10, 0, 914 }, { 10, 0, 928 }, { 5, 10, 843 }, { 8, 11, 705 }, - { 4, 10, 554 }, { 5, 10, 536 }, { 5, 0, 417 }, { 9, 10, 79 }, - { 11, 10, 625 }, { 17, 10, 7 }, { 7, 11, 1238 }, { 14, 11, 37 }, - { 4, 0, 392 }, { 7, 0, 1597 }, { 5, 0, 433 }, { 9, 0, 633 }, - { 11, 0, 629 }, { 4, 10, 424 }, { 7, 10, 336 }, { 8, 10, 785 }, - { 6, 11, 355 }, { 6, 0, 234 }, { 7, 0, 769 }, { 9, 0, 18 }, - { 10, 0, 358 }, { 4, 10, 896 }, { 6, 10, 1777 }, { 10, 11, 323 }, - { 7, 0, 140 }, { 7, 0, 1950 }, { 8, 0, 680 }, { 11, 0, 817 }, - { 19, 0, 88 }, { 7, 0, 1222 }, { 10, 0, 386 }, { 11, 11, 908 }, - { 11, 0, 249 }, { 12, 0, 313 }, { 16, 0, 66 }, { 17, 0, 26 }, - { 6, 0, 5 }, { 7, 10, 750 }, { 9, 10, 223 }, { 11, 10, 27 }, - { 11, 10, 466 }, { 12, 10, 624 }, { 14, 10, 265 }, { 18, 10, 61 }, - { 6, 11, 26 }, { 6, 0, 1216 }, { 5, 0, 963 }, { 6, 0, 1773 }, - { 4, 11, 414 }, { 5, 11, 467 }, { 9, 11, 654 }, { 10, 11, 451 }, - { 12, 11, 59 }, { 13, 11, 375 }, { 7, 11, 17 }, { 4, 10, 603 }, - { 5, 10, 661 }, { 4, 10, 11 }, { 6, 10, 128 }, { 7, 10, 231 }, - { 7, 10, 1533 }, { 10, 10, 725 }, { 7, 11, 955 }, { 7, 0, 180 }, - { 8, 0, 509 }, { 8, 0, 792 }, { 4, 10, 476 }, { 4, 0, 1002 }, - { 5, 11, 538 }, { 7, 10, 1807 }, { 4, 0, 931 }, { 7, 0, 943 }, - { 11, 0, 614 }, { 12, 0, 747 }, { 7, 0, 1837 }, { 9, 10, 20 }, - { 10, 10, 324 }, { 10, 10, 807 }, { 11, 10, 488 }, { 6, 0, 641 }, - { 6, 11, 280 }, { 10, 11, 502 }, { 11, 11, 344 }, { 12, 11, 38 }, - { 5, 11, 45 }, { 7, 11, 1161 }, { 11, 11, 448 }, { 11, 11, 880 }, - { 13, 11, 139 }, { 13, 11, 407 }, { 15, 11, 16 }, { 17, 11, 95 }, - { 18, 11, 66 }, { 18, 11, 88 }, { 18, 11, 123 }, { 21, 11, 7 }, - { 9, 0, 280 }, { 10, 0, 134 }, { 22, 0, 22 }, { 23, 0, 5 }, - { 23, 0, 29 }, { 8, 11, 777 }, { 4, 0, 90 }, { 5, 0, 545 }, - { 7, 0, 754 }, { 9, 0, 186 }, { 10, 0, 72 }, { 10, 0, 782 }, - { 11, 0, 577 }, { 11, 0, 610 }, { 11, 0, 960 }, { 12, 0, 354 }, - { 12, 0, 362 }, { 12, 0, 595 }, { 4, 11, 410 }, { 7, 11, 521 }, - { 7, 11, 1778 }, { 5, 10, 112 }, { 6, 10, 103 }, { 6, 10, 150 }, - { 10, 10, 356 }, { 4, 0, 742 }, { 7, 0, 151 }, { 9, 0, 329 }, - { 11, 0, 254 }, { 8, 0, 853 }, { 8, 0, 881 }, { 8, 0, 911 }, - { 8, 0, 912 }, { 10, 0, 872 }, { 12, 0, 741 }, { 12, 0, 742 }, - { 24, 0, 18 }, { 4, 11, 573 }, { 8, 11, 655 }, { 6, 0, 921 }, - { 6, 0, 934 }, { 9, 0, 187 }, { 10, 0, 36 }, { 11, 0, 1016 }, - { 17, 0, 44 }, { 18, 0, 64 }, { 7, 0, 833 }, { 8, 0, 517 }, - { 4, 0, 506 }, { 5, 0, 295 }, { 7, 0, 1680 }, { 4, 10, 708 }, - { 8, 10, 15 }, { 9, 10, 50 }, { 9, 10, 386 }, { 11, 10, 18 }, - { 11, 10, 529 }, { 12, 10, 228 }, { 7, 0, 251 }, { 7, 0, 1701 }, - { 8, 0, 436 }, { 4, 10, 563 }, { 7, 10, 592 }, { 7, 10, 637 }, - { 7, 10, 770 }, { 8, 10, 463 }, { 9, 10, 60 }, { 9, 10, 335 }, - { 9, 10, 904 }, { 10, 10, 73 }, { 11, 10, 434 }, { 12, 10, 585 }, - { 13, 10, 331 }, { 18, 10, 110 }, { 20, 10, 60 }, { 4, 10, 502 }, - { 8, 0, 584 }, { 6, 10, 347 }, { 10, 10, 161 }, { 7, 0, 987 }, - { 9, 0, 688 }, { 10, 0, 522 }, { 11, 0, 788 }, { 12, 0, 137 }, - { 12, 0, 566 }, { 14, 0, 9 }, { 14, 0, 24 }, { 14, 0, 64 }, - { 7, 11, 899 }, { 14, 11, 325 }, { 4, 0, 214 }, { 5, 0, 500 }, - { 5, 10, 102 }, { 6, 10, 284 }, { 7, 10, 1079 }, { 7, 10, 1423 }, - { 7, 10, 1702 }, { 8, 10, 470 }, { 9, 10, 554 }, { 9, 10, 723 }, - { 11, 10, 333 }, { 7, 10, 246 }, { 7, 10, 840 }, { 6, 10, 10 }, - { 8, 10, 571 }, { 9, 10, 739 }, { 15, 10, 91 }, { 5, 10, 626 }, - { 18, 0, 195 }, { 6, 0, 1775 }, { 7, 0, 389 }, { 7, 0, 700 }, - { 7, 0, 940 }, { 8, 0, 514 }, { 9, 0, 116 }, { 9, 0, 535 }, - { 10, 0, 118 }, { 11, 0, 107 }, { 11, 0, 148 }, { 11, 0, 922 }, - { 12, 0, 254 }, { 12, 0, 421 }, { 14, 0, 238 }, { 5, 10, 18 }, - { 6, 10, 526 }, { 13, 10, 24 }, { 13, 10, 110 }, { 19, 10, 5 }, - { 19, 10, 44 }, { 4, 0, 743 }, { 11, 0, 292 }, { 4, 10, 309 }, - { 5, 10, 462 }, { 7, 10, 970 }, { 7, 10, 1097 }, { 22, 10, 30 }, - { 22, 10, 33 }, { 11, 11, 338 }, { 7, 11, 1598 }, { 7, 0, 1283 }, - { 9, 0, 227 }, { 11, 0, 325 }, { 11, 0, 408 }, { 14, 0, 180 }, - { 18, 0, 47 }, { 4, 0, 953 }, { 6, 0, 1805 }, { 6, 0, 1814 }, - { 6, 0, 1862 }, { 12, 0, 774 }, { 6, 11, 611 }, { 7, 11, 1733 }, - { 7, 11, 1464 }, { 5, 0, 81 }, { 7, 0, 146 }, { 7, 0, 1342 }, - { 8, 0, 53 }, { 8, 0, 561 }, { 8, 0, 694 }, { 8, 0, 754 }, - { 9, 0, 115 }, { 9, 0, 179 }, { 9, 0, 894 }, { 10, 0, 462 }, - { 10, 0, 813 }, { 11, 0, 230 }, { 11, 0, 657 }, { 11, 0, 699 }, - { 11, 0, 748 }, { 12, 0, 119 }, { 12, 0, 200 }, { 12, 0, 283 }, - { 14, 0, 273 }, { 5, 0, 408 }, { 6, 0, 789 }, { 6, 0, 877 }, - { 6, 0, 1253 }, { 6, 0, 1413 }, { 9, 0, 747 }, { 6, 10, 1704 }, - { 7, 11, 663 }, { 6, 0, 1910 }, { 6, 0, 1915 }, { 6, 0, 1923 }, - { 9, 0, 913 }, { 9, 0, 928 }, { 9, 0, 950 }, { 9, 0, 954 }, - { 9, 0, 978 }, { 9, 0, 993 }, { 12, 0, 812 }, { 12, 0, 819 }, - { 12, 0, 831 }, { 12, 0, 833 }, { 12, 0, 838 }, { 12, 0, 909 }, - { 12, 0, 928 }, { 12, 0, 931 }, { 12, 0, 950 }, { 15, 0, 186 }, - { 15, 0, 187 }, { 15, 0, 195 }, { 15, 0, 196 }, { 15, 0, 209 }, - { 15, 0, 215 }, { 15, 0, 236 }, { 15, 0, 241 }, { 15, 0, 249 }, - { 15, 0, 253 }, { 18, 0, 180 }, { 18, 0, 221 }, { 18, 0, 224 }, - { 18, 0, 227 }, { 18, 0, 229 }, { 21, 0, 60 }, { 7, 0, 1826 }, - { 7, 0, 1938 }, { 11, 0, 490 }, { 18, 0, 143 }, { 5, 10, 86 }, - { 7, 10, 743 }, { 9, 10, 85 }, { 10, 10, 281 }, { 10, 10, 432 }, - { 12, 10, 251 }, { 13, 10, 118 }, { 14, 10, 378 }, { 5, 10, 524 }, - { 5, 10, 744 }, { 13, 11, 442 }, { 10, 10, 107 }, { 12, 10, 436 }, - { 7, 11, 503 }, { 6, 0, 1162 }, { 4, 10, 927 }, { 7, 0, 30 }, - { 8, 0, 86 }, { 8, 0, 315 }, { 8, 0, 700 }, { 9, 0, 576 }, - { 9, 0, 858 }, { 10, 0, 414 }, { 11, 0, 310 }, { 11, 0, 888 }, - { 11, 0, 904 }, { 12, 0, 361 }, { 13, 0, 248 }, { 13, 0, 371 }, - { 14, 0, 142 }, { 12, 10, 670 }, { 18, 10, 94 }, { 6, 0, 721 }, - { 4, 11, 113 }, { 5, 11, 163 }, { 5, 11, 735 }, { 7, 11, 1009 }, - { 7, 10, 1149 }, { 9, 11, 9 }, { 9, 10, 156 }, { 9, 11, 771 }, - { 12, 11, 90 }, { 13, 11, 138 }, { 13, 11, 410 }, { 15, 11, 128 }, - { 10, 0, 839 }, { 5, 10, 778 }, { 9, 0, 617 }, { 5, 10, 502 }, - { 8, 10, 196 }, { 10, 10, 283 }, { 11, 10, 406 }, { 6, 0, 428 }, - { 7, 0, 524 }, { 8, 0, 169 }, { 8, 0, 234 }, { 9, 0, 480 }, - { 10, 0, 646 }, { 5, 10, 855 }, { 6, 0, 1648 }, { 7, 0, 1205 }, - { 10, 0, 637 }, { 7, 0, 1596 }, { 4, 11, 935 }, { 5, 11, 823 }, - { 5, 11, 269 }, { 7, 11, 434 }, { 7, 11, 891 }, { 8, 11, 339 }, - { 9, 11, 702 }, { 11, 11, 594 }, { 11, 11, 718 }, { 17, 11, 100 }, - { 7, 11, 878 }, { 9, 11, 485 }, { 13, 11, 264 }, { 4, 0, 266 }, - { 8, 0, 4 }, { 9, 0, 39 }, { 10, 0, 166 }, { 11, 0, 918 }, - { 12, 0, 635 }, { 20, 0, 10 }, { 22, 0, 27 }, { 22, 0, 43 }, - { 22, 0, 52 }, { 6, 11, 1713 }, { 7, 10, 1400 }, { 9, 10, 446 }, - { 10, 10, 45 }, { 7, 11, 900 }, { 4, 0, 862 }, { 6, 0, 1554 }, - { 7, 11, 1033 }, { 19, 0, 16 }, { 19, 11, 16 }, { 7, 11, 1208 }, - { 7, 0, 157 }, { 8, 0, 279 }, { 6, 0, 604 }, { 8, 0, 391 }, - { 13, 10, 455 }, { 15, 10, 99 }, { 15, 10, 129 }, { 16, 10, 68 }, - { 7, 10, 172 }, { 7, 0, 945 }, { 11, 0, 713 }, { 11, 0, 744 }, - { 4, 0, 973 }, { 10, 0, 877 }, { 10, 0, 937 }, { 10, 0, 938 }, - { 12, 0, 711 }, { 11, 0, 1022 }, { 4, 10, 568 }, { 14, 11, 143 }, - { 4, 0, 567 }, { 9, 0, 859 }, { 4, 10, 732 }, { 7, 0, 1846 }, - { 8, 0, 628 }, { 8, 10, 733 }, { 5, 0, 762 }, { 4, 10, 428 }, - { 7, 10, 1789 }, { 10, 0, 784 }, { 13, 0, 191 }, { 7, 10, 2015 }, - { 12, 10, 665 }, { 5, 0, 298 }, { 7, 0, 633 }, { 7, 0, 905 }, - { 7, 0, 909 }, { 7, 0, 1538 }, { 9, 0, 767 }, { 12, 0, 636 }, - { 10, 10, 806 }, { 4, 0, 795 }, { 11, 0, 301 }, { 7, 0, 1970 }, - { 5, 11, 625 }, { 7, 11, 1617 }, { 7, 11, 275 }, { 7, 11, 37 }, - { 8, 11, 425 }, { 8, 11, 693 }, { 9, 11, 720 }, { 10, 11, 380 }, - { 10, 11, 638 }, { 11, 11, 273 }, { 11, 11, 307 }, { 11, 11, 473 }, - { 12, 11, 61 }, { 15, 11, 43 }, { 7, 11, 198 }, { 6, 0, 1236 }, - { 7, 0, 369 }, { 12, 0, 644 }, { 12, 0, 645 }, { 16, 0, 90 }, - { 19, 0, 15 }, { 21, 0, 27 }, { 6, 0, 71 }, { 7, 0, 845 }, - { 8, 0, 160 }, { 9, 0, 318 }, { 6, 10, 1623 }, { 6, 10, 1681 }, - { 6, 0, 1447 }, { 6, 0, 1255 }, { 10, 0, 735 }, { 8, 0, 76 }, - { 4, 11, 168 }, { 6, 10, 1748 }, { 8, 10, 715 }, { 9, 10, 802 }, - { 10, 10, 46 }, { 10, 10, 819 }, { 13, 10, 308 }, { 14, 10, 351 }, - { 14, 10, 363 }, { 18, 10, 67 }, { 7, 11, 91 }, { 6, 0, 474 }, - { 4, 10, 63 }, { 5, 10, 347 }, { 5, 10, 749 }, { 10, 0, 841 }, - { 5, 10, 366 }, { 6, 0, 836 }, { 4, 11, 225 }, { 7, 0, 1622 }, - { 7, 10, 89 }, { 12, 0, 735 }, { 6, 0, 1601 }, { 10, 11, 145 }, - { 6, 0, 1390 }, { 9, 0, 804 }, { 14, 0, 394 }, { 6, 11, 15 }, - { 7, 11, 70 }, { 10, 11, 240 }, { 19, 11, 93 }, { 6, 0, 96 }, - { 7, 0, 1426 }, { 4, 0, 651 }, { 5, 0, 289 }, { 7, 11, 956 }, - { 7, 10, 977 }, { 7, 11, 1157 }, { 7, 11, 1506 }, { 7, 11, 1606 }, - { 7, 11, 1615 }, { 7, 11, 1619 }, { 7, 11, 1736 }, { 7, 11, 1775 }, - { 8, 11, 590 }, { 9, 11, 324 }, { 9, 11, 736 }, { 9, 11, 774 }, - { 9, 11, 776 }, { 9, 11, 784 }, { 10, 11, 567 }, { 10, 11, 708 }, - { 11, 11, 518 }, { 11, 11, 613 }, { 11, 11, 695 }, { 11, 11, 716 }, - { 11, 11, 739 }, { 11, 11, 770 }, { 11, 11, 771 }, { 11, 11, 848 }, - { 11, 11, 857 }, { 11, 11, 931 }, { 11, 11, 947 }, { 12, 11, 326 }, - { 12, 11, 387 }, { 12, 11, 484 }, { 12, 11, 528 }, { 12, 11, 552 }, - { 12, 11, 613 }, { 13, 11, 189 }, { 13, 11, 256 }, { 13, 11, 340 }, - { 13, 11, 432 }, { 13, 11, 436 }, { 13, 11, 440 }, { 13, 11, 454 }, - { 14, 11, 174 }, { 14, 11, 220 }, { 14, 11, 284 }, { 14, 11, 390 }, - { 17, 11, 121 }, { 7, 0, 688 }, { 8, 0, 35 }, { 9, 0, 511 }, - { 10, 0, 767 }, { 19, 0, 118 }, { 6, 0, 667 }, { 4, 0, 513 }, - { 5, 10, 824 }, { 5, 10, 941 }, { 7, 10, 440 }, { 8, 10, 230 }, - { 11, 10, 106 }, { 6, 0, 2034 }, { 7, 11, 1399 }, { 15, 11, 66 }, - { 7, 11, 1529 }, { 4, 11, 145 }, { 6, 11, 176 }, { 7, 11, 395 }, - { 9, 11, 562 }, { 16, 11, 28 }, { 4, 11, 501 }, { 4, 0, 704 }, - { 6, 0, 1524 }, { 7, 0, 1078 }, { 6, 11, 464 }, { 6, 11, 509 }, - { 10, 11, 82 }, { 20, 11, 91 }, { 23, 11, 13 }, { 4, 0, 720 }, - { 5, 0, 306 }, { 5, 0, 431 }, { 7, 0, 1196 }, { 4, 10, 914 }, - { 5, 10, 800 }, { 5, 10, 852 }, { 7, 11, 1189 }, { 10, 0, 54 }, - { 13, 10, 115 }, { 7, 10, 564 }, { 14, 10, 168 }, { 5, 0, 464 }, - { 6, 0, 236 }, { 7, 0, 696 }, { 7, 0, 914 }, { 7, 0, 1108 }, - { 7, 0, 1448 }, { 9, 0, 15 }, { 9, 0, 564 }, { 10, 0, 14 }, - { 12, 0, 565 }, { 13, 0, 449 }, { 14, 0, 53 }, { 15, 0, 13 }, - { 16, 0, 64 }, { 17, 0, 41 }, { 4, 10, 918 }, { 5, 10, 876 }, - { 6, 0, 1418 }, { 6, 10, 1764 }, { 4, 10, 92 }, { 5, 10, 274 }, - { 6, 0, 907 }, { 4, 11, 114 }, { 8, 10, 501 }, { 9, 11, 492 }, - { 13, 11, 462 }, { 14, 11, 215 }, { 4, 11, 77 }, { 5, 11, 361 }, - { 6, 11, 139 }, { 6, 11, 401 }, { 6, 11, 404 }, { 7, 11, 413 }, - { 7, 11, 715 }, { 7, 11, 1716 }, { 11, 11, 279 }, { 12, 11, 179 }, - { 12, 11, 258 }, { 13, 11, 244 }, { 14, 11, 358 }, { 6, 0, 1767 }, - { 12, 0, 194 }, { 17, 0, 107 }, { 6, 11, 1717 }, { 5, 10, 743 }, - { 14, 11, 329 }, { 4, 10, 49 }, { 7, 10, 280 }, { 7, 10, 1633 }, - { 5, 0, 840 }, { 7, 11, 1061 }, { 8, 11, 82 }, { 11, 11, 250 }, - { 12, 11, 420 }, { 13, 11, 184 }, { 7, 11, 724 }, { 6, 0, 900 }, - { 8, 10, 47 }, { 6, 0, 1436 }, { 16, 11, 0 }, { 6, 0, 675 }, - { 7, 0, 1008 }, { 7, 0, 1560 }, { 9, 0, 642 }, { 11, 0, 236 }, - { 14, 0, 193 }, { 5, 10, 272 }, { 5, 10, 908 }, { 5, 10, 942 }, - { 8, 10, 197 }, { 9, 10, 47 }, { 11, 10, 538 }, { 11, 10, 742 }, - { 4, 0, 68 }, { 5, 0, 628 }, { 5, 0, 634 }, { 6, 0, 386 }, - { 7, 0, 794 }, { 8, 0, 273 }, { 9, 0, 563 }, { 10, 0, 105 }, - { 10, 0, 171 }, { 11, 0, 94 }, { 11, 0, 354 }, { 7, 10, 1911 }, - { 9, 10, 891 }, { 4, 0, 95 }, { 6, 0, 1297 }, { 6, 0, 1604 }, - { 7, 0, 416 }, { 11, 0, 830 }, { 6, 11, 513 }, { 7, 11, 1052 }, - { 7, 0, 731 }, { 13, 0, 20 }, { 15, 0, 11 }, { 9, 11, 899 }, - { 10, 0, 850 }, { 12, 0, 697 }, { 4, 0, 662 }, { 7, 11, 1417 }, - { 12, 11, 382 }, { 17, 11, 48 }, { 24, 11, 12 }, { 5, 0, 736 }, - { 4, 0, 861 }, { 4, 10, 407 }, { 4, 10, 560 }, { 13, 10, 490 }, - { 6, 11, 545 }, { 7, 11, 565 }, { 7, 11, 1669 }, { 10, 11, 114 }, - { 11, 11, 642 }, { 12, 11, 618 }, { 6, 0, 871 }, { 6, 0, 1000 }, - { 5, 0, 864 }, { 10, 0, 648 }, { 11, 0, 671 }, { 15, 0, 46 }, - { 5, 11, 5 }, { 5, 0, 928 }, { 11, 0, 90 }, { 13, 0, 7 }, - { 4, 10, 475 }, { 11, 10, 35 }, { 13, 10, 71 }, { 13, 10, 177 }, - { 14, 10, 422 }, { 8, 0, 332 }, { 7, 11, 192 }, { 6, 0, 1055 }, - { 8, 11, 763 }, { 11, 0, 986 }, { 12, 0, 682 }, { 7, 0, 76 }, - { 8, 0, 44 }, { 9, 0, 884 }, { 10, 0, 580 }, { 11, 0, 399 }, - { 11, 0, 894 }, { 15, 0, 122 }, { 7, 11, 1237 }, { 7, 10, 636 }, - { 11, 0, 300 }, { 6, 10, 222 }, { 7, 10, 1620 }, { 8, 10, 409 }, - { 9, 10, 693 }, { 4, 11, 87 }, { 5, 11, 250 }, { 10, 11, 601 }, - { 13, 11, 298 }, { 13, 11, 353 }, { 13, 11, 376 }, { 5, 0, 518 }, - { 10, 0, 340 }, { 11, 0, 175 }, { 21, 0, 16 }, { 12, 0, 771 }, - { 6, 0, 1108 }, { 9, 0, 831 }, { 4, 0, 836 }, { 7, 0, 1852 }, - { 4, 0, 957 }, { 6, 0, 1804 }, { 8, 0, 842 }, { 8, 0, 843 }, - { 8, 0, 851 }, { 8, 0, 855 }, { 12, 0, 767 }, { 7, 11, 814 }, - { 4, 11, 57 }, { 7, 11, 1195 }, { 7, 11, 1438 }, { 7, 11, 1548 }, - { 7, 11, 1835 }, { 7, 11, 1904 }, { 9, 11, 757 }, { 10, 11, 604 }, - { 11, 11, 519 }, { 5, 10, 882 }, { 10, 0, 246 }, { 4, 0, 934 }, - { 5, 0, 202 }, { 8, 0, 610 }, { 7, 11, 1897 }, { 12, 11, 290 }, - { 13, 11, 80 }, { 13, 11, 437 }, { 17, 11, 74 }, { 8, 0, 96 }, - { 9, 0, 36 }, { 10, 0, 607 }, { 10, 0, 804 }, { 10, 0, 832 }, - { 11, 0, 423 }, { 11, 0, 442 }, { 12, 0, 309 }, { 14, 0, 199 }, - { 15, 0, 90 }, { 17, 0, 110 }, { 4, 10, 426 }, { 7, 0, 654 }, - { 8, 0, 240 }, { 6, 10, 58 }, { 7, 10, 745 }, { 7, 10, 1969 }, - { 8, 10, 675 }, { 9, 10, 479 }, { 9, 10, 731 }, { 10, 10, 330 }, - { 10, 10, 593 }, { 10, 10, 817 }, { 11, 10, 32 }, { 11, 10, 133 }, - { 11, 10, 221 }, { 17, 10, 68 }, { 9, 0, 13 }, { 9, 0, 398 }, - { 9, 0, 727 }, { 10, 0, 75 }, { 10, 0, 184 }, { 10, 0, 230 }, - { 10, 0, 564 }, { 10, 0, 569 }, { 11, 0, 973 }, { 12, 0, 70 }, - { 12, 0, 189 }, { 13, 0, 57 }, { 13, 0, 257 }, { 4, 11, 209 }, - { 7, 11, 902 }, { 7, 0, 391 }, { 9, 10, 538 }, { 6, 0, 403 }, - { 6, 11, 303 }, { 7, 11, 335 }, { 7, 11, 1437 }, { 7, 11, 1668 }, - { 8, 11, 553 }, { 8, 11, 652 }, { 8, 11, 656 }, { 9, 11, 558 }, - { 11, 11, 743 }, { 21, 11, 18 }, { 4, 11, 559 }, { 11, 0, 75 }, - { 14, 0, 267 }, { 6, 0, 815 }, { 13, 11, 2 }, { 13, 0, 366 }, - { 9, 0, 631 }, { 5, 11, 1017 }, { 5, 0, 345 }, { 7, 0, 1016 }, - { 5, 11, 709 }, { 6, 11, 1745 }, { 5, 10, 566 }, { 7, 0, 952 }, - { 6, 10, 48 }, { 9, 10, 139 }, { 10, 10, 399 }, { 11, 10, 469 }, - { 12, 10, 634 }, { 13, 10, 223 }, { 5, 0, 673 }, { 9, 0, 850 }, - { 7, 11, 8 }, { 8, 11, 206 }, { 6, 0, 662 }, { 21, 0, 35 }, - { 4, 0, 287 }, { 5, 0, 1018 }, { 6, 10, 114 }, { 7, 10, 1224 }, - { 7, 10, 1556 }, { 8, 10, 3 }, { 8, 10, 576 }, { 9, 10, 267 }, - { 4, 0, 884 }, { 5, 0, 34 }, { 10, 0, 724 }, { 12, 0, 444 }, - { 13, 0, 354 }, { 18, 0, 32 }, { 23, 0, 24 }, { 23, 0, 31 }, - { 24, 0, 5 }, { 5, 10, 933 }, { 4, 11, 776 }, { 10, 0, 151 }, - { 8, 0, 427 }, { 6, 0, 382 }, { 4, 0, 329 }, { 9, 0, 846 }, - { 10, 0, 827 }, { 10, 11, 33 }, { 9, 0, 279 }, { 10, 0, 407 }, - { 14, 0, 84 }, { 22, 0, 18 }, { 7, 11, 1297 }, { 8, 11, 406 }, - { 4, 0, 906 }, { 8, 0, 366 }, { 6, 0, 843 }, { 6, 0, 1443 }, - { 7, 0, 1372 }, { 10, 0, 992 }, { 4, 0, 123 }, { 5, 0, 605 }, - { 7, 0, 1509 }, { 8, 0, 36 }, { 4, 0, 649 }, { 8, 11, 175 }, - { 10, 11, 168 }, { 10, 11, 573 }, { 5, 0, 767 }, { 6, 0, 1018 }, - { 7, 11, 1305 }, { 12, 10, 30 }, { 13, 10, 148 }, { 14, 10, 87 }, - { 14, 10, 182 }, { 16, 10, 42 }, { 20, 10, 70 }, { 6, 11, 607 }, - { 4, 0, 273 }, { 5, 0, 658 }, { 5, 0, 995 }, { 6, 0, 72 }, - { 11, 11, 174 }, { 10, 0, 483 }, { 12, 0, 368 }, { 7, 10, 56 }, - { 7, 10, 1989 }, { 8, 10, 337 }, { 8, 10, 738 }, { 9, 10, 600 }, - { 13, 10, 447 }, { 14, 10, 92 }, { 5, 11, 784 }, { 10, 10, 666 }, - { 7, 0, 1345 }, { 11, 11, 882 }, { 6, 0, 1293 }, { 5, 0, 589 }, - { 6, 0, 1988 }, { 5, 0, 117 }, { 6, 0, 514 }, { 6, 0, 541 }, - { 7, 0, 1164 }, { 7, 0, 1436 }, { 8, 0, 220 }, { 8, 0, 648 }, - { 10, 0, 688 }, { 11, 0, 560 }, { 8, 0, 379 }, { 5, 0, 686 }, - { 7, 10, 866 }, { 7, 10, 1163 }, { 4, 10, 328 }, { 9, 11, 14 }, - { 9, 11, 441 }, { 10, 11, 306 }, { 11, 11, 9 }, { 4, 10, 101 }, - { 7, 10, 1171 }, { 5, 10, 833 }, { 8, 10, 744 }, { 5, 11, 161 }, - { 7, 11, 839 }, { 7, 11, 887 }, { 7, 0, 196 }, { 10, 0, 765 }, - { 11, 0, 347 }, { 11, 0, 552 }, { 11, 0, 790 }, { 12, 0, 263 }, - { 13, 0, 246 }, { 13, 0, 270 }, { 13, 0, 395 }, { 14, 0, 176 }, - { 14, 0, 190 }, { 14, 0, 398 }, { 14, 0, 412 }, { 15, 0, 32 }, - { 15, 0, 63 }, { 16, 0, 88 }, { 19, 0, 105 }, { 6, 10, 9 }, - { 6, 10, 397 }, { 7, 10, 53 }, { 7, 10, 1742 }, { 10, 10, 632 }, - { 11, 10, 828 }, { 12, 10, 146 }, { 5, 0, 381 }, { 7, 0, 1792 }, - { 6, 0, 1452 }, { 7, 11, 429 }, { 8, 0, 367 }, { 10, 0, 760 }, - { 14, 0, 79 }, { 20, 0, 17 }, { 24, 0, 0 }, { 7, 0, 616 }, - { 10, 0, 413 }, { 11, 10, 417 }, { 12, 10, 223 }, { 12, 10, 265 }, - { 7, 11, 1611 }, { 13, 11, 14 }, { 15, 11, 44 }, { 19, 11, 13 }, - { 20, 11, 76 }, { 7, 0, 1229 }, { 6, 0, 120 }, { 7, 0, 1188 }, - { 7, 0, 1710 }, { 8, 0, 286 }, { 9, 0, 667 }, { 11, 0, 592 }, - { 11, 0, 730 }, { 7, 11, 1814 }, { 7, 0, 1146 }, { 4, 10, 186 }, - { 5, 10, 157 }, { 8, 10, 168 }, { 10, 10, 6 }, { 4, 0, 352 }, - { 7, 0, 687 }, { 4, 0, 192 }, { 5, 0, 49 }, { 6, 0, 200 }, - { 6, 0, 293 }, { 6, 0, 1696 }, { 7, 0, 1151 }, { 5, 10, 875 }, - { 5, 10, 773 }, { 5, 10, 991 }, { 6, 10, 1635 }, { 6, 10, 1788 }, - { 7, 10, 111 }, { 8, 10, 581 }, { 6, 0, 935 }, { 6, 0, 1151 }, - { 6, 0, 1050 }, { 4, 0, 650 }, { 4, 0, 147 }, { 11, 0, 194 }, - { 12, 0, 62 }, { 12, 0, 88 }, { 11, 11, 194 }, { 12, 11, 62 }, - { 12, 11, 88 }, { 6, 0, 339 }, { 7, 0, 923 }, { 6, 10, 1747 }, - { 7, 11, 643 }, { 8, 11, 236 }, { 5, 0, 934 }, { 7, 10, 1364 }, - { 7, 10, 1907 }, { 13, 10, 158 }, { 4, 10, 659 }, { 4, 10, 404 }, - { 7, 10, 675 }, { 7, 11, 581 }, { 9, 11, 644 }, { 9, 11, 699 }, - { 13, 0, 211 }, { 14, 0, 133 }, { 14, 0, 204 }, { 15, 0, 64 }, - { 15, 0, 69 }, { 15, 0, 114 }, { 16, 0, 10 }, { 19, 0, 23 }, - { 19, 0, 35 }, { 19, 0, 39 }, { 19, 0, 51 }, { 19, 0, 71 }, - { 19, 0, 75 }, { 24, 0, 15 }, { 5, 10, 391 }, { 5, 11, 54 }, - { 7, 11, 1513 }, { 7, 0, 222 }, { 8, 0, 341 }, { 5, 10, 540 }, - { 6, 10, 1697 }, { 6, 10, 78 }, { 4, 11, 744 }, { 8, 0, 293 }, - { 9, 11, 701 }, { 7, 11, 930 }, { 10, 11, 402 }, { 10, 11, 476 }, - { 13, 11, 452 }, { 18, 11, 55 }, { 19, 11, 104 }, { 4, 0, 637 }, - { 5, 10, 460 }, { 8, 11, 50 }, { 9, 11, 624 }, { 4, 11, 572 }, - { 6, 0, 1159 }, { 4, 10, 199 }, { 11, 10, 34 }, { 6, 0, 847 }, - { 6, 10, 388 }, { 6, 11, 43 }, { 7, 11, 38 }, { 8, 11, 248 }, - { 9, 11, 504 }, { 10, 11, 513 }, { 9, 0, 683 }, { 4, 10, 511 }, - { 6, 10, 608 }, { 9, 10, 333 }, { 10, 10, 602 }, { 11, 10, 441 }, - { 11, 10, 723 }, { 11, 10, 976 }, { 12, 10, 357 }, { 9, 0, 867 }, - { 10, 0, 837 }, { 6, 0, 944 }, { 7, 11, 326 }, { 7, 0, 1809 }, - { 5, 10, 938 }, { 7, 11, 783 }, { 8, 10, 707 }, { 5, 11, 766 }, - { 5, 11, 363 }, { 6, 0, 170 }, { 7, 0, 1080 }, { 8, 0, 395 }, - { 8, 0, 487 }, { 13, 0, 147 }, { 6, 11, 258 }, { 12, 11, 409 }, - { 4, 0, 535 }, { 8, 0, 618 }, { 5, 11, 249 }, { 20, 11, 82 }, - { 6, 0, 1379 }, { 21, 11, 15 }, { 7, 0, 1625 }, { 22, 0, 23 }, - { 5, 11, 393 }, { 6, 11, 378 }, { 7, 11, 1981 }, { 9, 11, 32 }, - { 9, 11, 591 }, { 10, 11, 685 }, { 10, 11, 741 }, { 14, 11, 382 }, - { 5, 11, 788 }, { 7, 11, 1968 }, { 10, 11, 19 }, { 11, 11, 911 }, - { 7, 11, 1401 }, { 7, 11, 1476 }, { 4, 11, 61 }, { 5, 11, 58 }, - { 5, 11, 171 }, { 5, 11, 635 }, { 5, 11, 683 }, { 5, 11, 700 }, - { 6, 11, 291 }, { 6, 11, 566 }, { 7, 11, 1650 }, { 11, 11, 523 }, - { 12, 11, 273 }, { 12, 11, 303 }, { 15, 11, 39 }, { 15, 11, 111 }, - { 6, 10, 469 }, { 7, 10, 1709 }, { 10, 10, 515 }, { 4, 0, 778 }, - { 6, 11, 589 }, { 4, 0, 46 }, { 5, 0, 811 }, { 6, 0, 1679 }, - { 6, 0, 1714 }, { 7, 0, 2032 }, { 7, 0, 1458 }, { 9, 0, 407 }, - { 11, 0, 15 }, { 12, 0, 651 }, { 21, 0, 37 }, { 7, 0, 938 }, - { 4, 10, 500 }, { 6, 0, 34 }, { 7, 0, 69 }, { 7, 0, 1089 }, - { 7, 0, 1281 }, { 8, 0, 708 }, { 8, 0, 721 }, { 9, 0, 363 }, - { 20, 0, 98 }, { 10, 11, 231 }, { 19, 11, 124 }, { 7, 11, 726 }, - { 24, 11, 9 }, { 5, 10, 68 }, { 6, 10, 383 }, { 8, 11, 583 }, - { 4, 11, 917 }, { 5, 11, 1005 }, { 11, 10, 216 }, { 11, 10, 340 }, - { 7, 11, 1675 }, { 8, 0, 441 }, { 10, 0, 314 }, { 15, 0, 3 }, - { 4, 11, 919 }, { 4, 10, 337 }, { 6, 10, 353 }, { 7, 10, 1934 }, - { 8, 10, 488 }, { 9, 10, 429 }, { 7, 0, 889 }, { 7, 10, 1795 }, - { 8, 10, 259 }, { 9, 10, 135 }, { 9, 10, 177 }, { 9, 10, 860 }, - { 10, 10, 825 }, { 11, 10, 115 }, { 11, 10, 370 }, { 11, 10, 405 }, - { 11, 10, 604 }, { 12, 10, 10 }, { 12, 10, 667 }, { 12, 10, 669 }, - { 13, 10, 76 }, { 14, 10, 310 }, { 15, 10, 76 }, { 15, 10, 147 }, - { 20, 10, 23 }, { 4, 10, 15 }, { 4, 11, 255 }, { 5, 10, 22 }, - { 5, 11, 302 }, { 6, 11, 132 }, { 6, 10, 244 }, { 7, 10, 40 }, - { 7, 11, 128 }, { 7, 10, 200 }, { 7, 11, 283 }, { 7, 10, 906 }, - { 7, 10, 1199 }, { 7, 11, 1299 }, { 9, 10, 616 }, { 10, 11, 52 }, - { 10, 11, 514 }, { 10, 10, 716 }, { 11, 10, 635 }, { 11, 10, 801 }, - { 11, 11, 925 }, { 12, 10, 458 }, { 13, 11, 92 }, { 14, 11, 309 }, - { 4, 0, 462 }, { 9, 11, 173 }, { 7, 10, 1735 }, { 8, 0, 525 }, - { 5, 10, 598 }, { 7, 10, 791 }, { 8, 10, 108 }, { 9, 10, 123 }, - { 5, 0, 73 }, { 6, 0, 23 }, { 6, 0, 338 }, { 4, 0, 676 }, - { 4, 10, 683 }, { 7, 0, 725 }, { 8, 0, 498 }, { 11, 0, 268 }, - { 12, 0, 21 }, { 23, 0, 7 }, { 7, 0, 773 }, { 4, 10, 155 }, - { 7, 10, 1689 }, { 4, 0, 164 }, { 5, 0, 730 }, { 5, 10, 151 }, - { 5, 10, 741 }, { 6, 11, 210 }, { 7, 10, 498 }, { 7, 10, 870 }, - { 7, 10, 1542 }, { 12, 10, 213 }, { 14, 10, 36 }, { 14, 10, 391 }, - { 17, 10, 111 }, { 18, 10, 6 }, { 18, 10, 46 }, { 18, 10, 151 }, - { 19, 10, 36 }, { 20, 10, 32 }, { 20, 10, 56 }, { 20, 10, 69 }, - { 20, 10, 102 }, { 21, 10, 4 }, { 22, 10, 8 }, { 22, 10, 10 }, - { 22, 10, 14 }, { 22, 10, 31 }, { 4, 10, 624 }, { 7, 10, 1752 }, - { 4, 0, 583 }, { 9, 0, 936 }, { 15, 0, 214 }, { 18, 0, 199 }, - { 24, 0, 26 }, { 6, 11, 588 }, { 7, 0, 1462 }, { 11, 0, 659 }, - { 4, 11, 284 }, { 6, 11, 223 }, { 5, 0, 220 }, { 11, 0, 803 }, - { 4, 0, 544 }, { 4, 10, 492 }, { 5, 10, 451 }, { 16, 0, 98 }, - { 20, 0, 119 }, { 4, 11, 218 }, { 7, 11, 526 }, { 15, 11, 137 }, - { 7, 10, 835 }, { 4, 11, 270 }, { 5, 11, 192 }, { 6, 11, 332 }, - { 7, 11, 1322 }, { 13, 11, 9 }, { 13, 10, 70 }, { 14, 11, 104 }, - { 14, 11, 311 }, { 4, 10, 539 }, { 12, 11, 661 }, { 5, 0, 176 }, - { 6, 0, 437 }, { 6, 0, 564 }, { 11, 0, 181 }, { 13, 0, 183 }, - { 7, 0, 1192 }, { 6, 10, 113 }, { 7, 10, 436 }, { 8, 10, 718 }, - { 7, 10, 520 }, { 7, 0, 1878 }, { 12, 11, 196 }, { 7, 11, 379 }, - { 8, 11, 481 }, { 9, 11, 377 }, { 5, 11, 1003 }, { 6, 11, 149 }, - { 9, 11, 746 }, { 8, 11, 262 }, { 9, 11, 627 }, { 10, 11, 18 }, - { 11, 11, 214 }, { 11, 11, 404 }, { 11, 11, 457 }, { 11, 11, 780 }, - { 11, 11, 849 }, { 11, 11, 913 }, { 13, 11, 330 }, { 13, 11, 401 }, - { 14, 11, 200 }, { 21, 0, 26 }, { 8, 11, 304 }, { 4, 11, 142 }, - { 7, 0, 944 }, { 4, 0, 790 }, { 5, 0, 273 }, { 6, 0, 394 }, - { 6, 0, 855 }, { 4, 0, 135 }, { 6, 0, 127 }, { 7, 0, 1185 }, - { 7, 0, 1511 }, { 8, 0, 613 }, { 11, 0, 5 }, { 12, 0, 336 }, - { 12, 0, 495 }, { 12, 0, 586 }, { 12, 0, 660 }, { 12, 0, 668 }, - { 14, 0, 385 }, { 15, 0, 118 }, { 17, 0, 20 }, { 18, 0, 98 }, - { 6, 0, 230 }, { 9, 0, 752 }, { 18, 0, 109 }, { 12, 10, 610 }, - { 13, 10, 431 }, { 16, 10, 59 }, { 7, 0, 1954 }, { 7, 11, 925 }, - { 4, 11, 471 }, { 5, 11, 51 }, { 6, 11, 602 }, { 8, 11, 484 }, - { 10, 11, 195 }, { 12, 11, 159 }, { 4, 10, 307 }, { 8, 11, 688 }, - { 4, 11, 697 }, { 7, 11, 812 }, { 7, 11, 1261 }, { 7, 11, 1360 }, - { 9, 11, 632 }, { 12, 11, 352 }, { 5, 0, 162 }, { 8, 0, 68 }, - { 5, 10, 964 }, { 4, 0, 654 }, { 8, 11, 212 }, { 4, 0, 156 }, - { 7, 0, 998 }, { 7, 0, 1045 }, { 7, 0, 1860 }, { 9, 0, 48 }, - { 9, 0, 692 }, { 11, 0, 419 }, { 11, 0, 602 }, { 5, 11, 221 }, - { 4, 11, 373 }, { 5, 11, 283 }, { 6, 11, 480 }, { 7, 11, 609 }, - { 14, 11, 216 }, { 4, 0, 240 }, { 6, 11, 192 }, { 9, 11, 793 }, - { 17, 11, 55 }, { 4, 10, 75 }, { 5, 10, 180 }, { 6, 10, 500 }, - { 7, 10, 58 }, { 7, 10, 710 }, { 10, 10, 645 }, { 4, 11, 132 }, - { 5, 11, 69 }, { 5, 10, 649 }, { 7, 11, 1242 }, { 6, 10, 276 }, - { 7, 10, 282 }, { 7, 10, 879 }, { 7, 10, 924 }, { 8, 10, 459 }, - { 9, 10, 599 }, { 9, 10, 754 }, { 11, 10, 574 }, { 12, 10, 128 }, - { 12, 10, 494 }, { 13, 10, 52 }, { 13, 10, 301 }, { 15, 10, 30 }, - { 15, 10, 132 }, { 4, 10, 200 }, { 4, 11, 111 }, { 7, 11, 302 }, - { 9, 0, 197 }, { 10, 0, 300 }, { 12, 0, 473 }, { 13, 0, 90 }, - { 13, 0, 405 }, { 4, 11, 767 }, { 6, 11, 42 }, { 7, 11, 1416 }, - { 7, 11, 1590 }, { 7, 11, 2005 }, { 8, 11, 131 }, { 8, 11, 466 }, - { 9, 11, 672 }, { 13, 11, 252 }, { 20, 11, 103 }, { 8, 0, 958 }, - { 8, 0, 999 }, { 10, 0, 963 }, { 10, 0, 1001 }, { 7, 10, 1621 }, - { 7, 0, 858 }, { 4, 0, 606 }, { 9, 11, 444 }, { 6, 11, 44 }, - { 8, 11, 368 }, { 11, 11, 172 }, { 4, 11, 570 }, { 5, 11, 120 }, - { 11, 11, 624 }, { 7, 0, 1978 }, { 8, 0, 676 }, { 6, 10, 225 }, - { 9, 10, 211 }, { 7, 0, 972 }, { 11, 0, 102 }, { 8, 10, 687 }, - { 6, 11, 227 }, { 7, 11, 1589 }, { 8, 10, 58 }, { 9, 10, 724 }, - { 11, 10, 809 }, { 13, 10, 113 }, { 17, 10, 72 }, { 4, 0, 361 }, - { 5, 0, 315 }, { 4, 0, 461 }, { 6, 10, 345 }, { 7, 10, 1247 }, - { 4, 0, 472 }, { 8, 10, 767 }, { 8, 10, 803 }, { 9, 10, 301 }, - { 9, 10, 903 }, { 7, 11, 1333 }, { 7, 11, 477 }, { 7, 10, 1949 }, - { 8, 10, 674 }, { 6, 0, 905 }, { 10, 0, 747 }, { 5, 0, 155 }, - { 6, 10, 259 }, { 7, 0, 163 }, { 8, 0, 319 }, { 9, 0, 402 }, - { 10, 0, 24 }, { 10, 0, 681 }, { 11, 0, 200 }, { 12, 0, 253 }, - { 12, 0, 410 }, { 14, 0, 219 }, { 5, 0, 475 }, { 7, 0, 1780 }, - { 9, 0, 230 }, { 11, 0, 297 }, { 11, 0, 558 }, { 14, 0, 322 }, - { 19, 0, 76 }, { 6, 11, 1667 }, { 7, 11, 2036 }, { 10, 11, 600 }, - { 8, 10, 254 }, { 6, 0, 848 }, { 7, 0, 1956 }, { 6, 11, 511 }, - { 12, 11, 132 }, { 5, 11, 568 }, { 6, 11, 138 }, { 7, 11, 1293 }, - { 6, 0, 631 }, { 9, 0, 838 }, { 21, 0, 36 }, { 4, 11, 565 }, - { 8, 11, 23 }, { 8, 11, 827 }, { 5, 0, 944 }, { 6, 0, 1769 }, - { 4, 0, 144 }, { 6, 0, 842 }, { 6, 0, 1400 }, { 4, 11, 922 }, - { 5, 11, 1023 }, { 5, 10, 248 }, { 9, 10, 800 }, { 10, 10, 693 }, - { 11, 10, 482 }, { 11, 10, 734 }, { 11, 10, 789 }, { 7, 11, 1002 }, - { 11, 11, 145 }, { 4, 10, 116 }, { 5, 10, 95 }, { 5, 10, 445 }, - { 7, 10, 1688 }, { 8, 10, 29 }, { 9, 10, 272 }, { 11, 10, 509 }, - { 11, 10, 915 }, { 14, 0, 369 }, { 18, 0, 72 }, { 7, 10, 1641 }, - { 4, 11, 740 }, { 5, 10, 543 }, { 12, 11, 116 }, { 6, 0, 247 }, - { 9, 0, 555 }, { 5, 10, 181 }, { 8, 10, 41 }, { 5, 10, 657 }, - { 8, 0, 996 }, { 10, 10, 709 }, { 7, 0, 189 }, { 8, 10, 202 }, - { 10, 10, 536 }, { 8, 11, 402 }, { 4, 11, 716 }, { 13, 11, 31 }, - { 10, 0, 280 }, { 10, 0, 797 }, { 9, 10, 423 }, { 12, 10, 89 }, - { 8, 10, 113 }, { 9, 10, 877 }, { 10, 10, 554 }, { 11, 10, 83 }, - { 12, 10, 136 }, { 19, 10, 109 }, { 5, 10, 976 }, { 7, 0, 746 }, - { 4, 10, 206 }, { 8, 0, 526 }, { 11, 0, 345 }, { 8, 0, 1017 }, - { 8, 11, 152 }, { 9, 11, 53 }, { 9, 11, 268 }, { 9, 11, 901 }, - { 10, 11, 518 }, { 10, 11, 829 }, { 11, 11, 188 }, { 13, 11, 74 }, - { 14, 11, 46 }, { 15, 11, 17 }, { 15, 11, 33 }, { 17, 11, 40 }, - { 18, 11, 36 }, { 19, 11, 20 }, { 22, 11, 1 }, { 24, 11, 2 }, - { 5, 11, 736 }, { 8, 11, 532 }, { 5, 0, 428 }, { 10, 0, 651 }, - { 7, 11, 681 }, { 7, 0, 1162 }, { 7, 0, 327 }, { 13, 0, 230 }, - { 17, 0, 113 }, { 8, 10, 226 }, { 10, 10, 537 }, { 11, 10, 570 }, - { 11, 10, 605 }, { 11, 10, 799 }, { 11, 10, 804 }, { 12, 10, 85 }, - { 12, 10, 516 }, { 12, 10, 623 }, { 12, 11, 677 }, { 13, 10, 361 }, - { 14, 10, 77 }, { 14, 10, 78 }, { 19, 10, 110 }, { 4, 0, 792 }, - { 7, 0, 1717 }, { 10, 0, 546 }, { 4, 10, 769 }, { 4, 11, 684 }, - { 8, 11, 384 }, { 4, 10, 551 }, { 6, 0, 1203 }, { 9, 10, 57 }, - { 9, 10, 459 }, { 10, 10, 425 }, { 11, 10, 119 }, { 12, 10, 184 }, - { 12, 10, 371 }, { 13, 10, 358 }, { 17, 10, 51 }, { 5, 0, 672 }, - { 5, 10, 814 }, { 8, 10, 10 }, { 9, 10, 421 }, { 9, 10, 729 }, - { 10, 10, 609 }, { 11, 10, 689 }, { 10, 0, 189 }, { 6, 10, 624 }, - { 7, 11, 110 }, { 7, 11, 188 }, { 8, 11, 290 }, { 8, 11, 591 }, - { 9, 11, 382 }, { 9, 11, 649 }, { 11, 11, 71 }, { 11, 11, 155 }, - { 11, 11, 313 }, { 12, 11, 5 }, { 13, 11, 325 }, { 14, 11, 287 }, - { 5, 0, 99 }, { 6, 0, 1053 }, { 7, 0, 298 }, { 7, 11, 360 }, - { 7, 11, 425 }, { 9, 11, 66 }, { 9, 11, 278 }, { 10, 11, 644 }, - { 4, 0, 397 }, { 8, 0, 555 }, { 9, 10, 269 }, { 4, 10, 528 }, - { 4, 11, 900 }, { 5, 11, 861 }, { 6, 0, 1157 }, { 5, 11, 254 }, - { 7, 11, 985 }, { 8, 11, 73 }, { 7, 11, 1959 }, { 8, 11, 683 }, - { 12, 0, 398 }, { 20, 0, 39 }, { 21, 0, 11 }, { 22, 0, 41 }, - { 4, 0, 485 }, { 7, 0, 353 }, { 7, 0, 1523 }, { 6, 0, 366 }, - { 7, 0, 1384 }, { 7, 0, 1601 }, { 10, 0, 787 }, { 9, 0, 282 }, - { 5, 10, 104 }, { 6, 10, 173 }, { 7, 10, 1631 }, { 11, 11, 146 }, - { 4, 0, 157 }, { 5, 0, 471 }, { 6, 0, 941 }, { 4, 11, 725 }, - { 7, 0, 1336 }, { 8, 10, 138 }, { 8, 10, 342 }, { 9, 10, 84 }, - { 10, 10, 193 }, { 11, 10, 883 }, { 12, 10, 359 }, { 6, 11, 196 }, - { 8, 0, 116 }, { 5, 11, 831 }, { 6, 0, 787 }, { 6, 10, 95 }, - { 6, 10, 406 }, { 10, 10, 409 }, { 10, 10, 447 }, { 11, 10, 44 }, - { 12, 10, 100 }, { 5, 0, 160 }, { 7, 0, 363 }, { 7, 0, 589 }, - { 10, 0, 170 }, { 13, 0, 55 }, { 6, 0, 1815 }, { 4, 0, 866 }, - { 6, 0, 889 }, { 6, 0, 1067 }, { 6, 0, 1183 }, { 4, 11, 321 }, - { 6, 11, 569 }, { 5, 11, 848 }, { 6, 11, 66 }, { 4, 11, 36 }, - { 6, 10, 1636 }, { 7, 11, 1387 }, { 10, 11, 205 }, { 11, 11, 755 }, - { 13, 11, 271 }, { 4, 0, 689 }, { 9, 0, 820 }, { 4, 10, 282 }, - { 7, 10, 1034 }, { 11, 10, 398 }, { 11, 10, 634 }, { 12, 10, 1 }, - { 12, 10, 79 }, { 12, 10, 544 }, { 14, 10, 237 }, { 17, 10, 10 }, - { 18, 10, 20 }, { 4, 0, 108 }, { 7, 0, 804 }, { 11, 0, 498 }, - { 4, 11, 887 }, { 6, 0, 1119 }, { 7, 11, 620 }, { 6, 11, 165 }, - { 10, 11, 388 }, { 5, 0, 244 }, { 5, 10, 499 }, { 6, 10, 476 }, - { 7, 10, 600 }, { 7, 10, 888 }, { 7, 10, 1096 }, { 12, 0, 609 }, - { 7, 0, 1005 }, { 4, 0, 412 }, { 5, 0, 581 }, { 4, 11, 719 }, - { 7, 11, 155 }, { 7, 10, 296 }, { 7, 10, 596 }, { 8, 10, 560 }, - { 8, 10, 586 }, { 9, 10, 612 }, { 11, 10, 304 }, { 12, 10, 46 }, - { 13, 10, 89 }, { 14, 10, 112 }, { 17, 10, 122 }, { 4, 0, 895 }, - { 5, 0, 772 }, { 14, 11, 307 }, { 7, 0, 1898 }, { 4, 0, 926 }, - { 5, 0, 983 }, { 4, 11, 353 }, { 6, 11, 146 }, { 6, 11, 1789 }, - { 7, 11, 288 }, { 7, 11, 990 }, { 7, 11, 1348 }, { 9, 11, 665 }, - { 9, 11, 898 }, { 11, 11, 893 }, { 14, 11, 212 }, { 4, 0, 538 }, - { 5, 11, 532 }, { 6, 0, 294 }, { 7, 0, 1267 }, { 8, 0, 624 }, - { 13, 0, 496 }, { 7, 0, 1325 }, { 4, 11, 45 }, { 7, 11, 1257 }, - { 10, 0, 301 }, { 9, 0, 298 }, { 12, 0, 291 }, { 13, 0, 276 }, - { 14, 0, 6 }, { 17, 0, 18 }, { 21, 0, 32 }, { 7, 10, 1599 }, - { 7, 10, 1723 }, { 8, 10, 79 }, { 8, 10, 106 }, { 8, 10, 190 }, - { 8, 10, 302 }, { 8, 10, 383 }, { 8, 10, 713 }, { 9, 10, 119 }, - { 9, 10, 233 }, { 9, 10, 419 }, { 9, 10, 471 }, { 10, 10, 181 }, - { 10, 10, 406 }, { 11, 10, 57 }, { 11, 10, 85 }, { 11, 10, 120 }, - { 11, 10, 177 }, { 11, 10, 296 }, { 11, 10, 382 }, { 11, 10, 454 }, - { 11, 10, 758 }, { 11, 10, 999 }, { 12, 10, 27 }, { 12, 10, 131 }, - { 12, 10, 245 }, { 12, 10, 312 }, { 12, 10, 446 }, { 12, 10, 454 }, - { 13, 10, 98 }, { 13, 10, 426 }, { 13, 10, 508 }, { 14, 10, 163 }, - { 14, 10, 272 }, { 14, 10, 277 }, { 14, 10, 370 }, { 15, 10, 95 }, - { 15, 10, 138 }, { 15, 10, 167 }, { 17, 10, 38 }, { 20, 10, 96 }, - { 4, 0, 757 }, { 6, 0, 1263 }, { 4, 0, 820 }, { 6, 10, 1759 }, - { 5, 0, 722 }, { 8, 11, 816 }, { 10, 10, 372 }, { 17, 10, 16 }, - { 6, 0, 1039 }, { 4, 0, 991 }, { 6, 0, 2028 }, { 5, 10, 258 }, - { 7, 0, 1875 }, { 11, 0, 124 }, { 6, 11, 559 }, { 6, 11, 1691 }, - { 7, 11, 586 }, { 5, 0, 324 }, { 7, 0, 881 }, { 8, 10, 134 }, - { 9, 10, 788 }, { 12, 10, 438 }, { 7, 11, 1823 }, { 11, 11, 693 }, - { 6, 0, 1348 }, { 6, 0, 1545 }, { 6, 0, 911 }, { 4, 0, 954 }, - { 8, 0, 329 }, { 8, 0, 414 }, { 7, 10, 1948 }, { 7, 10, 2004 }, - { 5, 0, 517 }, { 6, 10, 439 }, { 7, 10, 780 }, { 7, 10, 1040 }, - { 4, 0, 816 }, { 5, 10, 1 }, { 6, 10, 81 }, { 10, 10, 520 }, - { 9, 0, 713 }, { 10, 0, 222 }, { 5, 10, 482 }, { 8, 10, 98 }, - { 10, 10, 700 }, { 10, 10, 822 }, { 11, 10, 302 }, { 11, 10, 778 }, - { 12, 10, 50 }, { 12, 10, 127 }, { 12, 10, 396 }, { 13, 10, 62 }, - { 13, 10, 328 }, { 14, 10, 122 }, { 19, 10, 72 }, { 9, 0, 33 }, - { 5, 10, 2 }, { 7, 10, 1494 }, { 8, 10, 589 }, { 6, 10, 512 }, - { 7, 10, 797 }, { 8, 10, 253 }, { 9, 10, 77 }, { 10, 10, 1 }, - { 10, 11, 108 }, { 10, 10, 129 }, { 10, 10, 225 }, { 11, 11, 116 }, - { 11, 10, 118 }, { 11, 10, 226 }, { 11, 10, 251 }, { 11, 10, 430 }, - { 11, 10, 701 }, { 11, 10, 974 }, { 11, 10, 982 }, { 12, 10, 64 }, - { 12, 10, 260 }, { 12, 10, 488 }, { 12, 10, 690 }, { 6, 11, 456 }, - { 5, 11, 925 }, { 5, 0, 150 }, { 7, 0, 106 }, { 7, 0, 774 }, - { 8, 0, 603 }, { 9, 0, 593 }, { 9, 0, 634 }, { 10, 0, 44 }, - { 10, 0, 173 }, { 11, 0, 462 }, { 11, 0, 515 }, { 13, 0, 216 }, - { 13, 0, 288 }, { 14, 0, 400 }, { 9, 10, 347 }, { 5, 0, 748 }, - { 6, 0, 553 }, { 12, 0, 108 }, { 13, 0, 291 }, { 7, 0, 420 }, - { 4, 10, 12 }, { 7, 10, 522 }, { 7, 10, 809 }, { 8, 10, 797 }, - { 13, 10, 88 }, { 6, 11, 193 }, { 7, 11, 240 }, { 7, 11, 1682 }, - { 10, 11, 51 }, { 10, 11, 640 }, { 11, 11, 410 }, { 13, 11, 82 }, - { 14, 11, 247 }, { 14, 11, 331 }, { 14, 11, 377 }, { 5, 10, 528 }, - { 7, 0, 1777 }, { 4, 0, 493 }, { 16, 0, 55 }, { 8, 11, 633 }, - { 11, 0, 81 }, { 6, 0, 980 }, { 8, 0, 321 }, { 20, 10, 109 }, - { 5, 10, 266 }, { 9, 10, 290 }, { 9, 10, 364 }, { 10, 10, 293 }, - { 11, 10, 606 }, { 14, 10, 45 }, { 6, 0, 568 }, { 7, 0, 112 }, - { 7, 0, 1804 }, { 8, 0, 362 }, { 8, 0, 410 }, { 8, 0, 830 }, - { 9, 0, 514 }, { 11, 0, 649 }, { 14, 0, 157 }, { 4, 0, 74 }, - { 6, 0, 510 }, { 6, 10, 594 }, { 9, 10, 121 }, { 10, 10, 49 }, - { 10, 10, 412 }, { 11, 10, 834 }, { 6, 0, 838 }, { 8, 10, 748 }, - { 4, 10, 466 }, { 4, 0, 625 }, { 7, 11, 1443 }, { 4, 11, 237 }, - { 7, 11, 514 }, { 9, 10, 378 }, { 13, 10, 162 }, { 6, 0, 16 }, - { 6, 0, 158 }, { 7, 0, 43 }, { 7, 0, 129 }, { 7, 0, 181 }, - { 8, 0, 276 }, { 8, 0, 377 }, { 10, 0, 523 }, { 11, 0, 816 }, - { 12, 0, 455 }, { 13, 0, 303 }, { 14, 0, 135 }, { 7, 0, 281 }, - { 4, 0, 1 }, { 7, 0, 1143 }, { 7, 0, 1463 }, { 8, 0, 61 }, - { 9, 0, 207 }, { 9, 0, 390 }, { 9, 0, 467 }, { 11, 0, 836 }, - { 6, 11, 392 }, { 7, 11, 65 }, { 7, 11, 2019 }, { 4, 10, 667 }, - { 4, 0, 723 }, { 5, 0, 895 }, { 7, 0, 1031 }, { 8, 0, 199 }, - { 8, 0, 340 }, { 9, 0, 153 }, { 9, 0, 215 }, { 10, 0, 21 }, - { 10, 0, 59 }, { 10, 0, 80 }, { 10, 0, 224 }, { 10, 0, 838 }, - { 11, 0, 229 }, { 11, 0, 652 }, { 12, 0, 192 }, { 13, 0, 146 }, - { 14, 0, 91 }, { 4, 0, 295 }, { 9, 0, 51 }, { 9, 11, 222 }, - { 10, 11, 43 }, { 11, 11, 900 }, { 5, 0, 309 }, { 12, 0, 211 }, - { 5, 0, 125 }, { 8, 0, 77 }, { 10, 0, 15 }, { 8, 11, 604 }, - { 10, 0, 789 }, { 5, 0, 173 }, { 4, 10, 39 }, { 7, 10, 1843 }, - { 8, 10, 407 }, { 11, 10, 144 }, { 12, 10, 523 }, { 10, 11, 265 }, - { 5, 0, 439 }, { 4, 10, 510 }, { 7, 0, 648 }, { 7, 0, 874 }, - { 11, 0, 164 }, { 12, 0, 76 }, { 18, 0, 9 }, { 7, 10, 1980 }, - { 10, 10, 487 }, { 10, 10, 809 }, { 12, 0, 111 }, { 14, 0, 294 }, - { 19, 0, 45 }, { 13, 10, 260 }, { 18, 10, 63 }, { 5, 11, 549 }, - { 6, 10, 570 }, { 4, 0, 8 }, { 7, 0, 1152 }, { 7, 0, 1153 }, - { 7, 0, 1715 }, { 9, 0, 374 }, { 10, 0, 478 }, { 11, 0, 648 }, - { 7, 0, 1099 }, { 5, 0, 575 }, { 6, 0, 354 }, { 7, 0, 701 }, - { 7, 11, 36 }, { 8, 11, 201 }, { 8, 11, 605 }, { 4, 10, 787 }, - { 8, 11, 156 }, { 6, 0, 518 }, { 21, 11, 13 }, { 12, 11, 224 }, - { 6, 0, 702 }, { 4, 10, 516 }, { 5, 11, 724 }, { 10, 11, 305 }, - { 11, 11, 151 }, { 12, 11, 33 }, { 12, 11, 121 }, { 12, 11, 381 }, - { 17, 11, 3 }, { 17, 11, 27 }, { 17, 11, 78 }, { 18, 11, 18 }, - { 19, 11, 54 }, { 21, 11, 5 }, { 8, 0, 87 }, { 4, 11, 523 }, - { 5, 11, 638 }, { 11, 10, 887 }, { 14, 10, 365 }, { 14, 10, 375 }, - { 10, 0, 438 }, { 8, 10, 821 }, { 7, 11, 1908 }, { 6, 11, 242 }, - { 7, 11, 227 }, { 7, 11, 1581 }, { 8, 11, 104 }, { 9, 11, 113 }, - { 9, 11, 220 }, { 9, 11, 427 }, { 10, 11, 74 }, { 10, 11, 239 }, - { 11, 11, 579 }, { 11, 11, 1023 }, { 13, 11, 4 }, { 13, 11, 204 }, - { 13, 11, 316 }, { 18, 11, 95 }, { 20, 11, 86 }, { 4, 0, 69 }, - { 5, 0, 122 }, { 5, 0, 849 }, { 6, 0, 1633 }, { 9, 0, 656 }, - { 10, 0, 464 }, { 7, 0, 1802 }, { 4, 10, 10 }, { 11, 10, 786 }, - { 7, 11, 861 }, { 11, 0, 499 }, { 7, 0, 476 }, { 7, 0, 1592 }, - { 10, 0, 87 }, { 5, 10, 684 }, { 4, 0, 840 }, { 6, 10, 27 }, - { 14, 0, 283 }, { 6, 0, 1620 }, { 7, 11, 1328 }, { 8, 11, 494 }, - { 5, 0, 859 }, { 7, 0, 1160 }, { 8, 0, 107 }, { 9, 0, 291 }, - { 9, 0, 439 }, { 10, 0, 663 }, { 11, 0, 609 }, { 12, 0, 197 }, - { 7, 11, 1306 }, { 8, 11, 505 }, { 9, 11, 482 }, { 10, 11, 126 }, - { 11, 11, 225 }, { 12, 11, 347 }, { 12, 11, 449 }, { 13, 11, 19 }, - { 14, 11, 218 }, { 5, 11, 268 }, { 10, 11, 764 }, { 12, 11, 120 }, - { 13, 11, 39 }, { 17, 11, 127 }, { 17, 10, 56 }, { 7, 11, 1672 }, - { 10, 11, 472 }, { 11, 11, 189 }, { 15, 11, 51 }, { 6, 10, 342 }, - { 6, 10, 496 }, { 8, 10, 275 }, { 9, 10, 206 }, { 5, 0, 600 }, - { 4, 0, 117 }, { 6, 0, 372 }, { 7, 0, 1905 }, { 14, 0, 323 }, - { 4, 10, 909 }, { 5, 10, 940 }, { 7, 11, 1471 }, { 4, 10, 891 }, - { 4, 0, 722 }, { 11, 0, 471 }, { 4, 11, 384 }, { 7, 11, 1022 }, - { 4, 10, 687 }, { 9, 0, 5 }, { 12, 0, 216 }, { 12, 0, 294 }, - { 12, 0, 298 }, { 12, 0, 400 }, { 12, 0, 518 }, { 13, 0, 229 }, - { 15, 0, 139 }, { 7, 11, 1703 }, { 7, 11, 1602 }, { 10, 11, 698 }, - { 12, 11, 212 }, { 13, 11, 307 }, { 6, 10, 41 }, { 13, 10, 160 }, - { 7, 11, 1077 }, { 9, 11, 159 }, { 11, 11, 28 }, { 12, 11, 603 }, - { 4, 0, 514 }, { 7, 0, 1304 }, { 10, 0, 477 }, { 6, 0, 1774 }, - { 9, 0, 88 }, { 11, 0, 270 }, { 5, 0, 12 }, { 7, 0, 375 }, - { 9, 0, 438 }, { 6, 10, 1718 }, { 4, 11, 515 }, { 8, 10, 778 }, - { 8, 11, 632 }, { 8, 11, 697 }, { 9, 11, 854 }, { 6, 0, 362 }, - { 6, 0, 997 }, { 18, 0, 51 }, { 7, 0, 816 }, { 7, 0, 1241 }, - { 9, 0, 283 }, { 9, 0, 520 }, { 10, 0, 213 }, { 10, 0, 307 }, - { 10, 0, 463 }, { 10, 0, 671 }, { 10, 0, 746 }, { 11, 0, 401 }, - { 11, 0, 794 }, { 12, 0, 517 }, { 18, 0, 107 }, { 19, 0, 115 }, - { 5, 10, 115 }, { 22, 11, 28 }, { 4, 11, 136 }, { 5, 11, 551 }, - { 14, 10, 314 }, { 4, 0, 258 }, { 6, 0, 22 }, { 7, 0, 903 }, - { 7, 0, 1963 }, { 8, 0, 639 }, { 10, 0, 577 }, { 5, 0, 681 }, - { 8, 0, 782 }, { 13, 0, 130 }, { 17, 0, 84 }, { 5, 10, 193 }, - { 12, 10, 178 }, { 9, 11, 17 }, { 10, 11, 291 }, { 7, 11, 1287 }, - { 9, 11, 44 }, { 10, 11, 552 }, { 10, 11, 642 }, { 11, 11, 839 }, - { 12, 11, 274 }, { 12, 11, 275 }, { 12, 11, 372 }, { 13, 11, 91 }, - { 14, 11, 125 }, { 7, 10, 174 }, { 4, 0, 664 }, { 5, 0, 804 }, - { 11, 0, 1013 }, { 6, 0, 942 }, { 6, 0, 1349 }, { 6, 0, 1353 }, - { 6, 0, 1450 }, { 7, 11, 1518 }, { 11, 11, 694 }, { 11, 0, 356 }, - { 4, 10, 122 }, { 5, 10, 796 }, { 5, 10, 952 }, { 6, 10, 1660 }, - { 6, 10, 1671 }, { 8, 10, 567 }, { 9, 10, 687 }, { 9, 10, 742 }, - { 10, 10, 686 }, { 11, 10, 682 }, { 12, 10, 281 }, { 5, 0, 32 }, - { 6, 11, 147 }, { 7, 11, 886 }, { 9, 11, 753 }, { 10, 11, 268 }, - { 5, 10, 179 }, { 7, 10, 1095 }, { 7, 10, 1213 }, { 4, 10, 66 }, - { 7, 10, 722 }, { 7, 10, 904 }, { 7, 10, 352 }, { 9, 11, 245 }, - { 10, 11, 137 }, { 4, 0, 289 }, { 7, 0, 629 }, { 7, 0, 1698 }, - { 7, 0, 1711 }, { 12, 0, 215 }, { 5, 11, 414 }, { 6, 0, 1975 }, - { 7, 11, 1762 }, { 6, 0, 450 }, { 8, 0, 109 }, { 13, 10, 35 }, - { 6, 11, 599 }, { 8, 0, 705 }, { 5, 0, 664 }, { 6, 11, 1749 }, - { 11, 11, 402 }, { 12, 11, 109 }, { 12, 11, 431 }, { 13, 11, 179 }, - { 13, 11, 206 }, { 14, 11, 175 }, { 14, 11, 217 }, { 16, 11, 3 }, - { 20, 11, 53 }, { 7, 0, 1238 }, { 6, 11, 1627 }, { 4, 11, 488 }, - { 13, 0, 318 }, { 10, 10, 592 }, { 10, 10, 753 }, { 12, 10, 317 }, - { 12, 10, 355 }, { 12, 10, 465 }, { 12, 10, 469 }, { 12, 10, 560 }, - { 12, 10, 578 }, { 5, 10, 564 }, { 4, 11, 83 }, { 12, 11, 676 }, - { 6, 0, 1872 }, { 6, 0, 1906 }, { 6, 0, 1907 }, { 9, 0, 934 }, - { 9, 0, 956 }, { 9, 0, 960 }, { 9, 0, 996 }, { 12, 0, 794 }, - { 12, 0, 876 }, { 12, 0, 880 }, { 12, 0, 918 }, { 15, 0, 230 }, - { 18, 0, 234 }, { 18, 0, 238 }, { 21, 0, 38 }, { 21, 0, 62 }, - { 6, 10, 556 }, { 6, 11, 278 }, { 9, 0, 103 }, { 7, 10, 544 }, - { 8, 10, 719 }, { 10, 10, 61 }, { 4, 10, 5 }, { 5, 10, 498 }, - { 8, 10, 637 }, { 9, 10, 521 }, { 7, 0, 777 }, { 12, 0, 229 }, - { 12, 0, 239 }, { 15, 0, 12 }, { 12, 11, 229 }, { 12, 11, 239 }, - { 15, 11, 12 }, { 6, 0, 26 }, { 7, 11, 388 }, { 7, 11, 644 }, - { 11, 11, 781 }, { 7, 11, 229 }, { 8, 11, 59 }, { 9, 11, 190 }, - { 9, 11, 257 }, { 10, 11, 378 }, { 12, 11, 191 }, { 5, 10, 927 }, - { 7, 10, 1441 }, { 4, 10, 893 }, { 5, 10, 780 }, { 5, 10, 893 }, - { 4, 0, 414 }, { 5, 0, 467 }, { 9, 0, 654 }, { 10, 0, 451 }, - { 12, 0, 59 }, { 13, 0, 375 }, { 14, 0, 173 }, { 7, 0, 17 }, - { 7, 0, 1350 }, { 5, 10, 238 }, { 7, 0, 955 }, { 4, 0, 960 }, - { 10, 0, 887 }, { 12, 0, 753 }, { 18, 0, 161 }, { 18, 0, 162 }, - { 24, 0, 19 }, { 8, 11, 344 }, { 6, 10, 1729 }, { 9, 11, 288 }, - { 4, 11, 660 }, { 4, 0, 217 }, { 5, 0, 710 }, { 7, 0, 760 }, - { 7, 0, 1926 }, { 9, 0, 428 }, { 9, 0, 708 }, { 10, 0, 254 }, - { 10, 0, 296 }, { 10, 0, 720 }, { 11, 0, 109 }, { 11, 0, 255 }, - { 12, 0, 165 }, { 12, 0, 315 }, { 13, 0, 107 }, { 13, 0, 203 }, - { 14, 0, 54 }, { 14, 0, 99 }, { 14, 0, 114 }, { 14, 0, 388 }, - { 16, 0, 85 }, { 17, 0, 9 }, { 17, 0, 33 }, { 20, 0, 25 }, - { 20, 0, 28 }, { 20, 0, 29 }, { 21, 0, 9 }, { 21, 0, 10 }, - { 21, 0, 34 }, { 22, 0, 17 }, { 4, 10, 60 }, { 7, 10, 1800 }, - { 8, 10, 314 }, { 9, 10, 700 }, { 11, 10, 487 }, { 7, 11, 1035 }, - { 10, 11, 737 }, { 7, 11, 690 }, { 9, 11, 217 }, { 9, 11, 587 }, - { 12, 11, 521 }, { 6, 0, 919 }, { 7, 11, 706 }, { 7, 11, 1058 }, - { 10, 11, 538 }, { 7, 10, 1853 }, { 10, 10, 437 }, { 8, 10, 419 }, - { 6, 0, 280 }, { 10, 0, 502 }, { 11, 0, 344 }, { 12, 0, 38 }, - { 5, 0, 45 }, { 7, 0, 1161 }, { 11, 0, 448 }, { 11, 0, 880 }, - { 13, 0, 139 }, { 13, 0, 407 }, { 15, 0, 16 }, { 17, 0, 95 }, - { 18, 0, 66 }, { 18, 0, 88 }, { 18, 0, 123 }, { 21, 0, 7 }, - { 11, 11, 92 }, { 11, 11, 196 }, { 11, 11, 409 }, { 11, 11, 450 }, - { 11, 11, 666 }, { 11, 11, 777 }, { 12, 11, 262 }, { 13, 11, 385 }, - { 13, 11, 393 }, { 15, 11, 115 }, { 16, 11, 45 }, { 17, 11, 82 }, - { 8, 0, 777 }, { 6, 11, 1744 }, { 4, 0, 410 }, { 7, 0, 521 }, - { 5, 10, 828 }, { 6, 0, 673 }, { 7, 0, 1110 }, { 7, 0, 1778 }, - { 7, 10, 176 }, { 7, 10, 178 }, { 5, 10, 806 }, { 7, 11, 268 }, - { 7, 10, 1976 }, { 8, 11, 569 }, { 4, 11, 733 }, { 9, 11, 194 }, - { 10, 11, 92 }, { 11, 11, 198 }, { 12, 11, 84 }, { 12, 11, 87 }, - { 13, 11, 128 }, { 16, 11, 74 }, { 5, 0, 341 }, { 7, 0, 1129 }, - { 11, 0, 414 }, { 4, 10, 51 }, { 6, 10, 4 }, { 7, 10, 591 }, - { 7, 10, 849 }, { 7, 10, 951 }, { 7, 10, 1613 }, { 7, 10, 1760 }, - { 7, 10, 1988 }, { 9, 10, 434 }, { 10, 10, 754 }, { 11, 10, 25 }, - { 11, 10, 37 }, { 5, 10, 902 }, { 7, 10, 928 }, { 7, 0, 787 }, - { 4, 0, 436 }, { 6, 10, 270 }, { 7, 0, 1587 }, { 7, 0, 1707 }, - { 6, 0, 377 }, { 7, 0, 1025 }, { 9, 0, 613 }, { 17, 0, 104 }, - { 7, 11, 982 }, { 7, 11, 1361 }, { 10, 11, 32 }, { 15, 11, 56 }, - { 11, 0, 96 }, { 4, 0, 451 }, { 4, 10, 416 }, { 14, 10, 372 }, - { 5, 10, 152 }, { 5, 10, 197 }, { 7, 11, 306 }, { 7, 10, 340 }, - { 7, 10, 867 }, { 10, 10, 548 }, { 10, 10, 581 }, { 11, 10, 6 }, - { 12, 10, 3 }, { 12, 10, 19 }, { 14, 10, 110 }, { 14, 10, 289 }, - { 6, 0, 680 }, { 6, 11, 609 }, { 7, 0, 483 }, { 7, 10, 190 }, - { 8, 10, 28 }, { 8, 10, 141 }, { 8, 10, 444 }, { 8, 10, 811 }, - { 9, 10, 468 }, { 11, 10, 334 }, { 12, 10, 24 }, { 12, 10, 386 }, - { 12, 10, 576 }, { 10, 0, 916 }, { 5, 10, 757 }, { 5, 10, 721 }, - { 7, 10, 1553 }, { 5, 11, 178 }, { 6, 0, 937 }, { 4, 10, 898 }, - { 5, 0, 739 }, { 19, 0, 82 }, { 7, 0, 663 }, { 18, 0, 128 }, - { 5, 10, 277 }, { 13, 10, 247 }, { 6, 0, 1087 }, { 4, 10, 435 }, - { 6, 11, 381 }, { 7, 11, 645 }, { 7, 11, 694 }, { 8, 11, 546 }, - { 7, 0, 503 }, { 7, 0, 1885 }, { 6, 0, 1965 }, { 8, 0, 925 }, - { 10, 0, 955 }, { 4, 0, 113 }, { 5, 0, 163 }, { 5, 0, 735 }, - { 7, 0, 1009 }, { 9, 0, 9 }, { 9, 0, 771 }, { 12, 0, 90 }, - { 13, 0, 138 }, { 13, 0, 410 }, { 15, 0, 128 }, { 4, 0, 324 }, - { 10, 0, 104 }, { 7, 0, 460 }, { 5, 10, 265 }, { 6, 10, 212 }, - { 5, 11, 105 }, { 7, 11, 261 }, { 7, 11, 1107 }, { 7, 11, 1115 }, - { 7, 11, 1354 }, { 7, 11, 1588 }, { 7, 11, 1705 }, { 7, 11, 1902 }, - { 9, 11, 465 }, { 10, 11, 248 }, { 10, 11, 349 }, { 10, 11, 647 }, - { 11, 11, 527 }, { 11, 11, 660 }, { 11, 11, 669 }, { 12, 11, 529 }, - { 13, 11, 305 }, { 5, 11, 438 }, { 9, 11, 694 }, { 12, 11, 627 }, - { 13, 11, 210 }, { 24, 11, 11 }, { 4, 0, 935 }, { 5, 0, 823 }, - { 4, 10, 702 }, { 5, 0, 269 }, { 7, 0, 434 }, { 7, 0, 891 }, - { 8, 0, 339 }, { 9, 0, 702 }, { 11, 0, 594 }, { 11, 0, 718 }, - { 17, 0, 100 }, { 5, 10, 808 }, { 7, 10, 2045 }, { 7, 0, 1014 }, - { 9, 0, 485 }, { 13, 0, 264 }, { 6, 0, 1713 }, { 7, 0, 1810 }, - { 11, 0, 866 }, { 12, 0, 103 }, { 13, 0, 495 }, { 12, 11, 233 }, - { 4, 0, 423 }, { 10, 0, 949 }, { 10, 0, 1013 }, { 7, 0, 900 }, - { 8, 11, 25 }, { 10, 11, 826 }, { 5, 10, 166 }, { 8, 10, 739 }, - { 12, 10, 511 }, { 6, 0, 2018 }, { 7, 11, 1270 }, { 11, 11, 612 }, - { 4, 10, 119 }, { 5, 10, 170 }, { 5, 10, 447 }, { 7, 10, 1708 }, - { 7, 10, 1889 }, { 9, 10, 357 }, { 9, 10, 719 }, { 12, 10, 486 }, - { 12, 10, 596 }, { 12, 0, 574 }, { 12, 11, 574 }, { 4, 11, 308 }, - { 6, 0, 964 }, { 6, 0, 1206 }, { 6, 0, 1302 }, { 4, 10, 450 }, - { 7, 10, 1158 }, { 7, 11, 150 }, { 8, 11, 649 }, { 14, 0, 213 }, - { 20, 0, 38 }, { 9, 11, 45 }, { 9, 11, 311 }, { 13, 11, 42 }, - { 6, 11, 521 }, { 7, 10, 1375 }, { 7, 10, 1466 }, { 10, 10, 331 }, - { 4, 10, 754 }, { 5, 11, 339 }, { 7, 11, 1442 }, { 14, 11, 3 }, - { 15, 11, 41 }, { 19, 11, 66 }, { 8, 11, 378 }, { 6, 0, 1022 }, - { 5, 10, 850 }, { 8, 10, 799 }, { 14, 0, 143 }, { 7, 0, 2029 }, - { 6, 11, 1628 }, { 8, 0, 523 }, { 22, 0, 34 }, { 5, 0, 625 }, - { 7, 0, 1617 }, { 7, 0, 275 }, { 7, 10, 238 }, { 7, 10, 2033 }, - { 8, 10, 120 }, { 8, 10, 188 }, { 8, 10, 659 }, { 9, 10, 598 }, - { 10, 10, 466 }, { 12, 10, 342 }, { 12, 10, 588 }, { 13, 10, 503 }, - { 14, 10, 246 }, { 15, 10, 92 }, { 7, 0, 37 }, { 8, 0, 425 }, - { 8, 0, 693 }, { 9, 0, 720 }, { 10, 0, 380 }, { 10, 0, 638 }, - { 11, 0, 273 }, { 11, 0, 473 }, { 12, 0, 61 }, { 15, 0, 43 }, - { 7, 11, 829 }, { 7, 0, 1943 }, { 4, 0, 765 }, { 5, 11, 486 }, - { 7, 11, 1349 }, { 7, 11, 1635 }, { 8, 11, 17 }, { 10, 11, 217 }, - { 10, 11, 295 }, { 4, 10, 201 }, { 7, 10, 1744 }, { 8, 10, 602 }, - { 11, 10, 247 }, { 11, 10, 826 }, { 17, 10, 65 }, { 10, 11, 558 }, - { 11, 0, 551 }, { 14, 0, 159 }, { 8, 10, 164 }, { 18, 10, 62 }, - { 11, 11, 176 }, { 4, 0, 168 }, { 8, 0, 1010 }, { 6, 0, 1994 }, - { 7, 0, 91 }, { 10, 0, 532 }, { 7, 10, 1243 }, { 7, 0, 1884 }, - { 4, 10, 907 }, { 5, 10, 100 }, { 10, 10, 329 }, { 12, 10, 416 }, - { 21, 10, 29 }, { 6, 11, 447 }, { 4, 10, 176 }, { 5, 10, 636 }, - { 5, 10, 998 }, { 7, 10, 9 }, { 7, 10, 1508 }, { 8, 10, 26 }, - { 9, 10, 317 }, { 9, 10, 358 }, { 10, 10, 210 }, { 10, 10, 292 }, - { 10, 10, 533 }, { 11, 10, 555 }, { 12, 10, 526 }, { 12, 10, 607 }, - { 13, 10, 263 }, { 13, 10, 459 }, { 14, 10, 271 }, { 4, 11, 609 }, - { 7, 11, 756 }, { 6, 0, 15 }, { 7, 0, 70 }, { 10, 0, 240 }, - { 19, 0, 93 }, { 4, 11, 930 }, { 5, 11, 947 }, { 6, 0, 1227 }, - { 6, 0, 1534 }, { 5, 11, 939 }, { 5, 11, 962 }, { 5, 11, 651 }, - { 8, 11, 170 }, { 9, 11, 61 }, { 9, 11, 63 }, { 10, 11, 23 }, - { 10, 11, 37 }, { 10, 11, 834 }, { 11, 11, 4 }, { 11, 11, 187 }, - { 11, 11, 281 }, { 11, 11, 503 }, { 11, 11, 677 }, { 12, 11, 96 }, - { 12, 11, 130 }, { 12, 11, 244 }, { 14, 11, 5 }, { 14, 11, 40 }, - { 14, 11, 162 }, { 14, 11, 202 }, { 18, 11, 133 }, { 4, 11, 406 }, - { 5, 11, 579 }, { 12, 11, 492 }, { 22, 11, 15 }, { 11, 0, 392 }, - { 6, 10, 610 }, { 10, 10, 127 }, { 13, 10, 27 }, { 7, 0, 655 }, - { 7, 0, 1844 }, { 8, 10, 119 }, { 4, 0, 145 }, { 6, 0, 176 }, - { 7, 0, 395 }, { 9, 0, 562 }, { 4, 0, 501 }, { 12, 11, 145 }, - { 8, 0, 1019 }, { 6, 0, 509 }, { 11, 0, 267 }, { 6, 11, 17 }, - { 7, 11, 16 }, { 7, 11, 1001 }, { 7, 11, 1982 }, { 9, 11, 886 }, - { 10, 11, 489 }, { 10, 11, 800 }, { 11, 11, 782 }, { 12, 11, 320 }, - { 13, 11, 467 }, { 14, 11, 145 }, { 14, 11, 387 }, { 15, 11, 119 }, - { 17, 11, 17 }, { 6, 0, 1099 }, { 5, 11, 458 }, { 7, 11, 1983 }, - { 8, 11, 0 }, { 8, 11, 171 }, { 9, 11, 120 }, { 9, 11, 732 }, - { 10, 11, 473 }, { 11, 11, 656 }, { 11, 11, 998 }, { 18, 11, 0 }, - { 18, 11, 2 }, { 19, 11, 21 }, { 12, 11, 427 }, { 18, 11, 38 }, - { 10, 0, 948 }, { 10, 0, 968 }, { 7, 10, 126 }, { 8, 10, 84 }, - { 8, 10, 790 }, { 4, 0, 114 }, { 9, 0, 492 }, { 13, 0, 462 }, - { 14, 0, 215 }, { 6, 10, 64 }, { 12, 10, 377 }, { 13, 10, 309 }, - { 4, 0, 77 }, { 5, 0, 361 }, { 6, 0, 139 }, { 6, 0, 401 }, - { 6, 0, 404 }, { 7, 0, 413 }, { 7, 0, 715 }, { 7, 0, 1716 }, - { 11, 0, 279 }, { 12, 0, 179 }, { 12, 0, 258 }, { 13, 0, 244 }, - { 14, 0, 358 }, { 6, 0, 1717 }, { 7, 0, 772 }, { 7, 0, 1061 }, - { 7, 0, 1647 }, { 8, 0, 82 }, { 11, 0, 250 }, { 11, 0, 607 }, - { 12, 0, 311 }, { 12, 0, 420 }, { 13, 0, 184 }, { 13, 0, 367 }, - { 7, 10, 1104 }, { 11, 10, 269 }, { 11, 10, 539 }, { 11, 10, 627 }, - { 11, 10, 706 }, { 11, 10, 975 }, { 12, 10, 248 }, { 12, 10, 434 }, - { 12, 10, 600 }, { 12, 10, 622 }, { 13, 10, 297 }, { 13, 10, 485 }, - { 14, 10, 69 }, { 14, 10, 409 }, { 15, 10, 108 }, { 7, 0, 724 }, - { 4, 11, 512 }, { 4, 11, 519 }, { 5, 11, 342 }, { 6, 0, 1133 }, - { 17, 11, 29 }, { 11, 10, 977 }, { 13, 10, 507 }, { 6, 0, 841 }, - { 6, 0, 1042 }, { 6, 0, 1194 }, { 10, 0, 993 }, { 12, 0, 1021 }, - { 6, 11, 31 }, { 7, 11, 491 }, { 7, 11, 530 }, { 8, 11, 592 }, - { 9, 10, 34 }, { 11, 11, 53 }, { 11, 10, 484 }, { 11, 11, 779 }, - { 12, 11, 167 }, { 12, 11, 411 }, { 14, 11, 14 }, { 14, 11, 136 }, - { 15, 11, 72 }, { 16, 11, 17 }, { 16, 11, 72 }, { 4, 0, 1021 }, - { 6, 0, 2037 }, { 5, 11, 907 }, { 7, 0, 373 }, { 8, 0, 335 }, - { 8, 0, 596 }, { 9, 0, 488 }, { 6, 10, 1700 }, { 7, 10, 293 }, - { 7, 10, 382 }, { 7, 10, 1026 }, { 7, 10, 1087 }, { 7, 10, 2027 }, - { 8, 10, 252 }, { 8, 10, 727 }, { 8, 10, 729 }, { 9, 10, 30 }, - { 9, 10, 199 }, { 9, 10, 231 }, { 9, 10, 251 }, { 9, 10, 334 }, - { 9, 10, 361 }, { 9, 10, 712 }, { 10, 10, 55 }, { 10, 10, 60 }, - { 10, 10, 232 }, { 10, 10, 332 }, { 10, 10, 384 }, { 10, 10, 396 }, - { 10, 10, 504 }, { 10, 10, 542 }, { 10, 10, 652 }, { 11, 10, 20 }, - { 11, 10, 48 }, { 11, 10, 207 }, { 11, 10, 291 }, { 11, 10, 298 }, - { 11, 10, 342 }, { 11, 10, 365 }, { 11, 10, 394 }, { 11, 10, 620 }, - { 11, 10, 705 }, { 11, 10, 1017 }, { 12, 10, 123 }, { 12, 10, 340 }, - { 12, 10, 406 }, { 12, 10, 643 }, { 13, 10, 61 }, { 13, 10, 269 }, - { 13, 10, 311 }, { 13, 10, 319 }, { 13, 10, 486 }, { 14, 10, 234 }, - { 15, 10, 62 }, { 15, 10, 85 }, { 16, 10, 71 }, { 18, 10, 119 }, - { 20, 10, 105 }, { 22, 0, 37 }, { 4, 11, 208 }, { 5, 11, 106 }, - { 6, 11, 531 }, { 8, 11, 408 }, { 9, 11, 188 }, { 10, 11, 572 }, - { 4, 0, 564 }, { 6, 0, 513 }, { 7, 0, 1052 }, { 4, 0, 825 }, - { 9, 0, 899 }, { 12, 11, 441 }, { 6, 0, 778 }, { 5, 11, 379 }, - { 7, 0, 1417 }, { 12, 0, 382 }, { 17, 0, 48 }, { 24, 0, 12 }, - { 4, 11, 241 }, { 7, 0, 1116 }, { 6, 10, 379 }, { 7, 10, 270 }, - { 8, 10, 176 }, { 8, 10, 183 }, { 9, 10, 432 }, { 9, 10, 661 }, - { 12, 10, 247 }, { 12, 10, 617 }, { 18, 10, 125 }, { 5, 10, 792 }, - { 5, 10, 900 }, { 6, 0, 545 }, { 7, 0, 565 }, { 7, 0, 1669 }, - { 10, 0, 114 }, { 11, 0, 642 }, { 12, 0, 618 }, { 5, 0, 5 }, - { 10, 11, 7 }, { 4, 11, 259 }, { 7, 0, 192 }, { 6, 0, 701 }, - { 8, 0, 763 }, { 7, 10, 1979 }, { 4, 10, 901 }, { 5, 10, 776 }, - { 10, 0, 755 }, { 19, 0, 29 }, { 5, 0, 759 }, { 4, 11, 173 }, - { 5, 11, 312 }, { 5, 11, 512 }, { 7, 11, 1285 }, { 7, 11, 1603 }, - { 7, 11, 1691 }, { 9, 11, 464 }, { 11, 11, 195 }, { 12, 11, 279 }, - { 12, 11, 448 }, { 14, 11, 11 }, { 19, 11, 102 }, { 7, 0, 370 }, - { 7, 0, 1007 }, { 7, 0, 1177 }, { 7, 0, 1565 }, { 7, 0, 1237 }, - { 4, 0, 87 }, { 5, 0, 250 }, { 13, 0, 298 }, { 4, 11, 452 }, - { 5, 11, 583 }, { 5, 11, 817 }, { 6, 11, 433 }, { 7, 11, 593 }, - { 7, 11, 720 }, { 7, 11, 1378 }, { 8, 11, 161 }, { 9, 11, 284 }, - { 10, 11, 313 }, { 11, 11, 886 }, { 4, 11, 547 }, { 7, 11, 1409 }, - { 8, 11, 722 }, { 4, 10, 37 }, { 5, 10, 334 }, { 7, 10, 1253 }, - { 4, 10, 508 }, { 12, 0, 107 }, { 18, 0, 31 }, { 8, 11, 420 }, - { 11, 11, 193 }, { 7, 0, 814 }, { 7, 11, 409 }, { 12, 0, 991 }, - { 4, 0, 57 }, { 7, 0, 1195 }, { 7, 0, 1438 }, { 7, 0, 1548 }, - { 7, 0, 1835 }, { 7, 0, 1904 }, { 9, 0, 757 }, { 10, 0, 604 }, - { 11, 0, 519 }, { 4, 0, 540 }, { 10, 11, 308 }, { 4, 10, 533 }, - { 8, 0, 608 }, { 16, 11, 65 }, { 4, 0, 1014 }, { 6, 0, 2029 }, - { 4, 0, 209 }, { 7, 0, 902 }, { 5, 11, 1002 }, { 8, 11, 745 }, - { 6, 0, 2030 }, { 6, 0, 303 }, { 7, 0, 335 }, { 7, 0, 1437 }, - { 7, 0, 1668 }, { 8, 0, 553 }, { 8, 0, 652 }, { 8, 0, 656 }, - { 9, 0, 558 }, { 11, 0, 743 }, { 21, 0, 18 }, { 5, 11, 575 }, - { 6, 11, 354 }, { 7, 11, 701 }, { 4, 11, 239 }, { 6, 11, 477 }, - { 7, 11, 1607 }, { 11, 11, 68 }, { 11, 11, 617 }, { 4, 0, 559 }, - { 8, 0, 527 }, { 18, 0, 60 }, { 19, 0, 24 }, { 5, 10, 920 }, - { 10, 0, 511 }, { 5, 0, 1017 }, { 5, 0, 675 }, { 10, 10, 391 }, - { 11, 0, 156 }, { 7, 10, 1952 }, { 10, 11, 369 }, { 4, 11, 367 }, - { 5, 0, 709 }, { 6, 0, 698 }, { 6, 0, 887 }, { 14, 10, 126 }, - { 6, 0, 1745 }, { 4, 10, 483 }, { 13, 11, 299 }, { 14, 11, 75 }, - { 5, 0, 714 }, { 7, 0, 8 }, { 8, 0, 206 }, { 10, 10, 480 }, - { 4, 11, 694 }, { 9, 10, 495 }, { 18, 10, 104 }, { 7, 11, 1248 }, - { 11, 11, 621 }, { 11, 11, 702 }, { 12, 11, 687 }, { 4, 0, 776 }, - { 11, 10, 1009 }, { 7, 0, 1272 }, { 6, 0, 1059 }, { 8, 10, 653 }, - { 13, 10, 93 }, { 19, 10, 14 }, { 7, 11, 213 }, { 8, 0, 406 }, - { 5, 10, 172 }, { 4, 0, 947 }, { 8, 0, 175 }, { 10, 0, 168 }, - { 10, 0, 573 }, { 4, 0, 870 }, { 6, 0, 1567 }, { 23, 11, 28 }, - { 6, 11, 472 }, { 5, 10, 260 }, { 8, 11, 132 }, { 4, 11, 751 }, - { 11, 11, 390 }, { 12, 11, 32 }, { 4, 11, 409 }, { 5, 11, 78 }, - { 12, 0, 554 }, { 6, 11, 473 }, { 17, 11, 105 }, { 5, 0, 784 }, - { 8, 0, 908 }, { 8, 11, 306 }, { 11, 0, 882 }, { 6, 0, 358 }, - { 7, 0, 1393 }, { 8, 0, 396 }, { 10, 0, 263 }, { 14, 0, 154 }, - { 16, 0, 48 }, { 17, 0, 8 }, { 7, 11, 1759 }, { 8, 11, 396 }, - { 10, 11, 263 }, { 14, 11, 154 }, { 16, 11, 48 }, { 17, 11, 8 }, - { 13, 11, 163 }, { 13, 11, 180 }, { 18, 11, 78 }, { 20, 11, 35 }, - { 14, 0, 32 }, { 18, 0, 85 }, { 20, 0, 2 }, { 24, 0, 16 }, - { 7, 0, 228 }, { 10, 0, 770 }, { 8, 10, 167 }, { 8, 10, 375 }, - { 9, 10, 82 }, { 9, 10, 561 }, { 10, 10, 620 }, { 4, 0, 845 }, - { 9, 0, 14 }, { 9, 0, 441 }, { 10, 0, 306 }, { 11, 0, 9 }, - { 11, 0, 966 }, { 12, 0, 287 }, { 13, 0, 342 }, { 13, 0, 402 }, - { 15, 0, 110 }, { 15, 0, 163 }, { 8, 10, 194 }, { 8, 10, 756 }, - { 6, 0, 1578 }, { 4, 0, 967 }, { 6, 0, 1820 }, { 6, 0, 1847 }, - { 12, 0, 716 }, { 8, 0, 594 }, { 7, 0, 1428 }, { 7, 0, 1640 }, - { 7, 0, 1867 }, { 9, 0, 169 }, { 9, 0, 182 }, { 9, 0, 367 }, - { 9, 0, 478 }, { 9, 0, 506 }, { 9, 0, 551 }, { 9, 0, 557 }, - { 9, 0, 648 }, { 9, 0, 697 }, { 9, 0, 705 }, { 9, 0, 725 }, - { 9, 0, 787 }, { 9, 0, 794 }, { 10, 0, 198 }, { 10, 0, 214 }, - { 10, 0, 267 }, { 10, 0, 275 }, { 10, 0, 456 }, { 10, 0, 551 }, - { 10, 0, 561 }, { 10, 0, 613 }, { 10, 0, 627 }, { 10, 0, 668 }, - { 10, 0, 675 }, { 10, 0, 691 }, { 10, 0, 695 }, { 10, 0, 707 }, - { 10, 0, 715 }, { 11, 0, 183 }, { 11, 0, 201 }, { 11, 0, 244 }, - { 11, 0, 262 }, { 11, 0, 352 }, { 11, 0, 439 }, { 11, 0, 493 }, - { 11, 0, 572 }, { 11, 0, 591 }, { 11, 0, 608 }, { 11, 0, 611 }, - { 11, 0, 646 }, { 11, 0, 674 }, { 11, 0, 711 }, { 11, 0, 751 }, - { 11, 0, 761 }, { 11, 0, 776 }, { 11, 0, 785 }, { 11, 0, 850 }, - { 11, 0, 853 }, { 11, 0, 862 }, { 11, 0, 865 }, { 11, 0, 868 }, - { 11, 0, 875 }, { 11, 0, 898 }, { 11, 0, 902 }, { 11, 0, 903 }, - { 11, 0, 910 }, { 11, 0, 932 }, { 11, 0, 942 }, { 11, 0, 957 }, - { 11, 0, 967 }, { 11, 0, 972 }, { 12, 0, 148 }, { 12, 0, 195 }, - { 12, 0, 220 }, { 12, 0, 237 }, { 12, 0, 318 }, { 12, 0, 339 }, - { 12, 0, 393 }, { 12, 0, 445 }, { 12, 0, 450 }, { 12, 0, 474 }, - { 12, 0, 505 }, { 12, 0, 509 }, { 12, 0, 533 }, { 12, 0, 591 }, - { 12, 0, 594 }, { 12, 0, 597 }, { 12, 0, 621 }, { 12, 0, 633 }, - { 12, 0, 642 }, { 13, 0, 59 }, { 13, 0, 60 }, { 13, 0, 145 }, - { 13, 0, 239 }, { 13, 0, 250 }, { 13, 0, 329 }, { 13, 0, 344 }, - { 13, 0, 365 }, { 13, 0, 372 }, { 13, 0, 387 }, { 13, 0, 403 }, - { 13, 0, 414 }, { 13, 0, 456 }, { 13, 0, 470 }, { 13, 0, 478 }, - { 13, 0, 483 }, { 13, 0, 489 }, { 14, 0, 55 }, { 14, 0, 57 }, - { 14, 0, 81 }, { 14, 0, 90 }, { 14, 0, 148 }, { 14, 0, 239 }, - { 14, 0, 266 }, { 14, 0, 321 }, { 14, 0, 326 }, { 14, 0, 327 }, - { 14, 0, 330 }, { 14, 0, 347 }, { 14, 0, 355 }, { 14, 0, 401 }, - { 14, 0, 404 }, { 14, 0, 411 }, { 14, 0, 414 }, { 14, 0, 416 }, - { 14, 0, 420 }, { 15, 0, 61 }, { 15, 0, 74 }, { 15, 0, 87 }, - { 15, 0, 88 }, { 15, 0, 94 }, { 15, 0, 96 }, { 15, 0, 116 }, - { 15, 0, 149 }, { 15, 0, 154 }, { 16, 0, 50 }, { 16, 0, 63 }, - { 16, 0, 73 }, { 17, 0, 2 }, { 17, 0, 66 }, { 17, 0, 92 }, - { 17, 0, 103 }, { 17, 0, 112 }, { 17, 0, 120 }, { 18, 0, 50 }, - { 18, 0, 54 }, { 18, 0, 82 }, { 18, 0, 86 }, { 18, 0, 90 }, - { 18, 0, 111 }, { 18, 0, 115 }, { 18, 0, 156 }, { 19, 0, 40 }, - { 19, 0, 79 }, { 20, 0, 78 }, { 21, 0, 22 }, { 7, 11, 883 }, - { 5, 0, 161 }, { 7, 0, 839 }, { 4, 0, 782 }, { 13, 11, 293 }, - { 14, 11, 56 }, { 5, 11, 617 }, { 11, 11, 50 }, { 7, 10, 22 }, - { 17, 0, 64 }, { 5, 10, 639 }, { 7, 10, 1249 }, { 11, 10, 896 }, - { 10, 0, 998 }, { 7, 11, 2042 }, { 4, 11, 546 }, { 14, 11, 233 }, - { 6, 0, 1043 }, { 6, 0, 1574 }, { 6, 0, 1496 }, { 4, 10, 102 }, - { 7, 10, 815 }, { 7, 10, 1699 }, { 11, 10, 964 }, { 12, 0, 781 }, - { 14, 0, 461 }, { 4, 11, 313 }, { 5, 11, 577 }, { 6, 0, 639 }, - { 6, 0, 1114 }, { 9, 0, 817 }, { 8, 11, 184 }, { 13, 11, 433 }, - { 7, 0, 1814 }, { 7, 11, 935 }, { 10, 0, 997 }, { 12, 0, 958 }, - { 4, 0, 812 }, { 9, 11, 625 }, { 4, 10, 899 }, { 8, 10, 795 }, - { 5, 11, 886 }, { 6, 11, 46 }, { 6, 11, 1790 }, { 7, 11, 14 }, - { 7, 11, 732 }, { 7, 11, 1654 }, { 8, 11, 95 }, { 8, 11, 327 }, - { 8, 11, 616 }, { 10, 11, 598 }, { 10, 11, 769 }, { 11, 11, 134 }, - { 11, 11, 747 }, { 12, 11, 378 }, { 14, 11, 97 }, { 8, 0, 139 }, - { 6, 10, 52 }, { 9, 10, 104 }, { 9, 10, 559 }, { 12, 10, 308 }, - { 19, 10, 87 }, { 5, 11, 1021 }, { 4, 10, 604 }, { 4, 10, 301 }, - { 8, 10, 779 }, { 7, 0, 643 }, { 8, 0, 236 }, { 4, 11, 153 }, - { 6, 0, 1172 }, { 19, 10, 32 }, { 5, 11, 798 }, { 6, 0, 1338 }, - { 4, 11, 587 }, { 6, 11, 598 }, { 7, 11, 42 }, { 8, 11, 695 }, - { 10, 11, 212 }, { 11, 11, 158 }, { 14, 11, 196 }, { 17, 11, 85 }, - { 7, 10, 508 }, { 5, 11, 957 }, { 5, 11, 1008 }, { 7, 11, 249 }, - { 4, 11, 129 }, { 7, 11, 465 }, { 5, 0, 54 }, { 7, 11, 470 }, - { 7, 11, 1057 }, { 7, 11, 1201 }, { 9, 11, 755 }, { 11, 11, 906 }, - { 12, 11, 527 }, { 7, 11, 908 }, { 18, 11, 7 }, { 5, 11, 148 }, - { 8, 11, 450 }, { 16, 11, 1 }, { 4, 0, 256 }, { 7, 0, 1488 }, - { 9, 0, 351 }, { 6, 10, 310 }, { 7, 10, 1849 }, { 8, 10, 72 }, - { 8, 10, 272 }, { 8, 10, 431 }, { 9, 10, 12 }, { 10, 10, 563 }, - { 10, 10, 630 }, { 10, 10, 796 }, { 10, 10, 810 }, { 11, 10, 367 }, - { 11, 10, 599 }, { 11, 10, 686 }, { 12, 10, 672 }, { 6, 0, 1885 }, - { 6, 0, 1898 }, { 6, 0, 1899 }, { 12, 0, 955 }, { 4, 0, 714 }, - { 5, 0, 469 }, { 6, 0, 1270 }, { 6, 0, 1456 }, { 4, 0, 744 }, - { 6, 0, 313 }, { 7, 10, 537 }, { 8, 10, 64 }, { 9, 10, 127 }, - { 10, 10, 496 }, { 12, 10, 510 }, { 13, 10, 384 }, { 4, 11, 217 }, - { 4, 10, 244 }, { 5, 11, 710 }, { 7, 10, 233 }, { 7, 11, 1926 }, - { 9, 11, 428 }, { 9, 11, 708 }, { 10, 11, 254 }, { 10, 11, 296 }, - { 10, 11, 720 }, { 11, 11, 109 }, { 11, 11, 255 }, { 12, 11, 165 }, - { 12, 11, 315 }, { 13, 11, 107 }, { 13, 11, 203 }, { 14, 11, 54 }, - { 14, 11, 99 }, { 14, 11, 114 }, { 14, 11, 388 }, { 16, 11, 85 }, - { 17, 11, 9 }, { 17, 11, 33 }, { 20, 11, 25 }, { 20, 11, 28 }, - { 20, 11, 29 }, { 21, 11, 9 }, { 21, 11, 10 }, { 21, 11, 34 }, - { 22, 11, 17 }, { 10, 0, 402 }, { 7, 0, 969 }, { 18, 0, 55 }, - { 8, 0, 50 }, { 9, 0, 624 }, { 6, 0, 1355 }, { 4, 0, 572 }, - { 6, 10, 1650 }, { 10, 10, 702 }, { 11, 10, 245 }, { 10, 0, 847 }, - { 14, 0, 445 }, { 6, 0, 43 }, { 7, 0, 38 }, { 8, 0, 248 }, - { 10, 0, 513 }, { 5, 0, 369 }, { 9, 10, 338 }, { 5, 0, 766 }, - { 5, 0, 363 }, { 5, 10, 896 }, { 8, 11, 392 }, { 11, 11, 54 }, - { 13, 11, 173 }, { 13, 11, 294 }, { 20, 11, 7 }, { 6, 0, 678 }, - { 7, 11, 1230 }, { 8, 11, 531 }, { 6, 0, 258 }, { 12, 0, 409 }, - { 5, 0, 249 }, { 20, 0, 82 }, { 7, 10, 1117 }, { 8, 10, 539 }, - { 5, 0, 393 }, { 6, 0, 378 }, { 7, 0, 1981 }, { 9, 0, 32 }, - { 9, 0, 591 }, { 10, 0, 685 }, { 10, 0, 741 }, { 14, 0, 382 }, - { 5, 0, 788 }, { 6, 0, 1281 }, { 6, 0, 1295 }, { 7, 0, 1968 }, - { 13, 0, 509 }, { 4, 0, 61 }, { 5, 0, 58 }, { 5, 0, 171 }, - { 5, 0, 683 }, { 6, 0, 291 }, { 6, 0, 566 }, { 7, 0, 1650 }, - { 11, 0, 523 }, { 12, 0, 273 }, { 12, 0, 303 }, { 15, 0, 39 }, - { 15, 0, 111 }, { 6, 0, 706 }, { 6, 0, 1283 }, { 6, 0, 589 }, - { 7, 11, 1433 }, { 5, 11, 435 }, { 7, 0, 1059 }, { 13, 0, 54 }, - { 5, 10, 4 }, { 5, 10, 810 }, { 6, 10, 13 }, { 6, 10, 538 }, - { 6, 10, 1690 }, { 6, 10, 1726 }, { 7, 10, 1819 }, { 8, 10, 148 }, - { 8, 10, 696 }, { 8, 10, 791 }, { 12, 10, 125 }, { 15, 10, 9 }, - { 7, 10, 1268 }, { 5, 11, 85 }, { 6, 11, 419 }, { 7, 11, 134 }, - { 7, 11, 305 }, { 7, 11, 361 }, { 7, 11, 1337 }, { 8, 11, 71 }, - { 12, 11, 519 }, { 9, 0, 824 }, { 12, 11, 688 }, { 5, 11, 691 }, - { 7, 11, 345 }, { 7, 10, 1385 }, { 9, 11, 94 }, { 11, 10, 582 }, - { 11, 10, 650 }, { 11, 10, 901 }, { 11, 10, 949 }, { 12, 11, 169 }, - { 12, 10, 232 }, { 12, 10, 236 }, { 13, 10, 413 }, { 13, 10, 501 }, - { 18, 10, 116 }, { 4, 0, 917 }, { 5, 0, 1005 }, { 7, 0, 1598 }, - { 5, 11, 183 }, { 6, 11, 582 }, { 9, 11, 344 }, { 10, 11, 679 }, - { 12, 11, 435 }, { 4, 10, 925 }, { 5, 10, 803 }, { 8, 10, 698 }, - { 10, 10, 828 }, { 4, 0, 919 }, { 7, 11, 511 }, { 11, 10, 992 }, - { 4, 0, 255 }, { 5, 0, 302 }, { 6, 0, 132 }, { 7, 0, 128 }, - { 7, 0, 283 }, { 7, 0, 1299 }, { 10, 0, 52 }, { 10, 0, 514 }, - { 11, 0, 925 }, { 13, 0, 92 }, { 14, 0, 309 }, { 6, 0, 1369 }, - { 7, 10, 1847 }, { 6, 0, 328 }, { 7, 11, 1993 }, { 8, 11, 684 }, - { 5, 10, 383 }, { 9, 0, 173 }, { 6, 11, 583 }, { 6, 0, 1411 }, - { 19, 0, 65 }, { 5, 11, 704 }, { 8, 11, 357 }, { 10, 11, 745 }, - { 14, 11, 426 }, { 17, 11, 94 }, { 19, 11, 57 }, { 9, 10, 660 }, - { 10, 10, 347 }, { 4, 11, 179 }, { 5, 11, 198 }, { 5, 11, 697 }, - { 7, 11, 347 }, { 7, 11, 971 }, { 8, 11, 181 }, { 10, 11, 711 }, - { 13, 0, 442 }, { 11, 0, 842 }, { 11, 0, 924 }, { 13, 0, 317 }, - { 13, 0, 370 }, { 13, 0, 469 }, { 13, 0, 471 }, { 14, 0, 397 }, - { 18, 0, 69 }, { 18, 0, 145 }, { 7, 10, 572 }, { 9, 10, 592 }, - { 11, 10, 680 }, { 12, 10, 356 }, { 12, 10, 550 }, { 14, 11, 19 }, - { 14, 11, 28 }, { 16, 11, 29 }, { 8, 0, 534 }, { 4, 11, 243 }, - { 5, 11, 203 }, { 7, 11, 19 }, { 7, 11, 71 }, { 7, 11, 113 }, - { 10, 11, 405 }, { 11, 11, 357 }, { 14, 11, 240 }, { 6, 0, 210 }, - { 10, 0, 845 }, { 10, 0, 862 }, { 7, 11, 1351 }, { 9, 11, 581 }, - { 10, 11, 639 }, { 11, 11, 453 }, { 12, 11, 584 }, { 7, 11, 1450 }, - { 11, 11, 99 }, { 10, 0, 892 }, { 12, 0, 719 }, { 16, 0, 105 }, - { 4, 0, 284 }, { 6, 0, 223 }, { 6, 11, 492 }, { 5, 11, 134 }, - { 6, 11, 408 }, { 6, 11, 495 }, { 7, 11, 1593 }, { 8, 0, 529 }, - { 9, 0, 807 }, { 4, 0, 218 }, { 7, 0, 526 }, { 15, 0, 137 }, - { 6, 0, 1444 }, { 14, 11, 4 }, { 4, 11, 665 }, { 4, 0, 270 }, - { 5, 0, 192 }, { 6, 0, 332 }, { 7, 0, 1322 }, { 4, 11, 248 }, - { 7, 11, 137 }, { 9, 11, 349 }, { 12, 0, 661 }, { 7, 0, 1517 }, - { 11, 0, 597 }, { 14, 0, 76 }, { 14, 0, 335 }, { 20, 0, 33 }, - { 7, 10, 748 }, { 11, 10, 700 }, { 5, 11, 371 }, { 7, 11, 563 }, - { 18, 11, 57 }, { 5, 10, 127 }, { 5, 0, 418 }, { 4, 11, 374 }, - { 7, 11, 547 }, { 7, 11, 1700 }, { 7, 11, 1833 }, { 11, 11, 858 }, - { 6, 10, 198 }, { 12, 10, 83 }, { 7, 11, 1812 }, { 13, 11, 259 }, - { 13, 11, 356 }, { 14, 11, 242 }, { 19, 11, 114 }, { 7, 0, 379 }, - { 8, 0, 481 }, { 9, 0, 377 }, { 5, 10, 276 }, { 6, 10, 55 }, - { 7, 10, 1369 }, { 10, 11, 286 }, { 5, 0, 1003 }, { 6, 0, 149 }, - { 6, 10, 1752 }, { 8, 10, 726 }, { 8, 0, 262 }, { 9, 0, 627 }, - { 10, 0, 18 }, { 11, 0, 214 }, { 11, 0, 404 }, { 11, 0, 457 }, - { 11, 0, 780 }, { 11, 0, 913 }, { 13, 0, 401 }, { 14, 0, 200 }, - { 6, 11, 1647 }, { 7, 11, 1552 }, { 7, 11, 2010 }, { 9, 11, 494 }, - { 9, 11, 509 }, { 7, 0, 742 }, { 8, 0, 304 }, { 4, 0, 142 }, - { 5, 10, 764 }, { 6, 10, 309 }, { 7, 10, 331 }, { 10, 10, 550 }, - { 7, 10, 1062 }, { 6, 11, 123 }, { 7, 11, 214 }, { 7, 10, 986 }, - { 9, 11, 728 }, { 10, 11, 157 }, { 11, 11, 346 }, { 11, 11, 662 }, - { 15, 11, 106 }, { 7, 10, 1573 }, { 7, 0, 925 }, { 9, 0, 799 }, - { 4, 0, 471 }, { 5, 0, 51 }, { 6, 0, 602 }, { 8, 0, 484 }, - { 10, 0, 195 }, { 8, 0, 688 }, { 4, 0, 697 }, { 6, 0, 1169 }, - { 6, 0, 1241 }, { 6, 10, 194 }, { 7, 10, 133 }, { 10, 10, 493 }, - { 10, 10, 570 }, { 11, 10, 664 }, { 12, 0, 751 }, { 7, 0, 929 }, - { 10, 0, 452 }, { 11, 0, 878 }, { 16, 0, 33 }, { 5, 10, 24 }, - { 5, 10, 569 }, { 6, 10, 3 }, { 6, 10, 119 }, { 6, 10, 143 }, - { 6, 10, 440 }, { 7, 10, 599 }, { 7, 10, 1686 }, { 7, 10, 1854 }, - { 8, 10, 424 }, { 9, 10, 43 }, { 9, 10, 584 }, { 9, 10, 760 }, - { 10, 10, 328 }, { 11, 10, 159 }, { 11, 10, 253 }, { 12, 10, 487 }, - { 12, 10, 531 }, { 4, 11, 707 }, { 13, 11, 106 }, { 18, 11, 49 }, - { 19, 11, 41 }, { 5, 0, 221 }, { 5, 11, 588 }, { 6, 11, 393 }, - { 6, 0, 1437 }, { 6, 11, 211 }, { 7, 11, 1690 }, { 11, 11, 486 }, - { 12, 11, 369 }, { 5, 10, 14 }, { 5, 10, 892 }, { 6, 10, 283 }, - { 7, 10, 234 }, { 8, 10, 537 }, { 4, 0, 988 }, { 8, 0, 955 }, - { 7, 0, 1251 }, { 4, 10, 126 }, { 8, 10, 635 }, { 19, 10, 34 }, - { 4, 10, 316 }, { 7, 10, 1561 }, { 9, 10, 861 }, { 4, 10, 64 }, - { 5, 10, 352 }, { 5, 10, 720 }, { 6, 10, 368 }, { 11, 10, 359 }, - { 6, 0, 192 }, { 4, 0, 132 }, { 5, 0, 69 }, { 7, 0, 1242 }, - { 7, 10, 1577 }, { 10, 10, 304 }, { 10, 10, 549 }, { 12, 10, 365 }, - { 13, 10, 220 }, { 13, 10, 240 }, { 14, 10, 33 }, { 4, 0, 111 }, - { 7, 0, 865 }, { 6, 11, 219 }, { 5, 11, 582 }, { 6, 11, 1646 }, - { 7, 11, 99 }, { 7, 11, 1962 }, { 7, 11, 1986 }, { 8, 11, 515 }, - { 8, 11, 773 }, { 9, 11, 23 }, { 9, 11, 491 }, { 12, 11, 620 }, - { 14, 11, 52 }, { 17, 11, 50 }, { 4, 0, 767 }, { 7, 11, 568 }, - { 20, 11, 21 }, { 6, 0, 42 }, { 7, 0, 1416 }, { 7, 0, 2005 }, - { 8, 0, 131 }, { 8, 0, 466 }, { 9, 0, 672 }, { 13, 0, 252 }, - { 20, 0, 103 }, { 5, 11, 851 }, { 7, 0, 1050 }, { 6, 10, 175 }, - { 9, 10, 289 }, { 5, 10, 432 }, { 5, 10, 913 }, { 6, 0, 44 }, - { 8, 0, 368 }, { 7, 11, 784 }, { 4, 0, 570 }, { 5, 0, 120 }, - { 11, 10, 595 }, { 12, 0, 29 }, { 6, 0, 227 }, { 7, 0, 1589 }, - { 4, 11, 98 }, { 7, 11, 1365 }, { 9, 11, 422 }, { 9, 11, 670 }, - { 10, 11, 775 }, { 11, 11, 210 }, { 13, 11, 26 }, { 13, 11, 457 }, - { 13, 11, 476 }, { 12, 10, 80 }, { 5, 10, 931 }, { 6, 10, 1698 }, - { 5, 0, 522 }, { 6, 0, 1120 }, { 7, 0, 1529 }, { 12, 0, 739 }, - { 14, 0, 448 }, { 14, 0, 467 }, { 11, 10, 526 }, { 11, 10, 939 }, - { 13, 10, 290 }, { 5, 10, 774 }, { 6, 10, 1637 }, { 6, 10, 1686 }, - { 6, 10, 1751 }, { 6, 0, 1667 }, { 7, 0, 2036 }, { 7, 10, 1167 }, - { 11, 10, 934 }, { 13, 10, 391 }, { 17, 10, 76 }, { 9, 11, 147 }, - { 6, 10, 260 }, { 7, 10, 1484 }, { 11, 11, 821 }, { 12, 11, 110 }, - { 12, 11, 153 }, { 18, 11, 41 }, { 22, 11, 19 }, { 6, 0, 511 }, - { 12, 0, 132 }, { 6, 10, 573 }, { 5, 0, 568 }, { 6, 0, 138 }, - { 7, 0, 1293 }, { 4, 0, 1020 }, { 8, 0, 258 }, { 9, 0, 208 }, - { 9, 0, 359 }, { 4, 0, 565 }, { 8, 0, 23 }, { 8, 0, 827 }, - { 6, 0, 344 }, { 4, 0, 922 }, { 5, 0, 1023 }, { 13, 11, 477 }, - { 14, 11, 120 }, { 20, 11, 61 }, { 6, 0, 240 }, { 5, 11, 209 }, - { 6, 11, 30 }, { 11, 11, 56 }, { 11, 11, 305 }, { 6, 0, 171 }, - { 7, 0, 1002 }, { 7, 0, 1324 }, { 9, 0, 415 }, { 14, 0, 230 }, - { 18, 0, 68 }, { 4, 10, 292 }, { 4, 10, 736 }, { 5, 10, 871 }, - { 6, 10, 1689 }, { 7, 10, 1944 }, { 9, 10, 580 }, { 9, 11, 635 }, - { 11, 11, 559 }, { 4, 11, 150 }, { 5, 11, 303 }, { 6, 11, 327 }, - { 6, 10, 63 }, { 7, 10, 920 }, { 5, 10, 793 }, { 8, 11, 192 }, - { 10, 11, 78 }, { 10, 11, 555 }, { 11, 11, 308 }, { 13, 11, 359 }, - { 19, 11, 95 }, { 7, 11, 786 }, { 7, 11, 1712 }, { 8, 0, 402 }, - { 6, 0, 754 }, { 6, 11, 1638 }, { 7, 11, 79 }, { 7, 11, 496 }, - { 9, 11, 138 }, { 10, 11, 336 }, { 11, 11, 12 }, { 12, 11, 412 }, - { 12, 11, 440 }, { 14, 11, 305 }, { 4, 0, 716 }, { 13, 0, 31 }, - { 5, 0, 982 }, { 8, 0, 691 }, { 8, 0, 731 }, { 5, 10, 67 }, - { 6, 10, 62 }, { 6, 10, 374 }, { 7, 10, 1391 }, { 9, 10, 790 }, - { 12, 10, 47 }, { 11, 11, 556 }, { 23, 11, 1 }, { 7, 11, 204 }, - { 7, 11, 415 }, { 8, 11, 42 }, { 10, 11, 85 }, { 11, 11, 33 }, - { 11, 11, 564 }, { 12, 11, 571 }, { 21, 11, 1 }, { 8, 0, 888 }, - { 7, 11, 610 }, { 7, 11, 1501 }, { 4, 10, 391 }, { 7, 10, 1169 }, - { 5, 0, 847 }, { 9, 0, 840 }, { 10, 0, 803 }, { 9, 0, 823 }, - { 6, 0, 785 }, { 8, 0, 152 }, { 9, 0, 53 }, { 9, 0, 268 }, - { 9, 0, 901 }, { 10, 0, 518 }, { 10, 0, 829 }, { 11, 0, 188 }, - { 13, 0, 74 }, { 14, 0, 46 }, { 15, 0, 17 }, { 15, 0, 33 }, - { 17, 0, 40 }, { 18, 0, 36 }, { 19, 0, 20 }, { 22, 0, 1 }, - { 24, 0, 2 }, { 4, 11, 3 }, { 5, 11, 247 }, { 5, 11, 644 }, - { 7, 11, 744 }, { 7, 11, 1207 }, { 7, 11, 1225 }, { 7, 11, 1909 }, - { 18, 11, 147 }, { 8, 0, 532 }, { 7, 0, 681 }, { 4, 10, 271 }, - { 12, 0, 314 }, { 12, 0, 677 }, { 4, 0, 684 }, { 8, 0, 384 }, - { 5, 11, 285 }, { 9, 11, 67 }, { 13, 11, 473 }, { 15, 11, 82 }, - { 4, 10, 253 }, { 5, 10, 544 }, { 7, 10, 300 }, { 9, 10, 340 }, - { 7, 0, 110 }, { 7, 0, 447 }, { 8, 0, 290 }, { 8, 0, 591 }, - { 9, 0, 382 }, { 9, 0, 649 }, { 11, 0, 71 }, { 11, 0, 155 }, - { 11, 0, 313 }, { 12, 0, 5 }, { 13, 0, 325 }, { 14, 0, 287 }, - { 6, 0, 1818 }, { 8, 0, 1007 }, { 10, 0, 321 }, { 7, 0, 360 }, - { 7, 0, 425 }, { 9, 0, 66 }, { 9, 0, 278 }, { 10, 0, 644 }, - { 5, 10, 818 }, { 5, 0, 385 }, { 5, 10, 541 }, { 6, 10, 94 }, - { 6, 10, 499 }, { 7, 10, 230 }, { 11, 10, 321 }, { 4, 10, 920 }, - { 5, 10, 25 }, { 5, 10, 790 }, { 6, 10, 457 }, { 7, 10, 853 }, - { 8, 10, 788 }, { 4, 0, 900 }, { 5, 0, 861 }, { 5, 0, 254 }, - { 7, 0, 985 }, { 8, 0, 73 }, { 7, 0, 1959 }, { 8, 0, 683 }, - { 6, 10, 1765 }, { 5, 10, 822 }, { 4, 10, 634 }, { 4, 11, 29 }, - { 6, 11, 532 }, { 7, 11, 1628 }, { 7, 11, 1648 }, { 9, 11, 303 }, - { 9, 11, 350 }, { 10, 11, 433 }, { 11, 11, 97 }, { 11, 11, 557 }, - { 11, 11, 745 }, { 12, 11, 289 }, { 12, 11, 335 }, { 12, 11, 348 }, - { 12, 11, 606 }, { 13, 11, 116 }, { 13, 11, 233 }, { 13, 11, 466 }, - { 14, 11, 181 }, { 14, 11, 209 }, { 14, 11, 232 }, { 14, 11, 236 }, - { 14, 11, 300 }, { 16, 11, 41 }, { 20, 11, 97 }, { 19, 0, 86 }, - { 6, 10, 36 }, { 7, 10, 658 }, { 8, 10, 454 }, { 7, 11, 1692 }, - { 4, 0, 725 }, { 5, 11, 501 }, { 7, 11, 1704 }, { 9, 11, 553 }, - { 11, 11, 520 }, { 12, 11, 557 }, { 13, 11, 249 }, { 6, 0, 196 }, - { 5, 0, 831 }, { 8, 0, 723 }, { 7, 0, 1897 }, { 13, 0, 80 }, - { 13, 0, 437 }, { 17, 0, 74 }, { 4, 0, 992 }, { 6, 0, 627 }, - { 8, 0, 994 }, { 7, 11, 1294 }, { 4, 10, 104 }, { 5, 0, 848 }, - { 6, 0, 66 }, { 8, 0, 764 }, { 4, 0, 36 }, { 7, 0, 1387 }, - { 10, 0, 205 }, { 11, 0, 755 }, { 6, 0, 1046 }, { 6, 0, 1485 }, - { 6, 0, 950 }, { 4, 0, 887 }, { 14, 0, 450 }, { 20, 0, 111 }, - { 7, 0, 620 }, { 7, 0, 831 }, { 9, 10, 542 }, { 9, 10, 566 }, - { 10, 10, 728 }, { 6, 0, 165 }, { 10, 0, 388 }, { 11, 10, 263 }, - { 4, 0, 719 }, { 7, 0, 155 }, { 10, 10, 468 }, { 6, 11, 453 }, - { 16, 11, 36 }, { 6, 11, 129 }, { 5, 0, 533 }, { 7, 0, 755 }, - { 10, 0, 780 }, { 6, 0, 1465 }, { 4, 0, 353 }, { 6, 0, 146 }, - { 6, 0, 1789 }, { 7, 0, 427 }, { 7, 0, 990 }, { 7, 0, 1348 }, - { 9, 0, 665 }, { 9, 0, 898 }, { 11, 0, 893 }, { 14, 0, 212 }, - { 7, 10, 87 }, { 14, 10, 288 }, { 4, 0, 45 }, { 7, 0, 1257 }, - { 12, 0, 7 }, { 7, 10, 988 }, { 7, 10, 1939 }, { 9, 10, 64 }, - { 9, 10, 502 }, { 12, 10, 34 }, { 13, 10, 12 }, { 13, 10, 234 }, - { 19, 10, 77 }, { 4, 0, 607 }, { 5, 11, 60 }, { 6, 11, 504 }, - { 7, 11, 614 }, { 7, 11, 1155 }, { 12, 11, 0 }, { 7, 10, 141 }, - { 8, 11, 198 }, { 11, 11, 29 }, { 12, 11, 534 }, { 12, 0, 65 }, - { 8, 0, 816 }, { 4, 10, 619 }, { 11, 0, 88 }, { 5, 10, 246 }, - { 8, 10, 189 }, { 9, 10, 355 }, { 9, 10, 512 }, { 10, 10, 124 }, - { 10, 10, 453 }, { 11, 10, 143 }, { 11, 10, 416 }, { 11, 10, 859 }, - { 13, 10, 341 }, { 4, 11, 379 }, { 7, 11, 1397 }, { 4, 0, 600 }, - { 9, 0, 621 }, { 5, 0, 367 }, { 6, 0, 561 }, { 6, 0, 559 }, - { 6, 0, 1691 }, { 6, 0, 585 }, { 6, 11, 585 }, { 7, 11, 1228 }, - { 4, 11, 118 }, { 5, 10, 678 }, { 6, 11, 274 }, { 6, 11, 361 }, - { 7, 11, 75 }, { 13, 11, 441 }, { 7, 11, 1818 }, { 9, 11, 841 }, - { 5, 0, 573 }, { 6, 0, 287 }, { 7, 10, 862 }, { 7, 10, 1886 }, - { 10, 10, 179 }, { 4, 10, 517 }, { 12, 11, 693 }, { 5, 11, 314 }, - { 6, 11, 221 }, { 7, 11, 419 }, { 10, 11, 650 }, { 11, 11, 396 }, - { 12, 11, 156 }, { 13, 11, 369 }, { 14, 11, 333 }, { 17, 11, 47 }, - { 12, 10, 540 }, { 8, 10, 667 }, { 11, 10, 403 }, { 18, 10, 83 }, - { 6, 0, 672 }, { 5, 10, 761 }, { 9, 0, 157 }, { 10, 10, 131 }, - { 12, 10, 72 }, { 7, 0, 714 }, { 6, 11, 460 }, { 6, 0, 456 }, - { 5, 0, 925 }, { 5, 11, 682 }, { 7, 11, 1887 }, { 8, 11, 510 }, - { 8, 11, 475 }, { 5, 11, 1016 }, { 9, 0, 19 }, { 7, 11, 602 }, - { 8, 11, 179 }, { 10, 11, 781 }, { 12, 11, 126 }, { 6, 11, 329 }, - { 10, 11, 111 }, { 6, 0, 822 }, { 6, 0, 1473 }, { 16, 11, 86 }, - { 11, 0, 113 }, { 11, 11, 113 }, { 5, 11, 821 }, { 6, 11, 1687 }, - { 5, 10, 449 }, { 7, 0, 463 }, { 17, 0, 69 }, { 8, 10, 103 }, - { 7, 10, 2028 }, { 10, 10, 641 }, { 6, 0, 193 }, { 7, 0, 240 }, - { 7, 0, 1682 }, { 10, 0, 51 }, { 10, 0, 640 }, { 11, 0, 410 }, - { 13, 0, 82 }, { 14, 0, 247 }, { 14, 0, 331 }, { 14, 0, 377 }, - { 6, 0, 471 }, { 11, 0, 411 }, { 14, 0, 2 }, { 5, 11, 71 }, - { 7, 11, 1407 }, { 9, 11, 388 }, { 9, 11, 704 }, { 10, 11, 261 }, - { 10, 11, 619 }, { 11, 11, 547 }, { 11, 11, 619 }, { 15, 11, 157 }, - { 8, 0, 633 }, { 7, 0, 1148 }, { 6, 0, 554 }, { 7, 0, 1392 }, - { 12, 0, 129 }, { 7, 10, 1274 }, { 7, 10, 1386 }, { 7, 11, 2008 }, - { 9, 11, 337 }, { 10, 11, 517 }, { 18, 10, 87 }, { 7, 0, 803 }, - { 8, 0, 542 }, { 6, 10, 187 }, { 7, 10, 1203 }, { 8, 10, 380 }, - { 14, 10, 117 }, { 21, 10, 28 }, { 6, 10, 297 }, { 7, 10, 793 }, - { 11, 10, 938 }, { 8, 0, 438 }, { 11, 0, 363 }, { 7, 10, 464 }, - { 11, 10, 105 }, { 12, 10, 231 }, { 14, 10, 386 }, { 15, 10, 102 }, - { 20, 10, 75 }, { 5, 11, 16 }, { 6, 11, 86 }, { 6, 11, 603 }, - { 7, 11, 292 }, { 7, 11, 561 }, { 8, 11, 257 }, { 8, 11, 382 }, - { 9, 11, 721 }, { 9, 11, 778 }, { 11, 11, 581 }, { 12, 11, 466 }, - { 6, 0, 717 }, { 4, 11, 486 }, { 5, 11, 491 }, { 4, 0, 875 }, - { 4, 11, 72 }, { 6, 11, 265 }, { 7, 11, 847 }, { 4, 0, 237 }, - { 7, 0, 514 }, { 6, 0, 392 }, { 7, 0, 65 }, { 7, 0, 2019 }, - { 12, 11, 261 }, { 7, 11, 922 }, { 9, 11, 404 }, { 12, 0, 563 }, - { 14, 0, 101 }, { 18, 0, 129 }, { 7, 10, 1010 }, { 11, 10, 733 }, - { 11, 10, 759 }, { 13, 10, 34 }, { 18, 10, 45 }, { 7, 10, 1656 }, - { 9, 10, 369 }, { 10, 10, 338 }, { 10, 10, 490 }, { 11, 10, 154 }, - { 11, 10, 545 }, { 11, 10, 775 }, { 13, 10, 77 }, { 13, 10, 274 }, - { 4, 0, 444 }, { 10, 0, 146 }, { 12, 0, 9 }, { 11, 11, 163 }, - { 7, 0, 1260 }, { 7, 0, 1790 }, { 9, 0, 222 }, { 10, 0, 43 }, - { 11, 0, 900 }, { 9, 11, 234 }, { 10, 0, 971 }, { 9, 0, 761 }, - { 6, 0, 699 }, { 8, 11, 434 }, { 6, 0, 1116 }, { 7, 0, 1366 }, - { 5, 10, 20 }, { 6, 11, 197 }, { 6, 10, 298 }, { 7, 10, 659 }, - { 8, 11, 205 }, { 9, 10, 219 }, { 4, 11, 490 }, { 11, 11, 820 }, - { 22, 11, 51 }, { 7, 10, 1440 }, { 11, 10, 854 }, { 11, 10, 872 }, - { 11, 10, 921 }, { 12, 10, 551 }, { 13, 10, 472 }, { 14, 10, 367 }, - { 12, 11, 13 }, { 4, 0, 829 }, { 12, 0, 242 }, { 4, 10, 439 }, - { 8, 10, 669 }, { 6, 0, 593 }, { 6, 11, 452 }, { 7, 11, 312 }, - { 10, 11, 219 }, { 4, 11, 333 }, { 9, 11, 176 }, { 12, 11, 353 }, - { 13, 11, 187 }, { 7, 0, 36 }, { 8, 0, 201 }, { 8, 0, 605 }, - { 12, 0, 224 }, { 4, 10, 233 }, { 6, 0, 1430 }, { 6, 0, 1806 }, - { 4, 0, 523 }, { 5, 0, 638 }, { 6, 0, 1889 }, { 9, 0, 958 }, - { 9, 0, 971 }, { 9, 0, 976 }, { 12, 0, 796 }, { 12, 0, 799 }, - { 12, 0, 808 }, { 12, 0, 835 }, { 12, 0, 836 }, { 12, 0, 914 }, - { 12, 0, 946 }, { 15, 0, 216 }, { 15, 0, 232 }, { 18, 0, 183 }, - { 18, 0, 187 }, { 18, 0, 194 }, { 18, 0, 212 }, { 18, 0, 232 }, - { 21, 0, 49 }, { 4, 10, 482 }, { 6, 0, 827 }, { 6, 0, 1434 }, - { 7, 10, 346 }, { 6, 0, 2043 }, { 6, 0, 242 }, { 7, 0, 227 }, - { 7, 0, 1581 }, { 8, 0, 104 }, { 9, 0, 113 }, { 9, 0, 220 }, - { 9, 0, 427 }, { 10, 0, 136 }, { 10, 0, 239 }, { 11, 0, 579 }, - { 11, 0, 1023 }, { 13, 0, 4 }, { 13, 0, 204 }, { 13, 0, 316 }, - { 20, 0, 86 }, { 6, 11, 1685 }, { 7, 0, 148 }, { 8, 0, 284 }, - { 13, 0, 63 }, { 14, 0, 10 }, { 7, 11, 584 }, { 6, 0, 1249 }, - { 7, 0, 861 }, { 7, 10, 334 }, { 5, 10, 795 }, { 6, 10, 1741 }, - { 9, 11, 70 }, { 4, 0, 807 }, { 7, 11, 135 }, { 8, 11, 7 }, - { 8, 11, 62 }, { 9, 11, 243 }, { 10, 11, 658 }, { 10, 11, 697 }, - { 11, 11, 456 }, { 11, 11, 756 }, { 9, 11, 395 }, { 10, 11, 79 }, - { 9, 11, 108 }, { 19, 0, 94 }, { 8, 0, 494 }, { 7, 11, 631 }, - { 7, 10, 622 }, { 7, 0, 1510 }, { 7, 10, 1750 }, { 4, 10, 203 }, - { 7, 10, 1936 }, { 7, 11, 406 }, { 7, 11, 459 }, { 8, 11, 606 }, - { 11, 11, 726 }, { 7, 0, 1306 }, { 8, 0, 505 }, { 9, 0, 482 }, - { 10, 0, 126 }, { 11, 0, 225 }, { 12, 0, 347 }, { 12, 0, 449 }, - { 13, 0, 19 }, { 14, 0, 218 }, { 14, 0, 435 }, { 5, 0, 268 }, - { 10, 0, 764 }, { 12, 0, 120 }, { 13, 0, 39 }, { 17, 0, 127 }, - { 14, 11, 68 }, { 11, 10, 678 }, { 12, 10, 307 }, { 12, 11, 268 }, - { 12, 11, 640 }, { 14, 11, 119 }, { 7, 10, 2044 }, { 5, 11, 612 }, - { 4, 11, 372 }, { 7, 11, 482 }, { 8, 11, 158 }, { 9, 11, 602 }, - { 9, 11, 615 }, { 10, 11, 245 }, { 10, 11, 678 }, { 10, 11, 744 }, - { 11, 11, 248 }, { 11, 11, 806 }, { 7, 10, 311 }, { 9, 10, 308 }, - { 12, 10, 255 }, { 4, 0, 384 }, { 7, 0, 1022 }, { 5, 11, 854 }, - { 7, 11, 1991 }, { 7, 10, 1266 }, { 4, 10, 400 }, { 5, 10, 267 }, - { 7, 10, 232 }, { 7, 0, 1703 }, { 9, 0, 159 }, { 11, 0, 661 }, - { 12, 0, 603 }, { 4, 0, 964 }, { 14, 0, 438 }, { 14, 0, 444 }, - { 14, 0, 456 }, { 22, 0, 60 }, { 22, 0, 63 }, { 9, 11, 106 }, - { 9, 11, 163 }, { 9, 11, 296 }, { 10, 11, 167 }, { 10, 11, 172 }, - { 10, 11, 777 }, { 11, 11, 16 }, { 8, 0, 583 }, { 4, 0, 515 }, - { 8, 0, 632 }, { 8, 0, 697 }, { 9, 0, 854 }, { 5, 11, 195 }, - { 7, 11, 1685 }, { 6, 0, 1123 }, { 6, 0, 1365 }, { 6, 11, 328 }, - { 7, 11, 1997 }, { 8, 11, 730 }, { 11, 11, 1006 }, { 4, 0, 136 }, - { 5, 0, 551 }, { 6, 0, 1782 }, { 7, 0, 1287 }, { 9, 0, 44 }, - { 10, 0, 552 }, { 10, 0, 642 }, { 11, 0, 839 }, { 12, 0, 274 }, - { 12, 0, 275 }, { 12, 0, 372 }, { 13, 0, 91 }, { 14, 0, 125 }, - { 5, 11, 751 }, { 11, 11, 797 }, { 12, 11, 203 }, { 5, 0, 732 }, - { 7, 0, 679 }, { 8, 0, 313 }, { 4, 10, 100 }, { 7, 11, 821 }, - { 10, 0, 361 }, { 14, 0, 316 }, { 6, 0, 595 }, { 6, 0, 147 }, - { 7, 0, 886 }, { 9, 0, 753 }, { 10, 0, 268 }, { 5, 10, 362 }, - { 5, 10, 443 }, { 6, 10, 318 }, { 7, 10, 1019 }, { 11, 10, 623 }, - { 5, 10, 463 }, { 8, 10, 296 }, { 4, 10, 454 }, { 5, 11, 950 }, - { 5, 11, 994 }, { 6, 11, 351 }, { 10, 0, 137 }, { 5, 10, 48 }, - { 5, 10, 404 }, { 6, 10, 557 }, { 7, 10, 458 }, { 8, 10, 597 }, - { 10, 10, 455 }, { 10, 10, 606 }, { 11, 10, 49 }, { 11, 10, 548 }, - { 12, 10, 476 }, { 13, 10, 18 }, { 13, 10, 450 }, { 5, 0, 414 }, - { 7, 0, 1762 }, { 5, 11, 421 }, { 7, 11, 47 }, { 5, 10, 442 }, - { 7, 10, 1984 }, { 6, 0, 599 }, { 6, 0, 1749 }, { 6, 0, 1627 }, - { 4, 0, 488 }, { 4, 11, 350 }, { 9, 11, 751 }, { 4, 0, 83 }, - { 12, 0, 676 }, { 5, 11, 967 }, { 7, 0, 1639 }, { 5, 10, 55 }, - { 12, 10, 161 }, { 4, 11, 473 }, { 7, 11, 623 }, { 8, 11, 808 }, - { 9, 11, 871 }, { 9, 11, 893 }, { 11, 11, 38 }, { 11, 11, 431 }, - { 12, 11, 112 }, { 12, 11, 217 }, { 12, 11, 243 }, { 12, 11, 562 }, - { 12, 11, 683 }, { 13, 11, 141 }, { 13, 11, 197 }, { 13, 11, 227 }, - { 13, 11, 406 }, { 13, 11, 487 }, { 14, 11, 156 }, { 14, 11, 203 }, - { 14, 11, 224 }, { 14, 11, 256 }, { 18, 11, 58 }, { 22, 11, 0 }, - { 5, 10, 450 }, { 7, 11, 736 }, { 11, 11, 264 }, { 6, 0, 278 }, - { 4, 11, 222 }, { 7, 11, 286 }, { 8, 11, 629 }, { 7, 10, 869 }, - { 12, 0, 97 }, { 16, 0, 14 }, { 6, 0, 1085 }, { 4, 10, 213 }, - { 7, 10, 223 }, { 8, 10, 80 }, { 7, 0, 388 }, { 7, 0, 644 }, - { 11, 0, 781 }, { 4, 0, 849 }, { 7, 0, 229 }, { 8, 0, 59 }, - { 9, 0, 190 }, { 10, 0, 378 }, { 12, 0, 191 }, { 7, 10, 381 }, - { 7, 10, 806 }, { 7, 10, 820 }, { 8, 10, 354 }, { 8, 10, 437 }, - { 8, 10, 787 }, { 9, 10, 657 }, { 10, 10, 58 }, { 10, 10, 339 }, - { 10, 10, 749 }, { 11, 10, 914 }, { 12, 10, 162 }, { 13, 10, 75 }, - { 14, 10, 106 }, { 14, 10, 198 }, { 14, 10, 320 }, { 14, 10, 413 }, - { 18, 10, 43 }, { 13, 11, 306 }, { 8, 10, 747 }, { 6, 0, 1115 }, - { 16, 0, 94 }, { 16, 0, 108 }, { 8, 11, 146 }, { 6, 0, 700 }, - { 6, 0, 817 }, { 6, 0, 1002 }, { 5, 10, 692 }, { 4, 11, 465 }, - { 7, 11, 1663 }, { 6, 10, 191 }, { 6, 0, 1414 }, { 7, 11, 913 }, - { 4, 0, 660 }, { 7, 0, 1035 }, { 10, 0, 737 }, { 6, 10, 162 }, - { 7, 10, 1960 }, { 8, 10, 831 }, { 4, 10, 706 }, { 7, 0, 690 }, - { 9, 0, 217 }, { 9, 0, 587 }, { 12, 0, 521 }, { 10, 10, 426 }, - { 7, 10, 1235 }, { 6, 11, 82 }, { 7, 11, 138 }, { 7, 11, 517 }, - { 9, 11, 673 }, { 11, 11, 238 }, { 10, 0, 272 }, { 5, 11, 495 }, - { 7, 11, 834 }, { 9, 11, 733 }, { 11, 11, 378 }, { 6, 0, 1744 }, - { 4, 0, 1011 }, { 7, 11, 828 }, { 14, 11, 116 }, { 4, 0, 733 }, - { 9, 0, 194 }, { 10, 0, 92 }, { 11, 0, 198 }, { 12, 0, 84 }, - { 13, 0, 128 }, { 5, 11, 559 }, { 10, 0, 57 }, { 10, 0, 277 }, - { 6, 11, 21 }, { 6, 11, 1737 }, { 7, 11, 1444 }, { 8, 11, 224 }, - { 4, 10, 204 }, { 9, 10, 902 }, { 8, 10, 833 }, { 11, 0, 348 }, - { 12, 0, 99 }, { 18, 0, 1 }, { 18, 0, 11 }, { 19, 0, 4 }, - { 7, 10, 366 }, { 9, 10, 287 }, { 12, 10, 199 }, { 12, 10, 556 }, - { 12, 10, 577 }, { 6, 0, 1981 }, { 8, 0, 936 }, { 21, 0, 33 }, - { 22, 0, 40 }, { 5, 11, 519 }, { 10, 11, 204 }, { 5, 10, 356 }, - { 7, 10, 224 }, { 6, 0, 775 }, { 7, 0, 306 }, { 7, 10, 630 }, - { 9, 10, 567 }, { 11, 10, 150 }, { 11, 10, 444 }, { 13, 10, 119 }, - { 5, 0, 979 }, { 6, 10, 539 }, { 5, 0, 611 }, { 4, 11, 402 }, - { 7, 11, 1679 }, { 5, 0, 178 }, { 7, 11, 2 }, { 8, 11, 323 }, - { 8, 11, 479 }, { 5, 11, 59 }, { 7, 11, 672 }, { 4, 0, 1010 }, - { 6, 0, 1969 }, { 10, 11, 237 }, { 5, 11, 412 }, { 18, 11, 34 }, - { 7, 11, 1740 }, { 18, 11, 48 }, { 6, 0, 664 }, { 11, 10, 814 }, - { 4, 11, 85 }, { 7, 11, 549 }, { 5, 11, 94 }, { 5, 11, 457 }, - { 4, 0, 390 }, { 6, 0, 1510 }, { 4, 10, 235 }, { 7, 10, 255 }, - { 4, 10, 194 }, { 5, 10, 584 }, { 6, 11, 11 }, { 6, 10, 384 }, - { 7, 11, 187 }, { 7, 10, 583 }, { 10, 10, 761 }, { 11, 10, 760 }, - { 11, 10, 851 }, { 4, 11, 522 }, { 11, 11, 802 }, { 7, 0, 493 }, - { 10, 11, 776 }, { 13, 11, 345 }, { 14, 11, 425 }, { 18, 0, 37 }, - { 4, 11, 52 }, { 7, 11, 661 }, { 6, 0, 724 }, { 6, 0, 829 }, - { 5, 11, 520 }, { 5, 10, 562 }, { 4, 11, 281 }, { 5, 11, 38 }, - { 7, 11, 194 }, { 7, 11, 668 }, { 7, 11, 1893 }, { 9, 11, 397 }, - { 5, 10, 191 }, { 9, 10, 271 }, { 7, 0, 1537 }, { 14, 0, 96 }, - { 15, 0, 73 }, { 5, 0, 473 }, { 11, 0, 168 }, { 4, 10, 470 }, - { 6, 10, 153 }, { 7, 10, 1503 }, { 7, 10, 1923 }, { 10, 10, 701 }, - { 11, 10, 132 }, { 11, 10, 227 }, { 11, 10, 320 }, { 11, 10, 436 }, - { 11, 10, 525 }, { 11, 10, 855 }, { 12, 10, 41 }, { 12, 10, 286 }, - { 13, 10, 103 }, { 13, 10, 284 }, { 14, 10, 255 }, { 14, 10, 262 }, - { 15, 10, 117 }, { 15, 10, 127 }, { 5, 0, 105 }, { 5, 0, 438 }, - { 9, 0, 694 }, { 12, 0, 627 }, { 13, 0, 210 }, { 5, 10, 327 }, - { 6, 10, 552 }, { 7, 10, 1754 }, { 9, 10, 604 }, { 6, 0, 1256 }, - { 24, 0, 11 }, { 5, 11, 448 }, { 11, 11, 98 }, { 11, 11, 524 }, - { 7, 0, 1626 }, { 5, 10, 80 }, { 6, 10, 405 }, { 7, 10, 403 }, - { 7, 10, 1502 }, { 8, 10, 456 }, { 9, 10, 487 }, { 9, 10, 853 }, - { 9, 10, 889 }, { 10, 10, 309 }, { 11, 10, 721 }, { 11, 10, 994 }, - { 12, 10, 430 }, { 13, 10, 165 }, { 14, 11, 16 }, { 18, 11, 44 }, - { 4, 0, 779 }, { 8, 0, 25 }, { 10, 0, 826 }, { 4, 10, 453 }, - { 5, 10, 887 }, { 6, 10, 535 }, { 8, 10, 6 }, { 8, 10, 543 }, - { 8, 10, 826 }, { 9, 11, 461 }, { 12, 11, 632 }, { 4, 0, 308 }, - { 7, 0, 741 }, { 4, 0, 671 }, { 7, 0, 150 }, { 8, 0, 649 }, - { 8, 0, 1020 }, { 9, 0, 99 }, { 6, 11, 336 }, { 8, 11, 552 }, - { 9, 11, 285 }, { 10, 11, 99 }, { 11, 11, 568 }, { 6, 0, 521 }, - { 5, 0, 339 }, { 14, 0, 3 }, { 15, 0, 41 }, { 15, 0, 166 }, - { 19, 0, 66 }, { 6, 11, 423 }, { 7, 11, 665 }, { 7, 11, 1210 }, - { 9, 11, 218 }, { 13, 11, 222 }, { 6, 0, 543 }, { 5, 10, 101 }, - { 5, 11, 256 }, { 6, 10, 88 }, { 7, 10, 1677 }, { 9, 10, 100 }, - { 10, 10, 677 }, { 14, 10, 169 }, { 14, 10, 302 }, { 14, 10, 313 }, - { 15, 10, 48 }, { 15, 10, 84 }, { 4, 10, 310 }, { 7, 10, 708 }, - { 7, 10, 996 }, { 9, 10, 795 }, { 10, 10, 390 }, { 10, 10, 733 }, - { 11, 10, 451 }, { 12, 10, 249 }, { 14, 10, 115 }, { 14, 10, 286 }, - { 15, 10, 100 }, { 5, 10, 587 }, { 13, 11, 417 }, { 14, 11, 129 }, - { 15, 11, 15 }, { 6, 0, 1358 }, { 8, 11, 554 }, { 4, 10, 498 }, - { 7, 10, 217 }, { 8, 10, 140 }, { 10, 10, 610 }, { 7, 11, 989 }, - { 7, 11, 634 }, { 6, 0, 155 }, { 12, 0, 234 }, { 7, 11, 462 }, - { 4, 11, 618 }, { 6, 0, 1628 }, { 4, 0, 766 }, { 4, 11, 339 }, - { 5, 10, 905 }, { 7, 11, 259 }, { 7, 0, 829 }, { 4, 11, 759 }, - { 13, 11, 169 }, { 7, 0, 1445 }, { 4, 10, 456 }, { 7, 10, 358 }, - { 7, 10, 1637 }, { 8, 10, 643 }, { 11, 10, 483 }, { 5, 0, 486 }, - { 7, 0, 1349 }, { 5, 11, 688 }, { 7, 11, 712 }, { 7, 0, 1635 }, - { 8, 0, 17 }, { 10, 0, 217 }, { 10, 0, 295 }, { 12, 0, 2 }, - { 12, 11, 2 }, { 10, 0, 558 }, { 22, 10, 56 }, { 4, 11, 278 }, - { 5, 11, 465 }, { 7, 11, 1367 }, { 8, 11, 482 }, { 5, 10, 535 }, - { 6, 0, 1362 }, { 6, 0, 1461 }, { 10, 11, 274 }, { 10, 11, 625 }, - { 11, 11, 530 }, { 5, 0, 599 }, { 5, 11, 336 }, { 6, 11, 341 }, - { 6, 11, 478 }, { 6, 11, 1763 }, { 8, 11, 386 }, { 7, 10, 1748 }, - { 9, 11, 151 }, { 6, 0, 1376 }, { 5, 10, 539 }, { 7, 11, 73 }, - { 7, 11, 1971 }, { 11, 11, 283 }, { 9, 0, 93 }, { 11, 0, 474 }, - { 6, 10, 91 }, { 7, 10, 435 }, { 6, 0, 447 }, { 5, 11, 396 }, - { 6, 11, 501 }, { 4, 10, 16 }, { 5, 10, 316 }, { 5, 10, 842 }, - { 6, 10, 370 }, { 6, 10, 1778 }, { 8, 10, 166 }, { 11, 10, 812 }, - { 12, 10, 206 }, { 12, 10, 351 }, { 14, 10, 418 }, { 16, 10, 15 }, - { 16, 10, 34 }, { 18, 10, 3 }, { 19, 10, 3 }, { 19, 10, 7 }, - { 20, 10, 4 }, { 21, 10, 21 }, { 7, 0, 577 }, { 7, 0, 1432 }, - { 9, 0, 475 }, { 9, 0, 505 }, { 9, 0, 526 }, { 9, 0, 609 }, - { 9, 0, 689 }, { 9, 0, 726 }, { 9, 0, 735 }, { 9, 0, 738 }, - { 10, 0, 556 }, { 10, 0, 674 }, { 10, 0, 684 }, { 11, 0, 89 }, - { 11, 0, 202 }, { 11, 0, 272 }, { 11, 0, 380 }, { 11, 0, 415 }, - { 11, 0, 505 }, { 11, 0, 537 }, { 11, 0, 550 }, { 11, 0, 562 }, - { 11, 0, 640 }, { 11, 0, 667 }, { 11, 0, 688 }, { 11, 0, 847 }, - { 11, 0, 927 }, { 11, 0, 930 }, { 11, 0, 940 }, { 12, 0, 144 }, - { 12, 0, 325 }, { 12, 0, 329 }, { 12, 0, 389 }, { 12, 0, 403 }, - { 12, 0, 451 }, { 12, 0, 515 }, { 12, 0, 604 }, { 12, 0, 616 }, - { 12, 0, 626 }, { 13, 0, 66 }, { 13, 0, 131 }, { 13, 0, 167 }, - { 13, 0, 236 }, { 13, 0, 368 }, { 13, 0, 411 }, { 13, 0, 434 }, - { 13, 0, 453 }, { 13, 0, 461 }, { 13, 0, 474 }, { 14, 0, 59 }, - { 14, 0, 60 }, { 14, 0, 139 }, { 14, 0, 152 }, { 14, 0, 276 }, - { 14, 0, 353 }, { 14, 0, 402 }, { 15, 0, 28 }, { 15, 0, 81 }, - { 15, 0, 123 }, { 15, 0, 152 }, { 18, 0, 136 }, { 20, 0, 88 }, - { 4, 11, 929 }, { 5, 11, 799 }, { 8, 11, 46 }, { 14, 0, 307 }, - { 4, 0, 609 }, { 7, 0, 756 }, { 9, 0, 544 }, { 11, 0, 413 }, - { 16, 0, 25 }, { 10, 0, 687 }, { 7, 10, 619 }, { 10, 10, 547 }, - { 11, 10, 122 }, { 12, 10, 601 }, { 4, 0, 930 }, { 5, 0, 947 }, - { 5, 0, 939 }, { 14, 0, 21 }, { 4, 11, 892 }, { 5, 11, 770 }, - { 5, 0, 962 }, { 5, 0, 651 }, { 8, 0, 170 }, { 9, 0, 61 }, - { 9, 0, 63 }, { 10, 0, 23 }, { 10, 0, 37 }, { 10, 0, 834 }, - { 11, 0, 4 }, { 11, 0, 187 }, { 11, 0, 281 }, { 11, 0, 503 }, - { 11, 0, 677 }, { 12, 0, 96 }, { 12, 0, 130 }, { 12, 0, 244 }, - { 14, 0, 5 }, { 14, 0, 40 }, { 14, 0, 162 }, { 14, 0, 202 }, - { 18, 0, 133 }, { 4, 0, 406 }, { 5, 0, 579 }, { 12, 0, 492 }, - { 22, 0, 15 }, { 7, 11, 158 }, { 7, 0, 597 }, { 4, 0, 981 }, - { 4, 10, 888 }, { 4, 10, 149 }, { 10, 10, 368 }, { 4, 0, 545 }, - { 4, 10, 154 }, { 7, 10, 1134 }, { 8, 10, 105 }, { 7, 11, 2001 }, - { 6, 0, 1558 }, { 4, 10, 31 }, { 6, 10, 429 }, { 7, 10, 962 }, - { 9, 10, 458 }, { 11, 10, 691 }, { 4, 10, 312 }, { 7, 10, 1642 }, - { 6, 0, 17 }, { 6, 0, 1304 }, { 7, 0, 16 }, { 7, 0, 1001 }, - { 9, 0, 886 }, { 10, 0, 489 }, { 10, 0, 800 }, { 11, 0, 782 }, - { 12, 0, 320 }, { 13, 0, 467 }, { 14, 0, 145 }, { 14, 0, 387 }, - { 15, 0, 119 }, { 7, 0, 1982 }, { 17, 0, 17 }, { 7, 11, 1461 }, - { 12, 11, 91 }, { 4, 10, 236 }, { 4, 11, 602 }, { 10, 0, 907 }, - { 8, 0, 110 }, { 7, 0, 272 }, { 19, 0, 53 }, { 5, 10, 836 }, - { 5, 10, 857 }, { 6, 10, 1680 }, { 5, 0, 458 }, { 7, 11, 1218 }, - { 8, 11, 303 }, { 7, 0, 1983 }, { 8, 0, 0 }, { 8, 0, 171 }, - { 9, 0, 120 }, { 9, 0, 732 }, { 10, 0, 473 }, { 11, 0, 656 }, - { 11, 0, 998 }, { 18, 0, 0 }, { 18, 0, 2 }, { 19, 0, 21 }, - { 10, 10, 68 }, { 11, 10, 494 }, { 9, 11, 662 }, { 4, 11, 13 }, - { 5, 11, 567 }, { 7, 11, 1498 }, { 9, 11, 124 }, { 11, 11, 521 }, - { 12, 11, 405 }, { 4, 10, 81 }, { 11, 10, 867 }, { 7, 11, 1006 }, - { 7, 11, 800 }, { 7, 11, 1783 }, { 10, 11, 12 }, { 9, 0, 295 }, - { 10, 0, 443 }, { 5, 10, 282 }, { 8, 10, 650 }, { 9, 10, 907 }, - { 4, 11, 735 }, { 4, 11, 170 }, { 4, 10, 775 }, { 7, 11, 323 }, - { 6, 0, 1844 }, { 10, 0, 924 }, { 11, 11, 844 }, { 12, 11, 104 }, - { 12, 11, 625 }, { 5, 11, 304 }, { 7, 11, 1403 }, { 12, 11, 498 }, - { 6, 0, 1232 }, { 4, 0, 519 }, { 10, 0, 70 }, { 12, 0, 26 }, - { 14, 0, 17 }, { 14, 0, 178 }, { 15, 0, 34 }, { 21, 0, 12 }, - { 4, 0, 993 }, { 4, 11, 148 }, { 5, 11, 742 }, { 6, 0, 31 }, - { 7, 0, 491 }, { 7, 0, 530 }, { 8, 0, 592 }, { 11, 0, 53 }, - { 11, 0, 779 }, { 12, 0, 167 }, { 12, 0, 411 }, { 14, 0, 14 }, - { 14, 0, 136 }, { 15, 0, 72 }, { 16, 0, 17 }, { 16, 0, 72 }, - { 5, 0, 907 }, { 6, 0, 733 }, { 5, 11, 111 }, { 4, 10, 71 }, - { 5, 10, 376 }, { 7, 10, 119 }, { 10, 10, 665 }, { 8, 0, 55 }, - { 8, 0, 430 }, { 8, 11, 430 }, { 4, 0, 208 }, { 5, 0, 106 }, - { 6, 0, 531 }, { 8, 0, 408 }, { 9, 0, 188 }, { 10, 0, 572 }, - { 12, 0, 56 }, { 11, 10, 827 }, { 14, 10, 34 }, { 15, 10, 148 }, - { 6, 0, 1693 }, { 5, 11, 444 }, { 4, 10, 479 }, { 12, 0, 441 }, - { 9, 0, 449 }, { 10, 0, 192 }, { 10, 0, 740 }, { 6, 0, 928 }, - { 4, 0, 241 }, { 7, 10, 607 }, { 8, 10, 99 }, { 8, 11, 123 }, - { 15, 11, 6 }, { 16, 11, 7 }, { 6, 11, 285 }, { 8, 11, 654 }, - { 11, 11, 749 }, { 12, 11, 190 }, { 12, 11, 327 }, { 13, 11, 120 }, - { 13, 11, 121 }, { 13, 11, 327 }, { 15, 11, 47 }, { 18, 11, 40 }, - { 4, 10, 41 }, { 5, 10, 74 }, { 7, 10, 1627 }, { 11, 10, 871 }, - { 12, 10, 619 }, { 7, 0, 1525 }, { 11, 10, 329 }, { 11, 10, 965 }, - { 12, 10, 241 }, { 14, 10, 354 }, { 15, 10, 22 }, { 20, 10, 63 }, - { 4, 0, 259 }, { 7, 11, 183 }, { 9, 10, 209 }, { 9, 10, 300 }, - { 5, 11, 937 }, { 7, 11, 100 }, { 5, 10, 98 }, { 4, 0, 173 }, - { 5, 0, 312 }, { 5, 0, 512 }, { 7, 0, 1285 }, { 13, 0, 185 }, - { 7, 0, 1603 }, { 7, 0, 1691 }, { 9, 0, 464 }, { 11, 0, 195 }, - { 12, 0, 279 }, { 12, 0, 448 }, { 14, 0, 11 }, { 19, 0, 102 }, - { 7, 0, 1113 }, { 5, 10, 984 }, { 4, 0, 452 }, { 5, 0, 583 }, - { 7, 0, 720 }, { 4, 0, 547 }, { 5, 0, 817 }, { 6, 0, 433 }, - { 7, 0, 593 }, { 7, 0, 1378 }, { 8, 0, 161 }, { 9, 0, 284 }, - { 10, 0, 313 }, { 11, 0, 886 }, { 8, 0, 722 }, { 4, 10, 182 }, - { 6, 10, 205 }, { 7, 10, 220 }, { 22, 0, 13 }, { 4, 10, 42 }, - { 9, 10, 205 }, { 9, 10, 786 }, { 10, 10, 659 }, { 6, 0, 289 }, - { 7, 0, 1670 }, { 12, 0, 57 }, { 23, 0, 4 }, { 4, 10, 635 }, - { 14, 0, 43 }, { 18, 0, 21 }, { 11, 10, 533 }, { 7, 0, 1694 }, - { 8, 0, 420 }, { 11, 0, 193 }, { 7, 0, 409 }, { 4, 10, 371 }, - { 4, 10, 272 }, { 7, 10, 836 }, { 5, 10, 825 }, { 6, 10, 1640 }, - { 5, 11, 251 }, { 5, 11, 956 }, { 8, 11, 268 }, { 9, 11, 214 }, - { 18, 11, 142 }, { 10, 0, 308 }, { 6, 0, 1863 }, { 13, 11, 37 }, - { 9, 10, 879 }, { 7, 10, 317 }, { 7, 10, 569 }, { 4, 11, 294 }, - { 6, 0, 790 }, { 5, 0, 1002 }, { 8, 0, 745 }, { 5, 11, 346 }, - { 5, 11, 711 }, { 8, 11, 390 }, { 7, 0, 289 }, { 5, 0, 504 }, - { 11, 0, 68 }, { 9, 10, 307 }, { 4, 0, 239 }, { 6, 0, 477 }, - { 7, 0, 1607 }, { 11, 0, 617 }, { 21, 0, 13 }, { 5, 0, 609 }, - { 5, 11, 624 }, { 5, 11, 783 }, { 7, 11, 1998 }, { 7, 11, 2047 }, - { 5, 10, 525 }, { 4, 0, 367 }, { 4, 11, 594 }, { 6, 0, 528 }, - { 5, 10, 493 }, { 4, 10, 174 }, { 7, 10, 911 }, { 8, 10, 417 }, - { 9, 10, 782 }, { 4, 0, 694 }, { 7, 0, 548 }, { 9, 0, 58 }, - { 4, 10, 32 }, { 5, 10, 215 }, { 6, 10, 269 }, { 7, 10, 1782 }, - { 7, 10, 1892 }, { 10, 10, 16 }, { 11, 10, 822 }, { 11, 10, 954 }, - { 13, 10, 481 }, { 12, 0, 687 }, { 7, 0, 1749 }, { 8, 10, 477 }, - { 4, 11, 569 }, { 5, 10, 308 }, { 7, 10, 1088 }, { 4, 0, 661 }, - { 10, 0, 1004 }, { 5, 11, 37 }, { 6, 11, 39 }, { 6, 11, 451 }, - { 7, 11, 218 }, { 7, 11, 667 }, { 7, 11, 1166 }, { 7, 11, 1687 }, - { 8, 11, 662 }, { 16, 11, 2 }, { 9, 0, 445 }, { 12, 0, 53 }, - { 13, 0, 492 }, { 5, 10, 126 }, { 8, 10, 297 }, { 9, 10, 366 }, - { 12, 10, 374 }, { 7, 10, 1551 }, { 11, 10, 361 }, { 20, 0, 74 }, - { 6, 11, 508 }, { 7, 0, 213 }, { 4, 10, 175 }, { 4, 10, 685 }, - { 6, 0, 760 }, { 6, 0, 834 }, { 6, 0, 1248 }, { 7, 11, 453 }, - { 7, 11, 635 }, { 7, 11, 796 }, { 8, 11, 331 }, { 9, 11, 328 }, - { 9, 11, 330 }, { 9, 11, 865 }, { 10, 11, 119 }, { 10, 11, 235 }, - { 11, 11, 111 }, { 11, 11, 129 }, { 11, 11, 240 }, { 12, 11, 31 }, - { 12, 11, 66 }, { 12, 11, 222 }, { 12, 11, 269 }, { 12, 11, 599 }, - { 12, 11, 689 }, { 13, 11, 186 }, { 13, 11, 364 }, { 14, 11, 345 }, - { 7, 0, 1672 }, { 11, 0, 189 }, { 5, 10, 797 }, { 5, 10, 565 }, - { 6, 0, 1548 }, { 6, 11, 98 }, { 7, 11, 585 }, { 7, 11, 702 }, - { 9, 0, 968 }, { 15, 0, 192 }, { 21, 0, 56 }, { 4, 10, 252 }, - { 6, 11, 37 }, { 7, 11, 299 }, { 7, 10, 1068 }, { 7, 11, 1666 }, - { 8, 11, 195 }, { 8, 11, 316 }, { 9, 11, 178 }, { 9, 11, 276 }, - { 9, 11, 339 }, { 9, 11, 536 }, { 10, 11, 102 }, { 10, 11, 362 }, - { 10, 10, 434 }, { 10, 11, 785 }, { 11, 11, 55 }, { 11, 11, 149 }, - { 11, 10, 228 }, { 11, 10, 426 }, { 11, 11, 773 }, { 13, 10, 231 }, - { 13, 11, 416 }, { 13, 11, 419 }, { 14, 11, 38 }, { 14, 11, 41 }, - { 14, 11, 210 }, { 18, 10, 106 }, { 20, 10, 87 }, { 4, 0, 751 }, - { 11, 0, 390 }, { 12, 0, 32 }, { 4, 0, 409 }, { 5, 0, 78 }, - { 11, 11, 458 }, { 12, 11, 15 }, { 12, 11, 432 }, { 7, 0, 1602 }, - { 10, 0, 257 }, { 10, 0, 698 }, { 11, 0, 544 }, { 11, 0, 585 }, - { 12, 0, 212 }, { 13, 0, 307 }, { 5, 10, 231 }, { 7, 10, 601 }, - { 9, 10, 277 }, { 9, 10, 674 }, { 10, 10, 178 }, { 10, 10, 418 }, - { 10, 10, 509 }, { 11, 10, 531 }, { 12, 10, 113 }, { 12, 10, 475 }, - { 13, 10, 99 }, { 14, 10, 428 }, { 6, 0, 473 }, { 17, 0, 105 }, - { 6, 0, 1949 }, { 15, 0, 156 }, { 5, 11, 645 }, { 7, 10, 1591 }, - { 16, 10, 43 }, { 7, 0, 1779 }, { 7, 10, 1683 }, { 4, 11, 290 }, - { 7, 11, 1356 }, { 6, 0, 763 }, { 6, 11, 70 }, { 7, 11, 1292 }, - { 10, 11, 762 }, { 11, 11, 288 }, { 14, 0, 29 }, { 12, 11, 428 }, - { 7, 0, 883 }, { 7, 11, 131 }, { 7, 11, 422 }, { 8, 11, 210 }, - { 12, 11, 573 }, { 6, 0, 488 }, { 4, 10, 399 }, { 5, 10, 119 }, - { 5, 10, 494 }, { 7, 10, 751 }, { 9, 10, 556 }, { 5, 0, 617 }, - { 4, 11, 936 }, { 11, 0, 50 }, { 7, 0, 1518 }, { 11, 0, 694 }, - { 9, 0, 785 }, { 4, 0, 546 }, { 7, 0, 2042 }, { 7, 11, 716 }, - { 13, 11, 97 }, { 13, 11, 251 }, { 4, 11, 653 }, { 17, 0, 22 }, - { 6, 0, 1016 }, { 4, 0, 313 }, { 5, 0, 577 }, { 8, 11, 657 }, - { 8, 0, 184 }, { 13, 0, 433 }, { 7, 0, 935 }, { 6, 0, 720 }, - { 9, 0, 114 }, { 18, 11, 80 }, { 12, 0, 186 }, { 12, 0, 292 }, - { 14, 0, 100 }, { 18, 0, 70 }, { 7, 10, 594 }, { 7, 10, 851 }, - { 7, 10, 1858 }, { 9, 10, 411 }, { 9, 10, 574 }, { 9, 10, 666 }, - { 9, 10, 737 }, { 10, 10, 346 }, { 10, 10, 712 }, { 11, 10, 246 }, - { 11, 10, 432 }, { 11, 10, 517 }, { 11, 10, 647 }, { 11, 10, 679 }, - { 11, 10, 727 }, { 12, 10, 304 }, { 12, 10, 305 }, { 12, 10, 323 }, - { 12, 10, 483 }, { 12, 10, 572 }, { 12, 10, 593 }, { 12, 10, 602 }, - { 13, 10, 95 }, { 13, 10, 101 }, { 13, 10, 171 }, { 13, 10, 315 }, - { 13, 10, 378 }, { 13, 10, 425 }, { 13, 10, 475 }, { 14, 10, 63 }, - { 14, 10, 380 }, { 14, 10, 384 }, { 15, 10, 133 }, { 18, 10, 112 }, - { 20, 10, 72 }, { 7, 10, 1093 }, { 7, 11, 1836 }, { 4, 10, 679 }, - { 9, 10, 203 }, { 11, 0, 402 }, { 12, 0, 109 }, { 12, 0, 431 }, - { 13, 0, 179 }, { 13, 0, 206 }, { 14, 0, 217 }, { 16, 0, 3 }, - { 20, 0, 53 }, { 7, 11, 1368 }, { 8, 11, 232 }, { 8, 11, 361 }, - { 10, 11, 682 }, { 10, 11, 742 }, { 9, 10, 714 }, { 5, 0, 886 }, - { 6, 0, 46 }, { 6, 0, 1790 }, { 7, 0, 14 }, { 7, 0, 732 }, - { 7, 0, 1654 }, { 8, 0, 95 }, { 8, 0, 327 }, { 8, 0, 616 }, - { 9, 0, 892 }, { 10, 0, 598 }, { 10, 0, 769 }, { 11, 0, 134 }, - { 11, 0, 747 }, { 12, 0, 378 }, { 14, 0, 97 }, { 9, 11, 534 }, - { 4, 0, 969 }, { 8, 10, 825 }, { 9, 11, 27 }, { 6, 0, 727 }, - { 14, 11, 12 }, { 5, 0, 1021 }, { 6, 0, 1190 }, { 6, 11, 1657 }, - { 5, 10, 143 }, { 5, 10, 769 }, { 6, 10, 1760 }, { 7, 10, 682 }, - { 7, 10, 1992 }, { 8, 10, 736 }, { 4, 0, 153 }, { 7, 11, 127 }, - { 5, 0, 798 }, { 4, 0, 587 }, { 6, 0, 598 }, { 7, 0, 42 }, - { 8, 0, 695 }, { 10, 0, 212 }, { 11, 0, 158 }, { 14, 0, 196 }, - { 17, 0, 85 }, { 5, 10, 860 }, { 6, 0, 1929 }, { 6, 0, 1933 }, - { 5, 0, 957 }, { 5, 0, 1008 }, { 9, 0, 577 }, { 12, 0, 141 }, - { 6, 10, 422 }, { 7, 10, 0 }, { 7, 10, 1544 }, { 8, 11, 364 }, - { 11, 10, 990 }, { 12, 10, 453 }, { 13, 10, 47 }, { 13, 10, 266 }, - { 6, 0, 1319 }, { 4, 0, 129 }, { 7, 0, 465 }, { 7, 0, 470 }, - { 7, 0, 1057 }, { 7, 0, 1201 }, { 9, 0, 755 }, { 11, 0, 906 }, - { 12, 0, 527 }, { 7, 0, 908 }, { 18, 0, 7 }, { 5, 0, 148 }, - { 8, 0, 450 }, { 5, 10, 515 }, { 9, 10, 131 }, { 7, 10, 1605 }, - { 11, 10, 962 }, { 18, 10, 139 }, { 4, 10, 646 }, { 6, 0, 1166 }, - { 4, 10, 396 }, { 7, 10, 728 }, { 9, 10, 117 }, { 13, 10, 202 }, - { 20, 10, 51 }, { 6, 10, 121 }, { 6, 10, 124 }, { 6, 10, 357 }, - { 7, 10, 1138 }, { 7, 10, 1295 }, { 8, 10, 162 }, { 11, 10, 655 }, - { 14, 0, 374 }, { 14, 11, 374 }, { 10, 0, 253 }, { 11, 0, 1003 }, - { 5, 11, 909 }, { 9, 11, 849 }, { 10, 11, 805 }, { 5, 10, 237 }, - { 7, 11, 525 }, { 7, 11, 1579 }, { 8, 11, 497 }, { 8, 11, 573 }, - { 9, 0, 46 }, { 4, 0, 879 }, { 6, 0, 806 }, { 7, 0, 1868 }, - { 6, 0, 1837 }, { 6, 0, 1846 }, { 6, 0, 730 }, { 6, 0, 881 }, - { 7, 0, 965 }, { 7, 0, 1460 }, { 7, 0, 1604 }, { 7, 11, 193 }, - { 7, 11, 397 }, { 7, 11, 1105 }, { 8, 11, 124 }, { 8, 11, 619 }, - { 9, 11, 305 }, { 10, 11, 264 }, { 11, 11, 40 }, { 12, 11, 349 }, - { 13, 11, 134 }, { 13, 11, 295 }, { 14, 11, 155 }, { 15, 11, 120 }, - { 18, 11, 105 }, { 8, 0, 506 }, { 15, 0, 10 }, { 4, 11, 262 }, - { 7, 11, 342 }, { 7, 10, 571 }, { 7, 10, 1877 }, { 10, 10, 366 }, - { 13, 11, 23 }, { 5, 11, 641 }, { 10, 0, 22 }, { 9, 10, 513 }, - { 10, 10, 39 }, { 12, 10, 122 }, { 12, 10, 187 }, { 7, 11, 1431 }, - { 22, 11, 49 }, { 4, 11, 99 }, { 6, 11, 250 }, { 6, 11, 346 }, - { 8, 11, 127 }, { 10, 11, 81 }, { 6, 0, 2014 }, { 8, 0, 928 }, - { 10, 0, 960 }, { 10, 0, 979 }, { 12, 0, 996 }, { 6, 0, 296 }, - { 4, 11, 915 }, { 5, 11, 75 }, { 9, 11, 517 }, { 10, 11, 470 }, - { 12, 11, 155 }, { 13, 11, 224 }, { 9, 10, 873 }, { 4, 0, 854 }, - { 12, 11, 18 }, { 6, 0, 587 }, { 7, 10, 107 }, { 7, 10, 838 }, - { 8, 10, 550 }, { 10, 10, 401 }, { 11, 0, 636 }, { 15, 0, 145 }, - { 17, 0, 34 }, { 19, 0, 50 }, { 23, 0, 20 }, { 11, 10, 588 }, - { 11, 10, 864 }, { 11, 10, 968 }, { 15, 10, 160 }, { 7, 11, 216 }, - { 7, 0, 982 }, { 10, 0, 32 }, { 15, 0, 56 }, { 5, 10, 768 }, - { 5, 11, 954 }, { 6, 11, 304 }, { 7, 11, 1114 }, { 8, 11, 418 }, - { 10, 11, 345 }, { 11, 11, 341 }, { 11, 11, 675 }, { 13, 11, 40 }, - { 9, 11, 410 }, { 11, 11, 425 }, { 8, 0, 941 }, { 5, 0, 435 }, - { 4, 10, 894 }, { 5, 0, 85 }, { 6, 0, 419 }, { 7, 0, 134 }, - { 7, 0, 305 }, { 7, 0, 361 }, { 7, 0, 1337 }, { 8, 0, 71 }, - { 12, 0, 519 }, { 12, 0, 688 }, { 7, 0, 740 }, { 5, 0, 691 }, - { 7, 0, 345 }, { 9, 0, 94 }, { 12, 0, 169 }, { 5, 0, 183 }, - { 6, 0, 582 }, { 10, 0, 679 }, { 12, 0, 435 }, { 6, 11, 14 }, - { 6, 0, 945 }, { 7, 0, 511 }, { 6, 11, 1708 }, { 5, 11, 113 }, - { 6, 11, 243 }, { 7, 11, 1865 }, { 11, 11, 161 }, { 16, 11, 37 }, - { 17, 11, 99 }, { 4, 11, 274 }, { 9, 0, 539 }, { 7, 0, 1993 }, - { 8, 0, 684 }, { 6, 10, 272 }, { 6, 0, 659 }, { 6, 0, 982 }, - { 4, 10, 9 }, { 5, 10, 128 }, { 7, 10, 368 }, { 11, 10, 480 }, - { 20, 10, 3 }, { 6, 0, 583 }, { 4, 0, 803 }, { 5, 0, 704 }, - { 4, 0, 179 }, { 5, 0, 198 }, { 5, 0, 697 }, { 7, 0, 347 }, - { 7, 0, 971 }, { 8, 0, 181 }, { 10, 0, 711 }, { 7, 11, 166 }, - { 8, 10, 682 }, { 4, 10, 2 }, { 7, 10, 545 }, { 7, 10, 894 }, - { 8, 11, 521 }, { 7, 0, 481 }, { 4, 0, 243 }, { 5, 0, 203 }, - { 7, 0, 19 }, { 7, 0, 71 }, { 7, 0, 113 }, { 10, 0, 405 }, - { 11, 0, 357 }, { 14, 0, 240 }, { 5, 11, 725 }, { 5, 11, 727 }, - { 7, 11, 1811 }, { 6, 0, 826 }, { 9, 11, 304 }, { 7, 0, 1450 }, - { 11, 0, 99 }, { 5, 11, 654 }, { 6, 0, 492 }, { 5, 0, 134 }, - { 6, 0, 408 }, { 6, 0, 495 }, { 7, 0, 1593 }, { 6, 11, 273 }, - { 10, 11, 188 }, { 13, 11, 377 }, { 18, 11, 77 }, { 9, 10, 769 }, - { 12, 10, 185 }, { 7, 11, 410 }, { 14, 0, 4 }, { 4, 0, 665 }, - { 6, 11, 1785 }, { 4, 0, 248 }, { 7, 0, 137 }, { 9, 0, 349 }, - { 5, 10, 530 }, { 14, 10, 113 }, { 7, 0, 1270 }, { 11, 0, 612 }, - { 4, 11, 780 }, { 5, 0, 371 }, { 7, 0, 563 }, { 7, 0, 826 }, - { 6, 0, 1535 }, { 23, 0, 21 }, { 23, 0, 23 }, { 4, 0, 374 }, - { 7, 0, 547 }, { 7, 0, 1700 }, { 7, 0, 1833 }, { 11, 0, 858 }, - { 5, 10, 556 }, { 7, 11, 612 }, { 8, 11, 545 }, { 8, 11, 568 }, - { 8, 11, 642 }, { 9, 11, 717 }, { 10, 11, 541 }, { 10, 11, 763 }, - { 11, 11, 449 }, { 12, 11, 489 }, { 13, 11, 153 }, { 13, 11, 296 }, - { 14, 11, 138 }, { 14, 11, 392 }, { 15, 11, 50 }, { 16, 11, 6 }, - { 16, 11, 12 }, { 20, 11, 9 }, { 9, 0, 311 }, { 13, 0, 42 }, - { 8, 10, 16 }, { 12, 10, 568 }, { 6, 0, 1968 }, { 6, 0, 2027 }, - { 10, 0, 991 }, { 6, 0, 1647 }, { 7, 0, 1552 }, { 7, 0, 2010 }, - { 9, 0, 494 }, { 9, 0, 509 }, { 5, 11, 948 }, { 6, 10, 186 }, - { 9, 10, 426 }, { 6, 0, 769 }, { 6, 0, 642 }, { 4, 10, 585 }, - { 6, 0, 123 }, { 7, 0, 214 }, { 9, 0, 728 }, { 10, 0, 157 }, - { 11, 0, 346 }, { 11, 0, 662 }, { 15, 0, 106 }, { 14, 11, 381 }, - { 7, 0, 1435 }, { 4, 11, 532 }, { 5, 11, 706 }, { 7, 11, 662 }, - { 5, 11, 837 }, { 6, 11, 1651 }, { 4, 10, 93 }, { 5, 10, 252 }, - { 6, 10, 229 }, { 7, 10, 291 }, { 9, 10, 550 }, { 11, 10, 644 }, - { 20, 0, 79 }, { 9, 10, 749 }, { 6, 0, 1425 }, { 9, 10, 162 }, - { 4, 11, 362 }, { 7, 11, 52 }, { 7, 11, 303 }, { 12, 11, 166 }, - { 4, 10, 381 }, { 4, 11, 330 }, { 7, 11, 933 }, { 7, 11, 2012 }, - { 8, 11, 292 }, { 7, 11, 767 }, { 4, 0, 707 }, { 5, 0, 588 }, - { 6, 0, 393 }, { 13, 0, 106 }, { 18, 0, 49 }, { 19, 0, 41 }, - { 6, 0, 211 }, { 7, 0, 1690 }, { 11, 0, 486 }, { 12, 0, 369 }, - { 9, 11, 883 }, { 4, 11, 703 }, { 7, 11, 207 }, { 4, 0, 187 }, - { 5, 0, 184 }, { 5, 0, 690 }, { 7, 0, 1869 }, { 10, 0, 756 }, - { 11, 0, 783 }, { 4, 11, 571 }, { 6, 0, 1382 }, { 5, 0, 175 }, - { 6, 10, 77 }, { 6, 10, 157 }, { 7, 10, 974 }, { 7, 10, 1301 }, - { 7, 10, 1339 }, { 7, 10, 1490 }, { 7, 10, 1873 }, { 9, 10, 628 }, - { 6, 0, 1493 }, { 5, 11, 873 }, { 5, 11, 960 }, { 6, 0, 1007 }, - { 12, 11, 93 }, { 12, 11, 501 }, { 13, 11, 362 }, { 14, 11, 151 }, - { 15, 11, 40 }, { 15, 11, 59 }, { 16, 11, 46 }, { 17, 11, 25 }, - { 18, 11, 14 }, { 18, 11, 134 }, { 19, 11, 25 }, { 19, 11, 69 }, - { 20, 11, 16 }, { 20, 11, 19 }, { 20, 11, 66 }, { 21, 11, 23 }, - { 21, 11, 25 }, { 22, 11, 42 }, { 11, 10, 919 }, { 13, 10, 409 }, - { 6, 0, 219 }, { 5, 0, 582 }, { 6, 0, 1646 }, { 7, 0, 99 }, - { 7, 0, 1962 }, { 7, 0, 1986 }, { 8, 0, 515 }, { 8, 0, 773 }, - { 9, 0, 23 }, { 9, 0, 491 }, { 12, 0, 620 }, { 14, 0, 93 }, - { 5, 0, 851 }, { 5, 11, 33 }, { 6, 11, 470 }, { 7, 11, 1291 }, - { 6, 0, 1278 }, { 7, 11, 1882 }, { 7, 10, 1489 }, { 4, 0, 1000 }, - { 10, 0, 982 }, { 8, 0, 762 }, { 8, 0, 812 }, { 9, 0, 910 }, - { 6, 11, 47 }, { 7, 11, 90 }, { 7, 11, 664 }, { 7, 11, 830 }, - { 7, 11, 1380 }, { 7, 11, 2025 }, { 8, 11, 448 }, { 8, 11, 828 }, - { 4, 0, 98 }, { 4, 0, 940 }, { 6, 0, 1819 }, { 6, 0, 1834 }, - { 6, 0, 1841 }, { 7, 0, 1365 }, { 8, 0, 859 }, { 8, 0, 897 }, - { 8, 0, 918 }, { 9, 0, 422 }, { 9, 0, 670 }, { 10, 0, 775 }, - { 10, 0, 894 }, { 10, 0, 909 }, { 10, 0, 910 }, { 10, 0, 935 }, - { 11, 0, 210 }, { 12, 0, 750 }, { 12, 0, 755 }, { 13, 0, 26 }, - { 13, 0, 457 }, { 13, 0, 476 }, { 16, 0, 100 }, { 16, 0, 109 }, - { 18, 0, 173 }, { 18, 0, 175 }, { 8, 10, 398 }, { 9, 10, 681 }, - { 11, 10, 632 }, { 9, 11, 417 }, { 9, 11, 493 }, { 8, 10, 645 }, - { 10, 0, 906 }, { 6, 0, 1730 }, { 6, 10, 20 }, { 5, 11, 1019 }, - { 6, 0, 1185 }, { 10, 0, 40 }, { 8, 10, 769 }, { 9, 0, 147 }, - { 6, 11, 208 }, { 12, 0, 650 }, { 5, 0, 209 }, { 6, 0, 30 }, - { 11, 0, 56 }, { 11, 0, 305 }, { 4, 0, 553 }, { 10, 11, 344 }, - { 6, 11, 68 }, { 7, 11, 398 }, { 7, 11, 448 }, { 7, 11, 1629 }, - { 7, 11, 1813 }, { 8, 11, 387 }, { 8, 11, 442 }, { 9, 11, 710 }, - { 10, 11, 282 }, { 10, 11, 722 }, { 5, 0, 597 }, { 14, 0, 20 }, - { 14, 11, 20 }, { 7, 0, 1614 }, { 7, 10, 1757 }, { 4, 0, 150 }, - { 5, 0, 303 }, { 6, 0, 327 }, { 7, 10, 937 }, { 16, 0, 49 }, - { 7, 10, 1652 }, { 16, 11, 49 }, { 8, 0, 192 }, { 10, 0, 78 }, - { 13, 0, 359 }, { 7, 0, 786 }, { 15, 0, 134 }, { 6, 0, 1638 }, - { 7, 0, 79 }, { 7, 0, 496 }, { 9, 0, 138 }, { 10, 0, 336 }, - { 11, 0, 12 }, { 12, 0, 412 }, { 12, 0, 440 }, { 14, 0, 305 }, - { 8, 11, 491 }, { 4, 10, 579 }, { 5, 10, 226 }, { 5, 10, 323 }, - { 7, 10, 960 }, { 7, 0, 204 }, { 7, 0, 415 }, { 8, 0, 42 }, - { 10, 0, 85 }, { 11, 0, 564 }, { 4, 0, 614 }, { 4, 11, 403 }, - { 5, 11, 441 }, { 7, 11, 450 }, { 11, 11, 101 }, { 12, 11, 193 }, - { 13, 11, 430 }, { 7, 11, 1927 }, { 7, 11, 1330 }, { 4, 0, 3 }, - { 5, 0, 247 }, { 5, 0, 644 }, { 7, 0, 744 }, { 7, 0, 1207 }, - { 7, 0, 1225 }, { 7, 0, 1909 }, { 18, 0, 147 }, { 8, 0, 942 }, - { 4, 0, 1019 }, { 6, 0, 2023 }, { 5, 11, 679 }, { 5, 10, 973 }, - { 5, 0, 285 }, { 9, 0, 67 }, { 13, 0, 473 }, { 15, 0, 82 }, - { 7, 11, 328 }, { 9, 11, 326 }, { 23, 0, 8 }, { 6, 10, 135 }, - { 7, 10, 1176 }, { 7, 11, 1128 }, { 6, 0, 1309 }, { 7, 11, 1796 }, - { 7, 10, 314 }, { 4, 11, 574 }, { 7, 11, 350 }, { 7, 11, 1024 }, - { 8, 11, 338 }, { 9, 11, 677 }, { 10, 11, 808 }, { 11, 11, 508 }, - { 7, 11, 818 }, { 17, 11, 14 }, { 17, 11, 45 }, { 18, 11, 75 }, - { 20, 11, 18 }, { 18, 10, 4 }, { 7, 11, 1081 }, { 4, 0, 29 }, - { 6, 0, 532 }, { 7, 0, 1628 }, { 7, 0, 1648 }, { 9, 0, 350 }, - { 10, 0, 433 }, { 11, 0, 97 }, { 11, 0, 557 }, { 11, 0, 745 }, - { 12, 0, 289 }, { 12, 0, 335 }, { 12, 0, 348 }, { 12, 0, 606 }, - { 13, 0, 116 }, { 13, 0, 233 }, { 13, 0, 466 }, { 14, 0, 181 }, - { 14, 0, 209 }, { 14, 0, 232 }, { 14, 0, 236 }, { 14, 0, 300 }, - { 16, 0, 41 }, { 20, 0, 97 }, { 7, 0, 318 }, { 6, 10, 281 }, - { 8, 10, 282 }, { 8, 10, 480 }, { 8, 10, 499 }, { 9, 10, 198 }, - { 10, 10, 143 }, { 10, 10, 169 }, { 10, 10, 211 }, { 10, 10, 417 }, - { 10, 10, 574 }, { 11, 10, 147 }, { 11, 10, 395 }, { 12, 10, 75 }, - { 12, 10, 407 }, { 12, 10, 608 }, { 13, 10, 500 }, { 14, 10, 251 }, - { 7, 11, 1676 }, { 7, 11, 2037 }, { 7, 0, 1692 }, { 5, 0, 501 }, - { 7, 0, 1704 }, { 9, 0, 553 }, { 11, 0, 520 }, { 12, 0, 557 }, - { 13, 0, 249 }, { 6, 0, 1527 }, { 14, 0, 324 }, { 15, 0, 55 }, - { 15, 0, 80 }, { 14, 11, 324 }, { 15, 11, 55 }, { 15, 11, 80 }, - { 7, 10, 1776 }, { 8, 0, 988 }, { 9, 11, 297 }, { 4, 10, 419 }, - { 14, 0, 223 }, { 11, 11, 234 }, { 7, 0, 1123 }, { 12, 0, 508 }, - { 14, 0, 102 }, { 14, 0, 226 }, { 16, 0, 57 }, { 4, 10, 138 }, - { 7, 10, 1012 }, { 7, 10, 1280 }, { 9, 10, 76 }, { 7, 0, 1764 }, - { 5, 10, 29 }, { 12, 10, 638 }, { 6, 0, 2015 }, { 6, 0, 1599 }, - { 10, 11, 56 }, { 6, 11, 306 }, { 7, 11, 1140 }, { 7, 11, 1340 }, - { 8, 11, 133 }, { 10, 11, 449 }, { 11, 11, 1011 }, { 6, 10, 1710 }, - { 7, 10, 2038 }, { 7, 11, 1763 }, { 12, 11, 310 }, { 6, 0, 129 }, - { 4, 10, 17 }, { 5, 10, 23 }, { 7, 10, 995 }, { 11, 10, 383 }, - { 11, 10, 437 }, { 12, 10, 460 }, { 12, 10, 532 }, { 5, 11, 329 }, - { 8, 11, 260 }, { 5, 10, 862 }, { 4, 0, 534 }, { 6, 0, 811 }, - { 7, 0, 626 }, { 4, 11, 657 }, { 4, 0, 25 }, { 5, 0, 60 }, - { 6, 0, 504 }, { 7, 0, 614 }, { 7, 0, 1155 }, { 12, 0, 0 }, - { 24, 11, 7 }, { 7, 0, 1248 }, { 11, 0, 621 }, { 11, 0, 702 }, - { 9, 0, 321 }, { 8, 10, 70 }, { 12, 10, 171 }, { 13, 10, 272 }, - { 10, 10, 233 }, { 11, 10, 76 }, { 4, 0, 379 }, { 7, 0, 1397 }, - { 6, 10, 442 }, { 5, 11, 66 }, { 7, 11, 1896 }, { 8, 11, 288 }, - { 6, 11, 1643 }, { 6, 10, 1709 }, { 4, 11, 21 }, { 5, 11, 91 }, - { 5, 11, 570 }, { 5, 11, 648 }, { 5, 11, 750 }, { 5, 11, 781 }, - { 6, 11, 54 }, { 6, 11, 112 }, { 6, 11, 402 }, { 6, 11, 1732 }, - { 7, 11, 315 }, { 7, 11, 749 }, { 7, 11, 1347 }, { 7, 11, 1900 }, - { 9, 11, 78 }, { 9, 11, 508 }, { 10, 11, 611 }, { 11, 11, 510 }, - { 11, 11, 728 }, { 13, 11, 36 }, { 14, 11, 39 }, { 16, 11, 83 }, - { 17, 11, 124 }, { 20, 11, 30 }, { 4, 0, 118 }, { 6, 0, 274 }, - { 6, 0, 361 }, { 7, 0, 75 }, { 13, 0, 441 }, { 10, 11, 322 }, - { 10, 11, 719 }, { 11, 11, 407 }, { 19, 10, 119 }, { 12, 11, 549 }, - { 14, 11, 67 }, { 19, 11, 60 }, { 11, 10, 69 }, { 12, 10, 105 }, - { 12, 10, 117 }, { 13, 10, 213 }, { 14, 10, 13 }, { 14, 10, 62 }, - { 14, 10, 177 }, { 14, 10, 421 }, { 15, 10, 19 }, { 18, 10, 141 }, - { 9, 0, 841 }, { 9, 10, 309 }, { 7, 10, 608 }, { 7, 10, 976 }, - { 8, 11, 125 }, { 8, 11, 369 }, { 8, 11, 524 }, { 9, 10, 146 }, - { 10, 10, 206 }, { 10, 11, 486 }, { 10, 10, 596 }, { 11, 11, 13 }, - { 11, 11, 381 }, { 11, 11, 736 }, { 11, 11, 766 }, { 11, 11, 845 }, - { 13, 11, 114 }, { 13, 10, 218 }, { 13, 11, 292 }, { 14, 11, 47 }, - { 14, 10, 153 }, { 12, 0, 693 }, { 7, 11, 759 }, { 5, 0, 314 }, - { 6, 0, 221 }, { 7, 0, 419 }, { 10, 0, 650 }, { 11, 0, 396 }, - { 12, 0, 156 }, { 13, 0, 369 }, { 14, 0, 333 }, { 17, 0, 47 }, - { 6, 11, 1684 }, { 6, 11, 1731 }, { 7, 11, 356 }, { 7, 11, 1932 }, - { 8, 11, 54 }, { 8, 11, 221 }, { 9, 11, 225 }, { 9, 11, 356 }, - { 10, 11, 77 }, { 10, 11, 446 }, { 10, 11, 731 }, { 12, 11, 404 }, - { 13, 11, 491 }, { 4, 11, 375 }, { 4, 10, 518 }, { 7, 10, 1136 }, - { 4, 0, 913 }, { 4, 11, 411 }, { 11, 11, 643 }, { 12, 11, 115 }, - { 4, 11, 80 }, { 5, 11, 44 }, { 8, 10, 689 }, { 9, 10, 863 }, - { 10, 0, 880 }, { 4, 10, 18 }, { 7, 10, 145 }, { 7, 10, 444 }, - { 7, 10, 1278 }, { 8, 10, 49 }, { 8, 10, 400 }, { 9, 10, 71 }, - { 9, 10, 250 }, { 10, 10, 459 }, { 12, 10, 160 }, { 16, 10, 24 }, - { 8, 0, 475 }, { 5, 0, 1016 }, { 5, 11, 299 }, { 7, 11, 1083 }, - { 7, 0, 602 }, { 8, 0, 179 }, { 10, 0, 781 }, { 12, 0, 126 }, - { 6, 0, 329 }, { 10, 0, 111 }, { 7, 0, 1864 }, { 4, 11, 219 }, - { 7, 11, 1761 }, { 9, 11, 86 }, { 6, 0, 1888 }, { 6, 0, 1892 }, - { 6, 0, 1901 }, { 6, 0, 1904 }, { 9, 0, 953 }, { 9, 0, 985 }, - { 9, 0, 991 }, { 9, 0, 1001 }, { 12, 0, 818 }, { 12, 0, 846 }, - { 12, 0, 847 }, { 12, 0, 861 }, { 12, 0, 862 }, { 12, 0, 873 }, - { 12, 0, 875 }, { 12, 0, 877 }, { 12, 0, 879 }, { 12, 0, 881 }, - { 12, 0, 884 }, { 12, 0, 903 }, { 12, 0, 915 }, { 12, 0, 926 }, - { 12, 0, 939 }, { 15, 0, 182 }, { 15, 0, 219 }, { 15, 0, 255 }, - { 18, 0, 191 }, { 18, 0, 209 }, { 18, 0, 211 }, { 21, 0, 41 }, - { 5, 11, 328 }, { 7, 11, 918 }, { 9, 0, 780 }, { 12, 0, 82 }, - { 15, 0, 36 }, { 5, 10, 1010 }, { 5, 0, 821 }, { 6, 0, 1687 }, - { 5, 11, 514 }, { 4, 0, 956 }, { 6, 0, 1180 }, { 10, 0, 112 }, - { 5, 10, 87 }, { 7, 10, 313 }, { 7, 10, 1103 }, { 10, 10, 582 }, - { 11, 10, 389 }, { 11, 10, 813 }, { 12, 10, 385 }, { 13, 10, 286 }, - { 14, 10, 124 }, { 18, 10, 108 }, { 5, 0, 71 }, { 7, 0, 1407 }, - { 9, 0, 704 }, { 10, 0, 261 }, { 10, 0, 619 }, { 11, 0, 547 }, - { 11, 0, 619 }, { 15, 0, 157 }, { 4, 0, 531 }, { 5, 0, 455 }, - { 5, 11, 301 }, { 6, 11, 571 }, { 14, 11, 49 }, { 18, 11, 102 }, - { 4, 10, 267 }, { 6, 0, 385 }, { 7, 0, 2008 }, { 9, 0, 337 }, - { 10, 0, 517 }, { 5, 11, 726 }, { 5, 11, 364 }, { 4, 11, 76 }, - { 7, 11, 1550 }, { 9, 11, 306 }, { 9, 11, 430 }, { 9, 11, 663 }, - { 10, 11, 683 }, { 11, 11, 427 }, { 11, 11, 753 }, { 12, 11, 334 }, - { 12, 11, 442 }, { 14, 11, 258 }, { 14, 11, 366 }, { 15, 11, 131 }, - { 6, 0, 1865 }, { 6, 0, 1879 }, { 6, 0, 1881 }, { 6, 0, 1894 }, - { 6, 0, 1908 }, { 9, 0, 915 }, { 9, 0, 926 }, { 9, 0, 940 }, - { 9, 0, 943 }, { 9, 0, 966 }, { 9, 0, 980 }, { 9, 0, 989 }, - { 9, 0, 1005 }, { 9, 0, 1010 }, { 12, 0, 813 }, { 12, 0, 817 }, - { 12, 0, 840 }, { 12, 0, 843 }, { 12, 0, 855 }, { 12, 0, 864 }, - { 12, 0, 871 }, { 12, 0, 872 }, { 12, 0, 899 }, { 12, 0, 905 }, - { 12, 0, 924 }, { 15, 0, 171 }, { 15, 0, 181 }, { 15, 0, 224 }, - { 15, 0, 235 }, { 15, 0, 251 }, { 18, 0, 184 }, { 9, 11, 52 }, - { 5, 0, 16 }, { 6, 0, 86 }, { 6, 0, 603 }, { 7, 0, 292 }, - { 7, 0, 561 }, { 8, 0, 257 }, { 8, 0, 382 }, { 9, 0, 721 }, - { 9, 0, 778 }, { 11, 0, 581 }, { 12, 0, 466 }, { 4, 0, 486 }, - { 5, 0, 491 }, { 7, 10, 1121 }, { 4, 0, 72 }, { 6, 0, 265 }, - { 7, 0, 1300 }, { 7, 11, 1183 }, { 10, 10, 249 }, { 11, 10, 209 }, - { 4, 10, 561 }, { 9, 11, 519 }, { 4, 11, 656 }, { 4, 10, 760 }, - { 7, 11, 779 }, { 9, 10, 154 }, { 12, 10, 485 }, { 7, 11, 1793 }, - { 7, 11, 144 }, { 8, 10, 255 }, { 5, 0, 621 }, { 4, 10, 368 }, - { 7, 10, 641 }, { 7, 11, 1373 }, { 7, 11, 554 }, { 7, 11, 605 }, - { 13, 11, 10 }, { 9, 0, 234 }, { 5, 0, 815 }, { 6, 0, 1688 }, - { 6, 0, 1755 }, { 5, 11, 838 }, { 5, 11, 841 }, { 6, 11, 1649 }, - { 7, 0, 1987 }, { 7, 0, 2040 }, { 8, 0, 743 }, { 5, 11, 1012 }, - { 6, 0, 197 }, { 8, 0, 205 }, { 6, 0, 314 }, { 6, 11, 314 }, - { 16, 11, 53 }, { 6, 11, 251 }, { 7, 11, 365 }, { 7, 11, 1357 }, - { 7, 11, 1497 }, { 8, 11, 154 }, { 13, 11, 281 }, { 5, 11, 340 }, - { 6, 0, 452 }, { 7, 0, 312 }, { 10, 0, 219 }, { 10, 0, 589 }, - { 4, 0, 333 }, { 9, 0, 176 }, { 12, 0, 353 }, { 13, 0, 187 }, - { 9, 10, 92 }, { 19, 10, 91 }, { 6, 0, 1110 }, { 11, 0, 47 }, - { 11, 11, 495 }, { 6, 10, 525 }, { 8, 10, 806 }, { 9, 10, 876 }, - { 12, 10, 284 }, { 8, 11, 261 }, { 9, 11, 144 }, { 9, 11, 466 }, - { 10, 11, 370 }, { 12, 11, 470 }, { 13, 11, 144 }, { 14, 11, 348 }, - { 9, 11, 897 }, { 8, 0, 863 }, { 8, 0, 864 }, { 8, 0, 868 }, - { 8, 0, 884 }, { 10, 0, 866 }, { 10, 0, 868 }, { 10, 0, 873 }, - { 10, 0, 911 }, { 10, 0, 912 }, { 10, 0, 944 }, { 12, 0, 727 }, - { 6, 11, 248 }, { 9, 11, 546 }, { 10, 11, 535 }, { 11, 11, 681 }, - { 13, 11, 135 }, { 6, 0, 300 }, { 7, 0, 1515 }, { 6, 0, 1237 }, - { 11, 10, 958 }, { 5, 10, 594 }, { 12, 11, 250 }, { 6, 0, 1685 }, - { 6, 11, 567 }, { 7, 0, 135 }, { 8, 0, 7 }, { 8, 0, 62 }, - { 9, 0, 243 }, { 10, 0, 658 }, { 10, 0, 697 }, { 11, 0, 456 }, - { 11, 0, 756 }, { 9, 0, 395 }, { 10, 0, 79 }, { 6, 10, 1641 }, - { 8, 10, 820 }, { 4, 10, 302 }, { 7, 10, 1766 }, { 6, 11, 174 }, - { 7, 10, 1313 }, { 7, 0, 631 }, { 6, 10, 1674 }, { 6, 11, 395 }, - { 10, 0, 835 }, { 7, 0, 406 }, { 7, 0, 459 }, { 8, 0, 606 }, - { 11, 0, 726 }, { 6, 11, 617 }, { 6, 0, 979 }, { 6, 10, 389 }, - { 7, 10, 149 }, { 9, 10, 142 }, { 10, 10, 94 }, { 5, 11, 878 }, - { 5, 11, 972 }, { 6, 10, 8 }, { 7, 10, 1881 }, { 8, 10, 91 }, - { 8, 11, 511 }, { 5, 0, 612 }, { 4, 11, 351 }, { 4, 0, 372 }, - { 7, 0, 482 }, { 8, 0, 158 }, { 9, 0, 602 }, { 9, 0, 615 }, - { 10, 0, 245 }, { 10, 0, 678 }, { 10, 0, 744 }, { 11, 0, 248 }, - { 11, 0, 806 }, { 5, 0, 854 }, { 7, 0, 1991 }, { 4, 11, 286 }, - { 7, 11, 344 }, { 7, 11, 438 }, { 7, 11, 627 }, { 7, 11, 1516 }, - { 8, 11, 40 }, { 9, 11, 56 }, { 9, 11, 294 }, { 10, 11, 30 }, - { 10, 11, 259 }, { 11, 11, 969 }, { 18, 11, 148 }, { 7, 0, 1492 }, - { 5, 11, 259 }, { 7, 11, 414 }, { 7, 11, 854 }, { 14, 11, 107 }, - { 7, 10, 1746 }, { 6, 0, 833 }, { 6, 0, 998 }, { 7, 10, 24 }, - { 6, 0, 750 }, { 7, 0, 1739 }, { 4, 10, 503 }, { 7, 10, 1661 }, - { 5, 10, 130 }, { 7, 10, 1314 }, { 9, 10, 610 }, { 10, 10, 718 }, - { 11, 10, 601 }, { 11, 10, 819 }, { 11, 10, 946 }, { 12, 10, 536 }, - { 10, 10, 149 }, { 11, 10, 280 }, { 14, 10, 336 }, { 4, 11, 738 }, - { 7, 10, 1946 }, { 5, 0, 195 }, { 7, 0, 1685 }, { 7, 0, 1997 }, - { 8, 0, 730 }, { 11, 0, 1006 }, { 23, 11, 17 }, { 5, 11, 866 }, - { 14, 0, 463 }, { 14, 0, 470 }, { 22, 0, 61 }, { 5, 0, 751 }, - { 8, 0, 266 }, { 11, 0, 578 }, { 4, 10, 392 }, { 7, 10, 1597 }, - { 5, 10, 433 }, { 9, 10, 633 }, { 11, 10, 629 }, { 7, 0, 821 }, - { 6, 0, 715 }, { 6, 0, 1325 }, { 5, 11, 116 }, { 6, 0, 868 }, - { 4, 11, 457 }, { 6, 0, 959 }, { 6, 10, 234 }, { 10, 11, 199 }, - { 7, 0, 1053 }, { 7, 10, 1950 }, { 8, 10, 680 }, { 11, 10, 817 }, - { 19, 10, 88 }, { 7, 10, 1222 }, { 10, 10, 386 }, { 5, 0, 950 }, - { 5, 0, 994 }, { 6, 0, 351 }, { 6, 0, 1124 }, { 6, 0, 1081 }, - { 7, 0, 1595 }, { 6, 10, 5 }, { 11, 10, 249 }, { 12, 10, 313 }, - { 16, 10, 66 }, { 17, 10, 26 }, { 20, 0, 59 }, { 5, 11, 527 }, - { 6, 11, 189 }, { 7, 11, 859 }, { 5, 10, 963 }, { 6, 10, 1773 }, - { 11, 11, 104 }, { 11, 11, 554 }, { 15, 11, 60 }, { 15, 11, 125 }, - { 7, 0, 47 }, { 9, 0, 684 }, { 6, 11, 116 }, { 6, 0, 1606 }, - { 6, 0, 777 }, { 7, 0, 1020 }, { 8, 10, 509 }, { 8, 10, 792 }, - { 7, 0, 1094 }, { 4, 0, 350 }, { 5, 11, 487 }, { 4, 11, 86 }, - { 5, 11, 667 }, { 5, 11, 753 }, { 6, 11, 316 }, { 6, 11, 455 }, - { 7, 11, 946 }, { 7, 0, 1812 }, { 13, 0, 259 }, { 13, 0, 356 }, - { 14, 0, 242 }, { 19, 0, 114 }, { 4, 10, 931 }, { 5, 0, 967 }, - { 4, 0, 473 }, { 7, 0, 623 }, { 8, 0, 808 }, { 9, 0, 871 }, - { 9, 0, 893 }, { 11, 0, 38 }, { 11, 0, 431 }, { 12, 0, 112 }, - { 12, 0, 217 }, { 12, 0, 243 }, { 12, 0, 562 }, { 12, 0, 663 }, - { 12, 0, 683 }, { 13, 0, 141 }, { 13, 0, 197 }, { 13, 0, 227 }, - { 13, 0, 406 }, { 13, 0, 487 }, { 14, 0, 156 }, { 14, 0, 203 }, - { 14, 0, 224 }, { 14, 0, 256 }, { 18, 0, 58 }, { 22, 0, 0 }, - { 10, 0, 286 }, { 7, 10, 943 }, { 11, 10, 614 }, { 7, 10, 1837 }, - { 22, 11, 45 }, { 4, 0, 798 }, { 4, 0, 222 }, { 7, 0, 286 }, - { 8, 0, 629 }, { 4, 11, 79 }, { 7, 11, 1773 }, { 10, 11, 450 }, - { 11, 11, 589 }, { 13, 11, 332 }, { 13, 11, 493 }, { 14, 11, 183 }, - { 14, 11, 334 }, { 14, 11, 362 }, { 14, 11, 368 }, { 14, 11, 376 }, - { 14, 11, 379 }, { 19, 11, 90 }, { 19, 11, 103 }, { 19, 11, 127 }, - { 20, 11, 90 }, { 5, 0, 337 }, { 11, 0, 513 }, { 11, 0, 889 }, - { 11, 0, 961 }, { 12, 0, 461 }, { 13, 0, 79 }, { 15, 0, 121 }, - { 4, 10, 90 }, { 5, 10, 545 }, { 7, 10, 754 }, { 9, 10, 186 }, - { 10, 10, 72 }, { 10, 10, 782 }, { 11, 10, 577 }, { 11, 10, 610 }, - { 12, 10, 354 }, { 12, 10, 362 }, { 12, 10, 595 }, { 13, 0, 306 }, - { 8, 0, 146 }, { 7, 0, 1646 }, { 9, 10, 329 }, { 11, 10, 254 }, - { 13, 11, 124 }, { 4, 0, 465 }, { 7, 0, 1663 }, { 4, 0, 525 }, - { 5, 11, 663 }, { 10, 0, 299 }, { 18, 0, 74 }, { 9, 10, 187 }, - { 11, 10, 1016 }, { 17, 10, 44 }, { 7, 0, 165 }, { 7, 0, 919 }, - { 4, 10, 506 }, { 8, 10, 517 }, { 5, 10, 295 }, { 7, 10, 1680 }, - { 5, 11, 846 }, { 6, 0, 1064 }, { 5, 11, 378 }, { 7, 11, 1402 }, - { 7, 11, 1414 }, { 8, 11, 465 }, { 9, 11, 286 }, { 10, 11, 185 }, - { 10, 11, 562 }, { 10, 11, 635 }, { 11, 11, 31 }, { 11, 11, 393 }, - { 12, 11, 456 }, { 13, 11, 312 }, { 18, 11, 65 }, { 18, 11, 96 }, - { 19, 11, 89 }, { 4, 0, 596 }, { 7, 10, 987 }, { 9, 10, 688 }, - { 10, 10, 522 }, { 11, 10, 788 }, { 12, 10, 566 }, { 6, 0, 82 }, - { 7, 0, 138 }, { 7, 0, 517 }, { 7, 0, 1741 }, { 11, 0, 238 }, - { 4, 11, 648 }, { 6, 10, 1775 }, { 7, 0, 1233 }, { 7, 10, 700 }, - { 7, 10, 940 }, { 8, 10, 514 }, { 9, 10, 116 }, { 9, 10, 535 }, - { 10, 10, 118 }, { 11, 10, 107 }, { 11, 10, 148 }, { 11, 10, 922 }, - { 12, 10, 254 }, { 12, 10, 421 }, { 14, 10, 238 }, { 4, 0, 962 }, - { 6, 0, 1824 }, { 8, 0, 894 }, { 12, 0, 708 }, { 12, 0, 725 }, - { 14, 0, 451 }, { 20, 0, 94 }, { 22, 0, 59 }, { 22, 0, 62 }, - { 5, 11, 945 }, { 6, 11, 1656 }, { 6, 11, 1787 }, { 7, 11, 167 }, - { 8, 11, 824 }, { 9, 11, 391 }, { 10, 11, 375 }, { 11, 11, 185 }, - { 5, 0, 495 }, { 7, 0, 834 }, { 9, 0, 733 }, { 11, 0, 378 }, - { 4, 10, 743 }, { 7, 11, 1273 }, { 6, 0, 1204 }, { 7, 11, 1645 }, - { 8, 11, 352 }, { 9, 11, 249 }, { 11, 10, 292 }, { 5, 0, 559 }, - { 4, 11, 152 }, { 9, 0, 499 }, { 10, 0, 341 }, { 15, 0, 144 }, - { 19, 0, 49 }, { 7, 10, 1283 }, { 9, 10, 227 }, { 11, 10, 325 }, - { 11, 10, 408 }, { 14, 10, 180 }, { 18, 10, 47 }, { 6, 0, 21 }, - { 6, 0, 1737 }, { 7, 0, 1444 }, { 8, 0, 224 }, { 5, 11, 1006 }, - { 7, 0, 1446 }, { 9, 0, 97 }, { 17, 0, 15 }, { 5, 10, 81 }, - { 7, 10, 146 }, { 7, 10, 1342 }, { 8, 10, 53 }, { 8, 10, 561 }, - { 8, 10, 694 }, { 8, 10, 754 }, { 9, 10, 115 }, { 9, 10, 894 }, - { 10, 10, 462 }, { 10, 10, 813 }, { 11, 10, 230 }, { 11, 10, 657 }, - { 11, 10, 699 }, { 11, 10, 748 }, { 12, 10, 119 }, { 12, 10, 200 }, - { 12, 10, 283 }, { 14, 10, 273 }, { 5, 10, 408 }, { 9, 10, 747 }, - { 7, 11, 431 }, { 7, 11, 832 }, { 6, 0, 729 }, { 6, 0, 953 }, - { 4, 0, 727 }, { 8, 0, 565 }, { 5, 11, 351 }, { 7, 11, 264 }, - { 8, 11, 565 }, { 6, 0, 1948 }, { 5, 0, 519 }, { 5, 11, 40 }, - { 7, 11, 598 }, { 7, 11, 1638 }, { 8, 11, 78 }, { 9, 11, 166 }, - { 9, 11, 640 }, { 9, 11, 685 }, { 9, 11, 773 }, { 11, 11, 215 }, - { 13, 11, 65 }, { 14, 11, 172 }, { 14, 11, 317 }, { 17, 11, 6 }, - { 8, 11, 60 }, { 9, 11, 343 }, { 11, 11, 769 }, { 9, 11, 455 }, - { 6, 0, 1193 }, { 12, 0, 790 }, { 7, 11, 1951 }, { 8, 11, 765 }, - { 8, 11, 772 }, { 12, 11, 671 }, { 7, 11, 108 }, { 8, 11, 219 }, - { 8, 11, 388 }, { 9, 11, 639 }, { 9, 11, 775 }, { 11, 11, 275 }, - { 12, 11, 464 }, { 4, 11, 468 }, { 7, 10, 30 }, { 8, 10, 86 }, - { 8, 10, 315 }, { 8, 10, 700 }, { 9, 10, 576 }, { 9, 10, 858 }, - { 11, 10, 310 }, { 11, 10, 888 }, { 11, 10, 904 }, { 12, 10, 361 }, - { 13, 10, 248 }, { 5, 11, 15 }, { 6, 11, 56 }, { 7, 11, 1758 }, - { 8, 11, 500 }, { 9, 11, 730 }, { 11, 11, 331 }, { 13, 11, 150 }, - { 14, 11, 282 }, { 4, 0, 402 }, { 7, 0, 2 }, { 8, 0, 323 }, - { 8, 0, 479 }, { 10, 10, 839 }, { 11, 0, 580 }, { 14, 0, 201 }, - { 5, 0, 59 }, { 7, 0, 672 }, { 9, 10, 617 }, { 18, 0, 34 }, - { 6, 11, 1886 }, { 4, 0, 961 }, { 8, 0, 896 }, { 6, 0, 1285 }, - { 5, 11, 205 }, { 6, 11, 438 }, { 9, 11, 711 }, { 6, 10, 428 }, - { 7, 10, 524 }, { 8, 10, 169 }, { 8, 10, 234 }, { 9, 10, 480 }, - { 10, 10, 646 }, { 20, 0, 46 }, { 13, 0, 479 }, { 5, 11, 534 }, - { 6, 0, 2019 }, { 6, 10, 1648 }, { 4, 0, 85 }, { 7, 0, 549 }, - { 7, 10, 1205 }, { 10, 10, 637 }, { 4, 0, 663 }, { 5, 0, 94 }, - { 7, 11, 235 }, { 7, 11, 1475 }, { 15, 11, 68 }, { 18, 11, 120 }, - { 6, 11, 443 }, { 9, 11, 237 }, { 9, 11, 571 }, { 9, 11, 695 }, - { 10, 11, 139 }, { 11, 11, 715 }, { 12, 11, 417 }, { 13, 11, 421 }, - { 4, 0, 783 }, { 4, 0, 682 }, { 8, 0, 65 }, { 9, 10, 39 }, - { 10, 10, 166 }, { 11, 10, 918 }, { 12, 10, 635 }, { 20, 10, 10 }, - { 22, 10, 27 }, { 22, 10, 43 }, { 22, 10, 52 }, { 6, 0, 11 }, - { 7, 0, 187 }, { 4, 0, 522 }, { 4, 0, 52 }, { 7, 0, 661 }, - { 4, 0, 383 }, { 5, 0, 520 }, { 7, 11, 546 }, { 11, 0, 343 }, - { 14, 0, 127 }, { 4, 11, 578 }, { 7, 10, 157 }, { 7, 11, 624 }, - { 7, 11, 916 }, { 8, 10, 279 }, { 10, 11, 256 }, { 11, 11, 87 }, - { 11, 11, 703 }, { 6, 10, 604 }, { 4, 0, 281 }, { 5, 0, 38 }, - { 7, 0, 194 }, { 7, 0, 668 }, { 7, 0, 1893 }, { 9, 0, 397 }, - { 7, 10, 945 }, { 11, 10, 713 }, { 11, 10, 744 }, { 11, 10, 1022 }, - { 9, 0, 635 }, { 11, 0, 559 }, { 5, 11, 923 }, { 7, 11, 490 }, - { 12, 11, 553 }, { 13, 11, 100 }, { 14, 11, 118 }, { 15, 11, 75 }, - { 4, 0, 975 }, { 4, 10, 567 }, { 9, 10, 859 }, { 7, 10, 1846 }, - { 7, 11, 1846 }, { 8, 10, 628 }, { 8, 11, 628 }, { 20, 0, 116 }, - { 10, 11, 750 }, { 14, 0, 51 }, { 14, 11, 51 }, { 15, 11, 7 }, - { 20, 11, 20 }, { 4, 0, 858 }, { 6, 0, 1075 }, { 4, 11, 924 }, - { 5, 10, 762 }, { 8, 0, 535 }, { 5, 0, 448 }, { 10, 10, 784 }, - { 13, 10, 191 }, { 5, 10, 298 }, { 7, 0, 610 }, { 7, 0, 1501 }, - { 7, 10, 633 }, { 7, 10, 905 }, { 7, 10, 909 }, { 7, 10, 1538 }, - { 9, 10, 767 }, { 12, 10, 636 }, { 4, 11, 265 }, { 7, 11, 807 }, - { 7, 11, 950 }, { 5, 11, 93 }, { 12, 11, 267 }, { 16, 11, 26 }, - { 8, 0, 191 }, { 11, 10, 301 }, { 7, 10, 1970 }, { 7, 0, 267 }, - { 4, 0, 319 }, { 5, 0, 699 }, { 10, 0, 673 }, { 6, 0, 336 }, - { 7, 0, 92 }, { 7, 0, 182 }, { 8, 0, 453 }, { 8, 0, 552 }, - { 9, 0, 204 }, { 9, 0, 285 }, { 10, 0, 99 }, { 11, 0, 568 }, - { 11, 0, 950 }, { 12, 0, 94 }, { 16, 0, 20 }, { 16, 0, 70 }, - { 19, 0, 55 }, { 12, 10, 644 }, { 16, 10, 90 }, { 6, 0, 551 }, - { 7, 0, 1308 }, { 7, 10, 845 }, { 7, 11, 994 }, { 8, 10, 160 }, - { 9, 10, 318 }, { 19, 11, 1 }, { 19, 11, 26 }, { 22, 11, 9 }, - { 7, 0, 1406 }, { 9, 0, 218 }, { 13, 0, 222 }, { 5, 0, 256 }, - { 10, 0, 69 }, { 5, 11, 233 }, { 5, 11, 320 }, { 6, 11, 140 }, - { 7, 11, 330 }, { 8, 11, 295 }, { 6, 0, 1980 }, { 8, 0, 952 }, - { 4, 0, 833 }, { 9, 11, 678 }, { 5, 11, 978 }, { 4, 11, 905 }, - { 6, 11, 1701 }, { 9, 11, 843 }, { 10, 10, 735 }, { 8, 10, 76 }, - { 17, 0, 39 }, { 20, 0, 36 }, { 18, 0, 81 }, { 18, 11, 81 }, - { 14, 0, 352 }, { 17, 0, 53 }, { 18, 0, 146 }, { 18, 0, 152 }, - { 19, 0, 11 }, { 22, 0, 54 }, { 7, 0, 634 }, { 10, 10, 841 }, - { 4, 0, 618 }, { 4, 0, 339 }, { 7, 0, 259 }, { 17, 0, 73 }, - { 4, 11, 275 }, { 12, 11, 376 }, { 4, 11, 509 }, { 7, 11, 273 }, - { 11, 11, 377 }, { 4, 0, 759 }, { 13, 0, 169 }, { 9, 10, 804 }, - { 6, 10, 96 }, { 7, 10, 1426 }, { 4, 10, 651 }, { 5, 10, 289 }, - { 7, 0, 1075 }, { 8, 10, 35 }, { 9, 10, 511 }, { 10, 10, 767 }, - { 19, 10, 118 }, { 6, 0, 649 }, { 6, 0, 670 }, { 8, 0, 482 }, - { 5, 0, 336 }, { 6, 0, 341 }, { 6, 0, 478 }, { 6, 0, 1763 }, - { 8, 0, 386 }, { 5, 11, 802 }, { 7, 11, 2021 }, { 8, 11, 805 }, - { 14, 11, 94 }, { 15, 11, 65 }, { 16, 11, 4 }, { 16, 11, 77 }, - { 16, 11, 80 }, { 17, 11, 5 }, { 6, 0, 1035 }, { 5, 11, 167 }, - { 5, 11, 899 }, { 6, 11, 410 }, { 9, 11, 777 }, { 6, 11, 1705 }, - { 5, 0, 924 }, { 5, 0, 969 }, { 4, 10, 704 }, { 7, 0, 73 }, - { 7, 11, 10 }, { 7, 10, 1078 }, { 5, 11, 11 }, { 6, 11, 117 }, - { 6, 11, 485 }, { 7, 11, 1133 }, { 9, 11, 582 }, { 9, 11, 594 }, - { 11, 11, 21 }, { 11, 11, 818 }, { 12, 11, 535 }, { 13, 11, 86 }, - { 7, 0, 1971 }, { 4, 11, 264 }, { 7, 11, 1067 }, { 8, 11, 204 }, - { 8, 11, 385 }, { 11, 11, 953 }, { 6, 0, 1458 }, { 7, 0, 1344 }, - { 5, 0, 396 }, { 6, 0, 501 }, { 4, 10, 720 }, { 5, 10, 306 }, - { 4, 0, 929 }, { 5, 0, 799 }, { 8, 0, 46 }, { 8, 0, 740 }, - { 5, 10, 431 }, { 7, 11, 646 }, { 7, 11, 1730 }, { 11, 11, 446 }, - { 13, 11, 178 }, { 7, 0, 276 }, { 5, 10, 464 }, { 6, 10, 236 }, - { 7, 10, 696 }, { 7, 10, 914 }, { 7, 10, 1108 }, { 7, 10, 1448 }, - { 9, 10, 15 }, { 9, 10, 564 }, { 10, 10, 14 }, { 12, 10, 565 }, - { 13, 10, 449 }, { 14, 10, 53 }, { 15, 10, 13 }, { 16, 10, 64 }, - { 17, 10, 41 }, { 4, 0, 892 }, { 5, 0, 770 }, { 6, 10, 1767 }, - { 12, 10, 194 }, { 17, 10, 107 }, { 7, 0, 158 }, { 5, 10, 840 }, - { 10, 11, 608 }, { 6, 0, 1432 }, { 10, 11, 250 }, { 8, 11, 794 }, - { 9, 11, 400 }, { 10, 11, 298 }, { 14, 11, 228 }, { 23, 0, 25 }, - { 7, 11, 1131 }, { 7, 11, 1468 }, { 7, 0, 2001 }, { 9, 10, 642 }, - { 11, 10, 236 }, { 14, 10, 193 }, { 4, 10, 68 }, { 5, 10, 634 }, - { 6, 10, 386 }, { 7, 10, 794 }, { 8, 10, 273 }, { 9, 10, 563 }, - { 10, 10, 105 }, { 10, 10, 171 }, { 11, 10, 94 }, { 11, 10, 354 }, - { 8, 11, 724 }, { 4, 0, 478 }, { 11, 11, 512 }, { 13, 11, 205 }, - { 19, 11, 30 }, { 22, 11, 36 }, { 23, 11, 19 }, { 7, 0, 1461 }, - { 12, 0, 91 }, { 6, 11, 190 }, { 7, 11, 768 }, { 7, 11, 1170 }, - { 4, 0, 602 }, { 8, 0, 211 }, { 4, 10, 95 }, { 7, 10, 416 }, - { 11, 10, 830 }, { 7, 10, 731 }, { 13, 10, 20 }, { 15, 10, 11 }, - { 6, 0, 1068 }, { 7, 0, 1872 }, { 4, 0, 13 }, { 5, 0, 567 }, - { 7, 0, 1498 }, { 9, 0, 124 }, { 11, 0, 521 }, { 12, 0, 405 }, - { 7, 11, 1023 }, { 7, 0, 1006 }, { 4, 0, 735 }, { 10, 0, 812 }, - { 4, 0, 170 }, { 7, 0, 323 }, { 6, 11, 137 }, { 9, 11, 75 }, - { 9, 11, 253 }, { 10, 11, 194 }, { 10, 11, 444 }, { 5, 0, 304 }, - { 7, 0, 1403 }, { 5, 10, 864 }, { 10, 10, 648 }, { 11, 10, 671 }, - { 15, 10, 46 }, { 7, 11, 1180 }, { 5, 10, 928 }, { 4, 0, 148 }, - { 5, 0, 742 }, { 11, 10, 986 }, { 12, 10, 682 }, { 5, 0, 523 }, - { 7, 11, 1743 }, { 7, 0, 730 }, { 18, 0, 144 }, { 19, 0, 61 }, - { 8, 10, 44 }, { 9, 10, 884 }, { 10, 10, 580 }, { 11, 10, 399 }, - { 11, 10, 894 }, { 15, 10, 122 }, { 5, 11, 760 }, { 7, 11, 542 }, - { 8, 11, 135 }, { 8, 11, 496 }, { 8, 0, 981 }, { 5, 0, 111 }, - { 10, 0, 132 }, { 11, 0, 191 }, { 11, 0, 358 }, { 11, 0, 460 }, - { 7, 11, 319 }, { 7, 11, 355 }, { 7, 11, 763 }, { 10, 11, 389 }, - { 17, 11, 43 }, { 6, 0, 890 }, { 6, 0, 1420 }, { 8, 11, 557 }, - { 5, 10, 518 }, { 5, 0, 444 }, { 7, 0, 1787 }, { 7, 10, 1852 }, - { 8, 0, 123 }, { 15, 0, 6 }, { 16, 0, 7 }, { 6, 0, 2041 }, - { 10, 11, 38 }, { 11, 11, 784 }, { 8, 0, 932 }, { 5, 0, 937 }, - { 7, 0, 100 }, { 6, 0, 995 }, { 4, 11, 58 }, { 5, 11, 286 }, - { 6, 11, 319 }, { 7, 11, 402 }, { 7, 11, 1254 }, { 7, 11, 1903 }, - { 8, 11, 356 }, { 12, 11, 408 }, { 4, 11, 389 }, { 9, 11, 181 }, - { 9, 11, 255 }, { 10, 11, 8 }, { 10, 11, 29 }, { 10, 11, 816 }, - { 11, 11, 311 }, { 11, 11, 561 }, { 12, 11, 67 }, { 13, 11, 181 }, - { 10, 0, 255 }, { 5, 0, 138 }, { 4, 10, 934 }, { 8, 10, 610 }, - { 4, 0, 965 }, { 10, 0, 863 }, { 10, 0, 898 }, { 10, 10, 804 }, - { 10, 10, 832 }, { 12, 0, 631 }, { 8, 10, 96 }, { 9, 10, 36 }, - { 10, 10, 607 }, { 11, 10, 423 }, { 11, 10, 442 }, { 12, 10, 309 }, - { 14, 10, 199 }, { 15, 10, 90 }, { 17, 10, 110 }, { 6, 0, 1394 }, - { 4, 0, 652 }, { 8, 0, 320 }, { 22, 0, 6 }, { 22, 0, 16 }, - { 9, 10, 13 }, { 9, 10, 398 }, { 9, 10, 727 }, { 10, 10, 75 }, - { 10, 10, 184 }, { 10, 10, 230 }, { 10, 10, 564 }, { 10, 10, 569 }, - { 11, 10, 973 }, { 12, 10, 70 }, { 12, 10, 189 }, { 13, 10, 57 }, - { 13, 10, 257 }, { 6, 0, 897 }, { 6, 0, 1333 }, { 4, 0, 692 }, - { 5, 0, 321 }, { 5, 11, 373 }, { 7, 0, 922 }, { 5, 0, 619 }, - { 5, 0, 698 }, { 9, 10, 631 }, { 5, 10, 345 }, { 7, 10, 1016 }, - { 9, 0, 957 }, { 9, 0, 1018 }, { 12, 0, 828 }, { 12, 0, 844 }, - { 12, 0, 897 }, { 12, 0, 901 }, { 12, 0, 943 }, { 15, 0, 180 }, - { 18, 0, 197 }, { 18, 0, 200 }, { 18, 0, 213 }, { 18, 0, 214 }, - { 18, 0, 226 }, { 5, 0, 917 }, { 6, 0, 1659 }, { 7, 0, 1100 }, - { 6, 0, 1173 }, { 6, 0, 1930 }, { 5, 0, 251 }, { 5, 0, 956 }, - { 8, 0, 268 }, { 9, 0, 214 }, { 18, 0, 142 }, { 5, 10, 673 }, - { 9, 10, 850 }, { 4, 10, 287 }, { 5, 10, 1018 }, { 4, 11, 672 }, - { 5, 0, 346 }, { 5, 0, 711 }, { 8, 0, 390 }, { 11, 11, 752 }, - { 11, 11, 885 }, { 5, 10, 34 }, { 10, 10, 724 }, { 12, 10, 444 }, - { 13, 10, 354 }, { 18, 10, 32 }, { 23, 10, 24 }, { 23, 10, 31 }, - { 24, 10, 5 }, { 4, 11, 710 }, { 6, 11, 606 }, { 6, 0, 744 }, - { 6, 10, 382 }, { 5, 11, 145 }, { 4, 10, 329 }, { 7, 11, 884 }, - { 12, 11, 124 }, { 4, 11, 467 }, { 5, 11, 405 }, { 6, 11, 544 }, - { 9, 10, 846 }, { 10, 10, 827 }, { 5, 0, 624 }, { 9, 11, 372 }, - { 15, 11, 2 }, { 19, 11, 10 }, { 19, 11, 18 }, { 4, 11, 387 }, - { 7, 11, 1288 }, { 5, 0, 783 }, { 7, 0, 1998 }, { 7, 0, 2047 }, - { 4, 10, 906 }, { 8, 10, 366 }, { 7, 11, 550 }, { 4, 10, 123 }, - { 4, 10, 649 }, { 5, 10, 605 }, { 7, 10, 1509 }, { 8, 10, 36 }, - { 6, 0, 1125 }, { 4, 0, 594 }, { 5, 10, 767 }, { 7, 11, 1227 }, - { 8, 11, 467 }, { 4, 11, 576 }, { 7, 11, 1263 }, { 4, 0, 268 }, - { 7, 0, 1534 }, { 7, 11, 1534 }, { 4, 10, 273 }, { 5, 10, 658 }, - { 5, 11, 919 }, { 5, 10, 995 }, { 6, 11, 1673 }, { 5, 0, 563 }, - { 6, 10, 72 }, { 7, 10, 1345 }, { 4, 11, 82 }, { 5, 11, 333 }, - { 5, 11, 904 }, { 6, 11, 207 }, { 7, 11, 325 }, { 7, 11, 1726 }, - { 8, 11, 101 }, { 10, 11, 778 }, { 11, 11, 220 }, { 5, 0, 37 }, - { 6, 0, 39 }, { 6, 0, 451 }, { 7, 0, 218 }, { 7, 0, 667 }, - { 7, 0, 1166 }, { 7, 0, 1687 }, { 8, 0, 662 }, { 16, 0, 2 }, - { 5, 10, 589 }, { 6, 0, 1332 }, { 5, 11, 903 }, { 6, 0, 508 }, - { 5, 10, 117 }, { 6, 10, 514 }, { 6, 10, 541 }, { 7, 10, 1164 }, - { 7, 10, 1436 }, { 8, 10, 220 }, { 8, 10, 648 }, { 10, 10, 688 }, - { 11, 10, 560 }, { 12, 11, 147 }, { 6, 11, 555 }, { 7, 11, 485 }, - { 5, 10, 686 }, { 7, 0, 453 }, { 7, 0, 635 }, { 7, 0, 796 }, - { 8, 0, 331 }, { 9, 0, 330 }, { 9, 0, 865 }, { 10, 0, 119 }, - { 10, 0, 235 }, { 11, 0, 111 }, { 11, 0, 129 }, { 11, 0, 240 }, - { 12, 0, 31 }, { 12, 0, 66 }, { 12, 0, 222 }, { 12, 0, 269 }, - { 12, 0, 599 }, { 12, 0, 684 }, { 12, 0, 689 }, { 12, 0, 691 }, - { 14, 0, 345 }, { 7, 0, 1834 }, { 4, 11, 705 }, { 7, 11, 615 }, - { 10, 11, 251 }, { 8, 11, 345 }, { 9, 0, 527 }, { 6, 0, 98 }, - { 7, 0, 702 }, { 7, 0, 991 }, { 11, 0, 576 }, { 14, 0, 74 }, - { 7, 10, 196 }, { 10, 10, 765 }, { 11, 10, 347 }, { 11, 10, 552 }, - { 11, 10, 790 }, { 12, 10, 263 }, { 13, 10, 246 }, { 13, 10, 270 }, - { 13, 10, 395 }, { 14, 10, 176 }, { 14, 10, 190 }, { 14, 10, 398 }, - { 14, 10, 412 }, { 15, 10, 32 }, { 15, 10, 63 }, { 16, 10, 88 }, - { 19, 10, 105 }, { 6, 11, 90 }, { 13, 0, 84 }, { 13, 0, 122 }, - { 6, 0, 37 }, { 7, 0, 299 }, { 7, 0, 1666 }, { 8, 0, 195 }, - { 8, 0, 316 }, { 9, 0, 178 }, { 9, 0, 276 }, { 9, 0, 339 }, - { 9, 0, 536 }, { 10, 0, 102 }, { 10, 0, 362 }, { 10, 0, 785 }, - { 11, 0, 55 }, { 11, 0, 149 }, { 11, 0, 773 }, { 13, 0, 416 }, - { 13, 0, 419 }, { 14, 0, 38 }, { 14, 0, 41 }, { 14, 0, 210 }, - { 5, 10, 381 }, { 7, 10, 1792 }, { 7, 11, 813 }, { 12, 11, 497 }, - { 13, 11, 56 }, { 7, 10, 616 }, { 10, 10, 413 }, { 5, 0, 645 }, - { 6, 11, 125 }, { 7, 11, 1277 }, { 4, 0, 290 }, { 6, 0, 70 }, - { 7, 0, 1292 }, { 10, 0, 762 }, { 11, 0, 288 }, { 6, 10, 120 }, - { 7, 10, 1188 }, { 7, 10, 1710 }, { 8, 10, 286 }, { 9, 10, 667 }, - { 11, 10, 592 }, { 11, 10, 730 }, { 7, 11, 1784 }, { 7, 0, 1315 }, - { 7, 11, 1315 }, { 6, 0, 1955 }, { 7, 10, 1146 }, { 7, 0, 131 }, - { 7, 0, 422 }, { 8, 0, 210 }, { 12, 0, 573 }, { 4, 10, 352 }, - { 7, 10, 687 }, { 11, 0, 797 }, { 15, 0, 38 }, { 14, 0, 179 }, - { 15, 0, 151 }, { 22, 0, 11 }, { 7, 0, 488 }, { 4, 10, 192 }, - { 5, 10, 49 }, { 6, 10, 200 }, { 6, 10, 293 }, { 6, 10, 1696 }, - { 4, 0, 936 }, { 7, 11, 703 }, { 6, 11, 160 }, { 7, 11, 1106 }, - { 9, 11, 770 }, { 10, 11, 618 }, { 11, 11, 112 }, { 12, 11, 413 }, - { 5, 0, 453 }, { 6, 0, 441 }, { 7, 0, 595 }, { 4, 10, 650 }, - { 4, 10, 147 }, { 6, 0, 991 }, { 6, 0, 1182 }, { 12, 11, 271 }, - { 17, 11, 109 }, { 5, 10, 934 }, { 12, 11, 221 }, { 4, 0, 653 }, - { 7, 0, 505 }, { 7, 0, 523 }, { 6, 0, 903 }, { 7, 11, 479 }, - { 7, 11, 304 }, { 9, 11, 646 }, { 9, 11, 862 }, { 10, 11, 262 }, - { 11, 11, 696 }, { 12, 11, 208 }, { 15, 11, 79 }, { 19, 11, 108 }, - { 18, 0, 80 }, { 7, 11, 981 }, { 14, 0, 432 }, { 4, 0, 314 }, - { 9, 11, 152 }, { 7, 0, 1368 }, { 8, 0, 232 }, { 8, 0, 361 }, - { 10, 0, 682 }, { 10, 0, 742 }, { 7, 11, 1586 }, { 9, 0, 534 }, - { 4, 11, 434 }, { 11, 11, 663 }, { 12, 11, 210 }, { 13, 11, 166 }, - { 13, 11, 310 }, { 14, 11, 373 }, { 19, 11, 43 }, { 7, 11, 1091 }, - { 7, 11, 1765 }, { 6, 11, 550 }, { 7, 11, 652 }, { 9, 0, 27 }, - { 14, 0, 12 }, { 4, 10, 637 }, { 5, 11, 553 }, { 7, 11, 766 }, - { 10, 11, 824 }, { 7, 11, 737 }, { 8, 11, 298 }, { 8, 11, 452 }, - { 7, 0, 736 }, { 11, 0, 264 }, { 6, 0, 1657 }, { 5, 11, 292 }, - { 10, 11, 135 }, { 6, 0, 844 }, { 6, 0, 1117 }, { 7, 0, 127 }, - { 9, 10, 867 }, { 10, 10, 837 }, { 6, 0, 1184 }, { 6, 0, 1208 }, - { 6, 0, 1294 }, { 8, 0, 364 }, { 6, 0, 1415 }, { 7, 0, 1334 }, - { 11, 0, 125 }, { 6, 10, 170 }, { 7, 11, 393 }, { 8, 10, 395 }, - { 8, 10, 487 }, { 10, 11, 603 }, { 11, 11, 206 }, { 13, 10, 147 }, - { 9, 11, 748 }, { 4, 11, 912 }, { 9, 11, 232 }, { 4, 10, 535 }, - { 8, 10, 618 }, { 9, 0, 792 }, { 7, 11, 1973 }, { 8, 11, 716 }, - { 7, 11, 98 }, { 5, 0, 909 }, { 9, 0, 849 }, { 10, 0, 805 }, - { 4, 0, 630 }, { 4, 0, 699 }, { 5, 11, 733 }, { 14, 11, 103 }, - { 22, 10, 23 }, { 12, 11, 158 }, { 18, 11, 8 }, { 19, 11, 62 }, - { 20, 11, 6 }, { 22, 11, 4 }, { 23, 11, 2 }, { 23, 11, 9 }, - { 4, 0, 968 }, { 4, 10, 778 }, { 4, 10, 46 }, { 5, 10, 811 }, - { 6, 10, 1679 }, { 6, 10, 1714 }, { 7, 10, 2032 }, { 6, 0, 1446 }, - { 7, 10, 1458 }, { 9, 10, 407 }, { 11, 10, 15 }, { 7, 0, 206 }, - { 7, 0, 397 }, { 7, 0, 621 }, { 7, 0, 640 }, { 8, 0, 124 }, - { 8, 0, 619 }, { 9, 0, 305 }, { 9, 0, 643 }, { 10, 0, 264 }, - { 10, 0, 628 }, { 11, 0, 40 }, { 12, 0, 349 }, { 13, 0, 134 }, - { 13, 0, 295 }, { 14, 0, 155 }, { 15, 0, 120 }, { 18, 0, 105 }, - { 6, 10, 34 }, { 7, 10, 1089 }, { 8, 10, 708 }, { 8, 10, 721 }, - { 9, 10, 363 }, { 20, 10, 98 }, { 4, 0, 262 }, { 5, 0, 641 }, - { 7, 0, 342 }, { 9, 11, 72 }, { 4, 0, 99 }, { 6, 0, 250 }, - { 6, 0, 346 }, { 8, 0, 127 }, { 10, 0, 81 }, { 4, 0, 915 }, - { 5, 0, 75 }, { 9, 0, 517 }, { 10, 0, 470 }, { 12, 0, 155 }, - { 13, 0, 224 }, { 4, 10, 462 }, { 11, 11, 600 }, { 11, 11, 670 }, - { 13, 11, 245 }, { 14, 0, 83 }, { 5, 10, 73 }, { 6, 10, 23 }, - { 6, 10, 338 }, { 6, 0, 1031 }, { 11, 11, 923 }, { 7, 11, 164 }, - { 7, 11, 1571 }, { 9, 11, 107 }, { 12, 11, 225 }, { 6, 0, 1470 }, - { 5, 0, 954 }, { 6, 0, 304 }, { 8, 0, 418 }, { 10, 0, 345 }, - { 11, 0, 341 }, { 11, 0, 675 }, { 9, 0, 410 }, { 11, 0, 425 }, - { 4, 11, 27 }, { 5, 11, 484 }, { 5, 11, 510 }, { 6, 11, 434 }, - { 7, 11, 1000 }, { 7, 11, 1098 }, { 8, 11, 2 }, { 8, 11, 200 }, - { 6, 0, 734 }, { 12, 11, 257 }, { 7, 10, 725 }, { 8, 10, 498 }, - { 11, 10, 268 }, { 6, 0, 1822 }, { 7, 0, 1798 }, { 7, 10, 773 }, - { 4, 11, 460 }, { 4, 11, 932 }, { 5, 11, 891 }, { 6, 0, 14 }, - { 4, 10, 583 }, { 7, 10, 1462 }, { 8, 11, 625 }, { 11, 10, 659 }, - { 5, 0, 113 }, { 6, 0, 243 }, { 6, 0, 1708 }, { 7, 0, 1865 }, - { 11, 0, 161 }, { 16, 0, 37 }, { 17, 0, 99 }, { 5, 10, 220 }, - { 6, 11, 76 }, { 5, 11, 461 }, { 7, 11, 1925 }, { 12, 0, 69 }, - { 8, 11, 92 }, { 9, 11, 221 }, { 11, 10, 803 }, { 4, 10, 544 }, - { 4, 0, 274 }, { 6, 0, 922 }, { 4, 0, 541 }, { 5, 0, 627 }, - { 6, 10, 437 }, { 6, 10, 564 }, { 11, 10, 181 }, { 13, 10, 183 }, - { 7, 10, 1192 }, { 7, 0, 166 }, { 4, 11, 763 }, { 5, 11, 253 }, - { 6, 0, 849 }, { 9, 11, 73 }, { 10, 11, 110 }, { 14, 11, 185 }, - { 17, 11, 119 }, { 5, 11, 212 }, { 12, 11, 35 }, { 13, 11, 382 }, - { 5, 0, 717 }, { 9, 0, 304 }, { 8, 0, 600 }, { 5, 0, 654 }, - { 6, 0, 273 }, { 10, 0, 188 }, { 13, 0, 377 }, { 18, 0, 77 }, - { 4, 10, 790 }, { 5, 10, 273 }, { 6, 10, 394 }, { 4, 0, 543 }, - { 7, 0, 410 }, { 11, 0, 98 }, { 11, 0, 524 }, { 13, 0, 87 }, - { 4, 0, 941 }, { 7, 11, 1175 }, { 4, 0, 250 }, { 7, 0, 1612 }, - { 11, 0, 186 }, { 12, 0, 133 }, { 6, 10, 127 }, { 7, 10, 1511 }, - { 8, 10, 613 }, { 12, 10, 495 }, { 12, 10, 586 }, { 12, 10, 660 }, - { 12, 10, 668 }, { 14, 10, 385 }, { 15, 10, 118 }, { 17, 10, 20 }, - { 18, 10, 98 }, { 6, 0, 1785 }, { 5, 11, 816 }, { 6, 0, 1339 }, - { 7, 0, 961 }, { 7, 0, 1085 }, { 7, 0, 1727 }, { 8, 0, 462 }, - { 6, 10, 230 }, { 7, 11, 1727 }, { 9, 0, 636 }, { 7, 10, 1954 }, - { 4, 0, 780 }, { 5, 11, 869 }, { 5, 11, 968 }, { 6, 11, 1626 }, - { 8, 11, 734 }, { 8, 11, 784 }, { 4, 11, 542 }, { 6, 11, 1716 }, - { 6, 11, 1727 }, { 7, 11, 1082 }, { 7, 11, 1545 }, { 8, 11, 56 }, - { 8, 11, 118 }, { 8, 11, 412 }, { 8, 11, 564 }, { 9, 11, 888 }, - { 9, 11, 908 }, { 10, 11, 50 }, { 10, 11, 423 }, { 11, 11, 685 }, - { 11, 11, 697 }, { 11, 11, 933 }, { 12, 11, 299 }, { 13, 11, 126 }, - { 13, 11, 136 }, { 13, 11, 170 }, { 13, 11, 190 }, { 6, 11, 226 }, - { 4, 11, 232 }, { 9, 11, 202 }, { 10, 11, 474 }, { 12, 11, 433 }, - { 9, 11, 500 }, { 5, 0, 529 }, { 8, 10, 68 }, { 4, 10, 654 }, - { 4, 10, 156 }, { 7, 10, 998 }, { 7, 10, 1045 }, { 7, 10, 1860 }, - { 9, 10, 48 }, { 9, 10, 692 }, { 11, 10, 419 }, { 11, 10, 602 }, - { 7, 0, 1276 }, { 8, 0, 474 }, { 9, 0, 652 }, { 6, 11, 108 }, - { 7, 11, 1003 }, { 7, 11, 1181 }, { 8, 11, 343 }, { 7, 11, 1264 }, - { 7, 11, 1678 }, { 11, 11, 945 }, { 12, 11, 341 }, { 12, 11, 471 }, - { 12, 11, 569 }, { 6, 11, 1712 }, { 5, 0, 948 }, { 12, 0, 468 }, - { 19, 0, 96 }, { 20, 0, 24 }, { 4, 11, 133 }, { 7, 11, 711 }, - { 7, 11, 1298 }, { 7, 11, 1585 }, { 7, 11, 1929 }, { 6, 0, 753 }, - { 12, 0, 657 }, { 11, 0, 941 }, { 6, 11, 99 }, { 7, 11, 1808 }, - { 17, 11, 57 }, { 6, 11, 574 }, { 7, 11, 428 }, { 7, 11, 1250 }, - { 10, 11, 669 }, { 11, 11, 485 }, { 11, 11, 840 }, { 12, 11, 300 }, - { 14, 11, 250 }, { 4, 0, 532 }, { 5, 0, 706 }, { 7, 0, 662 }, - { 5, 0, 837 }, { 6, 0, 1651 }, { 11, 0, 985 }, { 7, 0, 1861 }, - { 9, 10, 197 }, { 10, 10, 300 }, { 12, 10, 473 }, { 13, 10, 90 }, - { 13, 10, 405 }, { 9, 11, 252 }, { 6, 11, 323 }, { 7, 11, 1564 }, - { 4, 0, 330 }, { 4, 0, 863 }, { 7, 0, 933 }, { 7, 0, 2012 }, - { 8, 0, 292 }, { 7, 11, 461 }, { 8, 11, 775 }, { 10, 11, 435 }, - { 4, 10, 606 }, { 4, 11, 655 }, { 7, 11, 850 }, { 17, 11, 75 }, - { 18, 11, 137 }, { 7, 0, 767 }, { 7, 10, 1978 }, { 8, 10, 676 }, - { 4, 0, 641 }, { 7, 11, 1559 }, { 6, 0, 1233 }, { 9, 0, 242 }, - { 17, 0, 114 }, { 4, 10, 361 }, { 5, 10, 315 }, { 9, 0, 883 }, - { 4, 10, 461 }, { 10, 0, 274 }, { 6, 0, 2008 }, { 6, 0, 1794 }, - { 4, 0, 703 }, { 7, 0, 207 }, { 12, 0, 285 }, { 4, 10, 472 }, - { 4, 0, 571 }, { 5, 0, 873 }, { 5, 0, 960 }, { 8, 0, 823 }, - { 9, 0, 881 }, { 8, 11, 577 }, { 7, 0, 617 }, { 10, 0, 498 }, - { 11, 0, 501 }, { 12, 0, 16 }, { 12, 0, 150 }, { 10, 10, 747 }, - { 4, 0, 431 }, { 5, 10, 155 }, { 11, 0, 283 }, { 11, 0, 567 }, - { 7, 10, 163 }, { 8, 10, 319 }, { 9, 10, 402 }, { 10, 10, 24 }, - { 10, 10, 681 }, { 11, 10, 200 }, { 12, 10, 253 }, { 12, 10, 410 }, - { 14, 10, 219 }, { 4, 11, 413 }, { 5, 11, 677 }, { 8, 11, 432 }, - { 12, 11, 280 }, { 9, 0, 401 }, { 5, 10, 475 }, { 7, 10, 1780 }, - { 11, 10, 297 }, { 11, 10, 558 }, { 14, 10, 322 }, { 19, 10, 76 }, - { 6, 0, 781 }, { 9, 0, 134 }, { 10, 0, 2 }, { 10, 0, 27 }, - { 10, 0, 333 }, { 11, 0, 722 }, { 15, 0, 1 }, { 5, 0, 33 }, - { 6, 0, 470 }, { 11, 0, 424 }, { 7, 0, 2006 }, { 12, 0, 783 }, - { 7, 10, 1956 }, { 8, 0, 274 }, { 7, 0, 1882 }, { 4, 0, 794 }, - { 7, 0, 1848 }, { 5, 10, 944 }, { 6, 10, 1769 }, { 6, 0, 47 }, - { 7, 0, 90 }, { 7, 0, 664 }, { 7, 0, 830 }, { 7, 0, 1380 }, - { 7, 0, 2025 }, { 8, 0, 448 }, { 8, 0, 828 }, { 4, 10, 144 }, - { 6, 0, 1199 }, { 4, 11, 395 }, { 11, 11, 762 }, { 7, 11, 1504 }, - { 9, 0, 417 }, { 9, 0, 493 }, { 9, 11, 174 }, { 10, 11, 164 }, - { 11, 11, 440 }, { 11, 11, 841 }, { 15, 11, 98 }, { 6, 11, 426 }, - { 11, 11, 1002 }, { 6, 0, 295 }, { 6, 0, 816 }, { 6, 10, 247 }, - { 9, 10, 555 }, { 5, 0, 1019 }, { 4, 0, 620 }, { 5, 11, 476 }, - { 10, 10, 280 }, { 10, 10, 797 }, { 11, 0, 464 }, { 5, 11, 76 }, - { 6, 11, 458 }, { 6, 11, 497 }, { 7, 11, 764 }, { 7, 11, 868 }, - { 9, 11, 658 }, { 10, 11, 594 }, { 11, 11, 173 }, { 11, 11, 566 }, - { 12, 11, 20 }, { 12, 11, 338 }, { 13, 11, 200 }, { 6, 0, 208 }, - { 4, 11, 526 }, { 7, 11, 1029 }, { 7, 11, 1054 }, { 4, 11, 636 }, - { 6, 11, 233 }, { 7, 11, 660 }, { 7, 11, 1124 }, { 17, 11, 31 }, - { 19, 11, 22 }, { 23, 11, 14 }, { 10, 0, 442 }, { 5, 10, 428 }, - { 10, 0, 930 }, { 12, 0, 778 }, { 6, 0, 68 }, { 7, 0, 448 }, - { 7, 0, 1629 }, { 7, 0, 1769 }, { 7, 0, 1813 }, { 8, 0, 442 }, - { 8, 0, 516 }, { 9, 0, 710 }, { 10, 0, 282 }, { 10, 0, 722 }, - { 7, 10, 1717 }, { 10, 10, 546 }, { 6, 0, 1128 }, { 11, 0, 844 }, - { 12, 0, 104 }, { 12, 0, 625 }, { 4, 11, 432 }, { 7, 11, 824 }, - { 10, 10, 189 }, { 5, 0, 787 }, { 5, 10, 99 }, { 4, 11, 279 }, - { 7, 11, 301 }, { 9, 11, 362 }, { 8, 0, 491 }, { 4, 10, 397 }, - { 8, 10, 555 }, { 4, 11, 178 }, { 5, 11, 399 }, { 6, 0, 711 }, - { 16, 0, 9 }, { 4, 0, 403 }, { 5, 0, 441 }, { 7, 0, 450 }, - { 10, 0, 840 }, { 11, 0, 101 }, { 12, 0, 193 }, { 13, 0, 430 }, - { 7, 11, 1246 }, { 12, 10, 398 }, { 20, 10, 39 }, { 21, 10, 11 }, - { 22, 10, 41 }, { 4, 10, 485 }, { 7, 10, 353 }, { 7, 10, 1523 }, - { 6, 10, 366 }, { 7, 10, 1384 }, { 7, 10, 1601 }, { 7, 11, 1912 }, - { 7, 0, 396 }, { 10, 0, 160 }, { 7, 11, 396 }, { 9, 10, 282 }, - { 6, 11, 1692 }, { 4, 10, 157 }, { 5, 10, 471 }, { 6, 11, 202 }, - { 10, 11, 448 }, { 11, 11, 208 }, { 12, 11, 360 }, { 17, 11, 117 }, - { 17, 11, 118 }, { 18, 11, 27 }, { 20, 11, 67 }, { 5, 0, 679 }, - { 9, 0, 326 }, { 8, 10, 116 }, { 7, 11, 872 }, { 10, 11, 516 }, - { 11, 11, 167 }, { 4, 11, 224 }, { 5, 11, 546 }, { 7, 11, 35 }, - { 8, 11, 11 }, { 8, 11, 12 }, { 9, 11, 315 }, { 9, 11, 533 }, - { 10, 11, 802 }, { 11, 11, 166 }, { 12, 11, 525 }, { 14, 11, 243 }, - { 7, 0, 1128 }, { 7, 11, 1920 }, { 5, 11, 241 }, { 8, 11, 242 }, - { 9, 11, 451 }, { 10, 11, 667 }, { 11, 11, 598 }, { 12, 11, 429 }, - { 6, 0, 737 }, { 5, 10, 160 }, { 7, 10, 363 }, { 7, 10, 589 }, - { 10, 10, 170 }, { 13, 10, 55 }, { 7, 0, 1796 }, { 14, 11, 254 }, - { 4, 0, 574 }, { 7, 0, 350 }, { 7, 0, 1024 }, { 8, 0, 338 }, - { 9, 0, 677 }, { 10, 0, 808 }, { 6, 0, 1096 }, { 9, 11, 516 }, - { 7, 0, 405 }, { 10, 0, 491 }, { 4, 10, 108 }, { 4, 11, 366 }, - { 11, 10, 498 }, { 11, 11, 337 }, { 14, 11, 303 }, { 6, 11, 1736 }, - { 7, 0, 1081 }, { 12, 11, 364 }, { 7, 10, 1005 }, { 12, 10, 609 }, - { 7, 0, 1676 }, { 4, 10, 895 }, { 5, 10, 772 }, { 7, 0, 2037 }, - { 6, 0, 1207 }, { 11, 11, 916 }, { 14, 11, 419 }, { 14, 11, 140 }, - { 20, 11, 41 }, { 6, 11, 331 }, { 8, 11, 623 }, { 9, 0, 944 }, - { 9, 0, 969 }, { 9, 0, 1022 }, { 12, 0, 913 }, { 12, 0, 936 }, - { 15, 0, 177 }, { 15, 0, 193 }, { 4, 10, 926 }, { 5, 10, 983 }, - { 5, 0, 354 }, { 7, 11, 506 }, { 8, 0, 598 }, { 9, 0, 664 }, - { 10, 0, 441 }, { 4, 11, 640 }, { 5, 11, 513 }, { 9, 0, 297 }, - { 4, 10, 538 }, { 6, 10, 294 }, { 7, 10, 1267 }, { 8, 10, 624 }, - { 7, 0, 1772 }, { 7, 11, 1888 }, { 8, 11, 289 }, { 11, 11, 45 }, - { 12, 11, 278 }, { 12, 11, 537 }, { 7, 10, 1325 }, { 10, 0, 751 }, - { 13, 0, 37 }, { 6, 0, 1828 }, { 4, 10, 757 }, { 4, 11, 394 }, - { 6, 0, 257 }, { 7, 0, 1522 }, { 4, 0, 582 }, { 9, 0, 191 }, - { 7, 11, 1931 }, { 7, 11, 574 }, { 7, 11, 1719 }, { 9, 11, 145 }, - { 4, 11, 658 }, { 10, 0, 790 }, { 4, 11, 369 }, { 9, 11, 781 }, - { 10, 11, 144 }, { 11, 11, 385 }, { 13, 11, 161 }, { 13, 11, 228 }, - { 13, 11, 268 }, { 20, 11, 107 }, { 8, 0, 469 }, { 10, 0, 47 }, - { 8, 11, 374 }, { 6, 0, 306 }, { 7, 0, 1140 }, { 7, 0, 1340 }, - { 8, 0, 133 }, { 10, 0, 449 }, { 11, 0, 1011 }, { 7, 10, 1875 }, - { 11, 10, 124 }, { 4, 11, 344 }, { 6, 11, 498 }, { 11, 11, 323 }, - { 9, 0, 299 }, { 4, 0, 837 }, { 5, 11, 906 }, { 5, 0, 329 }, - { 8, 0, 260 }, { 10, 0, 10 }, { 6, 0, 1320 }, { 4, 0, 657 }, - { 18, 0, 158 }, { 7, 0, 1191 }, { 24, 0, 7 }, { 6, 0, 1939 }, - { 8, 0, 974 }, { 10, 0, 996 }, { 7, 0, 1665 }, { 11, 11, 126 }, - { 11, 11, 287 }, { 15, 0, 8 }, { 14, 11, 149 }, { 14, 11, 399 }, - { 15, 11, 57 }, { 5, 0, 66 }, { 7, 0, 1896 }, { 8, 0, 288 }, - { 7, 0, 175 }, { 10, 0, 494 }, { 5, 10, 150 }, { 8, 10, 603 }, - { 9, 10, 593 }, { 9, 10, 634 }, { 10, 10, 173 }, { 11, 10, 462 }, - { 11, 10, 515 }, { 13, 10, 216 }, { 13, 10, 288 }, { 14, 10, 400 }, - { 6, 0, 1643 }, { 8, 11, 21 }, { 4, 0, 21 }, { 5, 0, 91 }, - { 5, 0, 648 }, { 5, 0, 750 }, { 5, 0, 781 }, { 6, 0, 54 }, - { 6, 0, 112 }, { 6, 0, 402 }, { 6, 0, 1732 }, { 7, 0, 315 }, - { 7, 0, 749 }, { 7, 0, 1427 }, { 7, 0, 1900 }, { 9, 0, 78 }, - { 9, 0, 508 }, { 10, 0, 611 }, { 10, 0, 811 }, { 11, 0, 510 }, - { 11, 0, 728 }, { 13, 0, 36 }, { 14, 0, 39 }, { 16, 0, 83 }, - { 17, 0, 124 }, { 20, 0, 30 }, { 4, 0, 668 }, { 8, 0, 570 }, - { 10, 0, 322 }, { 10, 0, 719 }, { 11, 0, 407 }, { 7, 11, 1381 }, - { 8, 11, 193 }, { 12, 10, 108 }, { 13, 10, 291 }, { 4, 11, 616 }, - { 8, 11, 692 }, { 8, 0, 125 }, { 8, 0, 369 }, { 8, 0, 524 }, - { 10, 0, 486 }, { 11, 0, 13 }, { 11, 0, 381 }, { 11, 0, 736 }, - { 11, 0, 766 }, { 11, 0, 845 }, { 13, 0, 114 }, { 13, 0, 292 }, - { 14, 0, 47 }, { 6, 0, 1247 }, { 6, 0, 1684 }, { 6, 0, 1731 }, - { 7, 0, 356 }, { 8, 0, 54 }, { 8, 0, 221 }, { 9, 0, 225 }, - { 9, 0, 356 }, { 10, 0, 77 }, { 10, 0, 446 }, { 10, 0, 731 }, - { 12, 0, 404 }, { 13, 0, 491 }, { 7, 10, 1777 }, { 4, 11, 305 }, - { 4, 10, 493 }, { 16, 10, 55 }, { 4, 0, 951 }, { 6, 0, 1809 }, - { 6, 0, 1849 }, { 8, 0, 846 }, { 8, 0, 866 }, { 8, 0, 899 }, - { 10, 0, 896 }, { 12, 0, 694 }, { 14, 0, 468 }, { 5, 11, 214 }, - { 7, 11, 603 }, { 8, 11, 611 }, { 9, 11, 686 }, { 10, 11, 88 }, - { 11, 11, 459 }, { 11, 11, 496 }, { 12, 11, 463 }, { 12, 11, 590 }, - { 13, 11, 0 }, { 14, 11, 214 }, { 4, 0, 411 }, { 4, 0, 80 }, - { 5, 0, 44 }, { 12, 11, 74 }, { 15, 0, 31 }, { 7, 0, 669 }, - { 6, 10, 568 }, { 7, 10, 1804 }, { 8, 10, 362 }, { 8, 10, 410 }, - { 8, 10, 830 }, { 9, 10, 514 }, { 11, 10, 649 }, { 14, 10, 157 }, - { 7, 0, 673 }, { 6, 11, 1703 }, { 4, 10, 625 }, { 6, 0, 1303 }, - { 5, 0, 299 }, { 7, 0, 1083 }, { 10, 0, 704 }, { 6, 0, 275 }, - { 7, 0, 408 }, { 6, 10, 158 }, { 7, 10, 129 }, { 7, 10, 181 }, - { 8, 10, 276 }, { 8, 10, 377 }, { 10, 10, 523 }, { 11, 10, 816 }, - { 12, 10, 455 }, { 13, 10, 303 }, { 14, 10, 135 }, { 4, 0, 219 }, - { 7, 0, 367 }, { 7, 0, 1713 }, { 7, 0, 1761 }, { 9, 0, 86 }, - { 9, 0, 537 }, { 10, 0, 165 }, { 12, 0, 219 }, { 12, 0, 561 }, - { 8, 0, 216 }, { 4, 10, 1 }, { 4, 11, 737 }, { 6, 11, 317 }, - { 7, 10, 1143 }, { 7, 10, 1463 }, { 9, 10, 207 }, { 9, 10, 390 }, - { 9, 10, 467 }, { 10, 11, 98 }, { 11, 11, 294 }, { 11, 10, 836 }, - { 12, 11, 60 }, { 12, 11, 437 }, { 13, 11, 64 }, { 13, 11, 380 }, - { 14, 11, 430 }, { 6, 11, 1758 }, { 8, 11, 520 }, { 9, 11, 345 }, - { 9, 11, 403 }, { 14, 11, 350 }, { 5, 11, 47 }, { 10, 11, 242 }, - { 10, 11, 579 }, { 5, 11, 139 }, { 7, 11, 1168 }, { 10, 11, 539 }, - { 7, 0, 1319 }, { 4, 10, 295 }, { 4, 10, 723 }, { 5, 10, 895 }, - { 7, 10, 1031 }, { 8, 10, 199 }, { 8, 10, 340 }, { 9, 10, 153 }, - { 9, 10, 215 }, { 10, 10, 21 }, { 10, 10, 59 }, { 10, 10, 80 }, - { 10, 10, 224 }, { 10, 10, 838 }, { 11, 10, 229 }, { 11, 10, 652 }, - { 12, 10, 192 }, { 13, 10, 146 }, { 14, 10, 91 }, { 12, 0, 428 }, - { 9, 10, 51 }, { 5, 0, 514 }, { 5, 10, 309 }, { 12, 10, 211 }, - { 6, 0, 1010 }, { 5, 10, 125 }, { 8, 10, 77 }, { 10, 10, 15 }, - { 4, 0, 55 }, { 5, 0, 301 }, { 6, 0, 571 }, { 14, 0, 49 }, - { 18, 0, 102 }, { 8, 11, 370 }, { 4, 11, 107 }, { 7, 11, 613 }, - { 8, 11, 358 }, { 8, 11, 439 }, { 8, 11, 504 }, { 9, 11, 501 }, - { 10, 11, 383 }, { 11, 11, 477 }, { 4, 11, 229 }, { 5, 0, 364 }, - { 5, 10, 439 }, { 4, 11, 903 }, { 7, 11, 1816 }, { 11, 0, 379 }, - { 12, 10, 76 }, { 4, 0, 76 }, { 4, 0, 971 }, { 7, 0, 1550 }, - { 9, 0, 306 }, { 9, 0, 430 }, { 9, 0, 663 }, { 10, 0, 683 }, - { 10, 0, 921 }, { 11, 0, 427 }, { 11, 0, 753 }, { 12, 0, 334 }, - { 12, 0, 442 }, { 14, 0, 258 }, { 14, 0, 366 }, { 15, 0, 131 }, - { 9, 0, 52 }, { 4, 11, 47 }, { 6, 11, 373 }, { 7, 11, 452 }, - { 7, 11, 543 }, { 7, 11, 1714 }, { 7, 11, 1856 }, { 9, 11, 6 }, - { 11, 11, 257 }, { 11, 11, 391 }, { 4, 10, 8 }, { 7, 10, 1152 }, - { 7, 10, 1153 }, { 7, 10, 1715 }, { 9, 10, 374 }, { 10, 10, 478 }, - { 11, 10, 648 }, { 4, 11, 785 }, { 5, 11, 368 }, { 7, 10, 1099 }, - { 7, 11, 860 }, { 5, 11, 980 }, { 6, 11, 1754 }, { 6, 0, 1258 }, - { 6, 0, 1058 }, { 6, 0, 1359 }, { 7, 11, 536 }, { 7, 11, 1331 }, - { 8, 11, 143 }, { 4, 0, 656 }, { 7, 0, 779 }, { 8, 10, 87 }, - { 5, 11, 19 }, { 6, 11, 533 }, { 18, 11, 126 }, { 7, 0, 144 }, - { 10, 10, 438 }, { 5, 11, 395 }, { 5, 11, 951 }, { 6, 11, 1776 }, - { 7, 0, 1373 }, { 7, 0, 554 }, { 7, 0, 605 }, { 13, 0, 10 }, - { 4, 10, 69 }, { 5, 10, 122 }, { 9, 10, 656 }, { 10, 10, 464 }, - { 5, 10, 849 }, { 6, 10, 1633 }, { 5, 0, 838 }, { 5, 0, 841 }, - { 6, 0, 1649 }, { 5, 0, 1012 }, { 11, 10, 499 }, { 7, 10, 476 }, - { 7, 10, 1592 }, { 10, 10, 87 }, { 6, 0, 251 }, { 7, 0, 365 }, - { 7, 0, 1357 }, { 7, 0, 1497 }, { 8, 0, 154 }, { 13, 0, 281 }, - { 4, 11, 441 }, { 4, 11, 695 }, { 7, 11, 497 }, { 9, 11, 387 }, - { 19, 11, 81 }, { 5, 0, 340 }, { 14, 10, 283 }, { 14, 11, 283 }, - { 6, 0, 810 }, { 7, 11, 1894 }, { 11, 0, 495 }, { 5, 11, 284 }, - { 6, 11, 49 }, { 6, 11, 350 }, { 7, 11, 1 }, { 7, 11, 377 }, - { 7, 11, 1693 }, { 8, 11, 18 }, { 8, 11, 678 }, { 9, 11, 161 }, - { 9, 11, 585 }, { 9, 11, 671 }, { 9, 11, 839 }, { 11, 11, 912 }, - { 13, 11, 427 }, { 5, 10, 859 }, { 7, 10, 1160 }, { 8, 10, 107 }, - { 9, 10, 291 }, { 9, 10, 439 }, { 10, 10, 663 }, { 11, 10, 609 }, - { 12, 10, 197 }, { 8, 0, 261 }, { 9, 0, 144 }, { 9, 0, 466 }, - { 10, 0, 370 }, { 12, 0, 470 }, { 13, 0, 144 }, { 14, 0, 348 }, - { 9, 0, 897 }, { 6, 0, 248 }, { 9, 0, 546 }, { 10, 0, 535 }, - { 11, 0, 681 }, { 13, 0, 135 }, { 4, 0, 358 }, { 7, 0, 1496 }, - { 6, 0, 567 }, { 8, 0, 445 }, { 4, 10, 117 }, { 6, 10, 372 }, - { 7, 10, 1905 }, { 14, 10, 323 }, { 4, 10, 722 }, { 11, 10, 471 }, - { 6, 0, 697 }, { 6, 0, 996 }, { 7, 11, 2007 }, { 9, 11, 101 }, - { 9, 11, 450 }, { 10, 11, 66 }, { 10, 11, 842 }, { 11, 11, 536 }, - { 12, 11, 587 }, { 4, 0, 577 }, { 6, 0, 1336 }, { 9, 10, 5 }, - { 12, 10, 216 }, { 12, 10, 294 }, { 12, 10, 298 }, { 12, 10, 400 }, - { 12, 10, 518 }, { 13, 10, 229 }, { 15, 10, 139 }, { 6, 0, 174 }, - { 10, 0, 917 }, { 6, 10, 1774 }, { 5, 10, 12 }, { 7, 10, 375 }, - { 9, 10, 88 }, { 9, 10, 438 }, { 11, 11, 62 }, { 11, 10, 270 }, - { 6, 11, 1766 }, { 6, 11, 0 }, { 7, 11, 84 }, { 7, 10, 816 }, - { 7, 10, 1241 }, { 9, 10, 283 }, { 9, 10, 520 }, { 10, 10, 213 }, - { 10, 10, 307 }, { 10, 10, 463 }, { 10, 10, 671 }, { 10, 10, 746 }, - { 11, 10, 401 }, { 11, 10, 794 }, { 11, 11, 895 }, { 12, 10, 517 }, - { 17, 11, 11 }, { 18, 10, 107 }, { 19, 10, 115 }, { 5, 0, 878 }, - { 5, 0, 972 }, { 6, 11, 1665 }, { 7, 11, 256 }, { 7, 11, 1388 }, - { 10, 11, 499 }, { 4, 10, 258 }, { 8, 10, 639 }, { 4, 11, 22 }, - { 5, 11, 10 }, { 6, 10, 22 }, { 7, 11, 848 }, { 7, 10, 903 }, - { 7, 10, 1963 }, { 8, 11, 97 }, { 10, 10, 577 }, { 5, 10, 681 }, - { 8, 10, 782 }, { 5, 11, 481 }, { 4, 0, 351 }, { 4, 10, 664 }, - { 5, 10, 804 }, { 11, 10, 1013 }, { 6, 11, 134 }, { 7, 11, 437 }, - { 7, 11, 959 }, { 9, 11, 37 }, { 14, 11, 285 }, { 14, 11, 371 }, - { 16, 11, 60 }, { 7, 11, 486 }, { 8, 11, 155 }, { 11, 11, 93 }, - { 12, 11, 164 }, { 4, 0, 286 }, { 7, 0, 438 }, { 7, 0, 627 }, - { 7, 0, 1516 }, { 8, 0, 40 }, { 9, 0, 56 }, { 9, 0, 294 }, - { 10, 0, 30 }, { 11, 0, 969 }, { 11, 0, 995 }, { 18, 0, 148 }, - { 5, 11, 591 }, { 7, 11, 337 }, { 6, 0, 1950 }, { 5, 10, 32 }, - { 10, 11, 500 }, { 5, 11, 380 }, { 5, 11, 650 }, { 8, 11, 310 }, - { 4, 11, 364 }, { 7, 11, 1156 }, { 7, 11, 1187 }, { 9, 11, 409 }, - { 4, 0, 738 }, { 6, 11, 482 }, { 4, 11, 781 }, { 6, 11, 487 }, - { 7, 11, 926 }, { 8, 11, 263 }, { 11, 11, 500 }, { 7, 11, 418 }, - { 6, 0, 2047 }, { 10, 0, 969 }, { 4, 10, 289 }, { 7, 10, 629 }, - { 7, 10, 1698 }, { 7, 10, 1711 }, { 12, 10, 215 }, { 6, 10, 450 }, - { 8, 10, 109 }, { 6, 0, 818 }, { 8, 10, 705 }, { 5, 0, 866 }, - { 4, 11, 94 }, { 7, 11, 1265 }, { 4, 11, 417 }, { 6, 0, 1467 }, - { 7, 10, 1238 }, { 4, 0, 972 }, { 6, 0, 1851 }, { 6, 0, 1857 }, - { 6, 0, 355 }, { 5, 0, 116 }, { 4, 0, 457 }, { 7, 11, 1411 }, - { 4, 11, 408 }, { 4, 11, 741 }, { 7, 11, 500 }, { 6, 10, 26 }, - { 14, 11, 137 }, { 5, 0, 527 }, { 6, 0, 189 }, { 7, 0, 859 }, - { 8, 0, 267 }, { 11, 0, 104 }, { 11, 0, 554 }, { 15, 0, 60 }, - { 15, 0, 125 }, { 6, 0, 1613 }, { 4, 10, 414 }, { 5, 10, 467 }, - { 9, 10, 654 }, { 10, 10, 451 }, { 12, 10, 59 }, { 13, 10, 375 }, - { 7, 10, 17 }, { 6, 0, 116 }, { 7, 11, 541 }, { 7, 10, 955 }, - { 6, 11, 73 }, { 7, 11, 177 }, { 5, 11, 576 }, { 6, 0, 886 }, - { 5, 0, 487 }, { 4, 0, 86 }, { 5, 0, 667 }, { 5, 0, 753 }, - { 6, 0, 316 }, { 6, 0, 455 }, { 7, 0, 946 }, { 14, 11, 231 }, - { 22, 0, 45 }, { 6, 0, 863 }, { 6, 0, 1953 }, { 6, 10, 280 }, - { 10, 10, 502 }, { 11, 10, 344 }, { 12, 10, 38 }, { 4, 0, 79 }, - { 7, 0, 1773 }, { 10, 0, 450 }, { 11, 0, 589 }, { 13, 0, 332 }, - { 13, 0, 493 }, { 14, 0, 183 }, { 14, 0, 334 }, { 14, 0, 362 }, - { 14, 0, 368 }, { 14, 0, 376 }, { 14, 0, 379 }, { 19, 0, 90 }, - { 19, 0, 103 }, { 19, 0, 127 }, { 20, 0, 90 }, { 5, 10, 45 }, - { 7, 10, 1161 }, { 11, 10, 448 }, { 11, 10, 880 }, { 13, 10, 139 }, - { 13, 10, 407 }, { 15, 10, 16 }, { 17, 10, 95 }, { 18, 10, 66 }, - { 18, 10, 88 }, { 18, 10, 123 }, { 21, 10, 7 }, { 8, 10, 777 }, - { 4, 10, 410 }, { 7, 10, 521 }, { 7, 10, 1778 }, { 7, 11, 538 }, - { 14, 0, 381 }, { 5, 11, 413 }, { 6, 0, 1142 }, { 6, 0, 1189 }, - { 8, 11, 495 }, { 5, 0, 663 }, { 6, 0, 1962 }, { 6, 0, 2003 }, - { 7, 11, 54 }, { 8, 11, 312 }, { 10, 11, 191 }, { 10, 11, 614 }, - { 12, 11, 567 }, { 4, 10, 436 }, { 5, 0, 846 }, { 10, 0, 528 }, - { 11, 0, 504 }, { 7, 10, 1587 }, { 7, 10, 1707 }, { 5, 0, 378 }, - { 8, 0, 465 }, { 9, 0, 286 }, { 10, 0, 185 }, { 10, 0, 562 }, - { 10, 0, 635 }, { 11, 0, 31 }, { 11, 0, 393 }, { 13, 0, 312 }, - { 18, 0, 65 }, { 18, 0, 96 }, { 19, 0, 89 }, { 7, 0, 899 }, - { 14, 0, 325 }, { 6, 11, 468 }, { 7, 11, 567 }, { 7, 11, 1478 }, - { 8, 11, 530 }, { 14, 11, 290 }, { 7, 0, 1880 }, { 9, 0, 680 }, - { 11, 0, 798 }, { 6, 0, 1770 }, { 4, 0, 648 }, { 22, 11, 35 }, - { 5, 0, 945 }, { 6, 0, 1656 }, { 6, 0, 1787 }, { 7, 0, 167 }, - { 8, 0, 824 }, { 9, 0, 391 }, { 10, 0, 375 }, { 11, 0, 185 }, - { 6, 11, 484 }, { 7, 11, 822 }, { 6, 0, 2046 }, { 7, 0, 1645 }, - { 8, 0, 352 }, { 9, 0, 249 }, { 4, 0, 152 }, { 6, 0, 611 }, - { 7, 0, 1733 }, { 6, 11, 1724 }, { 7, 11, 2022 }, { 5, 0, 1006 }, - { 13, 11, 96 }, { 5, 0, 420 }, { 7, 0, 1449 }, { 18, 11, 149 }, - { 7, 0, 832 }, { 7, 10, 663 }, { 5, 0, 351 }, { 5, 0, 40 }, - { 7, 0, 598 }, { 7, 0, 1638 }, { 8, 0, 78 }, { 9, 0, 166 }, - { 9, 0, 640 }, { 9, 0, 685 }, { 9, 0, 773 }, { 11, 0, 215 }, - { 13, 0, 65 }, { 14, 0, 172 }, { 14, 0, 317 }, { 17, 0, 6 }, - { 8, 0, 60 }, { 9, 0, 343 }, { 11, 0, 769 }, { 6, 0, 1354 }, - { 4, 0, 724 }, { 9, 0, 745 }, { 4, 11, 474 }, { 7, 0, 1951 }, - { 8, 0, 765 }, { 8, 0, 772 }, { 12, 0, 671 }, { 7, 0, 108 }, - { 8, 0, 219 }, { 8, 0, 388 }, { 9, 0, 775 }, { 11, 0, 275 }, - { 12, 0, 464 }, { 9, 0, 639 }, { 7, 10, 503 }, { 5, 11, 366 }, - { 5, 0, 15 }, { 6, 0, 56 }, { 7, 0, 1758 }, { 8, 0, 500 }, - { 9, 0, 730 }, { 11, 0, 331 }, { 13, 0, 150 }, { 14, 0, 282 }, - { 5, 11, 305 }, { 9, 11, 560 }, { 13, 11, 208 }, { 4, 10, 113 }, - { 5, 10, 163 }, { 5, 10, 735 }, { 7, 10, 1009 }, { 9, 10, 9 }, - { 9, 10, 771 }, { 12, 10, 90 }, { 13, 10, 138 }, { 13, 10, 410 }, - { 15, 10, 128 }, { 4, 10, 324 }, { 10, 10, 104 }, { 7, 11, 466 }, - { 14, 11, 27 }, { 6, 0, 1886 }, { 5, 0, 205 }, { 6, 0, 438 }, - { 9, 0, 711 }, { 4, 11, 480 }, { 6, 11, 167 }, { 6, 11, 302 }, - { 6, 11, 1642 }, { 7, 11, 130 }, { 7, 11, 656 }, { 7, 11, 837 }, - { 7, 11, 1547 }, { 7, 11, 1657 }, { 8, 11, 429 }, { 9, 11, 228 }, - { 10, 11, 643 }, { 13, 11, 289 }, { 13, 11, 343 }, { 19, 11, 101 }, - { 6, 0, 865 }, { 6, 0, 2025 }, { 8, 0, 965 }, { 7, 11, 278 }, - { 10, 11, 739 }, { 11, 11, 708 }, { 13, 11, 348 }, { 5, 0, 534 }, - { 7, 11, 1922 }, { 9, 0, 691 }, { 4, 10, 935 }, { 5, 10, 823 }, - { 6, 0, 443 }, { 9, 0, 237 }, { 9, 0, 571 }, { 9, 0, 695 }, - { 10, 0, 139 }, { 11, 0, 715 }, { 12, 0, 417 }, { 13, 0, 421 }, - { 5, 10, 269 }, { 7, 10, 434 }, { 7, 10, 891 }, { 8, 10, 339 }, - { 9, 10, 702 }, { 11, 10, 594 }, { 11, 10, 718 }, { 17, 10, 100 }, - { 6, 0, 1555 }, { 7, 0, 878 }, { 9, 10, 485 }, { 13, 10, 264 }, - { 6, 10, 1713 }, { 7, 10, 1810 }, { 11, 10, 866 }, { 12, 10, 103 }, - { 13, 10, 495 }, { 7, 10, 900 }, { 6, 0, 1410 }, { 9, 11, 316 }, - { 11, 11, 256 }, { 4, 0, 995 }, { 7, 0, 1033 }, { 4, 0, 578 }, - { 10, 0, 881 }, { 12, 0, 740 }, { 12, 0, 743 }, { 12, 0, 759 }, - { 4, 0, 822 }, { 5, 0, 923 }, { 14, 10, 143 }, { 7, 11, 1696 }, - { 6, 11, 363 }, { 7, 11, 1955 }, { 8, 11, 725 }, { 4, 0, 924 }, - { 5, 0, 665 }, { 7, 10, 2029 }, { 7, 0, 1901 }, { 4, 0, 265 }, - { 6, 0, 1092 }, { 6, 0, 1417 }, { 7, 0, 807 }, { 7, 0, 950 }, - { 5, 0, 93 }, { 12, 0, 267 }, { 13, 0, 498 }, { 7, 0, 1451 }, - { 5, 11, 813 }, { 7, 11, 2046 }, { 5, 10, 625 }, { 7, 10, 1617 }, - { 7, 0, 747 }, { 6, 0, 788 }, { 9, 0, 828 }, { 7, 0, 184 }, - { 11, 0, 307 }, { 11, 0, 400 }, { 15, 0, 130 }, { 5, 11, 712 }, - { 7, 11, 1855 }, { 8, 10, 425 }, { 8, 10, 693 }, { 9, 10, 720 }, - { 10, 10, 380 }, { 10, 10, 638 }, { 11, 11, 17 }, { 11, 10, 473 }, - { 12, 10, 61 }, { 13, 11, 321 }, { 16, 11, 67 }, { 7, 0, 198 }, - { 6, 11, 320 }, { 7, 11, 781 }, { 7, 11, 1921 }, { 9, 11, 55 }, - { 10, 11, 186 }, { 10, 11, 273 }, { 10, 11, 664 }, { 10, 11, 801 }, - { 11, 11, 996 }, { 11, 11, 997 }, { 13, 11, 157 }, { 14, 11, 170 }, - { 8, 11, 271 }, { 7, 0, 994 }, { 7, 11, 103 }, { 7, 11, 863 }, - { 11, 11, 184 }, { 14, 11, 299 }, { 17, 11, 62 }, { 11, 10, 551 }, - { 14, 10, 159 }, { 5, 0, 233 }, { 5, 0, 320 }, { 6, 0, 140 }, - { 8, 0, 295 }, { 8, 0, 615 }, { 8, 11, 615 }, { 5, 0, 978 }, - { 4, 0, 905 }, { 6, 0, 1701 }, { 9, 0, 843 }, { 4, 10, 168 }, - { 4, 0, 974 }, { 8, 0, 850 }, { 12, 0, 709 }, { 12, 0, 768 }, - { 12, 0, 786 }, { 7, 10, 91 }, { 24, 0, 6 }, { 10, 10, 532 }, - { 7, 10, 1884 }, { 4, 0, 509 }, { 6, 0, 1307 }, { 7, 0, 273 }, - { 5, 11, 77 }, { 7, 11, 1455 }, { 10, 11, 843 }, { 19, 11, 73 }, - { 22, 11, 5 }, { 4, 11, 458 }, { 7, 11, 1420 }, { 6, 11, 109 }, - { 10, 11, 382 }, { 6, 0, 201 }, { 6, 11, 330 }, { 7, 10, 70 }, - { 7, 11, 1084 }, { 10, 10, 240 }, { 11, 11, 142 }, { 19, 10, 93 }, - { 7, 0, 1041 }, { 12, 11, 328 }, { 5, 11, 354 }, { 6, 0, 1040 }, - { 5, 0, 693 }, { 6, 0, 774 }, { 11, 0, 234 }, { 4, 0, 336 }, - { 7, 0, 1399 }, { 11, 10, 392 }, { 20, 0, 22 }, { 20, 11, 22 }, - { 5, 0, 802 }, { 7, 0, 2021 }, { 8, 0, 805 }, { 5, 0, 167 }, - { 5, 0, 899 }, { 6, 0, 410 }, { 9, 0, 777 }, { 9, 0, 789 }, - { 6, 0, 1705 }, { 7, 10, 655 }, { 7, 10, 1844 }, { 4, 10, 145 }, - { 6, 10, 176 }, { 7, 10, 395 }, { 9, 10, 562 }, { 4, 10, 501 }, - { 7, 0, 10 }, { 5, 0, 11 }, { 6, 0, 117 }, { 6, 0, 485 }, - { 7, 0, 1133 }, { 9, 0, 582 }, { 9, 0, 594 }, { 10, 0, 82 }, - { 11, 0, 21 }, { 11, 0, 818 }, { 12, 0, 535 }, { 13, 0, 86 }, - { 20, 0, 91 }, { 23, 0, 13 }, { 6, 10, 509 }, { 4, 0, 264 }, - { 7, 0, 1067 }, { 8, 0, 204 }, { 8, 0, 385 }, { 11, 0, 953 }, - { 11, 11, 737 }, { 10, 0, 56 }, { 6, 0, 1917 }, { 5, 0, 470 }, - { 10, 11, 657 }, { 14, 11, 297 }, { 14, 11, 361 }, { 7, 11, 412 }, - { 7, 0, 1198 }, { 7, 11, 1198 }, { 8, 11, 556 }, { 14, 11, 123 }, - { 14, 11, 192 }, { 15, 11, 27 }, { 7, 11, 1985 }, { 14, 11, 146 }, - { 15, 11, 42 }, { 16, 11, 23 }, { 17, 11, 86 }, { 18, 11, 17 }, - { 11, 0, 1015 }, { 8, 11, 122 }, { 4, 10, 114 }, { 9, 10, 492 }, - { 13, 10, 462 }, { 14, 10, 215 }, { 4, 10, 77 }, { 5, 10, 361 }, - { 6, 10, 139 }, { 6, 10, 401 }, { 6, 10, 404 }, { 7, 10, 413 }, - { 7, 10, 715 }, { 7, 10, 1716 }, { 11, 10, 279 }, { 12, 10, 179 }, - { 12, 10, 258 }, { 13, 10, 244 }, { 14, 10, 358 }, { 6, 10, 1717 }, - { 7, 10, 1061 }, { 8, 10, 82 }, { 11, 10, 250 }, { 12, 10, 420 }, - { 13, 10, 184 }, { 5, 0, 715 }, { 7, 10, 724 }, { 9, 0, 919 }, - { 9, 0, 922 }, { 9, 0, 927 }, { 9, 0, 933 }, { 9, 0, 962 }, - { 9, 0, 1000 }, { 9, 0, 1002 }, { 9, 0, 1021 }, { 12, 0, 890 }, - { 12, 0, 907 }, { 12, 0, 930 }, { 15, 0, 207 }, { 15, 0, 228 }, - { 15, 0, 238 }, { 21, 0, 61 }, { 8, 0, 794 }, { 9, 0, 400 }, - { 10, 0, 298 }, { 14, 0, 228 }, { 5, 11, 430 }, { 5, 11, 932 }, - { 6, 11, 131 }, { 7, 11, 417 }, { 9, 11, 522 }, { 11, 11, 314 }, - { 13, 11, 390 }, { 4, 0, 867 }, { 8, 0, 724 }, { 4, 11, 507 }, - { 9, 11, 261 }, { 4, 11, 343 }, { 5, 11, 511 }, { 6, 0, 190 }, - { 7, 0, 768 }, { 7, 0, 1170 }, { 6, 10, 513 }, { 7, 10, 1052 }, - { 7, 11, 455 }, { 10, 11, 591 }, { 6, 0, 1066 }, { 9, 10, 899 }, - { 14, 0, 67 }, { 19, 0, 60 }, { 4, 0, 948 }, { 18, 0, 174 }, - { 18, 0, 176 }, { 7, 0, 1023 }, { 7, 10, 1417 }, { 12, 10, 382 }, - { 17, 10, 48 }, { 24, 10, 12 }, { 6, 11, 575 }, { 4, 0, 764 }, - { 6, 10, 545 }, { 7, 10, 565 }, { 7, 10, 1669 }, { 10, 10, 114 }, - { 11, 10, 642 }, { 12, 10, 618 }, { 6, 0, 137 }, { 9, 0, 75 }, - { 9, 0, 253 }, { 10, 0, 194 }, { 10, 0, 444 }, { 4, 0, 756 }, - { 5, 10, 5 }, { 8, 0, 1008 }, { 7, 10, 192 }, { 4, 0, 842 }, - { 11, 0, 643 }, { 12, 0, 115 }, { 8, 10, 763 }, { 11, 0, 67 }, - { 5, 10, 759 }, { 4, 0, 821 }, { 5, 0, 760 }, { 7, 0, 542 }, - { 8, 0, 135 }, { 8, 0, 496 }, { 7, 11, 580 }, { 7, 10, 370 }, - { 7, 10, 1007 }, { 7, 10, 1177 }, { 7, 10, 1565 }, { 7, 10, 1237 }, - { 12, 0, 736 }, { 7, 0, 319 }, { 7, 0, 355 }, { 7, 0, 763 }, - { 10, 0, 389 }, { 17, 0, 43 }, { 8, 11, 333 }, { 10, 11, 182 }, - { 4, 10, 87 }, { 5, 10, 250 }, { 13, 10, 298 }, { 10, 0, 786 }, - { 6, 0, 2044 }, { 8, 11, 330 }, { 12, 11, 477 }, { 7, 11, 1338 }, - { 4, 11, 125 }, { 6, 0, 1030 }, { 6, 0, 1083 }, { 4, 11, 721 }, - { 7, 10, 814 }, { 7, 11, 776 }, { 8, 11, 145 }, { 19, 11, 56 }, - { 6, 0, 1226 }, { 4, 10, 57 }, { 7, 10, 1195 }, { 7, 10, 1438 }, - { 7, 10, 1548 }, { 7, 10, 1835 }, { 7, 10, 1904 }, { 9, 10, 757 }, - { 10, 10, 604 }, { 11, 10, 519 }, { 7, 11, 792 }, { 8, 11, 147 }, - { 10, 11, 821 }, { 11, 11, 1021 }, { 9, 11, 797 }, { 4, 0, 58 }, - { 5, 0, 286 }, { 6, 0, 319 }, { 7, 0, 402 }, { 7, 0, 1254 }, - { 7, 0, 1903 }, { 8, 0, 356 }, { 12, 0, 408 }, { 4, 0, 389 }, - { 4, 0, 815 }, { 9, 0, 181 }, { 9, 0, 255 }, { 10, 0, 8 }, - { 10, 0, 29 }, { 10, 0, 816 }, { 11, 0, 311 }, { 11, 0, 561 }, - { 12, 0, 67 }, { 13, 0, 181 }, { 7, 11, 1472 }, { 7, 11, 1554 }, - { 7, 11, 1071 }, { 7, 11, 1541 }, { 7, 11, 1767 }, { 7, 11, 1806 }, - { 7, 11, 1999 }, { 9, 11, 248 }, { 10, 11, 400 }, { 11, 11, 162 }, - { 11, 11, 178 }, { 11, 11, 242 }, { 12, 11, 605 }, { 15, 11, 26 }, - { 16, 11, 44 }, { 5, 11, 168 }, { 5, 11, 930 }, { 8, 11, 74 }, - { 9, 11, 623 }, { 12, 11, 500 }, { 12, 11, 579 }, { 13, 11, 41 }, - { 15, 11, 93 }, { 6, 11, 220 }, { 7, 11, 1101 }, { 13, 11, 105 }, - { 5, 0, 474 }, { 7, 0, 507 }, { 4, 10, 209 }, { 7, 11, 507 }, - { 7, 10, 902 }, { 4, 0, 427 }, { 6, 0, 413 }, { 7, 10, 335 }, - { 7, 10, 1437 }, { 7, 10, 1668 }, { 8, 10, 553 }, { 8, 10, 652 }, - { 8, 10, 656 }, { 9, 10, 558 }, { 11, 10, 743 }, { 21, 10, 18 }, - { 4, 0, 730 }, { 6, 11, 19 }, { 7, 11, 1413 }, { 11, 11, 428 }, - { 5, 0, 373 }, { 4, 10, 559 }, { 7, 11, 96 }, { 8, 11, 401 }, - { 9, 11, 896 }, { 7, 0, 799 }, { 7, 0, 1972 }, { 5, 10, 1017 }, - { 10, 10, 511 }, { 7, 0, 1793 }, { 7, 11, 1961 }, { 7, 11, 1965 }, - { 8, 11, 702 }, { 8, 11, 750 }, { 8, 11, 150 }, { 8, 11, 737 }, - { 12, 11, 366 }, { 4, 0, 322 }, { 5, 10, 709 }, { 8, 11, 800 }, - { 9, 11, 148 }, { 9, 11, 872 }, { 9, 11, 890 }, { 11, 11, 309 }, - { 11, 11, 1001 }, { 13, 11, 267 }, { 13, 11, 323 }, { 6, 10, 1745 }, - { 7, 0, 290 }, { 8, 10, 206 }, { 7, 0, 1651 }, { 17, 0, 89 }, - { 11, 0, 2 }, { 4, 0, 672 }, { 6, 0, 1860 }, { 8, 0, 905 }, - { 10, 0, 844 }, { 10, 0, 846 }, { 10, 0, 858 }, { 12, 0, 699 }, - { 12, 0, 746 }, { 12, 0, 772 }, { 7, 11, 424 }, { 5, 11, 547 }, - { 5, 0, 737 }, { 5, 11, 490 }, { 6, 11, 615 }, { 6, 11, 620 }, - { 7, 11, 683 }, { 6, 0, 746 }, { 6, 0, 1612 }, { 4, 10, 776 }, - { 9, 11, 385 }, { 21, 11, 17 }, { 5, 0, 145 }, { 7, 10, 1272 }, - { 7, 0, 884 }, { 12, 0, 124 }, { 4, 0, 387 }, { 7, 0, 1288 }, - { 5, 11, 133 }, { 8, 10, 406 }, { 8, 11, 187 }, { 6, 0, 679 }, - { 8, 11, 8 }, { 10, 11, 0 }, { 7, 0, 550 }, { 7, 11, 798 }, - { 8, 11, 685 }, { 7, 11, 1086 }, { 17, 11, 46 }, { 8, 10, 175 }, - { 10, 10, 168 }, { 10, 10, 573 }, { 7, 0, 1305 }, { 4, 0, 576 }, - { 7, 0, 1263 }, { 6, 0, 686 }, { 6, 0, 1563 }, { 6, 0, 607 }, - { 5, 0, 919 }, { 6, 0, 1673 }, { 20, 0, 37 }, { 8, 11, 774 }, - { 10, 11, 670 }, { 12, 11, 51 }, { 5, 10, 784 }, { 11, 10, 882 }, - { 4, 0, 82 }, { 5, 0, 333 }, { 5, 0, 904 }, { 6, 0, 207 }, - { 7, 0, 325 }, { 7, 0, 1726 }, { 8, 0, 101 }, { 10, 0, 778 }, - { 11, 0, 220 }, { 7, 11, 371 }, { 4, 0, 958 }, { 5, 0, 903 }, - { 4, 11, 127 }, { 5, 11, 350 }, { 6, 11, 356 }, { 8, 11, 426 }, - { 9, 11, 572 }, { 10, 11, 247 }, { 11, 11, 312 }, { 12, 0, 147 }, - { 6, 11, 59 }, { 7, 11, 885 }, { 9, 11, 603 }, { 13, 11, 397 }, - { 10, 0, 367 }, { 9, 10, 14 }, { 9, 10, 441 }, { 11, 10, 9 }, - { 11, 10, 966 }, { 12, 10, 287 }, { 13, 10, 342 }, { 13, 10, 402 }, - { 15, 10, 110 }, { 15, 10, 163 }, { 6, 0, 690 }, { 4, 0, 705 }, - { 9, 0, 651 }, { 11, 0, 971 }, { 13, 0, 273 }, { 7, 10, 1428 }, - { 7, 10, 1640 }, { 7, 10, 1867 }, { 9, 10, 169 }, { 9, 10, 182 }, - { 9, 10, 367 }, { 9, 10, 478 }, { 9, 10, 506 }, { 9, 10, 551 }, - { 9, 10, 557 }, { 9, 10, 648 }, { 9, 10, 697 }, { 9, 10, 705 }, - { 9, 10, 725 }, { 9, 10, 787 }, { 9, 10, 794 }, { 10, 10, 198 }, - { 10, 10, 214 }, { 10, 10, 267 }, { 10, 10, 275 }, { 10, 10, 456 }, - { 10, 10, 551 }, { 10, 10, 561 }, { 10, 10, 613 }, { 10, 10, 627 }, - { 10, 10, 668 }, { 10, 10, 675 }, { 10, 10, 691 }, { 10, 10, 695 }, - { 10, 10, 707 }, { 10, 10, 715 }, { 11, 10, 183 }, { 11, 10, 201 }, - { 11, 10, 262 }, { 11, 10, 352 }, { 11, 10, 439 }, { 11, 10, 493 }, - { 11, 10, 572 }, { 11, 10, 591 }, { 11, 10, 608 }, { 11, 10, 611 }, - { 11, 10, 646 }, { 11, 10, 674 }, { 11, 10, 711 }, { 11, 10, 751 }, - { 11, 10, 761 }, { 11, 10, 776 }, { 11, 10, 785 }, { 11, 10, 850 }, - { 11, 10, 853 }, { 11, 10, 862 }, { 11, 10, 865 }, { 11, 10, 868 }, - { 11, 10, 875 }, { 11, 10, 898 }, { 11, 10, 902 }, { 11, 10, 903 }, - { 11, 10, 910 }, { 11, 10, 932 }, { 11, 10, 942 }, { 11, 10, 957 }, - { 11, 10, 967 }, { 11, 10, 972 }, { 12, 10, 148 }, { 12, 10, 195 }, - { 12, 10, 220 }, { 12, 10, 237 }, { 12, 10, 318 }, { 12, 10, 339 }, - { 12, 10, 393 }, { 12, 10, 445 }, { 12, 10, 450 }, { 12, 10, 474 }, - { 12, 10, 505 }, { 12, 10, 509 }, { 12, 10, 533 }, { 12, 10, 591 }, - { 12, 10, 594 }, { 12, 10, 597 }, { 12, 10, 621 }, { 12, 10, 633 }, - { 12, 10, 642 }, { 13, 10, 59 }, { 13, 10, 60 }, { 13, 10, 145 }, - { 13, 10, 239 }, { 13, 10, 250 }, { 13, 10, 329 }, { 13, 10, 344 }, - { 13, 10, 365 }, { 13, 10, 372 }, { 13, 10, 387 }, { 13, 10, 403 }, - { 13, 10, 414 }, { 13, 10, 456 }, { 13, 10, 470 }, { 13, 10, 478 }, - { 13, 10, 483 }, { 13, 10, 489 }, { 14, 10, 55 }, { 14, 10, 57 }, - { 14, 10, 81 }, { 14, 10, 90 }, { 14, 10, 148 }, { 14, 10, 239 }, - { 14, 10, 266 }, { 14, 10, 321 }, { 14, 10, 326 }, { 14, 10, 327 }, - { 14, 10, 330 }, { 14, 10, 347 }, { 14, 10, 355 }, { 14, 10, 401 }, - { 14, 10, 404 }, { 14, 10, 411 }, { 14, 10, 414 }, { 14, 10, 416 }, - { 14, 10, 420 }, { 15, 10, 61 }, { 15, 10, 74 }, { 15, 10, 87 }, - { 15, 10, 88 }, { 15, 10, 94 }, { 15, 10, 96 }, { 15, 10, 116 }, - { 15, 10, 149 }, { 15, 10, 154 }, { 16, 10, 50 }, { 16, 10, 63 }, - { 16, 10, 73 }, { 17, 10, 2 }, { 17, 10, 66 }, { 17, 10, 92 }, - { 17, 10, 103 }, { 17, 10, 112 }, { 17, 10, 120 }, { 18, 10, 50 }, - { 18, 10, 54 }, { 18, 10, 82 }, { 18, 10, 86 }, { 18, 10, 90 }, - { 18, 10, 111 }, { 18, 10, 115 }, { 18, 10, 156 }, { 19, 10, 40 }, - { 19, 10, 79 }, { 20, 10, 78 }, { 21, 10, 22 }, { 7, 0, 887 }, - { 5, 10, 161 }, { 7, 10, 839 }, { 14, 11, 98 }, { 6, 0, 90 }, - { 10, 11, 356 }, { 7, 11, 441 }, { 6, 11, 111 }, { 7, 11, 4 }, - { 8, 11, 163 }, { 8, 11, 776 }, { 10, 11, 566 }, { 6, 0, 908 }, - { 6, 0, 1261 }, { 7, 0, 813 }, { 12, 0, 497 }, { 13, 0, 56 }, - { 6, 0, 1235 }, { 7, 0, 429 }, { 7, 11, 1994 }, { 10, 0, 904 }, - { 6, 0, 125 }, { 7, 0, 1277 }, { 9, 0, 772 }, { 23, 0, 12 }, - { 4, 0, 841 }, { 5, 0, 386 }, { 5, 11, 386 }, { 5, 11, 297 }, - { 7, 11, 1038 }, { 6, 0, 860 }, { 6, 0, 1069 }, { 7, 11, 309 }, - { 8, 0, 946 }, { 7, 10, 1814 }, { 13, 11, 418 }, { 8, 11, 363 }, - { 10, 0, 768 }, { 11, 0, 787 }, { 22, 11, 30 }, { 22, 11, 33 }, - { 6, 0, 160 }, { 7, 0, 1106 }, { 9, 0, 770 }, { 11, 0, 112 }, - { 12, 0, 413 }, { 11, 11, 216 }, { 11, 11, 340 }, { 8, 10, 139 }, - { 7, 11, 1390 }, { 7, 11, 808 }, { 4, 11, 280 }, { 12, 0, 271 }, - { 17, 0, 109 }, { 7, 10, 643 }, { 8, 10, 236 }, { 12, 11, 54 }, - { 4, 11, 421 }, { 5, 11, 548 }, { 11, 0, 719 }, { 12, 0, 36 }, - { 13, 0, 337 }, { 7, 0, 581 }, { 9, 0, 644 }, { 9, 0, 699 }, - { 11, 11, 511 }, { 13, 11, 394 }, { 14, 11, 298 }, { 14, 11, 318 }, - { 18, 11, 103 }, { 7, 0, 304 }, { 9, 0, 646 }, { 9, 0, 862 }, - { 11, 0, 696 }, { 12, 0, 208 }, { 15, 0, 79 }, { 19, 0, 108 }, - { 4, 0, 631 }, { 7, 0, 1126 }, { 7, 0, 1536 }, { 7, 11, 1527 }, - { 8, 0, 880 }, { 10, 0, 869 }, { 10, 0, 913 }, { 7, 0, 1513 }, - { 5, 10, 54 }, { 6, 11, 254 }, { 9, 11, 109 }, { 10, 11, 103 }, - { 7, 0, 981 }, { 5, 11, 729 }, { 4, 10, 744 }, { 4, 0, 434 }, - { 6, 0, 550 }, { 7, 0, 930 }, { 10, 0, 476 }, { 13, 0, 452 }, - { 19, 0, 104 }, { 6, 11, 1630 }, { 10, 10, 402 }, { 18, 10, 55 }, - { 5, 0, 553 }, { 10, 0, 824 }, { 8, 0, 452 }, { 8, 0, 151 }, - { 9, 10, 624 }, { 4, 10, 572 }, { 4, 0, 772 }, { 5, 11, 671 }, - { 5, 0, 292 }, { 10, 0, 135 }, { 4, 11, 889 }, { 12, 11, 207 }, - { 9, 0, 504 }, { 6, 10, 43 }, { 7, 10, 38 }, { 8, 10, 248 }, - { 10, 10, 513 }, { 6, 0, 1089 }, { 7, 11, 1910 }, { 4, 11, 627 }, - { 5, 11, 775 }, { 7, 0, 783 }, { 5, 10, 766 }, { 5, 10, 363 }, - { 7, 0, 387 }, { 7, 11, 387 }, { 7, 0, 393 }, { 10, 0, 603 }, - { 11, 0, 206 }, { 7, 11, 202 }, { 11, 11, 362 }, { 11, 11, 948 }, - { 12, 11, 388 }, { 6, 11, 507 }, { 7, 11, 451 }, { 8, 11, 389 }, - { 12, 11, 490 }, { 13, 11, 16 }, { 13, 11, 215 }, { 13, 11, 351 }, - { 18, 11, 132 }, { 19, 11, 125 }, { 4, 0, 912 }, { 9, 0, 232 }, - { 7, 11, 841 }, { 6, 10, 258 }, { 12, 10, 409 }, { 5, 10, 249 }, - { 20, 10, 82 }, { 8, 11, 566 }, { 6, 0, 977 }, { 7, 11, 1214 }, - { 7, 0, 1973 }, { 8, 0, 716 }, { 7, 0, 98 }, { 5, 0, 733 }, - { 5, 11, 912 }, { 6, 11, 1695 }, { 5, 10, 393 }, { 6, 10, 378 }, - { 7, 10, 1981 }, { 9, 10, 32 }, { 9, 10, 591 }, { 10, 10, 685 }, - { 10, 10, 741 }, { 14, 10, 382 }, { 5, 10, 788 }, { 10, 0, 19 }, - { 11, 0, 911 }, { 7, 10, 1968 }, { 13, 10, 509 }, { 5, 0, 668 }, - { 5, 11, 236 }, { 6, 11, 572 }, { 8, 11, 492 }, { 11, 11, 618 }, - { 16, 11, 56 }, { 7, 11, 1789 }, { 4, 0, 360 }, { 5, 0, 635 }, - { 5, 0, 700 }, { 5, 10, 58 }, { 5, 10, 171 }, { 5, 10, 683 }, - { 6, 10, 291 }, { 6, 10, 566 }, { 7, 10, 1650 }, { 11, 10, 523 }, - { 12, 10, 273 }, { 12, 10, 303 }, { 15, 10, 39 }, { 15, 10, 111 }, - { 5, 0, 901 }, { 6, 10, 589 }, { 5, 11, 190 }, { 8, 11, 318 }, - { 12, 0, 656 }, { 7, 0, 726 }, { 24, 0, 9 }, { 4, 10, 917 }, - { 5, 10, 1005 }, { 7, 10, 1598 }, { 6, 11, 491 }, { 4, 10, 919 }, - { 5, 11, 434 }, { 9, 0, 72 }, { 6, 0, 1269 }, { 6, 0, 1566 }, - { 6, 0, 1621 }, { 9, 0, 463 }, { 10, 0, 595 }, { 4, 10, 255 }, - { 5, 10, 302 }, { 6, 10, 132 }, { 7, 10, 128 }, { 7, 10, 283 }, - { 7, 10, 1299 }, { 10, 10, 52 }, { 10, 10, 514 }, { 11, 10, 925 }, - { 13, 10, 92 }, { 14, 10, 309 }, { 7, 0, 1454 }, { 6, 0, 1287 }, - { 11, 0, 600 }, { 13, 0, 245 }, { 9, 10, 173 }, { 8, 0, 989 }, - { 7, 0, 164 }, { 7, 0, 1571 }, { 9, 0, 107 }, { 12, 0, 225 }, - { 6, 0, 1061 }, { 13, 10, 442 }, { 4, 0, 27 }, { 5, 0, 484 }, - { 5, 0, 510 }, { 6, 0, 434 }, { 7, 0, 1000 }, { 7, 0, 1098 }, - { 8, 0, 2 }, { 7, 11, 85 }, { 7, 11, 247 }, { 8, 11, 585 }, - { 10, 11, 163 }, { 10, 11, 316 }, { 11, 11, 103 }, { 14, 11, 0 }, - { 6, 0, 1127 }, { 4, 0, 460 }, { 6, 0, 852 }, { 6, 10, 210 }, - { 4, 0, 932 }, { 5, 0, 891 }, { 6, 0, 588 }, { 19, 11, 83 }, - { 8, 0, 625 }, { 4, 10, 284 }, { 6, 10, 223 }, { 6, 0, 76 }, - { 8, 0, 92 }, { 9, 0, 221 }, { 4, 11, 124 }, { 10, 11, 457 }, - { 11, 11, 121 }, { 11, 11, 169 }, { 11, 11, 422 }, { 11, 11, 870 }, - { 12, 11, 214 }, { 13, 11, 389 }, { 14, 11, 187 }, { 15, 11, 77 }, - { 9, 11, 618 }, { 10, 11, 482 }, { 4, 10, 218 }, { 7, 10, 526 }, - { 15, 10, 137 }, { 13, 0, 9 }, { 14, 0, 104 }, { 14, 0, 311 }, - { 4, 10, 270 }, { 5, 10, 192 }, { 6, 10, 332 }, { 7, 10, 1322 }, - { 12, 10, 661 }, { 7, 11, 1193 }, { 6, 11, 107 }, { 7, 11, 638 }, - { 7, 11, 1632 }, { 9, 11, 396 }, { 4, 0, 763 }, { 4, 0, 622 }, - { 5, 11, 370 }, { 6, 11, 1756 }, { 5, 0, 253 }, { 7, 0, 546 }, - { 9, 0, 73 }, { 10, 0, 110 }, { 14, 0, 185 }, { 17, 0, 119 }, - { 5, 11, 204 }, { 7, 0, 624 }, { 7, 0, 916 }, { 10, 0, 256 }, - { 11, 0, 87 }, { 7, 10, 379 }, { 8, 10, 481 }, { 9, 10, 377 }, - { 5, 0, 212 }, { 12, 0, 35 }, { 13, 0, 382 }, { 5, 11, 970 }, - { 6, 11, 1706 }, { 9, 0, 746 }, { 5, 10, 1003 }, { 6, 10, 149 }, - { 10, 0, 150 }, { 11, 0, 849 }, { 13, 0, 330 }, { 8, 10, 262 }, - { 9, 10, 627 }, { 11, 10, 214 }, { 11, 10, 404 }, { 11, 10, 457 }, - { 11, 10, 780 }, { 11, 10, 913 }, { 13, 10, 401 }, { 14, 10, 200 }, - { 6, 0, 1466 }, { 7, 11, 3 }, { 6, 0, 1299 }, { 4, 11, 35 }, - { 5, 11, 121 }, { 5, 11, 483 }, { 5, 11, 685 }, { 6, 11, 489 }, - { 7, 11, 1204 }, { 8, 11, 394 }, { 7, 10, 742 }, { 4, 10, 142 }, - { 8, 10, 304 }, { 4, 11, 921 }, { 5, 11, 1007 }, { 6, 0, 1518 }, - { 6, 0, 1229 }, { 7, 0, 1175 }, { 5, 0, 816 }, { 12, 0, 159 }, - { 4, 10, 471 }, { 4, 11, 712 }, { 5, 10, 51 }, { 6, 10, 602 }, - { 7, 10, 925 }, { 8, 10, 484 }, { 10, 10, 195 }, { 6, 11, 1629 }, - { 5, 0, 869 }, { 5, 0, 968 }, { 6, 0, 1626 }, { 8, 0, 734 }, - { 8, 0, 784 }, { 4, 0, 542 }, { 6, 0, 1716 }, { 6, 0, 1727 }, - { 7, 0, 1082 }, { 7, 0, 1545 }, { 8, 0, 56 }, { 8, 0, 118 }, - { 8, 0, 412 }, { 8, 0, 564 }, { 9, 0, 888 }, { 9, 0, 908 }, - { 10, 0, 50 }, { 10, 0, 423 }, { 11, 0, 685 }, { 11, 0, 697 }, - { 11, 0, 933 }, { 12, 0, 299 }, { 13, 0, 126 }, { 13, 0, 136 }, - { 13, 0, 170 }, { 13, 0, 190 }, { 8, 10, 688 }, { 4, 10, 697 }, - { 4, 0, 232 }, { 9, 0, 202 }, { 10, 0, 474 }, { 12, 0, 433 }, - { 8, 0, 212 }, { 6, 0, 108 }, { 7, 0, 1003 }, { 7, 0, 1181 }, - { 8, 0, 111 }, { 8, 0, 343 }, { 5, 10, 221 }, { 7, 11, 1255 }, - { 5, 11, 485 }, { 6, 0, 1712 }, { 14, 0, 216 }, { 5, 0, 643 }, - { 6, 0, 516 }, { 4, 11, 285 }, { 5, 11, 317 }, { 6, 11, 301 }, - { 7, 11, 7 }, { 8, 11, 153 }, { 10, 11, 766 }, { 11, 11, 468 }, - { 12, 11, 467 }, { 13, 11, 143 }, { 4, 0, 133 }, { 7, 0, 711 }, - { 7, 0, 1298 }, { 7, 0, 1585 }, { 6, 0, 650 }, { 7, 11, 512 }, - { 6, 0, 99 }, { 7, 0, 1808 }, { 17, 0, 57 }, { 6, 0, 246 }, - { 6, 0, 574 }, { 7, 0, 428 }, { 9, 0, 793 }, { 10, 0, 669 }, - { 11, 0, 485 }, { 11, 0, 840 }, { 12, 0, 300 }, { 14, 0, 250 }, - { 17, 0, 55 }, { 4, 10, 132 }, { 5, 10, 69 }, { 7, 10, 1242 }, - { 8, 0, 1023 }, { 7, 0, 302 }, { 4, 10, 111 }, { 7, 0, 1871 }, - { 4, 0, 728 }, { 9, 0, 252 }, { 4, 10, 767 }, { 6, 0, 461 }, - { 7, 0, 1590 }, { 7, 10, 1416 }, { 7, 10, 2005 }, { 8, 10, 131 }, - { 8, 10, 466 }, { 9, 10, 672 }, { 13, 10, 252 }, { 20, 10, 103 }, - { 6, 0, 323 }, { 7, 0, 1564 }, { 7, 0, 461 }, { 8, 0, 775 }, - { 6, 10, 44 }, { 8, 10, 368 }, { 11, 0, 172 }, { 4, 0, 464 }, - { 4, 10, 570 }, { 5, 10, 120 }, { 9, 11, 269 }, { 6, 10, 227 }, - { 7, 10, 1589 }, { 6, 11, 1719 }, { 6, 11, 1735 }, { 7, 11, 2016 }, - { 7, 11, 2020 }, { 8, 11, 837 }, { 9, 11, 852 }, { 7, 0, 727 }, - { 18, 0, 73 }, { 4, 0, 1023 }, { 7, 11, 852 }, { 7, 10, 1529 }, - { 8, 0, 577 }, { 10, 11, 568 }, { 6, 0, 1037 }, { 8, 11, 67 }, - { 10, 11, 419 }, { 4, 0, 413 }, { 5, 0, 677 }, { 8, 0, 432 }, - { 12, 0, 280 }, { 10, 0, 600 }, { 6, 10, 1667 }, { 7, 11, 967 }, - { 7, 10, 2036 }, { 13, 11, 11 }, { 6, 10, 511 }, { 12, 10, 132 }, - { 6, 0, 799 }, { 5, 10, 568 }, { 6, 10, 138 }, { 7, 10, 1293 }, - { 8, 0, 159 }, { 4, 10, 565 }, { 8, 10, 827 }, { 7, 0, 646 }, - { 7, 0, 1730 }, { 11, 0, 446 }, { 13, 0, 178 }, { 4, 10, 922 }, - { 5, 10, 1023 }, { 7, 11, 11 }, { 4, 0, 395 }, { 11, 0, 145 }, - { 7, 10, 1002 }, { 9, 0, 174 }, { 10, 0, 164 }, { 11, 0, 440 }, - { 11, 0, 514 }, { 11, 0, 841 }, { 15, 0, 98 }, { 21, 0, 20 }, - { 6, 0, 426 }, { 10, 0, 608 }, { 11, 0, 1002 }, { 7, 11, 320 }, - { 8, 11, 51 }, { 12, 11, 481 }, { 12, 11, 570 }, { 20, 11, 106 }, - { 9, 0, 977 }, { 9, 0, 983 }, { 4, 11, 445 }, { 10, 0, 250 }, - { 11, 0, 100 }, { 6, 0, 1982 }, { 8, 10, 402 }, { 5, 11, 239 }, - { 4, 10, 716 }, { 13, 10, 31 }, { 5, 0, 476 }, { 7, 11, 83 }, - { 7, 11, 1990 }, { 8, 11, 130 }, { 11, 11, 720 }, { 8, 10, 691 }, - { 8, 10, 731 }, { 5, 11, 123 }, { 6, 11, 530 }, { 7, 11, 348 }, - { 7, 11, 1419 }, { 5, 0, 76 }, { 6, 0, 458 }, { 6, 0, 497 }, - { 7, 0, 868 }, { 9, 0, 658 }, { 10, 0, 594 }, { 11, 0, 173 }, - { 11, 0, 566 }, { 12, 0, 20 }, { 12, 0, 338 }, { 13, 0, 200 }, - { 9, 11, 139 }, { 10, 11, 399 }, { 11, 11, 469 }, { 12, 11, 634 }, - { 13, 11, 223 }, { 9, 10, 840 }, { 10, 10, 803 }, { 5, 10, 847 }, - { 11, 11, 223 }, { 12, 11, 168 }, { 4, 11, 210 }, { 8, 0, 447 }, - { 9, 10, 53 }, { 9, 10, 268 }, { 9, 10, 901 }, { 10, 10, 518 }, - { 10, 10, 829 }, { 11, 10, 188 }, { 13, 10, 74 }, { 14, 10, 46 }, - { 15, 10, 17 }, { 15, 10, 33 }, { 17, 10, 40 }, { 18, 10, 36 }, - { 19, 10, 20 }, { 22, 10, 1 }, { 24, 10, 2 }, { 4, 0, 526 }, - { 7, 0, 1029 }, { 7, 0, 1054 }, { 19, 11, 59 }, { 22, 11, 2 }, - { 4, 0, 636 }, { 6, 0, 1875 }, { 6, 0, 1920 }, { 9, 0, 999 }, - { 12, 0, 807 }, { 12, 0, 825 }, { 15, 0, 179 }, { 15, 0, 190 }, - { 18, 0, 182 }, { 8, 10, 532 }, { 6, 0, 1699 }, { 7, 0, 660 }, - { 7, 0, 1124 }, { 17, 0, 31 }, { 19, 0, 22 }, { 23, 0, 14 }, - { 7, 10, 681 }, { 4, 11, 430 }, { 12, 10, 677 }, { 4, 10, 684 }, - { 8, 10, 384 }, { 4, 11, 756 }, { 5, 11, 213 }, { 7, 0, 188 }, - { 7, 10, 110 }, { 8, 10, 290 }, { 8, 10, 591 }, { 9, 10, 382 }, - { 9, 10, 649 }, { 11, 10, 71 }, { 11, 10, 155 }, { 11, 10, 313 }, - { 12, 10, 5 }, { 13, 10, 325 }, { 14, 10, 287 }, { 7, 10, 360 }, - { 7, 10, 425 }, { 9, 10, 66 }, { 9, 10, 278 }, { 10, 10, 644 }, - { 14, 11, 164 }, { 4, 0, 279 }, { 7, 0, 301 }, { 9, 0, 362 }, - { 6, 11, 586 }, { 7, 0, 1743 }, { 4, 0, 178 }, { 5, 0, 399 }, - { 4, 10, 900 }, { 5, 10, 861 }, { 5, 10, 254 }, { 7, 10, 985 }, - { 8, 10, 73 }, { 5, 11, 108 }, { 7, 10, 1959 }, { 8, 10, 683 }, - { 5, 11, 219 }, { 4, 11, 193 }, { 5, 11, 916 }, { 7, 11, 364 }, - { 10, 11, 398 }, { 10, 11, 726 }, { 11, 11, 317 }, { 11, 11, 626 }, - { 12, 11, 142 }, { 12, 11, 288 }, { 12, 11, 678 }, { 13, 11, 313 }, - { 15, 11, 113 }, { 18, 11, 114 }, { 21, 11, 30 }, { 22, 11, 53 }, - { 6, 11, 241 }, { 7, 11, 907 }, { 8, 11, 832 }, { 9, 11, 342 }, - { 10, 11, 729 }, { 11, 11, 284 }, { 11, 11, 445 }, { 11, 11, 651 }, - { 11, 11, 863 }, { 13, 11, 398 }, { 18, 11, 99 }, { 4, 0, 872 }, - { 6, 0, 831 }, { 6, 0, 1692 }, { 6, 0, 202 }, { 6, 0, 1006 }, - { 9, 0, 832 }, { 10, 0, 636 }, { 11, 0, 208 }, { 12, 0, 360 }, - { 17, 0, 118 }, { 18, 0, 27 }, { 20, 0, 67 }, { 9, 11, 734 }, - { 4, 10, 725 }, { 7, 11, 993 }, { 10, 11, 666 }, { 6, 0, 1954 }, - { 6, 10, 196 }, { 7, 0, 872 }, { 10, 0, 516 }, { 11, 0, 167 }, - { 5, 10, 831 }, { 4, 11, 562 }, { 9, 11, 254 }, { 11, 11, 879 }, - { 9, 0, 313 }, { 4, 0, 224 }, { 4, 11, 786 }, { 11, 0, 24 }, - { 12, 0, 170 }, { 8, 10, 723 }, { 5, 0, 546 }, { 7, 0, 35 }, - { 8, 0, 11 }, { 8, 0, 12 }, { 9, 0, 315 }, { 9, 0, 533 }, - { 10, 0, 802 }, { 11, 0, 166 }, { 12, 0, 525 }, { 14, 0, 243 }, - { 7, 0, 1937 }, { 13, 10, 80 }, { 13, 10, 437 }, { 17, 10, 74 }, - { 5, 0, 241 }, { 8, 0, 242 }, { 9, 0, 451 }, { 10, 0, 667 }, - { 11, 0, 598 }, { 12, 0, 429 }, { 22, 0, 46 }, { 6, 0, 1273 }, - { 9, 0, 830 }, { 5, 10, 848 }, { 6, 10, 66 }, { 8, 10, 764 }, - { 6, 0, 825 }, { 6, 0, 993 }, { 4, 0, 1006 }, { 10, 0, 327 }, - { 13, 0, 271 }, { 4, 10, 36 }, { 7, 10, 1387 }, { 11, 10, 755 }, - { 6, 0, 1023 }, { 7, 0, 1580 }, { 4, 0, 366 }, { 9, 0, 516 }, - { 4, 10, 887 }, { 6, 0, 1736 }, { 7, 0, 1891 }, { 6, 11, 216 }, - { 7, 11, 901 }, { 7, 11, 1343 }, { 8, 11, 493 }, { 6, 10, 165 }, - { 10, 10, 388 }, { 7, 11, 341 }, { 11, 11, 219 }, { 4, 10, 719 }, - { 7, 10, 155 }, { 6, 0, 1935 }, { 4, 0, 826 }, { 6, 0, 331 }, - { 6, 0, 1605 }, { 8, 0, 623 }, { 11, 0, 139 }, { 11, 0, 171 }, - { 7, 11, 1734 }, { 10, 11, 115 }, { 11, 11, 420 }, { 12, 11, 154 }, - { 13, 11, 404 }, { 14, 11, 346 }, { 15, 11, 54 }, { 15, 11, 112 }, - { 7, 0, 288 }, { 4, 10, 353 }, { 6, 10, 146 }, { 6, 10, 1789 }, - { 7, 10, 990 }, { 7, 10, 1348 }, { 9, 10, 665 }, { 9, 10, 898 }, - { 11, 10, 893 }, { 14, 10, 212 }, { 6, 0, 916 }, { 6, 0, 1592 }, - { 7, 0, 1888 }, { 4, 10, 45 }, { 7, 10, 1257 }, { 5, 11, 1011 }, - { 8, 11, 701 }, { 11, 11, 596 }, { 4, 11, 54 }, { 5, 11, 666 }, - { 7, 11, 1039 }, { 7, 11, 1130 }, { 9, 11, 195 }, { 10, 11, 302 }, - { 6, 0, 1471 }, { 6, 0, 1570 }, { 4, 0, 394 }, { 12, 10, 65 }, - { 8, 10, 816 }, { 7, 0, 1931 }, { 7, 0, 574 }, { 7, 0, 1719 }, - { 6, 11, 467 }, { 4, 0, 658 }, { 9, 0, 781 }, { 10, 0, 144 }, - { 11, 0, 385 }, { 13, 0, 161 }, { 13, 0, 228 }, { 13, 0, 268 }, - { 20, 0, 107 }, { 6, 11, 1669 }, { 8, 0, 374 }, { 7, 0, 735 }, - { 4, 0, 344 }, { 6, 0, 498 }, { 11, 0, 323 }, { 7, 0, 586 }, - { 7, 0, 1063 }, { 6, 10, 559 }, { 6, 10, 1691 }, { 9, 0, 155 }, - { 5, 0, 906 }, { 7, 11, 122 }, { 9, 11, 259 }, { 10, 11, 84 }, - { 11, 11, 470 }, { 12, 11, 541 }, { 13, 11, 379 }, { 6, 0, 1139 }, - { 10, 0, 108 }, { 11, 0, 116 }, { 6, 10, 456 }, { 5, 10, 925 }, - { 5, 11, 82 }, { 5, 11, 131 }, { 7, 11, 1755 }, { 8, 11, 31 }, - { 9, 11, 168 }, { 9, 11, 764 }, { 11, 11, 869 }, { 6, 11, 605 }, - { 5, 11, 278 }, { 9, 11, 68 }, { 4, 11, 163 }, { 5, 11, 201 }, - { 5, 11, 307 }, { 5, 11, 310 }, { 6, 11, 335 }, { 7, 11, 284 }, - { 8, 11, 165 }, { 7, 11, 1660 }, { 6, 11, 33 }, { 7, 11, 1244 }, - { 4, 0, 616 }, { 8, 11, 483 }, { 8, 0, 857 }, { 8, 0, 902 }, - { 8, 0, 910 }, { 10, 0, 879 }, { 12, 0, 726 }, { 4, 11, 199 }, - { 11, 11, 34 }, { 8, 0, 692 }, { 6, 10, 193 }, { 7, 10, 240 }, - { 7, 10, 1682 }, { 10, 10, 51 }, { 10, 10, 640 }, { 11, 10, 410 }, - { 13, 10, 82 }, { 14, 10, 247 }, { 14, 10, 331 }, { 14, 10, 377 }, - { 6, 0, 823 }, { 6, 0, 983 }, { 11, 10, 411 }, { 4, 0, 305 }, - { 8, 10, 633 }, { 10, 11, 203 }, { 6, 0, 681 }, { 6, 11, 326 }, - { 7, 11, 677 }, { 9, 11, 425 }, { 5, 0, 214 }, { 7, 0, 603 }, - { 8, 0, 611 }, { 9, 0, 686 }, { 10, 0, 88 }, { 11, 0, 459 }, - { 11, 0, 496 }, { 12, 0, 463 }, { 12, 0, 590 }, { 13, 0, 0 }, - { 8, 0, 1004 }, { 14, 0, 23 }, { 6, 0, 1703 }, { 19, 11, 8 }, - { 17, 11, 56 }, { 7, 0, 1443 }, { 4, 10, 237 }, { 7, 10, 514 }, - { 6, 0, 714 }, { 17, 0, 19 }, { 5, 11, 358 }, { 7, 11, 473 }, - { 7, 11, 1184 }, { 10, 11, 662 }, { 13, 11, 212 }, { 13, 11, 304 }, - { 13, 11, 333 }, { 17, 11, 98 }, { 4, 0, 737 }, { 10, 0, 98 }, - { 11, 0, 294 }, { 12, 0, 60 }, { 12, 0, 437 }, { 13, 0, 64 }, - { 13, 0, 380 }, { 14, 0, 430 }, { 6, 10, 392 }, { 7, 10, 65 }, - { 7, 10, 2019 }, { 6, 0, 1758 }, { 8, 0, 520 }, { 9, 0, 345 }, - { 9, 0, 403 }, { 14, 0, 350 }, { 5, 0, 47 }, { 10, 0, 242 }, - { 10, 0, 579 }, { 5, 0, 139 }, { 7, 0, 1168 }, { 10, 0, 539 }, - { 6, 0, 1459 }, { 13, 0, 388 }, { 13, 11, 388 }, { 6, 0, 253 }, - { 7, 10, 1260 }, { 7, 10, 1790 }, { 10, 0, 252 }, { 9, 10, 222 }, - { 11, 10, 900 }, { 12, 0, 745 }, { 5, 11, 946 }, { 4, 0, 107 }, - { 7, 0, 613 }, { 8, 0, 439 }, { 8, 0, 504 }, { 9, 0, 501 }, - { 10, 0, 383 }, { 11, 0, 477 }, { 7, 11, 1485 }, { 4, 0, 871 }, - { 7, 11, 411 }, { 7, 11, 590 }, { 8, 11, 631 }, { 9, 11, 323 }, - { 10, 11, 355 }, { 11, 11, 491 }, { 12, 11, 143 }, { 12, 11, 402 }, - { 13, 11, 73 }, { 14, 11, 408 }, { 15, 11, 107 }, { 18, 11, 71 }, - { 4, 0, 229 }, { 4, 0, 903 }, { 12, 0, 71 }, { 5, 0, 549 }, - { 4, 0, 47 }, { 6, 0, 373 }, { 7, 0, 452 }, { 7, 0, 543 }, - { 7, 0, 1828 }, { 7, 0, 1856 }, { 9, 0, 6 }, { 11, 0, 257 }, - { 11, 0, 391 }, { 7, 11, 1467 }, { 8, 11, 328 }, { 10, 11, 544 }, - { 11, 11, 955 }, { 13, 11, 320 }, { 17, 11, 83 }, { 5, 0, 980 }, - { 6, 0, 1754 }, { 8, 0, 865 }, { 5, 0, 705 }, { 9, 0, 606 }, - { 7, 0, 161 }, { 8, 10, 201 }, { 8, 10, 605 }, { 15, 11, 35 }, - { 5, 11, 835 }, { 6, 11, 483 }, { 12, 10, 224 }, { 7, 0, 536 }, - { 7, 0, 1331 }, { 8, 0, 143 }, { 6, 0, 1388 }, { 5, 0, 724 }, - { 10, 0, 305 }, { 11, 0, 151 }, { 12, 0, 33 }, { 12, 0, 121 }, - { 12, 0, 381 }, { 17, 0, 3 }, { 17, 0, 27 }, { 17, 0, 78 }, - { 18, 0, 18 }, { 19, 0, 54 }, { 21, 0, 5 }, { 4, 10, 523 }, - { 5, 10, 638 }, { 5, 0, 19 }, { 6, 0, 533 }, { 5, 0, 395 }, - { 5, 0, 951 }, { 6, 0, 1776 }, { 7, 0, 1908 }, { 4, 0, 846 }, - { 10, 0, 74 }, { 11, 0, 663 }, { 12, 0, 210 }, { 13, 0, 166 }, - { 13, 0, 310 }, { 14, 0, 373 }, { 18, 0, 95 }, { 19, 0, 43 }, - { 6, 10, 242 }, { 7, 10, 227 }, { 7, 10, 1581 }, { 8, 10, 104 }, - { 9, 10, 113 }, { 9, 10, 220 }, { 9, 10, 427 }, { 10, 10, 239 }, - { 11, 10, 579 }, { 11, 10, 1023 }, { 13, 10, 4 }, { 13, 10, 204 }, - { 13, 10, 316 }, { 20, 10, 86 }, { 9, 11, 716 }, { 11, 11, 108 }, - { 13, 11, 123 }, { 14, 11, 252 }, { 19, 11, 38 }, { 21, 11, 3 }, - { 23, 11, 11 }, { 8, 0, 372 }, { 9, 0, 122 }, { 10, 0, 175 }, - { 4, 11, 677 }, { 7, 11, 1374 }, { 8, 11, 540 }, { 7, 10, 861 }, - { 4, 0, 695 }, { 7, 0, 497 }, { 9, 0, 387 }, { 19, 0, 81 }, - { 8, 0, 937 }, { 6, 0, 718 }, { 7, 0, 1328 }, { 8, 10, 494 }, - { 4, 11, 331 }, { 6, 0, 1581 }, { 5, 11, 747 }, { 5, 0, 284 }, - { 6, 0, 49 }, { 6, 0, 350 }, { 7, 0, 1 }, { 7, 0, 377 }, - { 7, 0, 1693 }, { 8, 0, 18 }, { 8, 0, 678 }, { 9, 0, 161 }, - { 9, 0, 585 }, { 9, 0, 671 }, { 9, 0, 839 }, { 11, 0, 912 }, - { 13, 0, 427 }, { 7, 10, 1306 }, { 8, 10, 505 }, { 9, 10, 482 }, - { 10, 10, 126 }, { 11, 10, 225 }, { 12, 10, 347 }, { 12, 10, 449 }, - { 13, 10, 19 }, { 14, 10, 218 }, { 14, 10, 435 }, { 10, 10, 764 }, - { 12, 10, 120 }, { 13, 10, 39 }, { 17, 10, 127 }, { 4, 0, 597 }, - { 5, 10, 268 }, { 6, 0, 1094 }, { 4, 0, 1008 }, { 6, 0, 1973 }, - { 4, 0, 811 }, { 11, 0, 908 }, { 7, 0, 1471 }, { 5, 11, 326 }, - { 4, 10, 384 }, { 7, 10, 1022 }, { 7, 0, 1935 }, { 8, 0, 324 }, - { 12, 0, 42 }, { 4, 11, 691 }, { 7, 11, 1935 }, { 8, 11, 324 }, - { 9, 11, 35 }, { 10, 11, 680 }, { 11, 11, 364 }, { 12, 11, 42 }, - { 13, 11, 357 }, { 18, 11, 16 }, { 7, 0, 2014 }, { 7, 0, 2007 }, - { 9, 0, 101 }, { 9, 0, 450 }, { 10, 0, 66 }, { 10, 0, 842 }, - { 11, 0, 536 }, { 12, 0, 587 }, { 6, 11, 32 }, { 7, 11, 385 }, - { 7, 11, 757 }, { 7, 11, 1916 }, { 8, 11, 37 }, { 8, 11, 94 }, - { 8, 11, 711 }, { 9, 11, 541 }, { 10, 11, 162 }, { 10, 11, 795 }, - { 11, 11, 989 }, { 11, 11, 1010 }, { 12, 11, 14 }, { 14, 11, 308 }, - { 11, 0, 586 }, { 7, 10, 1703 }, { 7, 0, 1077 }, { 11, 0, 28 }, - { 9, 10, 159 }, { 12, 10, 603 }, { 6, 0, 1221 }, { 8, 10, 583 }, - { 6, 11, 152 }, { 6, 11, 349 }, { 6, 11, 1682 }, { 7, 11, 1252 }, - { 8, 11, 112 }, { 9, 11, 435 }, { 9, 11, 668 }, { 10, 11, 290 }, - { 10, 11, 319 }, { 10, 11, 815 }, { 11, 11, 180 }, { 11, 11, 837 }, - { 12, 11, 240 }, { 13, 11, 152 }, { 13, 11, 219 }, { 14, 11, 158 }, - { 11, 0, 62 }, { 4, 10, 515 }, { 8, 10, 632 }, { 8, 10, 697 }, - { 9, 10, 854 }, { 6, 0, 1766 }, { 4, 11, 581 }, { 6, 11, 126 }, - { 7, 11, 573 }, { 8, 11, 397 }, { 14, 11, 44 }, { 22, 0, 28 }, - { 11, 0, 670 }, { 22, 0, 25 }, { 4, 10, 136 }, { 5, 10, 551 }, - { 6, 0, 1665 }, { 7, 0, 256 }, { 7, 0, 1388 }, { 10, 0, 499 }, - { 4, 0, 22 }, { 5, 0, 10 }, { 7, 0, 1576 }, { 8, 0, 97 }, - { 6, 10, 1782 }, { 5, 0, 481 }, { 7, 10, 1287 }, { 9, 10, 44 }, - { 10, 10, 552 }, { 10, 10, 642 }, { 11, 10, 839 }, { 12, 10, 274 }, - { 12, 10, 275 }, { 12, 10, 372 }, { 13, 10, 91 }, { 14, 10, 125 }, - { 5, 11, 926 }, { 7, 11, 1232 }, { 9, 11, 531 }, { 6, 0, 134 }, - { 7, 0, 437 }, { 7, 0, 1824 }, { 9, 0, 37 }, { 14, 0, 285 }, - { 14, 0, 371 }, { 7, 0, 486 }, { 8, 0, 155 }, { 11, 0, 93 }, - { 12, 0, 164 }, { 6, 0, 1391 }, { 6, 0, 1442 }, { 5, 11, 670 }, - { 5, 0, 591 }, { 6, 10, 147 }, { 7, 10, 886 }, { 7, 11, 1957 }, - { 9, 10, 753 }, { 10, 10, 268 }, { 5, 0, 380 }, { 5, 0, 650 }, - { 7, 0, 1173 }, { 8, 0, 310 }, { 4, 0, 364 }, { 7, 0, 1156 }, - { 7, 0, 1187 }, { 9, 0, 409 }, { 7, 11, 1621 }, { 6, 0, 482 }, - { 5, 11, 506 }, { 4, 0, 781 }, { 6, 0, 487 }, { 7, 0, 926 }, - { 8, 0, 263 }, { 11, 0, 500 }, { 10, 10, 137 }, { 7, 11, 242 }, - { 11, 11, 96 }, { 5, 10, 414 }, { 7, 10, 1762 }, { 6, 0, 804 }, - { 5, 11, 834 }, { 7, 11, 1202 }, { 8, 11, 14 }, { 9, 11, 481 }, - { 9, 11, 880 }, { 6, 10, 599 }, { 4, 0, 94 }, { 7, 0, 1265 }, - { 4, 0, 415 }, { 4, 0, 417 }, { 5, 0, 348 }, { 6, 0, 522 }, - { 6, 10, 1749 }, { 7, 11, 1526 }, { 10, 11, 465 }, { 6, 10, 1627 }, - { 4, 0, 1012 }, { 4, 10, 488 }, { 4, 11, 357 }, { 6, 11, 172 }, - { 7, 11, 143 }, { 9, 11, 413 }, { 4, 10, 83 }, { 4, 11, 590 }, - { 18, 11, 76 }, { 12, 10, 676 }, { 7, 11, 287 }, { 8, 11, 355 }, - { 9, 11, 293 }, { 9, 11, 743 }, { 6, 10, 278 }, { 6, 0, 1803 }, - { 18, 0, 165 }, { 24, 0, 21 }, { 5, 11, 169 }, { 7, 11, 333 }, - { 8, 11, 45 }, { 12, 10, 97 }, { 12, 11, 97 }, { 4, 0, 408 }, - { 4, 0, 741 }, { 7, 0, 500 }, { 4, 11, 198 }, { 7, 10, 388 }, - { 7, 10, 644 }, { 11, 10, 781 }, { 4, 11, 24 }, { 5, 11, 140 }, - { 5, 11, 185 }, { 7, 11, 1500 }, { 11, 11, 565 }, { 11, 11, 838 }, - { 6, 0, 1321 }, { 9, 0, 257 }, { 7, 10, 229 }, { 8, 10, 59 }, - { 9, 10, 190 }, { 10, 10, 378 }, { 12, 10, 191 }, { 4, 11, 334 }, - { 5, 11, 593 }, { 7, 11, 1885 }, { 6, 0, 1138 }, { 4, 0, 249 }, - { 6, 0, 73 }, { 7, 0, 177 }, { 5, 0, 576 }, { 14, 0, 231 }, - { 9, 0, 288 }, { 4, 10, 660 }, { 7, 10, 1035 }, { 10, 10, 737 }, - { 7, 0, 1487 }, { 6, 0, 989 }, { 9, 0, 433 }, { 7, 10, 690 }, - { 9, 10, 587 }, { 12, 10, 521 }, { 7, 0, 1264 }, { 7, 0, 1678 }, - { 11, 0, 945 }, { 12, 0, 341 }, { 12, 0, 471 }, { 12, 0, 569 }, - { 4, 11, 709 }, { 5, 11, 897 }, { 5, 11, 224 }, { 13, 11, 174 }, - { 18, 11, 52 }, { 7, 11, 1840 }, { 6, 10, 1744 }, { 12, 0, 87 }, - { 16, 0, 74 }, { 4, 10, 733 }, { 9, 10, 194 }, { 10, 10, 92 }, - { 11, 10, 198 }, { 12, 10, 84 }, { 13, 10, 128 }, { 12, 0, 779 }, - { 7, 0, 538 }, { 4, 11, 608 }, { 5, 11, 497 }, { 5, 0, 413 }, - { 7, 11, 1375 }, { 7, 11, 1466 }, { 10, 11, 331 }, { 8, 0, 495 }, - { 6, 11, 540 }, { 8, 11, 136 }, { 7, 0, 54 }, { 8, 0, 312 }, - { 10, 0, 191 }, { 10, 0, 614 }, { 12, 0, 567 }, { 6, 0, 468 }, - { 7, 0, 567 }, { 7, 0, 1478 }, { 8, 0, 530 }, { 14, 0, 290 }, - { 5, 11, 999 }, { 4, 11, 299 }, { 7, 10, 306 }, { 7, 11, 1004 }, - { 14, 11, 296 }, { 6, 0, 1484 }, { 5, 10, 979 }, { 6, 0, 609 }, - { 9, 0, 815 }, { 12, 11, 137 }, { 14, 11, 9 }, { 14, 11, 24 }, - { 14, 11, 64 }, { 5, 11, 456 }, { 6, 0, 484 }, { 7, 0, 822 }, - { 5, 10, 178 }, { 8, 11, 180 }, { 4, 11, 755 }, { 9, 0, 900 }, - { 7, 0, 1335 }, { 6, 0, 1724 }, { 7, 0, 2022 }, { 7, 11, 1139 }, - { 5, 0, 640 }, { 4, 10, 390 }, { 6, 0, 1831 }, { 10, 11, 633 }, - { 7, 11, 566 }, { 4, 11, 890 }, { 5, 11, 805 }, { 5, 11, 819 }, - { 5, 11, 961 }, { 6, 11, 396 }, { 6, 11, 1631 }, { 6, 11, 1678 }, - { 7, 11, 1967 }, { 7, 11, 2041 }, { 9, 11, 630 }, { 11, 11, 8 }, - { 11, 11, 1019 }, { 12, 11, 176 }, { 13, 11, 225 }, { 14, 11, 292 }, - { 21, 11, 24 }, { 4, 0, 474 }, { 6, 0, 1103 }, { 7, 0, 1504 }, - { 6, 0, 1576 }, { 6, 0, 961 }, { 6, 0, 1034 }, { 12, 0, 655 }, - { 11, 11, 514 }, { 21, 11, 20 }, { 5, 0, 305 }, { 7, 11, 1815 }, - { 7, 11, 1505 }, { 10, 11, 190 }, { 10, 11, 634 }, { 11, 11, 792 }, - { 12, 11, 358 }, { 12, 11, 447 }, { 5, 11, 0 }, { 6, 11, 536 }, - { 7, 11, 604 }, { 13, 11, 445 }, { 17, 11, 126 }, { 7, 0, 1236 }, - { 5, 10, 105 }, { 4, 0, 480 }, { 6, 0, 217 }, { 6, 0, 302 }, - { 6, 0, 1642 }, { 7, 0, 130 }, { 7, 0, 837 }, { 7, 0, 1321 }, - { 7, 0, 1547 }, { 7, 0, 1657 }, { 8, 0, 429 }, { 9, 0, 228 }, - { 13, 0, 289 }, { 13, 0, 343 }, { 19, 0, 101 }, { 6, 11, 232 }, - { 6, 11, 412 }, { 7, 11, 1074 }, { 8, 11, 9 }, { 8, 11, 157 }, - { 8, 11, 786 }, { 9, 11, 196 }, { 9, 11, 352 }, { 9, 11, 457 }, - { 10, 11, 337 }, { 11, 11, 232 }, { 11, 11, 877 }, { 12, 11, 480 }, - { 12, 11, 546 }, { 5, 10, 438 }, { 7, 11, 958 }, { 9, 10, 694 }, - { 12, 10, 627 }, { 13, 11, 38 }, { 13, 10, 210 }, { 4, 11, 382 }, - { 8, 11, 579 }, { 7, 0, 278 }, { 10, 0, 739 }, { 11, 0, 708 }, - { 13, 0, 348 }, { 4, 11, 212 }, { 7, 11, 1206 }, { 7, 11, 1898 }, - { 6, 0, 708 }, { 6, 0, 1344 }, { 24, 10, 11 }, { 9, 11, 768 }, - { 6, 0, 1840 }, { 12, 0, 233 }, { 8, 10, 25 }, { 10, 10, 826 }, - { 6, 0, 2017 }, { 5, 11, 655 }, { 6, 0, 1488 }, { 11, 11, 290 }, - { 4, 10, 308 }, { 6, 0, 1590 }, { 6, 0, 1800 }, { 6, 0, 1259 }, - { 16, 0, 28 }, { 6, 11, 231 }, { 7, 11, 95 }, { 8, 11, 423 }, - { 5, 11, 300 }, { 7, 10, 150 }, { 8, 10, 649 }, { 7, 11, 1874 }, - { 9, 11, 641 }, { 6, 11, 237 }, { 7, 11, 611 }, { 8, 11, 100 }, - { 9, 11, 416 }, { 11, 11, 335 }, { 12, 11, 173 }, { 18, 11, 101 }, - { 9, 0, 45 }, { 6, 10, 521 }, { 17, 0, 36 }, { 14, 11, 26 }, - { 18, 11, 150 }, { 7, 0, 1442 }, { 14, 0, 22 }, { 5, 10, 339 }, - { 15, 10, 41 }, { 15, 10, 166 }, { 19, 10, 66 }, { 8, 0, 378 }, - { 6, 11, 581 }, { 7, 11, 1119 }, { 6, 0, 1507 }, { 19, 11, 117 }, - { 11, 0, 39 }, { 6, 0, 1054 }, { 6, 0, 363 }, { 7, 0, 1955 }, - { 8, 0, 725 }, { 6, 0, 2036 }, { 5, 11, 199 }, { 6, 0, 1871 }, - { 9, 0, 935 }, { 9, 0, 961 }, { 9, 0, 1004 }, { 9, 0, 1016 }, - { 12, 0, 805 }, { 12, 0, 852 }, { 12, 0, 853 }, { 12, 0, 869 }, - { 12, 0, 882 }, { 12, 0, 896 }, { 12, 0, 906 }, { 12, 0, 917 }, - { 12, 0, 940 }, { 15, 0, 170 }, { 15, 0, 176 }, { 15, 0, 188 }, - { 15, 0, 201 }, { 15, 0, 205 }, { 15, 0, 212 }, { 15, 0, 234 }, - { 15, 0, 244 }, { 18, 0, 181 }, { 18, 0, 193 }, { 18, 0, 196 }, - { 18, 0, 201 }, { 18, 0, 202 }, { 18, 0, 210 }, { 18, 0, 217 }, - { 18, 0, 235 }, { 18, 0, 236 }, { 18, 0, 237 }, { 21, 0, 54 }, - { 21, 0, 55 }, { 21, 0, 58 }, { 21, 0, 59 }, { 24, 0, 22 }, - { 6, 10, 1628 }, { 9, 0, 805 }, { 5, 0, 813 }, { 7, 0, 2046 }, - { 14, 11, 42 }, { 5, 0, 712 }, { 6, 0, 1240 }, { 11, 0, 17 }, - { 13, 0, 321 }, { 16, 0, 67 }, { 4, 0, 617 }, { 7, 10, 829 }, - { 6, 0, 320 }, { 7, 0, 781 }, { 7, 0, 1921 }, { 9, 0, 55 }, - { 10, 0, 186 }, { 10, 0, 273 }, { 10, 0, 664 }, { 10, 0, 801 }, - { 11, 0, 996 }, { 11, 0, 997 }, { 13, 0, 157 }, { 14, 0, 170 }, - { 8, 0, 271 }, { 5, 10, 486 }, { 7, 10, 1349 }, { 18, 11, 91 }, - { 19, 11, 70 }, { 10, 0, 445 }, { 7, 10, 1635 }, { 8, 10, 17 }, - { 10, 10, 295 }, { 8, 11, 404 }, { 7, 0, 103 }, { 7, 0, 863 }, - { 11, 0, 184 }, { 17, 0, 62 }, { 10, 10, 558 }, { 9, 0, 659 }, - { 6, 11, 312 }, { 6, 11, 1715 }, { 10, 11, 584 }, { 11, 11, 546 }, - { 11, 11, 692 }, { 12, 11, 259 }, { 12, 11, 295 }, { 13, 11, 46 }, - { 13, 11, 154 }, { 6, 0, 676 }, { 4, 11, 588 }, { 4, 11, 231 }, - { 5, 11, 61 }, { 6, 11, 104 }, { 7, 11, 729 }, { 7, 11, 964 }, - { 7, 11, 1658 }, { 12, 11, 414 }, { 6, 11, 263 }, { 10, 11, 757 }, - { 11, 0, 337 }, { 14, 0, 303 }, { 7, 11, 1363 }, { 4, 11, 320 }, - { 12, 0, 506 }, { 6, 10, 447 }, { 5, 0, 77 }, { 7, 0, 1455 }, - { 10, 0, 843 }, { 19, 0, 73 }, { 7, 10, 577 }, { 7, 10, 1432 }, - { 9, 10, 475 }, { 9, 10, 505 }, { 9, 10, 526 }, { 9, 10, 609 }, - { 9, 10, 689 }, { 9, 10, 726 }, { 9, 10, 735 }, { 9, 10, 738 }, - { 10, 10, 556 }, { 10, 10, 674 }, { 10, 10, 684 }, { 11, 10, 89 }, - { 11, 10, 202 }, { 11, 10, 272 }, { 11, 10, 380 }, { 11, 10, 415 }, - { 11, 10, 505 }, { 11, 10, 537 }, { 11, 10, 550 }, { 11, 10, 562 }, - { 11, 10, 640 }, { 11, 10, 667 }, { 11, 10, 688 }, { 11, 10, 847 }, - { 11, 10, 927 }, { 11, 10, 930 }, { 11, 10, 940 }, { 12, 10, 144 }, - { 12, 10, 325 }, { 12, 10, 329 }, { 12, 10, 389 }, { 12, 10, 403 }, - { 12, 10, 451 }, { 12, 10, 515 }, { 12, 10, 604 }, { 12, 10, 616 }, - { 12, 10, 626 }, { 13, 10, 66 }, { 13, 10, 131 }, { 13, 10, 167 }, - { 13, 10, 236 }, { 13, 10, 368 }, { 13, 10, 411 }, { 13, 10, 434 }, - { 13, 10, 453 }, { 13, 10, 461 }, { 13, 10, 474 }, { 14, 10, 59 }, - { 14, 10, 60 }, { 14, 10, 139 }, { 14, 10, 152 }, { 14, 10, 276 }, - { 14, 10, 353 }, { 14, 10, 402 }, { 15, 10, 28 }, { 15, 10, 81 }, - { 15, 10, 123 }, { 15, 10, 152 }, { 18, 10, 136 }, { 20, 10, 88 }, - { 4, 0, 458 }, { 7, 0, 1420 }, { 6, 0, 109 }, { 10, 0, 382 }, - { 4, 11, 405 }, { 4, 10, 609 }, { 7, 10, 756 }, { 7, 11, 817 }, - { 9, 10, 544 }, { 11, 10, 413 }, { 14, 11, 58 }, { 14, 10, 307 }, - { 16, 10, 25 }, { 17, 11, 37 }, { 18, 11, 124 }, { 6, 0, 330 }, - { 7, 0, 1084 }, { 11, 0, 142 }, { 5, 11, 974 }, { 4, 10, 930 }, - { 5, 10, 947 }, { 5, 10, 939 }, { 14, 11, 394 }, { 16, 0, 91 }, - { 17, 0, 87 }, { 5, 11, 235 }, { 5, 10, 962 }, { 7, 11, 1239 }, - { 11, 11, 131 }, { 12, 11, 370 }, { 11, 0, 492 }, { 5, 10, 651 }, - { 8, 10, 170 }, { 9, 10, 61 }, { 9, 10, 63 }, { 10, 10, 23 }, - { 10, 10, 37 }, { 10, 10, 834 }, { 11, 10, 4 }, { 11, 10, 281 }, - { 11, 10, 503 }, { 11, 10, 677 }, { 12, 10, 96 }, { 12, 10, 130 }, - { 12, 10, 244 }, { 14, 10, 5 }, { 14, 10, 40 }, { 14, 10, 162 }, - { 14, 10, 202 }, { 18, 10, 133 }, { 4, 10, 406 }, { 5, 10, 579 }, - { 12, 10, 492 }, { 22, 10, 15 }, { 9, 11, 137 }, { 10, 11, 221 }, - { 6, 0, 1239 }, { 11, 0, 211 }, { 12, 0, 145 }, { 7, 11, 390 }, - { 10, 11, 140 }, { 7, 11, 1418 }, { 7, 11, 1144 }, { 6, 0, 1049 }, - { 7, 0, 321 }, { 6, 10, 17 }, { 7, 10, 1001 }, { 7, 10, 1982 }, - { 9, 10, 886 }, { 10, 10, 489 }, { 10, 10, 800 }, { 11, 10, 782 }, - { 12, 10, 320 }, { 13, 10, 467 }, { 14, 10, 145 }, { 14, 10, 387 }, - { 15, 10, 119 }, { 17, 10, 17 }, { 5, 11, 407 }, { 11, 11, 489 }, - { 19, 11, 37 }, { 20, 11, 73 }, { 22, 11, 38 }, { 5, 10, 458 }, - { 7, 0, 1985 }, { 7, 10, 1983 }, { 8, 10, 0 }, { 8, 10, 171 }, - { 9, 10, 120 }, { 9, 10, 732 }, { 10, 10, 473 }, { 11, 10, 656 }, - { 11, 10, 998 }, { 18, 10, 0 }, { 18, 10, 2 }, { 19, 10, 21 }, - { 5, 11, 325 }, { 7, 11, 1483 }, { 8, 11, 5 }, { 8, 11, 227 }, - { 9, 11, 105 }, { 10, 11, 585 }, { 12, 11, 614 }, { 8, 0, 122 }, - { 4, 0, 234 }, { 7, 11, 1196 }, { 6, 0, 976 }, { 6, 0, 1098 }, - { 6, 0, 1441 }, { 7, 0, 253 }, { 8, 0, 549 }, { 6, 11, 621 }, - { 13, 11, 504 }, { 16, 11, 19 }, { 4, 10, 519 }, { 5, 0, 430 }, - { 5, 0, 932 }, { 6, 0, 131 }, { 7, 0, 417 }, { 9, 0, 522 }, - { 11, 0, 314 }, { 13, 0, 390 }, { 14, 0, 149 }, { 14, 0, 399 }, - { 15, 0, 57 }, { 5, 10, 907 }, { 6, 10, 31 }, { 6, 11, 218 }, - { 7, 10, 491 }, { 7, 10, 530 }, { 8, 10, 592 }, { 11, 10, 53 }, - { 11, 10, 779 }, { 12, 10, 167 }, { 12, 10, 411 }, { 14, 10, 14 }, - { 14, 10, 136 }, { 15, 10, 72 }, { 16, 10, 17 }, { 16, 10, 72 }, - { 12, 11, 330 }, { 7, 11, 454 }, { 7, 11, 782 }, { 8, 11, 768 }, - { 4, 0, 507 }, { 10, 11, 676 }, { 12, 11, 462 }, { 6, 0, 630 }, - { 9, 0, 811 }, { 4, 10, 208 }, { 5, 10, 106 }, { 6, 10, 531 }, - { 8, 10, 408 }, { 9, 10, 188 }, { 10, 10, 572 }, { 4, 0, 343 }, - { 5, 0, 511 }, { 6, 10, 1693 }, { 6, 11, 164 }, { 4, 0, 448 }, - { 7, 0, 455 }, { 10, 0, 591 }, { 7, 0, 1381 }, { 12, 10, 441 }, - { 22, 11, 50 }, { 9, 10, 449 }, { 10, 10, 192 }, { 10, 10, 740 }, - { 6, 0, 575 }, { 4, 10, 241 }, { 6, 0, 1175 }, { 6, 0, 653 }, - { 6, 0, 1761 }, { 6, 0, 1198 }, { 4, 10, 259 }, { 6, 11, 343 }, - { 7, 11, 195 }, { 9, 11, 226 }, { 10, 11, 197 }, { 10, 11, 575 }, - { 11, 11, 502 }, { 11, 11, 899 }, { 7, 0, 1127 }, { 7, 0, 1572 }, - { 10, 0, 297 }, { 10, 0, 422 }, { 11, 0, 764 }, { 11, 0, 810 }, - { 12, 0, 264 }, { 13, 0, 102 }, { 13, 0, 300 }, { 13, 0, 484 }, - { 14, 0, 147 }, { 14, 0, 229 }, { 17, 0, 71 }, { 18, 0, 118 }, - { 19, 0, 120 }, { 7, 11, 666 }, { 4, 0, 678 }, { 4, 10, 173 }, - { 5, 10, 312 }, { 5, 10, 512 }, { 7, 10, 1285 }, { 7, 10, 1603 }, - { 7, 10, 1691 }, { 9, 10, 464 }, { 11, 10, 195 }, { 12, 10, 279 }, - { 12, 10, 448 }, { 14, 10, 11 }, { 19, 10, 102 }, { 16, 0, 99 }, - { 18, 0, 164 }, { 7, 11, 1125 }, { 9, 11, 143 }, { 11, 11, 61 }, - { 14, 11, 405 }, { 22, 11, 21 }, { 9, 11, 260 }, { 4, 10, 452 }, - { 5, 10, 583 }, { 5, 10, 817 }, { 6, 10, 433 }, { 7, 10, 593 }, - { 7, 10, 720 }, { 7, 10, 1378 }, { 8, 10, 161 }, { 9, 10, 284 }, - { 10, 10, 313 }, { 11, 10, 886 }, { 4, 10, 547 }, { 8, 10, 722 }, - { 14, 0, 35 }, { 14, 0, 191 }, { 13, 0, 45 }, { 10, 0, 121 }, - { 4, 0, 125 }, { 6, 0, 1622 }, { 5, 11, 959 }, { 8, 10, 420 }, - { 11, 10, 193 }, { 4, 0, 721 }, { 7, 10, 409 }, { 8, 0, 145 }, - { 7, 0, 792 }, { 8, 0, 147 }, { 10, 0, 821 }, { 11, 0, 970 }, - { 11, 0, 1021 }, { 8, 11, 173 }, { 6, 11, 266 }, { 4, 0, 715 }, - { 7, 0, 1999 }, { 10, 10, 308 }, { 5, 0, 531 }, { 5, 0, 168 }, - { 5, 0, 930 }, { 8, 0, 74 }, { 9, 0, 623 }, { 12, 0, 500 }, - { 12, 0, 579 }, { 16, 0, 65 }, { 10, 11, 246 }, { 6, 0, 220 }, - { 7, 0, 1101 }, { 13, 0, 105 }, { 14, 11, 314 }, { 5, 10, 1002 }, - { 8, 10, 745 }, { 6, 0, 960 }, { 20, 0, 0 }, { 20, 11, 0 }, - { 4, 0, 1005 }, { 4, 10, 239 }, { 6, 10, 477 }, { 7, 10, 1607 }, - { 11, 10, 68 }, { 11, 10, 617 }, { 6, 0, 19 }, { 7, 0, 1413 }, - { 11, 0, 428 }, { 21, 10, 13 }, { 7, 0, 96 }, { 8, 0, 401 }, - { 8, 0, 703 }, { 9, 0, 896 }, { 8, 11, 300 }, { 6, 0, 1595 }, - { 17, 0, 116 }, { 8, 0, 1021 }, { 7, 0, 1961 }, { 7, 0, 1965 }, - { 7, 0, 2030 }, { 8, 0, 150 }, { 8, 0, 702 }, { 8, 0, 737 }, - { 8, 0, 750 }, { 12, 0, 366 }, { 11, 11, 75 }, { 14, 11, 267 }, - { 4, 10, 367 }, { 8, 0, 800 }, { 9, 0, 148 }, { 9, 0, 872 }, - { 9, 0, 890 }, { 11, 0, 309 }, { 11, 0, 1001 }, { 13, 0, 267 }, - { 13, 0, 323 }, { 5, 11, 427 }, { 5, 11, 734 }, { 7, 11, 478 }, - { 8, 11, 52 }, { 7, 11, 239 }, { 11, 11, 217 }, { 14, 11, 165 }, - { 4, 11, 323 }, { 12, 11, 419 }, { 13, 0, 299 }, { 14, 0, 75 }, - { 6, 11, 87 }, { 6, 11, 1734 }, { 7, 11, 20 }, { 7, 11, 1056 }, - { 8, 11, 732 }, { 9, 11, 406 }, { 9, 11, 911 }, { 10, 11, 694 }, - { 6, 0, 1383 }, { 4, 10, 694 }, { 5, 11, 613 }, { 9, 0, 779 }, - { 4, 0, 598 }, { 12, 10, 687 }, { 6, 0, 970 }, { 7, 0, 424 }, - { 5, 0, 547 }, { 7, 11, 32 }, { 7, 11, 984 }, { 8, 11, 85 }, - { 8, 11, 709 }, { 9, 11, 579 }, { 9, 11, 847 }, { 9, 11, 856 }, - { 10, 11, 799 }, { 11, 11, 258 }, { 11, 11, 1007 }, { 12, 11, 331 }, - { 12, 11, 615 }, { 13, 11, 188 }, { 13, 11, 435 }, { 14, 11, 8 }, - { 15, 11, 165 }, { 16, 11, 27 }, { 20, 11, 40 }, { 6, 0, 1222 }, - { 6, 0, 1385 }, { 4, 0, 876 }, { 10, 11, 151 }, { 7, 10, 213 }, - { 4, 11, 167 }, { 7, 11, 82 }, { 5, 0, 133 }, { 6, 11, 24 }, - { 7, 11, 74 }, { 7, 11, 678 }, { 9, 11, 258 }, { 5, 11, 62 }, - { 6, 11, 534 }, { 7, 11, 684 }, { 7, 11, 1043 }, { 7, 11, 1072 }, - { 8, 11, 280 }, { 8, 11, 541 }, { 8, 11, 686 }, { 10, 11, 519 }, - { 11, 11, 252 }, { 12, 11, 282 }, { 8, 0, 187 }, { 8, 0, 8 }, - { 10, 0, 0 }, { 10, 0, 818 }, { 11, 0, 988 }, { 4, 11, 359 }, - { 11, 0, 429 }, { 15, 0, 51 }, { 7, 10, 1672 }, { 8, 0, 685 }, - { 5, 11, 211 }, { 7, 11, 88 }, { 8, 11, 627 }, { 6, 0, 472 }, - { 8, 0, 132 }, { 6, 11, 145 }, { 13, 11, 336 }, { 4, 10, 751 }, - { 11, 10, 390 }, { 12, 10, 32 }, { 6, 0, 938 }, { 6, 0, 1060 }, - { 4, 11, 263 }, { 4, 10, 409 }, { 5, 10, 78 }, { 9, 0, 874 }, - { 8, 0, 774 }, { 10, 0, 670 }, { 12, 0, 51 }, { 4, 11, 916 }, - { 6, 10, 473 }, { 7, 10, 1602 }, { 10, 10, 698 }, { 12, 10, 212 }, - { 13, 10, 307 }, { 17, 10, 105 }, { 18, 0, 92 }, { 15, 10, 156 }, - { 4, 0, 830 }, { 9, 0, 701 }, { 4, 11, 599 }, { 6, 11, 1634 }, - { 7, 11, 5 }, { 7, 11, 55 }, { 7, 11, 67 }, { 7, 11, 97 }, - { 7, 11, 691 }, { 7, 11, 979 }, { 7, 11, 1697 }, { 8, 11, 207 }, - { 8, 11, 214 }, { 8, 11, 231 }, { 8, 11, 294 }, { 8, 11, 336 }, - { 8, 11, 428 }, { 8, 11, 451 }, { 8, 11, 460 }, { 8, 11, 471 }, - { 8, 11, 622 }, { 8, 11, 626 }, { 8, 11, 679 }, { 8, 11, 759 }, - { 8, 11, 829 }, { 9, 11, 11 }, { 9, 11, 246 }, { 9, 11, 484 }, - { 9, 11, 573 }, { 9, 11, 706 }, { 9, 11, 762 }, { 9, 11, 798 }, - { 9, 11, 855 }, { 9, 11, 870 }, { 9, 11, 912 }, { 10, 11, 303 }, - { 10, 11, 335 }, { 10, 11, 424 }, { 10, 11, 461 }, { 10, 11, 543 }, - { 10, 11, 759 }, { 10, 11, 814 }, { 11, 11, 59 }, { 11, 11, 199 }, - { 11, 11, 235 }, { 11, 11, 475 }, { 11, 11, 590 }, { 11, 11, 929 }, - { 11, 11, 963 }, { 12, 11, 114 }, { 12, 11, 182 }, { 12, 11, 226 }, - { 12, 11, 332 }, { 12, 11, 439 }, { 12, 11, 575 }, { 12, 11, 598 }, - { 13, 11, 8 }, { 13, 11, 125 }, { 13, 11, 194 }, { 13, 11, 287 }, - { 14, 11, 197 }, { 14, 11, 383 }, { 15, 11, 53 }, { 17, 11, 63 }, - { 19, 11, 46 }, { 19, 11, 98 }, { 19, 11, 106 }, { 20, 11, 85 }, - { 4, 0, 127 }, { 5, 0, 350 }, { 6, 0, 356 }, { 8, 0, 426 }, - { 9, 0, 572 }, { 10, 0, 247 }, { 11, 0, 312 }, { 6, 0, 1215 }, - { 6, 0, 59 }, { 9, 0, 603 }, { 13, 0, 397 }, { 7, 11, 1853 }, - { 10, 11, 437 }, { 6, 0, 1762 }, { 19, 11, 126 }, { 7, 10, 883 }, - { 13, 0, 293 }, { 14, 0, 56 }, { 5, 10, 617 }, { 11, 10, 50 }, - { 5, 11, 187 }, { 7, 10, 1518 }, { 11, 10, 694 }, { 7, 0, 441 }, - { 6, 0, 111 }, { 7, 0, 4 }, { 8, 0, 163 }, { 8, 0, 776 }, - { 10, 0, 566 }, { 4, 0, 806 }, { 4, 11, 215 }, { 9, 11, 38 }, - { 10, 11, 3 }, { 11, 11, 23 }, { 11, 11, 127 }, { 11, 11, 796 }, - { 14, 0, 233 }, { 4, 10, 546 }, { 7, 10, 2042 }, { 7, 0, 1994 }, - { 6, 0, 1739 }, { 7, 11, 1530 }, { 8, 0, 393 }, { 5, 0, 297 }, - { 7, 0, 1038 }, { 14, 0, 359 }, { 19, 0, 52 }, { 20, 0, 47 }, - { 7, 0, 309 }, { 4, 10, 313 }, { 5, 10, 577 }, { 8, 10, 184 }, - { 13, 10, 433 }, { 7, 10, 935 }, { 12, 10, 186 }, { 12, 10, 292 }, - { 14, 10, 100 }, { 18, 10, 70 }, { 8, 0, 363 }, { 14, 0, 175 }, - { 11, 10, 402 }, { 12, 10, 109 }, { 12, 10, 431 }, { 13, 10, 179 }, - { 13, 10, 206 }, { 14, 10, 217 }, { 16, 10, 3 }, { 20, 10, 53 }, - { 5, 10, 886 }, { 6, 10, 46 }, { 6, 10, 1790 }, { 7, 10, 14 }, - { 7, 10, 732 }, { 7, 10, 1654 }, { 8, 10, 95 }, { 8, 10, 327 }, - { 8, 10, 616 }, { 9, 10, 892 }, { 10, 10, 598 }, { 10, 10, 769 }, - { 11, 10, 134 }, { 11, 10, 747 }, { 12, 10, 378 }, { 14, 10, 97 }, - { 8, 0, 666 }, { 7, 0, 1675 }, { 6, 0, 655 }, { 6, 0, 1600 }, - { 7, 0, 808 }, { 5, 10, 1021 }, { 4, 11, 28 }, { 5, 11, 440 }, - { 7, 11, 248 }, { 11, 11, 833 }, { 12, 11, 344 }, { 6, 11, 1654 }, - { 4, 0, 280 }, { 12, 0, 54 }, { 4, 0, 421 }, { 5, 0, 548 }, - { 4, 10, 153 }, { 6, 11, 339 }, { 7, 11, 923 }, { 5, 11, 853 }, - { 5, 10, 798 }, { 4, 10, 587 }, { 6, 11, 249 }, { 7, 11, 1234 }, - { 11, 11, 573 }, { 6, 10, 598 }, { 7, 10, 42 }, { 8, 10, 695 }, - { 10, 10, 212 }, { 11, 10, 158 }, { 14, 10, 196 }, { 17, 10, 85 }, - { 7, 0, 249 }, { 5, 10, 957 }, { 5, 10, 1008 }, { 4, 10, 129 }, - { 7, 10, 465 }, { 6, 0, 254 }, { 7, 0, 842 }, { 7, 0, 1659 }, - { 9, 0, 109 }, { 10, 0, 103 }, { 7, 10, 908 }, { 7, 10, 1201 }, - { 9, 10, 755 }, { 11, 10, 906 }, { 12, 10, 527 }, { 18, 10, 7 }, - { 5, 0, 262 }, { 8, 10, 450 }, { 16, 0, 1 }, { 10, 11, 201 }, - { 14, 11, 319 }, { 7, 11, 49 }, { 7, 11, 392 }, { 8, 11, 20 }, - { 8, 11, 172 }, { 8, 11, 690 }, { 9, 11, 383 }, { 9, 11, 845 }, - { 10, 11, 48 }, { 11, 11, 293 }, { 11, 11, 832 }, { 11, 11, 920 }, - { 13, 11, 221 }, { 5, 11, 858 }, { 5, 11, 992 }, { 6, 0, 805 }, - { 11, 10, 1003 }, { 6, 0, 1630 }, { 6, 11, 307 }, { 7, 11, 1512 }, - { 7, 11, 1794 }, { 6, 11, 268 }, { 9, 11, 62 }, { 7, 10, 1868 }, - { 5, 0, 671 }, { 4, 0, 989 }, { 8, 0, 972 }, { 8, 0, 998 }, - { 4, 11, 423 }, { 4, 0, 889 }, { 7, 0, 1382 }, { 7, 0, 1910 }, - { 7, 10, 965 }, { 7, 10, 1460 }, { 7, 10, 1604 }, { 4, 0, 627 }, - { 5, 0, 775 }, { 10, 11, 106 }, { 6, 11, 348 }, { 7, 0, 202 }, - { 11, 0, 362 }, { 11, 0, 948 }, { 12, 0, 388 }, { 10, 11, 771 }, - { 6, 11, 613 }, { 8, 11, 223 }, { 6, 0, 560 }, { 7, 0, 451 }, - { 8, 0, 389 }, { 12, 0, 490 }, { 13, 0, 16 }, { 13, 0, 215 }, - { 13, 0, 351 }, { 18, 0, 132 }, { 19, 0, 125 }, { 7, 0, 841 }, - { 8, 0, 566 }, { 8, 0, 938 }, { 4, 11, 670 }, { 5, 0, 912 }, - { 6, 0, 1695 }, { 12, 11, 55 }, { 9, 11, 40 }, { 11, 11, 136 }, - { 7, 0, 1361 }, { 7, 10, 982 }, { 10, 10, 32 }, { 15, 10, 56 }, - { 11, 11, 259 }, { 12, 11, 270 }, { 5, 0, 236 }, { 6, 0, 572 }, - { 8, 0, 492 }, { 11, 0, 618 }, { 16, 0, 56 }, { 8, 11, 572 }, - { 9, 11, 310 }, { 9, 11, 682 }, { 9, 11, 698 }, { 6, 0, 1854 }, - { 5, 0, 190 }, { 8, 0, 318 }, { 5, 10, 435 }, { 7, 0, 1376 }, - { 4, 11, 296 }, { 6, 11, 352 }, { 7, 11, 401 }, { 7, 11, 1410 }, - { 7, 11, 1594 }, { 7, 11, 1674 }, { 8, 11, 63 }, { 8, 11, 660 }, - { 9, 11, 74 }, { 7, 0, 349 }, { 5, 10, 85 }, { 6, 10, 419 }, - { 7, 10, 305 }, { 7, 10, 361 }, { 7, 10, 1337 }, { 8, 10, 71 }, - { 12, 10, 519 }, { 4, 11, 139 }, { 4, 11, 388 }, { 12, 11, 188 }, - { 6, 0, 1972 }, { 6, 0, 2013 }, { 8, 0, 951 }, { 10, 0, 947 }, - { 10, 0, 974 }, { 10, 0, 1018 }, { 14, 0, 476 }, { 12, 10, 688 }, - { 7, 10, 740 }, { 5, 10, 691 }, { 7, 10, 345 }, { 9, 10, 94 }, - { 12, 10, 169 }, { 9, 0, 344 }, { 5, 10, 183 }, { 6, 10, 582 }, - { 10, 10, 679 }, { 12, 10, 435 }, { 7, 10, 511 }, { 4, 0, 850 }, - { 8, 11, 441 }, { 10, 11, 314 }, { 15, 11, 3 }, { 7, 10, 1993 }, - { 8, 10, 684 }, { 4, 11, 747 }, { 6, 11, 290 }, { 6, 10, 583 }, - { 7, 11, 649 }, { 7, 11, 1479 }, { 7, 11, 1583 }, { 5, 11, 232 }, - { 5, 10, 704 }, { 6, 0, 910 }, { 4, 10, 179 }, { 5, 10, 198 }, - { 5, 10, 697 }, { 7, 10, 347 }, { 7, 10, 971 }, { 8, 10, 181 }, - { 10, 10, 711 }, { 8, 11, 525 }, { 14, 0, 19 }, { 14, 0, 28 }, - { 16, 0, 29 }, { 7, 0, 85 }, { 7, 0, 247 }, { 8, 0, 585 }, - { 10, 0, 163 }, { 4, 0, 487 }, { 7, 11, 472 }, { 7, 11, 1801 }, - { 10, 11, 748 }, { 13, 11, 458 }, { 4, 10, 243 }, { 5, 10, 203 }, - { 7, 10, 19 }, { 7, 10, 71 }, { 7, 10, 113 }, { 10, 10, 405 }, - { 11, 10, 357 }, { 14, 10, 240 }, { 7, 10, 1450 }, { 11, 10, 99 }, - { 4, 11, 425 }, { 10, 0, 145 }, { 19, 0, 83 }, { 6, 10, 492 }, - { 9, 11, 247 }, { 4, 0, 1013 }, { 6, 0, 2033 }, { 5, 10, 134 }, - { 6, 10, 408 }, { 6, 10, 495 }, { 7, 10, 1593 }, { 7, 0, 1922 }, - { 6, 11, 1768 }, { 4, 0, 124 }, { 10, 0, 457 }, { 11, 0, 121 }, - { 11, 0, 169 }, { 11, 0, 870 }, { 11, 0, 874 }, { 12, 0, 214 }, - { 14, 0, 187 }, { 15, 0, 77 }, { 5, 0, 557 }, { 7, 0, 1457 }, - { 11, 0, 66 }, { 5, 11, 943 }, { 6, 11, 1779 }, { 14, 10, 4 }, - { 4, 10, 248 }, { 4, 10, 665 }, { 7, 10, 137 }, { 9, 10, 349 }, - { 7, 0, 1193 }, { 5, 11, 245 }, { 6, 11, 576 }, { 7, 11, 582 }, - { 8, 11, 225 }, { 16, 0, 82 }, { 7, 10, 1270 }, { 11, 10, 612 }, - { 5, 0, 454 }, { 10, 0, 352 }, { 10, 11, 352 }, { 18, 0, 57 }, - { 5, 10, 371 }, { 7, 10, 563 }, { 7, 0, 1333 }, { 6, 0, 107 }, - { 7, 0, 638 }, { 7, 0, 1632 }, { 9, 0, 396 }, { 6, 11, 610 }, - { 5, 0, 370 }, { 6, 0, 1756 }, { 4, 10, 374 }, { 7, 10, 547 }, - { 7, 10, 1700 }, { 7, 10, 1833 }, { 11, 10, 858 }, { 5, 0, 204 }, - { 6, 0, 1305 }, { 9, 10, 311 }, { 13, 10, 42 }, { 5, 0, 970 }, - { 6, 0, 1706 }, { 6, 10, 1647 }, { 7, 10, 1552 }, { 7, 10, 2010 }, - { 9, 10, 494 }, { 9, 10, 509 }, { 13, 11, 455 }, { 15, 11, 99 }, - { 15, 11, 129 }, { 16, 11, 68 }, { 7, 0, 3 }, { 4, 0, 35 }, - { 5, 0, 121 }, { 5, 0, 483 }, { 5, 0, 685 }, { 6, 0, 489 }, - { 6, 0, 782 }, { 6, 0, 1032 }, { 7, 0, 1204 }, { 8, 0, 394 }, - { 4, 0, 921 }, { 5, 0, 1007 }, { 8, 11, 360 }, { 10, 11, 63 }, - { 7, 0, 1696 }, { 6, 0, 1519 }, { 4, 11, 443 }, { 7, 11, 944 }, - { 6, 10, 123 }, { 7, 10, 214 }, { 9, 10, 728 }, { 10, 10, 157 }, - { 11, 10, 346 }, { 11, 10, 662 }, { 15, 10, 106 }, { 9, 0, 981 }, - { 7, 10, 1435 }, { 6, 0, 1072 }, { 4, 0, 712 }, { 6, 0, 1629 }, - { 6, 0, 728 }, { 4, 11, 298 }, { 9, 11, 483 }, { 6, 0, 1177 }, - { 6, 0, 1271 }, { 5, 11, 164 }, { 7, 11, 121 }, { 14, 11, 189 }, - { 7, 0, 1608 }, { 4, 10, 707 }, { 5, 10, 588 }, { 6, 10, 393 }, - { 13, 10, 106 }, { 18, 10, 49 }, { 19, 10, 41 }, { 23, 0, 16 }, - { 23, 11, 16 }, { 6, 10, 211 }, { 7, 10, 1690 }, { 11, 10, 486 }, - { 12, 10, 369 }, { 5, 0, 485 }, { 19, 11, 15 }, { 21, 11, 27 }, - { 4, 11, 172 }, { 9, 11, 611 }, { 10, 11, 436 }, { 12, 11, 673 }, - { 13, 11, 255 }, { 5, 11, 844 }, { 10, 11, 484 }, { 11, 11, 754 }, - { 12, 11, 457 }, { 14, 11, 171 }, { 14, 11, 389 }, { 18, 11, 153 }, - { 4, 0, 285 }, { 5, 0, 27 }, { 5, 0, 317 }, { 6, 0, 301 }, - { 7, 0, 7 }, { 8, 0, 153 }, { 10, 0, 766 }, { 11, 0, 468 }, - { 12, 0, 467 }, { 13, 0, 143 }, { 6, 0, 1462 }, { 9, 11, 263 }, - { 10, 11, 147 }, { 10, 11, 492 }, { 5, 11, 537 }, { 6, 0, 1945 }, - { 6, 0, 1986 }, { 6, 0, 1991 }, { 6, 0, 2038 }, { 6, 10, 219 }, - { 9, 11, 842 }, { 14, 0, 52 }, { 17, 0, 50 }, { 5, 10, 582 }, - { 6, 10, 1646 }, { 7, 10, 99 }, { 7, 10, 1962 }, { 7, 10, 1986 }, - { 8, 10, 515 }, { 8, 10, 773 }, { 9, 10, 23 }, { 9, 10, 491 }, - { 12, 10, 620 }, { 14, 10, 93 }, { 10, 11, 97 }, { 20, 0, 21 }, - { 20, 0, 44 }, { 5, 10, 851 }, { 8, 0, 819 }, { 11, 0, 917 }, - { 5, 11, 230 }, { 5, 11, 392 }, { 6, 11, 420 }, { 8, 10, 762 }, - { 8, 10, 812 }, { 9, 11, 568 }, { 9, 10, 910 }, { 12, 11, 612 }, - { 7, 0, 784 }, { 15, 0, 135 }, { 15, 11, 135 }, { 10, 0, 454 }, - { 12, 0, 324 }, { 4, 11, 0 }, { 5, 11, 41 }, { 7, 11, 1459 }, - { 7, 11, 1469 }, { 7, 11, 1618 }, { 7, 11, 1859 }, { 9, 11, 549 }, - { 11, 11, 905 }, { 4, 10, 98 }, { 7, 10, 1365 }, { 9, 10, 422 }, - { 9, 10, 670 }, { 10, 10, 775 }, { 11, 10, 210 }, { 13, 10, 26 }, - { 13, 10, 457 }, { 13, 10, 476 }, { 6, 0, 1719 }, { 6, 0, 1735 }, - { 7, 0, 2016 }, { 7, 0, 2020 }, { 8, 0, 837 }, { 9, 0, 852 }, - { 5, 11, 696 }, { 7, 0, 852 }, { 4, 0, 952 }, { 6, 10, 1730 }, - { 4, 11, 771 }, { 10, 0, 568 }, { 9, 0, 448 }, { 11, 0, 146 }, - { 8, 0, 67 }, { 10, 0, 419 }, { 5, 11, 921 }, { 9, 10, 147 }, - { 6, 0, 1826 }, { 10, 0, 657 }, { 14, 0, 297 }, { 14, 0, 361 }, - { 6, 0, 666 }, { 6, 0, 767 }, { 6, 0, 1542 }, { 11, 0, 729 }, - { 6, 11, 180 }, { 7, 11, 1137 }, { 8, 11, 751 }, { 11, 11, 805 }, - { 4, 11, 183 }, { 7, 11, 271 }, { 11, 11, 824 }, { 11, 11, 952 }, - { 13, 11, 278 }, { 13, 11, 339 }, { 13, 11, 482 }, { 14, 11, 424 }, - { 20, 11, 99 }, { 4, 0, 669 }, { 5, 11, 477 }, { 5, 11, 596 }, - { 6, 11, 505 }, { 7, 11, 1221 }, { 11, 11, 907 }, { 12, 11, 209 }, - { 13, 11, 214 }, { 7, 11, 1215 }, { 5, 0, 402 }, { 6, 10, 30 }, - { 11, 10, 56 }, { 11, 10, 305 }, { 7, 11, 564 }, { 14, 11, 168 }, - { 11, 0, 152 }, { 7, 0, 912 }, { 7, 10, 1614 }, { 4, 10, 150 }, - { 5, 10, 303 }, { 6, 10, 327 }, { 7, 0, 320 }, { 8, 0, 51 }, - { 9, 0, 868 }, { 10, 0, 833 }, { 12, 0, 481 }, { 12, 0, 570 }, - { 20, 0, 106 }, { 4, 0, 445 }, { 7, 11, 274 }, { 11, 11, 263 }, - { 11, 11, 479 }, { 11, 11, 507 }, { 12, 11, 277 }, { 10, 0, 555 }, - { 11, 0, 308 }, { 19, 0, 95 }, { 6, 11, 1645 }, { 8, 10, 192 }, - { 10, 10, 78 }, { 13, 10, 359 }, { 7, 10, 786 }, { 6, 11, 92 }, - { 6, 11, 188 }, { 7, 11, 1269 }, { 7, 11, 1524 }, { 7, 11, 1876 }, - { 10, 11, 228 }, { 11, 11, 1020 }, { 4, 11, 459 }, { 5, 11, 966 }, - { 11, 0, 386 }, { 6, 10, 1638 }, { 7, 10, 79 }, { 7, 10, 496 }, - { 9, 10, 138 }, { 10, 10, 336 }, { 12, 10, 412 }, { 12, 10, 440 }, - { 14, 10, 305 }, { 5, 0, 239 }, { 7, 0, 83 }, { 7, 0, 1990 }, - { 8, 0, 130 }, { 11, 0, 720 }, { 10, 11, 709 }, { 4, 0, 143 }, - { 5, 0, 550 }, { 5, 0, 752 }, { 5, 0, 123 }, { 6, 0, 530 }, - { 7, 0, 348 }, { 7, 0, 1419 }, { 7, 0, 2024 }, { 6, 11, 18 }, - { 7, 11, 179 }, { 7, 11, 721 }, { 7, 11, 932 }, { 8, 11, 548 }, - { 8, 11, 757 }, { 9, 11, 54 }, { 9, 11, 65 }, { 9, 11, 532 }, - { 9, 11, 844 }, { 10, 11, 113 }, { 10, 11, 117 }, { 10, 11, 236 }, - { 10, 11, 315 }, { 10, 11, 430 }, { 10, 11, 798 }, { 11, 11, 153 }, - { 11, 11, 351 }, { 11, 11, 375 }, { 12, 11, 78 }, { 12, 11, 151 }, - { 12, 11, 392 }, { 14, 11, 248 }, { 15, 11, 23 }, { 7, 10, 204 }, - { 7, 10, 415 }, { 8, 10, 42 }, { 10, 10, 85 }, { 11, 10, 564 }, - { 6, 0, 958 }, { 5, 11, 965 }, { 4, 0, 210 }, { 7, 11, 1429 }, - { 10, 11, 480 }, { 6, 11, 182 }, { 11, 11, 345 }, { 10, 11, 65 }, - { 10, 11, 488 }, { 10, 11, 497 }, { 4, 10, 3 }, { 5, 10, 247 }, - { 5, 10, 644 }, { 7, 10, 744 }, { 7, 10, 1207 }, { 7, 10, 1225 }, - { 7, 10, 1909 }, { 18, 10, 147 }, { 4, 0, 430 }, { 5, 10, 285 }, - { 9, 10, 67 }, { 13, 10, 473 }, { 15, 10, 82 }, { 16, 11, 16 }, - { 7, 11, 1162 }, { 9, 11, 588 }, { 10, 11, 260 }, { 23, 10, 8 }, - { 5, 0, 213 }, { 10, 0, 7 }, { 7, 0, 801 }, { 6, 11, 1786 }, - { 7, 11, 308 }, { 6, 0, 936 }, { 6, 0, 1289 }, { 5, 0, 108 }, - { 4, 0, 885 }, { 5, 0, 219 }, { 11, 0, 587 }, { 4, 0, 193 }, - { 5, 0, 916 }, { 6, 0, 1041 }, { 7, 0, 364 }, { 10, 0, 398 }, - { 10, 0, 726 }, { 11, 0, 317 }, { 11, 0, 626 }, { 12, 0, 142 }, - { 12, 0, 288 }, { 12, 0, 678 }, { 13, 0, 313 }, { 15, 0, 113 }, - { 18, 0, 114 }, { 7, 0, 1165 }, { 6, 0, 241 }, { 9, 0, 342 }, - { 10, 0, 729 }, { 11, 0, 284 }, { 11, 0, 445 }, { 11, 0, 651 }, - { 11, 0, 863 }, { 13, 0, 398 }, { 18, 0, 99 }, { 7, 0, 907 }, - { 8, 0, 832 }, { 9, 0, 303 }, { 4, 10, 29 }, { 6, 10, 532 }, - { 7, 10, 1628 }, { 7, 10, 1648 }, { 9, 10, 350 }, { 10, 10, 433 }, - { 11, 10, 97 }, { 11, 10, 557 }, { 11, 10, 745 }, { 12, 10, 289 }, - { 12, 10, 335 }, { 12, 10, 348 }, { 12, 10, 606 }, { 13, 10, 116 }, - { 13, 10, 233 }, { 13, 10, 466 }, { 14, 10, 181 }, { 14, 10, 209 }, - { 14, 10, 232 }, { 14, 10, 236 }, { 14, 10, 300 }, { 16, 10, 41 }, - { 20, 10, 97 }, { 7, 11, 423 }, { 7, 10, 1692 }, { 8, 11, 588 }, - { 6, 0, 931 }, { 6, 0, 1454 }, { 5, 10, 501 }, { 7, 10, 1704 }, - { 9, 10, 553 }, { 11, 10, 520 }, { 12, 10, 557 }, { 13, 10, 249 }, - { 8, 11, 287 }, { 4, 0, 562 }, { 9, 0, 254 }, { 11, 0, 879 }, - { 4, 0, 786 }, { 14, 11, 32 }, { 18, 11, 85 }, { 20, 11, 2 }, - { 24, 11, 16 }, { 7, 0, 1294 }, { 7, 11, 723 }, { 7, 11, 1135 }, - { 6, 0, 216 }, { 7, 0, 901 }, { 7, 0, 1343 }, { 8, 0, 493 }, - { 6, 11, 403 }, { 7, 11, 719 }, { 8, 11, 809 }, { 8, 11, 834 }, - { 5, 11, 210 }, { 6, 11, 213 }, { 7, 11, 60 }, { 10, 11, 364 }, - { 11, 11, 135 }, { 7, 0, 341 }, { 11, 0, 219 }, { 5, 11, 607 }, - { 8, 11, 326 }, { 8, 11, 490 }, { 4, 11, 701 }, { 5, 11, 472 }, - { 5, 11, 639 }, { 7, 11, 1249 }, { 9, 11, 758 }, { 11, 11, 896 }, - { 7, 11, 380 }, { 7, 11, 1947 }, { 11, 0, 130 }, { 7, 0, 1734 }, - { 10, 0, 115 }, { 11, 0, 420 }, { 12, 0, 154 }, { 13, 0, 404 }, - { 14, 0, 346 }, { 15, 0, 54 }, { 6, 10, 129 }, { 4, 11, 386 }, - { 7, 11, 41 }, { 8, 11, 405 }, { 9, 11, 497 }, { 11, 11, 110 }, - { 11, 11, 360 }, { 15, 11, 37 }, { 16, 11, 84 }, { 13, 11, 282 }, - { 5, 11, 46 }, { 7, 11, 1452 }, { 7, 11, 1480 }, { 8, 11, 634 }, - { 12, 11, 472 }, { 4, 11, 524 }, { 8, 11, 810 }, { 10, 11, 238 }, - { 13, 11, 33 }, { 5, 0, 604 }, { 5, 0, 1011 }, { 8, 0, 701 }, - { 8, 0, 856 }, { 8, 0, 858 }, { 8, 0, 879 }, { 12, 0, 702 }, - { 14, 0, 447 }, { 4, 0, 54 }, { 5, 0, 666 }, { 7, 0, 1039 }, - { 7, 0, 1130 }, { 9, 0, 195 }, { 10, 0, 302 }, { 4, 10, 25 }, - { 5, 10, 60 }, { 6, 10, 504 }, { 7, 10, 614 }, { 7, 10, 1155 }, - { 12, 10, 0 }, { 7, 10, 1248 }, { 11, 10, 621 }, { 11, 10, 702 }, - { 5, 11, 997 }, { 9, 10, 321 }, { 6, 0, 1669 }, { 6, 0, 1791 }, - { 4, 10, 379 }, { 7, 10, 1397 }, { 10, 11, 372 }, { 5, 11, 782 }, - { 5, 11, 829 }, { 6, 11, 1738 }, { 7, 0, 1228 }, { 4, 10, 118 }, - { 6, 10, 274 }, { 6, 10, 361 }, { 7, 10, 75 }, { 13, 10, 441 }, - { 4, 0, 623 }, { 9, 11, 279 }, { 10, 11, 407 }, { 14, 11, 84 }, - { 22, 11, 18 }, { 9, 10, 841 }, { 7, 0, 798 }, { 12, 10, 693 }, - { 5, 10, 314 }, { 6, 10, 221 }, { 7, 10, 419 }, { 10, 10, 650 }, - { 11, 10, 396 }, { 12, 10, 156 }, { 13, 10, 369 }, { 14, 10, 333 }, - { 17, 10, 47 }, { 7, 11, 1372 }, { 7, 0, 122 }, { 9, 0, 259 }, - { 10, 0, 84 }, { 11, 0, 470 }, { 12, 0, 541 }, { 13, 0, 379 }, - { 6, 0, 837 }, { 8, 0, 1013 }, { 4, 11, 78 }, { 5, 11, 96 }, - { 5, 11, 182 }, { 7, 11, 1724 }, { 7, 11, 1825 }, { 10, 11, 394 }, - { 10, 11, 471 }, { 11, 11, 532 }, { 14, 11, 340 }, { 17, 11, 88 }, - { 6, 0, 577 }, { 7, 11, 1964 }, { 4, 10, 913 }, { 6, 0, 460 }, - { 8, 0, 891 }, { 10, 0, 901 }, { 10, 0, 919 }, { 10, 0, 932 }, - { 12, 0, 715 }, { 12, 0, 728 }, { 12, 0, 777 }, { 14, 0, 457 }, - { 16, 0, 103 }, { 5, 0, 82 }, { 5, 0, 131 }, { 7, 0, 1755 }, - { 8, 0, 31 }, { 9, 0, 168 }, { 9, 0, 764 }, { 11, 0, 869 }, - { 8, 10, 475 }, { 6, 0, 605 }, { 5, 10, 1016 }, { 9, 11, 601 }, - { 9, 11, 619 }, { 10, 11, 505 }, { 10, 11, 732 }, { 11, 11, 355 }, - { 12, 11, 139 }, { 7, 10, 602 }, { 8, 10, 179 }, { 10, 10, 781 }, - { 12, 10, 126 }, { 6, 0, 1246 }, { 6, 10, 329 }, { 10, 10, 111 }, - { 6, 11, 215 }, { 7, 11, 1028 }, { 7, 11, 1473 }, { 7, 11, 1721 }, - { 9, 11, 424 }, { 10, 11, 779 }, { 5, 0, 278 }, { 9, 0, 68 }, - { 6, 0, 932 }, { 6, 0, 1084 }, { 16, 0, 86 }, { 4, 0, 163 }, - { 5, 0, 201 }, { 5, 0, 307 }, { 5, 0, 310 }, { 6, 0, 335 }, - { 7, 0, 284 }, { 7, 0, 1660 }, { 8, 0, 165 }, { 8, 0, 781 }, - { 6, 0, 707 }, { 6, 0, 33 }, { 7, 0, 1244 }, { 5, 10, 821 }, - { 6, 11, 67 }, { 6, 10, 1687 }, { 7, 11, 258 }, { 7, 11, 1630 }, - { 9, 11, 354 }, { 9, 11, 675 }, { 10, 11, 830 }, { 14, 11, 80 }, - { 17, 11, 80 }, { 6, 11, 141 }, { 7, 11, 225 }, { 9, 11, 59 }, - { 9, 11, 607 }, { 10, 11, 312 }, { 11, 11, 687 }, { 12, 11, 555 }, - { 13, 11, 373 }, { 13, 11, 494 }, { 20, 11, 58 }, { 6, 0, 1113 }, - { 9, 0, 388 }, { 5, 10, 71 }, { 7, 10, 1407 }, { 9, 10, 704 }, - { 10, 10, 261 }, { 10, 10, 619 }, { 11, 10, 547 }, { 11, 10, 619 }, - { 15, 10, 157 }, { 7, 0, 1953 }, { 8, 0, 720 }, { 10, 0, 203 }, - { 7, 10, 2008 }, { 9, 10, 337 }, { 10, 10, 517 }, { 6, 0, 326 }, - { 7, 0, 677 }, { 9, 0, 425 }, { 11, 11, 81 }, { 7, 0, 1316 }, - { 7, 0, 1412 }, { 7, 0, 1839 }, { 9, 0, 589 }, { 11, 0, 241 }, - { 11, 0, 676 }, { 11, 0, 811 }, { 11, 0, 891 }, { 12, 0, 140 }, - { 12, 0, 346 }, { 12, 0, 479 }, { 13, 0, 140 }, { 13, 0, 381 }, - { 14, 0, 188 }, { 18, 0, 30 }, { 20, 0, 108 }, { 5, 0, 416 }, - { 6, 10, 86 }, { 6, 10, 603 }, { 7, 10, 292 }, { 7, 10, 561 }, - { 8, 10, 257 }, { 8, 10, 382 }, { 9, 10, 721 }, { 9, 10, 778 }, - { 11, 10, 581 }, { 12, 10, 466 }, { 4, 10, 486 }, { 5, 10, 491 }, - { 6, 0, 1300 }, { 4, 10, 72 }, { 7, 0, 847 }, { 6, 10, 265 }, - { 7, 11, 430 }, { 11, 11, 46 }, { 5, 11, 602 }, { 6, 11, 106 }, - { 7, 11, 1786 }, { 7, 11, 1821 }, { 7, 11, 2018 }, { 9, 11, 418 }, - { 9, 11, 763 }, { 5, 0, 358 }, { 7, 0, 535 }, { 7, 0, 1184 }, - { 10, 0, 662 }, { 13, 0, 212 }, { 13, 0, 304 }, { 13, 0, 333 }, - { 17, 0, 98 }, { 5, 11, 65 }, { 6, 11, 416 }, { 7, 11, 1720 }, - { 7, 11, 1924 }, { 8, 11, 677 }, { 10, 11, 109 }, { 11, 11, 14 }, - { 11, 11, 70 }, { 11, 11, 569 }, { 11, 11, 735 }, { 15, 11, 153 }, - { 20, 11, 80 }, { 6, 0, 1823 }, { 8, 0, 839 }, { 8, 0, 852 }, - { 8, 0, 903 }, { 10, 0, 940 }, { 12, 0, 707 }, { 12, 0, 775 }, - { 7, 11, 1229 }, { 6, 0, 1522 }, { 12, 0, 654 }, { 8, 11, 595 }, - { 11, 0, 163 }, { 13, 0, 314 }, { 4, 0, 978 }, { 4, 0, 601 }, - { 6, 0, 2035 }, { 9, 10, 234 }, { 5, 10, 815 }, { 6, 10, 1688 }, - { 6, 10, 1755 }, { 5, 0, 946 }, { 8, 0, 434 }, { 6, 10, 197 }, - { 8, 10, 205 }, { 7, 0, 411 }, { 7, 0, 590 }, { 8, 0, 631 }, - { 9, 0, 323 }, { 10, 0, 355 }, { 11, 0, 491 }, { 12, 0, 143 }, - { 12, 0, 402 }, { 13, 0, 73 }, { 14, 0, 408 }, { 15, 0, 107 }, - { 18, 0, 71 }, { 7, 0, 1467 }, { 8, 0, 328 }, { 10, 0, 544 }, - { 11, 0, 955 }, { 12, 0, 13 }, { 13, 0, 320 }, { 17, 0, 83 }, - { 14, 0, 410 }, { 11, 0, 511 }, { 13, 0, 394 }, { 14, 0, 298 }, - { 14, 0, 318 }, { 18, 0, 103 }, { 6, 10, 452 }, { 7, 10, 312 }, - { 10, 10, 219 }, { 10, 10, 589 }, { 4, 10, 333 }, { 9, 10, 176 }, - { 12, 10, 353 }, { 13, 10, 187 }, { 7, 11, 329 }, { 4, 11, 469 }, - { 5, 0, 835 }, { 6, 0, 483 }, { 6, 11, 1743 }, { 5, 11, 929 }, - { 6, 11, 340 }, { 8, 11, 376 }, { 8, 11, 807 }, { 6, 10, 1685 }, - { 4, 0, 677 }, { 5, 11, 218 }, { 7, 11, 1610 }, { 10, 11, 83 }, - { 5, 11, 571 }, { 7, 11, 1842 }, { 4, 11, 455 }, { 9, 0, 70 }, - { 7, 0, 1405 }, { 7, 10, 135 }, { 8, 10, 7 }, { 8, 10, 62 }, - { 9, 10, 243 }, { 10, 10, 658 }, { 10, 10, 697 }, { 11, 10, 456 }, - { 11, 10, 756 }, { 9, 10, 395 }, { 10, 10, 79 }, { 9, 0, 108 }, - { 6, 11, 161 }, { 7, 11, 372 }, { 9, 11, 597 }, { 4, 11, 349 }, - { 4, 0, 777 }, { 4, 0, 331 }, { 7, 10, 631 }, { 5, 0, 747 }, - { 6, 11, 432 }, { 6, 11, 608 }, { 11, 11, 322 }, { 10, 10, 835 }, - { 5, 11, 468 }, { 7, 11, 1809 }, { 10, 11, 325 }, { 11, 11, 856 }, - { 12, 11, 345 }, { 15, 11, 104 }, { 5, 11, 223 }, { 7, 10, 406 }, - { 7, 10, 459 }, { 8, 10, 606 }, { 11, 10, 726 }, { 4, 11, 566 }, - { 14, 0, 68 }, { 4, 11, 59 }, { 7, 11, 1394 }, { 6, 11, 436 }, - { 11, 11, 481 }, { 4, 11, 48 }, { 5, 11, 271 }, { 7, 11, 953 }, - { 11, 11, 170 }, { 5, 11, 610 }, { 8, 11, 457 }, { 5, 11, 755 }, - { 7, 11, 1217 }, { 5, 10, 612 }, { 4, 11, 197 }, { 4, 0, 505 }, - { 4, 10, 372 }, { 7, 10, 482 }, { 8, 10, 158 }, { 9, 10, 602 }, - { 9, 10, 615 }, { 10, 10, 245 }, { 10, 10, 678 }, { 10, 10, 744 }, - { 11, 10, 248 }, { 11, 10, 806 }, { 5, 0, 326 }, { 5, 10, 854 }, - { 7, 10, 1991 }, { 4, 0, 691 }, { 18, 0, 16 }, { 6, 0, 628 }, - { 9, 0, 35 }, { 10, 0, 680 }, { 10, 0, 793 }, { 11, 0, 364 }, - { 13, 0, 357 }, { 15, 0, 164 }, { 10, 0, 654 }, { 6, 0, 32 }, - { 7, 0, 385 }, { 7, 0, 757 }, { 7, 0, 1916 }, { 8, 0, 37 }, - { 8, 0, 94 }, { 8, 0, 711 }, { 9, 0, 541 }, { 10, 0, 162 }, - { 10, 0, 795 }, { 11, 0, 989 }, { 11, 0, 1010 }, { 12, 0, 14 }, - { 14, 0, 308 }, { 5, 11, 217 }, { 6, 0, 152 }, { 6, 0, 349 }, - { 6, 0, 1682 }, { 7, 0, 1252 }, { 8, 0, 112 }, { 9, 0, 435 }, - { 9, 0, 668 }, { 10, 0, 290 }, { 10, 0, 319 }, { 10, 0, 815 }, - { 11, 0, 180 }, { 11, 0, 837 }, { 12, 0, 240 }, { 13, 0, 152 }, - { 13, 0, 219 }, { 14, 0, 158 }, { 4, 0, 581 }, { 6, 0, 726 }, - { 5, 10, 195 }, { 7, 10, 1685 }, { 6, 0, 126 }, { 7, 0, 573 }, - { 8, 0, 397 }, { 14, 0, 44 }, { 10, 0, 89 }, { 7, 10, 1997 }, - { 8, 10, 730 }, { 11, 10, 1006 }, { 6, 0, 1531 }, { 6, 0, 1167 }, - { 5, 0, 926 }, { 12, 0, 203 }, { 5, 10, 751 }, { 4, 11, 165 }, - { 7, 11, 1398 }, { 7, 11, 1829 }, { 7, 0, 1232 }, { 9, 0, 531 }, - { 7, 10, 821 }, { 6, 0, 943 }, { 5, 0, 670 }, { 4, 0, 880 }, - { 11, 0, 231 }, { 6, 0, 1617 }, { 7, 0, 1957 }, { 5, 11, 9 }, - { 7, 11, 297 }, { 7, 11, 966 }, { 12, 11, 306 }, { 6, 0, 975 }, - { 6, 0, 985 }, { 5, 10, 950 }, { 5, 10, 994 }, { 6, 10, 351 }, - { 12, 11, 21 }, { 23, 11, 7 }, { 5, 11, 146 }, { 6, 11, 411 }, - { 10, 11, 721 }, { 7, 0, 242 }, { 7, 0, 1942 }, { 6, 11, 177 }, - { 7, 11, 467 }, { 5, 0, 421 }, { 7, 10, 47 }, { 9, 10, 684 }, - { 5, 0, 834 }, { 7, 0, 1202 }, { 8, 0, 14 }, { 9, 0, 481 }, - { 9, 0, 880 }, { 10, 0, 465 }, { 6, 0, 688 }, { 9, 0, 834 }, - { 4, 10, 350 }, { 4, 0, 855 }, { 4, 0, 357 }, { 6, 0, 172 }, - { 7, 0, 143 }, { 9, 0, 413 }, { 5, 11, 200 }, { 4, 0, 590 }, - { 7, 10, 1812 }, { 13, 10, 259 }, { 13, 10, 356 }, { 14, 10, 242 }, - { 19, 10, 114 }, { 5, 10, 967 }, { 11, 0, 114 }, { 4, 10, 473 }, - { 7, 10, 623 }, { 8, 10, 808 }, { 9, 10, 871 }, { 9, 10, 893 }, - { 11, 10, 431 }, { 12, 10, 112 }, { 12, 10, 217 }, { 12, 10, 243 }, - { 12, 10, 562 }, { 12, 10, 663 }, { 12, 10, 683 }, { 13, 10, 141 }, - { 13, 10, 197 }, { 13, 10, 227 }, { 13, 10, 406 }, { 13, 10, 487 }, - { 14, 10, 156 }, { 14, 10, 203 }, { 14, 10, 224 }, { 14, 10, 256 }, - { 18, 10, 58 }, { 22, 10, 0 }, { 10, 10, 286 }, { 4, 10, 222 }, - { 7, 10, 286 }, { 8, 10, 629 }, { 5, 0, 169 }, { 7, 0, 333 }, - { 8, 0, 45 }, { 6, 11, 481 }, { 4, 0, 198 }, { 4, 0, 24 }, - { 5, 0, 140 }, { 5, 0, 185 }, { 7, 0, 1500 }, { 11, 0, 565 }, - { 11, 0, 838 }, { 4, 11, 84 }, { 7, 11, 1482 }, { 10, 11, 76 }, - { 10, 11, 142 }, { 5, 0, 585 }, { 13, 10, 306 }, { 5, 11, 1015 }, - { 4, 11, 315 }, { 5, 11, 507 }, { 7, 11, 1370 }, { 8, 10, 146 }, - { 6, 0, 691 }, { 6, 0, 1503 }, { 4, 0, 334 }, { 5, 0, 593 }, - { 4, 10, 465 }, { 7, 10, 1663 }, { 14, 11, 173 }, { 7, 0, 913 }, - { 12, 0, 116 }, { 6, 11, 1722 }, { 6, 0, 1360 }, { 4, 0, 802 }, - { 8, 11, 222 }, { 8, 11, 476 }, { 9, 11, 238 }, { 11, 11, 516 }, - { 11, 11, 575 }, { 15, 11, 109 }, { 18, 11, 100 }, { 6, 0, 308 }, - { 9, 0, 673 }, { 7, 10, 138 }, { 7, 10, 517 }, { 11, 10, 238 }, - { 4, 0, 709 }, { 6, 0, 1876 }, { 6, 0, 1895 }, { 9, 0, 994 }, - { 9, 0, 1006 }, { 12, 0, 829 }, { 12, 0, 888 }, { 12, 0, 891 }, - { 18, 0, 185 }, { 20, 10, 94 }, { 4, 0, 228 }, { 5, 0, 897 }, - { 7, 0, 1840 }, { 5, 10, 495 }, { 7, 10, 834 }, { 9, 10, 733 }, - { 11, 10, 378 }, { 5, 10, 559 }, { 6, 10, 21 }, { 6, 10, 1737 }, - { 7, 10, 1444 }, { 8, 10, 224 }, { 4, 0, 608 }, { 5, 0, 497 }, - { 6, 11, 40 }, { 7, 11, 1781 }, { 6, 0, 1573 }, { 7, 0, 2039 }, - { 6, 0, 540 }, { 8, 0, 136 }, { 4, 0, 897 }, { 5, 0, 786 }, - { 5, 10, 519 }, { 6, 0, 1878 }, { 6, 0, 1884 }, { 9, 0, 938 }, - { 9, 0, 948 }, { 9, 0, 955 }, { 9, 0, 973 }, { 9, 0, 1012 }, - { 12, 0, 895 }, { 12, 0, 927 }, { 15, 0, 254 }, { 6, 0, 1469 }, - { 5, 0, 999 }, { 4, 0, 299 }, { 7, 0, 1004 }, { 4, 0, 745 }, - { 5, 0, 578 }, { 8, 11, 574 }, { 5, 0, 456 }, { 6, 0, 1457 }, - { 7, 0, 1679 }, { 4, 10, 402 }, { 7, 0, 693 }, { 8, 0, 180 }, - { 12, 0, 163 }, { 8, 10, 323 }, { 8, 10, 479 }, { 11, 10, 580 }, - { 14, 10, 201 }, { 5, 10, 59 }, { 7, 10, 672 }, { 4, 11, 354 }, - { 18, 10, 34 }, { 4, 0, 755 }, { 7, 11, 1558 }, { 7, 0, 1740 }, - { 18, 0, 48 }, { 4, 10, 85 }, { 7, 10, 549 }, { 11, 0, 338 }, - { 5, 10, 94 }, { 6, 0, 1091 }, { 7, 11, 469 }, { 12, 0, 695 }, - { 12, 0, 704 }, { 20, 0, 113 }, { 5, 11, 830 }, { 14, 11, 338 }, - { 20, 11, 81 }, { 7, 0, 1464 }, { 6, 10, 11 }, { 7, 10, 187 }, - { 7, 0, 975 }, { 13, 0, 335 }, { 4, 10, 522 }, { 6, 0, 1979 }, - { 5, 11, 496 }, { 7, 11, 203 }, { 4, 10, 52 }, { 7, 10, 661 }, - { 7, 0, 1566 }, { 8, 0, 269 }, { 9, 0, 212 }, { 9, 0, 718 }, - { 14, 0, 15 }, { 14, 0, 132 }, { 14, 0, 227 }, { 4, 0, 890 }, - { 5, 0, 805 }, { 5, 0, 819 }, { 5, 0, 961 }, { 6, 0, 396 }, - { 6, 0, 1631 }, { 6, 0, 1678 }, { 7, 0, 1967 }, { 7, 0, 2041 }, - { 9, 0, 630 }, { 11, 0, 8 }, { 11, 0, 1019 }, { 12, 0, 176 }, - { 13, 0, 225 }, { 14, 0, 292 }, { 21, 0, 24 }, { 4, 10, 383 }, - { 5, 10, 520 }, { 6, 11, 547 }, { 7, 11, 1748 }, { 5, 11, 88 }, - { 9, 11, 239 }, { 18, 11, 128 }, { 7, 11, 650 }, { 7, 11, 1310 }, - { 4, 10, 281 }, { 5, 10, 38 }, { 7, 10, 194 }, { 7, 10, 668 }, - { 7, 10, 1893 }, { 9, 10, 397 }, { 7, 0, 1815 }, { 9, 10, 635 }, - { 11, 10, 559 }, { 7, 0, 1505 }, { 10, 0, 190 }, { 10, 0, 634 }, - { 11, 0, 792 }, { 12, 0, 358 }, { 12, 0, 447 }, { 5, 0, 0 }, - { 6, 0, 536 }, { 7, 0, 604 }, { 13, 0, 445 }, { 17, 0, 126 }, - { 7, 11, 1076 }, { 9, 11, 80 }, { 11, 11, 78 }, { 11, 11, 421 }, - { 11, 11, 534 }, { 12, 11, 545 }, { 8, 0, 966 }, { 10, 0, 1023 }, - { 14, 11, 369 }, { 18, 11, 72 }, { 7, 11, 1641 }, { 6, 0, 232 }, - { 6, 0, 412 }, { 7, 0, 1074 }, { 8, 0, 9 }, { 8, 0, 157 }, - { 8, 0, 786 }, { 9, 0, 196 }, { 9, 0, 352 }, { 9, 0, 457 }, - { 10, 0, 337 }, { 11, 0, 232 }, { 11, 0, 877 }, { 12, 0, 480 }, - { 12, 0, 546 }, { 7, 0, 958 }, { 4, 0, 382 }, { 8, 0, 579 }, - { 4, 0, 212 }, { 7, 0, 1206 }, { 4, 11, 497 }, { 5, 11, 657 }, - { 7, 11, 1584 }, { 4, 0, 681 }, { 8, 0, 971 }, { 10, 0, 965 }, - { 5, 10, 448 }, { 8, 10, 535 }, { 14, 0, 16 }, { 18, 0, 44 }, - { 11, 0, 584 }, { 11, 0, 616 }, { 14, 0, 275 }, { 11, 11, 584 }, - { 11, 11, 616 }, { 14, 11, 275 }, { 8, 11, 13 }, { 7, 10, 610 }, - { 7, 10, 1501 }, { 7, 11, 642 }, { 8, 11, 250 }, { 11, 11, 123 }, - { 11, 11, 137 }, { 13, 11, 48 }, { 14, 11, 95 }, { 5, 0, 655 }, - { 17, 0, 67 }, { 19, 0, 74 }, { 6, 0, 751 }, { 6, 0, 1967 }, - { 6, 0, 231 }, { 8, 0, 423 }, { 5, 0, 300 }, { 10, 0, 1016 }, - { 4, 10, 319 }, { 5, 10, 699 }, { 10, 10, 673 }, { 6, 0, 237 }, - { 7, 0, 611 }, { 8, 0, 100 }, { 9, 0, 416 }, { 11, 0, 335 }, - { 12, 0, 173 }, { 18, 0, 101 }, { 6, 10, 336 }, { 8, 10, 552 }, - { 9, 10, 285 }, { 10, 10, 99 }, { 11, 10, 568 }, { 6, 0, 1370 }, - { 7, 10, 1406 }, { 9, 10, 218 }, { 13, 10, 222 }, { 5, 10, 256 }, - { 7, 0, 1208 }, { 14, 11, 213 }, { 20, 11, 38 }, { 6, 0, 1219 }, - { 7, 11, 1642 }, { 13, 0, 417 }, { 14, 0, 129 }, { 15, 0, 15 }, - { 10, 11, 545 }, { 12, 11, 301 }, { 17, 10, 39 }, { 20, 10, 36 }, - { 5, 0, 199 }, { 4, 11, 904 }, { 5, 11, 794 }, { 12, 0, 427 }, - { 18, 0, 38 }, { 6, 0, 949 }, { 8, 0, 665 }, { 7, 10, 634 }, - { 4, 10, 618 }, { 7, 10, 259 }, { 4, 10, 339 }, { 5, 11, 761 }, - { 13, 10, 169 }, { 4, 10, 759 }, { 5, 0, 688 }, { 7, 0, 539 }, - { 7, 0, 712 }, { 7, 11, 386 }, { 10, 11, 713 }, { 6, 0, 1186 }, - { 6, 11, 7 }, { 6, 11, 35 }, { 7, 11, 147 }, { 7, 11, 1069 }, - { 7, 11, 1568 }, { 7, 11, 1575 }, { 7, 11, 1917 }, { 8, 11, 43 }, - { 8, 11, 208 }, { 9, 11, 128 }, { 9, 11, 866 }, { 10, 11, 20 }, - { 11, 11, 981 }, { 19, 11, 33 }, { 7, 11, 893 }, { 8, 10, 482 }, - { 13, 11, 424 }, { 6, 0, 312 }, { 6, 0, 1715 }, { 10, 0, 584 }, - { 11, 0, 546 }, { 11, 0, 692 }, { 12, 0, 259 }, { 12, 0, 295 }, - { 13, 0, 46 }, { 13, 0, 154 }, { 5, 10, 336 }, { 6, 10, 341 }, - { 6, 10, 478 }, { 6, 10, 1763 }, { 8, 10, 386 }, { 9, 0, 151 }, - { 4, 0, 588 }, { 24, 0, 4 }, { 6, 11, 322 }, { 9, 11, 552 }, - { 11, 11, 274 }, { 13, 11, 209 }, { 13, 11, 499 }, { 14, 11, 85 }, - { 15, 11, 126 }, { 17, 11, 70 }, { 7, 10, 73 }, { 4, 0, 231 }, - { 5, 0, 61 }, { 6, 0, 104 }, { 7, 0, 729 }, { 7, 0, 964 }, - { 7, 0, 1658 }, { 12, 0, 414 }, { 6, 0, 263 }, { 10, 0, 757 }, - { 7, 10, 1971 }, { 4, 0, 612 }, { 5, 0, 561 }, { 4, 0, 320 }, - { 7, 10, 1344 }, { 8, 11, 83 }, { 8, 11, 817 }, { 9, 11, 28 }, - { 9, 11, 29 }, { 9, 11, 885 }, { 10, 11, 387 }, { 11, 11, 633 }, - { 11, 11, 740 }, { 13, 11, 235 }, { 13, 11, 254 }, { 15, 11, 143 }, - { 15, 11, 146 }, { 5, 10, 396 }, { 6, 10, 501 }, { 12, 11, 49 }, - { 4, 0, 225 }, { 4, 10, 929 }, { 5, 10, 799 }, { 8, 10, 46 }, - { 8, 10, 740 }, { 4, 0, 405 }, { 7, 0, 817 }, { 14, 0, 58 }, - { 17, 0, 37 }, { 18, 0, 124 }, { 5, 0, 974 }, { 4, 11, 412 }, - { 5, 11, 581 }, { 4, 10, 892 }, { 5, 10, 770 }, { 4, 0, 996 }, - { 6, 0, 2026 }, { 4, 0, 527 }, { 5, 0, 235 }, { 7, 0, 1239 }, - { 11, 0, 131 }, { 12, 0, 370 }, { 9, 0, 16 }, { 13, 0, 386 }, - { 7, 11, 421 }, { 7, 0, 956 }, { 7, 0, 1157 }, { 7, 0, 1506 }, - { 7, 0, 1606 }, { 7, 0, 1615 }, { 7, 0, 1619 }, { 7, 0, 1736 }, - { 7, 0, 1775 }, { 8, 0, 590 }, { 9, 0, 324 }, { 9, 0, 736 }, - { 9, 0, 774 }, { 9, 0, 776 }, { 9, 0, 784 }, { 10, 0, 567 }, - { 10, 0, 708 }, { 11, 0, 518 }, { 11, 0, 613 }, { 11, 0, 695 }, - { 11, 0, 716 }, { 11, 0, 739 }, { 11, 0, 770 }, { 11, 0, 771 }, - { 11, 0, 848 }, { 11, 0, 857 }, { 11, 0, 931 }, { 11, 0, 947 }, - { 12, 0, 326 }, { 12, 0, 387 }, { 12, 0, 484 }, { 12, 0, 528 }, - { 12, 0, 552 }, { 12, 0, 613 }, { 13, 0, 189 }, { 13, 0, 256 }, - { 13, 0, 340 }, { 13, 0, 432 }, { 13, 0, 436 }, { 13, 0, 440 }, - { 13, 0, 454 }, { 14, 0, 174 }, { 14, 0, 220 }, { 14, 0, 284 }, - { 14, 0, 390 }, { 17, 0, 121 }, { 7, 10, 158 }, { 9, 0, 137 }, - { 10, 0, 221 }, { 4, 11, 110 }, { 10, 11, 415 }, { 10, 11, 597 }, - { 14, 11, 206 }, { 13, 11, 496 }, { 7, 11, 205 }, { 23, 10, 25 }, - { 7, 11, 778 }, { 7, 11, 1656 }, { 7, 10, 2001 }, { 9, 11, 369 }, - { 10, 11, 338 }, { 10, 11, 490 }, { 11, 11, 154 }, { 11, 11, 545 }, - { 11, 11, 775 }, { 13, 11, 77 }, { 13, 11, 274 }, { 4, 11, 444 }, - { 10, 11, 146 }, { 12, 11, 9 }, { 7, 0, 390 }, { 10, 0, 140 }, - { 7, 0, 1144 }, { 6, 0, 464 }, { 7, 10, 1461 }, { 12, 10, 91 }, - { 4, 10, 602 }, { 4, 11, 283 }, { 7, 11, 1194 }, { 5, 0, 407 }, - { 11, 0, 204 }, { 11, 0, 243 }, { 11, 0, 489 }, { 12, 0, 293 }, - { 19, 0, 37 }, { 20, 0, 73 }, { 22, 0, 38 }, { 7, 0, 1218 }, - { 8, 0, 303 }, { 5, 0, 325 }, { 8, 0, 5 }, { 8, 0, 227 }, - { 9, 0, 105 }, { 10, 0, 585 }, { 12, 0, 614 }, { 4, 10, 13 }, - { 5, 10, 567 }, { 7, 10, 1498 }, { 9, 10, 124 }, { 11, 10, 521 }, - { 12, 10, 405 }, { 7, 10, 1006 }, { 7, 0, 800 }, { 10, 0, 12 }, - { 6, 11, 1720 }, { 7, 0, 1783 }, { 4, 10, 735 }, { 10, 10, 812 }, - { 4, 10, 170 }, { 7, 10, 323 }, { 6, 0, 621 }, { 13, 0, 504 }, - { 16, 0, 89 }, { 5, 10, 304 }, { 7, 10, 1403 }, { 9, 11, 216 }, - { 6, 0, 920 }, { 6, 0, 1104 }, { 9, 11, 183 }, { 11, 11, 286 }, - { 4, 0, 376 }, { 5, 10, 742 }, { 6, 0, 218 }, { 8, 0, 641 }, - { 11, 0, 388 }, { 12, 0, 580 }, { 7, 0, 454 }, { 7, 0, 782 }, - { 8, 0, 768 }, { 12, 0, 686 }, { 9, 11, 33 }, { 5, 10, 111 }, - { 16, 0, 0 }, { 10, 0, 676 }, { 12, 0, 462 }, { 6, 0, 164 }, - { 8, 11, 735 }, { 5, 10, 444 }, { 22, 0, 50 }, { 7, 11, 1862 }, - { 12, 11, 491 }, { 12, 11, 520 }, { 13, 11, 383 }, { 14, 11, 244 }, - { 18, 11, 12 }, { 5, 11, 132 }, { 9, 11, 486 }, { 9, 11, 715 }, - { 10, 11, 458 }, { 11, 11, 373 }, { 11, 11, 668 }, { 11, 11, 795 }, - { 11, 11, 897 }, { 12, 11, 272 }, { 12, 11, 424 }, { 12, 11, 539 }, - { 12, 11, 558 }, { 14, 11, 245 }, { 14, 11, 263 }, { 14, 11, 264 }, - { 14, 11, 393 }, { 14, 11, 403 }, { 8, 10, 123 }, { 15, 10, 6 }, - { 16, 10, 7 }, { 6, 0, 285 }, { 8, 0, 654 }, { 11, 0, 749 }, - { 12, 0, 190 }, { 12, 0, 327 }, { 13, 0, 120 }, { 13, 0, 121 }, - { 13, 0, 327 }, { 15, 0, 47 }, { 18, 0, 40 }, { 5, 11, 8 }, - { 6, 11, 89 }, { 6, 11, 400 }, { 7, 11, 1569 }, { 7, 11, 1623 }, - { 7, 11, 1850 }, { 8, 11, 218 }, { 8, 11, 422 }, { 9, 11, 570 }, - { 10, 11, 626 }, { 6, 11, 387 }, { 7, 11, 882 }, { 13, 11, 111 }, - { 6, 0, 343 }, { 7, 0, 195 }, { 9, 0, 226 }, { 10, 0, 197 }, - { 10, 0, 575 }, { 11, 0, 502 }, { 11, 0, 899 }, { 6, 11, 224 }, - { 7, 11, 877 }, { 9, 11, 647 }, { 5, 10, 937 }, { 7, 10, 100 }, - { 7, 11, 790 }, { 22, 0, 29 }, { 19, 0, 8 }, { 6, 0, 1812 }, - { 21, 0, 8 }, { 7, 11, 394 }, { 7, 0, 1125 }, { 9, 0, 143 }, - { 11, 0, 61 }, { 14, 0, 405 }, { 22, 0, 21 }, { 10, 11, 755 }, - { 19, 11, 29 }, { 9, 11, 378 }, { 13, 11, 162 }, { 7, 10, 922 }, - { 5, 10, 619 }, { 5, 10, 698 }, { 6, 0, 1327 }, { 6, 0, 1598 }, - { 9, 0, 575 }, { 9, 11, 569 }, { 12, 11, 12 }, { 12, 11, 81 }, - { 12, 11, 319 }, { 13, 11, 69 }, { 14, 11, 259 }, { 16, 11, 87 }, - { 17, 11, 1 }, { 17, 11, 21 }, { 17, 11, 24 }, { 18, 11, 15 }, - { 18, 11, 56 }, { 18, 11, 59 }, { 18, 11, 127 }, { 18, 11, 154 }, - { 19, 11, 19 }, { 20, 11, 31 }, { 6, 0, 895 }, { 7, 11, 1231 }, - { 5, 0, 959 }, { 7, 11, 124 }, { 8, 11, 38 }, { 5, 11, 261 }, - { 7, 11, 78 }, { 7, 11, 199 }, { 8, 11, 815 }, { 9, 11, 126 }, - { 10, 11, 342 }, { 5, 10, 917 }, { 6, 10, 1659 }, { 7, 0, 1759 }, - { 5, 11, 595 }, { 7, 11, 1863 }, { 8, 0, 173 }, { 6, 0, 266 }, - { 14, 0, 261 }, { 4, 11, 628 }, { 5, 10, 251 }, { 5, 10, 956 }, - { 8, 10, 268 }, { 9, 10, 214 }, { 18, 10, 142 }, { 7, 11, 266 }, - { 8, 11, 804 }, { 7, 11, 208 }, { 6, 11, 79 }, { 7, 11, 1021 }, - { 7, 11, 1519 }, { 11, 11, 704 }, { 13, 11, 396 }, { 5, 10, 346 }, - { 5, 10, 711 }, { 8, 10, 390 }, { 8, 11, 741 }, { 6, 11, 376 }, - { 6, 0, 1427 }, { 6, 0, 1033 }, { 6, 0, 1217 }, { 8, 0, 300 }, - { 5, 10, 624 }, { 6, 11, 100 }, { 7, 11, 244 }, { 7, 11, 632 }, - { 7, 11, 1609 }, { 8, 11, 178 }, { 8, 11, 638 }, { 13, 11, 58 }, - { 6, 0, 584 }, { 5, 10, 783 }, { 7, 10, 1998 }, { 7, 10, 2047 }, - { 5, 0, 427 }, { 5, 0, 734 }, { 7, 0, 478 }, { 8, 0, 52 }, - { 7, 0, 239 }, { 11, 0, 217 }, { 14, 0, 165 }, { 6, 0, 1129 }, - { 6, 0, 168 }, { 6, 0, 1734 }, { 7, 0, 20 }, { 7, 0, 1056 }, - { 8, 0, 732 }, { 9, 0, 406 }, { 9, 0, 911 }, { 10, 0, 694 }, - { 4, 10, 594 }, { 5, 11, 791 }, { 7, 11, 686 }, { 8, 11, 33 }, - { 8, 11, 238 }, { 10, 11, 616 }, { 11, 11, 467 }, { 11, 11, 881 }, - { 13, 11, 217 }, { 13, 11, 253 }, { 14, 11, 268 }, { 9, 11, 476 }, - { 6, 0, 418 }, { 5, 0, 613 }, { 4, 0, 632 }, { 4, 11, 447 }, - { 7, 0, 32 }, { 7, 0, 984 }, { 8, 0, 85 }, { 8, 0, 709 }, - { 9, 0, 579 }, { 9, 0, 847 }, { 9, 0, 856 }, { 10, 0, 799 }, - { 11, 0, 258 }, { 11, 0, 1007 }, { 12, 0, 331 }, { 12, 0, 615 }, - { 13, 0, 188 }, { 13, 0, 435 }, { 14, 0, 8 }, { 15, 0, 165 }, - { 16, 0, 27 }, { 20, 0, 40 }, { 16, 11, 35 }, { 4, 11, 128 }, - { 5, 11, 415 }, { 6, 11, 462 }, { 7, 11, 294 }, { 7, 11, 578 }, - { 10, 11, 710 }, { 11, 11, 86 }, { 5, 0, 694 }, { 8, 0, 909 }, - { 7, 0, 1109 }, { 11, 0, 7 }, { 5, 10, 37 }, { 6, 10, 39 }, - { 6, 10, 451 }, { 7, 10, 218 }, { 7, 10, 1166 }, { 7, 10, 1687 }, - { 8, 10, 662 }, { 16, 10, 2 }, { 8, 11, 587 }, { 6, 11, 427 }, - { 7, 11, 1018 }, { 10, 11, 692 }, { 4, 11, 195 }, { 6, 10, 508 }, - { 7, 11, 802 }, { 4, 0, 167 }, { 7, 0, 82 }, { 5, 0, 62 }, - { 6, 0, 24 }, { 6, 0, 534 }, { 7, 0, 74 }, { 7, 0, 678 }, - { 7, 0, 684 }, { 7, 0, 1043 }, { 7, 0, 1072 }, { 8, 0, 280 }, - { 8, 0, 541 }, { 8, 0, 686 }, { 9, 0, 258 }, { 10, 0, 519 }, - { 11, 0, 252 }, { 12, 0, 282 }, { 10, 0, 33 }, { 4, 0, 359 }, - { 5, 11, 738 }, { 7, 0, 980 }, { 9, 0, 328 }, { 13, 0, 186 }, - { 13, 0, 364 }, { 7, 10, 635 }, { 7, 10, 796 }, { 8, 10, 331 }, - { 9, 10, 330 }, { 9, 10, 865 }, { 10, 10, 119 }, { 10, 10, 235 }, - { 11, 10, 111 }, { 11, 10, 129 }, { 11, 10, 240 }, { 12, 10, 31 }, - { 12, 10, 66 }, { 12, 10, 222 }, { 12, 10, 269 }, { 12, 10, 599 }, - { 12, 10, 684 }, { 12, 10, 689 }, { 12, 10, 691 }, { 14, 10, 345 }, - { 9, 10, 527 }, { 6, 0, 596 }, { 7, 0, 585 }, { 7, 10, 702 }, - { 6, 11, 1683 }, { 5, 0, 211 }, { 6, 0, 145 }, { 13, 0, 336 }, - { 6, 0, 1130 }, { 7, 0, 873 }, { 6, 10, 37 }, { 7, 10, 1666 }, - { 8, 10, 195 }, { 8, 10, 316 }, { 9, 10, 178 }, { 9, 10, 276 }, - { 9, 10, 339 }, { 9, 10, 536 }, { 10, 10, 102 }, { 10, 10, 362 }, - { 10, 10, 785 }, { 11, 10, 55 }, { 11, 10, 149 }, { 11, 10, 773 }, - { 13, 10, 416 }, { 13, 10, 419 }, { 14, 10, 38 }, { 14, 10, 41 }, - { 14, 10, 210 }, { 8, 0, 840 }, { 8, 0, 841 }, { 4, 0, 263 }, - { 5, 11, 3 }, { 8, 11, 578 }, { 9, 11, 118 }, { 10, 11, 705 }, - { 12, 11, 383 }, { 13, 11, 279 }, { 4, 0, 916 }, { 5, 11, 229 }, - { 5, 10, 645 }, { 15, 0, 155 }, { 16, 0, 79 }, { 8, 11, 102 }, - { 10, 11, 578 }, { 10, 11, 672 }, { 12, 11, 496 }, { 13, 11, 408 }, - { 14, 11, 121 }, { 17, 11, 106 }, { 4, 0, 599 }, { 5, 0, 592 }, - { 6, 0, 1634 }, { 7, 0, 5 }, { 7, 0, 55 }, { 7, 0, 67 }, - { 7, 0, 97 }, { 7, 0, 691 }, { 7, 0, 979 }, { 7, 0, 1600 }, - { 7, 0, 1697 }, { 8, 0, 207 }, { 8, 0, 214 }, { 8, 0, 231 }, - { 8, 0, 294 }, { 8, 0, 336 }, { 8, 0, 428 }, { 8, 0, 471 }, - { 8, 0, 622 }, { 8, 0, 626 }, { 8, 0, 679 }, { 8, 0, 759 }, - { 8, 0, 829 }, { 9, 0, 11 }, { 9, 0, 246 }, { 9, 0, 484 }, - { 9, 0, 573 }, { 9, 0, 706 }, { 9, 0, 762 }, { 9, 0, 798 }, - { 9, 0, 855 }, { 9, 0, 870 }, { 9, 0, 912 }, { 10, 0, 303 }, - { 10, 0, 335 }, { 10, 0, 424 }, { 10, 0, 461 }, { 10, 0, 543 }, - { 10, 0, 759 }, { 10, 0, 814 }, { 11, 0, 59 }, { 11, 0, 199 }, - { 11, 0, 235 }, { 11, 0, 590 }, { 11, 0, 631 }, { 11, 0, 929 }, - { 11, 0, 963 }, { 11, 0, 987 }, { 12, 0, 114 }, { 12, 0, 182 }, - { 12, 0, 226 }, { 12, 0, 332 }, { 12, 0, 439 }, { 12, 0, 575 }, - { 12, 0, 598 }, { 12, 0, 675 }, { 13, 0, 8 }, { 13, 0, 125 }, - { 13, 0, 194 }, { 13, 0, 287 }, { 14, 0, 197 }, { 14, 0, 383 }, - { 15, 0, 53 }, { 17, 0, 63 }, { 19, 0, 46 }, { 19, 0, 98 }, - { 19, 0, 106 }, { 20, 0, 85 }, { 7, 0, 1356 }, { 4, 10, 290 }, - { 6, 10, 70 }, { 7, 10, 1292 }, { 10, 10, 762 }, { 11, 10, 288 }, - { 22, 11, 55 }, { 4, 0, 593 }, { 8, 11, 115 }, { 8, 11, 350 }, - { 9, 11, 489 }, { 10, 11, 128 }, { 11, 11, 306 }, { 12, 11, 373 }, - { 14, 11, 30 }, { 17, 11, 79 }, { 19, 11, 80 }, { 7, 11, 1235 }, - { 6, 0, 1392 }, { 4, 11, 230 }, { 5, 11, 702 }, { 19, 0, 126 }, - { 7, 10, 131 }, { 7, 10, 422 }, { 8, 10, 210 }, { 12, 10, 573 }, - { 6, 0, 1179 }, { 11, 11, 435 }, { 11, 10, 797 }, { 6, 11, 1728 }, - { 4, 0, 162 }, { 18, 11, 26 }, { 19, 11, 42 }, { 20, 11, 43 }, - { 21, 11, 0 }, { 23, 11, 27 }, { 24, 11, 14 }, { 4, 10, 936 }, - { 6, 0, 765 }, { 5, 10, 453 }, { 6, 10, 441 }, { 5, 0, 187 }, - { 7, 0, 1286 }, { 6, 0, 635 }, { 6, 0, 904 }, { 6, 0, 1210 }, - { 6, 0, 1489 }, { 4, 0, 215 }, { 8, 0, 890 }, { 9, 0, 38 }, - { 10, 0, 923 }, { 11, 0, 23 }, { 11, 0, 127 }, { 11, 0, 796 }, - { 6, 0, 1165 }, { 6, 0, 1306 }, { 7, 0, 716 }, { 13, 0, 97 }, - { 13, 0, 251 }, { 4, 10, 653 }, { 8, 0, 657 }, { 18, 10, 80 }, - { 5, 11, 622 }, { 7, 11, 1032 }, { 11, 11, 26 }, { 11, 11, 213 }, - { 11, 11, 707 }, { 12, 11, 380 }, { 13, 11, 226 }, { 13, 11, 355 }, - { 6, 0, 299 }, { 5, 11, 70 }, { 6, 11, 334 }, { 9, 11, 171 }, - { 11, 11, 637 }, { 12, 11, 202 }, { 14, 11, 222 }, { 17, 11, 42 }, - { 14, 0, 134 }, { 4, 11, 23 }, { 5, 11, 313 }, { 5, 11, 1014 }, - { 6, 11, 50 }, { 6, 11, 51 }, { 7, 11, 142 }, { 7, 11, 384 }, - { 9, 11, 783 }, { 11, 11, 741 }, { 4, 11, 141 }, { 7, 11, 559 }, - { 8, 11, 640 }, { 9, 11, 460 }, { 12, 11, 183 }, { 13, 11, 488 }, - { 8, 11, 614 }, { 7, 10, 1368 }, { 8, 10, 232 }, { 8, 10, 361 }, - { 10, 10, 682 }, { 10, 10, 742 }, { 9, 10, 534 }, { 6, 0, 1082 }, - { 12, 0, 658 }, { 9, 10, 27 }, { 7, 0, 2002 }, { 14, 10, 12 }, - { 4, 0, 28 }, { 5, 0, 440 }, { 7, 0, 248 }, { 11, 0, 833 }, - { 12, 0, 344 }, { 7, 10, 736 }, { 11, 10, 264 }, { 6, 10, 1657 }, - { 6, 0, 1654 }, { 10, 0, 531 }, { 5, 11, 222 }, { 9, 11, 140 }, - { 10, 11, 534 }, { 6, 0, 634 }, { 6, 0, 798 }, { 6, 0, 840 }, - { 10, 11, 503 }, { 7, 10, 127 }, { 5, 0, 853 }, { 5, 11, 154 }, - { 7, 11, 1491 }, { 10, 11, 379 }, { 10, 11, 485 }, { 6, 0, 249 }, - { 7, 0, 1234 }, { 11, 0, 573 }, { 5, 11, 716 }, { 7, 11, 1570 }, - { 12, 11, 542 }, { 8, 10, 364 }, { 10, 0, 527 }, { 4, 11, 91 }, - { 5, 11, 388 }, { 5, 11, 845 }, { 6, 11, 206 }, { 6, 11, 252 }, - { 6, 11, 365 }, { 7, 11, 136 }, { 7, 11, 531 }, { 8, 11, 264 }, - { 8, 11, 621 }, { 6, 0, 1419 }, { 7, 11, 1441 }, { 7, 0, 49 }, - { 7, 0, 392 }, { 8, 0, 20 }, { 8, 0, 172 }, { 8, 0, 690 }, - { 9, 0, 383 }, { 9, 0, 845 }, { 10, 0, 48 }, { 11, 0, 293 }, - { 11, 0, 832 }, { 11, 0, 920 }, { 11, 0, 984 }, { 13, 0, 221 }, - { 5, 0, 858 }, { 5, 0, 992 }, { 5, 0, 728 }, { 9, 10, 792 }, - { 5, 10, 909 }, { 9, 10, 849 }, { 10, 10, 805 }, { 7, 0, 525 }, - { 7, 0, 1579 }, { 8, 0, 497 }, { 8, 0, 573 }, { 6, 0, 268 }, - { 9, 0, 62 }, { 7, 11, 576 }, { 6, 0, 1201 }, { 5, 11, 771 }, - { 5, 11, 863 }, { 5, 11, 898 }, { 6, 11, 1632 }, { 6, 11, 1644 }, - { 6, 11, 1780 }, { 5, 11, 331 }, { 7, 0, 193 }, { 7, 0, 1105 }, - { 10, 0, 495 }, { 7, 10, 397 }, { 8, 10, 124 }, { 8, 10, 619 }, - { 9, 10, 305 }, { 11, 10, 40 }, { 12, 10, 349 }, { 13, 10, 134 }, - { 13, 10, 295 }, { 14, 10, 155 }, { 15, 10, 120 }, { 18, 10, 105 }, - { 10, 0, 106 }, { 6, 0, 859 }, { 5, 11, 107 }, { 7, 11, 201 }, - { 8, 11, 518 }, { 6, 11, 446 }, { 7, 11, 1817 }, { 13, 0, 23 }, - { 4, 10, 262 }, { 7, 10, 342 }, { 5, 10, 641 }, { 9, 11, 851 }, - { 6, 0, 925 }, { 9, 0, 813 }, { 4, 11, 504 }, { 6, 0, 613 }, - { 8, 0, 223 }, { 4, 10, 99 }, { 6, 10, 250 }, { 6, 10, 346 }, - { 8, 10, 127 }, { 10, 10, 81 }, { 8, 0, 953 }, { 4, 10, 915 }, - { 11, 11, 892 }, { 5, 10, 75 }, { 9, 10, 517 }, { 10, 10, 470 }, - { 12, 10, 155 }, { 13, 10, 224 }, { 4, 0, 666 }, { 7, 0, 1017 }, - { 7, 11, 996 }, { 10, 11, 390 }, { 5, 11, 883 }, { 5, 11, 975 }, - { 14, 10, 83 }, { 14, 11, 83 }, { 4, 0, 670 }, { 5, 11, 922 }, - { 6, 11, 1707 }, { 7, 0, 216 }, { 9, 0, 40 }, { 11, 0, 136 }, - { 7, 11, 787 }, { 5, 10, 954 }, { 5, 11, 993 }, { 7, 11, 515 }, - { 9, 11, 91 }, { 11, 0, 259 }, { 7, 0, 1114 }, { 9, 0, 310 }, - { 9, 0, 682 }, { 10, 0, 440 }, { 13, 0, 40 }, { 6, 10, 304 }, - { 8, 10, 418 }, { 11, 10, 341 }, { 11, 10, 675 }, { 14, 0, 296 }, - { 9, 10, 410 }, { 11, 10, 425 }, { 10, 11, 377 }, { 12, 11, 363 }, - { 13, 11, 68 }, { 13, 11, 94 }, { 14, 11, 108 }, { 14, 11, 306 }, - { 7, 0, 1401 }, { 7, 0, 1476 }, { 4, 0, 296 }, { 6, 0, 475 }, - { 7, 0, 401 }, { 7, 0, 1410 }, { 7, 0, 1594 }, { 7, 0, 1674 }, - { 8, 0, 63 }, { 8, 0, 660 }, { 9, 0, 74 }, { 4, 0, 139 }, - { 4, 0, 388 }, { 12, 0, 188 }, { 4, 0, 797 }, { 4, 11, 766 }, - { 5, 11, 103 }, { 7, 11, 921 }, { 8, 11, 580 }, { 8, 11, 593 }, - { 8, 11, 630 }, { 10, 11, 28 }, { 4, 11, 911 }, { 5, 11, 867 }, - { 5, 11, 1013 }, { 6, 10, 14 }, { 6, 0, 1572 }, { 6, 10, 1708 }, - { 21, 0, 39 }, { 5, 10, 113 }, { 6, 10, 243 }, { 7, 10, 1865 }, - { 11, 10, 161 }, { 16, 10, 37 }, { 17, 10, 99 }, { 7, 11, 1563 }, - { 13, 11, 182 }, { 5, 11, 135 }, { 6, 11, 519 }, { 7, 11, 1722 }, - { 10, 11, 271 }, { 11, 11, 261 }, { 17, 11, 54 }, { 4, 10, 274 }, - { 6, 0, 1594 }, { 4, 11, 300 }, { 5, 11, 436 }, { 7, 11, 484 }, - { 4, 0, 747 }, { 6, 0, 290 }, { 7, 0, 649 }, { 7, 0, 1479 }, - { 7, 0, 1583 }, { 5, 11, 535 }, { 19, 11, 82 }, { 5, 0, 232 }, - { 9, 0, 887 }, { 7, 10, 166 }, { 8, 0, 521 }, { 4, 0, 14 }, - { 7, 0, 472 }, { 7, 0, 1801 }, { 10, 0, 748 }, { 13, 0, 458 }, - { 6, 0, 741 }, { 6, 0, 992 }, { 16, 0, 111 }, { 9, 10, 304 }, - { 4, 0, 425 }, { 5, 11, 387 }, { 7, 11, 557 }, { 12, 11, 547 }, - { 14, 11, 86 }, { 7, 11, 1747 }, { 5, 10, 654 }, { 7, 11, 1489 }, - { 7, 0, 789 }, { 4, 11, 6 }, { 5, 11, 708 }, { 8, 11, 75 }, - { 6, 10, 273 }, { 10, 10, 188 }, { 13, 10, 377 }, { 18, 10, 77 }, - { 6, 0, 1593 }, { 4, 11, 303 }, { 7, 11, 619 }, { 10, 11, 547 }, - { 10, 11, 687 }, { 11, 11, 122 }, { 12, 11, 601 }, { 6, 0, 1768 }, - { 7, 10, 410 }, { 10, 11, 772 }, { 11, 0, 233 }, { 11, 10, 524 }, - { 5, 0, 943 }, { 6, 0, 1779 }, { 6, 10, 1785 }, { 8, 11, 529 }, - { 4, 0, 955 }, { 5, 0, 245 }, { 6, 0, 576 }, { 7, 0, 582 }, - { 8, 0, 225 }, { 4, 10, 780 }, { 14, 0, 241 }, { 6, 0, 1943 }, - { 4, 11, 106 }, { 7, 11, 310 }, { 7, 11, 1785 }, { 10, 11, 690 }, - { 11, 11, 717 }, { 6, 0, 1284 }, { 5, 11, 890 }, { 5, 11, 988 }, - { 6, 11, 626 }, { 14, 11, 431 }, { 10, 11, 706 }, { 17, 11, 32 }, - { 9, 11, 332 }, { 4, 11, 698 }, { 7, 0, 709 }, { 5, 10, 948 }, - { 10, 11, 17 }, { 8, 0, 554 }, { 6, 0, 1564 }, { 11, 10, 941 }, - { 4, 0, 443 }, { 6, 0, 909 }, { 6, 11, 84 }, { 14, 0, 280 }, - { 4, 10, 532 }, { 5, 10, 706 }, { 7, 10, 662 }, { 4, 0, 729 }, - { 5, 10, 837 }, { 6, 10, 1651 }, { 11, 10, 985 }, { 7, 10, 1861 }, - { 4, 0, 348 }, { 24, 11, 3 }, { 5, 11, 986 }, { 6, 11, 130 }, - { 7, 11, 1582 }, { 8, 11, 458 }, { 10, 11, 101 }, { 10, 11, 318 }, - { 10, 11, 823 }, { 6, 0, 758 }, { 4, 0, 298 }, { 9, 0, 848 }, - { 4, 10, 330 }, { 7, 10, 933 }, { 7, 10, 2012 }, { 8, 10, 292 }, - { 7, 11, 1644 }, { 9, 11, 129 }, { 6, 0, 1422 }, { 9, 0, 829 }, - { 7, 10, 767 }, { 5, 0, 164 }, { 7, 0, 121 }, { 14, 0, 189 }, - { 7, 0, 812 }, { 7, 0, 1261 }, { 7, 0, 1360 }, { 9, 0, 632 }, - { 12, 0, 352 }, { 7, 11, 1788 }, { 11, 0, 556 }, { 7, 11, 997 }, - { 17, 10, 114 }, { 4, 0, 172 }, { 9, 0, 611 }, { 10, 0, 436 }, - { 12, 0, 673 }, { 13, 0, 255 }, { 9, 10, 883 }, { 11, 0, 530 }, - { 10, 10, 274 }, { 5, 0, 844 }, { 6, 0, 984 }, { 13, 0, 232 }, - { 18, 0, 35 }, { 4, 10, 703 }, { 7, 10, 207 }, { 4, 10, 571 }, - { 9, 0, 263 }, { 10, 0, 147 }, { 10, 0, 492 }, { 7, 11, 1756 }, - { 9, 11, 98 }, { 5, 10, 873 }, { 5, 10, 960 }, { 8, 10, 823 }, - { 9, 10, 881 }, { 5, 0, 537 }, { 4, 0, 859 }, { 7, 11, 1046 }, - { 11, 11, 160 }, { 9, 0, 842 }, { 11, 10, 283 }, { 5, 10, 33 }, - { 6, 10, 470 }, { 11, 10, 424 }, { 6, 11, 45 }, { 7, 11, 433 }, - { 8, 11, 129 }, { 9, 11, 21 }, { 10, 11, 392 }, { 11, 11, 79 }, - { 12, 11, 499 }, { 13, 11, 199 }, { 13, 11, 451 }, { 7, 0, 1291 }, - { 7, 10, 1882 }, { 7, 11, 558 }, { 8, 11, 353 }, { 6, 0, 1482 }, - { 5, 0, 230 }, { 5, 0, 392 }, { 6, 0, 420 }, { 9, 0, 568 }, - { 12, 0, 612 }, { 6, 0, 262 }, { 7, 10, 90 }, { 7, 10, 664 }, - { 7, 10, 830 }, { 7, 10, 1380 }, { 7, 10, 2025 }, { 8, 11, 81 }, - { 8, 10, 448 }, { 8, 10, 828 }, { 9, 11, 189 }, { 9, 11, 201 }, - { 11, 11, 478 }, { 11, 11, 712 }, { 13, 11, 338 }, { 14, 0, 31 }, - { 5, 11, 353 }, { 23, 11, 26 }, { 4, 0, 753 }, { 4, 0, 0 }, - { 5, 0, 41 }, { 7, 0, 1459 }, { 7, 0, 1469 }, { 7, 0, 1859 }, - { 9, 0, 549 }, { 11, 0, 905 }, { 9, 10, 417 }, { 9, 10, 493 }, - { 7, 11, 1113 }, { 5, 0, 696 }, { 13, 11, 448 }, { 6, 10, 295 }, - { 4, 0, 834 }, { 4, 0, 771 }, { 5, 10, 1019 }, { 6, 11, 25 }, - { 7, 11, 855 }, { 7, 11, 1258 }, { 16, 11, 32 }, { 6, 0, 1076 }, - { 5, 0, 921 }, { 5, 0, 674 }, { 4, 11, 4 }, { 7, 11, 1118 }, - { 7, 11, 1320 }, { 7, 11, 1706 }, { 8, 11, 277 }, { 9, 11, 622 }, - { 10, 11, 9 }, { 11, 11, 724 }, { 12, 11, 350 }, { 12, 11, 397 }, - { 13, 11, 28 }, { 13, 11, 159 }, { 15, 11, 89 }, { 18, 11, 5 }, - { 19, 11, 9 }, { 20, 11, 34 }, { 22, 11, 47 }, { 6, 10, 208 }, - { 6, 0, 444 }, { 8, 0, 308 }, { 6, 0, 180 }, { 7, 0, 1137 }, - { 8, 0, 751 }, { 11, 0, 805 }, { 4, 0, 183 }, { 7, 0, 271 }, - { 11, 0, 824 }, { 11, 0, 952 }, { 13, 0, 278 }, { 13, 0, 339 }, - { 13, 0, 482 }, { 14, 0, 424 }, { 20, 0, 99 }, { 7, 11, 317 }, - { 7, 11, 569 }, { 4, 0, 19 }, { 5, 0, 477 }, { 5, 0, 596 }, - { 6, 0, 505 }, { 7, 0, 1221 }, { 11, 0, 907 }, { 12, 0, 209 }, - { 13, 0, 214 }, { 7, 0, 1215 }, { 6, 0, 271 }, { 7, 0, 398 }, - { 8, 0, 387 }, { 10, 0, 344 }, { 7, 10, 448 }, { 7, 10, 1629 }, - { 7, 10, 1813 }, { 8, 10, 442 }, { 9, 10, 710 }, { 10, 10, 282 }, - { 10, 10, 722 }, { 11, 10, 844 }, { 12, 10, 104 }, { 12, 10, 625 }, - { 6, 11, 255 }, { 5, 10, 787 }, { 6, 0, 1645 }, { 11, 11, 956 }, - { 23, 11, 3 }, { 6, 0, 92 }, { 6, 0, 188 }, { 7, 0, 209 }, - { 7, 0, 1269 }, { 7, 0, 1524 }, { 7, 0, 1876 }, { 8, 0, 661 }, - { 10, 0, 42 }, { 10, 0, 228 }, { 11, 0, 58 }, { 11, 0, 1020 }, - { 12, 0, 58 }, { 12, 0, 118 }, { 13, 0, 32 }, { 4, 0, 459 }, - { 5, 0, 966 }, { 4, 11, 536 }, { 7, 11, 1141 }, { 10, 11, 723 }, - { 11, 11, 371 }, { 12, 0, 330 }, { 6, 0, 1557 }, { 7, 11, 285 }, - { 7, 11, 876 }, { 8, 10, 491 }, { 7, 11, 560 }, { 6, 0, 18 }, - { 7, 0, 179 }, { 7, 0, 932 }, { 8, 0, 548 }, { 8, 0, 757 }, - { 9, 0, 54 }, { 9, 0, 65 }, { 9, 0, 532 }, { 9, 0, 844 }, - { 10, 0, 113 }, { 10, 0, 117 }, { 10, 0, 315 }, { 10, 0, 560 }, - { 10, 0, 622 }, { 10, 0, 798 }, { 11, 0, 153 }, { 11, 0, 351 }, - { 11, 0, 375 }, { 12, 0, 78 }, { 12, 0, 151 }, { 12, 0, 392 }, - { 12, 0, 666 }, { 14, 0, 248 }, { 15, 0, 23 }, { 6, 0, 1742 }, - { 4, 11, 690 }, { 4, 10, 403 }, { 5, 10, 441 }, { 7, 10, 450 }, - { 10, 10, 840 }, { 11, 10, 101 }, { 12, 10, 193 }, { 13, 10, 430 }, - { 5, 0, 965 }, { 6, 0, 182 }, { 10, 0, 65 }, { 10, 0, 488 }, - { 10, 0, 497 }, { 7, 11, 1346 }, { 6, 0, 973 }, { 6, 0, 1158 }, - { 10, 11, 200 }, { 19, 11, 2 }, { 23, 11, 22 }, { 4, 11, 190 }, - { 5, 11, 554 }, { 5, 10, 679 }, { 7, 0, 328 }, { 9, 10, 326 }, - { 5, 11, 1001 }, { 9, 0, 588 }, { 10, 0, 260 }, { 5, 11, 446 }, - { 7, 10, 1128 }, { 7, 10, 1796 }, { 19, 11, 119 }, { 6, 0, 1786 }, - { 6, 0, 1328 }, { 6, 0, 1985 }, { 8, 0, 962 }, { 10, 0, 1017 }, - { 7, 0, 308 }, { 11, 0, 508 }, { 4, 10, 574 }, { 7, 10, 350 }, - { 7, 10, 1024 }, { 8, 10, 338 }, { 9, 10, 677 }, { 10, 10, 808 }, - { 10, 11, 752 }, { 7, 10, 1081 }, { 9, 11, 96 }, { 7, 10, 1676 }, - { 7, 10, 2037 }, { 8, 0, 588 }, { 4, 11, 304 }, { 5, 0, 614 }, - { 12, 0, 793 }, { 8, 0, 287 }, { 9, 10, 297 }, { 13, 10, 37 }, - { 6, 11, 53 }, { 6, 11, 199 }, { 7, 11, 1408 }, { 8, 11, 32 }, - { 8, 11, 93 }, { 9, 11, 437 }, { 10, 11, 397 }, { 10, 11, 629 }, - { 11, 11, 593 }, { 11, 11, 763 }, { 13, 11, 326 }, { 17, 11, 35 }, - { 6, 11, 105 }, { 9, 11, 320 }, { 10, 11, 506 }, { 10, 11, 794 }, - { 5, 11, 114 }, { 5, 11, 255 }, { 13, 11, 285 }, { 12, 0, 290 }, - { 7, 11, 2035 }, { 8, 11, 19 }, { 9, 11, 89 }, { 10, 11, 831 }, - { 6, 0, 1136 }, { 7, 0, 719 }, { 8, 0, 796 }, { 8, 0, 809 }, - { 8, 0, 834 }, { 6, 10, 306 }, { 7, 10, 1140 }, { 7, 10, 1340 }, - { 8, 10, 133 }, { 10, 10, 449 }, { 11, 10, 1011 }, { 5, 0, 210 }, - { 6, 0, 213 }, { 7, 0, 60 }, { 10, 0, 364 }, { 11, 0, 135 }, - { 5, 0, 607 }, { 8, 0, 326 }, { 8, 0, 490 }, { 10, 11, 176 }, - { 4, 0, 701 }, { 5, 0, 472 }, { 7, 0, 380 }, { 9, 0, 758 }, - { 7, 0, 1947 }, { 6, 0, 1079 }, { 10, 0, 278 }, { 10, 11, 391 }, - { 5, 10, 329 }, { 8, 10, 260 }, { 11, 11, 156 }, { 4, 0, 386 }, - { 7, 0, 41 }, { 8, 0, 405 }, { 8, 0, 728 }, { 9, 0, 497 }, - { 11, 0, 110 }, { 11, 0, 360 }, { 15, 0, 37 }, { 16, 0, 84 }, - { 5, 0, 46 }, { 7, 0, 1452 }, { 7, 0, 1480 }, { 8, 0, 634 }, - { 12, 0, 472 }, { 8, 0, 961 }, { 4, 0, 524 }, { 8, 0, 810 }, - { 10, 0, 238 }, { 13, 0, 33 }, { 4, 10, 657 }, { 24, 10, 7 }, - { 5, 0, 532 }, { 5, 0, 997 }, { 7, 10, 1665 }, { 7, 11, 594 }, - { 7, 11, 851 }, { 7, 11, 1858 }, { 9, 11, 411 }, { 9, 11, 574 }, - { 9, 11, 666 }, { 9, 11, 737 }, { 10, 11, 346 }, { 10, 11, 712 }, - { 11, 11, 246 }, { 11, 11, 432 }, { 11, 11, 517 }, { 11, 11, 647 }, - { 11, 11, 679 }, { 11, 11, 727 }, { 12, 11, 304 }, { 12, 11, 305 }, - { 12, 11, 323 }, { 12, 11, 483 }, { 12, 11, 572 }, { 12, 11, 593 }, - { 12, 11, 602 }, { 13, 11, 95 }, { 13, 11, 101 }, { 13, 11, 171 }, - { 13, 11, 315 }, { 13, 11, 378 }, { 13, 11, 425 }, { 13, 11, 475 }, - { 14, 11, 63 }, { 14, 11, 380 }, { 14, 11, 384 }, { 15, 11, 133 }, - { 18, 11, 112 }, { 20, 11, 72 }, { 5, 11, 955 }, { 8, 11, 814 }, - { 6, 0, 1301 }, { 5, 10, 66 }, { 7, 10, 1896 }, { 8, 10, 288 }, - { 5, 11, 56 }, { 6, 10, 1643 }, { 6, 0, 1298 }, { 20, 11, 100 }, - { 5, 0, 782 }, { 5, 0, 829 }, { 6, 0, 671 }, { 6, 0, 1156 }, - { 6, 0, 1738 }, { 9, 11, 621 }, { 4, 0, 306 }, { 5, 0, 570 }, - { 7, 0, 1347 }, { 5, 10, 91 }, { 5, 10, 648 }, { 5, 10, 750 }, - { 5, 10, 781 }, { 6, 10, 54 }, { 6, 10, 112 }, { 6, 10, 402 }, - { 6, 10, 1732 }, { 7, 10, 315 }, { 7, 10, 749 }, { 7, 10, 1900 }, - { 9, 10, 78 }, { 9, 10, 508 }, { 10, 10, 611 }, { 10, 10, 811 }, - { 11, 10, 510 }, { 11, 10, 728 }, { 13, 10, 36 }, { 14, 10, 39 }, - { 16, 10, 83 }, { 17, 10, 124 }, { 20, 10, 30 }, { 8, 10, 570 }, - { 9, 11, 477 }, { 13, 11, 78 }, { 4, 11, 639 }, { 10, 11, 4 }, - { 10, 10, 322 }, { 10, 10, 719 }, { 11, 10, 407 }, { 11, 11, 638 }, - { 12, 11, 177 }, { 20, 11, 57 }, { 7, 0, 1823 }, { 11, 0, 693 }, - { 7, 0, 759 }, { 5, 11, 758 }, { 8, 10, 125 }, { 8, 10, 369 }, - { 8, 10, 524 }, { 10, 10, 486 }, { 11, 10, 13 }, { 11, 10, 381 }, - { 11, 10, 736 }, { 11, 10, 766 }, { 11, 10, 845 }, { 13, 10, 114 }, - { 13, 10, 292 }, { 14, 10, 47 }, { 7, 0, 1932 }, { 6, 10, 1684 }, - { 6, 10, 1731 }, { 7, 10, 356 }, { 8, 10, 54 }, { 8, 10, 221 }, - { 9, 10, 225 }, { 9, 10, 356 }, { 10, 10, 77 }, { 10, 10, 446 }, - { 10, 10, 731 }, { 12, 10, 404 }, { 13, 10, 491 }, { 7, 11, 552 }, - { 7, 11, 1112 }, { 4, 0, 78 }, { 5, 0, 96 }, { 5, 0, 182 }, - { 6, 0, 1257 }, { 7, 0, 1724 }, { 7, 0, 1825 }, { 10, 0, 394 }, - { 10, 0, 471 }, { 11, 0, 532 }, { 14, 0, 340 }, { 17, 0, 88 }, - { 11, 11, 328 }, { 7, 0, 1964 }, { 4, 10, 411 }, { 4, 10, 80 }, - { 5, 10, 44 }, { 9, 11, 133 }, { 5, 11, 110 }, { 6, 11, 169 }, - { 6, 11, 1702 }, { 7, 11, 400 }, { 8, 11, 538 }, { 9, 11, 184 }, - { 9, 11, 524 }, { 12, 11, 218 }, { 4, 0, 521 }, { 5, 10, 299 }, - { 7, 10, 1083 }, { 12, 11, 554 }, { 6, 11, 133 }, { 9, 11, 353 }, - { 12, 11, 628 }, { 18, 11, 79 }, { 6, 0, 215 }, { 7, 0, 584 }, - { 7, 0, 1028 }, { 7, 0, 1473 }, { 7, 0, 1721 }, { 9, 0, 424 }, - { 10, 0, 779 }, { 7, 0, 857 }, { 7, 0, 1209 }, { 7, 10, 1713 }, - { 9, 10, 537 }, { 10, 10, 165 }, { 12, 10, 219 }, { 12, 10, 561 }, - { 4, 10, 219 }, { 6, 11, 93 }, { 7, 11, 1422 }, { 7, 10, 1761 }, - { 7, 11, 1851 }, { 8, 11, 673 }, { 9, 10, 86 }, { 9, 11, 529 }, - { 12, 11, 43 }, { 9, 11, 371 }, { 8, 0, 671 }, { 5, 0, 328 }, - { 7, 0, 918 }, { 4, 0, 529 }, { 9, 11, 25 }, { 10, 11, 467 }, - { 10, 11, 559 }, { 4, 11, 335 }, { 7, 11, 942 }, { 6, 0, 716 }, - { 6, 0, 1509 }, { 6, 0, 67 }, { 7, 0, 258 }, { 7, 0, 1630 }, - { 9, 0, 354 }, { 9, 0, 675 }, { 10, 0, 830 }, { 14, 0, 80 }, - { 17, 0, 80 }, { 12, 10, 428 }, { 6, 0, 1112 }, { 6, 0, 141 }, - { 7, 0, 225 }, { 9, 0, 59 }, { 9, 0, 607 }, { 10, 0, 312 }, - { 11, 0, 687 }, { 12, 0, 555 }, { 13, 0, 373 }, { 13, 0, 494 }, - { 20, 0, 58 }, { 5, 10, 514 }, { 8, 11, 39 }, { 10, 11, 773 }, - { 11, 11, 84 }, { 12, 11, 205 }, { 14, 11, 1 }, { 8, 0, 783 }, - { 5, 11, 601 }, { 5, 11, 870 }, { 8, 11, 594 }, { 4, 10, 55 }, - { 5, 10, 301 }, { 6, 10, 571 }, { 14, 10, 49 }, { 18, 10, 102 }, - { 4, 11, 181 }, { 6, 11, 1652 }, { 5, 10, 364 }, { 4, 11, 97 }, - { 5, 11, 147 }, { 6, 11, 286 }, { 7, 11, 1362 }, { 13, 11, 176 }, - { 4, 10, 76 }, { 7, 10, 1550 }, { 9, 10, 306 }, { 9, 10, 430 }, - { 9, 10, 663 }, { 10, 10, 683 }, { 11, 10, 427 }, { 11, 10, 753 }, - { 12, 10, 334 }, { 12, 10, 442 }, { 14, 10, 258 }, { 14, 10, 366 }, - { 15, 10, 131 }, { 9, 10, 52 }, { 6, 0, 955 }, { 6, 0, 1498 }, - { 6, 11, 375 }, { 7, 11, 169 }, { 7, 11, 254 }, { 8, 11, 780 }, - { 7, 0, 430 }, { 11, 0, 46 }, { 14, 0, 343 }, { 14, 11, 343 }, - { 7, 0, 1183 }, { 5, 0, 602 }, { 7, 0, 2018 }, { 9, 0, 418 }, - { 9, 0, 803 }, { 7, 11, 1447 }, { 8, 0, 677 }, { 7, 11, 1044 }, - { 11, 11, 285 }, { 4, 10, 656 }, { 7, 10, 779 }, { 7, 10, 144 }, - { 5, 11, 629 }, { 7, 11, 1549 }, { 7, 10, 1373 }, { 10, 11, 209 }, - { 7, 10, 554 }, { 7, 10, 605 }, { 13, 10, 10 }, { 5, 10, 838 }, - { 5, 10, 841 }, { 6, 10, 1649 }, { 5, 10, 1012 }, { 6, 0, 1357 }, - { 6, 0, 1380 }, { 16, 0, 53 }, { 6, 0, 590 }, { 7, 10, 365 }, - { 7, 10, 1357 }, { 7, 10, 1497 }, { 8, 10, 154 }, { 13, 10, 281 }, - { 5, 10, 340 }, { 4, 11, 420 }, { 7, 0, 329 }, { 19, 11, 32 }, - { 4, 0, 469 }, { 10, 11, 429 }, { 11, 10, 495 }, { 8, 10, 261 }, - { 9, 10, 144 }, { 9, 10, 466 }, { 10, 10, 370 }, { 12, 10, 470 }, - { 13, 10, 144 }, { 14, 10, 348 }, { 14, 0, 460 }, { 4, 11, 325 }, - { 9, 10, 897 }, { 10, 11, 125 }, { 6, 0, 1743 }, { 6, 10, 248 }, - { 9, 10, 546 }, { 10, 10, 535 }, { 11, 10, 681 }, { 13, 10, 135 }, - { 4, 0, 990 }, { 5, 0, 929 }, { 6, 0, 340 }, { 8, 0, 376 }, - { 8, 0, 807 }, { 8, 0, 963 }, { 8, 0, 980 }, { 10, 0, 1007 }, - { 6, 0, 1603 }, { 12, 0, 250 }, { 4, 11, 714 }, { 5, 11, 469 }, - { 6, 10, 567 }, { 8, 10, 445 }, { 5, 0, 218 }, { 7, 0, 1610 }, - { 8, 0, 646 }, { 10, 0, 83 }, { 11, 11, 138 }, { 12, 11, 40 }, - { 7, 0, 1512 }, { 7, 0, 1794 }, { 7, 11, 1216 }, { 11, 0, 0 }, - { 16, 0, 78 }, { 4, 11, 718 }, { 5, 0, 571 }, { 4, 0, 455 }, - { 6, 0, 1012 }, { 5, 11, 124 }, { 5, 11, 144 }, { 6, 11, 548 }, - { 7, 11, 15 }, { 7, 11, 153 }, { 9, 11, 629 }, { 14, 11, 10 }, - { 6, 11, 75 }, { 7, 11, 1531 }, { 8, 11, 416 }, { 9, 11, 240 }, - { 9, 11, 275 }, { 10, 11, 100 }, { 11, 11, 658 }, { 11, 11, 979 }, - { 12, 11, 86 }, { 13, 11, 468 }, { 14, 11, 66 }, { 14, 11, 207 }, - { 15, 11, 20 }, { 15, 11, 25 }, { 16, 11, 58 }, { 4, 10, 577 }, - { 5, 11, 141 }, { 5, 11, 915 }, { 6, 11, 1783 }, { 7, 11, 211 }, - { 7, 11, 698 }, { 7, 11, 1353 }, { 9, 11, 83 }, { 9, 11, 281 }, - { 10, 11, 376 }, { 10, 11, 431 }, { 11, 11, 543 }, { 12, 11, 664 }, - { 13, 11, 280 }, { 13, 11, 428 }, { 14, 11, 61 }, { 14, 11, 128 }, - { 17, 11, 52 }, { 17, 11, 81 }, { 6, 0, 161 }, { 7, 0, 372 }, - { 9, 0, 597 }, { 4, 0, 349 }, { 10, 11, 702 }, { 11, 11, 245 }, - { 6, 0, 524 }, { 6, 10, 174 }, { 6, 0, 432 }, { 9, 0, 751 }, - { 11, 0, 322 }, { 19, 11, 94 }, { 4, 11, 338 }, { 5, 11, 400 }, - { 5, 0, 468 }, { 10, 0, 325 }, { 11, 0, 856 }, { 12, 0, 345 }, - { 15, 0, 104 }, { 5, 0, 223 }, { 4, 0, 566 }, { 4, 11, 221 }, - { 5, 11, 659 }, { 5, 11, 989 }, { 7, 11, 697 }, { 7, 11, 1211 }, - { 10, 11, 284 }, { 7, 11, 1070 }, { 4, 0, 59 }, { 7, 0, 1394 }, - { 6, 0, 436 }, { 11, 0, 481 }, { 5, 10, 878 }, { 5, 10, 972 }, - { 4, 0, 48 }, { 5, 0, 271 }, { 7, 0, 953 }, { 5, 0, 610 }, - { 8, 0, 457 }, { 4, 0, 773 }, { 5, 0, 618 }, { 9, 0, 756 }, - { 5, 0, 755 }, { 7, 0, 1217 }, { 10, 11, 507 }, { 4, 10, 351 }, - { 4, 0, 197 }, { 15, 11, 78 }, { 4, 11, 188 }, { 7, 11, 805 }, - { 11, 11, 276 }, { 14, 11, 293 }, { 5, 11, 884 }, { 11, 11, 991 }, - { 4, 10, 286 }, { 10, 0, 259 }, { 10, 0, 428 }, { 7, 10, 438 }, - { 7, 10, 627 }, { 7, 10, 1516 }, { 8, 10, 40 }, { 9, 10, 56 }, - { 9, 10, 294 }, { 11, 10, 969 }, { 11, 10, 995 }, { 18, 10, 148 }, - { 4, 0, 356 }, { 5, 0, 217 }, { 5, 0, 492 }, { 5, 0, 656 }, - { 8, 0, 544 }, { 8, 11, 544 }, { 5, 0, 259 }, { 6, 0, 1230 }, - { 7, 0, 414 }, { 7, 0, 854 }, { 14, 0, 107 }, { 4, 0, 1007 }, - { 15, 0, 14 }, { 16, 0, 5 }, { 6, 0, 1580 }, { 4, 10, 738 }, - { 4, 11, 596 }, { 4, 0, 673 }, { 5, 10, 866 }, { 6, 0, 1843 }, - { 7, 11, 1847 }, { 4, 0, 165 }, { 7, 0, 1398 }, { 7, 0, 1829 }, - { 7, 11, 1634 }, { 19, 11, 65 }, { 6, 0, 885 }, { 6, 0, 1009 }, - { 9, 0, 809 }, { 5, 10, 116 }, { 4, 10, 457 }, { 8, 11, 770 }, - { 9, 0, 498 }, { 12, 0, 181 }, { 10, 11, 361 }, { 14, 11, 316 }, - { 6, 11, 595 }, { 5, 0, 9 }, { 7, 0, 297 }, { 7, 0, 966 }, - { 12, 0, 306 }, { 4, 11, 89 }, { 5, 11, 489 }, { 6, 11, 315 }, - { 7, 11, 553 }, { 7, 11, 1745 }, { 10, 11, 243 }, { 6, 0, 1487 }, - { 4, 0, 437 }, { 5, 0, 146 }, { 6, 0, 411 }, { 10, 0, 721 }, - { 5, 10, 527 }, { 6, 10, 189 }, { 7, 10, 859 }, { 11, 10, 104 }, - { 11, 10, 554 }, { 15, 10, 60 }, { 15, 10, 125 }, { 6, 11, 1658 }, - { 9, 11, 3 }, { 10, 11, 154 }, { 11, 11, 641 }, { 13, 11, 85 }, - { 13, 11, 201 }, { 13, 11, 346 }, { 6, 0, 177 }, { 7, 0, 467 }, - { 6, 0, 1377 }, { 6, 10, 116 }, { 8, 11, 645 }, { 4, 11, 166 }, - { 5, 11, 505 }, { 6, 11, 1670 }, { 9, 11, 110 }, { 5, 10, 487 }, - { 4, 10, 86 }, { 5, 10, 667 }, { 5, 10, 753 }, { 6, 10, 316 }, - { 6, 10, 455 }, { 7, 10, 946 }, { 5, 0, 200 }, { 4, 0, 959 }, - { 6, 0, 1928 }, { 6, 0, 1957 }, { 11, 11, 203 }, { 22, 10, 45 }, - { 4, 10, 79 }, { 7, 10, 1773 }, { 10, 10, 450 }, { 11, 10, 589 }, - { 13, 10, 332 }, { 13, 10, 493 }, { 14, 10, 183 }, { 14, 10, 334 }, - { 14, 10, 362 }, { 14, 10, 368 }, { 14, 10, 376 }, { 14, 10, 379 }, - { 19, 10, 90 }, { 19, 10, 103 }, { 19, 10, 127 }, { 20, 10, 90 }, - { 6, 0, 1435 }, { 7, 11, 1275 }, { 6, 0, 481 }, { 7, 11, 445 }, - { 8, 11, 307 }, { 8, 11, 704 }, { 10, 11, 41 }, { 10, 11, 439 }, - { 11, 11, 237 }, { 11, 11, 622 }, { 12, 11, 201 }, { 7, 11, 869 }, - { 4, 0, 84 }, { 7, 0, 1482 }, { 10, 0, 76 }, { 10, 0, 142 }, - { 11, 11, 277 }, { 16, 11, 14 }, { 7, 11, 1977 }, { 4, 11, 189 }, - { 5, 11, 713 }, { 8, 11, 57 }, { 5, 0, 1015 }, { 10, 11, 371 }, - { 4, 0, 315 }, { 5, 0, 507 }, { 7, 0, 1370 }, { 4, 11, 552 }, - { 14, 10, 381 }, { 9, 0, 759 }, { 16, 0, 31 }, { 16, 0, 39 }, - { 16, 0, 75 }, { 18, 0, 24 }, { 20, 0, 42 }, { 24, 0, 1 }, - { 6, 0, 712 }, { 6, 0, 1722 }, { 5, 10, 663 }, { 5, 10, 846 }, - { 8, 0, 222 }, { 8, 0, 476 }, { 9, 0, 238 }, { 11, 0, 516 }, - { 11, 0, 575 }, { 15, 0, 109 }, { 18, 0, 100 }, { 7, 0, 1402 }, - { 7, 0, 1414 }, { 12, 0, 456 }, { 5, 10, 378 }, { 8, 10, 465 }, - { 9, 10, 286 }, { 10, 10, 185 }, { 10, 10, 562 }, { 10, 10, 635 }, - { 11, 10, 31 }, { 11, 10, 393 }, { 13, 10, 312 }, { 18, 10, 65 }, - { 18, 10, 96 }, { 19, 10, 89 }, { 4, 0, 986 }, { 6, 0, 1958 }, - { 6, 0, 2032 }, { 8, 0, 934 }, { 10, 0, 985 }, { 7, 10, 1880 }, - { 9, 10, 680 }, { 11, 10, 798 }, { 6, 10, 1770 }, { 17, 11, 49 }, - { 4, 11, 614 }, { 4, 10, 648 }, { 5, 10, 945 }, { 6, 10, 1656 }, - { 6, 10, 1787 }, { 7, 10, 167 }, { 8, 10, 824 }, { 9, 10, 391 }, - { 10, 10, 375 }, { 11, 10, 185 }, { 10, 11, 661 }, { 7, 0, 1273 }, - { 7, 11, 1945 }, { 7, 0, 706 }, { 7, 0, 1058 }, { 10, 0, 538 }, - { 7, 10, 1645 }, { 8, 10, 352 }, { 9, 10, 249 }, { 4, 10, 152 }, - { 11, 0, 92 }, { 11, 0, 196 }, { 11, 0, 409 }, { 11, 0, 450 }, - { 11, 0, 666 }, { 11, 0, 777 }, { 12, 0, 262 }, { 13, 0, 385 }, - { 13, 0, 393 }, { 15, 0, 115 }, { 16, 0, 45 }, { 17, 0, 82 }, - { 5, 10, 1006 }, { 6, 0, 40 }, { 7, 0, 1781 }, { 9, 11, 614 }, - { 11, 11, 327 }, { 5, 10, 420 }, { 7, 10, 1449 }, { 7, 0, 431 }, - { 10, 0, 97 }, { 7, 10, 832 }, { 6, 0, 423 }, { 7, 0, 665 }, - { 7, 0, 1210 }, { 7, 0, 237 }, { 8, 0, 664 }, { 9, 0, 42 }, - { 9, 0, 266 }, { 9, 0, 380 }, { 9, 0, 645 }, { 10, 0, 177 }, - { 10, 0, 276 }, { 7, 0, 264 }, { 5, 10, 351 }, { 8, 0, 213 }, - { 5, 10, 40 }, { 7, 10, 598 }, { 7, 10, 1638 }, { 9, 10, 166 }, - { 9, 10, 640 }, { 9, 10, 685 }, { 9, 10, 773 }, { 11, 10, 215 }, - { 13, 10, 65 }, { 14, 10, 172 }, { 14, 10, 317 }, { 17, 10, 6 }, - { 5, 11, 84 }, { 6, 11, 163 }, { 8, 10, 60 }, { 9, 10, 343 }, - { 11, 10, 769 }, { 9, 0, 455 }, { 5, 11, 410 }, { 8, 0, 906 }, - { 12, 0, 700 }, { 12, 0, 706 }, { 12, 0, 729 }, { 21, 11, 33 }, - { 22, 11, 40 }, { 7, 10, 1951 }, { 8, 10, 765 }, { 8, 10, 772 }, - { 12, 10, 671 }, { 7, 10, 108 }, { 8, 10, 219 }, { 8, 10, 388 }, - { 9, 10, 639 }, { 9, 10, 775 }, { 11, 10, 275 }, { 12, 10, 464 }, - { 5, 11, 322 }, { 7, 11, 1941 }, { 8, 11, 186 }, { 9, 11, 262 }, - { 10, 11, 187 }, { 14, 11, 208 }, { 18, 11, 130 }, { 11, 0, 624 }, - { 8, 0, 574 }, { 5, 11, 227 }, { 12, 11, 29 }, { 7, 11, 1546 }, - { 11, 11, 299 }, { 14, 11, 407 }, { 5, 10, 15 }, { 6, 10, 56 }, - { 7, 10, 1758 }, { 8, 10, 500 }, { 9, 10, 730 }, { 11, 10, 331 }, - { 13, 10, 150 }, { 14, 10, 282 }, { 7, 11, 1395 }, { 8, 11, 486 }, - { 9, 11, 236 }, { 9, 11, 878 }, { 10, 11, 218 }, { 11, 11, 95 }, - { 19, 11, 17 }, { 19, 11, 31 }, { 7, 11, 2043 }, { 4, 0, 354 }, - { 18, 11, 4 }, { 12, 11, 80 }, { 7, 0, 1558 }, { 6, 10, 1886 }, - { 5, 10, 205 }, { 6, 10, 438 }, { 9, 10, 711 }, { 5, 11, 522 }, - { 5, 10, 534 }, { 7, 0, 235 }, { 7, 0, 1475 }, { 15, 0, 68 }, - { 18, 0, 120 }, { 9, 10, 691 }, { 4, 0, 942 }, { 6, 0, 1813 }, - { 8, 0, 917 }, { 10, 0, 884 }, { 12, 0, 696 }, { 12, 0, 717 }, - { 12, 0, 723 }, { 12, 0, 738 }, { 12, 0, 749 }, { 12, 0, 780 }, - { 16, 0, 97 }, { 18, 0, 169 }, { 6, 10, 443 }, { 8, 11, 562 }, - { 9, 10, 237 }, { 9, 10, 571 }, { 9, 10, 695 }, { 10, 10, 139 }, - { 11, 10, 715 }, { 12, 10, 417 }, { 13, 10, 421 }, { 7, 0, 957 }, - { 5, 0, 830 }, { 6, 11, 1771 }, { 18, 0, 23 }, { 5, 0, 496 }, - { 6, 0, 694 }, { 7, 0, 203 }, { 7, 11, 1190 }, { 9, 11, 620 }, - { 9, 11, 132 }, { 6, 0, 547 }, { 6, 0, 1549 }, { 8, 11, 258 }, - { 9, 11, 208 }, { 9, 11, 359 }, { 4, 0, 864 }, { 5, 0, 88 }, - { 9, 0, 239 }, { 7, 11, 493 }, { 4, 11, 317 }, { 7, 11, 1279 }, - { 4, 11, 477 }, { 4, 10, 578 }, { 5, 11, 63 }, { 5, 11, 509 }, - { 7, 0, 650 }, { 7, 0, 1310 }, { 7, 0, 1076 }, { 9, 0, 80 }, - { 11, 0, 78 }, { 11, 0, 421 }, { 11, 0, 534 }, { 12, 0, 545 }, - { 4, 11, 288 }, { 12, 0, 553 }, { 14, 0, 118 }, { 5, 10, 923 }, - { 7, 0, 274 }, { 11, 0, 479 }, { 11, 0, 507 }, { 8, 11, 89 }, - { 8, 11, 620 }, { 9, 11, 49 }, { 10, 11, 774 }, { 11, 11, 628 }, - { 12, 11, 322 }, { 15, 11, 124 }, { 4, 0, 497 }, { 7, 0, 1584 }, - { 7, 0, 261 }, { 7, 0, 1115 }, { 7, 0, 1354 }, { 7, 0, 1404 }, - { 7, 0, 1588 }, { 7, 0, 1705 }, { 7, 0, 1902 }, { 9, 0, 465 }, - { 10, 0, 248 }, { 10, 0, 349 }, { 10, 0, 647 }, { 11, 0, 527 }, - { 11, 0, 660 }, { 11, 0, 669 }, { 12, 0, 529 }, { 13, 0, 305 }, - { 4, 10, 924 }, { 5, 10, 665 }, { 8, 0, 13 }, { 6, 0, 791 }, - { 10, 11, 120 }, { 7, 0, 642 }, { 8, 0, 250 }, { 11, 0, 123 }, - { 11, 0, 137 }, { 13, 0, 48 }, { 14, 0, 95 }, { 4, 10, 265 }, - { 7, 10, 807 }, { 7, 10, 950 }, { 5, 10, 93 }, { 12, 10, 267 }, - { 7, 0, 1429 }, { 4, 0, 949 }, { 10, 0, 885 }, { 10, 0, 891 }, - { 10, 0, 900 }, { 10, 0, 939 }, { 12, 0, 760 }, { 14, 0, 449 }, - { 11, 11, 366 }, { 4, 0, 818 }, { 6, 11, 85 }, { 7, 10, 994 }, - { 7, 0, 330 }, { 5, 10, 233 }, { 5, 10, 320 }, { 6, 10, 140 }, - { 8, 10, 295 }, { 4, 0, 1004 }, { 8, 0, 982 }, { 8, 0, 993 }, - { 5, 10, 978 }, { 4, 10, 905 }, { 6, 10, 1701 }, { 9, 10, 843 }, - { 10, 0, 545 }, { 12, 0, 301 }, { 6, 0, 947 }, { 6, 0, 1062 }, - { 6, 0, 1188 }, { 4, 0, 904 }, { 5, 0, 794 }, { 24, 10, 6 }, - { 6, 0, 1372 }, { 7, 11, 608 }, { 5, 11, 279 }, { 6, 11, 235 }, - { 7, 11, 468 }, { 8, 11, 446 }, { 9, 11, 637 }, { 10, 11, 717 }, - { 11, 11, 738 }, { 12, 11, 514 }, { 4, 10, 509 }, { 5, 11, 17 }, - { 6, 11, 371 }, { 9, 11, 528 }, { 4, 0, 693 }, { 4, 11, 115 }, - { 5, 11, 669 }, { 6, 11, 407 }, { 8, 11, 311 }, { 11, 11, 10 }, - { 13, 11, 5 }, { 11, 0, 377 }, { 7, 10, 273 }, { 9, 11, 381 }, - { 7, 0, 695 }, { 7, 0, 386 }, { 10, 0, 713 }, { 7, 10, 1041 }, - { 6, 0, 1291 }, { 6, 0, 7 }, { 6, 0, 35 }, { 7, 0, 147 }, - { 7, 0, 1069 }, { 7, 0, 1568 }, { 7, 0, 1575 }, { 7, 0, 1917 }, - { 8, 0, 43 }, { 8, 0, 208 }, { 9, 0, 128 }, { 9, 0, 866 }, - { 10, 0, 20 }, { 11, 0, 981 }, { 19, 0, 33 }, { 7, 0, 893 }, - { 13, 0, 424 }, { 11, 10, 234 }, { 22, 11, 56 }, { 5, 11, 779 }, - { 5, 11, 807 }, { 6, 11, 1655 }, { 6, 11, 1676 }, { 5, 10, 802 }, - { 7, 10, 2021 }, { 8, 10, 805 }, { 4, 11, 196 }, { 5, 10, 167 }, - { 5, 11, 558 }, { 5, 10, 899 }, { 5, 11, 949 }, { 6, 10, 410 }, - { 9, 10, 777 }, { 9, 10, 789 }, { 6, 10, 1705 }, { 8, 0, 904 }, - { 12, 0, 787 }, { 6, 0, 322 }, { 9, 0, 552 }, { 11, 0, 274 }, - { 13, 0, 209 }, { 13, 0, 499 }, { 14, 0, 85 }, { 15, 0, 126 }, - { 17, 0, 70 }, { 7, 10, 10 }, { 5, 10, 11 }, { 6, 10, 117 }, - { 6, 10, 485 }, { 7, 10, 1133 }, { 9, 10, 582 }, { 9, 10, 594 }, - { 11, 10, 21 }, { 11, 10, 818 }, { 12, 10, 535 }, { 13, 10, 86 }, - { 4, 10, 264 }, { 7, 10, 1067 }, { 8, 10, 204 }, { 8, 10, 385 }, - { 11, 10, 953 }, { 4, 11, 752 }, { 10, 10, 56 }, { 5, 10, 470 }, - { 6, 0, 1808 }, { 8, 0, 83 }, { 8, 0, 742 }, { 8, 0, 817 }, - { 9, 0, 28 }, { 9, 0, 29 }, { 9, 0, 885 }, { 10, 0, 387 }, - { 11, 0, 633 }, { 11, 0, 740 }, { 13, 0, 235 }, { 13, 0, 254 }, - { 15, 0, 143 }, { 15, 0, 146 }, { 12, 0, 49 }, { 6, 0, 1832 }, - { 4, 11, 227 }, { 5, 11, 159 }, { 5, 11, 409 }, { 7, 11, 80 }, - { 10, 11, 294 }, { 10, 11, 479 }, { 12, 11, 418 }, { 14, 11, 50 }, - { 14, 11, 249 }, { 14, 11, 295 }, { 7, 11, 1470 }, { 8, 11, 66 }, - { 8, 11, 137 }, { 8, 11, 761 }, { 9, 11, 638 }, { 11, 11, 80 }, - { 11, 11, 212 }, { 11, 11, 368 }, { 11, 11, 418 }, { 12, 11, 8 }, - { 13, 11, 15 }, { 16, 11, 61 }, { 17, 11, 59 }, { 19, 11, 28 }, - { 20, 11, 84 }, { 11, 10, 1015 }, { 10, 11, 468 }, { 7, 0, 421 }, - { 6, 0, 415 }, { 7, 0, 1049 }, { 9, 0, 442 }, { 6, 11, 38 }, - { 7, 11, 1220 }, { 8, 11, 185 }, { 8, 11, 256 }, { 9, 11, 22 }, - { 9, 11, 331 }, { 10, 11, 738 }, { 11, 11, 205 }, { 11, 11, 540 }, - { 11, 11, 746 }, { 13, 11, 399 }, { 13, 11, 465 }, { 14, 11, 88 }, - { 14, 11, 194 }, { 11, 0, 289 }, { 5, 10, 715 }, { 4, 0, 110 }, - { 10, 0, 415 }, { 10, 0, 597 }, { 14, 0, 206 }, { 4, 11, 159 }, - { 6, 11, 115 }, { 7, 11, 252 }, { 7, 11, 257 }, { 7, 11, 1928 }, - { 8, 11, 69 }, { 9, 11, 384 }, { 10, 11, 91 }, { 10, 11, 615 }, - { 12, 11, 375 }, { 14, 11, 235 }, { 18, 11, 117 }, { 19, 11, 123 }, - { 5, 11, 911 }, { 8, 11, 278 }, { 7, 0, 205 }, { 7, 0, 2000 }, - { 8, 10, 794 }, { 9, 10, 400 }, { 10, 10, 298 }, { 14, 10, 228 }, - { 7, 11, 1774 }, { 4, 11, 151 }, { 7, 11, 1567 }, { 8, 11, 351 }, - { 9, 11, 322 }, { 8, 10, 724 }, { 5, 11, 990 }, { 7, 0, 1539 }, - { 11, 0, 512 }, { 13, 0, 205 }, { 19, 0, 30 }, { 22, 0, 36 }, - { 23, 0, 19 }, { 7, 11, 1539 }, { 5, 11, 194 }, { 7, 11, 1662 }, - { 9, 11, 90 }, { 12, 11, 180 }, { 6, 10, 190 }, { 7, 10, 768 }, - { 7, 10, 1170 }, { 6, 0, 1340 }, { 4, 0, 283 }, { 7, 0, 1194 }, - { 5, 11, 425 }, { 5, 11, 971 }, { 12, 0, 549 }, { 14, 10, 67 }, - { 19, 10, 60 }, { 7, 10, 1023 }, { 6, 0, 1720 }, { 10, 11, 587 }, - { 5, 11, 72 }, { 6, 11, 264 }, { 7, 11, 21 }, { 7, 11, 46 }, - { 7, 11, 2013 }, { 8, 11, 215 }, { 8, 11, 513 }, { 10, 11, 266 }, - { 11, 11, 22 }, { 5, 0, 319 }, { 7, 0, 534 }, { 6, 10, 137 }, - { 9, 10, 75 }, { 9, 10, 253 }, { 10, 10, 194 }, { 10, 10, 444 }, - { 7, 0, 1180 }, { 20, 0, 112 }, { 6, 11, 239 }, { 7, 11, 118 }, - { 10, 11, 95 }, { 11, 11, 603 }, { 13, 11, 443 }, { 14, 11, 160 }, - { 15, 11, 4 }, { 6, 11, 431 }, { 5, 11, 874 }, { 6, 11, 1677 }, - { 11, 10, 643 }, { 12, 10, 115 }, { 15, 11, 0 }, { 6, 0, 967 }, - { 6, 11, 65 }, { 7, 11, 939 }, { 7, 11, 1172 }, { 7, 11, 1671 }, - { 9, 11, 540 }, { 10, 11, 696 }, { 11, 11, 265 }, { 11, 11, 732 }, - { 11, 11, 928 }, { 11, 11, 937 }, { 12, 11, 399 }, { 13, 11, 438 }, - { 21, 11, 19 }, { 9, 11, 200 }, { 7, 0, 1940 }, { 5, 10, 760 }, - { 7, 10, 542 }, { 8, 10, 135 }, { 8, 10, 496 }, { 12, 11, 44 }, - { 7, 11, 1655 }, { 8, 11, 305 }, { 7, 10, 319 }, { 7, 10, 355 }, - { 7, 10, 763 }, { 10, 10, 389 }, { 17, 10, 43 }, { 8, 0, 735 }, - { 10, 10, 786 }, { 9, 11, 19 }, { 4, 11, 696 }, { 5, 0, 132 }, - { 9, 0, 486 }, { 9, 0, 715 }, { 10, 0, 458 }, { 11, 0, 373 }, - { 11, 0, 668 }, { 11, 0, 795 }, { 11, 0, 897 }, { 12, 0, 272 }, - { 12, 0, 424 }, { 12, 0, 539 }, { 12, 0, 558 }, { 14, 0, 245 }, - { 14, 0, 263 }, { 14, 0, 264 }, { 14, 0, 393 }, { 14, 0, 403 }, - { 10, 0, 38 }, { 11, 0, 784 }, { 4, 0, 838 }, { 4, 11, 302 }, - { 7, 11, 1766 }, { 5, 0, 379 }, { 5, 0, 8 }, { 6, 0, 89 }, - { 6, 0, 400 }, { 7, 0, 1569 }, { 7, 0, 1623 }, { 7, 0, 1850 }, - { 8, 0, 218 }, { 8, 0, 422 }, { 9, 0, 570 }, { 10, 0, 626 }, - { 4, 11, 726 }, { 5, 11, 630 }, { 4, 0, 1017 }, { 10, 0, 660 }, - { 6, 0, 387 }, { 7, 0, 882 }, { 13, 0, 111 }, { 6, 0, 224 }, - { 7, 0, 877 }, { 9, 0, 647 }, { 4, 10, 58 }, { 5, 10, 286 }, - { 6, 10, 319 }, { 7, 10, 402 }, { 7, 10, 1254 }, { 7, 10, 1903 }, - { 8, 10, 356 }, { 12, 10, 408 }, { 7, 0, 790 }, { 9, 0, 510 }, - { 10, 0, 53 }, { 4, 10, 389 }, { 9, 10, 181 }, { 10, 10, 29 }, - { 10, 10, 816 }, { 11, 10, 311 }, { 11, 10, 561 }, { 12, 10, 67 }, - { 13, 10, 181 }, { 14, 0, 458 }, { 6, 11, 118 }, { 7, 11, 215 }, - { 7, 11, 1521 }, { 12, 11, 11 }, { 6, 0, 954 }, { 7, 0, 394 }, - { 6, 0, 1367 }, { 5, 11, 225 }, { 5, 10, 373 }, { 4, 0, 882 }, - { 7, 0, 1409 }, { 7, 10, 1972 }, { 7, 10, 1793 }, { 4, 11, 370 }, - { 5, 11, 756 }, { 7, 11, 1326 }, { 22, 11, 13 }, { 7, 11, 354 }, - { 10, 11, 410 }, { 11, 11, 815 }, { 6, 11, 1662 }, { 7, 11, 48 }, - { 8, 11, 771 }, { 10, 11, 116 }, { 13, 11, 104 }, { 14, 11, 105 }, - { 14, 11, 184 }, { 15, 11, 168 }, { 19, 11, 92 }, { 20, 11, 68 }, - { 7, 0, 124 }, { 8, 0, 38 }, { 5, 0, 261 }, { 7, 0, 78 }, - { 7, 0, 199 }, { 8, 0, 815 }, { 9, 0, 126 }, { 10, 0, 342 }, - { 12, 0, 647 }, { 4, 0, 628 }, { 12, 0, 724 }, { 7, 0, 266 }, - { 8, 0, 804 }, { 7, 10, 1651 }, { 17, 10, 89 }, { 7, 0, 208 }, - { 6, 0, 1178 }, { 6, 0, 79 }, { 7, 0, 1519 }, { 4, 10, 672 }, - { 5, 10, 737 }, { 8, 0, 741 }, { 4, 11, 120 }, { 4, 0, 710 }, - { 6, 0, 376 }, { 6, 0, 606 }, { 6, 0, 1347 }, { 6, 0, 1494 }, - { 6, 0, 850 }, { 6, 0, 1553 }, { 9, 0, 821 }, { 5, 10, 145 }, - { 6, 11, 593 }, { 7, 0, 1311 }, { 12, 0, 135 }, { 4, 0, 467 }, - { 5, 0, 405 }, { 6, 0, 544 }, { 5, 11, 820 }, { 7, 11, 931 }, - { 6, 0, 100 }, { 7, 0, 244 }, { 7, 0, 632 }, { 7, 0, 1609 }, - { 8, 0, 178 }, { 8, 0, 638 }, { 13, 0, 58 }, { 4, 10, 387 }, - { 7, 10, 1288 }, { 6, 11, 151 }, { 6, 11, 1675 }, { 7, 11, 383 }, - { 23, 11, 10 }, { 4, 0, 481 }, { 7, 10, 550 }, { 6, 0, 1378 }, - { 6, 11, 1624 }, { 11, 11, 11 }, { 12, 11, 422 }, { 13, 11, 262 }, - { 14, 11, 360 }, { 5, 0, 791 }, { 4, 11, 43 }, { 5, 11, 344 }, - { 5, 11, 357 }, { 7, 0, 1227 }, { 12, 0, 978 }, { 7, 0, 686 }, - { 8, 0, 33 }, { 8, 0, 238 }, { 10, 0, 616 }, { 11, 0, 467 }, - { 11, 0, 881 }, { 13, 0, 217 }, { 13, 0, 253 }, { 14, 0, 268 }, - { 9, 0, 857 }, { 8, 0, 467 }, { 8, 0, 1006 }, { 7, 11, 148 }, - { 8, 11, 284 }, { 13, 11, 63 }, { 4, 10, 576 }, { 7, 10, 1263 }, - { 5, 11, 888 }, { 5, 10, 919 }, { 6, 10, 1673 }, { 20, 10, 37 }, - { 20, 11, 37 }, { 4, 0, 447 }, { 4, 11, 711 }, { 4, 0, 128 }, - { 5, 0, 415 }, { 6, 0, 462 }, { 7, 0, 294 }, { 7, 0, 578 }, - { 10, 0, 710 }, { 11, 0, 86 }, { 4, 10, 82 }, { 5, 10, 333 }, - { 5, 10, 904 }, { 6, 10, 207 }, { 7, 10, 325 }, { 7, 10, 1726 }, - { 8, 10, 101 }, { 10, 10, 778 }, { 11, 10, 220 }, { 8, 0, 587 }, - { 9, 11, 440 }, { 5, 10, 903 }, { 6, 0, 427 }, { 7, 0, 1018 }, - { 10, 0, 692 }, { 4, 0, 195 }, { 7, 0, 802 }, { 12, 10, 147 }, - { 6, 0, 1546 }, { 6, 0, 684 }, { 4, 10, 705 }, { 8, 0, 345 }, - { 11, 11, 678 }, { 12, 11, 307 }, { 5, 0, 365 }, { 6, 0, 1683 }, - { 4, 11, 65 }, { 5, 11, 479 }, { 5, 11, 1004 }, { 7, 11, 1913 }, - { 8, 11, 317 }, { 9, 11, 302 }, { 10, 11, 612 }, { 13, 11, 22 }, - { 10, 0, 472 }, { 4, 11, 261 }, { 7, 11, 510 }, { 6, 10, 90 }, - { 14, 0, 433 }, { 23, 0, 28 }, { 4, 11, 291 }, { 7, 11, 101 }, - { 9, 11, 515 }, { 12, 11, 152 }, { 12, 11, 443 }, { 13, 11, 392 }, - { 14, 11, 357 }, { 12, 0, 997 }, { 5, 0, 3 }, { 8, 0, 578 }, - { 9, 0, 118 }, { 10, 0, 705 }, { 13, 0, 279 }, { 7, 11, 1266 }, - { 7, 10, 813 }, { 12, 10, 497 }, { 13, 10, 56 }, { 5, 0, 229 }, - { 6, 10, 125 }, { 7, 10, 1277 }, { 8, 0, 102 }, { 10, 0, 578 }, - { 10, 0, 672 }, { 12, 0, 496 }, { 13, 0, 408 }, { 14, 0, 121 }, - { 17, 0, 106 }, { 23, 10, 12 }, { 6, 0, 866 }, { 6, 0, 1080 }, - { 8, 0, 1022 }, { 4, 11, 130 }, { 7, 11, 843 }, { 5, 11, 42 }, - { 5, 11, 879 }, { 7, 11, 245 }, { 7, 11, 324 }, { 7, 11, 1532 }, - { 11, 11, 463 }, { 11, 11, 472 }, { 13, 11, 363 }, { 16, 11, 52 }, - { 22, 0, 55 }, { 8, 0, 115 }, { 8, 0, 350 }, { 9, 0, 489 }, - { 10, 0, 128 }, { 11, 0, 306 }, { 12, 0, 373 }, { 14, 0, 30 }, - { 17, 0, 79 }, { 19, 0, 80 }, { 4, 11, 134 }, { 5, 11, 372 }, - { 6, 0, 657 }, { 6, 0, 933 }, { 7, 11, 1147 }, { 4, 0, 230 }, - { 5, 0, 702 }, { 6, 0, 1728 }, { 4, 0, 484 }, { 18, 0, 26 }, - { 19, 0, 42 }, { 20, 0, 43 }, { 21, 0, 0 }, { 23, 0, 27 }, - { 24, 0, 14 }, { 7, 0, 185 }, { 7, 0, 703 }, { 6, 0, 417 }, - { 10, 0, 618 }, { 7, 10, 1106 }, { 9, 10, 770 }, { 11, 10, 112 }, - { 12, 10, 413 }, { 6, 0, 803 }, { 4, 11, 644 }, { 6, 0, 1262 }, - { 7, 11, 540 }, { 12, 10, 271 }, { 17, 10, 109 }, { 7, 11, 123 }, - { 4, 0, 633 }, { 6, 11, 623 }, { 4, 11, 908 }, { 5, 11, 359 }, - { 5, 11, 508 }, { 6, 11, 1723 }, { 7, 11, 343 }, { 7, 11, 1996 }, - { 7, 11, 2026 }, { 7, 0, 479 }, { 10, 0, 262 }, { 7, 10, 304 }, - { 9, 10, 646 }, { 9, 10, 862 }, { 11, 10, 696 }, { 12, 10, 208 }, - { 15, 10, 79 }, { 19, 10, 108 }, { 4, 11, 341 }, { 7, 11, 480 }, - { 6, 0, 830 }, { 5, 0, 70 }, { 5, 0, 622 }, { 6, 0, 334 }, - { 7, 0, 1032 }, { 9, 0, 171 }, { 11, 0, 26 }, { 11, 0, 213 }, - { 11, 0, 637 }, { 11, 0, 707 }, { 12, 0, 202 }, { 12, 0, 380 }, - { 13, 0, 226 }, { 13, 0, 355 }, { 14, 0, 222 }, { 17, 0, 42 }, - { 7, 10, 981 }, { 15, 0, 217 }, { 9, 11, 114 }, { 4, 0, 23 }, - { 4, 0, 141 }, { 5, 0, 313 }, { 5, 0, 1014 }, { 6, 0, 50 }, - { 6, 0, 51 }, { 7, 0, 142 }, { 7, 0, 384 }, { 7, 0, 559 }, - { 8, 0, 640 }, { 9, 0, 460 }, { 9, 0, 783 }, { 11, 0, 741 }, - { 12, 0, 183 }, { 13, 0, 488 }, { 13, 0, 360 }, { 7, 0, 1586 }, - { 7, 11, 1995 }, { 8, 11, 299 }, { 11, 11, 890 }, { 12, 11, 674 }, - { 4, 10, 434 }, { 7, 0, 652 }, { 6, 10, 550 }, { 7, 0, 766 }, - { 5, 10, 553 }, { 10, 10, 824 }, { 7, 0, 737 }, { 8, 0, 298 }, - { 8, 10, 452 }, { 4, 11, 238 }, { 5, 11, 503 }, { 6, 11, 179 }, - { 7, 11, 2003 }, { 8, 11, 381 }, { 8, 11, 473 }, { 9, 11, 149 }, - { 10, 11, 183 }, { 15, 11, 45 }, { 15, 11, 86 }, { 5, 10, 292 }, - { 5, 0, 222 }, { 9, 0, 655 }, { 10, 0, 534 }, { 10, 10, 135 }, - { 4, 11, 121 }, { 5, 11, 156 }, { 5, 11, 349 }, { 9, 11, 136 }, - { 10, 11, 605 }, { 14, 11, 342 }, { 19, 11, 107 }, { 9, 0, 906 }, - { 6, 0, 1013 }, { 6, 0, 1250 }, { 6, 0, 1956 }, { 6, 0, 2009 }, - { 8, 0, 991 }, { 16, 0, 120 }, { 7, 11, 1192 }, { 10, 0, 503 }, - { 5, 0, 154 }, { 7, 0, 1491 }, { 10, 0, 379 }, { 10, 0, 485 }, - { 6, 0, 1867 }, { 6, 0, 1914 }, { 6, 0, 1925 }, { 9, 0, 917 }, - { 9, 0, 925 }, { 9, 0, 932 }, { 9, 0, 951 }, { 9, 0, 1007 }, - { 9, 0, 1013 }, { 12, 0, 806 }, { 12, 0, 810 }, { 12, 0, 814 }, - { 12, 0, 816 }, { 12, 0, 824 }, { 12, 0, 832 }, { 12, 0, 837 }, - { 12, 0, 863 }, { 12, 0, 868 }, { 12, 0, 870 }, { 12, 0, 889 }, - { 12, 0, 892 }, { 12, 0, 900 }, { 12, 0, 902 }, { 12, 0, 908 }, - { 12, 0, 933 }, { 12, 0, 942 }, { 12, 0, 949 }, { 12, 0, 954 }, - { 15, 0, 175 }, { 15, 0, 203 }, { 15, 0, 213 }, { 15, 0, 218 }, - { 15, 0, 225 }, { 15, 0, 231 }, { 15, 0, 239 }, { 15, 0, 248 }, - { 15, 0, 252 }, { 18, 0, 190 }, { 18, 0, 204 }, { 18, 0, 215 }, - { 18, 0, 216 }, { 18, 0, 222 }, { 18, 0, 225 }, { 18, 0, 230 }, - { 18, 0, 239 }, { 18, 0, 241 }, { 21, 0, 42 }, { 21, 0, 43 }, - { 21, 0, 44 }, { 21, 0, 45 }, { 21, 0, 46 }, { 21, 0, 53 }, - { 24, 0, 27 }, { 24, 0, 31 }, { 5, 0, 716 }, { 7, 0, 844 }, - { 4, 0, 91 }, { 5, 0, 388 }, { 5, 0, 845 }, { 6, 0, 206 }, - { 6, 0, 252 }, { 6, 0, 365 }, { 7, 0, 136 }, { 7, 0, 531 }, - { 8, 0, 621 }, { 7, 10, 393 }, { 10, 10, 603 }, { 11, 10, 206 }, - { 6, 11, 80 }, { 6, 11, 1694 }, { 7, 11, 173 }, { 7, 11, 1974 }, - { 9, 11, 547 }, { 10, 11, 730 }, { 14, 11, 18 }, { 22, 11, 39 }, - { 9, 0, 748 }, { 4, 11, 923 }, { 6, 11, 1711 }, { 4, 10, 912 }, - { 9, 10, 232 }, { 7, 10, 98 }, { 7, 10, 1973 }, { 8, 10, 716 }, - { 14, 0, 103 }, { 5, 10, 733 }, { 4, 11, 595 }, { 12, 0, 158 }, - { 18, 0, 8 }, { 19, 0, 62 }, { 20, 0, 6 }, { 22, 0, 4 }, - { 23, 0, 2 }, { 23, 0, 9 }, { 5, 11, 240 }, { 6, 11, 459 }, - { 7, 11, 12 }, { 7, 11, 114 }, { 7, 11, 502 }, { 7, 11, 1751 }, - { 7, 11, 1753 }, { 7, 11, 1805 }, { 8, 11, 658 }, { 9, 11, 1 }, - { 11, 11, 959 }, { 13, 11, 446 }, { 14, 11, 211 }, { 7, 0, 576 }, - { 5, 0, 771 }, { 5, 0, 863 }, { 5, 0, 898 }, { 6, 0, 648 }, - { 6, 0, 1632 }, { 6, 0, 1644 }, { 6, 0, 1780 }, { 5, 0, 331 }, - { 7, 11, 633 }, { 7, 11, 905 }, { 7, 11, 909 }, { 7, 11, 1538 }, - { 9, 11, 767 }, { 12, 11, 636 }, { 12, 0, 632 }, { 5, 0, 107 }, - { 7, 0, 201 }, { 8, 0, 518 }, { 6, 0, 446 }, { 7, 0, 1817 }, - { 6, 11, 490 }, { 9, 0, 851 }, { 13, 0, 510 }, { 7, 11, 250 }, - { 8, 11, 506 }, { 8, 11, 507 }, { 4, 0, 504 }, { 9, 10, 72 }, - { 4, 11, 158 }, { 4, 11, 140 }, { 7, 11, 362 }, { 8, 11, 209 }, - { 9, 11, 10 }, { 9, 11, 160 }, { 9, 11, 503 }, { 10, 11, 689 }, - { 11, 11, 350 }, { 11, 11, 553 }, { 11, 11, 725 }, { 12, 11, 252 }, - { 12, 11, 583 }, { 13, 11, 192 }, { 13, 11, 352 }, { 14, 11, 269 }, - { 14, 11, 356 }, { 20, 11, 50 }, { 6, 11, 597 }, { 7, 11, 1318 }, - { 7, 10, 1454 }, { 5, 0, 883 }, { 5, 0, 975 }, { 8, 0, 392 }, - { 20, 0, 7 }, { 6, 11, 228 }, { 7, 11, 1341 }, { 9, 11, 408 }, - { 10, 11, 343 }, { 11, 11, 348 }, { 11, 10, 600 }, { 12, 11, 99 }, - { 13, 10, 245 }, { 18, 11, 1 }, { 18, 11, 11 }, { 19, 11, 4 }, - { 6, 11, 296 }, { 5, 0, 922 }, { 6, 0, 1707 }, { 4, 11, 557 }, - { 4, 11, 548 }, { 7, 10, 164 }, { 7, 10, 1571 }, { 9, 10, 107 }, - { 12, 10, 225 }, { 7, 11, 197 }, { 8, 11, 142 }, { 8, 11, 325 }, - { 9, 11, 150 }, { 9, 11, 596 }, { 10, 11, 350 }, { 10, 11, 353 }, - { 11, 11, 74 }, { 11, 11, 315 }, { 14, 11, 423 }, { 15, 11, 141 }, - { 5, 0, 993 }, { 7, 0, 515 }, { 9, 0, 91 }, { 4, 0, 131 }, - { 8, 0, 200 }, { 5, 10, 484 }, { 5, 10, 510 }, { 6, 10, 434 }, - { 7, 10, 1000 }, { 7, 10, 1098 }, { 8, 10, 2 }, { 24, 0, 10 }, - { 4, 11, 62 }, { 5, 11, 83 }, { 6, 11, 399 }, { 6, 11, 579 }, - { 7, 11, 692 }, { 7, 11, 846 }, { 7, 11, 1015 }, { 7, 11, 1799 }, - { 8, 11, 403 }, { 9, 11, 394 }, { 10, 11, 133 }, { 12, 11, 4 }, - { 12, 11, 297 }, { 12, 11, 452 }, { 16, 11, 81 }, { 18, 11, 19 }, - { 18, 11, 25 }, { 21, 11, 14 }, { 22, 11, 12 }, { 23, 11, 18 }, - { 12, 11, 459 }, { 4, 11, 177 }, { 7, 0, 1433 }, { 9, 0, 365 }, - { 9, 11, 365 }, { 4, 10, 460 }, { 5, 0, 103 }, { 6, 0, 2004 }, - { 7, 0, 921 }, { 8, 0, 580 }, { 8, 0, 593 }, { 8, 0, 630 }, - { 10, 0, 28 }, { 5, 11, 411 }, { 7, 11, 653 }, { 4, 10, 932 }, - { 5, 10, 891 }, { 4, 0, 911 }, { 5, 0, 867 }, { 5, 0, 1013 }, - { 7, 0, 2034 }, { 8, 0, 798 }, { 8, 0, 813 }, { 7, 11, 439 }, - { 10, 11, 727 }, { 11, 11, 260 }, { 11, 11, 684 }, { 8, 10, 625 }, - { 5, 11, 208 }, { 7, 11, 753 }, { 7, 11, 1528 }, { 5, 0, 461 }, - { 7, 0, 1925 }, { 12, 0, 39 }, { 13, 0, 265 }, { 13, 0, 439 }, - { 6, 10, 76 }, { 6, 0, 853 }, { 8, 10, 92 }, { 9, 10, 221 }, - { 5, 0, 135 }, { 6, 0, 519 }, { 7, 0, 1722 }, { 10, 0, 271 }, - { 11, 0, 261 }, { 17, 0, 54 }, { 11, 11, 814 }, { 14, 0, 338 }, - { 20, 0, 81 }, { 4, 0, 300 }, { 5, 0, 436 }, { 5, 0, 419 }, - { 5, 0, 687 }, { 7, 0, 864 }, { 9, 0, 470 }, { 7, 11, 864 }, - { 9, 0, 836 }, { 5, 11, 242 }, { 6, 0, 1937 }, { 4, 10, 763 }, - { 5, 11, 953 }, { 4, 10, 622 }, { 4, 0, 393 }, { 5, 10, 253 }, - { 8, 0, 357 }, { 10, 0, 745 }, { 14, 0, 426 }, { 17, 0, 94 }, - { 19, 0, 57 }, { 7, 10, 546 }, { 5, 11, 615 }, { 18, 11, 37 }, - { 9, 10, 73 }, { 10, 10, 110 }, { 14, 10, 185 }, { 17, 10, 119 }, - { 11, 0, 703 }, { 7, 10, 624 }, { 7, 10, 916 }, { 10, 10, 256 }, - { 11, 10, 87 }, { 5, 11, 290 }, { 5, 10, 212 }, { 12, 10, 35 }, - { 13, 10, 382 }, { 4, 11, 380 }, { 5, 11, 52 }, { 7, 11, 277 }, - { 9, 11, 368 }, { 11, 11, 791 }, { 5, 0, 387 }, { 10, 11, 138 }, - { 11, 11, 476 }, { 4, 0, 6 }, { 5, 0, 708 }, { 8, 0, 75 }, - { 7, 0, 1351 }, { 9, 0, 581 }, { 10, 0, 639 }, { 11, 0, 453 }, - { 12, 0, 584 }, { 4, 0, 303 }, { 10, 0, 772 }, { 7, 10, 1175 }, - { 4, 0, 749 }, { 5, 10, 816 }, { 6, 11, 256 }, { 7, 11, 307 }, - { 7, 11, 999 }, { 7, 11, 1481 }, { 7, 11, 1732 }, { 7, 11, 1738 }, - { 8, 11, 265 }, { 9, 11, 414 }, { 11, 11, 316 }, { 12, 11, 52 }, - { 13, 11, 420 }, { 19, 11, 100 }, { 7, 11, 1296 }, { 6, 0, 1065 }, - { 5, 10, 869 }, { 5, 10, 968 }, { 6, 10, 1626 }, { 8, 10, 734 }, - { 8, 10, 784 }, { 4, 10, 542 }, { 6, 10, 1716 }, { 6, 10, 1727 }, - { 7, 10, 1082 }, { 7, 10, 1545 }, { 8, 10, 56 }, { 8, 10, 118 }, - { 8, 10, 412 }, { 8, 10, 564 }, { 9, 10, 888 }, { 9, 10, 908 }, - { 10, 10, 50 }, { 10, 10, 423 }, { 11, 10, 685 }, { 11, 10, 697 }, - { 11, 10, 933 }, { 12, 10, 299 }, { 13, 10, 126 }, { 13, 10, 136 }, - { 13, 10, 170 }, { 13, 10, 190 }, { 6, 0, 226 }, { 4, 0, 106 }, - { 7, 0, 310 }, { 11, 0, 717 }, { 5, 11, 723 }, { 5, 0, 890 }, - { 5, 0, 988 }, { 4, 10, 232 }, { 9, 10, 202 }, { 10, 10, 474 }, - { 12, 10, 433 }, { 6, 0, 626 }, { 14, 0, 431 }, { 10, 0, 706 }, - { 22, 0, 44 }, { 13, 0, 51 }, { 6, 10, 108 }, { 7, 10, 1003 }, - { 7, 10, 1181 }, { 8, 10, 111 }, { 8, 10, 343 }, { 4, 0, 698 }, - { 5, 11, 109 }, { 6, 11, 1784 }, { 7, 11, 1895 }, { 12, 11, 296 }, - { 12, 11, 302 }, { 6, 0, 828 }, { 6, 10, 1712 }, { 10, 0, 17 }, - { 7, 0, 1929 }, { 4, 10, 133 }, { 5, 11, 216 }, { 7, 10, 711 }, - { 7, 10, 1298 }, { 7, 10, 1585 }, { 7, 11, 1879 }, { 9, 11, 141 }, - { 9, 11, 270 }, { 9, 11, 679 }, { 10, 11, 159 }, { 10, 11, 553 }, - { 11, 11, 197 }, { 11, 11, 438 }, { 12, 11, 538 }, { 12, 11, 559 }, - { 13, 11, 193 }, { 13, 11, 423 }, { 14, 11, 144 }, { 14, 11, 166 }, - { 14, 11, 167 }, { 15, 11, 67 }, { 19, 11, 84 }, { 13, 11, 127 }, - { 7, 11, 1872 }, { 9, 11, 81 }, { 6, 10, 99 }, { 7, 10, 1808 }, - { 17, 10, 57 }, { 6, 11, 391 }, { 5, 0, 689 }, { 6, 0, 84 }, - { 7, 0, 1250 }, { 6, 10, 574 }, { 7, 10, 428 }, { 10, 10, 669 }, - { 11, 10, 485 }, { 11, 10, 840 }, { 12, 10, 300 }, { 14, 10, 250 }, - { 7, 11, 322 }, { 8, 11, 249 }, { 7, 11, 432 }, { 7, 11, 1649 }, - { 7, 10, 1871 }, { 9, 10, 252 }, { 6, 11, 155 }, { 12, 11, 234 }, - { 7, 0, 871 }, { 19, 0, 27 }, { 19, 11, 27 }, { 12, 0, 498 }, - { 5, 0, 986 }, { 6, 0, 130 }, { 10, 0, 823 }, { 6, 0, 1793 }, - { 7, 0, 1582 }, { 8, 0, 458 }, { 10, 0, 101 }, { 10, 0, 318 }, - { 10, 0, 945 }, { 12, 0, 734 }, { 16, 0, 104 }, { 18, 0, 177 }, - { 6, 10, 323 }, { 7, 10, 1564 }, { 5, 11, 632 }, { 10, 11, 526 }, - { 10, 0, 435 }, { 7, 10, 461 }, { 8, 10, 775 }, { 6, 11, 144 }, - { 7, 11, 948 }, { 7, 11, 1042 }, { 7, 11, 1857 }, { 8, 11, 235 }, - { 8, 11, 461 }, { 9, 11, 453 }, { 9, 11, 530 }, { 10, 11, 354 }, - { 17, 11, 77 }, { 19, 11, 99 }, { 20, 11, 79 }, { 10, 0, 966 }, - { 7, 0, 1644 }, { 9, 0, 129 }, { 7, 0, 997 }, { 8, 0, 502 }, - { 5, 11, 196 }, { 6, 11, 486 }, { 7, 11, 212 }, { 8, 11, 309 }, - { 8, 11, 346 }, { 7, 10, 727 }, { 18, 10, 73 }, { 4, 0, 823 }, - { 4, 11, 686 }, { 7, 0, 1927 }, { 4, 0, 762 }, { 7, 0, 1756 }, - { 9, 0, 98 }, { 8, 10, 577 }, { 24, 0, 8 }, { 4, 11, 30 }, - { 5, 11, 43 }, { 24, 11, 8 }, { 7, 0, 1046 }, { 11, 0, 160 }, - { 7, 0, 492 }, { 4, 10, 413 }, { 5, 10, 677 }, { 7, 11, 492 }, - { 8, 10, 432 }, { 12, 10, 280 }, { 6, 0, 45 }, { 7, 0, 433 }, - { 8, 0, 129 }, { 9, 0, 21 }, { 10, 0, 392 }, { 11, 0, 79 }, - { 12, 0, 499 }, { 13, 0, 199 }, { 13, 0, 451 }, { 7, 0, 558 }, - { 8, 0, 353 }, { 4, 11, 220 }, { 7, 11, 1535 }, { 9, 11, 93 }, - { 11, 11, 474 }, { 7, 10, 646 }, { 7, 10, 1730 }, { 11, 10, 446 }, - { 13, 10, 178 }, { 5, 0, 785 }, { 6, 0, 1145 }, { 8, 0, 81 }, - { 9, 0, 189 }, { 9, 0, 201 }, { 11, 0, 478 }, { 11, 0, 712 }, - { 13, 0, 338 }, { 5, 0, 353 }, { 23, 0, 26 }, { 11, 0, 762 }, - { 4, 10, 395 }, { 6, 0, 2024 }, { 4, 0, 611 }, { 5, 0, 606 }, - { 9, 10, 174 }, { 10, 10, 164 }, { 11, 10, 440 }, { 11, 10, 841 }, - { 15, 10, 98 }, { 6, 10, 426 }, { 10, 10, 608 }, { 11, 10, 1002 }, - { 10, 10, 250 }, { 6, 0, 25 }, { 7, 0, 855 }, { 7, 0, 1258 }, - { 16, 0, 32 }, { 7, 11, 1725 }, { 10, 11, 393 }, { 5, 11, 263 }, - { 6, 11, 414 }, { 6, 0, 2011 }, { 5, 10, 476 }, { 4, 0, 4 }, - { 7, 0, 1118 }, { 7, 0, 1320 }, { 7, 0, 1706 }, { 8, 0, 277 }, - { 9, 0, 622 }, { 10, 0, 9 }, { 11, 0, 724 }, { 12, 0, 350 }, - { 12, 0, 397 }, { 13, 0, 28 }, { 13, 0, 159 }, { 15, 0, 89 }, - { 18, 0, 5 }, { 19, 0, 9 }, { 20, 0, 34 }, { 22, 0, 47 }, - { 6, 11, 178 }, { 6, 11, 1750 }, { 8, 11, 251 }, { 9, 11, 690 }, - { 10, 11, 155 }, { 10, 11, 196 }, { 10, 11, 373 }, { 11, 11, 698 }, - { 13, 11, 155 }, { 20, 11, 93 }, { 5, 11, 97 }, { 9, 11, 393 }, - { 7, 0, 764 }, { 11, 0, 461 }, { 12, 0, 172 }, { 5, 10, 76 }, - { 6, 10, 458 }, { 6, 10, 497 }, { 7, 10, 868 }, { 9, 10, 658 }, - { 10, 10, 594 }, { 11, 10, 566 }, { 12, 10, 338 }, { 13, 10, 200 }, - { 6, 0, 1449 }, { 10, 11, 40 }, { 6, 11, 1639 }, { 6, 0, 1445 }, - { 6, 0, 1168 }, { 4, 10, 526 }, { 7, 10, 1029 }, { 7, 10, 1054 }, - { 4, 11, 191 }, { 7, 11, 934 }, { 8, 11, 647 }, { 17, 11, 97 }, - { 4, 10, 636 }, { 6, 0, 233 }, { 7, 10, 660 }, { 7, 10, 1124 }, - { 17, 10, 31 }, { 19, 10, 22 }, { 23, 10, 14 }, { 6, 10, 1699 }, - { 8, 11, 110 }, { 12, 11, 246 }, { 15, 11, 162 }, { 19, 11, 64 }, - { 20, 11, 8 }, { 20, 11, 95 }, { 22, 11, 24 }, { 24, 11, 17 }, - { 5, 11, 165 }, { 9, 11, 346 }, { 10, 11, 655 }, { 5, 11, 319 }, - { 7, 11, 534 }, { 6, 0, 255 }, { 9, 0, 216 }, { 8, 11, 128 }, - { 11, 11, 179 }, { 9, 0, 183 }, { 11, 0, 286 }, { 11, 0, 956 }, - { 23, 0, 3 }, { 4, 0, 536 }, { 7, 0, 1141 }, { 10, 0, 723 }, - { 11, 0, 371 }, { 4, 10, 279 }, { 7, 10, 301 }, { 9, 10, 362 }, - { 7, 0, 285 }, { 5, 11, 57 }, { 6, 11, 101 }, { 6, 11, 1663 }, - { 7, 11, 132 }, { 7, 11, 1048 }, { 7, 11, 1154 }, { 7, 11, 1415 }, - { 7, 11, 1507 }, { 12, 11, 493 }, { 15, 11, 105 }, { 23, 11, 15 }, - { 5, 11, 459 }, { 7, 11, 1073 }, { 7, 10, 1743 }, { 8, 11, 241 }, - { 8, 11, 334 }, { 4, 10, 178 }, { 5, 10, 399 }, { 7, 0, 560 }, - { 4, 0, 690 }, { 7, 0, 1246 }, { 18, 0, 157 }, { 19, 0, 63 }, - { 10, 0, 599 }, { 11, 0, 33 }, { 12, 0, 571 }, { 21, 0, 1 }, - { 6, 11, 324 }, { 6, 11, 520 }, { 7, 11, 338 }, { 7, 11, 1616 }, - { 7, 11, 1729 }, { 8, 11, 228 }, { 9, 11, 69 }, { 11, 11, 750 }, - { 7, 0, 1862 }, { 12, 0, 491 }, { 12, 0, 520 }, { 13, 0, 383 }, - { 14, 0, 244 }, { 7, 11, 734 }, { 6, 10, 1692 }, { 10, 0, 448 }, - { 11, 0, 630 }, { 17, 0, 117 }, { 6, 10, 202 }, { 7, 11, 705 }, - { 12, 10, 360 }, { 17, 10, 118 }, { 18, 10, 27 }, { 20, 10, 67 }, - { 4, 11, 73 }, { 6, 11, 612 }, { 7, 11, 927 }, { 7, 11, 1822 }, - { 8, 11, 217 }, { 9, 11, 472 }, { 9, 11, 765 }, { 9, 11, 766 }, - { 10, 11, 408 }, { 11, 11, 51 }, { 11, 11, 793 }, { 12, 11, 266 }, - { 15, 11, 158 }, { 20, 11, 89 }, { 22, 11, 32 }, { 4, 0, 190 }, - { 5, 0, 554 }, { 5, 0, 1001 }, { 5, 11, 389 }, { 8, 11, 636 }, - { 9, 11, 229 }, { 5, 0, 446 }, { 7, 10, 872 }, { 10, 10, 516 }, - { 11, 10, 167 }, { 9, 10, 313 }, { 4, 10, 224 }, { 6, 0, 1313 }, - { 5, 10, 546 }, { 7, 10, 35 }, { 8, 10, 11 }, { 8, 10, 12 }, - { 9, 10, 315 }, { 9, 10, 533 }, { 10, 10, 802 }, { 11, 10, 166 }, - { 12, 10, 525 }, { 14, 10, 243 }, { 6, 0, 636 }, { 9, 0, 837 }, - { 5, 10, 241 }, { 8, 10, 242 }, { 9, 10, 451 }, { 10, 10, 667 }, - { 11, 10, 598 }, { 12, 10, 429 }, { 22, 10, 46 }, { 22, 11, 46 }, - { 8, 11, 472 }, { 11, 0, 278 }, { 14, 0, 73 }, { 13, 11, 185 }, - { 4, 0, 868 }, { 6, 0, 972 }, { 4, 10, 366 }, { 9, 10, 516 }, - { 10, 0, 1010 }, { 5, 11, 189 }, { 6, 10, 1736 }, { 7, 11, 442 }, - { 7, 11, 443 }, { 8, 11, 281 }, { 12, 11, 174 }, { 13, 11, 83 }, - { 13, 11, 261 }, { 11, 11, 384 }, { 6, 11, 2 }, { 7, 11, 191 }, - { 7, 11, 446 }, { 7, 11, 758 }, { 7, 11, 1262 }, { 7, 11, 1737 }, - { 8, 11, 22 }, { 8, 11, 270 }, { 8, 11, 612 }, { 9, 11, 4 }, - { 9, 11, 167 }, { 9, 11, 312 }, { 9, 11, 436 }, { 10, 11, 156 }, - { 10, 11, 216 }, { 10, 11, 311 }, { 10, 11, 623 }, { 11, 11, 72 }, - { 11, 11, 330 }, { 11, 11, 455 }, { 12, 11, 101 }, { 12, 11, 321 }, - { 12, 11, 504 }, { 12, 11, 530 }, { 12, 11, 543 }, { 13, 11, 17 }, - { 13, 11, 156 }, { 13, 11, 334 }, { 14, 11, 48 }, { 15, 11, 70 }, - { 17, 11, 60 }, { 20, 11, 64 }, { 6, 10, 331 }, { 8, 10, 623 }, - { 7, 0, 1231 }, { 4, 0, 304 }, { 6, 11, 60 }, { 7, 11, 670 }, - { 7, 11, 1327 }, { 8, 11, 411 }, { 8, 11, 435 }, { 9, 11, 653 }, - { 9, 11, 740 }, { 10, 11, 385 }, { 11, 11, 222 }, { 11, 11, 324 }, - { 11, 11, 829 }, { 12, 11, 611 }, { 7, 0, 506 }, { 6, 11, 166 }, - { 7, 11, 374 }, { 7, 11, 1174 }, { 14, 11, 43 }, { 18, 11, 21 }, - { 7, 11, 1694 }, { 7, 10, 1888 }, { 5, 11, 206 }, { 6, 11, 398 }, - { 7, 11, 50 }, { 22, 0, 26 }, { 6, 0, 53 }, { 6, 0, 199 }, - { 7, 0, 1408 }, { 8, 0, 32 }, { 8, 0, 93 }, { 10, 0, 397 }, - { 10, 0, 629 }, { 11, 0, 593 }, { 11, 0, 763 }, { 13, 0, 326 }, - { 17, 0, 35 }, { 6, 0, 105 }, { 4, 10, 394 }, { 4, 0, 843 }, - { 10, 0, 794 }, { 11, 0, 704 }, { 13, 0, 396 }, { 5, 0, 114 }, - { 5, 0, 255 }, { 13, 0, 285 }, { 6, 0, 619 }, { 7, 0, 898 }, - { 7, 0, 1092 }, { 8, 0, 485 }, { 18, 0, 28 }, { 19, 0, 116 }, - { 7, 10, 1931 }, { 9, 0, 145 }, { 7, 10, 574 }, { 7, 10, 1719 }, - { 7, 0, 2035 }, { 8, 0, 19 }, { 9, 0, 89 }, { 10, 0, 831 }, - { 4, 10, 658 }, { 6, 11, 517 }, { 7, 11, 1159 }, { 10, 11, 621 }, - { 11, 11, 192 }, { 7, 0, 1933 }, { 7, 11, 1933 }, { 9, 10, 781 }, - { 10, 10, 144 }, { 11, 10, 385 }, { 13, 10, 161 }, { 13, 10, 228 }, - { 13, 10, 268 }, { 20, 10, 107 }, { 8, 10, 374 }, { 10, 11, 223 }, - { 11, 11, 645 }, { 7, 0, 1728 }, { 7, 11, 64 }, { 7, 11, 289 }, - { 8, 11, 245 }, { 4, 10, 344 }, { 6, 10, 498 }, { 11, 10, 323 }, - { 8, 0, 746 }, { 7, 10, 1063 }, { 9, 10, 155 }, { 4, 0, 987 }, - { 6, 0, 1964 }, { 6, 0, 1974 }, { 6, 0, 1990 }, { 8, 0, 995 }, - { 5, 11, 609 }, { 5, 10, 906 }, { 6, 0, 1550 }, { 6, 0, 874 }, - { 5, 11, 129 }, { 6, 11, 61 }, { 7, 11, 947 }, { 4, 0, 1018 }, - { 6, 0, 1938 }, { 6, 0, 2021 }, { 6, 0, 2039 }, { 4, 0, 814 }, - { 11, 0, 126 }, { 11, 0, 287 }, { 6, 0, 1264 }, { 5, 0, 955 }, - { 8, 0, 814 }, { 13, 11, 506 }, { 4, 11, 314 }, { 6, 0, 981 }, - { 11, 11, 1000 }, { 5, 0, 56 }, { 8, 0, 892 }, { 8, 0, 915 }, - { 12, 0, 776 }, { 20, 0, 100 }, { 10, 0, 4 }, { 10, 0, 13 }, - { 11, 0, 638 }, { 20, 0, 57 }, { 20, 11, 74 }, { 5, 0, 738 }, - { 4, 10, 616 }, { 5, 11, 637 }, { 8, 10, 692 }, { 5, 0, 758 }, - { 4, 10, 305 }, { 9, 11, 590 }, { 5, 11, 280 }, { 7, 11, 1226 }, - { 6, 11, 494 }, { 7, 0, 1112 }, { 5, 11, 281 }, { 13, 0, 44 }, - { 14, 0, 214 }, { 5, 10, 214 }, { 7, 10, 603 }, { 8, 10, 611 }, - { 9, 10, 686 }, { 10, 10, 88 }, { 11, 10, 459 }, { 11, 10, 496 }, - { 12, 10, 463 }, { 12, 10, 590 }, { 11, 0, 328 }, { 7, 11, 1064 }, - { 9, 0, 133 }, { 7, 0, 168 }, { 13, 0, 196 }, { 13, 0, 237 }, - { 6, 10, 1703 }, { 6, 0, 1152 }, { 7, 0, 1245 }, { 5, 0, 110 }, - { 6, 0, 169 }, { 6, 0, 1702 }, { 7, 0, 400 }, { 8, 0, 538 }, - { 9, 0, 184 }, { 9, 0, 524 }, { 12, 0, 218 }, { 6, 0, 1816 }, - { 10, 0, 871 }, { 12, 0, 769 }, { 12, 0, 785 }, { 4, 11, 630 }, - { 7, 11, 33 }, { 7, 11, 120 }, { 8, 11, 489 }, { 9, 11, 319 }, - { 10, 11, 820 }, { 11, 11, 1004 }, { 12, 11, 379 }, { 13, 11, 117 }, - { 13, 11, 412 }, { 14, 11, 25 }, { 15, 11, 52 }, { 15, 11, 161 }, - { 16, 11, 47 }, { 21, 11, 2 }, { 6, 0, 133 }, { 8, 0, 413 }, - { 9, 0, 353 }, { 11, 0, 993 }, { 17, 10, 19 }, { 4, 11, 937 }, - { 5, 11, 801 }, { 6, 0, 978 }, { 6, 0, 93 }, { 6, 0, 1508 }, - { 7, 0, 1422 }, { 7, 0, 1851 }, { 8, 0, 673 }, { 9, 0, 529 }, - { 12, 0, 43 }, { 6, 0, 317 }, { 10, 0, 512 }, { 4, 10, 737 }, - { 11, 10, 294 }, { 12, 10, 60 }, { 12, 10, 437 }, { 13, 10, 64 }, - { 13, 10, 380 }, { 14, 10, 430 }, { 9, 0, 371 }, { 7, 11, 1591 }, - { 16, 11, 43 }, { 6, 10, 1758 }, { 8, 10, 520 }, { 9, 10, 345 }, - { 9, 10, 403 }, { 14, 10, 350 }, { 5, 0, 526 }, { 10, 10, 242 }, - { 10, 10, 579 }, { 9, 0, 25 }, { 10, 0, 467 }, { 10, 0, 559 }, - { 5, 10, 139 }, { 7, 10, 1168 }, { 10, 10, 539 }, { 4, 0, 335 }, - { 7, 0, 942 }, { 12, 0, 754 }, { 4, 11, 365 }, { 11, 0, 182 }, - { 14, 0, 195 }, { 14, 11, 29 }, { 5, 11, 7 }, { 11, 11, 774 }, - { 4, 11, 746 }, { 7, 11, 1090 }, { 8, 0, 39 }, { 10, 0, 773 }, - { 11, 0, 84 }, { 12, 0, 205 }, { 14, 0, 1 }, { 5, 0, 601 }, - { 5, 0, 870 }, { 5, 11, 360 }, { 8, 11, 237 }, { 4, 0, 181 }, - { 8, 0, 370 }, { 6, 0, 1652 }, { 8, 0, 358 }, { 4, 10, 107 }, - { 7, 10, 613 }, { 8, 10, 439 }, { 8, 10, 504 }, { 9, 10, 501 }, - { 10, 10, 383 }, { 11, 10, 477 }, { 4, 10, 229 }, { 9, 11, 785 }, - { 4, 0, 97 }, { 5, 0, 147 }, { 6, 0, 286 }, { 7, 0, 1362 }, - { 13, 0, 176 }, { 6, 0, 537 }, { 7, 0, 788 }, { 7, 0, 1816 }, - { 4, 10, 903 }, { 12, 10, 71 }, { 6, 0, 743 }, { 6, 0, 1223 }, - { 6, 0, 375 }, { 7, 0, 169 }, { 7, 0, 254 }, { 8, 0, 780 }, - { 7, 11, 1493 }, { 7, 0, 1714 }, { 4, 10, 47 }, { 6, 10, 373 }, - { 7, 10, 452 }, { 7, 10, 543 }, { 7, 10, 1856 }, { 9, 10, 6 }, - { 11, 10, 257 }, { 11, 10, 391 }, { 6, 0, 896 }, { 8, 0, 1003 }, - { 7, 0, 1447 }, { 9, 11, 341 }, { 5, 10, 980 }, { 6, 10, 1754 }, - { 17, 11, 22 }, { 4, 11, 277 }, { 5, 11, 608 }, { 6, 11, 493 }, - { 7, 11, 457 }, { 12, 11, 384 }, { 7, 10, 536 }, { 7, 10, 1331 }, - { 8, 10, 143 }, { 12, 0, 744 }, { 7, 11, 27 }, { 7, 11, 316 }, - { 18, 0, 126 }, { 5, 10, 19 }, { 6, 10, 533 }, { 4, 0, 788 }, - { 11, 0, 41 }, { 5, 11, 552 }, { 5, 11, 586 }, { 5, 11, 676 }, - { 6, 11, 448 }, { 8, 11, 244 }, { 11, 11, 1 }, { 11, 11, 41 }, - { 13, 11, 3 }, { 16, 11, 54 }, { 17, 11, 4 }, { 18, 11, 13 }, - { 4, 0, 985 }, { 6, 0, 1801 }, { 4, 11, 401 }, { 9, 11, 264 }, - { 5, 10, 395 }, { 5, 10, 951 }, { 6, 10, 1776 }, { 5, 0, 629 }, - { 7, 0, 1549 }, { 11, 10, 663 }, { 12, 10, 210 }, { 13, 10, 166 }, - { 13, 10, 310 }, { 14, 10, 373 }, { 19, 10, 43 }, { 9, 11, 543 }, - { 10, 11, 524 }, { 11, 11, 30 }, { 12, 11, 524 }, { 14, 11, 315 }, - { 16, 11, 18 }, { 20, 11, 26 }, { 20, 11, 65 }, { 4, 11, 205 }, - { 5, 11, 623 }, { 7, 11, 104 }, { 8, 11, 519 }, { 5, 0, 293 }, - { 6, 0, 601 }, { 7, 11, 579 }, { 9, 11, 41 }, { 9, 11, 244 }, - { 9, 11, 669 }, { 10, 11, 5 }, { 11, 11, 861 }, { 11, 11, 951 }, - { 11, 11, 980 }, { 4, 11, 717 }, { 4, 10, 695 }, { 7, 10, 497 }, - { 9, 10, 387 }, { 19, 10, 81 }, { 4, 0, 420 }, { 14, 0, 37 }, - { 6, 0, 1134 }, { 6, 0, 1900 }, { 12, 0, 830 }, { 12, 0, 878 }, - { 12, 0, 894 }, { 15, 0, 221 }, { 15, 0, 245 }, { 4, 11, 489 }, - { 7, 0, 1570 }, { 12, 0, 542 }, { 8, 0, 933 }, { 8, 0, 957 }, - { 6, 0, 1371 }, { 7, 0, 31 }, { 8, 0, 373 }, { 5, 10, 284 }, - { 6, 10, 49 }, { 6, 10, 350 }, { 7, 10, 377 }, { 7, 10, 1693 }, - { 8, 10, 678 }, { 9, 10, 161 }, { 9, 10, 585 }, { 9, 10, 671 }, - { 9, 10, 839 }, { 11, 10, 912 }, { 13, 10, 427 }, { 7, 11, 892 }, - { 4, 0, 325 }, { 10, 0, 125 }, { 11, 11, 47 }, { 4, 10, 597 }, - { 10, 0, 323 }, { 6, 0, 1547 }, { 7, 11, 1605 }, { 9, 11, 473 }, - { 11, 11, 962 }, { 18, 11, 139 }, { 11, 10, 908 }, { 7, 11, 819 }, - { 9, 11, 26 }, { 9, 11, 392 }, { 10, 11, 152 }, { 10, 11, 226 }, - { 11, 11, 19 }, { 12, 11, 276 }, { 12, 11, 426 }, { 12, 11, 589 }, - { 13, 11, 460 }, { 15, 11, 97 }, { 19, 11, 48 }, { 20, 11, 104 }, - { 7, 11, 51 }, { 4, 0, 718 }, { 7, 0, 1216 }, { 6, 0, 1896 }, - { 6, 0, 1905 }, { 6, 0, 1912 }, { 9, 0, 947 }, { 9, 0, 974 }, - { 12, 0, 809 }, { 12, 0, 850 }, { 12, 0, 858 }, { 12, 0, 874 }, - { 12, 0, 887 }, { 12, 0, 904 }, { 12, 0, 929 }, { 12, 0, 948 }, - { 12, 0, 952 }, { 15, 0, 198 }, { 15, 0, 206 }, { 15, 0, 220 }, - { 15, 0, 227 }, { 15, 0, 247 }, { 18, 0, 188 }, { 21, 0, 48 }, - { 21, 0, 50 }, { 24, 0, 25 }, { 24, 0, 29 }, { 7, 11, 761 }, - { 7, 11, 1051 }, { 9, 11, 545 }, { 5, 0, 124 }, { 5, 0, 144 }, - { 6, 0, 548 }, { 7, 0, 15 }, { 7, 0, 153 }, { 9, 0, 629 }, - { 7, 11, 606 }, { 7, 10, 2014 }, { 7, 10, 2007 }, { 9, 11, 46 }, - { 9, 10, 101 }, { 9, 10, 450 }, { 10, 10, 66 }, { 10, 10, 842 }, - { 11, 10, 536 }, { 12, 10, 587 }, { 6, 0, 75 }, { 7, 0, 1531 }, - { 8, 0, 416 }, { 9, 0, 240 }, { 9, 0, 275 }, { 10, 0, 100 }, - { 11, 0, 658 }, { 11, 0, 979 }, { 12, 0, 86 }, { 14, 0, 207 }, - { 15, 0, 20 }, { 15, 0, 25 }, { 5, 0, 141 }, { 5, 0, 915 }, - { 6, 0, 1783 }, { 7, 0, 211 }, { 7, 0, 698 }, { 7, 0, 1353 }, - { 9, 0, 83 }, { 9, 0, 281 }, { 10, 0, 376 }, { 10, 0, 431 }, - { 11, 0, 543 }, { 12, 0, 664 }, { 13, 0, 280 }, { 13, 0, 428 }, - { 14, 0, 61 }, { 14, 0, 128 }, { 17, 0, 52 }, { 17, 0, 81 }, - { 4, 11, 674 }, { 7, 0, 533 }, { 21, 0, 6 }, { 4, 11, 770 }, - { 5, 0, 538 }, { 5, 11, 79 }, { 7, 11, 1027 }, { 7, 11, 1477 }, - { 11, 11, 52 }, { 11, 10, 62 }, { 4, 0, 338 }, { 5, 0, 400 }, - { 5, 11, 789 }, { 6, 11, 195 }, { 4, 11, 251 }, { 4, 11, 688 }, - { 7, 11, 513 }, { 7, 11, 1284 }, { 9, 11, 87 }, { 10, 11, 365 }, - { 6, 10, 1766 }, { 6, 0, 0 }, { 7, 0, 84 }, { 11, 0, 895 }, - { 17, 0, 11 }, { 11, 0, 892 }, { 4, 0, 221 }, { 5, 0, 659 }, - { 7, 0, 697 }, { 7, 0, 1211 }, { 10, 0, 284 }, { 5, 0, 989 }, - { 5, 11, 889 }, { 4, 11, 160 }, { 5, 11, 330 }, { 7, 11, 1434 }, - { 8, 11, 174 }, { 6, 10, 1665 }, { 7, 10, 256 }, { 7, 10, 1388 }, - { 10, 10, 499 }, { 11, 10, 670 }, { 7, 0, 848 }, { 4, 10, 22 }, - { 5, 10, 10 }, { 8, 10, 97 }, { 10, 0, 507 }, { 5, 10, 481 }, - { 4, 0, 188 }, { 7, 0, 805 }, { 5, 0, 884 }, { 6, 0, 732 }, - { 11, 0, 991 }, { 7, 11, 968 }, { 11, 11, 636 }, { 15, 11, 145 }, - { 17, 11, 34 }, { 19, 11, 50 }, { 23, 11, 20 }, { 7, 0, 959 }, - { 16, 0, 60 }, { 6, 10, 134 }, { 7, 10, 437 }, { 9, 10, 37 }, - { 14, 10, 285 }, { 14, 10, 371 }, { 7, 10, 486 }, { 8, 10, 155 }, - { 11, 10, 93 }, { 12, 10, 164 }, { 6, 0, 1653 }, { 7, 0, 337 }, - { 5, 10, 591 }, { 6, 0, 1989 }, { 8, 0, 922 }, { 8, 0, 978 }, - { 5, 11, 374 }, { 4, 0, 638 }, { 10, 0, 500 }, { 5, 11, 731 }, - { 5, 10, 380 }, { 5, 10, 650 }, { 8, 10, 310 }, { 10, 11, 381 }, - { 4, 10, 364 }, { 7, 10, 1156 }, { 7, 10, 1187 }, { 9, 10, 409 }, - { 9, 11, 224 }, { 12, 0, 166 }, { 6, 10, 482 }, { 4, 11, 626 }, - { 5, 11, 642 }, { 6, 11, 425 }, { 10, 11, 202 }, { 11, 11, 141 }, - { 4, 10, 781 }, { 6, 10, 487 }, { 7, 10, 926 }, { 8, 10, 263 }, - { 11, 10, 500 }, { 7, 0, 418 }, { 4, 10, 94 }, { 7, 10, 1265 }, - { 8, 0, 760 }, { 4, 10, 417 }, { 8, 11, 835 }, { 5, 10, 348 }, - { 6, 10, 522 }, { 6, 0, 1277 }, { 6, 0, 1538 }, { 11, 11, 541 }, - { 7, 11, 1597 }, { 5, 11, 384 }, { 8, 11, 455 }, { 12, 11, 48 }, - { 8, 0, 770 }, { 5, 11, 264 }, { 6, 11, 184 }, { 4, 0, 89 }, - { 5, 0, 489 }, { 6, 0, 315 }, { 7, 0, 553 }, { 7, 0, 1745 }, - { 10, 0, 243 }, { 4, 10, 408 }, { 4, 10, 741 }, { 7, 10, 500 }, - { 6, 0, 1396 }, { 5, 0, 560 }, { 6, 0, 1658 }, { 9, 0, 3 }, - { 10, 0, 154 }, { 11, 0, 641 }, { 13, 0, 85 }, { 13, 0, 201 }, - { 13, 0, 346 }, { 7, 11, 1595 }, { 5, 11, 633 }, { 6, 11, 28 }, - { 7, 11, 219 }, { 7, 11, 1323 }, { 9, 11, 769 }, { 12, 11, 185 }, - { 7, 11, 785 }, { 7, 11, 359 }, { 8, 11, 243 }, { 12, 11, 175 }, - { 10, 0, 586 }, { 7, 0, 1271 }, { 6, 10, 73 }, { 4, 11, 105 }, - { 4, 0, 166 }, { 5, 0, 505 }, { 6, 0, 1670 }, { 5, 10, 576 }, - { 4, 11, 324 }, { 10, 11, 104 }, { 14, 10, 231 }, { 6, 0, 637 }, - { 7, 10, 1264 }, { 7, 10, 1678 }, { 11, 10, 945 }, { 12, 10, 341 }, - { 12, 10, 471 }, { 12, 10, 569 }, { 23, 11, 21 }, { 23, 11, 23 }, - { 8, 11, 559 }, { 13, 11, 109 }, { 6, 0, 1947 }, { 7, 0, 445 }, - { 8, 0, 307 }, { 8, 0, 704 }, { 10, 0, 41 }, { 10, 0, 439 }, - { 11, 0, 237 }, { 11, 0, 622 }, { 12, 0, 201 }, { 7, 11, 963 }, - { 7, 0, 1977 }, { 4, 0, 189 }, { 5, 0, 713 }, { 8, 0, 57 }, - { 10, 0, 371 }, { 7, 10, 538 }, { 4, 0, 552 }, { 6, 0, 883 }, - { 5, 10, 413 }, { 6, 0, 923 }, { 4, 11, 758 }, { 10, 11, 215 }, - { 8, 10, 495 }, { 7, 10, 54 }, { 8, 10, 312 }, { 10, 10, 191 }, - { 10, 10, 614 }, { 12, 10, 567 }, { 7, 11, 351 }, { 11, 11, 128 }, - { 7, 0, 875 }, { 6, 10, 468 }, { 7, 10, 1478 }, { 8, 10, 530 }, - { 14, 10, 290 }, { 7, 0, 1788 }, { 17, 0, 49 }, { 5, 11, 918 }, - { 12, 11, 398 }, { 20, 11, 39 }, { 21, 11, 11 }, { 22, 11, 41 }, - { 10, 0, 661 }, { 6, 10, 484 }, { 7, 10, 822 }, { 7, 0, 1945 }, - { 6, 0, 794 }, { 9, 10, 900 }, { 7, 10, 1335 }, { 6, 10, 1724 }, - { 7, 10, 2022 }, { 4, 11, 340 }, { 6, 0, 1135 }, { 4, 0, 784 }, - { 5, 0, 745 }, { 5, 0, 84 }, { 6, 0, 163 }, { 5, 0, 410 }, - { 4, 0, 976 }, { 5, 11, 985 }, { 7, 11, 509 }, { 7, 11, 529 }, - { 17, 11, 96 }, { 4, 10, 474 }, { 6, 0, 703 }, { 7, 11, 1919 }, - { 5, 0, 322 }, { 8, 0, 186 }, { 9, 0, 262 }, { 10, 0, 187 }, - { 14, 0, 208 }, { 7, 10, 1504 }, { 5, 0, 227 }, { 9, 0, 560 }, - { 13, 0, 208 }, { 5, 10, 305 }, { 4, 11, 247 }, { 7, 0, 1395 }, - { 8, 0, 486 }, { 9, 0, 236 }, { 9, 0, 878 }, { 10, 0, 218 }, - { 11, 0, 95 }, { 19, 0, 17 }, { 19, 0, 31 }, { 7, 0, 2043 }, - { 8, 0, 672 }, { 13, 0, 448 }, { 4, 11, 184 }, { 5, 11, 390 }, - { 6, 11, 337 }, { 7, 11, 23 }, { 7, 11, 494 }, { 7, 11, 618 }, - { 7, 11, 1456 }, { 8, 11, 27 }, { 8, 11, 599 }, { 10, 11, 153 }, - { 11, 11, 710 }, { 7, 0, 466 }, { 7, 10, 1236 }, { 6, 0, 167 }, - { 7, 0, 186 }, { 7, 0, 656 }, { 10, 0, 643 }, { 4, 10, 480 }, - { 6, 10, 302 }, { 6, 10, 1642 }, { 7, 10, 837 }, { 7, 10, 1547 }, - { 7, 10, 1657 }, { 8, 10, 429 }, { 9, 10, 228 }, { 13, 10, 289 }, - { 13, 10, 343 }, { 19, 10, 101 }, { 6, 0, 1428 }, { 6, 0, 1440 }, - { 5, 0, 412 }, { 7, 10, 278 }, { 10, 10, 739 }, { 11, 10, 708 }, - { 13, 10, 348 }, { 6, 0, 1118 }, { 8, 0, 562 }, { 20, 11, 46 }, - { 9, 0, 316 }, { 11, 0, 256 }, { 6, 0, 1771 }, { 7, 0, 1190 }, - { 9, 0, 132 }, { 10, 11, 227 }, { 11, 11, 497 }, { 11, 11, 709 }, - { 12, 11, 415 }, { 15, 0, 66 }, { 6, 11, 360 }, { 7, 11, 1664 }, - { 8, 11, 478 }, { 16, 10, 28 }, { 4, 0, 317 }, { 7, 0, 1279 }, - { 5, 0, 63 }, { 5, 0, 509 }, { 8, 11, 699 }, { 17, 10, 36 }, - { 6, 0, 1475 }, { 11, 11, 343 }, { 14, 11, 127 }, { 4, 11, 739 }, - { 4, 0, 288 }, { 7, 11, 1757 }, { 8, 0, 89 }, { 8, 0, 620 }, - { 9, 0, 608 }, { 11, 0, 628 }, { 12, 0, 322 }, { 15, 0, 124 }, - { 6, 0, 1225 }, { 7, 0, 1189 }, { 4, 11, 67 }, { 5, 11, 422 }, - { 6, 10, 363 }, { 7, 11, 1037 }, { 7, 11, 1289 }, { 7, 11, 1555 }, - { 7, 10, 1955 }, { 8, 10, 725 }, { 9, 11, 741 }, { 17, 11, 108 }, - { 6, 0, 1468 }, { 6, 0, 689 }, { 6, 0, 1451 }, { 10, 0, 120 }, - { 23, 0, 1 }, { 9, 10, 805 }, { 14, 0, 329 }, { 5, 10, 813 }, - { 7, 10, 2046 }, { 7, 0, 226 }, { 10, 11, 96 }, { 7, 0, 1855 }, - { 5, 10, 712 }, { 11, 10, 17 }, { 13, 10, 321 }, { 16, 10, 67 }, - { 9, 0, 461 }, { 6, 10, 320 }, { 7, 10, 781 }, { 7, 10, 1921 }, - { 9, 10, 55 }, { 10, 10, 186 }, { 10, 10, 273 }, { 10, 10, 664 }, - { 10, 10, 801 }, { 11, 10, 996 }, { 11, 10, 997 }, { 13, 10, 157 }, - { 14, 10, 170 }, { 8, 11, 203 }, { 8, 10, 271 }, { 11, 11, 823 }, - { 11, 11, 846 }, { 12, 11, 482 }, { 13, 11, 133 }, { 13, 11, 277 }, - { 13, 11, 302 }, { 13, 11, 464 }, { 14, 11, 205 }, { 14, 11, 221 }, - { 7, 0, 1346 }, { 4, 11, 449 }, { 5, 11, 718 }, { 6, 0, 85 }, - { 14, 0, 299 }, { 7, 10, 103 }, { 7, 10, 863 }, { 11, 10, 184 }, - { 17, 10, 62 }, { 4, 11, 355 }, { 6, 11, 311 }, { 9, 11, 256 }, - { 10, 11, 404 }, { 9, 10, 659 }, { 10, 11, 758 }, { 5, 11, 827 }, - { 5, 11, 64 }, { 12, 11, 581 }, { 6, 0, 1171 }, { 4, 11, 442 }, - { 7, 11, 1047 }, { 7, 11, 1352 }, { 7, 11, 1643 }, { 4, 0, 980 }, - { 5, 11, 977 }, { 6, 11, 288 }, { 7, 11, 528 }, { 7, 11, 1065 }, - { 5, 0, 279 }, { 6, 0, 235 }, { 7, 0, 468 }, { 8, 0, 446 }, - { 9, 0, 637 }, { 10, 0, 717 }, { 11, 0, 738 }, { 12, 0, 514 }, - { 4, 0, 293 }, { 11, 10, 337 }, { 14, 10, 303 }, { 8, 11, 285 }, - { 5, 0, 17 }, { 6, 0, 371 }, { 9, 0, 528 }, { 12, 0, 364 }, - { 4, 11, 254 }, { 5, 10, 77 }, { 7, 10, 1455 }, { 10, 10, 843 }, - { 19, 10, 73 }, { 22, 0, 5 }, { 4, 10, 458 }, { 6, 11, 12 }, - { 7, 11, 1219 }, { 17, 11, 73 }, { 7, 10, 1420 }, { 6, 10, 109 }, - { 10, 10, 382 }, { 7, 11, 125 }, { 6, 10, 330 }, { 7, 10, 1084 }, - { 11, 10, 142 }, { 6, 11, 369 }, { 6, 11, 502 }, { 7, 11, 1036 }, - { 8, 11, 348 }, { 9, 11, 452 }, { 10, 11, 26 }, { 11, 11, 224 }, - { 11, 11, 387 }, { 11, 11, 772 }, { 12, 11, 95 }, { 12, 11, 629 }, - { 13, 11, 195 }, { 13, 11, 207 }, { 13, 11, 241 }, { 14, 11, 260 }, - { 14, 11, 270 }, { 15, 11, 140 }, { 4, 11, 269 }, { 5, 11, 480 }, - { 7, 11, 532 }, { 7, 11, 1197 }, { 7, 11, 1358 }, { 8, 11, 291 }, - { 11, 11, 349 }, { 14, 11, 396 }, { 22, 0, 48 }, { 10, 0, 601 }, - { 13, 0, 353 }, { 13, 0, 376 }, { 5, 0, 779 }, { 5, 0, 807 }, - { 6, 0, 1655 }, { 6, 0, 1676 }, { 14, 11, 223 }, { 4, 0, 196 }, - { 5, 0, 558 }, { 5, 0, 949 }, { 20, 11, 15 }, { 7, 11, 1764 }, - { 6, 0, 1322 }, { 4, 0, 752 }, { 11, 0, 737 }, { 7, 11, 657 }, - { 8, 11, 533 }, { 7, 0, 412 }, { 4, 0, 227 }, { 5, 0, 159 }, - { 5, 0, 409 }, { 7, 0, 80 }, { 8, 0, 556 }, { 10, 0, 479 }, - { 12, 0, 418 }, { 14, 0, 50 }, { 14, 0, 123 }, { 14, 0, 192 }, - { 14, 0, 249 }, { 14, 0, 295 }, { 15, 0, 27 }, { 7, 0, 1470 }, - { 8, 0, 66 }, { 8, 0, 137 }, { 8, 0, 761 }, { 9, 0, 638 }, - { 11, 0, 80 }, { 11, 0, 212 }, { 11, 0, 368 }, { 11, 0, 418 }, - { 12, 0, 8 }, { 13, 0, 15 }, { 16, 0, 61 }, { 17, 0, 59 }, - { 19, 0, 28 }, { 20, 0, 84 }, { 7, 10, 1985 }, { 4, 11, 211 }, - { 4, 11, 332 }, { 5, 11, 335 }, { 6, 11, 238 }, { 7, 11, 269 }, - { 7, 11, 811 }, { 7, 11, 1797 }, { 8, 10, 122 }, { 8, 11, 836 }, - { 9, 11, 507 }, { 13, 11, 242 }, { 6, 0, 683 }, { 6, 0, 1252 }, - { 4, 0, 873 }, { 4, 10, 234 }, { 6, 0, 835 }, { 6, 0, 38 }, - { 7, 0, 1220 }, { 8, 0, 185 }, { 8, 0, 256 }, { 9, 0, 22 }, - { 9, 0, 331 }, { 10, 0, 738 }, { 11, 0, 205 }, { 11, 0, 540 }, - { 11, 0, 746 }, { 13, 0, 465 }, { 14, 0, 88 }, { 14, 0, 194 }, - { 10, 0, 986 }, { 5, 11, 1009 }, { 12, 11, 582 }, { 18, 11, 131 }, - { 4, 0, 159 }, { 6, 0, 115 }, { 7, 0, 252 }, { 7, 0, 257 }, - { 7, 0, 1928 }, { 8, 0, 69 }, { 9, 0, 384 }, { 10, 0, 91 }, - { 10, 0, 615 }, { 12, 0, 375 }, { 14, 0, 235 }, { 18, 0, 117 }, - { 19, 0, 123 }, { 5, 0, 911 }, { 8, 0, 278 }, { 5, 10, 430 }, - { 5, 10, 932 }, { 6, 10, 131 }, { 7, 10, 417 }, { 9, 10, 522 }, - { 11, 10, 314 }, { 13, 10, 390 }, { 14, 10, 149 }, { 14, 10, 399 }, - { 15, 10, 57 }, { 4, 0, 151 }, { 7, 0, 1567 }, { 8, 0, 749 }, - { 5, 11, 228 }, { 6, 11, 203 }, { 7, 11, 156 }, { 8, 11, 347 }, - { 9, 11, 265 }, { 4, 10, 507 }, { 10, 0, 989 }, { 12, 0, 956 }, - { 5, 0, 990 }, { 5, 0, 194 }, { 6, 0, 927 }, { 7, 0, 1662 }, - { 9, 0, 90 }, { 12, 0, 564 }, { 4, 10, 343 }, { 5, 10, 511 }, - { 5, 0, 425 }, { 7, 10, 455 }, { 10, 10, 591 }, { 4, 0, 774 }, - { 7, 11, 476 }, { 7, 11, 1592 }, { 10, 11, 87 }, { 5, 0, 971 }, - { 7, 10, 1381 }, { 5, 11, 318 }, { 19, 11, 121 }, { 5, 11, 291 }, - { 7, 11, 765 }, { 9, 11, 389 }, { 12, 11, 548 }, { 6, 10, 575 }, - { 4, 0, 827 }, { 12, 0, 646 }, { 12, 0, 705 }, { 12, 0, 712 }, - { 12, 0, 714 }, { 11, 0, 752 }, { 9, 0, 662 }, { 5, 0, 72 }, - { 6, 0, 264 }, { 7, 0, 21 }, { 7, 0, 46 }, { 7, 0, 2013 }, - { 8, 0, 215 }, { 8, 0, 513 }, { 10, 0, 266 }, { 11, 0, 22 }, - { 11, 11, 522 }, { 6, 0, 239 }, { 7, 0, 118 }, { 10, 0, 95 }, - { 11, 0, 603 }, { 13, 0, 443 }, { 14, 0, 160 }, { 15, 0, 4 }, - { 6, 0, 431 }, { 6, 0, 669 }, { 7, 10, 1127 }, { 7, 10, 1572 }, - { 10, 10, 297 }, { 10, 10, 422 }, { 11, 10, 764 }, { 11, 10, 810 }, - { 12, 10, 264 }, { 13, 10, 102 }, { 13, 10, 300 }, { 13, 10, 484 }, - { 14, 10, 147 }, { 14, 10, 229 }, { 17, 10, 71 }, { 18, 10, 118 }, - { 19, 10, 120 }, { 5, 0, 874 }, { 6, 0, 1677 }, { 15, 0, 0 }, - { 10, 11, 525 }, { 11, 11, 82 }, { 6, 0, 65 }, { 7, 0, 939 }, - { 7, 0, 1172 }, { 7, 0, 1671 }, { 9, 0, 540 }, { 10, 0, 696 }, - { 11, 0, 265 }, { 11, 0, 732 }, { 11, 0, 928 }, { 11, 0, 937 }, - { 13, 0, 438 }, { 6, 0, 1350 }, { 8, 11, 547 }, { 4, 11, 422 }, - { 5, 11, 355 }, { 17, 11, 0 }, { 9, 11, 905 }, { 5, 0, 682 }, - { 7, 0, 1887 }, { 4, 0, 809 }, { 4, 0, 696 }, { 5, 11, 865 }, - { 6, 0, 1074 }, { 6, 0, 1472 }, { 14, 10, 35 }, { 14, 10, 191 }, - { 5, 11, 914 }, { 6, 11, 1625 }, { 5, 11, 234 }, { 7, 11, 1383 }, - { 9, 11, 780 }, { 4, 10, 125 }, { 4, 0, 726 }, { 5, 0, 630 }, - { 8, 0, 802 }, { 8, 0, 838 }, { 4, 10, 721 }, { 6, 0, 1337 }, - { 7, 0, 776 }, { 19, 0, 56 }, { 8, 10, 145 }, { 4, 0, 970 }, - { 7, 10, 792 }, { 8, 10, 147 }, { 10, 10, 821 }, { 11, 10, 1021 }, - { 11, 10, 970 }, { 8, 0, 940 }, { 9, 0, 797 }, { 7, 11, 1312 }, - { 9, 0, 248 }, { 10, 0, 400 }, { 7, 11, 816 }, { 7, 11, 1241 }, - { 7, 10, 1999 }, { 9, 11, 283 }, { 9, 11, 520 }, { 10, 11, 213 }, - { 10, 11, 307 }, { 10, 11, 463 }, { 10, 11, 671 }, { 10, 11, 746 }, - { 11, 11, 401 }, { 11, 11, 794 }, { 12, 11, 517 }, { 18, 11, 107 }, - { 19, 11, 115 }, { 6, 0, 1951 }, { 6, 0, 2040 }, { 7, 11, 339 }, - { 13, 0, 41 }, { 15, 0, 93 }, { 5, 10, 168 }, { 5, 10, 930 }, - { 8, 10, 74 }, { 9, 10, 623 }, { 12, 10, 500 }, { 12, 10, 579 }, - { 6, 0, 118 }, { 7, 0, 215 }, { 7, 0, 1521 }, { 12, 0, 11 }, - { 6, 10, 220 }, { 7, 10, 1101 }, { 13, 10, 105 }, { 6, 11, 421 }, - { 7, 11, 61 }, { 7, 11, 1540 }, { 10, 11, 11 }, { 10, 11, 501 }, - { 7, 0, 615 }, { 10, 0, 251 }, { 12, 11, 631 }, { 7, 0, 1044 }, - { 6, 10, 19 }, { 7, 10, 1413 }, { 11, 10, 428 }, { 5, 0, 225 }, - { 7, 10, 96 }, { 8, 10, 401 }, { 8, 10, 703 }, { 9, 10, 896 }, - { 17, 10, 116 }, { 6, 11, 102 }, { 7, 11, 72 }, { 15, 11, 142 }, - { 19, 11, 67 }, { 7, 10, 1961 }, { 7, 10, 1965 }, { 8, 10, 702 }, - { 8, 10, 750 }, { 7, 10, 2030 }, { 8, 10, 150 }, { 8, 10, 737 }, - { 12, 10, 366 }, { 23, 11, 30 }, { 4, 0, 370 }, { 5, 0, 756 }, - { 7, 0, 1326 }, { 7, 11, 823 }, { 8, 10, 800 }, { 9, 10, 148 }, - { 9, 10, 872 }, { 9, 10, 890 }, { 11, 10, 309 }, { 11, 10, 1001 }, - { 13, 10, 267 }, { 13, 10, 323 }, { 6, 0, 1662 }, { 7, 0, 48 }, - { 8, 0, 771 }, { 10, 0, 116 }, { 13, 0, 104 }, { 14, 0, 105 }, - { 14, 0, 184 }, { 15, 0, 168 }, { 19, 0, 92 }, { 20, 0, 68 }, - { 10, 0, 209 }, { 7, 11, 1870 }, { 7, 11, 68 }, { 8, 11, 48 }, - { 8, 11, 88 }, { 8, 11, 582 }, { 8, 11, 681 }, { 9, 11, 373 }, - { 9, 11, 864 }, { 11, 11, 157 }, { 11, 11, 336 }, { 11, 11, 843 }, - { 20, 11, 27 }, { 6, 0, 930 }, { 4, 11, 88 }, { 5, 11, 137 }, - { 5, 11, 174 }, { 5, 11, 777 }, { 6, 11, 1664 }, { 6, 11, 1725 }, - { 7, 11, 77 }, { 7, 11, 426 }, { 7, 11, 1317 }, { 7, 11, 1355 }, - { 8, 11, 126 }, { 8, 11, 563 }, { 9, 11, 523 }, { 9, 11, 750 }, - { 10, 11, 310 }, { 10, 11, 836 }, { 11, 11, 42 }, { 11, 11, 318 }, - { 11, 11, 731 }, { 12, 11, 68 }, { 12, 11, 92 }, { 12, 11, 507 }, - { 12, 11, 692 }, { 13, 11, 81 }, { 13, 11, 238 }, { 13, 11, 374 }, - { 18, 11, 138 }, { 19, 11, 78 }, { 19, 11, 111 }, { 20, 11, 55 }, - { 20, 11, 77 }, { 20, 11, 92 }, { 4, 11, 938 }, { 7, 11, 1831 }, - { 5, 10, 547 }, { 7, 10, 424 }, { 8, 11, 617 }, { 10, 11, 351 }, - { 6, 0, 1286 }, { 6, 11, 1668 }, { 7, 11, 1499 }, { 8, 11, 117 }, - { 9, 11, 314 }, { 10, 11, 174 }, { 6, 0, 759 }, { 6, 0, 894 }, - { 7, 11, 707 }, { 11, 11, 563 }, { 4, 0, 120 }, { 7, 0, 1894 }, - { 9, 0, 385 }, { 21, 0, 17 }, { 10, 0, 429 }, { 5, 11, 403 }, - { 5, 0, 820 }, { 7, 0, 931 }, { 10, 0, 199 }, { 5, 10, 133 }, - { 6, 0, 151 }, { 6, 0, 1675 }, { 7, 0, 383 }, { 23, 0, 10 }, - { 6, 0, 761 }, { 8, 10, 187 }, { 8, 0, 365 }, { 10, 10, 0 }, - { 10, 10, 818 }, { 11, 10, 988 }, { 4, 11, 44 }, { 5, 11, 311 }, - { 6, 11, 156 }, { 7, 11, 639 }, { 7, 11, 762 }, { 7, 11, 1827 }, - { 9, 11, 8 }, { 9, 11, 462 }, { 20, 11, 83 }, { 4, 11, 346 }, - { 7, 11, 115 }, { 9, 11, 180 }, { 9, 11, 456 }, { 10, 11, 363 }, - { 8, 10, 685 }, { 7, 0, 1086 }, { 17, 0, 46 }, { 6, 0, 1624 }, - { 11, 0, 11 }, { 12, 0, 422 }, { 13, 0, 444 }, { 14, 0, 360 }, - { 6, 0, 1020 }, { 6, 0, 1260 }, { 6, 0, 1589 }, { 4, 0, 43 }, - { 5, 0, 344 }, { 5, 0, 357 }, { 14, 0, 472 }, { 22, 0, 58 }, - { 6, 0, 1864 }, { 6, 0, 1866 }, { 6, 0, 1868 }, { 6, 0, 1869 }, - { 6, 0, 1874 }, { 6, 0, 1877 }, { 6, 0, 1903 }, { 6, 0, 1911 }, - { 9, 0, 920 }, { 9, 0, 921 }, { 9, 0, 924 }, { 9, 0, 946 }, - { 9, 0, 959 }, { 9, 0, 963 }, { 9, 0, 970 }, { 9, 0, 997 }, - { 9, 0, 1008 }, { 9, 0, 1017 }, { 12, 0, 795 }, { 12, 0, 797 }, - { 12, 0, 798 }, { 12, 0, 800 }, { 12, 0, 803 }, { 12, 0, 811 }, - { 12, 0, 820 }, { 12, 0, 821 }, { 12, 0, 839 }, { 12, 0, 841 }, - { 12, 0, 848 }, { 12, 0, 911 }, { 12, 0, 921 }, { 12, 0, 922 }, - { 12, 0, 925 }, { 12, 0, 937 }, { 12, 0, 944 }, { 12, 0, 945 }, - { 12, 0, 953 }, { 15, 0, 184 }, { 15, 0, 191 }, { 15, 0, 199 }, - { 15, 0, 237 }, { 15, 0, 240 }, { 15, 0, 243 }, { 15, 0, 246 }, - { 18, 0, 203 }, { 21, 0, 40 }, { 21, 0, 52 }, { 21, 0, 57 }, - { 24, 0, 23 }, { 24, 0, 28 }, { 24, 0, 30 }, { 6, 0, 725 }, - { 17, 11, 58 }, { 5, 0, 888 }, { 9, 10, 874 }, { 4, 0, 711 }, - { 8, 10, 774 }, { 10, 10, 670 }, { 12, 10, 51 }, { 16, 11, 40 }, - { 6, 11, 185 }, { 7, 11, 1899 }, { 11, 11, 673 }, { 9, 10, 701 }, - { 9, 0, 440 }, { 4, 11, 327 }, { 5, 11, 478 }, { 7, 11, 1332 }, - { 8, 11, 753 }, { 12, 11, 227 }, { 4, 10, 127 }, { 5, 10, 350 }, - { 6, 10, 356 }, { 8, 10, 426 }, { 9, 10, 572 }, { 10, 10, 247 }, - { 11, 10, 312 }, { 5, 11, 1020 }, { 5, 11, 1022 }, { 4, 11, 103 }, - { 5, 11, 401 }, { 6, 0, 1913 }, { 6, 0, 1926 }, { 6, 0, 1959 }, - { 9, 0, 914 }, { 9, 0, 939 }, { 9, 0, 952 }, { 9, 0, 979 }, - { 9, 0, 990 }, { 9, 0, 998 }, { 9, 0, 1003 }, { 9, 0, 1023 }, - { 12, 0, 827 }, { 12, 0, 834 }, { 12, 0, 845 }, { 12, 0, 912 }, - { 12, 0, 935 }, { 12, 0, 951 }, { 15, 0, 172 }, { 15, 0, 174 }, - { 18, 0, 198 }, { 21, 0, 63 }, { 5, 0, 958 }, { 5, 0, 987 }, - { 4, 11, 499 }, { 7, 11, 1421 }, { 7, 0, 885 }, { 6, 10, 59 }, - { 6, 10, 1762 }, { 9, 10, 603 }, { 13, 10, 397 }, { 10, 11, 62 }, - { 13, 11, 164 }, { 4, 0, 847 }, { 7, 0, 326 }, { 11, 0, 276 }, - { 14, 0, 293 }, { 4, 0, 65 }, { 5, 0, 479 }, { 5, 0, 1004 }, - { 7, 0, 1913 }, { 8, 0, 317 }, { 9, 0, 302 }, { 10, 0, 612 }, - { 13, 0, 22 }, { 4, 11, 96 }, { 4, 0, 261 }, { 7, 0, 510 }, - { 7, 0, 1514 }, { 6, 10, 111 }, { 7, 10, 4 }, { 8, 10, 163 }, - { 8, 10, 776 }, { 10, 10, 566 }, { 4, 0, 291 }, { 9, 0, 515 }, - { 12, 0, 152 }, { 12, 0, 443 }, { 13, 0, 392 }, { 14, 0, 357 }, - { 7, 11, 399 }, { 7, 11, 1492 }, { 4, 0, 589 }, { 11, 0, 282 }, - { 6, 11, 563 }, { 7, 10, 1994 }, { 5, 10, 297 }, { 7, 10, 1038 }, - { 4, 0, 130 }, { 7, 0, 843 }, { 7, 0, 1562 }, { 5, 0, 42 }, - { 5, 0, 879 }, { 7, 0, 245 }, { 7, 0, 324 }, { 7, 0, 1532 }, - { 11, 0, 463 }, { 11, 0, 472 }, { 13, 0, 363 }, { 16, 0, 52 }, - { 4, 0, 134 }, { 5, 0, 372 }, { 5, 0, 680 }, { 8, 10, 363 }, - { 6, 0, 1997 }, { 8, 0, 935 }, { 8, 0, 977 }, { 4, 0, 810 }, - { 7, 0, 1634 }, { 7, 10, 1675 }, { 7, 0, 1390 }, { 4, 11, 910 }, - { 5, 11, 832 }, { 7, 10, 808 }, { 8, 11, 266 }, { 11, 11, 578 }, - { 4, 0, 644 }, { 4, 0, 982 }, { 10, 0, 867 }, { 4, 10, 280 }, - { 7, 0, 540 }, { 12, 10, 54 }, { 7, 0, 123 }, { 6, 0, 1978 }, - { 4, 10, 421 }, { 5, 10, 548 }, { 6, 0, 623 }, { 8, 0, 789 }, - { 4, 0, 908 }, { 5, 0, 359 }, { 5, 0, 508 }, { 6, 0, 1723 }, - { 7, 0, 343 }, { 7, 0, 1996 }, { 7, 0, 2026 }, { 6, 0, 1220 }, - { 4, 0, 341 }, { 7, 0, 480 }, { 6, 10, 254 }, { 9, 10, 109 }, - { 10, 10, 103 }, { 6, 0, 888 }, { 8, 11, 528 }, { 9, 11, 348 }, - { 7, 0, 1995 }, { 8, 0, 299 }, { 11, 0, 890 }, { 12, 0, 674 }, - { 4, 11, 20 }, { 5, 11, 616 }, { 7, 11, 1094 }, { 6, 10, 1630 }, - { 4, 0, 238 }, { 5, 0, 503 }, { 6, 0, 179 }, { 7, 0, 2003 }, - { 8, 0, 381 }, { 8, 0, 473 }, { 9, 0, 149 }, { 10, 0, 788 }, - { 15, 0, 45 }, { 15, 0, 86 }, { 20, 0, 110 }, { 22, 0, 57 }, - { 5, 10, 671 }, { 4, 11, 26 }, { 5, 11, 429 }, { 6, 11, 245 }, - { 7, 11, 704 }, { 7, 11, 1379 }, { 7, 11, 1474 }, { 4, 0, 121 }, - { 5, 0, 156 }, { 5, 0, 349 }, { 9, 0, 431 }, { 10, 0, 605 }, - { 14, 0, 342 }, { 7, 11, 943 }, { 11, 11, 614 }, { 4, 10, 889 }, - { 4, 11, 621 }, { 7, 10, 1382 }, { 7, 11, 1382 }, { 7, 10, 1910 }, - { 4, 10, 627 }, { 5, 10, 775 }, { 5, 11, 542 }, { 5, 11, 868 }, - { 8, 11, 433 }, { 6, 0, 1373 }, { 7, 0, 1011 }, { 11, 10, 362 }, - { 11, 10, 948 }, { 12, 10, 388 }, { 6, 0, 80 }, { 7, 0, 173 }, - { 9, 0, 547 }, { 10, 0, 730 }, { 14, 0, 18 }, { 22, 0, 39 }, - { 7, 11, 1495 }, { 6, 0, 1694 }, { 7, 0, 1974 }, { 12, 0, 196 }, - { 4, 0, 923 }, { 6, 0, 507 }, { 6, 0, 1711 }, { 7, 10, 451 }, - { 8, 10, 389 }, { 12, 10, 490 }, { 13, 10, 16 }, { 13, 10, 215 }, - { 13, 10, 351 }, { 18, 10, 132 }, { 19, 10, 125 }, { 6, 0, 646 }, - { 6, 0, 1047 }, { 7, 10, 841 }, { 8, 10, 566 }, { 6, 0, 1611 }, - { 7, 0, 1214 }, { 11, 0, 926 }, { 4, 11, 525 }, { 4, 0, 595 }, - { 5, 0, 240 }, { 6, 0, 459 }, { 7, 0, 12 }, { 7, 0, 114 }, - { 7, 0, 949 }, { 7, 0, 1753 }, { 7, 0, 1805 }, { 8, 0, 658 }, - { 9, 0, 1 }, { 11, 0, 959 }, { 13, 0, 446 }, { 5, 10, 912 }, - { 6, 10, 1695 }, { 4, 0, 446 }, { 7, 11, 62 }, { 12, 11, 45 }, - { 19, 11, 112 }, { 5, 10, 236 }, { 6, 10, 572 }, { 8, 10, 492 }, - { 11, 10, 618 }, { 16, 10, 56 }, { 5, 10, 190 }, { 8, 10, 318 }, - { 7, 10, 1376 }, { 4, 11, 223 }, { 6, 11, 359 }, { 11, 11, 3 }, - { 13, 11, 108 }, { 14, 11, 89 }, { 16, 11, 22 }, { 4, 11, 647 }, - { 6, 0, 490 }, { 6, 0, 491 }, { 6, 0, 1584 }, { 7, 11, 685 }, - { 10, 11, 220 }, { 7, 0, 250 }, { 8, 0, 507 }, { 4, 0, 158 }, - { 4, 0, 140 }, { 7, 0, 362 }, { 8, 0, 209 }, { 9, 0, 10 }, - { 9, 0, 160 }, { 9, 0, 503 }, { 9, 0, 614 }, { 10, 0, 689 }, - { 11, 0, 327 }, { 11, 0, 553 }, { 11, 0, 725 }, { 11, 0, 767 }, - { 12, 0, 252 }, { 12, 0, 583 }, { 13, 0, 192 }, { 14, 0, 269 }, - { 14, 0, 356 }, { 20, 0, 50 }, { 19, 0, 1 }, { 19, 0, 26 }, - { 22, 0, 9 }, { 4, 11, 109 }, { 6, 0, 228 }, { 7, 0, 1341 }, - { 9, 0, 408 }, { 10, 0, 343 }, { 4, 0, 373 }, { 5, 0, 283 }, - { 6, 0, 480 }, { 7, 0, 609 }, { 10, 0, 860 }, { 10, 0, 878 }, - { 6, 0, 779 }, { 6, 0, 1209 }, { 4, 0, 557 }, { 7, 11, 263 }, - { 7, 11, 628 }, { 8, 11, 349 }, { 4, 0, 548 }, { 7, 0, 197 }, - { 8, 0, 142 }, { 8, 0, 325 }, { 9, 0, 150 }, { 9, 0, 596 }, - { 10, 0, 350 }, { 10, 0, 353 }, { 11, 0, 74 }, { 11, 0, 315 }, - { 12, 0, 662 }, { 12, 0, 681 }, { 14, 0, 423 }, { 15, 0, 141 }, - { 4, 11, 40 }, { 10, 11, 67 }, { 11, 11, 117 }, { 11, 11, 768 }, - { 11, 11, 935 }, { 7, 11, 992 }, { 8, 11, 301 }, { 9, 11, 722 }, - { 12, 11, 63 }, { 13, 11, 29 }, { 14, 11, 161 }, { 15, 11, 18 }, - { 6, 0, 1490 }, { 10, 11, 532 }, { 5, 0, 580 }, { 7, 0, 378 }, - { 7, 0, 674 }, { 7, 0, 1424 }, { 15, 0, 83 }, { 16, 0, 11 }, - { 15, 11, 83 }, { 16, 11, 11 }, { 6, 0, 1057 }, { 6, 0, 1335 }, - { 10, 0, 316 }, { 7, 10, 85 }, { 7, 10, 247 }, { 8, 10, 585 }, - { 10, 10, 163 }, { 4, 0, 169 }, { 5, 0, 83 }, { 6, 0, 399 }, - { 6, 0, 579 }, { 6, 0, 1513 }, { 7, 0, 692 }, { 7, 0, 846 }, - { 7, 0, 1015 }, { 7, 0, 1799 }, { 8, 0, 403 }, { 9, 0, 394 }, - { 10, 0, 133 }, { 12, 0, 4 }, { 12, 0, 297 }, { 12, 0, 452 }, - { 16, 0, 81 }, { 18, 0, 25 }, { 21, 0, 14 }, { 22, 0, 12 }, - { 23, 0, 18 }, { 6, 0, 1106 }, { 7, 0, 1546 }, { 11, 0, 299 }, - { 14, 0, 407 }, { 6, 0, 1192 }, { 4, 0, 177 }, { 5, 0, 411 }, - { 7, 0, 653 }, { 7, 0, 439 }, { 10, 0, 727 }, { 11, 0, 260 }, - { 11, 0, 684 }, { 10, 10, 145 }, { 19, 10, 83 }, { 5, 0, 208 }, - { 7, 0, 753 }, { 7, 0, 1528 }, { 9, 11, 617 }, { 7, 10, 1922 }, - { 7, 11, 825 }, { 11, 0, 422 }, { 13, 0, 389 }, { 4, 10, 124 }, - { 10, 10, 457 }, { 11, 10, 121 }, { 11, 10, 169 }, { 11, 10, 870 }, - { 12, 10, 214 }, { 14, 10, 187 }, { 15, 10, 77 }, { 11, 0, 615 }, - { 15, 0, 58 }, { 11, 11, 615 }, { 15, 11, 58 }, { 9, 0, 618 }, - { 10, 0, 482 }, { 6, 0, 1952 }, { 6, 0, 1970 }, { 14, 0, 505 }, - { 7, 10, 1193 }, { 7, 11, 1838 }, { 5, 0, 242 }, { 7, 10, 1333 }, - { 6, 10, 107 }, { 7, 10, 638 }, { 7, 10, 1632 }, { 9, 10, 396 }, - { 5, 0, 953 }, { 5, 10, 370 }, { 6, 10, 1756 }, { 5, 11, 28 }, - { 6, 11, 204 }, { 10, 11, 320 }, { 10, 11, 583 }, { 13, 11, 502 }, - { 14, 11, 72 }, { 14, 11, 274 }, { 14, 11, 312 }, { 14, 11, 344 }, - { 15, 11, 159 }, { 16, 11, 62 }, { 16, 11, 69 }, { 17, 11, 30 }, - { 18, 11, 42 }, { 18, 11, 53 }, { 18, 11, 84 }, { 18, 11, 140 }, - { 19, 11, 68 }, { 19, 11, 85 }, { 20, 11, 5 }, { 20, 11, 45 }, - { 20, 11, 101 }, { 22, 11, 7 }, { 22, 11, 20 }, { 4, 11, 558 }, - { 6, 11, 390 }, { 7, 11, 162 }, { 7, 11, 689 }, { 9, 11, 360 }, - { 10, 11, 653 }, { 11, 0, 802 }, { 13, 0, 67 }, { 5, 10, 204 }, - { 5, 0, 290 }, { 5, 10, 970 }, { 6, 10, 1706 }, { 4, 0, 380 }, - { 5, 0, 52 }, { 7, 0, 277 }, { 9, 0, 368 }, { 11, 0, 791 }, - { 5, 11, 856 }, { 6, 11, 1672 }, { 6, 11, 1757 }, { 6, 11, 1781 }, - { 7, 11, 1150 }, { 7, 11, 1425 }, { 7, 11, 1453 }, { 12, 11, 513 }, - { 5, 11, 92 }, { 7, 10, 3 }, { 10, 11, 736 }, { 12, 11, 102 }, - { 4, 0, 112 }, { 5, 0, 653 }, { 5, 10, 483 }, { 5, 10, 685 }, - { 6, 10, 489 }, { 7, 10, 1204 }, { 8, 10, 394 }, { 4, 10, 921 }, - { 6, 0, 1028 }, { 5, 10, 1007 }, { 5, 11, 590 }, { 9, 11, 213 }, - { 17, 11, 91 }, { 7, 10, 1696 }, { 10, 0, 138 }, { 11, 0, 476 }, - { 5, 0, 725 }, { 5, 0, 727 }, { 7, 0, 1811 }, { 4, 0, 979 }, - { 6, 0, 1821 }, { 6, 0, 1838 }, { 8, 0, 876 }, { 8, 0, 883 }, - { 8, 0, 889 }, { 8, 0, 893 }, { 8, 0, 895 }, { 10, 0, 934 }, - { 12, 0, 720 }, { 14, 0, 459 }, { 20, 0, 123 }, { 7, 11, 551 }, - { 4, 0, 38 }, { 6, 0, 435 }, { 7, 0, 307 }, { 7, 0, 999 }, - { 7, 0, 1481 }, { 7, 0, 1732 }, { 7, 0, 1738 }, { 8, 0, 371 }, - { 9, 0, 414 }, { 11, 0, 316 }, { 12, 0, 52 }, { 13, 0, 420 }, - { 19, 0, 100 }, { 7, 0, 1296 }, { 4, 10, 712 }, { 6, 10, 1629 }, - { 5, 0, 723 }, { 6, 0, 651 }, { 8, 11, 191 }, { 9, 11, 791 }, - { 10, 11, 93 }, { 11, 11, 301 }, { 16, 11, 13 }, { 17, 11, 23 }, - { 18, 11, 135 }, { 19, 11, 12 }, { 20, 11, 1 }, { 20, 11, 12 }, - { 20, 11, 14 }, { 8, 11, 503 }, { 6, 11, 466 }, { 7, 11, 671 }, - { 6, 0, 1200 }, { 6, 0, 1330 }, { 7, 0, 1255 }, { 6, 0, 986 }, - { 5, 0, 109 }, { 6, 0, 1784 }, { 7, 0, 1895 }, { 12, 0, 296 }, - { 12, 0, 302 }, { 7, 11, 983 }, { 5, 10, 485 }, { 6, 0, 660 }, - { 6, 0, 800 }, { 5, 0, 216 }, { 5, 0, 294 }, { 6, 0, 591 }, - { 7, 0, 1879 }, { 9, 0, 141 }, { 9, 0, 270 }, { 9, 0, 679 }, - { 10, 0, 159 }, { 11, 0, 197 }, { 11, 0, 438 }, { 12, 0, 538 }, - { 12, 0, 559 }, { 14, 0, 144 }, { 14, 0, 167 }, { 15, 0, 67 }, - { 4, 10, 285 }, { 5, 10, 317 }, { 6, 10, 301 }, { 7, 10, 7 }, - { 8, 10, 153 }, { 10, 10, 766 }, { 11, 10, 468 }, { 12, 10, 467 }, - { 13, 10, 143 }, { 8, 0, 945 }, { 6, 0, 1090 }, { 9, 0, 81 }, - { 12, 11, 468 }, { 19, 11, 96 }, { 20, 11, 24 }, { 6, 0, 391 }, - { 10, 11, 241 }, { 7, 0, 322 }, { 8, 0, 249 }, { 6, 0, 1412 }, - { 7, 11, 795 }, { 5, 0, 632 }, { 10, 0, 526 }, { 8, 10, 819 }, - { 6, 0, 144 }, { 7, 0, 948 }, { 7, 0, 1042 }, { 8, 0, 235 }, - { 8, 0, 461 }, { 9, 0, 453 }, { 9, 0, 796 }, { 10, 0, 354 }, - { 17, 0, 77 }, { 7, 11, 954 }, { 11, 10, 917 }, { 6, 0, 940 }, - { 6, 0, 1228 }, { 4, 0, 362 }, { 7, 0, 52 }, { 7, 0, 303 }, - { 6, 11, 549 }, { 8, 11, 34 }, { 8, 11, 283 }, { 9, 11, 165 }, - { 10, 11, 475 }, { 7, 11, 370 }, { 7, 11, 1007 }, { 7, 11, 1177 }, - { 7, 11, 1565 }, { 5, 11, 652 }, { 5, 11, 701 }, { 7, 11, 449 }, - { 5, 0, 196 }, { 6, 0, 486 }, { 7, 0, 212 }, { 8, 0, 309 }, - { 8, 0, 346 }, { 6, 10, 1719 }, { 6, 10, 1735 }, { 7, 10, 2016 }, - { 7, 10, 2020 }, { 8, 10, 837 }, { 9, 10, 852 }, { 6, 11, 159 }, - { 6, 11, 364 }, { 7, 11, 516 }, { 7, 11, 1439 }, { 9, 11, 518 }, - { 7, 0, 1912 }, { 7, 0, 1290 }, { 4, 0, 686 }, { 13, 11, 151 }, - { 10, 0, 625 }, { 8, 0, 706 }, { 10, 10, 568 }, { 11, 0, 412 }, - { 4, 0, 30 }, { 5, 0, 43 }, { 8, 10, 67 }, { 10, 10, 419 }, - { 7, 0, 967 }, { 13, 0, 11 }, { 12, 0, 758 }, { 14, 0, 441 }, - { 14, 0, 462 }, { 10, 10, 657 }, { 14, 10, 297 }, { 14, 10, 361 }, - { 11, 10, 729 }, { 4, 0, 220 }, { 7, 0, 1535 }, { 7, 11, 501 }, - { 9, 11, 111 }, { 10, 11, 141 }, { 11, 11, 332 }, { 13, 11, 43 }, - { 13, 11, 429 }, { 14, 11, 130 }, { 14, 11, 415 }, { 17, 11, 102 }, - { 4, 0, 950 }, { 6, 0, 1859 }, { 7, 0, 11 }, { 8, 0, 873 }, - { 12, 0, 710 }, { 12, 0, 718 }, { 12, 0, 748 }, { 12, 0, 765 }, - { 20, 0, 124 }, { 5, 11, 149 }, { 5, 11, 935 }, { 8, 11, 233 }, - { 14, 11, 291 }, { 6, 0, 1579 }, { 7, 0, 890 }, { 8, 10, 51 }, - { 9, 10, 868 }, { 10, 10, 833 }, { 12, 10, 481 }, { 12, 10, 570 }, - { 20, 10, 106 }, { 13, 0, 2 }, { 4, 10, 445 }, { 8, 11, 801 }, - { 7, 0, 1774 }, { 7, 0, 1725 }, { 10, 0, 393 }, { 5, 0, 263 }, - { 6, 0, 414 }, { 4, 11, 322 }, { 5, 10, 239 }, { 7, 0, 456 }, - { 7, 10, 1990 }, { 8, 10, 130 }, { 11, 10, 720 }, { 9, 0, 818 }, - { 5, 10, 123 }, { 6, 10, 530 }, { 7, 10, 348 }, { 7, 10, 1419 }, - { 7, 10, 2024 }, { 6, 0, 178 }, { 6, 0, 1750 }, { 8, 0, 251 }, - { 9, 0, 690 }, { 10, 0, 155 }, { 10, 0, 196 }, { 10, 0, 373 }, - { 11, 0, 698 }, { 13, 0, 155 }, { 20, 0, 93 }, { 5, 0, 97 }, - { 9, 0, 393 }, { 6, 0, 674 }, { 11, 0, 223 }, { 12, 0, 168 }, - { 4, 10, 210 }, { 11, 11, 464 }, { 6, 0, 1639 }, { 18, 0, 159 }, - { 11, 11, 2 }, { 7, 0, 934 }, { 8, 0, 647 }, { 17, 0, 97 }, - { 19, 0, 59 }, { 22, 0, 2 }, { 4, 0, 191 }, { 5, 0, 165 }, - { 9, 0, 346 }, { 10, 0, 655 }, { 11, 0, 885 }, { 4, 10, 430 }, - { 7, 11, 357 }, { 5, 0, 877 }, { 5, 10, 213 }, { 5, 11, 406 }, - { 8, 0, 128 }, { 11, 0, 179 }, { 6, 11, 69 }, { 7, 11, 117 }, - { 7, 0, 1297 }, { 11, 11, 43 }, { 13, 11, 72 }, { 13, 11, 142 }, - { 7, 11, 1830 }, { 14, 0, 164 }, { 5, 0, 57 }, { 6, 0, 101 }, - { 6, 0, 586 }, { 6, 0, 1663 }, { 7, 0, 132 }, { 7, 0, 1154 }, - { 7, 0, 1415 }, { 7, 0, 1507 }, { 12, 0, 493 }, { 15, 0, 105 }, - { 23, 0, 15 }, { 5, 0, 459 }, { 7, 0, 1073 }, { 8, 0, 241 }, - { 8, 0, 334 }, { 5, 11, 826 }, { 5, 10, 108 }, { 5, 10, 219 }, - { 10, 11, 132 }, { 11, 11, 191 }, { 11, 11, 358 }, { 11, 11, 460 }, - { 6, 0, 324 }, { 6, 0, 520 }, { 7, 0, 338 }, { 7, 0, 1729 }, - { 8, 0, 228 }, { 11, 0, 750 }, { 21, 0, 30 }, { 22, 0, 53 }, - { 4, 10, 193 }, { 5, 10, 916 }, { 7, 10, 364 }, { 10, 10, 398 }, - { 10, 10, 726 }, { 11, 10, 317 }, { 11, 10, 626 }, { 12, 10, 142 }, - { 12, 10, 288 }, { 12, 10, 678 }, { 13, 10, 313 }, { 15, 10, 113 }, - { 18, 10, 114 }, { 6, 11, 110 }, { 7, 11, 1681 }, { 7, 0, 910 }, - { 6, 10, 241 }, { 7, 10, 907 }, { 8, 10, 832 }, { 9, 10, 342 }, - { 10, 10, 729 }, { 11, 10, 284 }, { 11, 10, 445 }, { 11, 10, 651 }, - { 11, 10, 863 }, { 13, 10, 398 }, { 18, 10, 99 }, { 7, 0, 705 }, - { 9, 0, 734 }, { 5, 11, 1000 }, { 7, 11, 733 }, { 9, 11, 583 }, - { 4, 0, 73 }, { 6, 0, 612 }, { 7, 0, 927 }, { 7, 0, 1822 }, - { 8, 0, 217 }, { 9, 0, 765 }, { 9, 0, 766 }, { 10, 0, 408 }, - { 11, 0, 51 }, { 11, 0, 793 }, { 12, 0, 266 }, { 15, 0, 158 }, - { 20, 0, 89 }, { 22, 0, 32 }, { 7, 0, 1330 }, { 4, 11, 297 }, - { 6, 11, 529 }, { 7, 11, 152 }, { 7, 11, 713 }, { 7, 11, 1845 }, - { 8, 11, 710 }, { 8, 11, 717 }, { 12, 11, 639 }, { 5, 0, 389 }, - { 8, 0, 636 }, { 6, 0, 1409 }, { 4, 10, 562 }, { 9, 10, 254 }, - { 11, 10, 879 }, { 6, 0, 893 }, { 4, 10, 786 }, { 4, 11, 520 }, - { 7, 11, 575 }, { 8, 0, 21 }, { 12, 0, 721 }, { 8, 0, 959 }, - { 7, 11, 1428 }, { 7, 11, 1640 }, { 9, 11, 169 }, { 9, 11, 182 }, - { 9, 11, 367 }, { 9, 11, 478 }, { 9, 11, 506 }, { 9, 11, 551 }, - { 9, 11, 648 }, { 9, 11, 651 }, { 9, 11, 697 }, { 9, 11, 705 }, - { 9, 11, 725 }, { 9, 11, 787 }, { 9, 11, 794 }, { 10, 11, 198 }, - { 10, 11, 214 }, { 10, 11, 267 }, { 10, 11, 275 }, { 10, 11, 456 }, - { 10, 11, 551 }, { 10, 11, 561 }, { 10, 11, 613 }, { 10, 11, 627 }, - { 10, 11, 668 }, { 10, 11, 675 }, { 10, 11, 691 }, { 10, 11, 695 }, - { 10, 11, 707 }, { 10, 11, 715 }, { 11, 11, 183 }, { 11, 11, 201 }, - { 11, 11, 244 }, { 11, 11, 262 }, { 11, 11, 352 }, { 11, 11, 439 }, - { 11, 11, 493 }, { 11, 11, 572 }, { 11, 11, 591 }, { 11, 11, 608 }, - { 11, 11, 611 }, { 11, 11, 646 }, { 11, 11, 674 }, { 11, 11, 711 }, - { 11, 11, 751 }, { 11, 11, 761 }, { 11, 11, 776 }, { 11, 11, 785 }, - { 11, 11, 850 }, { 11, 11, 853 }, { 11, 11, 862 }, { 11, 11, 865 }, - { 11, 11, 868 }, { 11, 11, 898 }, { 11, 11, 902 }, { 11, 11, 903 }, - { 11, 11, 910 }, { 11, 11, 932 }, { 11, 11, 942 }, { 11, 11, 957 }, - { 11, 11, 967 }, { 11, 11, 972 }, { 12, 11, 148 }, { 12, 11, 195 }, - { 12, 11, 220 }, { 12, 11, 237 }, { 12, 11, 318 }, { 12, 11, 339 }, - { 12, 11, 393 }, { 12, 11, 445 }, { 12, 11, 450 }, { 12, 11, 474 }, - { 12, 11, 509 }, { 12, 11, 533 }, { 12, 11, 591 }, { 12, 11, 594 }, - { 12, 11, 597 }, { 12, 11, 621 }, { 12, 11, 633 }, { 12, 11, 642 }, - { 13, 11, 59 }, { 13, 11, 60 }, { 13, 11, 145 }, { 13, 11, 239 }, - { 13, 11, 250 }, { 13, 11, 273 }, { 13, 11, 329 }, { 13, 11, 344 }, - { 13, 11, 365 }, { 13, 11, 372 }, { 13, 11, 387 }, { 13, 11, 403 }, - { 13, 11, 414 }, { 13, 11, 456 }, { 13, 11, 478 }, { 13, 11, 483 }, - { 13, 11, 489 }, { 14, 11, 55 }, { 14, 11, 57 }, { 14, 11, 81 }, - { 14, 11, 90 }, { 14, 11, 148 }, { 14, 11, 239 }, { 14, 11, 266 }, - { 14, 11, 321 }, { 14, 11, 326 }, { 14, 11, 327 }, { 14, 11, 330 }, - { 14, 11, 347 }, { 14, 11, 355 }, { 14, 11, 401 }, { 14, 11, 411 }, - { 14, 11, 414 }, { 14, 11, 416 }, { 14, 11, 420 }, { 15, 11, 61 }, - { 15, 11, 74 }, { 15, 11, 87 }, { 15, 11, 88 }, { 15, 11, 94 }, - { 15, 11, 96 }, { 15, 11, 116 }, { 15, 11, 149 }, { 15, 11, 154 }, - { 16, 11, 50 }, { 16, 11, 63 }, { 16, 11, 73 }, { 17, 11, 2 }, - { 17, 11, 66 }, { 17, 11, 92 }, { 17, 11, 103 }, { 17, 11, 112 }, - { 18, 11, 50 }, { 18, 11, 54 }, { 18, 11, 82 }, { 18, 11, 86 }, - { 18, 11, 90 }, { 18, 11, 111 }, { 18, 11, 115 }, { 18, 11, 156 }, - { 19, 11, 40 }, { 19, 11, 79 }, { 20, 11, 78 }, { 21, 11, 22 }, - { 9, 11, 170 }, { 6, 0, 1433 }, { 7, 11, 1307 }, { 11, 11, 411 }, - { 5, 0, 189 }, { 7, 0, 442 }, { 7, 0, 443 }, { 8, 0, 281 }, - { 12, 0, 174 }, { 13, 0, 261 }, { 6, 10, 216 }, { 7, 10, 901 }, - { 7, 10, 1343 }, { 8, 10, 493 }, { 5, 11, 397 }, { 6, 11, 154 }, - { 7, 10, 341 }, { 7, 11, 676 }, { 8, 11, 443 }, { 8, 11, 609 }, - { 9, 11, 24 }, { 9, 11, 325 }, { 10, 11, 35 }, { 11, 10, 219 }, - { 11, 11, 535 }, { 11, 11, 672 }, { 11, 11, 1018 }, { 12, 11, 637 }, - { 16, 11, 30 }, { 6, 0, 2 }, { 7, 0, 191 }, { 7, 0, 446 }, - { 7, 0, 1262 }, { 7, 0, 1737 }, { 8, 0, 22 }, { 8, 0, 270 }, - { 8, 0, 612 }, { 9, 0, 4 }, { 9, 0, 312 }, { 9, 0, 436 }, - { 9, 0, 626 }, { 10, 0, 216 }, { 10, 0, 311 }, { 10, 0, 521 }, - { 10, 0, 623 }, { 11, 0, 72 }, { 11, 0, 330 }, { 11, 0, 455 }, - { 12, 0, 321 }, { 12, 0, 504 }, { 12, 0, 530 }, { 12, 0, 543 }, - { 13, 0, 17 }, { 13, 0, 156 }, { 13, 0, 334 }, { 14, 0, 131 }, - { 17, 0, 60 }, { 20, 0, 64 }, { 7, 0, 354 }, { 10, 0, 410 }, - { 11, 0, 815 }, { 11, 10, 130 }, { 7, 10, 1734 }, { 9, 11, 631 }, - { 12, 0, 425 }, { 15, 0, 112 }, { 10, 10, 115 }, { 11, 10, 420 }, - { 13, 10, 404 }, { 14, 10, 346 }, { 15, 10, 54 }, { 6, 0, 60 }, - { 6, 0, 166 }, { 7, 0, 374 }, { 7, 0, 670 }, { 7, 0, 1327 }, - { 8, 0, 411 }, { 8, 0, 435 }, { 9, 0, 653 }, { 9, 0, 740 }, - { 10, 0, 385 }, { 11, 0, 222 }, { 11, 0, 324 }, { 11, 0, 829 }, - { 12, 0, 611 }, { 7, 0, 1611 }, { 13, 0, 14 }, { 15, 0, 44 }, - { 19, 0, 13 }, { 20, 0, 76 }, { 5, 11, 981 }, { 4, 11, 56 }, - { 7, 11, 1791 }, { 8, 11, 607 }, { 8, 11, 651 }, { 11, 11, 465 }, - { 11, 11, 835 }, { 12, 11, 337 }, { 13, 11, 480 }, { 6, 0, 1478 }, - { 5, 10, 1011 }, { 8, 10, 701 }, { 11, 0, 596 }, { 5, 0, 206 }, - { 6, 0, 398 }, { 4, 10, 54 }, { 5, 10, 666 }, { 7, 10, 1039 }, - { 7, 10, 1130 }, { 9, 10, 195 }, { 10, 10, 302 }, { 7, 0, 50 }, - { 9, 11, 158 }, { 10, 11, 411 }, { 7, 11, 1120 }, { 6, 0, 517 }, - { 7, 0, 1159 }, { 10, 0, 621 }, { 11, 0, 192 }, { 6, 10, 1669 }, - { 4, 0, 592 }, { 6, 0, 600 }, { 7, 0, 1653 }, { 10, 0, 223 }, - { 11, 0, 645 }, { 8, 11, 139 }, { 7, 0, 64 }, { 8, 0, 245 }, - { 14, 0, 278 }, { 6, 11, 622 }, { 7, 11, 1030 }, { 8, 0, 604 }, - { 6, 0, 1502 }, { 10, 0, 265 }, { 13, 11, 168 }, { 7, 0, 1763 }, - { 12, 0, 310 }, { 7, 10, 798 }, { 11, 11, 719 }, { 7, 11, 160 }, - { 10, 11, 624 }, { 14, 11, 279 }, { 4, 11, 363 }, { 7, 10, 122 }, - { 9, 10, 259 }, { 10, 10, 84 }, { 11, 10, 470 }, { 12, 10, 541 }, - { 13, 10, 379 }, { 5, 0, 129 }, { 6, 0, 61 }, { 7, 0, 947 }, - { 6, 0, 1356 }, { 7, 11, 1191 }, { 13, 0, 505 }, { 13, 0, 506 }, - { 11, 0, 1000 }, { 5, 10, 82 }, { 5, 10, 131 }, { 7, 10, 1755 }, - { 8, 10, 31 }, { 9, 10, 168 }, { 9, 10, 764 }, { 11, 10, 869 }, - { 6, 0, 966 }, { 6, 10, 605 }, { 6, 11, 292 }, { 5, 11, 177 }, - { 6, 11, 616 }, { 7, 11, 827 }, { 9, 11, 525 }, { 10, 11, 656 }, - { 7, 11, 1486 }, { 10, 11, 31 }, { 5, 10, 278 }, { 9, 10, 68 }, - { 4, 10, 163 }, { 5, 10, 201 }, { 5, 10, 307 }, { 5, 10, 310 }, - { 6, 10, 335 }, { 7, 10, 284 }, { 8, 10, 165 }, { 6, 0, 839 }, - { 7, 10, 1660 }, { 8, 10, 781 }, { 6, 10, 33 }, { 7, 10, 1244 }, - { 5, 0, 637 }, { 4, 11, 161 }, { 5, 11, 631 }, { 9, 0, 590 }, - { 7, 10, 1953 }, { 8, 10, 720 }, { 5, 0, 280 }, { 7, 0, 1226 }, - { 10, 10, 203 }, { 6, 0, 1386 }, { 5, 0, 281 }, { 6, 0, 1026 }, - { 6, 10, 326 }, { 7, 10, 677 }, { 9, 10, 425 }, { 7, 11, 1557 }, - { 7, 11, 1684 }, { 7, 0, 1064 }, { 9, 11, 469 }, { 9, 11, 709 }, - { 12, 11, 512 }, { 14, 11, 65 }, { 17, 11, 12 }, { 6, 0, 917 }, - { 10, 11, 229 }, { 11, 11, 73 }, { 11, 11, 376 }, { 11, 11, 433 }, - { 7, 0, 555 }, { 9, 0, 192 }, { 13, 0, 30 }, { 13, 0, 49 }, - { 15, 0, 150 }, { 16, 0, 76 }, { 20, 0, 52 }, { 7, 10, 1316 }, - { 7, 10, 1412 }, { 7, 10, 1839 }, { 9, 10, 589 }, { 11, 10, 241 }, - { 11, 10, 676 }, { 11, 10, 811 }, { 11, 10, 891 }, { 12, 10, 140 }, - { 12, 10, 346 }, { 12, 10, 479 }, { 13, 10, 381 }, { 14, 10, 188 }, - { 18, 10, 30 }, { 21, 0, 15 }, { 6, 0, 1882 }, { 6, 0, 1883 }, - { 6, 0, 1897 }, { 9, 0, 945 }, { 9, 0, 1014 }, { 9, 0, 1020 }, - { 12, 0, 823 }, { 12, 0, 842 }, { 12, 0, 866 }, { 12, 0, 934 }, - { 15, 0, 242 }, { 18, 0, 208 }, { 6, 0, 965 }, { 6, 0, 1499 }, - { 7, 0, 33 }, { 7, 0, 120 }, { 8, 0, 489 }, { 9, 0, 319 }, - { 10, 0, 820 }, { 11, 0, 1004 }, { 12, 0, 379 }, { 12, 0, 679 }, - { 13, 0, 117 }, { 13, 0, 412 }, { 14, 0, 25 }, { 15, 0, 52 }, - { 15, 0, 161 }, { 16, 0, 47 }, { 21, 0, 2 }, { 6, 11, 558 }, - { 7, 11, 651 }, { 8, 11, 421 }, { 9, 11, 0 }, { 10, 11, 34 }, - { 4, 0, 937 }, { 5, 0, 801 }, { 7, 0, 473 }, { 5, 10, 358 }, - { 7, 10, 1184 }, { 10, 10, 662 }, { 13, 10, 212 }, { 13, 10, 304 }, - { 13, 10, 333 }, { 17, 10, 98 }, { 4, 0, 877 }, { 6, 0, 693 }, - { 6, 0, 824 }, { 4, 0, 365 }, { 7, 11, 1832 }, { 10, 11, 374 }, - { 5, 0, 7 }, { 11, 0, 774 }, { 4, 0, 734 }, { 5, 0, 662 }, - { 6, 0, 430 }, { 4, 0, 746 }, { 7, 0, 1090 }, { 5, 0, 360 }, - { 8, 0, 237 }, { 10, 0, 231 }, { 19, 0, 124 }, { 10, 11, 348 }, - { 6, 11, 6 }, { 7, 11, 81 }, { 7, 11, 771 }, { 7, 11, 1731 }, - { 9, 11, 405 }, { 10, 11, 421 }, { 6, 0, 740 }, { 9, 0, 822 }, - { 5, 10, 946 }, { 7, 0, 1485 }, { 8, 0, 929 }, { 7, 10, 411 }, - { 8, 10, 631 }, { 9, 10, 323 }, { 10, 10, 355 }, { 11, 10, 491 }, - { 12, 10, 143 }, { 12, 10, 402 }, { 13, 10, 73 }, { 14, 10, 408 }, - { 15, 10, 107 }, { 18, 10, 71 }, { 7, 10, 590 }, { 5, 11, 881 }, - { 5, 11, 885 }, { 22, 11, 25 }, { 4, 0, 852 }, { 5, 11, 142 }, - { 6, 11, 546 }, { 7, 10, 1467 }, { 8, 10, 328 }, { 10, 10, 544 }, - { 11, 10, 955 }, { 13, 10, 320 }, { 17, 10, 83 }, { 9, 0, 17 }, - { 10, 0, 291 }, { 11, 10, 511 }, { 13, 10, 394 }, { 14, 10, 298 }, - { 14, 10, 318 }, { 18, 10, 103 }, { 5, 11, 466 }, { 11, 11, 571 }, - { 12, 11, 198 }, { 13, 11, 283 }, { 14, 11, 186 }, { 15, 11, 21 }, - { 15, 11, 103 }, { 6, 0, 1001 }, { 4, 11, 185 }, { 5, 11, 257 }, - { 5, 11, 839 }, { 5, 11, 936 }, { 7, 11, 171 }, { 9, 11, 399 }, - { 10, 11, 258 }, { 10, 11, 395 }, { 10, 11, 734 }, { 11, 11, 1014 }, - { 12, 11, 23 }, { 13, 11, 350 }, { 14, 11, 150 }, { 19, 11, 6 }, - { 15, 0, 35 }, { 4, 0, 831 }, { 5, 10, 835 }, { 6, 10, 483 }, - { 4, 0, 277 }, { 5, 0, 608 }, { 6, 0, 493 }, { 7, 0, 457 }, - { 12, 0, 384 }, { 7, 11, 404 }, { 7, 11, 1377 }, { 7, 11, 1430 }, - { 7, 11, 2017 }, { 8, 11, 149 }, { 8, 11, 239 }, { 8, 11, 512 }, - { 8, 11, 793 }, { 8, 11, 818 }, { 9, 11, 474 }, { 9, 11, 595 }, - { 10, 11, 122 }, { 10, 11, 565 }, { 10, 11, 649 }, { 10, 11, 783 }, - { 11, 11, 239 }, { 11, 11, 295 }, { 11, 11, 447 }, { 11, 11, 528 }, - { 11, 11, 639 }, { 11, 11, 800 }, { 11, 11, 936 }, { 12, 11, 25 }, - { 12, 11, 73 }, { 12, 11, 77 }, { 12, 11, 157 }, { 12, 11, 316 }, - { 12, 11, 390 }, { 12, 11, 391 }, { 12, 11, 394 }, { 12, 11, 395 }, - { 12, 11, 478 }, { 12, 11, 503 }, { 12, 11, 592 }, { 12, 11, 680 }, - { 13, 11, 50 }, { 13, 11, 53 }, { 13, 11, 132 }, { 13, 11, 198 }, - { 13, 11, 275 }, { 13, 11, 322 }, { 13, 11, 415 }, { 14, 11, 71 }, - { 14, 11, 257 }, { 14, 11, 395 }, { 15, 11, 71 }, { 15, 11, 136 }, - { 17, 11, 123 }, { 18, 11, 93 }, { 19, 11, 58 }, { 6, 0, 1351 }, - { 7, 0, 27 }, { 7, 0, 316 }, { 8, 11, 712 }, { 8, 0, 984 }, - { 5, 0, 552 }, { 9, 0, 264 }, { 4, 0, 401 }, { 6, 0, 710 }, - { 6, 0, 1111 }, { 6, 0, 1343 }, { 6, 0, 1211 }, { 9, 0, 543 }, - { 10, 0, 524 }, { 11, 0, 108 }, { 11, 0, 653 }, { 12, 0, 524 }, - { 13, 0, 123 }, { 14, 0, 252 }, { 16, 0, 18 }, { 19, 0, 38 }, - { 20, 0, 26 }, { 20, 0, 65 }, { 21, 0, 3 }, { 23, 0, 11 }, - { 4, 0, 205 }, { 5, 0, 623 }, { 7, 0, 104 }, { 8, 0, 519 }, - { 9, 0, 716 }, { 4, 10, 677 }, { 4, 11, 377 }, { 24, 11, 13 }, - { 7, 11, 1673 }, { 7, 0, 579 }, { 9, 0, 41 }, { 9, 0, 244 }, - { 9, 0, 669 }, { 10, 0, 5 }, { 11, 0, 861 }, { 11, 0, 951 }, - { 11, 0, 980 }, { 4, 0, 717 }, { 8, 0, 1011 }, { 4, 0, 805 }, - { 4, 11, 180 }, { 7, 11, 1906 }, { 4, 10, 777 }, { 4, 10, 331 }, - { 4, 0, 489 }, { 6, 0, 1024 }, { 4, 11, 491 }, { 5, 10, 747 }, - { 7, 11, 1182 }, { 4, 11, 171 }, { 10, 11, 234 }, { 4, 11, 586 }, - { 7, 11, 1186 }, { 10, 11, 631 }, { 7, 0, 892 }, { 7, 11, 336 }, - { 9, 11, 931 }, { 10, 11, 334 }, { 20, 11, 71 }, { 9, 0, 473 }, - { 6, 0, 864 }, { 12, 0, 659 }, { 11, 11, 926 }, { 7, 0, 819 }, - { 9, 0, 26 }, { 9, 0, 392 }, { 10, 0, 152 }, { 10, 0, 226 }, - { 11, 0, 19 }, { 12, 0, 276 }, { 12, 0, 426 }, { 12, 0, 589 }, - { 13, 0, 460 }, { 15, 0, 97 }, { 19, 0, 48 }, { 20, 0, 104 }, - { 7, 0, 51 }, { 5, 10, 326 }, { 4, 10, 691 }, { 18, 10, 16 }, - { 9, 0, 130 }, { 11, 0, 765 }, { 10, 10, 680 }, { 10, 10, 793 }, - { 13, 10, 357 }, { 5, 11, 765 }, { 8, 0, 229 }, { 6, 10, 32 }, - { 7, 10, 385 }, { 7, 10, 757 }, { 7, 10, 1916 }, { 8, 10, 94 }, - { 8, 10, 711 }, { 9, 10, 541 }, { 10, 10, 162 }, { 10, 10, 795 }, - { 11, 10, 989 }, { 11, 10, 1010 }, { 12, 10, 14 }, { 14, 10, 308 }, - { 7, 11, 474 }, { 9, 11, 578 }, { 4, 0, 674 }, { 4, 0, 770 }, - { 5, 0, 79 }, { 7, 0, 1027 }, { 7, 0, 1477 }, { 11, 0, 52 }, - { 5, 11, 424 }, { 6, 0, 1666 }, { 6, 0, 409 }, { 6, 10, 349 }, - { 6, 10, 1682 }, { 7, 10, 1252 }, { 8, 10, 112 }, { 8, 11, 714 }, - { 9, 10, 435 }, { 9, 10, 668 }, { 10, 10, 290 }, { 10, 10, 319 }, - { 10, 10, 815 }, { 11, 10, 180 }, { 11, 10, 837 }, { 12, 10, 240 }, - { 13, 10, 152 }, { 13, 10, 219 }, { 14, 10, 158 }, { 5, 0, 789 }, - { 6, 0, 195 }, { 4, 0, 251 }, { 4, 0, 688 }, { 7, 0, 513 }, - { 7, 0, 1284 }, { 4, 10, 581 }, { 9, 11, 420 }, { 10, 11, 269 }, - { 10, 11, 285 }, { 10, 11, 576 }, { 11, 11, 397 }, { 13, 11, 175 }, - { 17, 11, 90 }, { 6, 10, 126 }, { 7, 10, 573 }, { 8, 10, 397 }, - { 14, 10, 44 }, { 4, 11, 429 }, { 5, 0, 889 }, { 4, 0, 160 }, - { 5, 0, 330 }, { 7, 0, 1434 }, { 8, 0, 174 }, { 7, 11, 18 }, - { 7, 11, 699 }, { 7, 11, 1966 }, { 8, 11, 752 }, { 9, 11, 273 }, - { 9, 11, 412 }, { 9, 11, 703 }, { 10, 11, 71 }, { 10, 11, 427 }, - { 10, 11, 508 }, { 18, 11, 97 }, { 6, 0, 872 }, { 6, 0, 899 }, - { 5, 10, 926 }, { 6, 0, 1126 }, { 6, 0, 918 }, { 4, 11, 53 }, - { 5, 11, 186 }, { 7, 11, 752 }, { 7, 0, 268 }, { 8, 0, 569 }, - { 6, 0, 1224 }, { 6, 0, 1361 }, { 7, 10, 1232 }, { 9, 10, 531 }, - { 8, 11, 575 }, { 10, 11, 289 }, { 11, 11, 319 }, { 5, 10, 670 }, - { 4, 11, 675 }, { 5, 0, 374 }, { 7, 10, 1957 }, { 5, 0, 731 }, - { 11, 0, 190 }, { 15, 0, 49 }, { 11, 11, 190 }, { 15, 11, 49 }, - { 4, 0, 626 }, { 5, 0, 506 }, { 5, 0, 642 }, { 6, 0, 425 }, - { 10, 0, 202 }, { 11, 0, 141 }, { 9, 0, 444 }, { 7, 10, 242 }, - { 7, 10, 1942 }, { 6, 11, 209 }, { 8, 11, 468 }, { 9, 11, 210 }, - { 11, 11, 36 }, { 12, 11, 28 }, { 12, 11, 630 }, { 13, 11, 21 }, - { 13, 11, 349 }, { 14, 11, 7 }, { 17, 11, 13 }, { 4, 11, 342 }, - { 7, 11, 1179 }, { 5, 10, 834 }, { 7, 10, 1202 }, { 8, 10, 14 }, - { 9, 10, 481 }, { 9, 10, 880 }, { 4, 11, 928 }, { 5, 11, 910 }, - { 4, 11, 318 }, { 4, 11, 496 }, { 7, 11, 856 }, { 11, 11, 654 }, - { 8, 0, 835 }, { 7, 0, 1526 }, { 10, 10, 465 }, { 23, 0, 17 }, - { 7, 0, 477 }, { 4, 10, 357 }, { 6, 10, 172 }, { 7, 10, 143 }, - { 9, 10, 413 }, { 6, 0, 1374 }, { 10, 0, 994 }, { 18, 0, 76 }, - { 4, 10, 590 }, { 7, 0, 287 }, { 8, 0, 355 }, { 9, 0, 293 }, - { 9, 0, 743 }, { 6, 0, 1389 }, { 7, 11, 915 }, { 8, 11, 247 }, - { 19, 11, 0 }, { 4, 11, 202 }, { 5, 11, 382 }, { 6, 11, 454 }, - { 7, 11, 936 }, { 7, 11, 1803 }, { 8, 11, 758 }, { 9, 11, 375 }, - { 9, 11, 895 }, { 10, 11, 743 }, { 10, 11, 792 }, { 11, 11, 978 }, - { 11, 11, 1012 }, { 14, 11, 109 }, { 5, 0, 384 }, { 8, 0, 455 }, - { 12, 0, 48 }, { 4, 11, 390 }, { 5, 10, 169 }, { 7, 10, 333 }, - { 8, 10, 45 }, { 5, 0, 264 }, { 6, 0, 184 }, { 10, 11, 791 }, - { 5, 11, 717 }, { 4, 10, 198 }, { 6, 11, 445 }, { 7, 11, 332 }, - { 9, 11, 909 }, { 8, 0, 1001 }, { 4, 10, 24 }, { 5, 10, 140 }, - { 5, 10, 185 }, { 7, 10, 1500 }, { 11, 10, 565 }, { 11, 10, 838 }, - { 6, 11, 578 }, { 5, 0, 633 }, { 6, 0, 28 }, { 7, 0, 1323 }, - { 4, 0, 851 }, { 8, 11, 267 }, { 7, 0, 359 }, { 8, 0, 243 }, - { 12, 0, 175 }, { 4, 10, 334 }, { 5, 10, 593 }, { 13, 11, 87 }, - { 8, 11, 766 }, { 10, 0, 287 }, { 12, 0, 138 }, { 10, 11, 287 }, - { 12, 11, 138 }, { 4, 0, 105 }, { 4, 0, 740 }, { 12, 10, 116 }, - { 6, 0, 857 }, { 7, 11, 1841 }, { 6, 0, 1402 }, { 9, 0, 819 }, - { 4, 11, 584 }, { 4, 10, 709 }, { 5, 10, 897 }, { 5, 0, 224 }, - { 13, 0, 174 }, { 18, 0, 52 }, { 7, 10, 1840 }, { 4, 10, 608 }, - { 5, 10, 497 }, { 11, 11, 60 }, { 4, 0, 758 }, { 7, 0, 1649 }, - { 4, 11, 226 }, { 4, 11, 326 }, { 7, 11, 1770 }, { 5, 11, 426 }, - { 8, 11, 30 }, { 9, 11, 2 }, { 11, 11, 549 }, { 19, 11, 122 }, - { 7, 10, 2039 }, { 6, 10, 540 }, { 8, 10, 136 }, { 4, 0, 573 }, - { 8, 0, 655 }, { 4, 10, 897 }, { 5, 10, 786 }, { 7, 0, 351 }, - { 11, 0, 128 }, { 5, 10, 999 }, { 4, 10, 299 }, { 7, 10, 1004 }, - { 5, 0, 918 }, { 4, 11, 345 }, { 4, 11, 385 }, { 7, 11, 265 }, - { 7, 11, 587 }, { 5, 10, 456 }, { 8, 10, 180 }, { 6, 0, 687 }, - { 6, 0, 1537 }, { 4, 11, 347 }, { 5, 11, 423 }, { 5, 11, 996 }, - { 7, 11, 1329 }, { 4, 10, 755 }, { 7, 11, 1259 }, { 9, 11, 125 }, - { 11, 11, 65 }, { 12, 11, 285 }, { 5, 11, 136 }, { 6, 11, 136 }, - { 8, 11, 644 }, { 6, 0, 1525 }, { 4, 0, 1009 }, { 7, 0, 1139 }, - { 11, 10, 338 }, { 4, 0, 340 }, { 7, 10, 1464 }, { 8, 0, 847 }, - { 10, 0, 861 }, { 10, 0, 876 }, { 10, 0, 889 }, { 10, 0, 922 }, - { 10, 0, 929 }, { 10, 0, 933 }, { 12, 0, 784 }, { 12, 0, 791 }, - { 11, 0, 176 }, { 9, 11, 134 }, { 10, 11, 2 }, { 10, 11, 27 }, - { 10, 11, 333 }, { 11, 11, 722 }, { 15, 11, 1 }, { 4, 11, 433 }, - { 5, 11, 719 }, { 5, 0, 985 }, { 7, 0, 509 }, { 7, 0, 529 }, - { 17, 0, 96 }, { 4, 0, 615 }, { 4, 10, 890 }, { 5, 10, 805 }, - { 5, 10, 819 }, { 5, 10, 961 }, { 6, 10, 396 }, { 6, 10, 1631 }, - { 6, 10, 1678 }, { 7, 10, 1967 }, { 7, 10, 2041 }, { 9, 10, 630 }, - { 11, 10, 8 }, { 11, 10, 1019 }, { 12, 10, 176 }, { 13, 10, 225 }, - { 14, 10, 292 }, { 21, 10, 24 }, { 7, 0, 1919 }, { 6, 0, 1131 }, - { 16, 11, 21 }, { 16, 11, 51 }, { 7, 10, 1815 }, { 4, 0, 247 }, - { 7, 10, 1505 }, { 10, 10, 190 }, { 10, 10, 634 }, { 11, 10, 792 }, - { 12, 10, 358 }, { 12, 10, 447 }, { 5, 10, 0 }, { 6, 10, 536 }, - { 7, 10, 604 }, { 13, 10, 445 }, { 17, 10, 126 }, { 4, 0, 184 }, - { 5, 0, 390 }, { 6, 0, 337 }, { 7, 0, 23 }, { 7, 0, 494 }, - { 7, 0, 618 }, { 7, 0, 1456 }, { 8, 0, 27 }, { 8, 0, 599 }, - { 10, 0, 153 }, { 11, 0, 710 }, { 6, 10, 232 }, { 6, 10, 412 }, - { 7, 10, 1074 }, { 8, 10, 9 }, { 8, 10, 157 }, { 8, 10, 786 }, - { 9, 10, 196 }, { 9, 10, 352 }, { 9, 10, 457 }, { 10, 10, 337 }, - { 11, 10, 232 }, { 11, 10, 877 }, { 12, 10, 480 }, { 12, 10, 546 }, - { 13, 0, 38 }, { 7, 10, 958 }, { 4, 10, 382 }, { 8, 10, 579 }, - { 4, 10, 212 }, { 7, 10, 1206 }, { 4, 11, 555 }, { 8, 11, 536 }, - { 10, 11, 288 }, { 11, 11, 139 }, { 11, 11, 171 }, { 9, 11, 370 }, - { 10, 11, 90 }, { 4, 0, 1015 }, { 6, 0, 1088 }, { 5, 10, 655 }, - { 7, 11, 977 }, { 6, 0, 1585 }, { 17, 10, 67 }, { 19, 10, 74 }, - { 10, 0, 227 }, { 11, 0, 497 }, { 11, 0, 709 }, { 12, 0, 415 }, - { 6, 0, 360 }, { 7, 0, 1664 }, { 8, 0, 478 }, { 7, 0, 95 }, - { 6, 10, 231 }, { 8, 10, 423 }, { 12, 11, 65 }, { 4, 11, 257 }, - { 7, 11, 2031 }, { 7, 11, 1768 }, { 5, 10, 300 }, { 11, 11, 211 }, - { 8, 0, 699 }, { 6, 10, 237 }, { 7, 10, 611 }, { 8, 10, 100 }, - { 9, 10, 416 }, { 11, 10, 335 }, { 12, 10, 173 }, { 18, 10, 101 }, - { 14, 0, 26 }, { 18, 0, 150 }, { 6, 0, 581 }, { 7, 0, 1119 }, - { 7, 10, 1208 }, { 4, 0, 739 }, { 6, 11, 83 }, { 6, 11, 1733 }, - { 7, 11, 1389 }, { 9, 0, 869 }, { 4, 0, 67 }, { 5, 0, 422 }, - { 7, 0, 1037 }, { 7, 0, 1289 }, { 7, 0, 1555 }, { 9, 0, 741 }, - { 17, 0, 108 }, { 5, 10, 199 }, { 12, 10, 427 }, { 18, 10, 38 }, - { 8, 0, 464 }, { 14, 0, 42 }, { 10, 0, 96 }, { 8, 11, 501 }, - { 9, 11, 696 }, { 6, 11, 592 }, { 4, 0, 512 }, { 4, 0, 966 }, - { 5, 0, 342 }, { 6, 0, 1855 }, { 8, 0, 869 }, { 8, 0, 875 }, - { 8, 0, 901 }, { 16, 0, 26 }, { 8, 0, 203 }, { 11, 0, 823 }, - { 11, 0, 846 }, { 12, 0, 482 }, { 13, 0, 277 }, { 13, 0, 302 }, - { 13, 0, 464 }, { 14, 0, 205 }, { 14, 0, 221 }, { 4, 0, 449 }, - { 5, 0, 718 }, { 7, 11, 1718 }, { 9, 11, 95 }, { 9, 11, 274 }, - { 10, 11, 279 }, { 10, 11, 317 }, { 10, 11, 420 }, { 11, 11, 303 }, - { 11, 11, 808 }, { 12, 11, 134 }, { 12, 11, 367 }, { 13, 11, 149 }, - { 13, 11, 347 }, { 14, 11, 349 }, { 14, 11, 406 }, { 18, 11, 22 }, - { 18, 11, 89 }, { 18, 11, 122 }, { 19, 11, 47 }, { 5, 11, 26 }, - { 4, 0, 355 }, { 6, 0, 311 }, { 9, 0, 256 }, { 10, 0, 404 }, - { 4, 11, 550 }, { 10, 0, 758 }, { 6, 10, 312 }, { 6, 10, 1715 }, - { 10, 10, 584 }, { 11, 10, 546 }, { 11, 10, 692 }, { 12, 10, 259 }, - { 12, 10, 295 }, { 13, 10, 46 }, { 13, 10, 154 }, { 8, 11, 822 }, - { 5, 0, 827 }, { 4, 11, 902 }, { 5, 11, 809 }, { 6, 11, 122 }, - { 7, 11, 896 }, { 5, 0, 64 }, { 12, 0, 581 }, { 4, 0, 442 }, - { 6, 0, 739 }, { 7, 0, 1047 }, { 7, 0, 1352 }, { 7, 0, 1643 }, - { 7, 11, 1911 }, { 9, 11, 449 }, { 10, 11, 192 }, { 10, 11, 740 }, - { 7, 11, 262 }, { 4, 10, 588 }, { 5, 11, 620 }, { 5, 0, 977 }, - { 6, 0, 288 }, { 7, 0, 528 }, { 4, 11, 34 }, { 5, 11, 574 }, - { 7, 11, 279 }, { 7, 11, 1624 }, { 8, 11, 601 }, { 6, 0, 1375 }, - { 4, 10, 231 }, { 5, 10, 61 }, { 6, 10, 104 }, { 7, 10, 729 }, - { 7, 10, 964 }, { 7, 10, 1658 }, { 12, 10, 414 }, { 6, 10, 263 }, - { 10, 10, 757 }, { 4, 10, 320 }, { 4, 0, 254 }, { 7, 0, 1309 }, - { 5, 11, 332 }, { 7, 11, 1309 }, { 6, 11, 261 }, { 8, 11, 182 }, - { 11, 11, 943 }, { 4, 10, 225 }, { 6, 0, 12 }, { 7, 0, 1219 }, - { 4, 0, 275 }, { 12, 0, 376 }, { 6, 11, 1721 }, { 13, 11, 490 }, - { 4, 11, 933 }, { 5, 11, 880 }, { 6, 0, 951 }, { 6, 0, 1109 }, - { 6, 0, 1181 }, { 7, 0, 154 }, { 4, 10, 405 }, { 7, 10, 817 }, - { 14, 10, 58 }, { 17, 10, 37 }, { 18, 10, 124 }, { 6, 0, 1520 }, - { 5, 10, 974 }, { 6, 0, 1753 }, { 6, 0, 369 }, { 6, 0, 502 }, - { 7, 0, 1036 }, { 8, 0, 348 }, { 9, 0, 452 }, { 10, 0, 26 }, - { 11, 0, 224 }, { 11, 0, 387 }, { 11, 0, 772 }, { 12, 0, 95 }, - { 12, 0, 629 }, { 13, 0, 195 }, { 13, 0, 207 }, { 13, 0, 241 }, - { 14, 0, 260 }, { 14, 0, 270 }, { 15, 0, 140 }, { 4, 0, 269 }, - { 5, 0, 480 }, { 7, 0, 532 }, { 7, 0, 1197 }, { 7, 0, 1358 }, - { 8, 0, 291 }, { 11, 0, 349 }, { 14, 0, 396 }, { 5, 10, 235 }, - { 7, 10, 1239 }, { 11, 10, 131 }, { 12, 10, 370 }, { 7, 10, 956 }, - { 7, 10, 1157 }, { 7, 10, 1506 }, { 7, 10, 1606 }, { 7, 10, 1615 }, - { 7, 10, 1619 }, { 7, 10, 1736 }, { 7, 10, 1775 }, { 8, 10, 590 }, - { 9, 10, 324 }, { 9, 10, 736 }, { 9, 10, 774 }, { 9, 10, 776 }, - { 9, 10, 784 }, { 10, 10, 567 }, { 10, 10, 708 }, { 11, 10, 518 }, - { 11, 10, 613 }, { 11, 10, 695 }, { 11, 10, 716 }, { 11, 10, 739 }, - { 11, 10, 770 }, { 11, 10, 771 }, { 11, 10, 848 }, { 11, 10, 857 }, - { 11, 10, 931 }, { 11, 10, 947 }, { 12, 10, 326 }, { 12, 10, 387 }, - { 12, 10, 484 }, { 12, 10, 528 }, { 12, 10, 552 }, { 12, 10, 613 }, - { 13, 10, 189 }, { 13, 10, 256 }, { 13, 10, 340 }, { 13, 10, 432 }, - { 13, 10, 436 }, { 13, 10, 440 }, { 13, 10, 454 }, { 14, 10, 174 }, - { 14, 10, 220 }, { 14, 10, 284 }, { 14, 10, 390 }, { 17, 10, 121 }, - { 8, 11, 598 }, { 9, 11, 664 }, { 10, 11, 441 }, { 9, 10, 137 }, - { 10, 10, 221 }, { 5, 11, 812 }, { 20, 0, 15 }, { 6, 0, 1341 }, - { 6, 0, 1017 }, { 4, 11, 137 }, { 7, 11, 1178 }, { 7, 11, 1520 }, - { 7, 10, 390 }, { 10, 10, 140 }, { 7, 11, 1260 }, { 7, 11, 1790 }, - { 9, 11, 191 }, { 7, 10, 1144 }, { 6, 0, 1810 }, { 7, 0, 657 }, - { 8, 0, 886 }, { 10, 0, 857 }, { 14, 0, 440 }, { 16, 0, 96 }, - { 8, 0, 533 }, { 6, 11, 1661 }, { 7, 11, 1975 }, { 7, 11, 2009 }, - { 7, 11, 2011 }, { 6, 0, 1453 }, { 6, 10, 464 }, { 4, 11, 715 }, - { 5, 10, 407 }, { 11, 10, 204 }, { 11, 10, 243 }, { 11, 10, 489 }, - { 12, 10, 293 }, { 19, 10, 37 }, { 20, 10, 73 }, { 22, 10, 38 }, - { 5, 11, 703 }, { 4, 0, 211 }, { 7, 0, 1483 }, { 5, 10, 325 }, - { 8, 10, 5 }, { 8, 10, 227 }, { 9, 10, 105 }, { 10, 10, 585 }, - { 12, 10, 614 }, { 4, 0, 332 }, { 5, 0, 335 }, { 6, 0, 238 }, - { 7, 0, 269 }, { 7, 0, 811 }, { 7, 0, 1797 }, { 8, 0, 836 }, - { 9, 0, 507 }, { 13, 0, 242 }, { 5, 11, 89 }, { 7, 11, 1915 }, - { 9, 11, 185 }, { 9, 11, 235 }, { 9, 11, 496 }, { 10, 11, 64 }, - { 10, 11, 270 }, { 10, 11, 403 }, { 10, 11, 469 }, { 10, 11, 529 }, - { 10, 11, 590 }, { 11, 11, 140 }, { 11, 11, 860 }, { 13, 11, 1 }, - { 13, 11, 422 }, { 14, 11, 341 }, { 14, 11, 364 }, { 17, 11, 93 }, - { 18, 11, 113 }, { 19, 11, 97 }, { 19, 11, 113 }, { 5, 11, 695 }, - { 16, 0, 19 }, { 5, 11, 6 }, { 6, 11, 183 }, { 6, 10, 621 }, - { 7, 11, 680 }, { 7, 11, 978 }, { 7, 11, 1013 }, { 7, 11, 1055 }, - { 12, 11, 230 }, { 13, 11, 172 }, { 13, 10, 504 }, { 18, 11, 29 }, - { 8, 0, 156 }, { 5, 0, 1009 }, { 6, 11, 29 }, { 11, 11, 63 }, - { 6, 0, 820 }, { 6, 10, 218 }, { 7, 10, 454 }, { 7, 10, 782 }, - { 8, 10, 768 }, { 12, 10, 686 }, { 5, 0, 228 }, { 6, 0, 203 }, - { 7, 0, 156 }, { 8, 0, 347 }, { 9, 0, 265 }, { 18, 0, 39 }, - { 20, 0, 54 }, { 21, 0, 31 }, { 22, 0, 3 }, { 23, 0, 0 }, - { 15, 11, 8 }, { 18, 11, 39 }, { 20, 11, 54 }, { 21, 11, 31 }, - { 22, 11, 3 }, { 23, 11, 0 }, { 7, 0, 1131 }, { 7, 0, 1468 }, - { 16, 10, 0 }, { 6, 0, 1276 }, { 10, 10, 676 }, { 12, 10, 462 }, - { 4, 11, 311 }, { 6, 11, 1740 }, { 7, 11, 170 }, { 8, 11, 90 }, - { 8, 11, 177 }, { 8, 11, 415 }, { 11, 11, 714 }, { 14, 11, 281 }, - { 6, 10, 164 }, { 6, 0, 1792 }, { 10, 0, 849 }, { 22, 10, 50 }, - { 5, 0, 291 }, { 5, 0, 318 }, { 7, 0, 765 }, { 9, 0, 389 }, - { 12, 0, 548 }, { 8, 11, 522 }, { 14, 11, 328 }, { 11, 11, 91 }, - { 13, 11, 129 }, { 15, 11, 101 }, { 17, 11, 125 }, { 4, 11, 494 }, - { 6, 11, 74 }, { 7, 11, 44 }, { 7, 11, 407 }, { 8, 11, 551 }, - { 12, 11, 17 }, { 15, 11, 5 }, { 20, 11, 11 }, { 4, 11, 276 }, - { 5, 11, 296 }, { 6, 10, 343 }, { 7, 10, 195 }, { 7, 11, 1777 }, - { 9, 10, 226 }, { 10, 10, 197 }, { 10, 10, 575 }, { 11, 10, 502 }, - { 11, 10, 899 }, { 10, 0, 525 }, { 11, 0, 82 }, { 14, 0, 453 }, - { 4, 11, 7 }, { 5, 11, 90 }, { 5, 11, 158 }, { 6, 11, 542 }, - { 7, 11, 221 }, { 7, 11, 1574 }, { 9, 11, 490 }, { 10, 11, 540 }, - { 11, 11, 443 }, { 11, 11, 757 }, { 7, 0, 666 }, { 22, 10, 29 }, - { 22, 11, 29 }, { 4, 0, 422 }, { 19, 10, 8 }, { 5, 0, 355 }, - { 17, 0, 0 }, { 6, 0, 1873 }, { 9, 0, 918 }, { 7, 11, 588 }, - { 9, 11, 175 }, { 10, 11, 530 }, { 15, 11, 31 }, { 11, 0, 165 }, - { 7, 10, 1125 }, { 9, 10, 143 }, { 14, 10, 405 }, { 22, 10, 21 }, - { 9, 0, 260 }, { 9, 0, 905 }, { 5, 11, 872 }, { 6, 11, 57 }, - { 6, 11, 479 }, { 6, 11, 562 }, { 7, 11, 471 }, { 7, 11, 1060 }, - { 9, 11, 447 }, { 9, 11, 454 }, { 13, 11, 6 }, { 10, 11, 704 }, - { 5, 0, 865 }, { 5, 0, 914 }, { 6, 0, 1625 }, { 5, 0, 234 }, - { 7, 0, 1383 }, { 5, 11, 31 }, { 6, 11, 614 }, { 17, 11, 61 }, - { 7, 11, 1200 }, { 10, 11, 460 }, { 6, 11, 424 }, { 7, 11, 1866 }, - { 8, 0, 306 }, { 5, 10, 959 }, { 12, 11, 30 }, { 13, 11, 148 }, - { 14, 11, 87 }, { 14, 11, 182 }, { 16, 11, 42 }, { 18, 11, 92 }, - { 20, 11, 70 }, { 6, 0, 1919 }, { 6, 0, 1921 }, { 9, 0, 923 }, - { 9, 0, 930 }, { 9, 0, 941 }, { 9, 0, 949 }, { 9, 0, 987 }, - { 9, 0, 988 }, { 9, 0, 992 }, { 12, 0, 802 }, { 12, 0, 815 }, - { 12, 0, 856 }, { 12, 0, 885 }, { 12, 0, 893 }, { 12, 0, 898 }, - { 12, 0, 919 }, { 12, 0, 920 }, { 12, 0, 941 }, { 12, 0, 947 }, - { 15, 0, 183 }, { 15, 0, 185 }, { 15, 0, 189 }, { 15, 0, 197 }, - { 15, 0, 202 }, { 15, 0, 233 }, { 18, 0, 218 }, { 18, 0, 219 }, - { 18, 0, 233 }, { 15, 11, 156 }, { 7, 10, 1759 }, { 8, 10, 173 }, - { 13, 0, 163 }, { 13, 0, 180 }, { 18, 0, 78 }, { 20, 0, 35 }, - { 5, 11, 13 }, { 6, 11, 142 }, { 6, 10, 266 }, { 6, 11, 97 }, - { 7, 11, 116 }, { 8, 11, 322 }, { 8, 11, 755 }, { 9, 11, 548 }, - { 10, 11, 714 }, { 11, 11, 884 }, { 13, 11, 324 }, { 7, 0, 1312 }, - { 9, 0, 814 }, { 9, 11, 676 }, { 5, 0, 707 }, { 7, 0, 1493 }, - { 6, 0, 421 }, { 7, 0, 61 }, { 7, 0, 1540 }, { 10, 0, 11 }, - { 10, 0, 501 }, { 12, 0, 733 }, { 12, 0, 766 }, { 7, 11, 866 }, - { 7, 11, 1163 }, { 9, 0, 341 }, { 14, 0, 98 }, { 17, 11, 115 }, - { 7, 11, 1111 }, { 8, 10, 300 }, { 8, 0, 1014 }, { 8, 11, 1 }, - { 9, 11, 112 }, { 10, 11, 326 }, { 4, 11, 730 }, { 5, 11, 488 }, - { 6, 11, 527 }, { 7, 11, 489 }, { 7, 11, 1636 }, { 8, 11, 121 }, - { 8, 11, 144 }, { 8, 11, 359 }, { 9, 11, 193 }, { 9, 11, 241 }, - { 9, 11, 336 }, { 9, 11, 882 }, { 11, 11, 266 }, { 11, 11, 372 }, - { 11, 11, 944 }, { 12, 11, 401 }, { 12, 11, 641 }, { 6, 0, 971 }, - { 6, 0, 1121 }, { 6, 0, 102 }, { 7, 0, 72 }, { 15, 0, 142 }, - { 19, 0, 67 }, { 23, 0, 30 }, { 7, 0, 823 }, { 6, 0, 1045 }, - { 5, 10, 427 }, { 5, 10, 734 }, { 7, 10, 478 }, { 8, 10, 52 }, - { 7, 0, 1930 }, { 11, 10, 217 }, { 14, 10, 165 }, { 6, 0, 1512 }, - { 7, 0, 1870 }, { 9, 11, 31 }, { 10, 11, 244 }, { 10, 11, 699 }, - { 12, 11, 149 }, { 13, 11, 497 }, { 5, 11, 377 }, { 17, 11, 101 }, - { 10, 11, 158 }, { 13, 11, 13 }, { 13, 11, 137 }, { 13, 11, 258 }, - { 14, 11, 111 }, { 14, 11, 225 }, { 14, 11, 253 }, { 14, 11, 304 }, - { 14, 11, 339 }, { 14, 11, 417 }, { 18, 11, 33 }, { 6, 0, 87 }, - { 6, 10, 1734 }, { 7, 10, 20 }, { 7, 10, 1056 }, { 8, 10, 732 }, - { 9, 10, 406 }, { 9, 10, 911 }, { 10, 10, 694 }, { 6, 0, 1243 }, - { 9, 0, 245 }, { 7, 0, 68 }, { 8, 0, 48 }, { 8, 0, 88 }, - { 8, 0, 582 }, { 8, 0, 681 }, { 9, 0, 373 }, { 9, 0, 864 }, - { 11, 0, 157 }, { 11, 0, 336 }, { 11, 0, 843 }, { 20, 0, 27 }, - { 8, 11, 663 }, { 16, 11, 8 }, { 5, 10, 613 }, { 4, 0, 88 }, - { 5, 0, 137 }, { 5, 0, 174 }, { 5, 0, 777 }, { 6, 0, 1664 }, - { 6, 0, 1725 }, { 7, 0, 77 }, { 7, 0, 426 }, { 7, 0, 1317 }, - { 7, 0, 1355 }, { 8, 0, 126 }, { 8, 0, 563 }, { 9, 0, 523 }, - { 9, 0, 750 }, { 10, 0, 310 }, { 10, 0, 836 }, { 11, 0, 42 }, - { 11, 0, 318 }, { 11, 0, 731 }, { 12, 0, 68 }, { 12, 0, 92 }, - { 12, 0, 507 }, { 12, 0, 692 }, { 13, 0, 81 }, { 13, 0, 238 }, - { 13, 0, 374 }, { 14, 0, 436 }, { 18, 0, 138 }, { 19, 0, 78 }, - { 19, 0, 111 }, { 20, 0, 55 }, { 20, 0, 77 }, { 20, 0, 92 }, - { 13, 0, 418 }, { 4, 0, 938 }, { 9, 0, 625 }, { 10, 0, 351 }, - { 5, 11, 843 }, { 7, 10, 32 }, { 7, 10, 984 }, { 8, 10, 85 }, - { 8, 10, 709 }, { 9, 10, 579 }, { 9, 10, 847 }, { 9, 10, 856 }, - { 10, 10, 799 }, { 11, 10, 258 }, { 11, 10, 1007 }, { 12, 10, 331 }, - { 12, 10, 615 }, { 13, 10, 188 }, { 13, 10, 435 }, { 14, 10, 8 }, - { 15, 10, 165 }, { 16, 10, 27 }, { 20, 10, 40 }, { 6, 0, 1668 }, - { 7, 0, 1499 }, { 8, 0, 117 }, { 9, 0, 314 }, { 10, 0, 174 }, - { 7, 0, 707 }, { 4, 11, 554 }, { 5, 11, 536 }, { 5, 0, 403 }, - { 5, 11, 207 }, { 9, 11, 79 }, { 11, 11, 625 }, { 17, 11, 7 }, - { 4, 11, 424 }, { 8, 11, 785 }, { 4, 10, 167 }, { 7, 10, 82 }, - { 9, 0, 7 }, { 23, 0, 6 }, { 9, 11, 7 }, { 23, 11, 6 }, - { 6, 0, 282 }, { 5, 10, 62 }, { 6, 10, 534 }, { 7, 10, 74 }, - { 7, 10, 678 }, { 7, 10, 684 }, { 7, 10, 1043 }, { 7, 10, 1072 }, - { 8, 10, 280 }, { 8, 10, 541 }, { 8, 10, 686 }, { 9, 10, 258 }, - { 10, 10, 519 }, { 11, 10, 252 }, { 12, 10, 282 }, { 10, 10, 33 }, - { 4, 10, 359 }, { 4, 0, 44 }, { 5, 0, 311 }, { 6, 0, 156 }, - { 7, 0, 639 }, { 7, 0, 762 }, { 7, 0, 1827 }, { 9, 0, 8 }, - { 9, 0, 462 }, { 20, 0, 83 }, { 7, 11, 769 }, { 9, 11, 18 }, - { 10, 11, 358 }, { 4, 0, 346 }, { 7, 0, 115 }, { 9, 0, 180 }, - { 9, 0, 456 }, { 10, 0, 363 }, { 4, 11, 896 }, { 6, 11, 1777 }, - { 5, 10, 211 }, { 7, 0, 761 }, { 7, 0, 1051 }, { 9, 0, 545 }, - { 6, 10, 145 }, { 13, 10, 336 }, { 7, 11, 750 }, { 9, 11, 223 }, - { 11, 11, 27 }, { 11, 11, 466 }, { 12, 11, 624 }, { 14, 11, 265 }, - { 18, 11, 61 }, { 6, 0, 752 }, { 6, 0, 768 }, { 6, 0, 1195 }, - { 6, 0, 1254 }, { 6, 0, 1619 }, { 9, 0, 835 }, { 6, 0, 1936 }, - { 8, 0, 930 }, { 8, 0, 960 }, { 4, 10, 263 }, { 4, 11, 249 }, - { 12, 0, 653 }, { 4, 10, 916 }, { 4, 11, 603 }, { 5, 11, 661 }, - { 8, 0, 344 }, { 4, 11, 11 }, { 6, 11, 128 }, { 7, 11, 231 }, - { 7, 11, 1533 }, { 10, 11, 725 }, { 6, 0, 1483 }, { 6, 0, 875 }, - { 6, 0, 185 }, { 7, 0, 1899 }, { 9, 0, 875 }, { 11, 0, 673 }, - { 15, 10, 155 }, { 16, 10, 79 }, { 7, 0, 93 }, { 7, 0, 210 }, - { 7, 0, 1223 }, { 8, 0, 451 }, { 8, 0, 460 }, { 11, 0, 353 }, - { 11, 0, 475 }, { 4, 10, 599 }, { 6, 10, 1634 }, { 7, 10, 67 }, - { 7, 10, 691 }, { 7, 10, 979 }, { 7, 10, 1697 }, { 8, 10, 207 }, - { 8, 10, 214 }, { 8, 10, 231 }, { 8, 10, 294 }, { 8, 10, 336 }, - { 8, 10, 428 }, { 8, 10, 471 }, { 8, 10, 622 }, { 8, 10, 626 }, - { 8, 10, 679 }, { 8, 10, 759 }, { 8, 10, 829 }, { 9, 10, 11 }, - { 9, 10, 246 }, { 9, 10, 484 }, { 9, 10, 573 }, { 9, 10, 706 }, - { 9, 10, 762 }, { 9, 10, 798 }, { 9, 10, 855 }, { 9, 10, 870 }, - { 9, 10, 912 }, { 10, 10, 303 }, { 10, 10, 335 }, { 10, 10, 424 }, - { 10, 10, 461 }, { 10, 10, 543 }, { 10, 10, 759 }, { 10, 10, 814 }, - { 11, 10, 59 }, { 11, 10, 235 }, { 11, 10, 590 }, { 11, 10, 929 }, - { 11, 10, 963 }, { 11, 10, 987 }, { 12, 10, 114 }, { 12, 10, 182 }, - { 12, 10, 226 }, { 12, 10, 332 }, { 12, 10, 439 }, { 12, 10, 575 }, - { 12, 10, 598 }, { 12, 10, 675 }, { 13, 10, 8 }, { 13, 10, 125 }, - { 13, 10, 194 }, { 13, 10, 287 }, { 14, 10, 197 }, { 14, 10, 383 }, - { 15, 10, 53 }, { 17, 10, 63 }, { 19, 10, 46 }, { 19, 10, 98 }, - { 19, 10, 106 }, { 20, 10, 85 }, { 4, 11, 476 }, { 4, 0, 327 }, - { 5, 0, 478 }, { 7, 0, 1332 }, { 8, 0, 753 }, { 5, 0, 1020 }, - { 5, 0, 1022 }, { 7, 11, 1807 }, { 4, 0, 103 }, { 5, 0, 401 }, - { 4, 0, 499 }, { 7, 0, 1421 }, { 10, 0, 207 }, { 13, 0, 164 }, - { 19, 10, 126 }, { 9, 11, 20 }, { 10, 11, 324 }, { 11, 11, 488 }, - { 4, 0, 96 }, { 9, 11, 280 }, { 10, 11, 134 }, { 7, 0, 968 }, - { 5, 10, 187 }, { 7, 10, 1286 }, { 5, 11, 112 }, { 6, 11, 103 }, - { 6, 11, 150 }, { 8, 0, 914 }, { 10, 0, 3 }, { 4, 10, 215 }, - { 9, 10, 38 }, { 11, 10, 23 }, { 11, 10, 127 }, { 11, 10, 796 }, - { 7, 0, 399 }, { 6, 0, 563 }, { 9, 0, 224 }, { 6, 0, 704 }, - { 6, 0, 1214 }, { 4, 11, 708 }, { 8, 11, 15 }, { 9, 11, 50 }, - { 9, 11, 386 }, { 11, 11, 18 }, { 11, 11, 529 }, { 12, 11, 228 }, - { 4, 11, 563 }, { 7, 11, 109 }, { 7, 11, 592 }, { 7, 11, 637 }, - { 7, 11, 770 }, { 7, 11, 1701 }, { 8, 11, 436 }, { 8, 11, 463 }, - { 9, 11, 60 }, { 9, 11, 335 }, { 9, 11, 904 }, { 10, 11, 73 }, - { 11, 11, 434 }, { 12, 11, 585 }, { 13, 11, 331 }, { 18, 11, 110 }, - { 20, 11, 60 }, { 6, 0, 1559 }, { 4, 11, 502 }, { 6, 11, 347 }, - { 10, 11, 161 }, { 4, 11, 33 }, { 5, 11, 102 }, { 5, 11, 500 }, - { 6, 11, 284 }, { 7, 11, 1079 }, { 7, 11, 1423 }, { 7, 11, 1702 }, - { 8, 11, 470 }, { 9, 11, 554 }, { 9, 11, 723 }, { 11, 11, 333 }, - { 7, 11, 246 }, { 7, 11, 840 }, { 6, 11, 10 }, { 8, 11, 571 }, - { 9, 11, 739 }, { 15, 11, 91 }, { 8, 0, 861 }, { 10, 0, 905 }, - { 12, 0, 730 }, { 12, 0, 789 }, { 5, 11, 626 }, { 6, 0, 946 }, - { 5, 0, 746 }, { 12, 0, 333 }, { 14, 0, 332 }, { 12, 11, 333 }, - { 14, 11, 332 }, { 5, 11, 18 }, { 6, 11, 526 }, { 13, 11, 24 }, - { 13, 11, 110 }, { 19, 11, 5 }, { 19, 11, 44 }, { 4, 0, 910 }, - { 5, 0, 832 }, { 7, 10, 2002 }, { 10, 11, 768 }, { 11, 11, 787 }, - { 4, 11, 309 }, { 5, 11, 462 }, { 7, 11, 970 }, { 7, 11, 1097 }, - { 4, 10, 28 }, { 5, 10, 440 }, { 7, 10, 248 }, { 11, 10, 833 }, - { 12, 10, 344 }, { 6, 10, 1654 }, { 6, 0, 632 }, { 6, 0, 652 }, - { 6, 0, 1272 }, { 6, 0, 1384 }, { 6, 0, 1560 }, { 6, 11, 1704 }, - { 6, 0, 1393 }, { 5, 10, 853 }, { 6, 10, 249 }, { 7, 10, 1234 }, - { 11, 10, 573 }, { 5, 11, 86 }, { 7, 11, 743 }, { 9, 11, 85 }, - { 10, 11, 281 }, { 10, 11, 432 }, { 11, 11, 490 }, { 12, 11, 251 }, - { 13, 11, 118 }, { 14, 11, 378 }, { 18, 11, 143 }, { 5, 11, 524 }, - { 5, 11, 744 }, { 6, 0, 1514 }, { 10, 0, 201 }, { 14, 0, 319 }, - { 7, 0, 717 }, { 10, 0, 510 }, { 7, 10, 392 }, { 8, 10, 20 }, - { 8, 10, 172 }, { 8, 10, 690 }, { 9, 10, 383 }, { 9, 10, 845 }, - { 11, 10, 293 }, { 11, 10, 832 }, { 11, 10, 920 }, { 11, 10, 984 }, - { 13, 10, 221 }, { 6, 0, 1381 }, { 5, 10, 858 }, { 5, 10, 992 }, - { 8, 0, 528 }, { 9, 0, 348 }, { 10, 11, 107 }, { 12, 11, 436 }, - { 4, 0, 20 }, { 5, 0, 616 }, { 6, 0, 1251 }, { 4, 11, 927 }, - { 10, 11, 123 }, { 12, 11, 670 }, { 13, 11, 371 }, { 14, 11, 142 }, - { 18, 11, 94 }, { 6, 0, 1163 }, { 7, 11, 1149 }, { 9, 11, 156 }, - { 6, 0, 307 }, { 5, 11, 778 }, { 7, 0, 1091 }, { 7, 0, 1765 }, - { 5, 11, 502 }, { 6, 10, 268 }, { 9, 10, 62 }, { 8, 11, 196 }, - { 10, 11, 283 }, { 11, 11, 406 }, { 4, 0, 26 }, { 5, 0, 429 }, - { 6, 0, 245 }, { 7, 0, 704 }, { 7, 0, 1379 }, { 7, 0, 1474 }, - { 5, 11, 855 }, { 4, 0, 881 }, { 4, 0, 621 }, { 7, 11, 1596 }, - { 7, 11, 1400 }, { 9, 11, 446 }, { 10, 11, 45 }, { 6, 0, 736 }, - { 10, 10, 106 }, { 5, 0, 542 }, { 6, 0, 348 }, { 5, 0, 868 }, - { 8, 0, 433 }, { 7, 0, 1495 }, { 10, 0, 771 }, { 6, 10, 613 }, - { 8, 10, 223 }, { 10, 0, 215 }, { 13, 0, 124 }, { 8, 11, 391 }, - { 7, 11, 172 }, { 4, 10, 670 }, { 12, 0, 55 }, { 9, 10, 40 }, - { 11, 10, 136 }, { 7, 0, 62 }, { 19, 0, 112 }, { 4, 0, 856 }, - { 4, 11, 568 }, { 12, 0, 270 }, { 11, 10, 259 }, { 8, 0, 572 }, - { 9, 0, 698 }, { 4, 11, 732 }, { 9, 10, 310 }, { 9, 10, 682 }, - { 14, 10, 296 }, { 6, 0, 939 }, { 8, 11, 733 }, { 7, 11, 1435 }, - { 7, 10, 1401 }, { 7, 10, 1476 }, { 6, 0, 352 }, { 4, 10, 296 }, - { 7, 10, 401 }, { 7, 10, 1410 }, { 7, 10, 1594 }, { 7, 10, 1674 }, - { 8, 10, 63 }, { 8, 10, 660 }, { 9, 10, 74 }, { 4, 11, 428 }, - { 5, 11, 668 }, { 4, 10, 139 }, { 4, 10, 388 }, { 12, 10, 188 }, - { 7, 11, 2015 }, { 12, 11, 665 }, { 4, 0, 647 }, { 18, 0, 10 }, - { 10, 0, 220 }, { 14, 0, 464 }, { 4, 0, 109 }, { 6, 0, 1746 }, - { 6, 0, 515 }, { 4, 10, 747 }, { 6, 11, 1623 }, { 6, 11, 1681 }, - { 7, 10, 649 }, { 7, 10, 1479 }, { 7, 10, 1583 }, { 5, 10, 232 }, - { 7, 0, 566 }, { 9, 10, 887 }, { 4, 0, 40 }, { 10, 0, 67 }, - { 11, 0, 117 }, { 11, 0, 768 }, { 11, 0, 935 }, { 4, 0, 801 }, - { 7, 0, 992 }, { 8, 0, 301 }, { 9, 0, 722 }, { 12, 0, 63 }, - { 13, 0, 29 }, { 14, 0, 161 }, { 15, 0, 18 }, { 11, 0, 923 }, - { 6, 11, 1748 }, { 8, 11, 715 }, { 9, 11, 802 }, { 10, 11, 46 }, - { 10, 11, 819 }, { 13, 11, 308 }, { 14, 11, 351 }, { 14, 11, 363 }, - { 18, 11, 67 }, { 9, 11, 745 }, { 7, 0, 1145 }, { 4, 10, 14 }, - { 7, 10, 1801 }, { 10, 10, 748 }, { 13, 10, 458 }, { 4, 11, 63 }, - { 5, 11, 347 }, { 6, 11, 474 }, { 7, 0, 568 }, { 4, 10, 425 }, - { 7, 11, 577 }, { 7, 11, 1432 }, { 9, 11, 475 }, { 9, 11, 505 }, - { 9, 11, 526 }, { 9, 11, 609 }, { 9, 11, 689 }, { 9, 11, 726 }, - { 9, 11, 735 }, { 9, 11, 738 }, { 10, 11, 556 }, { 10, 11, 674 }, - { 10, 11, 684 }, { 11, 11, 89 }, { 11, 11, 202 }, { 11, 11, 272 }, - { 11, 11, 380 }, { 11, 11, 415 }, { 11, 11, 505 }, { 11, 11, 537 }, - { 11, 11, 550 }, { 11, 11, 562 }, { 11, 11, 640 }, { 11, 11, 667 }, - { 11, 11, 688 }, { 11, 11, 847 }, { 11, 11, 927 }, { 11, 11, 930 }, - { 11, 11, 940 }, { 12, 11, 144 }, { 12, 11, 325 }, { 12, 11, 329 }, - { 12, 11, 389 }, { 12, 11, 403 }, { 12, 11, 451 }, { 12, 11, 515 }, - { 12, 11, 604 }, { 12, 11, 616 }, { 12, 11, 626 }, { 13, 11, 66 }, - { 13, 11, 131 }, { 13, 11, 167 }, { 13, 11, 236 }, { 13, 11, 368 }, - { 13, 11, 411 }, { 13, 11, 434 }, { 13, 11, 453 }, { 13, 11, 461 }, - { 13, 11, 474 }, { 14, 11, 59 }, { 14, 11, 60 }, { 14, 11, 139 }, - { 14, 11, 152 }, { 14, 11, 276 }, { 14, 11, 353 }, { 14, 11, 402 }, - { 15, 11, 28 }, { 15, 11, 81 }, { 15, 11, 123 }, { 15, 11, 152 }, - { 18, 11, 136 }, { 20, 11, 88 }, { 9, 0, 247 }, { 7, 11, 1622 }, - { 9, 11, 544 }, { 11, 11, 413 }, { 16, 11, 25 }, { 4, 0, 645 }, - { 7, 0, 825 }, { 6, 10, 1768 }, { 7, 11, 89 }, { 12, 0, 328 }, - { 5, 10, 943 }, { 6, 10, 1779 }, { 6, 0, 1363 }, { 5, 10, 245 }, - { 6, 10, 576 }, { 7, 10, 582 }, { 8, 10, 225 }, { 6, 0, 1280 }, - { 5, 11, 824 }, { 5, 11, 941 }, { 7, 11, 440 }, { 8, 11, 230 }, - { 11, 11, 106 }, { 5, 0, 28 }, { 6, 0, 204 }, { 10, 0, 320 }, - { 10, 0, 583 }, { 13, 0, 502 }, { 14, 0, 72 }, { 14, 0, 274 }, - { 14, 0, 312 }, { 14, 0, 344 }, { 15, 0, 159 }, { 16, 0, 62 }, - { 16, 0, 69 }, { 17, 0, 30 }, { 18, 0, 42 }, { 18, 0, 53 }, - { 18, 0, 84 }, { 18, 0, 140 }, { 19, 0, 68 }, { 19, 0, 85 }, - { 20, 0, 5 }, { 20, 0, 45 }, { 20, 0, 101 }, { 22, 0, 7 }, - { 22, 0, 20 }, { 4, 0, 558 }, { 6, 0, 390 }, { 7, 0, 162 }, - { 7, 0, 689 }, { 9, 0, 360 }, { 10, 0, 653 }, { 6, 0, 764 }, - { 6, 0, 862 }, { 9, 0, 833 }, { 5, 0, 856 }, { 6, 0, 1672 }, - { 6, 0, 1757 }, { 6, 0, 1781 }, { 5, 0, 92 }, { 10, 0, 736 }, - { 12, 0, 102 }, { 6, 0, 1927 }, { 6, 0, 1944 }, { 8, 0, 924 }, - { 8, 0, 948 }, { 10, 0, 967 }, { 10, 0, 978 }, { 6, 0, 1479 }, - { 5, 0, 590 }, { 8, 0, 360 }, { 9, 0, 213 }, { 10, 0, 63 }, - { 6, 0, 1521 }, { 6, 0, 709 }, { 6, 0, 891 }, { 4, 10, 443 }, - { 13, 0, 477 }, { 14, 0, 120 }, { 20, 0, 61 }, { 4, 11, 914 }, - { 5, 11, 800 }, { 5, 11, 852 }, { 10, 11, 54 }, { 13, 11, 115 }, - { 4, 11, 918 }, { 5, 11, 876 }, { 11, 11, 152 }, { 4, 11, 92 }, - { 5, 11, 274 }, { 7, 11, 1901 }, { 9, 11, 800 }, { 10, 11, 693 }, - { 11, 11, 482 }, { 11, 11, 734 }, { 11, 11, 789 }, { 9, 0, 483 }, - { 4, 10, 298 }, { 6, 0, 1213 }, { 13, 11, 498 }, { 7, 11, 1451 }, - { 5, 11, 743 }, { 4, 0, 1022 }, { 10, 0, 1000 }, { 12, 0, 957 }, - { 12, 0, 980 }, { 12, 0, 1013 }, { 14, 0, 481 }, { 16, 0, 116 }, - { 8, 0, 503 }, { 17, 0, 29 }, { 4, 11, 49 }, { 7, 11, 280 }, - { 7, 11, 1633 }, { 7, 0, 1712 }, { 6, 0, 466 }, { 8, 11, 47 }, - { 5, 10, 164 }, { 7, 10, 121 }, { 14, 10, 189 }, { 7, 10, 812 }, - { 7, 10, 1261 }, { 7, 10, 1360 }, { 9, 10, 632 }, { 12, 10, 352 }, - { 11, 10, 556 }, { 4, 0, 731 }, { 5, 11, 272 }, { 5, 11, 908 }, - { 5, 11, 942 }, { 7, 11, 1008 }, { 7, 11, 1560 }, { 8, 11, 197 }, - { 9, 11, 47 }, { 11, 11, 538 }, { 11, 11, 742 }, { 4, 10, 172 }, - { 9, 10, 611 }, { 10, 10, 436 }, { 12, 10, 673 }, { 13, 10, 255 }, - { 5, 10, 844 }, { 10, 0, 484 }, { 11, 0, 754 }, { 12, 0, 457 }, - { 14, 0, 171 }, { 14, 0, 389 }, { 18, 0, 153 }, { 9, 10, 263 }, - { 10, 10, 147 }, { 10, 10, 492 }, { 9, 11, 891 }, { 10, 0, 241 }, - { 5, 10, 537 }, { 6, 0, 2005 }, { 8, 0, 964 }, { 9, 10, 842 }, - { 23, 11, 8 }, { 4, 11, 407 }, { 4, 11, 560 }, { 7, 11, 1884 }, - { 6, 0, 1100 }, { 6, 0, 1242 }, { 7, 0, 954 }, { 5, 10, 230 }, - { 5, 10, 392 }, { 6, 10, 420 }, { 9, 10, 568 }, { 12, 10, 612 }, - { 4, 11, 475 }, { 11, 11, 35 }, { 11, 11, 90 }, { 13, 11, 7 }, - { 13, 11, 71 }, { 13, 11, 177 }, { 14, 11, 422 }, { 8, 11, 332 }, - { 7, 0, 1958 }, { 6, 0, 549 }, { 8, 0, 34 }, { 8, 0, 283 }, - { 9, 0, 165 }, { 10, 0, 475 }, { 10, 0, 952 }, { 12, 0, 966 }, - { 12, 0, 994 }, { 5, 0, 652 }, { 5, 0, 701 }, { 7, 0, 449 }, - { 4, 0, 655 }, { 7, 0, 850 }, { 17, 0, 75 }, { 18, 0, 137 }, - { 4, 0, 146 }, { 7, 0, 1618 }, { 8, 0, 670 }, { 5, 10, 41 }, - { 7, 10, 1459 }, { 7, 10, 1469 }, { 7, 10, 1859 }, { 9, 10, 549 }, - { 11, 10, 905 }, { 5, 10, 696 }, { 6, 0, 159 }, { 6, 0, 364 }, - { 7, 0, 516 }, { 9, 0, 518 }, { 7, 0, 1439 }, { 6, 11, 222 }, - { 7, 11, 636 }, { 7, 11, 1620 }, { 8, 11, 409 }, { 9, 11, 693 }, - { 11, 11, 77 }, { 13, 0, 151 }, { 13, 11, 45 }, { 6, 0, 1027 }, - { 4, 11, 336 }, { 4, 10, 771 }, { 11, 11, 392 }, { 10, 11, 121 }, - { 11, 11, 175 }, { 21, 11, 16 }, { 8, 0, 950 }, { 10, 0, 983 }, - { 5, 10, 921 }, { 7, 0, 993 }, { 6, 10, 180 }, { 7, 10, 1137 }, - { 8, 10, 751 }, { 11, 10, 805 }, { 7, 0, 501 }, { 9, 0, 111 }, - { 10, 0, 141 }, { 11, 0, 332 }, { 13, 0, 43 }, { 13, 0, 429 }, - { 14, 0, 130 }, { 14, 0, 415 }, { 17, 0, 102 }, { 4, 10, 183 }, - { 5, 11, 882 }, { 7, 10, 271 }, { 11, 10, 824 }, { 11, 10, 952 }, - { 13, 10, 278 }, { 13, 10, 339 }, { 13, 10, 482 }, { 14, 10, 424 }, - { 20, 10, 99 }, { 4, 10, 19 }, { 5, 10, 477 }, { 5, 10, 596 }, - { 6, 10, 505 }, { 7, 10, 1221 }, { 11, 10, 907 }, { 12, 10, 209 }, - { 13, 10, 214 }, { 7, 10, 1215 }, { 5, 0, 452 }, { 4, 11, 426 }, - { 5, 0, 149 }, { 8, 0, 233 }, { 5, 0, 935 }, { 6, 11, 58 }, - { 7, 11, 654 }, { 7, 11, 745 }, { 7, 11, 1969 }, { 8, 11, 240 }, - { 8, 11, 675 }, { 9, 11, 479 }, { 9, 11, 731 }, { 10, 11, 330 }, - { 10, 11, 593 }, { 10, 11, 817 }, { 11, 11, 32 }, { 11, 11, 133 }, - { 11, 11, 221 }, { 17, 11, 68 }, { 12, 0, 582 }, { 18, 0, 131 }, - { 7, 11, 102 }, { 9, 11, 538 }, { 8, 0, 801 }, { 6, 10, 1645 }, - { 4, 0, 70 }, { 6, 10, 92 }, { 6, 10, 188 }, { 7, 10, 1269 }, - { 7, 10, 1524 }, { 7, 10, 1876 }, { 10, 10, 228 }, { 11, 10, 1020 }, - { 4, 10, 459 }, { 5, 10, 966 }, { 10, 0, 369 }, { 16, 0, 36 }, - { 12, 10, 330 }, { 13, 11, 366 }, { 7, 0, 721 }, { 10, 0, 236 }, - { 12, 0, 204 }, { 6, 10, 18 }, { 7, 10, 932 }, { 8, 10, 757 }, - { 9, 10, 54 }, { 9, 10, 65 }, { 9, 10, 844 }, { 10, 10, 113 }, - { 10, 10, 315 }, { 10, 10, 798 }, { 11, 10, 153 }, { 12, 10, 151 }, - { 12, 10, 392 }, { 12, 10, 666 }, { 14, 10, 248 }, { 7, 0, 241 }, - { 10, 0, 430 }, { 8, 10, 548 }, { 9, 10, 532 }, { 10, 10, 117 }, - { 11, 10, 351 }, { 11, 10, 375 }, { 15, 10, 23 }, { 6, 10, 1742 }, - { 5, 10, 965 }, { 5, 11, 566 }, { 6, 11, 48 }, { 7, 11, 63 }, - { 6, 10, 182 }, { 10, 10, 65 }, { 10, 10, 488 }, { 10, 10, 497 }, - { 6, 11, 114 }, { 7, 11, 1224 }, { 7, 11, 1556 }, { 8, 11, 3 }, - { 6, 0, 1817 }, { 8, 11, 576 }, { 9, 11, 267 }, { 6, 0, 1078 }, - { 16, 0, 16 }, { 9, 10, 588 }, { 10, 10, 260 }, { 10, 0, 1021 }, - { 5, 0, 406 }, { 6, 0, 2022 }, { 5, 11, 933 }, { 6, 0, 69 }, - { 7, 0, 117 }, { 7, 0, 1830 }, { 8, 11, 427 }, { 4, 0, 432 }, - { 7, 0, 824 }, { 6, 10, 1786 }, { 5, 0, 826 }, { 11, 11, 67 }, - { 5, 11, 759 }, { 7, 10, 308 }, { 9, 0, 816 }, { 5, 0, 1000 }, - { 4, 0, 297 }, { 6, 0, 529 }, { 7, 0, 152 }, { 7, 0, 713 }, - { 7, 0, 1845 }, { 8, 0, 710 }, { 8, 0, 717 }, { 12, 0, 639 }, - { 12, 0, 685 }, { 7, 0, 423 }, { 8, 10, 588 }, { 8, 10, 287 }, - { 8, 0, 510 }, { 6, 0, 1048 }, { 6, 0, 618 }, { 7, 11, 56 }, - { 7, 11, 1989 }, { 8, 11, 337 }, { 8, 11, 738 }, { 9, 11, 600 }, - { 10, 11, 483 }, { 12, 11, 37 }, { 13, 11, 447 }, { 14, 11, 92 }, - { 4, 0, 520 }, { 7, 0, 575 }, { 8, 0, 990 }, { 10, 0, 977 }, - { 7, 11, 774 }, { 9, 11, 347 }, { 11, 11, 24 }, { 12, 11, 170 }, - { 8, 11, 379 }, { 12, 10, 290 }, { 4, 11, 328 }, { 4, 0, 321 }, - { 6, 0, 569 }, { 4, 11, 101 }, { 7, 11, 1171 }, { 7, 0, 723 }, - { 7, 0, 1135 }, { 5, 11, 833 }, { 8, 11, 744 }, { 7, 10, 719 }, - { 8, 10, 809 }, { 8, 10, 834 }, { 8, 0, 921 }, { 8, 10, 796 }, - { 5, 10, 210 }, { 6, 10, 213 }, { 7, 10, 60 }, { 10, 10, 364 }, - { 11, 10, 135 }, { 5, 0, 397 }, { 6, 0, 154 }, { 7, 0, 676 }, - { 8, 0, 443 }, { 8, 0, 609 }, { 9, 0, 24 }, { 9, 0, 325 }, - { 10, 0, 35 }, { 11, 0, 535 }, { 11, 0, 672 }, { 11, 0, 1018 }, - { 12, 0, 637 }, { 16, 0, 30 }, { 5, 10, 607 }, { 8, 10, 326 }, - { 8, 10, 490 }, { 4, 10, 701 }, { 5, 10, 472 }, { 6, 11, 9 }, - { 6, 11, 397 }, { 7, 11, 53 }, { 7, 11, 1742 }, { 9, 10, 758 }, - { 10, 11, 632 }, { 11, 11, 828 }, { 12, 11, 146 }, { 7, 10, 380 }, - { 7, 10, 1947 }, { 20, 11, 109 }, { 10, 10, 278 }, { 10, 11, 278 }, - { 6, 0, 856 }, { 7, 0, 139 }, { 4, 10, 386 }, { 8, 10, 405 }, - { 8, 10, 728 }, { 9, 10, 497 }, { 11, 10, 110 }, { 11, 10, 360 }, - { 15, 10, 37 }, { 16, 10, 84 }, { 13, 0, 282 }, { 5, 0, 981 }, - { 5, 0, 288 }, { 7, 10, 1452 }, { 7, 10, 1480 }, { 8, 10, 634 }, - { 12, 10, 472 }, { 7, 0, 1890 }, { 8, 11, 367 }, { 10, 11, 760 }, - { 14, 11, 79 }, { 20, 11, 17 }, { 24, 11, 0 }, { 4, 10, 524 }, - { 8, 10, 810 }, { 4, 0, 56 }, { 7, 0, 1791 }, { 8, 0, 607 }, - { 8, 0, 651 }, { 11, 0, 465 }, { 11, 0, 835 }, { 12, 0, 337 }, - { 13, 0, 480 }, { 10, 10, 238 }, { 13, 10, 33 }, { 11, 11, 417 }, - { 12, 11, 223 }, { 12, 11, 265 }, { 9, 0, 158 }, { 10, 0, 411 }, - { 12, 0, 261 }, { 5, 10, 532 }, { 5, 10, 997 }, { 12, 11, 186 }, - { 12, 11, 292 }, { 14, 11, 100 }, { 18, 11, 70 }, { 6, 0, 1403 }, - { 8, 0, 617 }, { 6, 0, 1205 }, { 11, 0, 563 }, { 4, 0, 242 }, - { 6, 0, 333 }, { 4, 11, 186 }, { 5, 11, 157 }, { 8, 11, 168 }, - { 10, 11, 6 }, { 4, 0, 369 }, { 5, 11, 875 }, { 5, 10, 782 }, - { 5, 10, 829 }, { 6, 10, 1738 }, { 6, 0, 622 }, { 7, 11, 1272 }, - { 6, 0, 1407 }, { 7, 11, 111 }, { 8, 11, 581 }, { 7, 10, 1823 }, - { 11, 10, 693 }, { 7, 0, 160 }, { 10, 0, 624 }, { 14, 0, 279 }, - { 4, 0, 363 }, { 10, 11, 589 }, { 12, 11, 111 }, { 13, 11, 260 }, - { 14, 11, 82 }, { 18, 11, 63 }, { 19, 11, 45 }, { 7, 11, 1364 }, - { 7, 11, 1907 }, { 13, 11, 158 }, { 4, 11, 404 }, { 4, 11, 659 }, - { 7, 11, 675 }, { 13, 11, 211 }, { 14, 11, 133 }, { 14, 11, 204 }, - { 15, 11, 64 }, { 15, 11, 69 }, { 15, 11, 114 }, { 16, 11, 10 }, - { 19, 11, 23 }, { 19, 11, 35 }, { 19, 11, 39 }, { 19, 11, 51 }, - { 19, 11, 71 }, { 19, 11, 75 }, { 24, 11, 15 }, { 4, 10, 78 }, - { 5, 10, 96 }, { 5, 10, 182 }, { 7, 10, 1724 }, { 7, 10, 1825 }, - { 10, 10, 394 }, { 10, 10, 471 }, { 11, 10, 532 }, { 14, 10, 340 }, - { 17, 10, 88 }, { 7, 10, 1964 }, { 5, 11, 391 }, { 11, 11, 887 }, - { 14, 11, 365 }, { 14, 11, 375 }, { 5, 11, 540 }, { 6, 11, 1697 }, - { 7, 11, 222 }, { 8, 11, 341 }, { 6, 11, 78 }, { 9, 0, 601 }, - { 9, 0, 619 }, { 10, 0, 505 }, { 10, 0, 732 }, { 11, 0, 355 }, - { 12, 0, 139 }, { 6, 0, 292 }, { 11, 0, 174 }, { 5, 0, 177 }, - { 6, 0, 616 }, { 7, 0, 827 }, { 9, 0, 525 }, { 10, 0, 656 }, - { 10, 0, 31 }, { 6, 10, 215 }, { 7, 10, 1028 }, { 7, 10, 1473 }, - { 7, 10, 1721 }, { 9, 10, 424 }, { 10, 10, 779 }, { 7, 10, 584 }, - { 8, 11, 293 }, { 6, 0, 685 }, { 7, 11, 1868 }, { 5, 11, 460 }, - { 7, 0, 647 }, { 6, 10, 67 }, { 7, 10, 1630 }, { 9, 10, 354 }, - { 9, 10, 675 }, { 10, 10, 830 }, { 14, 10, 80 }, { 17, 10, 80 }, - { 4, 0, 161 }, { 5, 0, 631 }, { 6, 10, 141 }, { 7, 10, 225 }, - { 9, 10, 59 }, { 9, 10, 607 }, { 10, 10, 312 }, { 11, 10, 687 }, - { 12, 10, 555 }, { 13, 10, 373 }, { 13, 10, 494 }, { 20, 10, 58 }, - { 7, 11, 965 }, { 7, 11, 1460 }, { 7, 11, 1604 }, { 8, 10, 783 }, - { 6, 11, 388 }, { 6, 0, 722 }, { 6, 0, 1267 }, { 4, 11, 511 }, - { 9, 11, 333 }, { 9, 11, 379 }, { 10, 11, 602 }, { 11, 11, 441 }, - { 11, 11, 723 }, { 11, 11, 976 }, { 12, 11, 357 }, { 6, 0, 1797 }, - { 7, 0, 1684 }, { 9, 0, 469 }, { 9, 0, 709 }, { 12, 0, 512 }, - { 14, 0, 65 }, { 17, 0, 12 }, { 5, 11, 938 }, { 8, 11, 707 }, - { 7, 0, 1230 }, { 8, 0, 531 }, { 10, 0, 229 }, { 11, 0, 73 }, - { 11, 0, 376 }, { 11, 0, 433 }, { 12, 0, 268 }, { 12, 0, 640 }, - { 14, 0, 119 }, { 7, 10, 430 }, { 11, 10, 46 }, { 6, 0, 558 }, - { 7, 0, 651 }, { 8, 0, 421 }, { 9, 0, 0 }, { 10, 0, 34 }, - { 11, 0, 1008 }, { 6, 0, 106 }, { 7, 0, 1786 }, { 7, 0, 1821 }, - { 9, 0, 102 }, { 9, 0, 763 }, { 5, 10, 602 }, { 7, 10, 2018 }, - { 9, 10, 418 }, { 5, 0, 65 }, { 6, 0, 416 }, { 7, 0, 1720 }, - { 7, 0, 1924 }, { 10, 0, 109 }, { 11, 0, 14 }, { 11, 0, 70 }, - { 11, 0, 569 }, { 11, 0, 735 }, { 15, 0, 153 }, { 20, 0, 80 }, - { 8, 10, 677 }, { 7, 11, 1625 }, { 9, 11, 772 }, { 8, 0, 595 }, - { 6, 11, 469 }, { 7, 11, 1709 }, { 10, 11, 515 }, { 7, 0, 1832 }, - { 10, 0, 374 }, { 9, 0, 106 }, { 9, 0, 163 }, { 9, 0, 296 }, - { 10, 0, 167 }, { 10, 0, 172 }, { 10, 0, 777 }, { 11, 0, 16 }, - { 6, 0, 6 }, { 7, 0, 81 }, { 7, 0, 771 }, { 7, 0, 1731 }, - { 9, 0, 405 }, { 10, 0, 421 }, { 4, 11, 500 }, { 7, 11, 938 }, - { 5, 11, 68 }, { 6, 11, 383 }, { 5, 0, 881 }, { 5, 0, 885 }, - { 6, 0, 854 }, { 6, 0, 1132 }, { 6, 0, 1495 }, { 6, 0, 1526 }, - { 6, 0, 1533 }, { 6, 0, 1577 }, { 4, 11, 337 }, { 6, 11, 353 }, - { 7, 11, 1934 }, { 8, 11, 488 }, { 9, 11, 429 }, { 7, 11, 236 }, - { 7, 11, 1795 }, { 8, 11, 259 }, { 9, 11, 135 }, { 9, 11, 177 }, - { 10, 11, 825 }, { 11, 11, 115 }, { 11, 11, 370 }, { 11, 11, 405 }, - { 11, 11, 604 }, { 12, 11, 10 }, { 12, 11, 667 }, { 12, 11, 669 }, - { 13, 11, 76 }, { 14, 11, 310 }, { 15, 11, 76 }, { 15, 11, 147 }, - { 20, 11, 23 }, { 5, 0, 142 }, { 6, 0, 546 }, { 4, 11, 15 }, - { 5, 11, 22 }, { 6, 11, 244 }, { 7, 11, 40 }, { 7, 11, 200 }, - { 7, 11, 906 }, { 7, 11, 1199 }, { 9, 11, 616 }, { 10, 11, 716 }, - { 11, 11, 635 }, { 11, 11, 801 }, { 12, 11, 458 }, { 5, 0, 466 }, - { 11, 0, 571 }, { 12, 0, 198 }, { 13, 0, 283 }, { 14, 0, 186 }, - { 15, 0, 21 }, { 15, 0, 103 }, { 7, 10, 329 }, { 4, 0, 185 }, - { 5, 0, 257 }, { 5, 0, 839 }, { 5, 0, 936 }, { 9, 0, 399 }, - { 10, 0, 258 }, { 10, 0, 395 }, { 10, 0, 734 }, { 11, 0, 1014 }, - { 12, 0, 23 }, { 13, 0, 350 }, { 14, 0, 150 }, { 19, 0, 6 }, - { 7, 11, 1735 }, { 12, 11, 36 }, { 13, 11, 337 }, { 5, 11, 598 }, - { 7, 11, 791 }, { 8, 11, 108 }, { 9, 11, 123 }, { 4, 10, 469 }, - { 7, 0, 404 }, { 7, 0, 1377 }, { 7, 0, 1430 }, { 7, 0, 2017 }, - { 8, 0, 149 }, { 8, 0, 239 }, { 8, 0, 512 }, { 8, 0, 793 }, - { 8, 0, 818 }, { 9, 0, 474 }, { 9, 0, 595 }, { 10, 0, 122 }, - { 10, 0, 565 }, { 10, 0, 649 }, { 10, 0, 783 }, { 11, 0, 239 }, - { 11, 0, 295 }, { 11, 0, 447 }, { 11, 0, 528 }, { 11, 0, 639 }, - { 11, 0, 800 }, { 12, 0, 25 }, { 12, 0, 77 }, { 12, 0, 157 }, - { 12, 0, 256 }, { 12, 0, 316 }, { 12, 0, 390 }, { 12, 0, 391 }, - { 12, 0, 395 }, { 12, 0, 478 }, { 12, 0, 503 }, { 12, 0, 592 }, - { 12, 0, 680 }, { 13, 0, 50 }, { 13, 0, 53 }, { 13, 0, 132 }, - { 13, 0, 198 }, { 13, 0, 322 }, { 13, 0, 415 }, { 13, 0, 511 }, - { 14, 0, 71 }, { 14, 0, 395 }, { 15, 0, 71 }, { 15, 0, 136 }, - { 17, 0, 123 }, { 18, 0, 93 }, { 19, 0, 58 }, { 8, 0, 712 }, - { 6, 10, 1743 }, { 5, 10, 929 }, { 6, 10, 340 }, { 8, 10, 376 }, - { 8, 10, 807 }, { 6, 0, 1848 }, { 8, 0, 860 }, { 10, 0, 856 }, - { 10, 0, 859 }, { 10, 0, 925 }, { 10, 0, 941 }, { 12, 0, 762 }, - { 6, 0, 629 }, { 6, 0, 906 }, { 9, 0, 810 }, { 12, 0, 652 }, - { 5, 10, 218 }, { 7, 10, 1610 }, { 10, 10, 83 }, { 7, 10, 1512 }, - { 7, 10, 1794 }, { 4, 0, 377 }, { 24, 0, 13 }, { 4, 11, 155 }, - { 7, 11, 1689 }, { 11, 10, 0 }, { 16, 10, 78 }, { 4, 11, 164 }, - { 5, 11, 151 }, { 5, 11, 730 }, { 5, 11, 741 }, { 7, 11, 498 }, - { 7, 11, 870 }, { 7, 11, 1542 }, { 12, 11, 213 }, { 14, 11, 36 }, - { 14, 11, 391 }, { 17, 11, 111 }, { 18, 11, 6 }, { 18, 11, 46 }, - { 18, 11, 151 }, { 19, 11, 36 }, { 20, 11, 32 }, { 20, 11, 56 }, - { 20, 11, 69 }, { 20, 11, 102 }, { 21, 11, 4 }, { 22, 11, 8 }, - { 22, 11, 10 }, { 22, 11, 14 }, { 22, 11, 31 }, { 7, 0, 1842 }, - { 5, 10, 571 }, { 4, 10, 455 }, { 4, 11, 624 }, { 7, 11, 1752 }, - { 6, 0, 1501 }, { 4, 11, 492 }, { 5, 11, 451 }, { 6, 10, 161 }, - { 7, 10, 372 }, { 9, 10, 597 }, { 4, 10, 349 }, { 4, 0, 180 }, - { 7, 0, 1906 }, { 7, 11, 835 }, { 13, 11, 70 }, { 4, 0, 491 }, - { 9, 10, 751 }, { 6, 10, 432 }, { 11, 10, 322 }, { 4, 0, 171 }, - { 10, 0, 234 }, { 6, 11, 113 }, { 7, 11, 436 }, { 4, 0, 586 }, - { 7, 0, 1186 }, { 10, 0, 631 }, { 5, 10, 468 }, { 10, 10, 325 }, - { 11, 10, 856 }, { 12, 10, 345 }, { 15, 10, 104 }, { 5, 10, 223 }, - { 10, 11, 592 }, { 10, 11, 753 }, { 12, 11, 317 }, { 12, 11, 355 }, - { 12, 11, 465 }, { 12, 11, 469 }, { 12, 11, 560 }, { 12, 11, 578 }, - { 13, 11, 243 }, { 4, 10, 566 }, { 7, 11, 520 }, { 4, 10, 59 }, - { 7, 10, 1394 }, { 6, 10, 436 }, { 11, 10, 481 }, { 9, 0, 931 }, - { 10, 0, 334 }, { 20, 0, 71 }, { 4, 10, 48 }, { 5, 10, 271 }, - { 7, 10, 953 }, { 7, 11, 1878 }, { 11, 0, 170 }, { 5, 10, 610 }, - { 8, 10, 457 }, { 5, 10, 755 }, { 6, 0, 1587 }, { 7, 10, 1217 }, - { 4, 10, 197 }, { 21, 11, 26 }, { 5, 11, 585 }, { 9, 11, 521 }, - { 5, 0, 765 }, { 5, 10, 217 }, { 11, 11, 586 }, { 5, 0, 424 }, - { 9, 11, 752 }, { 12, 11, 610 }, { 13, 11, 431 }, { 16, 11, 59 }, - { 18, 11, 109 }, { 8, 0, 714 }, { 7, 0, 685 }, { 4, 11, 307 }, - { 9, 0, 420 }, { 10, 0, 269 }, { 10, 0, 285 }, { 10, 0, 576 }, - { 11, 0, 397 }, { 13, 0, 175 }, { 17, 0, 90 }, { 4, 0, 429 }, - { 5, 11, 964 }, { 9, 11, 463 }, { 10, 11, 595 }, { 7, 0, 18 }, - { 7, 0, 699 }, { 7, 0, 1966 }, { 8, 0, 752 }, { 9, 0, 273 }, - { 9, 0, 412 }, { 9, 0, 703 }, { 10, 0, 71 }, { 10, 0, 427 }, - { 10, 0, 508 }, { 4, 10, 165 }, { 7, 10, 1398 }, { 7, 10, 1829 }, - { 4, 0, 53 }, { 5, 0, 186 }, { 7, 0, 752 }, { 7, 0, 828 }, - { 14, 0, 116 }, { 8, 0, 575 }, { 10, 0, 289 }, { 11, 0, 319 }, - { 4, 0, 675 }, { 6, 0, 1424 }, { 4, 11, 75 }, { 5, 11, 180 }, - { 6, 11, 500 }, { 7, 11, 58 }, { 7, 11, 710 }, { 10, 11, 645 }, - { 5, 11, 649 }, { 6, 11, 276 }, { 7, 11, 282 }, { 7, 11, 879 }, - { 7, 11, 924 }, { 8, 11, 459 }, { 9, 11, 599 }, { 9, 11, 754 }, - { 11, 11, 574 }, { 12, 11, 128 }, { 12, 11, 494 }, { 13, 11, 52 }, - { 13, 11, 301 }, { 15, 11, 30 }, { 15, 11, 132 }, { 6, 0, 647 }, - { 6, 0, 1095 }, { 5, 10, 9 }, { 7, 10, 297 }, { 7, 10, 966 }, - { 12, 10, 306 }, { 4, 11, 200 }, { 6, 0, 1334 }, { 5, 10, 146 }, - { 6, 10, 411 }, { 10, 10, 721 }, { 6, 0, 209 }, { 6, 0, 1141 }, - { 6, 0, 1288 }, { 8, 0, 468 }, { 9, 0, 210 }, { 11, 0, 36 }, - { 12, 0, 28 }, { 12, 0, 630 }, { 13, 0, 21 }, { 13, 0, 349 }, - { 14, 0, 7 }, { 17, 0, 13 }, { 6, 10, 177 }, { 7, 10, 467 }, - { 4, 0, 342 }, { 7, 0, 1179 }, { 10, 11, 454 }, { 12, 11, 324 }, - { 4, 0, 928 }, { 5, 0, 910 }, { 7, 0, 1838 }, { 6, 11, 225 }, - { 9, 11, 211 }, { 16, 0, 101 }, { 20, 0, 115 }, { 20, 0, 118 }, - { 20, 0, 122 }, { 4, 0, 496 }, { 7, 0, 856 }, { 4, 0, 318 }, - { 11, 0, 654 }, { 7, 11, 718 }, { 11, 11, 102 }, { 8, 11, 58 }, - { 9, 11, 724 }, { 11, 11, 809 }, { 13, 11, 113 }, { 17, 11, 72 }, - { 5, 10, 200 }, { 6, 11, 345 }, { 7, 11, 1247 }, { 8, 11, 767 }, - { 8, 11, 803 }, { 9, 11, 301 }, { 9, 11, 903 }, { 7, 0, 915 }, - { 8, 0, 247 }, { 19, 0, 0 }, { 7, 11, 1949 }, { 8, 11, 674 }, - { 4, 0, 202 }, { 5, 0, 382 }, { 6, 0, 454 }, { 7, 0, 936 }, - { 7, 0, 1803 }, { 8, 0, 758 }, { 9, 0, 375 }, { 9, 0, 895 }, - { 10, 0, 743 }, { 10, 0, 792 }, { 11, 0, 978 }, { 11, 0, 1012 }, - { 14, 0, 109 }, { 7, 0, 1150 }, { 7, 0, 1425 }, { 7, 0, 1453 }, - { 12, 0, 513 }, { 6, 11, 259 }, { 10, 0, 791 }, { 11, 0, 821 }, - { 12, 0, 110 }, { 12, 0, 153 }, { 18, 0, 41 }, { 22, 0, 19 }, - { 6, 10, 481 }, { 4, 0, 796 }, { 6, 0, 445 }, { 9, 0, 909 }, - { 8, 11, 254 }, { 10, 0, 776 }, { 13, 0, 345 }, { 14, 0, 425 }, - { 4, 10, 84 }, { 7, 10, 1482 }, { 10, 10, 76 }, { 10, 10, 142 }, - { 7, 11, 742 }, { 6, 0, 578 }, { 5, 10, 1015 }, { 6, 0, 1387 }, - { 4, 10, 315 }, { 5, 10, 507 }, { 7, 10, 1370 }, { 4, 0, 438 }, - { 5, 0, 555 }, { 8, 0, 766 }, { 5, 11, 248 }, { 6, 10, 1722 }, - { 4, 11, 116 }, { 5, 11, 95 }, { 5, 11, 445 }, { 7, 11, 1688 }, - { 8, 11, 29 }, { 9, 11, 272 }, { 11, 11, 509 }, { 11, 11, 915 }, - { 7, 0, 541 }, { 5, 11, 543 }, { 8, 10, 222 }, { 8, 10, 476 }, - { 9, 10, 238 }, { 11, 10, 516 }, { 11, 10, 575 }, { 15, 10, 109 }, - { 18, 10, 100 }, { 6, 0, 880 }, { 6, 0, 1191 }, { 5, 11, 181 }, - { 8, 11, 41 }, { 6, 0, 1506 }, { 4, 11, 681 }, { 7, 11, 25 }, - { 8, 11, 202 }, { 10, 11, 536 }, { 11, 0, 983 }, { 9, 0, 768 }, - { 4, 0, 584 }, { 9, 11, 423 }, { 12, 11, 89 }, { 8, 11, 113 }, - { 9, 11, 877 }, { 10, 11, 554 }, { 11, 11, 83 }, { 12, 11, 136 }, - { 19, 11, 109 }, { 7, 10, 706 }, { 7, 10, 1058 }, { 10, 10, 538 }, - { 5, 11, 976 }, { 4, 11, 206 }, { 7, 11, 746 }, { 8, 11, 526 }, - { 12, 0, 737 }, { 11, 10, 92 }, { 11, 10, 196 }, { 11, 10, 409 }, - { 11, 10, 450 }, { 11, 10, 666 }, { 11, 10, 777 }, { 12, 10, 262 }, - { 13, 10, 385 }, { 13, 10, 393 }, { 15, 10, 115 }, { 16, 10, 45 }, - { 17, 10, 82 }, { 4, 0, 226 }, { 4, 0, 326 }, { 7, 0, 1770 }, - { 4, 11, 319 }, { 5, 11, 699 }, { 10, 11, 673 }, { 6, 10, 40 }, - { 7, 10, 1781 }, { 5, 0, 426 }, { 8, 0, 30 }, { 9, 0, 2 }, - { 11, 0, 549 }, { 19, 0, 122 }, { 6, 0, 1161 }, { 6, 0, 1329 }, - { 10, 10, 97 }, { 6, 10, 423 }, { 7, 10, 665 }, { 7, 10, 1210 }, - { 7, 11, 13 }, { 8, 11, 226 }, { 10, 11, 537 }, { 11, 11, 570 }, - { 11, 11, 605 }, { 11, 11, 799 }, { 11, 11, 804 }, { 12, 11, 85 }, - { 12, 11, 516 }, { 12, 11, 623 }, { 13, 11, 112 }, { 13, 11, 361 }, - { 14, 11, 77 }, { 14, 11, 78 }, { 17, 11, 28 }, { 19, 11, 110 }, - { 4, 11, 769 }, { 4, 11, 551 }, { 4, 11, 728 }, { 19, 0, 117 }, - { 9, 11, 57 }, { 9, 11, 459 }, { 10, 11, 425 }, { 11, 11, 119 }, - { 12, 11, 184 }, { 12, 11, 371 }, { 13, 11, 358 }, { 17, 11, 51 }, - { 5, 11, 188 }, { 5, 11, 814 }, { 8, 11, 10 }, { 9, 11, 421 }, - { 9, 11, 729 }, { 10, 11, 609 }, { 11, 11, 689 }, { 6, 11, 624 }, - { 7, 11, 298 }, { 7, 0, 462 }, { 4, 0, 345 }, { 11, 10, 624 }, - { 8, 10, 574 }, { 4, 0, 385 }, { 7, 0, 265 }, { 7, 0, 587 }, - { 6, 0, 808 }, { 4, 11, 528 }, { 5, 0, 398 }, { 4, 10, 354 }, - { 4, 0, 347 }, { 5, 0, 423 }, { 5, 0, 996 }, { 7, 0, 1329 }, - { 7, 10, 1558 }, { 7, 0, 1259 }, { 9, 0, 125 }, { 11, 0, 65 }, - { 5, 0, 136 }, { 6, 0, 136 }, { 8, 0, 644 }, { 5, 11, 104 }, - { 6, 11, 173 }, { 7, 11, 1631 }, { 7, 0, 469 }, { 5, 10, 830 }, - { 4, 0, 278 }, { 5, 0, 465 }, { 7, 0, 1367 }, { 7, 11, 810 }, - { 8, 11, 138 }, { 8, 11, 342 }, { 9, 11, 84 }, { 10, 11, 193 }, - { 11, 11, 883 }, { 12, 11, 359 }, { 5, 10, 496 }, { 7, 10, 203 }, - { 4, 0, 433 }, { 5, 0, 719 }, { 6, 11, 95 }, { 6, 10, 547 }, - { 5, 10, 88 }, { 9, 10, 239 }, { 6, 11, 406 }, { 10, 11, 409 }, - { 10, 11, 447 }, { 11, 11, 44 }, { 12, 11, 100 }, { 6, 0, 1423 }, - { 7, 10, 650 }, { 7, 10, 1310 }, { 6, 0, 749 }, { 7, 11, 1243 }, - { 7, 0, 1363 }, { 6, 0, 381 }, { 7, 0, 645 }, { 7, 0, 694 }, - { 8, 0, 546 }, { 7, 10, 1076 }, { 9, 10, 80 }, { 11, 10, 78 }, - { 11, 10, 421 }, { 11, 10, 534 }, { 12, 10, 545 }, { 6, 11, 1636 }, - { 7, 11, 1344 }, { 12, 0, 277 }, { 7, 10, 274 }, { 11, 10, 479 }, - { 11, 10, 507 }, { 6, 0, 705 }, { 6, 0, 783 }, { 6, 0, 1275 }, - { 6, 0, 1481 }, { 4, 11, 282 }, { 7, 11, 1034 }, { 11, 11, 398 }, - { 11, 11, 634 }, { 12, 11, 1 }, { 12, 11, 79 }, { 12, 11, 544 }, - { 14, 11, 237 }, { 17, 11, 10 }, { 18, 11, 20 }, { 6, 0, 453 }, - { 4, 0, 555 }, { 8, 0, 536 }, { 10, 0, 288 }, { 11, 0, 1005 }, - { 4, 10, 497 }, { 7, 10, 1584 }, { 5, 11, 118 }, { 5, 11, 499 }, - { 6, 11, 476 }, { 7, 11, 600 }, { 7, 11, 888 }, { 7, 11, 1096 }, - { 10, 0, 987 }, { 7, 0, 1107 }, { 7, 10, 261 }, { 7, 10, 1115 }, - { 7, 10, 1354 }, { 7, 10, 1588 }, { 7, 10, 1705 }, { 7, 10, 1902 }, - { 9, 10, 465 }, { 10, 10, 248 }, { 10, 10, 349 }, { 10, 10, 647 }, - { 11, 10, 527 }, { 11, 10, 660 }, { 11, 10, 669 }, { 12, 10, 529 }, - { 13, 10, 305 }, { 7, 11, 296 }, { 7, 11, 596 }, { 8, 11, 560 }, - { 8, 11, 586 }, { 9, 11, 612 }, { 11, 11, 100 }, { 11, 11, 304 }, - { 12, 11, 46 }, { 13, 11, 89 }, { 14, 11, 112 }, { 17, 11, 122 }, - { 9, 0, 370 }, { 10, 0, 90 }, { 8, 10, 13 }, { 4, 0, 860 }, - { 7, 10, 642 }, { 8, 10, 250 }, { 11, 10, 123 }, { 11, 10, 137 }, - { 13, 10, 48 }, { 14, 10, 95 }, { 7, 10, 1429 }, { 9, 11, 321 }, - { 4, 0, 257 }, { 7, 0, 2031 }, { 7, 0, 1768 }, { 7, 11, 1599 }, - { 7, 11, 1723 }, { 8, 11, 79 }, { 8, 11, 106 }, { 8, 11, 190 }, - { 8, 11, 302 }, { 8, 11, 383 }, { 9, 11, 119 }, { 9, 11, 233 }, - { 9, 11, 298 }, { 9, 11, 419 }, { 9, 11, 471 }, { 10, 11, 181 }, - { 10, 11, 406 }, { 11, 11, 57 }, { 11, 11, 85 }, { 11, 11, 120 }, - { 11, 11, 177 }, { 11, 11, 296 }, { 11, 11, 382 }, { 11, 11, 454 }, - { 11, 11, 758 }, { 11, 11, 999 }, { 12, 11, 27 }, { 12, 11, 98 }, - { 12, 11, 131 }, { 12, 11, 245 }, { 12, 11, 312 }, { 12, 11, 446 }, - { 12, 11, 454 }, { 13, 11, 25 }, { 13, 11, 98 }, { 13, 11, 426 }, - { 13, 11, 508 }, { 14, 11, 6 }, { 14, 11, 163 }, { 14, 11, 272 }, - { 14, 11, 277 }, { 14, 11, 370 }, { 15, 11, 95 }, { 15, 11, 138 }, - { 15, 11, 167 }, { 17, 11, 18 }, { 17, 11, 38 }, { 20, 11, 96 }, - { 21, 11, 32 }, { 5, 11, 722 }, { 6, 11, 1759 }, { 17, 11, 16 }, - { 6, 0, 1071 }, { 6, 0, 1561 }, { 10, 10, 545 }, { 12, 10, 301 }, - { 6, 0, 83 }, { 6, 0, 1733 }, { 7, 0, 1389 }, { 4, 0, 835 }, - { 7, 0, 1818 }, { 5, 11, 258 }, { 4, 10, 904 }, { 5, 10, 794 }, - { 6, 0, 2006 }, { 5, 11, 30 }, { 7, 11, 495 }, { 8, 11, 134 }, - { 9, 11, 788 }, { 12, 11, 438 }, { 7, 11, 2004 }, { 9, 0, 696 }, - { 5, 11, 50 }, { 6, 11, 439 }, { 7, 11, 780 }, { 7, 11, 1040 }, - { 7, 11, 772 }, { 7, 11, 1104 }, { 7, 11, 1647 }, { 11, 11, 269 }, - { 11, 11, 539 }, { 11, 11, 607 }, { 11, 11, 627 }, { 11, 11, 706 }, - { 11, 11, 975 }, { 12, 11, 248 }, { 12, 11, 311 }, { 12, 11, 434 }, - { 12, 11, 600 }, { 12, 11, 622 }, { 13, 11, 297 }, { 13, 11, 367 }, - { 13, 11, 485 }, { 14, 11, 69 }, { 14, 11, 409 }, { 15, 11, 108 }, - { 5, 11, 1 }, { 6, 11, 81 }, { 10, 11, 520 }, { 7, 0, 1718 }, - { 9, 0, 95 }, { 9, 0, 274 }, { 10, 0, 279 }, { 10, 0, 317 }, - { 10, 0, 420 }, { 11, 0, 303 }, { 11, 0, 808 }, { 12, 0, 134 }, - { 12, 0, 367 }, { 13, 0, 149 }, { 13, 0, 347 }, { 14, 0, 349 }, - { 14, 0, 406 }, { 18, 0, 22 }, { 18, 0, 89 }, { 18, 0, 122 }, - { 19, 0, 47 }, { 5, 11, 482 }, { 8, 11, 98 }, { 9, 11, 172 }, - { 10, 11, 222 }, { 10, 11, 700 }, { 10, 11, 822 }, { 11, 11, 302 }, - { 11, 11, 778 }, { 12, 11, 50 }, { 12, 11, 127 }, { 12, 11, 396 }, - { 13, 11, 62 }, { 13, 11, 328 }, { 14, 11, 122 }, { 19, 11, 72 }, - { 7, 10, 386 }, { 10, 10, 713 }, { 6, 10, 7 }, { 6, 10, 35 }, - { 7, 10, 147 }, { 7, 10, 1069 }, { 7, 10, 1568 }, { 7, 10, 1575 }, - { 7, 10, 1917 }, { 8, 10, 43 }, { 8, 10, 208 }, { 9, 10, 128 }, - { 9, 10, 866 }, { 10, 10, 20 }, { 11, 10, 981 }, { 19, 10, 33 }, - { 5, 0, 26 }, { 4, 0, 550 }, { 5, 11, 2 }, { 7, 11, 1494 }, - { 8, 11, 589 }, { 6, 11, 512 }, { 7, 11, 797 }, { 8, 11, 253 }, - { 9, 11, 77 }, { 10, 11, 1 }, { 10, 11, 129 }, { 10, 11, 225 }, - { 11, 11, 118 }, { 11, 11, 226 }, { 11, 11, 251 }, { 11, 11, 430 }, - { 11, 11, 701 }, { 11, 11, 974 }, { 11, 11, 982 }, { 12, 11, 64 }, - { 12, 11, 260 }, { 12, 11, 488 }, { 12, 11, 690 }, { 7, 10, 893 }, - { 13, 10, 424 }, { 6, 0, 901 }, { 8, 0, 822 }, { 4, 0, 902 }, - { 5, 0, 809 }, { 6, 0, 122 }, { 6, 0, 807 }, { 6, 0, 1366 }, - { 7, 0, 262 }, { 5, 11, 748 }, { 6, 11, 553 }, { 5, 0, 620 }, - { 4, 0, 34 }, { 5, 0, 574 }, { 7, 0, 279 }, { 7, 0, 1624 }, - { 8, 0, 601 }, { 9, 0, 170 }, { 6, 10, 322 }, { 9, 10, 552 }, - { 11, 10, 274 }, { 13, 10, 209 }, { 13, 10, 499 }, { 14, 10, 85 }, - { 15, 10, 126 }, { 17, 10, 70 }, { 4, 0, 537 }, { 4, 11, 12 }, - { 7, 11, 420 }, { 7, 11, 522 }, { 7, 11, 809 }, { 8, 11, 797 }, - { 13, 11, 88 }, { 5, 0, 332 }, { 8, 10, 83 }, { 8, 10, 742 }, - { 8, 10, 817 }, { 9, 10, 28 }, { 9, 10, 29 }, { 9, 10, 885 }, - { 10, 10, 387 }, { 11, 10, 633 }, { 11, 10, 740 }, { 13, 10, 235 }, - { 13, 10, 254 }, { 15, 10, 143 }, { 15, 10, 146 }, { 6, 0, 1909 }, - { 9, 0, 964 }, { 12, 0, 822 }, { 12, 0, 854 }, { 12, 0, 865 }, - { 12, 0, 910 }, { 12, 0, 938 }, { 15, 0, 169 }, { 15, 0, 208 }, - { 15, 0, 211 }, { 18, 0, 205 }, { 18, 0, 206 }, { 18, 0, 220 }, - { 18, 0, 223 }, { 24, 0, 24 }, { 12, 10, 49 }, { 5, 11, 528 }, - { 7, 11, 1580 }, { 6, 0, 261 }, { 8, 0, 182 }, { 11, 0, 943 }, - { 6, 0, 1721 }, { 4, 0, 933 }, { 5, 0, 880 }, { 8, 11, 321 }, - { 5, 11, 266 }, { 9, 11, 290 }, { 9, 11, 364 }, { 10, 11, 293 }, - { 11, 11, 606 }, { 14, 11, 45 }, { 6, 0, 1609 }, { 4, 11, 50 }, - { 6, 11, 510 }, { 6, 11, 594 }, { 9, 11, 121 }, { 10, 11, 49 }, - { 10, 11, 412 }, { 11, 11, 834 }, { 7, 0, 895 }, { 8, 11, 748 }, - { 4, 11, 466 }, { 4, 10, 110 }, { 10, 10, 415 }, { 10, 10, 597 }, - { 14, 10, 206 }, { 5, 0, 812 }, { 7, 11, 281 }, { 6, 0, 1890 }, - { 6, 0, 1902 }, { 6, 0, 1916 }, { 9, 0, 929 }, { 9, 0, 942 }, - { 9, 0, 975 }, { 9, 0, 984 }, { 9, 0, 986 }, { 9, 0, 1011 }, - { 9, 0, 1019 }, { 12, 0, 804 }, { 12, 0, 851 }, { 12, 0, 867 }, - { 12, 0, 916 }, { 12, 0, 923 }, { 15, 0, 194 }, { 15, 0, 204 }, - { 15, 0, 210 }, { 15, 0, 222 }, { 15, 0, 223 }, { 15, 0, 229 }, - { 15, 0, 250 }, { 18, 0, 179 }, { 18, 0, 186 }, { 18, 0, 192 }, - { 7, 10, 205 }, { 7, 10, 2000 }, { 4, 11, 667 }, { 7, 0, 778 }, - { 4, 0, 137 }, { 7, 0, 1178 }, { 7, 0, 1520 }, { 6, 0, 1314 }, - { 4, 11, 242 }, { 6, 11, 333 }, { 6, 0, 1661 }, { 7, 0, 1975 }, - { 7, 0, 2009 }, { 7, 0, 2011 }, { 6, 0, 1591 }, { 4, 10, 283 }, - { 7, 10, 1194 }, { 11, 0, 820 }, { 22, 0, 51 }, { 4, 11, 39 }, - { 5, 11, 36 }, { 7, 11, 1843 }, { 8, 11, 407 }, { 11, 11, 144 }, - { 12, 11, 523 }, { 6, 10, 1720 }, { 4, 11, 510 }, { 7, 11, 29 }, - { 7, 11, 66 }, { 7, 11, 1980 }, { 10, 11, 487 }, { 10, 11, 809 }, - { 18, 11, 9 }, { 5, 0, 89 }, { 7, 0, 1915 }, { 9, 0, 185 }, - { 9, 0, 235 }, { 10, 0, 64 }, { 10, 0, 270 }, { 10, 0, 403 }, - { 10, 0, 469 }, { 10, 0, 529 }, { 10, 0, 590 }, { 11, 0, 140 }, - { 11, 0, 860 }, { 13, 0, 1 }, { 13, 0, 422 }, { 14, 0, 341 }, - { 14, 0, 364 }, { 17, 0, 93 }, { 18, 0, 113 }, { 19, 0, 97 }, - { 19, 0, 113 }, { 5, 0, 695 }, { 6, 0, 987 }, { 6, 0, 1160 }, - { 5, 0, 6 }, { 6, 0, 183 }, { 7, 0, 680 }, { 7, 0, 978 }, - { 7, 0, 1013 }, { 7, 0, 1055 }, { 12, 0, 230 }, { 13, 0, 172 }, - { 18, 0, 29 }, { 6, 11, 570 }, { 4, 11, 787 }, { 6, 11, 518 }, - { 6, 0, 29 }, { 11, 0, 63 }, { 4, 11, 516 }, { 8, 11, 821 }, - { 4, 0, 311 }, { 6, 0, 1740 }, { 7, 0, 170 }, { 8, 0, 90 }, - { 8, 0, 177 }, { 8, 0, 415 }, { 11, 0, 714 }, { 14, 0, 281 }, - { 8, 10, 735 }, { 6, 0, 1961 }, { 7, 11, 1405 }, { 4, 11, 10 }, - { 7, 11, 917 }, { 11, 11, 786 }, { 5, 10, 132 }, { 9, 10, 486 }, - { 9, 10, 715 }, { 10, 10, 458 }, { 11, 10, 373 }, { 11, 10, 668 }, - { 11, 10, 795 }, { 11, 10, 897 }, { 12, 10, 272 }, { 12, 10, 424 }, - { 12, 10, 539 }, { 12, 10, 558 }, { 14, 10, 245 }, { 14, 10, 263 }, - { 14, 10, 264 }, { 14, 10, 393 }, { 14, 10, 403 }, { 11, 0, 91 }, - { 13, 0, 129 }, { 15, 0, 101 }, { 17, 0, 125 }, { 7, 0, 1132 }, - { 4, 0, 494 }, { 6, 0, 74 }, { 7, 0, 44 }, { 7, 0, 407 }, - { 12, 0, 17 }, { 15, 0, 5 }, { 20, 0, 11 }, { 5, 10, 379 }, - { 5, 0, 270 }, { 5, 11, 684 }, { 6, 10, 89 }, { 6, 10, 400 }, - { 7, 10, 1569 }, { 7, 10, 1623 }, { 7, 10, 1850 }, { 8, 10, 218 }, - { 8, 10, 422 }, { 9, 10, 570 }, { 10, 10, 626 }, { 4, 0, 276 }, - { 5, 0, 296 }, { 6, 0, 1523 }, { 6, 11, 27 }, { 6, 10, 387 }, - { 7, 10, 882 }, { 13, 10, 111 }, { 6, 10, 224 }, { 7, 10, 877 }, - { 9, 10, 647 }, { 7, 10, 790 }, { 4, 0, 7 }, { 5, 0, 90 }, - { 5, 0, 158 }, { 6, 0, 542 }, { 7, 0, 221 }, { 7, 0, 1574 }, - { 9, 0, 490 }, { 10, 0, 540 }, { 11, 0, 443 }, { 11, 0, 757 }, - { 7, 0, 588 }, { 9, 0, 175 }, { 10, 0, 530 }, { 7, 10, 394 }, - { 14, 11, 23 }, { 6, 0, 786 }, { 7, 0, 580 }, { 7, 0, 88 }, - { 8, 0, 627 }, { 5, 0, 872 }, { 6, 0, 57 }, { 7, 0, 471 }, - { 9, 0, 447 }, { 9, 0, 454 }, { 6, 11, 342 }, { 6, 11, 496 }, - { 8, 11, 275 }, { 9, 11, 206 }, { 4, 11, 909 }, { 5, 11, 940 }, - { 6, 0, 735 }, { 4, 11, 891 }, { 8, 0, 845 }, { 8, 0, 916 }, - { 7, 10, 1409 }, { 5, 0, 31 }, { 6, 0, 614 }, { 11, 0, 458 }, - { 12, 0, 15 }, { 12, 0, 432 }, { 8, 0, 330 }, { 12, 0, 477 }, - { 4, 0, 530 }, { 5, 0, 521 }, { 7, 0, 1200 }, { 10, 0, 460 }, - { 4, 11, 687 }, { 6, 0, 424 }, { 7, 0, 1866 }, { 9, 0, 569 }, - { 12, 0, 12 }, { 12, 0, 81 }, { 12, 0, 319 }, { 13, 0, 69 }, - { 14, 0, 259 }, { 16, 0, 87 }, { 17, 0, 1 }, { 17, 0, 21 }, - { 17, 0, 24 }, { 18, 0, 15 }, { 18, 0, 56 }, { 18, 0, 59 }, - { 18, 0, 127 }, { 18, 0, 154 }, { 19, 0, 19 }, { 20, 0, 31 }, - { 7, 0, 1302 }, { 8, 10, 38 }, { 6, 11, 253 }, { 5, 10, 261 }, - { 7, 10, 78 }, { 7, 10, 199 }, { 8, 10, 815 }, { 9, 10, 126 }, - { 10, 10, 342 }, { 5, 0, 595 }, { 7, 0, 1863 }, { 6, 11, 41 }, - { 13, 11, 160 }, { 5, 0, 13 }, { 6, 0, 142 }, { 6, 0, 97 }, - { 7, 0, 116 }, { 8, 0, 322 }, { 8, 0, 755 }, { 9, 0, 548 }, - { 10, 0, 714 }, { 11, 0, 884 }, { 13, 0, 324 }, { 7, 11, 1304 }, - { 10, 11, 477 }, { 4, 10, 628 }, { 6, 11, 1718 }, { 7, 10, 266 }, - { 8, 10, 804 }, { 7, 10, 208 }, { 7, 0, 1021 }, { 6, 10, 79 }, - { 7, 10, 1519 }, { 7, 0, 1472 }, { 7, 0, 1554 }, { 6, 11, 362 }, - { 18, 11, 51 }, { 7, 0, 1071 }, { 7, 0, 1541 }, { 7, 0, 1767 }, - { 7, 0, 1806 }, { 11, 0, 162 }, { 11, 0, 242 }, { 11, 0, 452 }, - { 12, 0, 605 }, { 15, 0, 26 }, { 16, 0, 44 }, { 8, 10, 741 }, - { 5, 11, 115 }, { 17, 0, 115 }, { 6, 10, 376 }, { 6, 0, 1406 }, - { 6, 0, 1543 }, { 5, 11, 193 }, { 12, 11, 178 }, { 13, 11, 130 }, - { 17, 11, 84 }, { 7, 0, 1111 }, { 8, 0, 1 }, { 9, 0, 650 }, - { 10, 0, 326 }, { 5, 11, 705 }, { 9, 11, 606 }, { 5, 0, 488 }, - { 6, 0, 527 }, { 7, 0, 489 }, { 7, 0, 1636 }, { 8, 0, 121 }, - { 8, 0, 144 }, { 8, 0, 359 }, { 9, 0, 193 }, { 9, 0, 241 }, - { 9, 0, 336 }, { 9, 0, 882 }, { 11, 0, 266 }, { 11, 0, 372 }, - { 11, 0, 944 }, { 12, 0, 401 }, { 12, 0, 641 }, { 7, 11, 174 }, - { 6, 0, 267 }, { 7, 10, 244 }, { 7, 10, 632 }, { 7, 10, 1609 }, - { 8, 10, 178 }, { 8, 10, 638 }, { 13, 10, 58 }, { 6, 0, 1983 }, - { 6, 0, 1155 }, { 6, 0, 1575 }, { 6, 0, 1438 }, { 9, 0, 31 }, - { 10, 0, 244 }, { 10, 0, 699 }, { 12, 0, 149 }, { 13, 0, 497 }, - { 5, 0, 377 }, { 4, 11, 122 }, { 5, 11, 796 }, { 5, 11, 952 }, - { 6, 11, 1660 }, { 6, 11, 1671 }, { 8, 11, 567 }, { 9, 11, 687 }, - { 9, 11, 742 }, { 10, 11, 686 }, { 11, 11, 356 }, { 11, 11, 682 }, - { 12, 11, 281 }, { 17, 0, 101 }, { 11, 11, 0 }, { 16, 11, 78 }, - { 5, 11, 179 }, { 5, 10, 791 }, { 7, 11, 1095 }, { 7, 11, 1213 }, - { 8, 11, 372 }, { 9, 11, 122 }, { 10, 11, 175 }, { 7, 10, 686 }, - { 8, 10, 33 }, { 8, 10, 238 }, { 10, 10, 616 }, { 11, 10, 467 }, - { 11, 10, 881 }, { 13, 10, 217 }, { 13, 10, 253 }, { 14, 10, 268 }, - { 9, 0, 476 }, { 4, 11, 66 }, { 7, 11, 722 }, { 7, 11, 904 }, - { 7, 11, 352 }, { 9, 11, 684 }, { 7, 0, 2023 }, { 7, 0, 1836 }, - { 4, 10, 447 }, { 5, 0, 843 }, { 16, 0, 35 }, { 9, 11, 779 }, - { 13, 11, 35 }, { 4, 10, 128 }, { 5, 10, 415 }, { 6, 10, 462 }, - { 7, 10, 294 }, { 7, 10, 578 }, { 10, 10, 710 }, { 11, 10, 86 }, - { 4, 0, 554 }, { 5, 0, 536 }, { 8, 10, 587 }, { 5, 0, 207 }, - { 9, 0, 79 }, { 11, 0, 625 }, { 17, 0, 7 }, { 7, 0, 1371 }, - { 6, 10, 427 }, { 10, 10, 692 }, { 4, 0, 424 }, { 4, 10, 195 }, - { 7, 10, 802 }, { 8, 0, 785 }, { 5, 11, 564 }, { 7, 0, 336 }, - { 4, 0, 896 }, { 6, 0, 1777 }, { 6, 11, 556 }, { 9, 11, 103 }, - { 6, 10, 1683 }, { 7, 11, 544 }, { 8, 11, 719 }, { 10, 11, 61 }, - { 10, 10, 472 }, { 4, 11, 5 }, { 5, 11, 498 }, { 8, 11, 637 }, - { 7, 0, 750 }, { 9, 0, 223 }, { 11, 0, 27 }, { 11, 0, 466 }, - { 12, 0, 624 }, { 14, 0, 265 }, { 18, 0, 61 }, { 12, 0, 238 }, - { 18, 0, 155 }, { 12, 11, 238 }, { 18, 11, 155 }, { 23, 10, 28 }, - { 5, 11, 927 }, { 12, 0, 383 }, { 5, 10, 3 }, { 8, 10, 578 }, - { 9, 10, 118 }, { 10, 10, 705 }, { 13, 10, 279 }, { 4, 11, 893 }, - { 5, 11, 780 }, { 5, 11, 893 }, { 4, 0, 603 }, { 5, 0, 661 }, - { 4, 0, 11 }, { 6, 0, 128 }, { 7, 0, 231 }, { 7, 0, 1533 }, - { 10, 0, 725 }, { 5, 10, 229 }, { 5, 11, 238 }, { 7, 11, 1350 }, - { 8, 10, 102 }, { 10, 10, 578 }, { 10, 10, 672 }, { 12, 10, 496 }, - { 13, 10, 408 }, { 14, 10, 121 }, { 17, 10, 106 }, { 4, 0, 476 }, - { 6, 0, 1552 }, { 6, 11, 1729 }, { 8, 10, 115 }, { 8, 10, 350 }, - { 9, 10, 489 }, { 10, 10, 128 }, { 11, 10, 306 }, { 12, 10, 373 }, - { 14, 10, 30 }, { 17, 10, 79 }, { 19, 10, 80 }, { 22, 10, 55 }, - { 7, 0, 1807 }, { 4, 0, 680 }, { 4, 11, 60 }, { 7, 11, 760 }, - { 7, 11, 1800 }, { 8, 11, 314 }, { 9, 11, 700 }, { 11, 11, 487 }, - { 4, 10, 230 }, { 5, 10, 702 }, { 20, 11, 94 }, { 4, 11, 228 }, - { 11, 0, 435 }, { 9, 0, 20 }, { 10, 0, 324 }, { 10, 0, 807 }, - { 11, 0, 488 }, { 6, 10, 1728 }, { 8, 11, 419 }, { 4, 10, 484 }, - { 18, 10, 26 }, { 19, 10, 42 }, { 20, 10, 43 }, { 21, 10, 0 }, - { 23, 10, 27 }, { 24, 10, 14 }, { 7, 0, 1431 }, { 5, 11, 828 }, - { 5, 0, 112 }, { 6, 0, 103 }, { 6, 0, 150 }, { 7, 0, 1303 }, - { 9, 0, 292 }, { 10, 0, 481 }, { 20, 0, 13 }, { 7, 11, 176 }, - { 7, 11, 178 }, { 7, 11, 1110 }, { 10, 11, 481 }, { 20, 11, 13 }, - { 10, 0, 356 }, { 4, 11, 51 }, { 5, 11, 39 }, { 6, 11, 4 }, - { 7, 11, 591 }, { 7, 11, 849 }, { 7, 11, 951 }, { 7, 11, 1129 }, - { 7, 11, 1613 }, { 7, 11, 1760 }, { 7, 11, 1988 }, { 9, 11, 434 }, - { 10, 11, 754 }, { 11, 11, 25 }, { 11, 11, 37 }, { 11, 11, 414 }, - { 6, 0, 1963 }, { 6, 0, 2000 }, { 4, 10, 633 }, { 6, 0, 1244 }, - { 5, 11, 902 }, { 7, 11, 928 }, { 12, 0, 18 }, { 10, 0, 204 }, - { 7, 11, 1173 }, { 6, 0, 867 }, { 4, 0, 708 }, { 8, 0, 15 }, - { 9, 0, 50 }, { 9, 0, 386 }, { 11, 0, 18 }, { 11, 0, 529 }, - { 12, 0, 228 }, { 6, 11, 270 }, { 4, 0, 563 }, { 7, 0, 109 }, - { 7, 0, 592 }, { 7, 0, 637 }, { 7, 0, 770 }, { 8, 0, 463 }, - { 9, 0, 60 }, { 9, 0, 335 }, { 9, 0, 904 }, { 10, 0, 73 }, - { 11, 0, 434 }, { 12, 0, 585 }, { 13, 0, 331 }, { 18, 0, 110 }, - { 20, 0, 60 }, { 4, 0, 502 }, { 14, 11, 359 }, { 19, 11, 52 }, - { 20, 11, 47 }, { 6, 11, 377 }, { 7, 11, 1025 }, { 9, 11, 613 }, - { 17, 11, 104 }, { 6, 0, 347 }, { 10, 0, 161 }, { 5, 10, 70 }, - { 5, 10, 622 }, { 6, 10, 334 }, { 7, 10, 1032 }, { 9, 10, 171 }, - { 11, 10, 26 }, { 11, 10, 213 }, { 11, 10, 637 }, { 11, 10, 707 }, - { 12, 10, 202 }, { 12, 10, 380 }, { 13, 10, 226 }, { 13, 10, 355 }, - { 14, 10, 222 }, { 17, 10, 42 }, { 4, 11, 416 }, { 4, 0, 33 }, - { 5, 0, 102 }, { 6, 0, 284 }, { 7, 0, 1079 }, { 7, 0, 1423 }, - { 7, 0, 1702 }, { 8, 0, 470 }, { 9, 0, 554 }, { 9, 0, 723 }, - { 11, 0, 333 }, { 14, 11, 372 }, { 5, 11, 152 }, { 5, 11, 197 }, - { 7, 11, 340 }, { 7, 11, 867 }, { 10, 11, 548 }, { 10, 11, 581 }, - { 11, 11, 6 }, { 12, 11, 3 }, { 12, 11, 19 }, { 14, 11, 110 }, - { 14, 11, 289 }, { 7, 0, 246 }, { 7, 0, 840 }, { 6, 0, 10 }, - { 8, 0, 571 }, { 9, 0, 739 }, { 15, 0, 91 }, { 6, 0, 465 }, - { 7, 0, 1465 }, { 4, 10, 23 }, { 4, 10, 141 }, { 5, 10, 313 }, - { 5, 10, 1014 }, { 6, 10, 50 }, { 7, 10, 142 }, { 7, 10, 559 }, - { 8, 10, 640 }, { 9, 10, 460 }, { 9, 10, 783 }, { 11, 10, 741 }, - { 12, 10, 183 }, { 13, 10, 488 }, { 5, 0, 626 }, { 8, 0, 614 }, - { 10, 0, 237 }, { 7, 11, 34 }, { 7, 11, 190 }, { 8, 11, 28 }, - { 8, 11, 141 }, { 8, 11, 444 }, { 8, 11, 811 }, { 9, 11, 468 }, - { 11, 11, 334 }, { 12, 11, 24 }, { 12, 11, 386 }, { 12, 11, 576 }, - { 5, 11, 757 }, { 5, 0, 18 }, { 6, 0, 526 }, { 13, 0, 24 }, - { 13, 0, 110 }, { 19, 0, 5 }, { 19, 0, 44 }, { 6, 0, 506 }, - { 6, 11, 506 }, { 7, 11, 1553 }, { 4, 0, 309 }, { 5, 0, 462 }, - { 7, 0, 970 }, { 7, 0, 1097 }, { 22, 0, 30 }, { 22, 0, 33 }, - { 7, 11, 1385 }, { 11, 11, 582 }, { 11, 11, 650 }, { 11, 11, 901 }, - { 11, 11, 949 }, { 12, 11, 232 }, { 12, 11, 236 }, { 13, 11, 413 }, - { 13, 11, 501 }, { 18, 11, 116 }, { 9, 0, 140 }, { 5, 10, 222 }, - { 10, 10, 534 }, { 6, 0, 1056 }, { 9, 10, 906 }, { 6, 0, 1704 }, - { 10, 10, 503 }, { 6, 0, 1036 }, { 5, 10, 154 }, { 7, 10, 1491 }, - { 10, 10, 379 }, { 10, 10, 485 }, { 4, 11, 383 }, { 5, 10, 716 }, - { 6, 0, 1315 }, { 5, 0, 86 }, { 7, 0, 743 }, { 9, 0, 85 }, - { 10, 0, 281 }, { 10, 0, 432 }, { 11, 0, 825 }, { 12, 0, 251 }, - { 13, 0, 118 }, { 14, 0, 378 }, { 8, 0, 264 }, { 4, 10, 91 }, - { 5, 10, 388 }, { 5, 10, 845 }, { 6, 10, 206 }, { 6, 10, 252 }, - { 6, 10, 365 }, { 7, 10, 136 }, { 7, 10, 531 }, { 8, 10, 621 }, - { 5, 0, 524 }, { 5, 0, 744 }, { 5, 11, 277 }, { 13, 11, 247 }, - { 4, 11, 435 }, { 10, 0, 107 }, { 12, 0, 436 }, { 4, 0, 927 }, - { 10, 0, 123 }, { 12, 0, 670 }, { 18, 0, 94 }, { 7, 0, 1149 }, - { 9, 0, 156 }, { 10, 0, 957 }, { 5, 11, 265 }, { 6, 11, 212 }, - { 7, 11, 28 }, { 5, 0, 778 }, { 5, 0, 502 }, { 8, 0, 196 }, - { 10, 0, 283 }, { 11, 0, 406 }, { 7, 10, 576 }, { 8, 11, 535 }, - { 6, 0, 1312 }, { 5, 10, 771 }, { 5, 10, 863 }, { 5, 10, 898 }, - { 6, 10, 1632 }, { 6, 10, 1644 }, { 6, 10, 1780 }, { 5, 0, 855 }, - { 5, 10, 331 }, { 7, 11, 1487 }, { 4, 11, 702 }, { 5, 11, 808 }, - { 7, 11, 2045 }, { 7, 0, 1400 }, { 9, 0, 446 }, { 10, 0, 45 }, - { 12, 10, 632 }, { 4, 0, 1003 }, { 5, 11, 166 }, { 8, 11, 739 }, - { 12, 11, 511 }, { 5, 10, 107 }, { 7, 10, 201 }, { 8, 10, 518 }, - { 6, 10, 446 }, { 7, 10, 1817 }, { 6, 0, 1532 }, { 6, 0, 1097 }, - { 4, 11, 119 }, { 5, 11, 170 }, { 5, 11, 447 }, { 7, 11, 1708 }, - { 7, 11, 1889 }, { 9, 11, 357 }, { 9, 11, 719 }, { 12, 11, 486 }, - { 12, 11, 596 }, { 9, 10, 851 }, { 13, 10, 510 }, { 7, 0, 612 }, - { 8, 0, 545 }, { 8, 0, 568 }, { 8, 0, 642 }, { 9, 0, 717 }, - { 10, 0, 541 }, { 10, 0, 763 }, { 11, 0, 449 }, { 12, 0, 489 }, - { 13, 0, 153 }, { 13, 0, 296 }, { 14, 0, 138 }, { 14, 0, 392 }, - { 15, 0, 50 }, { 16, 0, 6 }, { 16, 0, 12 }, { 20, 0, 9 }, - { 4, 10, 504 }, { 4, 11, 450 }, { 7, 11, 1158 }, { 11, 0, 54 }, - { 13, 0, 173 }, { 13, 0, 294 }, { 5, 10, 883 }, { 5, 10, 975 }, - { 8, 10, 392 }, { 20, 10, 7 }, { 13, 0, 455 }, { 15, 0, 99 }, - { 15, 0, 129 }, { 16, 0, 68 }, { 7, 0, 172 }, { 4, 11, 754 }, - { 5, 10, 922 }, { 6, 10, 1707 }, { 6, 0, 1029 }, { 17, 11, 39 }, - { 20, 11, 36 }, { 4, 0, 568 }, { 5, 10, 993 }, { 7, 10, 515 }, - { 9, 10, 91 }, { 4, 0, 732 }, { 10, 0, 617 }, { 10, 11, 617 }, - { 6, 0, 974 }, { 7, 0, 989 }, { 10, 0, 377 }, { 12, 0, 363 }, - { 13, 0, 68 }, { 13, 0, 94 }, { 14, 0, 108 }, { 14, 0, 306 }, - { 8, 0, 733 }, { 4, 0, 428 }, { 7, 0, 1789 }, { 7, 11, 1062 }, - { 7, 0, 2015 }, { 12, 0, 665 }, { 7, 10, 1433 }, { 5, 0, 287 }, - { 7, 10, 921 }, { 8, 10, 580 }, { 8, 10, 593 }, { 8, 10, 630 }, - { 10, 10, 28 }, { 10, 0, 806 }, { 4, 10, 911 }, { 5, 10, 867 }, - { 5, 10, 1013 }, { 7, 10, 2034 }, { 8, 10, 798 }, { 8, 10, 813 }, - { 6, 0, 1539 }, { 8, 11, 523 }, { 22, 11, 34 }, { 7, 11, 740 }, - { 7, 11, 238 }, { 7, 11, 2033 }, { 8, 11, 120 }, { 8, 11, 188 }, - { 8, 11, 659 }, { 9, 11, 598 }, { 10, 11, 466 }, { 12, 11, 342 }, - { 12, 11, 588 }, { 13, 11, 503 }, { 14, 11, 246 }, { 15, 11, 92 }, - { 7, 0, 1563 }, { 13, 0, 182 }, { 5, 10, 135 }, { 6, 10, 519 }, - { 7, 10, 1722 }, { 10, 10, 271 }, { 11, 10, 261 }, { 17, 10, 54 }, - { 14, 10, 338 }, { 20, 10, 81 }, { 7, 0, 484 }, { 4, 10, 300 }, - { 5, 10, 436 }, { 17, 11, 114 }, { 6, 0, 1623 }, { 6, 0, 1681 }, - { 5, 11, 640 }, { 4, 11, 201 }, { 7, 11, 1744 }, { 8, 11, 602 }, - { 11, 11, 247 }, { 11, 11, 826 }, { 17, 11, 65 }, { 8, 11, 164 }, - { 18, 11, 62 }, { 6, 0, 1833 }, { 6, 0, 1861 }, { 8, 0, 878 }, - { 6, 0, 1569 }, { 8, 10, 357 }, { 10, 10, 745 }, { 14, 10, 426 }, - { 17, 10, 94 }, { 19, 10, 57 }, { 12, 0, 93 }, { 12, 0, 501 }, - { 13, 0, 362 }, { 14, 0, 151 }, { 15, 0, 40 }, { 15, 0, 59 }, - { 16, 0, 46 }, { 17, 0, 25 }, { 18, 0, 14 }, { 18, 0, 134 }, - { 19, 0, 25 }, { 19, 0, 69 }, { 20, 0, 16 }, { 20, 0, 19 }, - { 20, 0, 66 }, { 21, 0, 23 }, { 21, 0, 25 }, { 22, 0, 42 }, - { 6, 0, 1748 }, { 8, 0, 715 }, { 9, 0, 802 }, { 10, 0, 46 }, - { 10, 0, 819 }, { 13, 0, 308 }, { 14, 0, 351 }, { 14, 0, 363 }, - { 18, 0, 67 }, { 4, 0, 994 }, { 4, 0, 63 }, { 5, 0, 347 }, - { 4, 0, 591 }, { 5, 0, 749 }, { 7, 11, 1577 }, { 10, 11, 304 }, - { 10, 11, 549 }, { 11, 11, 424 }, { 12, 11, 365 }, { 13, 11, 220 }, - { 13, 11, 240 }, { 14, 11, 33 }, { 5, 0, 366 }, { 7, 0, 557 }, - { 12, 0, 547 }, { 14, 0, 86 }, { 5, 10, 387 }, { 7, 0, 1747 }, - { 4, 11, 907 }, { 5, 11, 100 }, { 10, 11, 329 }, { 12, 11, 416 }, - { 21, 11, 29 }, { 4, 10, 6 }, { 5, 10, 708 }, { 8, 10, 75 }, - { 7, 10, 1351 }, { 9, 10, 581 }, { 10, 10, 639 }, { 11, 10, 453 }, - { 12, 10, 584 }, { 7, 0, 89 }, { 4, 10, 303 }, { 10, 10, 772 }, - { 4, 11, 176 }, { 5, 11, 636 }, { 5, 11, 998 }, { 8, 11, 26 }, - { 9, 11, 358 }, { 7, 11, 9 }, { 7, 11, 1508 }, { 9, 11, 317 }, - { 10, 11, 210 }, { 10, 11, 292 }, { 10, 11, 533 }, { 11, 11, 555 }, - { 12, 11, 526 }, { 12, 11, 607 }, { 13, 11, 263 }, { 13, 11, 459 }, - { 14, 11, 271 }, { 6, 0, 1463 }, { 6, 0, 772 }, { 6, 0, 1137 }, - { 11, 11, 595 }, { 7, 0, 977 }, { 11, 11, 66 }, { 10, 0, 893 }, - { 20, 0, 48 }, { 20, 11, 48 }, { 5, 0, 824 }, { 5, 0, 941 }, - { 6, 11, 295 }, { 7, 0, 1543 }, { 7, 0, 1785 }, { 10, 0, 690 }, - { 4, 10, 106 }, { 11, 10, 717 }, { 7, 0, 440 }, { 8, 0, 230 }, - { 11, 0, 106 }, { 5, 10, 890 }, { 5, 10, 988 }, { 6, 10, 626 }, - { 14, 10, 431 }, { 10, 11, 127 }, { 13, 11, 27 }, { 17, 0, 32 }, - { 10, 10, 706 }, { 22, 10, 44 }, { 4, 0, 216 }, { 9, 0, 332 }, - { 4, 10, 698 }, { 8, 11, 119 }, { 11, 11, 267 }, { 10, 10, 17 }, - { 11, 11, 526 }, { 11, 11, 939 }, { 13, 11, 290 }, { 7, 11, 1167 }, - { 11, 11, 934 }, { 13, 11, 391 }, { 17, 11, 76 }, { 11, 11, 39 }, - { 6, 10, 84 }, { 4, 0, 914 }, { 5, 0, 800 }, { 5, 0, 852 }, - { 10, 0, 416 }, { 13, 0, 115 }, { 7, 0, 564 }, { 14, 0, 168 }, - { 4, 0, 918 }, { 5, 0, 876 }, { 6, 0, 1764 }, { 24, 0, 3 }, - { 4, 0, 92 }, { 5, 0, 274 }, { 7, 11, 126 }, { 8, 11, 84 }, - { 12, 10, 498 }, { 8, 11, 790 }, { 8, 0, 501 }, { 5, 10, 986 }, - { 6, 10, 130 }, { 7, 10, 1582 }, { 8, 10, 458 }, { 10, 10, 101 }, - { 10, 10, 318 }, { 10, 10, 823 }, { 6, 11, 64 }, { 12, 11, 377 }, - { 13, 11, 309 }, { 5, 0, 743 }, { 10, 0, 851 }, { 4, 0, 49 }, - { 7, 0, 280 }, { 7, 0, 1633 }, { 6, 0, 879 }, { 8, 0, 47 }, - { 7, 10, 1644 }, { 9, 10, 129 }, { 4, 0, 865 }, { 6, 0, 1202 }, - { 9, 11, 34 }, { 11, 11, 484 }, { 7, 10, 997 }, { 5, 0, 272 }, - { 5, 0, 908 }, { 5, 0, 942 }, { 8, 0, 197 }, { 9, 0, 47 }, - { 11, 0, 538 }, { 11, 0, 742 }, { 6, 11, 1700 }, { 7, 11, 26 }, - { 7, 11, 293 }, { 7, 11, 382 }, { 7, 11, 1026 }, { 7, 11, 1087 }, - { 7, 11, 2027 }, { 8, 11, 24 }, { 8, 11, 114 }, { 8, 11, 252 }, - { 8, 11, 727 }, { 8, 11, 729 }, { 9, 11, 30 }, { 9, 11, 199 }, - { 9, 11, 231 }, { 9, 11, 251 }, { 9, 11, 334 }, { 9, 11, 361 }, - { 9, 11, 488 }, { 9, 11, 712 }, { 10, 11, 55 }, { 10, 11, 60 }, - { 10, 11, 232 }, { 10, 11, 332 }, { 10, 11, 384 }, { 10, 11, 396 }, - { 10, 11, 504 }, { 10, 11, 542 }, { 10, 11, 652 }, { 11, 11, 20 }, - { 11, 11, 48 }, { 11, 11, 207 }, { 11, 11, 291 }, { 11, 11, 298 }, - { 11, 11, 342 }, { 11, 11, 365 }, { 11, 11, 394 }, { 11, 11, 620 }, - { 11, 11, 705 }, { 11, 11, 1017 }, { 12, 11, 123 }, { 12, 11, 340 }, - { 12, 11, 406 }, { 12, 11, 643 }, { 13, 11, 61 }, { 13, 11, 269 }, - { 13, 11, 311 }, { 13, 11, 319 }, { 13, 11, 486 }, { 14, 11, 234 }, - { 15, 11, 62 }, { 15, 11, 85 }, { 16, 11, 71 }, { 18, 11, 119 }, - { 20, 11, 105 }, { 6, 0, 1455 }, { 22, 11, 37 }, { 7, 10, 1927 }, - { 7, 0, 1911 }, { 9, 0, 891 }, { 7, 10, 1756 }, { 9, 10, 98 }, - { 7, 10, 1046 }, { 11, 10, 160 }, { 4, 0, 761 }, { 6, 11, 379 }, - { 7, 11, 270 }, { 7, 11, 1116 }, { 8, 11, 176 }, { 8, 11, 183 }, - { 9, 11, 432 }, { 9, 11, 661 }, { 12, 11, 247 }, { 12, 11, 617 }, - { 18, 11, 125 }, { 6, 10, 45 }, { 7, 10, 433 }, { 8, 10, 129 }, - { 9, 10, 21 }, { 10, 10, 392 }, { 11, 10, 79 }, { 12, 10, 499 }, - { 13, 10, 199 }, { 13, 10, 451 }, { 4, 0, 407 }, { 5, 11, 792 }, - { 5, 11, 900 }, { 4, 0, 560 }, { 7, 0, 183 }, { 13, 0, 490 }, - { 7, 10, 558 }, { 8, 10, 353 }, { 4, 0, 475 }, { 6, 0, 731 }, - { 11, 0, 35 }, { 13, 0, 71 }, { 13, 0, 177 }, { 14, 0, 422 }, - { 5, 10, 785 }, { 8, 10, 81 }, { 9, 10, 189 }, { 9, 10, 201 }, - { 11, 10, 478 }, { 11, 10, 712 }, { 13, 10, 338 }, { 4, 0, 418 }, - { 4, 0, 819 }, { 5, 10, 353 }, { 23, 10, 26 }, { 4, 11, 901 }, - { 5, 11, 776 }, { 4, 0, 575 }, { 7, 0, 818 }, { 16, 0, 92 }, - { 17, 0, 14 }, { 17, 0, 45 }, { 18, 0, 75 }, { 20, 0, 18 }, - { 6, 0, 222 }, { 7, 0, 636 }, { 7, 0, 1620 }, { 8, 0, 409 }, - { 9, 0, 693 }, { 11, 0, 77 }, { 6, 10, 25 }, { 7, 10, 855 }, - { 7, 10, 1258 }, { 16, 10, 32 }, { 6, 0, 1880 }, { 6, 0, 1887 }, - { 6, 0, 1918 }, { 6, 0, 1924 }, { 9, 0, 967 }, { 9, 0, 995 }, - { 9, 0, 1015 }, { 12, 0, 826 }, { 12, 0, 849 }, { 12, 0, 857 }, - { 12, 0, 860 }, { 12, 0, 886 }, { 12, 0, 932 }, { 18, 0, 228 }, - { 18, 0, 231 }, { 18, 0, 240 }, { 6, 0, 633 }, { 6, 0, 1308 }, - { 4, 11, 37 }, { 5, 11, 334 }, { 7, 11, 1253 }, { 10, 0, 86 }, - { 4, 10, 4 }, { 7, 10, 1118 }, { 7, 10, 1320 }, { 7, 10, 1706 }, - { 8, 10, 277 }, { 9, 10, 622 }, { 11, 10, 724 }, { 12, 10, 350 }, - { 12, 10, 397 }, { 13, 10, 28 }, { 13, 10, 159 }, { 15, 10, 89 }, - { 18, 10, 5 }, { 19, 10, 9 }, { 20, 10, 34 }, { 22, 10, 47 }, - { 4, 11, 508 }, { 9, 11, 448 }, { 12, 11, 107 }, { 18, 11, 31 }, - { 4, 0, 817 }, { 6, 0, 663 }, { 5, 0, 882 }, { 6, 0, 914 }, - { 4, 11, 540 }, { 4, 11, 533 }, { 8, 11, 608 }, { 8, 0, 885 }, - { 10, 0, 865 }, { 4, 0, 426 }, { 6, 0, 58 }, { 7, 0, 745 }, - { 7, 0, 1969 }, { 8, 0, 399 }, { 8, 0, 675 }, { 9, 0, 479 }, - { 9, 0, 731 }, { 10, 0, 330 }, { 10, 0, 593 }, { 10, 0, 817 }, - { 11, 0, 32 }, { 11, 0, 133 }, { 11, 0, 221 }, { 17, 0, 68 }, - { 6, 10, 255 }, { 7, 0, 102 }, { 9, 0, 538 }, { 9, 10, 216 }, - { 7, 11, 253 }, { 8, 11, 549 }, { 7, 11, 912 }, { 9, 10, 183 }, - { 11, 10, 286 }, { 11, 10, 956 }, { 23, 10, 3 }, { 8, 11, 527 }, - { 18, 11, 60 }, { 19, 11, 24 }, { 4, 10, 536 }, { 7, 10, 1141 }, - { 10, 10, 723 }, { 11, 10, 371 }, { 5, 11, 920 }, { 7, 0, 876 }, - { 7, 10, 285 }, { 7, 10, 560 }, { 4, 10, 690 }, { 14, 11, 126 }, - { 11, 10, 33 }, { 12, 10, 571 }, { 21, 10, 1 }, { 5, 0, 566 }, - { 9, 0, 139 }, { 10, 0, 399 }, { 11, 0, 469 }, { 12, 0, 634 }, - { 13, 0, 223 }, { 4, 11, 483 }, { 6, 0, 48 }, { 7, 0, 63 }, - { 18, 0, 12 }, { 7, 10, 1862 }, { 12, 10, 491 }, { 12, 10, 520 }, - { 13, 10, 383 }, { 14, 10, 244 }, { 7, 11, 1665 }, { 4, 11, 448 }, - { 9, 11, 495 }, { 18, 11, 104 }, { 6, 0, 114 }, { 7, 0, 1224 }, - { 7, 0, 1556 }, { 8, 0, 3 }, { 4, 10, 190 }, { 5, 10, 554 }, - { 8, 0, 576 }, { 9, 0, 267 }, { 5, 10, 1001 }, { 5, 10, 446 }, - { 5, 0, 933 }, { 11, 11, 1009 }, { 8, 11, 653 }, { 13, 11, 93 }, - { 19, 11, 14 }, { 6, 0, 692 }, { 6, 0, 821 }, { 6, 0, 1077 }, - { 5, 11, 172 }, { 7, 11, 801 }, { 10, 0, 752 }, { 4, 0, 375 }, - { 6, 0, 638 }, { 6, 0, 1011 }, { 12, 11, 540 }, { 9, 0, 96 }, - { 5, 11, 260 }, { 11, 11, 587 }, { 7, 10, 1231 }, { 12, 0, 30 }, - { 13, 0, 148 }, { 14, 0, 87 }, { 14, 0, 182 }, { 16, 0, 42 }, - { 20, 0, 70 }, { 4, 10, 304 }, { 6, 0, 1398 }, { 7, 0, 56 }, - { 7, 0, 1989 }, { 8, 0, 337 }, { 8, 0, 738 }, { 9, 0, 600 }, - { 12, 0, 37 }, { 13, 0, 447 }, { 14, 0, 92 }, { 10, 0, 666 }, - { 5, 0, 394 }, { 7, 0, 487 }, { 8, 0, 246 }, { 9, 0, 437 }, - { 6, 10, 53 }, { 6, 10, 199 }, { 7, 10, 1408 }, { 8, 10, 32 }, - { 8, 10, 93 }, { 10, 10, 397 }, { 10, 10, 629 }, { 11, 10, 593 }, - { 11, 10, 763 }, { 13, 10, 326 }, { 17, 10, 35 }, { 6, 10, 105 }, - { 9, 0, 320 }, { 10, 0, 506 }, { 10, 10, 794 }, { 7, 11, 57 }, - { 8, 11, 167 }, { 8, 11, 375 }, { 9, 11, 82 }, { 9, 11, 561 }, - { 10, 11, 620 }, { 10, 11, 770 }, { 11, 10, 704 }, { 13, 10, 396 }, - { 6, 0, 1003 }, { 5, 10, 114 }, { 5, 10, 255 }, { 13, 10, 285 }, - { 7, 0, 866 }, { 7, 0, 1163 }, { 5, 11, 531 }, { 4, 0, 328 }, - { 7, 10, 2035 }, { 8, 10, 19 }, { 9, 10, 89 }, { 10, 10, 831 }, - { 8, 11, 194 }, { 8, 11, 756 }, { 8, 0, 1000 }, { 5, 11, 453 }, - { 6, 11, 441 }, { 4, 0, 101 }, { 5, 0, 833 }, { 7, 0, 1171 }, - { 8, 0, 744 }, { 5, 0, 726 }, { 8, 10, 746 }, { 10, 0, 176 }, - { 6, 0, 9 }, { 6, 0, 397 }, { 7, 0, 53 }, { 7, 0, 1742 }, - { 10, 0, 632 }, { 11, 0, 828 }, { 12, 0, 146 }, { 7, 11, 22 }, - { 17, 11, 64 }, { 4, 0, 839 }, { 11, 0, 417 }, { 12, 0, 223 }, - { 12, 0, 265 }, { 4, 11, 102 }, { 7, 11, 815 }, { 7, 11, 1699 }, - { 11, 11, 964 }, { 5, 10, 955 }, { 8, 10, 814 }, { 6, 0, 1931 }, - { 6, 0, 2007 }, { 18, 0, 246 }, { 18, 0, 247 }, { 8, 0, 198 }, - { 11, 0, 29 }, { 12, 0, 534 }, { 7, 0, 1771 }, { 6, 0, 846 }, - { 7, 11, 1010 }, { 11, 11, 733 }, { 11, 11, 759 }, { 12, 11, 563 }, - { 13, 11, 34 }, { 14, 11, 101 }, { 18, 11, 45 }, { 18, 11, 129 }, - { 4, 0, 186 }, { 5, 0, 157 }, { 8, 0, 168 }, { 10, 0, 6 }, - { 4, 11, 899 }, { 5, 10, 56 }, { 20, 10, 100 }, { 5, 0, 875 }, - { 5, 0, 773 }, { 5, 0, 991 }, { 6, 0, 1635 }, { 6, 0, 1788 }, - { 6, 0, 1274 }, { 9, 0, 477 }, { 13, 0, 78 }, { 4, 0, 639 }, - { 7, 0, 111 }, { 8, 0, 581 }, { 12, 0, 177 }, { 6, 11, 52 }, - { 9, 11, 104 }, { 9, 11, 559 }, { 10, 10, 4 }, { 10, 10, 13 }, - { 11, 10, 638 }, { 12, 11, 308 }, { 19, 11, 87 }, { 20, 10, 57 }, - { 4, 11, 604 }, { 4, 11, 301 }, { 5, 10, 738 }, { 5, 10, 758 }, - { 6, 0, 1747 }, { 7, 11, 1440 }, { 11, 11, 854 }, { 11, 11, 872 }, - { 11, 11, 921 }, { 12, 11, 551 }, { 13, 11, 472 }, { 14, 11, 367 }, - { 7, 0, 1364 }, { 7, 0, 1907 }, { 13, 0, 158 }, { 6, 0, 873 }, - { 4, 0, 404 }, { 4, 0, 659 }, { 7, 0, 552 }, { 7, 0, 675 }, - { 7, 10, 1112 }, { 11, 10, 328 }, { 7, 11, 508 }, { 9, 10, 133 }, - { 5, 0, 391 }, { 5, 10, 110 }, { 6, 10, 169 }, { 6, 10, 1702 }, - { 7, 10, 400 }, { 8, 10, 538 }, { 9, 10, 184 }, { 9, 10, 524 }, - { 12, 10, 218 }, { 6, 11, 310 }, { 7, 11, 1849 }, { 8, 11, 72 }, - { 8, 11, 272 }, { 8, 11, 431 }, { 9, 11, 12 }, { 9, 11, 351 }, - { 10, 11, 563 }, { 10, 11, 630 }, { 10, 11, 810 }, { 11, 11, 367 }, - { 11, 11, 599 }, { 11, 11, 686 }, { 12, 11, 672 }, { 5, 0, 540 }, - { 6, 0, 1697 }, { 8, 0, 668 }, { 4, 0, 883 }, { 6, 0, 78 }, - { 12, 0, 628 }, { 18, 0, 79 }, { 6, 10, 133 }, { 9, 10, 353 }, - { 11, 10, 993 }, { 6, 11, 181 }, { 7, 11, 537 }, { 8, 11, 64 }, - { 9, 11, 127 }, { 10, 11, 496 }, { 12, 11, 510 }, { 13, 11, 384 }, - { 6, 10, 93 }, { 7, 10, 1422 }, { 7, 10, 1851 }, { 8, 10, 673 }, - { 9, 10, 529 }, { 12, 10, 43 }, { 9, 10, 371 }, { 6, 0, 1460 }, - { 6, 0, 962 }, { 4, 11, 244 }, { 7, 11, 233 }, { 9, 10, 25 }, - { 10, 10, 467 }, { 10, 10, 559 }, { 4, 10, 335 }, { 7, 10, 942 }, - { 5, 0, 460 }, { 7, 11, 334 }, { 6, 11, 1650 }, { 4, 0, 199 }, - { 11, 0, 34 }, { 5, 10, 601 }, { 8, 10, 39 }, { 10, 10, 773 }, - { 11, 10, 84 }, { 12, 10, 205 }, { 14, 10, 1 }, { 5, 10, 870 }, - { 6, 0, 388 }, { 14, 0, 474 }, { 20, 0, 120 }, { 5, 11, 369 }, - { 11, 0, 271 }, { 4, 0, 511 }, { 9, 0, 333 }, { 9, 0, 379 }, - { 10, 0, 602 }, { 11, 0, 441 }, { 11, 0, 723 }, { 11, 0, 976 }, - { 12, 0, 357 }, { 4, 10, 181 }, { 6, 0, 608 }, { 6, 10, 1652 }, - { 22, 0, 49 }, { 9, 11, 338 }, { 12, 0, 988 }, { 6, 0, 617 }, - { 5, 0, 938 }, { 8, 0, 707 }, { 4, 10, 97 }, { 5, 10, 147 }, - { 6, 10, 286 }, { 7, 10, 1362 }, { 13, 10, 176 }, { 6, 0, 756 }, - { 6, 0, 1149 }, { 5, 11, 896 }, { 6, 10, 375 }, { 7, 10, 169 }, - { 7, 10, 254 }, { 8, 10, 780 }, { 6, 0, 1583 }, { 7, 10, 1447 }, - { 11, 0, 285 }, { 7, 11, 1117 }, { 8, 11, 393 }, { 8, 11, 539 }, - { 7, 0, 344 }, { 6, 0, 469 }, { 7, 0, 1709 }, { 10, 0, 515 }, - { 5, 10, 629 }, { 7, 10, 1549 }, { 5, 11, 4 }, { 5, 11, 810 }, - { 6, 11, 13 }, { 6, 11, 538 }, { 6, 11, 1690 }, { 6, 11, 1726 }, - { 7, 11, 499 }, { 7, 11, 1819 }, { 8, 11, 148 }, { 8, 11, 696 }, - { 8, 11, 791 }, { 12, 11, 125 }, { 13, 11, 54 }, { 15, 11, 9 }, - { 7, 11, 1268 }, { 9, 0, 404 }, { 4, 0, 500 }, { 5, 0, 68 }, - { 6, 0, 383 }, { 11, 0, 216 }, { 11, 0, 340 }, { 4, 11, 925 }, - { 5, 11, 803 }, { 8, 11, 698 }, { 10, 11, 828 }, { 4, 0, 337 }, - { 6, 0, 353 }, { 7, 0, 1934 }, { 8, 0, 488 }, { 9, 0, 429 }, - { 7, 0, 236 }, { 7, 0, 1795 }, { 8, 0, 259 }, { 9, 0, 135 }, - { 9, 0, 177 }, { 9, 0, 860 }, { 10, 0, 825 }, { 11, 0, 115 }, - { 11, 0, 370 }, { 11, 0, 405 }, { 11, 0, 604 }, { 12, 0, 10 }, - { 12, 0, 667 }, { 12, 0, 669 }, { 13, 0, 76 }, { 14, 0, 310 }, - { 15, 0, 76 }, { 15, 0, 147 }, { 20, 0, 23 }, { 4, 0, 15 }, - { 4, 0, 490 }, { 5, 0, 22 }, { 6, 0, 244 }, { 7, 0, 40 }, - { 7, 0, 200 }, { 7, 0, 906 }, { 7, 0, 1199 }, { 9, 0, 616 }, - { 10, 0, 716 }, { 11, 0, 635 }, { 11, 0, 801 }, { 12, 0, 458 }, - { 12, 0, 756 }, { 4, 10, 420 }, { 6, 0, 1504 }, { 6, 0, 757 }, - { 5, 11, 383 }, { 6, 0, 1266 }, { 7, 0, 1735 }, { 5, 0, 598 }, - { 7, 0, 791 }, { 8, 0, 108 }, { 9, 0, 123 }, { 7, 10, 1570 }, - { 12, 10, 542 }, { 14, 11, 410 }, { 9, 11, 660 }, { 10, 11, 347 }, -}; - -} // namespace brotli - -#endif // BROTLI_ENC_DICTIONARY_LUT_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/streams.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/streams.cc deleted file mode 100644 index 17eda2d588a..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/streams.cc +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright 2009 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Convience routines to make Brotli I/O classes from some memory containers and -// files. - -#include "./streams.h" - -#include <assert.h> -#include <stdlib.h> -#include <string.h> - -namespace brotli { - -BrotliMemOut::BrotliMemOut(void* buf, size_t len) - : buf_(buf), - len_(len), - pos_(0) {} - -void BrotliMemOut::Reset(void* buf, size_t len) { - buf_ = buf; - len_ = len; - pos_ = 0; -} - -// Brotli output routine: copy n bytes to the output buffer. -bool BrotliMemOut::Write(const void *buf, size_t n) { - if (n + pos_ > len_) - return false; - char* p = reinterpret_cast<char*>(buf_) + pos_; - memcpy(p, buf, n); - pos_ += n; - return true; -} - -BrotliStringOut::BrotliStringOut(std::string* buf, size_t max_size) - : buf_(buf), - max_size_(max_size) { - assert(buf->empty()); -} - -void BrotliStringOut::Reset(std::string* buf, size_t max_size) { - buf_ = buf; - max_size_ = max_size; -} - -// Brotli output routine: add n bytes to a string. -bool BrotliStringOut::Write(const void *buf, size_t n) { - if (buf_->size() + n > max_size_) - return false; - buf_->append(static_cast<const char*>(buf), n); - return true; -} - -BrotliMemIn::BrotliMemIn(const void* buf, size_t len) - : buf_(buf), - len_(len), - pos_(0) {} - -void BrotliMemIn::Reset(const void* buf, size_t len) { - buf_ = buf; - len_ = len; - pos_ = 0; -} - -// Brotli input routine: read the next chunk of memory. -const void* BrotliMemIn::Read(size_t n, size_t* output) { - if (pos_ == len_) { - return NULL; - } - if (n > len_ - pos_) - n = len_ - pos_; - const char* p = reinterpret_cast<const char*>(buf_) + pos_; - pos_ += n; - *output = n; - return p; -} - -BrotliFileIn::BrotliFileIn(FILE* f, size_t max_read_size) - : f_(f), - buf_(new char[max_read_size]), - buf_size_(max_read_size) { } - -BrotliFileIn::~BrotliFileIn(void) { - delete[] buf_; -} - -const void* BrotliFileIn::Read(size_t n, size_t* bytes_read) { - if (n > buf_size_) { - n = buf_size_; - } else if (n == 0) { - return feof(f_) ? NULL : buf_; - } - *bytes_read = fread(buf_, 1, n, f_); - if (*bytes_read == 0) { - return NULL; - } else { - return buf_; - } -} - -BrotliFileOut::BrotliFileOut(FILE* f) : f_(f) {} - -bool BrotliFileOut::Write(const void* buf, size_t n) { - if (fwrite(buf, n, 1, f_) != 1) { - return false; - } - return true; -} - -} // namespace brotli diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/streams.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/streams.h deleted file mode 100644 index 7fb28092ea0..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/streams.h +++ /dev/null @@ -1,121 +0,0 @@ -/* Copyright 2009 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Input and output classes for streaming brotli compression. - -#ifndef BROTLI_ENC_STREAMS_H_ -#define BROTLI_ENC_STREAMS_H_ - -#include <stdio.h> -#include <string> -#include "./port.h" -#include "./types.h" - -namespace brotli { - -// Input interface for the compression routines. -class BrotliIn { - public: - virtual ~BrotliIn(void) {} - - // Return a pointer to the next block of input of at most n bytes. - // Return the actual length in *nread. - // At end of data, return NULL. Don't return NULL if there is more data - // to read, even if called with n == 0. - // Read will only be called if some of its bytes are needed. - virtual const void* Read(size_t n, size_t* nread) = 0; -}; - -// Output interface for the compression routines. -class BrotliOut { - public: - virtual ~BrotliOut(void) {} - - // Write n bytes of data from buf. - // Return true if all written, false otherwise. - virtual bool Write(const void *buf, size_t n) = 0; -}; - -// Adapter class to make BrotliIn objects from raw memory. -class BrotliMemIn : public BrotliIn { - public: - BrotliMemIn(const void* buf, size_t len); - - void Reset(const void* buf, size_t len); - - // returns the amount of data consumed - size_t position(void) const { return pos_; } - - const void* Read(size_t n, size_t* OUTPUT); - - private: - const void* buf_; // start of input buffer - size_t len_; // length of input - size_t pos_; // current read position within input -}; - -// Adapter class to make BrotliOut objects from raw memory. -class BrotliMemOut : public BrotliOut { - public: - BrotliMemOut(void* buf, size_t len); - - void Reset(void* buf, size_t len); - - // returns the amount of data written - size_t position(void) const { return pos_; } - - bool Write(const void* buf, size_t n); - - private: - void* buf_; // start of output buffer - size_t len_; // length of output - size_t pos_; // current write position within output -}; - -// Adapter class to make BrotliOut objects from a string. -class BrotliStringOut : public BrotliOut { - public: - // Create a writer that appends its data to buf. - // buf->size() will grow to at most max_size - // buf is expected to be empty when constructing BrotliStringOut. - BrotliStringOut(std::string* buf, size_t max_size); - - void Reset(std::string* buf, size_t max_len); - - bool Write(const void* buf, size_t n); - - private: - std::string* buf_; // start of output buffer - size_t max_size_; // max length of output -}; - -// Adapter class to make BrotliIn object from a file. -class BrotliFileIn : public BrotliIn { - public: - BrotliFileIn(FILE* f, size_t max_read_size); - ~BrotliFileIn(void); - - const void* Read(size_t n, size_t* bytes_read); - - private: - FILE* f_; - char* buf_; - size_t buf_size_; -}; - -// Adapter class to make BrotliOut object from a file. -class BrotliFileOut : public BrotliOut { - public: - explicit BrotliFileOut(FILE* f); - - bool Write(const void* buf, size_t n); - private: - FILE* f_; -}; - -} // namespace brotli - -#endif // BROTLI_ENC_STREAMS_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/transform.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/transform.h deleted file mode 100644 index 1ec3849dd6f..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/transform.h +++ /dev/null @@ -1,248 +0,0 @@ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Transformations on dictionary words. - -#ifndef BROTLI_ENC_TRANSFORM_H_ -#define BROTLI_ENC_TRANSFORM_H_ - -#include <string> - -#include "./dictionary.h" - -namespace brotli { - -enum WordTransformType { - kIdentity = 0, - kOmitLast1 = 1, - kOmitLast2 = 2, - kOmitLast3 = 3, - kOmitLast4 = 4, - kOmitLast5 = 5, - kOmitLast6 = 6, - kOmitLast7 = 7, - kOmitLast8 = 8, - kOmitLast9 = 9, - kUppercaseFirst = 10, - kUppercaseAll = 11, - kOmitFirst1 = 12, - kOmitFirst2 = 13, - kOmitFirst3 = 14, - kOmitFirst4 = 15, - kOmitFirst5 = 16, - kOmitFirst6 = 17, - kOmitFirst7 = 18, - kOmitFirst8 = 19, - kOmitFirst9 = 20 -}; - -struct Transform { - const char* prefix; - WordTransformType word_transform; - const char* suffix; -}; - -static const Transform kTransforms[] = { - { "", kIdentity, "" }, - { "", kIdentity, " " }, - { " ", kIdentity, " " }, - { "", kOmitFirst1, "" }, - { "", kUppercaseFirst, " " }, - { "", kIdentity, " the " }, - { " ", kIdentity, "" }, - { "s ", kIdentity, " " }, - { "", kIdentity, " of " }, - { "", kUppercaseFirst, "" }, - { "", kIdentity, " and " }, - { "", kOmitFirst2, "" }, - { "", kOmitLast1, "" }, - { ", ", kIdentity, " " }, - { "", kIdentity, ", " }, - { " ", kUppercaseFirst, " " }, - { "", kIdentity, " in " }, - { "", kIdentity, " to " }, - { "e ", kIdentity, " " }, - { "", kIdentity, "\"" }, - { "", kIdentity, "." }, - { "", kIdentity, "\">" }, - { "", kIdentity, "\n" }, - { "", kOmitLast3, "" }, - { "", kIdentity, "]" }, - { "", kIdentity, " for " }, - { "", kOmitFirst3, "" }, - { "", kOmitLast2, "" }, - { "", kIdentity, " a " }, - { "", kIdentity, " that " }, - { " ", kUppercaseFirst, "" }, - { "", kIdentity, ". " }, - { ".", kIdentity, "" }, - { " ", kIdentity, ", " }, - { "", kOmitFirst4, "" }, - { "", kIdentity, " with " }, - { "", kIdentity, "'" }, - { "", kIdentity, " from " }, - { "", kIdentity, " by " }, - { "", kOmitFirst5, "" }, - { "", kOmitFirst6, "" }, - { " the ", kIdentity, "" }, - { "", kOmitLast4, "" }, - { "", kIdentity, ". The " }, - { "", kUppercaseAll, "" }, - { "", kIdentity, " on " }, - { "", kIdentity, " as " }, - { "", kIdentity, " is " }, - { "", kOmitLast7, "" }, - { "", kOmitLast1, "ing " }, - { "", kIdentity, "\n\t" }, - { "", kIdentity, ":" }, - { " ", kIdentity, ". " }, - { "", kIdentity, "ed " }, - { "", kOmitFirst9, "" }, - { "", kOmitFirst7, "" }, - { "", kOmitLast6, "" }, - { "", kIdentity, "(" }, - { "", kUppercaseFirst, ", " }, - { "", kOmitLast8, "" }, - { "", kIdentity, " at " }, - { "", kIdentity, "ly " }, - { " the ", kIdentity, " of " }, - { "", kOmitLast5, "" }, - { "", kOmitLast9, "" }, - { " ", kUppercaseFirst, ", " }, - { "", kUppercaseFirst, "\"" }, - { ".", kIdentity, "(" }, - { "", kUppercaseAll, " " }, - { "", kUppercaseFirst, "\">" }, - { "", kIdentity, "=\"" }, - { " ", kIdentity, "." }, - { ".com/", kIdentity, "" }, - { " the ", kIdentity, " of the " }, - { "", kUppercaseFirst, "'" }, - { "", kIdentity, ". This " }, - { "", kIdentity, "," }, - { ".", kIdentity, " " }, - { "", kUppercaseFirst, "(" }, - { "", kUppercaseFirst, "." }, - { "", kIdentity, " not " }, - { " ", kIdentity, "=\"" }, - { "", kIdentity, "er " }, - { " ", kUppercaseAll, " " }, - { "", kIdentity, "al " }, - { " ", kUppercaseAll, "" }, - { "", kIdentity, "='" }, - { "", kUppercaseAll, "\"" }, - { "", kUppercaseFirst, ". " }, - { " ", kIdentity, "(" }, - { "", kIdentity, "ful " }, - { " ", kUppercaseFirst, ". " }, - { "", kIdentity, "ive " }, - { "", kIdentity, "less " }, - { "", kUppercaseAll, "'" }, - { "", kIdentity, "est " }, - { " ", kUppercaseFirst, "." }, - { "", kUppercaseAll, "\">" }, - { " ", kIdentity, "='" }, - { "", kUppercaseFirst, "," }, - { "", kIdentity, "ize " }, - { "", kUppercaseAll, "." }, - { "\xc2\xa0", kIdentity, "" }, - { " ", kIdentity, "," }, - { "", kUppercaseFirst, "=\"" }, - { "", kUppercaseAll, "=\"" }, - { "", kIdentity, "ous " }, - { "", kUppercaseAll, ", " }, - { "", kUppercaseFirst, "='" }, - { " ", kUppercaseFirst, "," }, - { " ", kUppercaseAll, "=\"" }, - { " ", kUppercaseAll, ", " }, - { "", kUppercaseAll, "," }, - { "", kUppercaseAll, "(" }, - { "", kUppercaseAll, ". " }, - { " ", kUppercaseAll, "." }, - { "", kUppercaseAll, "='" }, - { " ", kUppercaseAll, ". " }, - { " ", kUppercaseFirst, "=\"" }, - { " ", kUppercaseAll, "='" }, - { " ", kUppercaseFirst, "='" }, -}; - -static const size_t kNumTransforms = - sizeof(kTransforms) / sizeof(kTransforms[0]); - -static const size_t kOmitLastNTransforms[10] = { - 0, 12, 27, 23, 42, 63, 56, 48, 59, 64, -}; - -static size_t ToUpperCase(uint8_t *p, size_t len) { - if (len == 1 || p[0] < 0xc0) { - if (p[0] >= 'a' && p[0] <= 'z') { - p[0] ^= 32; - } - return 1; - } - if (p[0] < 0xe0) { - p[1] ^= 32; - return 2; - } - if (len == 2) { - return 2; - } - p[2] ^= 5; - return 3; -} - -inline std::string TransformWord( - WordTransformType transform_type, const uint8_t* word, size_t len) { - if (transform_type <= kOmitLast9) { - if (len <= static_cast<size_t>(transform_type)) { - return std::string(); - } - return std::string(word, word + len - transform_type); - } - - if (transform_type >= kOmitFirst1) { - const size_t skip = transform_type - (kOmitFirst1 - 1); - if (len <= skip) { - return std::string(); - } - return std::string(word + skip, word + len); - } - - std::string ret = std::string(word, word + len); - uint8_t *uppercase = reinterpret_cast<uint8_t*>(&ret[0]); - if (transform_type == kUppercaseFirst) { - ToUpperCase(uppercase, len); - } else if (transform_type == kUppercaseAll) { - size_t position = 0; - while (position < len) { - size_t step = ToUpperCase(uppercase, len - position); - uppercase += step; - position += step; - } - } - return ret; -} - -inline std::string ApplyTransform( - const Transform& t, const uint8_t* word, size_t len) { - return std::string(t.prefix) + - TransformWord(t.word_transform, word, len) + std::string(t.suffix); -} - -inline std::string GetTransformedDictionaryWord(size_t len_code, - size_t word_id) { - size_t num_words = 1u << kBrotliDictionarySizeBitsByLength[len_code]; - size_t offset = kBrotliDictionaryOffsetsByLength[len_code]; - size_t t = word_id / num_words; - size_t word_idx = word_id % num_words; - offset += len_code * word_idx; - const uint8_t* word = &kBrotliDictionary[offset]; - return ApplyTransform(kTransforms[t], word, len_code); -} - -} // namespace brotli - -#endif // BROTLI_ENC_TRANSFORM_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/types.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/types.h deleted file mode 100644 index 266a9cd3852..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/types.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -/* Common types */ - -#ifndef BROTLI_ENC_TYPES_H_ -#define BROTLI_ENC_TYPES_H_ - -#include <stddef.h> /* for size_t */ - -#if defined(_MSC_VER) && (_MSC_VER < 1600) -typedef __int8 int8_t; -typedef unsigned __int8 uint8_t; -typedef __int16 int16_t; -typedef unsigned __int16 uint16_t; -typedef __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef unsigned __int64 uint64_t; -typedef __int64 int64_t; -#else -#include <stdint.h> -#endif /* defined(_MSC_VER) && (_MSC_VER < 1600) */ - -#define MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low) - -#endif /* BROTLI_ENC_TYPES_H_ */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/utf8_util.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/utf8_util.h deleted file mode 100644 index 74f22b6a7f6..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/utf8_util.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Heuristics for deciding about the UTF8-ness of strings. - -#ifndef BROTLI_ENC_UTF8_UTIL_H_ -#define BROTLI_ENC_UTF8_UTIL_H_ - -#include "./types.h" - -namespace brotli { - -static const double kMinUTF8Ratio = 0.75; - -// Returns true if at least min_fraction of the bytes between pos and -// pos + length in the (data, mask) ringbuffer is UTF8-encoded. -bool IsMostlyUTF8(const uint8_t* data, const size_t pos, const size_t mask, - const size_t length, const double min_fraction); - -} // namespace brotli - -#endif // BROTLI_ENC_UTF8_UTIL_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/write_bits.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/write_bits.h deleted file mode 100644 index b605203a361..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/brotli/enc/write_bits.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Write bits into a byte array. - -#ifndef BROTLI_ENC_WRITE_BITS_H_ -#define BROTLI_ENC_WRITE_BITS_H_ - -#include <assert.h> -#include <stdio.h> - -#include "./port.h" -#include "./types.h" - -namespace brotli { - -//#define BIT_WRITER_DEBUG - -// This function writes bits into bytes in increasing addresses, and within -// a byte least-significant-bit first. -// -// The function can write up to 56 bits in one go with WriteBits -// Example: let's assume that 3 bits (Rs below) have been written already: -// -// BYTE-0 BYTE+1 BYTE+2 -// -// 0000 0RRR 0000 0000 0000 0000 -// -// Now, we could write 5 or less bits in MSB by just sifting by 3 -// and OR'ing to BYTE-0. -// -// For n bits, we take the last 5 bits, OR that with high bits in BYTE-0, -// and locate the rest in BYTE+1, BYTE+2, etc. -inline void WriteBits(size_t n_bits, - uint64_t bits, - size_t * __restrict pos, - uint8_t * __restrict array) { -#ifdef BIT_WRITER_DEBUG - printf("WriteBits %2d 0x%016llx %10d\n", n_bits, bits, *pos); -#endif - assert((bits >> n_bits) == 0); - assert(n_bits <= 56); -#ifdef IS_LITTLE_ENDIAN - // This branch of the code can write up to 56 bits at a time, - // 7 bits are lost by being perhaps already in *p and at least - // 1 bit is needed to initialize the bit-stream ahead (i.e. if 7 - // bits are in *p and we write 57 bits, then the next write will - // access a byte that was never initialized). - uint8_t *p = &array[*pos >> 3]; - uint64_t v = *p; - v |= bits << (*pos & 7); - BROTLI_UNALIGNED_STORE64(p, v); // Set some bits. - *pos += n_bits; -#else - // implicit & 0xff is assumed for uint8_t arithmetics - uint8_t *array_pos = &array[*pos >> 3]; - const size_t bits_reserved_in_first_byte = (*pos & 7); - bits <<= bits_reserved_in_first_byte; - *array_pos++ |= static_cast<uint8_t>(bits); - for (size_t bits_left_to_write = n_bits + bits_reserved_in_first_byte; - bits_left_to_write >= 9; - bits_left_to_write -= 8) { - bits >>= 8; - *array_pos++ = static_cast<uint8_t>(bits); - } - *array_pos = 0; - *pos += n_bits; -#endif -} - -inline void WriteBitsPrepareStorage(size_t pos, uint8_t *array) { -#ifdef BIT_WRITER_DEBUG - printf("WriteBitsPrepareStorage %10d\n", pos); -#endif - assert((pos & 7) == 0); - array[pos >> 3] = 0; -} - -} // namespace brotli - -#endif // BROTLI_ENC_WRITE_BITS_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_dec.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/decode.h index 98fec074d02..6ef3b8e76c8 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_dec.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/decode.h @@ -1,25 +1,17 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Library for converting WOFF2 format font files to their TTF versions. +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Library for converting WOFF2 format font files to their TTF versions. */ #ifndef WOFF2_WOFF2_DEC_H_ #define WOFF2_WOFF2_DEC_H_ #include <stddef.h> #include <inttypes.h> -#include "./woff2_out.h" +#include <woff2/output.h> namespace woff2 { @@ -29,11 +21,13 @@ size_t ComputeWOFF2FinalSize(const uint8_t *data, size_t length); // Decompresses the font into the target buffer. The result_length should // be the same as determined by ComputeFinalSize(). Returns true on successful // decompression. +// DEPRECATED; please prefer the version that takes a WOFF2Out* bool ConvertWOFF2ToTTF(uint8_t *result, size_t result_length, const uint8_t *data, size_t length); // Decompresses the font into out. Returns true on success. // Works even if WOFF2Header totalSfntSize is wrong. +// Please prefer this API. bool ConvertWOFF2ToTTF(const uint8_t *data, size_t length, WOFF2Out* out); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_enc.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/encode.h index 3ac8c3ab1bd..34b77229749 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_enc.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/encode.h @@ -1,18 +1,10 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Library for converting WOFF2 format font files to their TTF versions. +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Library for converting WOFF2 format font files to their TTF versions. */ #ifndef WOFF2_WOFF2_ENC_H_ #define WOFF2_WOFF2_ENC_H_ @@ -21,16 +13,13 @@ #include <inttypes.h> #include <string> -using std::string; - - namespace woff2 { struct WOFF2Params { WOFF2Params() : extended_metadata(""), brotli_quality(11), allow_transforms(true) {} - string extended_metadata; + std::string extended_metadata; int brotli_quality; bool allow_transforms; }; @@ -38,7 +27,7 @@ struct WOFF2Params { // Returns an upper bound on the size of the compressed file. size_t MaxWOFF2CompressedSize(const uint8_t* data, size_t length); size_t MaxWOFF2CompressedSize(const uint8_t* data, size_t length, - const string& extended_metadata); + const std::string& extended_metadata); // Compresses the font into the target buffer. *result_length should be at least // the value returned by MaxWOFF2CompressedSize(), upon return, it is set to the diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_out.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/output.h index c956afa0e2a..c325f67be72 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_out.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/output.h @@ -1,34 +1,10 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Output buffer for WOFF2 decompression. - -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Output buffer for WOFF2 decompression. +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Output buffer for WOFF2 decompression. */ #ifndef WOFF2_WOFF2_OUT_H_ #define WOFF2_WOFF2_OUT_H_ @@ -37,16 +13,12 @@ #include <cstring> #include <memory> #include <string> -#include "./port.h" namespace woff2 { // Suggested max size for output. const size_t kDefaultMaxSize = 30 * 1024 * 1024; -using std::string; - - /** * Output interface for the woff2 decoding. * @@ -79,7 +51,7 @@ class WOFF2StringOut : public WOFF2Out { // Create a writer that writes its data to buf. // buf->size() will grow to at most max_size // buf may be sized (e.g. using EstimateWOFF2FinalSize) or empty. - explicit WOFF2StringOut(string* buf); + explicit WOFF2StringOut(std::string* buf); bool Write(const void *buf, size_t n) override; bool Write(const void *buf, size_t offset, size_t n) override; @@ -87,7 +59,7 @@ class WOFF2StringOut : public WOFF2Out { size_t MaxSize() { return max_size_; } void SetMaxSize(size_t max_size); private: - string* buf_; + std::string* buf_; size_t max_size_; size_t offset_; }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/version.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/version.h new file mode 100644 index 00000000000..e949b2d0dcd --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/version.h @@ -0,0 +1,8 @@ +#ifndef WOFF2_WOFF2_VERSION_H_ +#define WOFF2_WOFF2_VERSION_H_ + +namespace woff2 { +constexpr const int version = 0x010001; +} + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/buffer.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/buffer.h index 588ac0d3399..7240e5181ce 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/buffer.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/buffer.h @@ -1,19 +1,11 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// The parts of ots.h & opentype-sanitiser.h that we need, taken from the -// https://code.google.com/p/ots/ project. +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* The parts of ots.h & opentype-sanitiser.h that we need, taken from the + https://code.google.com/p/ots/ project. */ #ifndef WOFF2_BUFFER_H_ #define WOFF2_BUFFER_H_ @@ -65,8 +57,8 @@ inline bool Failure(const char *f, int l, const char *fn) { // ----------------------------------------------------------------------------- class Buffer { public: - Buffer(const uint8_t *buffer, size_t len) - : buffer_(buffer), + Buffer(const uint8_t *data, size_t len) + : buffer_(data), length_(len), offset_(0) { } @@ -74,7 +66,7 @@ class Buffer { return Read(NULL, n_bytes); } - bool Read(uint8_t *buffer, size_t n_bytes) { + bool Read(uint8_t *data, size_t n_bytes) { if (n_bytes > 1024 * 1024 * 1024) { return FONT_COMPRESSION_FAILURE(); } @@ -82,8 +74,8 @@ class Buffer { (offset_ > length_ - n_bytes)) { return FONT_COMPRESSION_FAILURE(); } - if (buffer) { - std::memcpy(buffer, buffer_ + offset_, n_bytes); + if (data) { + std::memcpy(data, buffer_ + offset_, n_bytes); } offset_ += n_bytes; return true; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/file.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/file.h deleted file mode 100644 index 7afcb315fe8..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/file.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// File IO helpers. - -#ifndef WOFF2_FILE_H_ -#define WOFF2_FILE_H_ - -#include <fstream> -#include <iterator> - -namespace woff2 { - -using std::string; - - -inline string GetFileContent(string filename) { - std::ifstream ifs(filename.c_str(), std::ios::binary); - return string( - std::istreambuf_iterator<char>(ifs.rdbuf()), - std::istreambuf_iterator<char>()); -} - -inline void SetFileContents(string filename, string::iterator start, - string::iterator end) { - std::ofstream ofs(filename.c_str(), std::ios::binary); - std::copy(start, end, std::ostream_iterator<char>(ofs)); -} - -} // namespace woff2 -#endif // WOFF2_FILE_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/font.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/font.cc index 06067300524..ef552e16890 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/font.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/font.cc @@ -1,18 +1,10 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Font management utilities +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Font management utilities */ #include "./font.h" @@ -105,6 +97,12 @@ bool ReadTrueTypeFont(Buffer* file, const uint8_t* data, size_t len, last_offset = i.first + i.second; } + // Sanity check key tables + const Font::Table* head_table = font->FindTable(kHeadTableTag); + if (head_table != NULL && head_table->length < 52) { + return FONT_COMPRESSION_FAILURE(); + } + return true; } @@ -325,8 +323,11 @@ int NumGlyphs(const Font& font) { return 0; } int index_fmt = IndexFormat(font); - int num_glyphs = (loca_table->length / (index_fmt == 0 ? 2 : 4)) - 1; - return num_glyphs; + uint32_t loca_record_size = (index_fmt == 0 ? 2 : 4); + if (loca_table->length < loca_record_size) { + return 0; + } + return (loca_table->length / loca_record_size) - 1; } int IndexFormat(const Font& font) { diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/font.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/font.h index 93806e6b5ee..7b8ddddc5a1 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/font.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/font.h @@ -1,19 +1,11 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Data model for a font file in sfnt format, reading and writing functions and -// accessors for the glyph data. +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Data model for a font file in sfnt format, reading and writing functions and + accessors for the glyph data. */ #ifndef WOFF2_FONT_H_ #define WOFF2_FONT_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.cc index 1dadafcb700..057174de219 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.cc @@ -1,18 +1,10 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Glyph manipulation +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Glyph manipulation */ #include "./glyph.h" @@ -118,25 +110,27 @@ bool ReadGlyph(const uint8_t* data, size_t len, Glyph* glyph) { // Read the run-length coded flags. std::vector<std::vector<uint8_t> > flags(num_contours); - uint8_t flag = 0; - uint8_t flag_repeat = 0; - for (int i = 0; i < num_contours; ++i) { - flags[i].resize(glyph->contours[i].size()); - for (size_t j = 0; j < glyph->contours[i].size(); ++j) { - if (flag_repeat == 0) { - if (!buffer.ReadU8(&flag)) { - return FONT_COMPRESSION_FAILURE(); - } - if (flag & kFLAG_REPEAT) { - if (!buffer.ReadU8(&flag_repeat)) { + { + uint8_t flag = 0; + uint8_t flag_repeat = 0; + for (int i = 0; i < num_contours; ++i) { + flags[i].resize(glyph->contours[i].size()); + for (size_t j = 0; j < glyph->contours[i].size(); ++j) { + if (flag_repeat == 0) { + if (!buffer.ReadU8(&flag)) { return FONT_COMPRESSION_FAILURE(); } + if (flag & kFLAG_REPEAT) { + if (!buffer.ReadU8(&flag_repeat)) { + return FONT_COMPRESSION_FAILURE(); + } + } + } else { + flag_repeat--; } - } else { - flag_repeat--; + flags[i][j] = flag; + glyph->contours[i][j].on_curve = flag & kFLAG_ONCURVE; } - flags[i][j] = flag; - glyph->contours[i][j].on_curve = flag & kFLAG_ONCURVE; } } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.h index 0ee755c2f5a..f24056f4c8c 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.h @@ -1,19 +1,11 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Data model and I/O for glyph data within sfnt format files for the purpose of -// performing the preprocessing step of the WOFF 2.0 conversion. +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Data model and I/O for glyph data within sfnt format files for the purpose of + performing the preprocessing step of the WOFF 2.0 conversion. */ #ifndef WOFF2_GLYPH_H_ #define WOFF2_GLYPH_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/normalize.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/normalize.cc index b538b91a89f..67a16957018 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/normalize.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/normalize.cc @@ -1,18 +1,10 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Glyph normalization +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Glyph normalization */ #include "./normalize.h" @@ -52,7 +44,7 @@ bool WriteNormalizedLoca(int index_fmt, int num_glyphs, Font* font) { loca_table->buffer.resize(Round4(num_glyphs + 1) * glyph_sz); loca_table->length = (num_glyphs + 1) * glyph_sz; - uint8_t* glyf_dst = &glyf_table->buffer[0]; + uint8_t* glyf_dst = num_glyphs ? &glyf_table->buffer[0] : NULL; uint8_t* loca_dst = &loca_table->buffer[0]; uint32_t glyf_offset = 0; size_t loca_offset = 0; @@ -78,16 +70,13 @@ bool WriteNormalizedLoca(int index_fmt, int num_glyphs, Font* font) { } glyf_offset += glyf_dst_size; } - if (glyf_offset == 0) { - return false; - } StoreLoca(index_fmt, glyf_offset, &loca_offset, loca_dst); glyf_table->buffer.resize(glyf_offset); - glyf_table->data = &glyf_table->buffer[0]; + glyf_table->data = glyf_offset ? &glyf_table->buffer[0] : NULL; glyf_table->length = glyf_offset; - loca_table->data = &loca_table->buffer[0]; + loca_table->data = loca_offset ? &loca_table->buffer[0] : NULL; return true; } @@ -221,7 +210,6 @@ bool FixChecksums(Font* font) { size_t offset = 8; StoreU32(0, &offset, head_buf); uint32_t file_checksum = 0; - uint32_t head_checksum = 0; for (auto& i : font->tables) { Font::Table* table = &i.second; if (table->IsReused()) { @@ -229,10 +217,6 @@ bool FixChecksums(Font* font) { } table->checksum = ComputeULongSum(table->data, table->length); file_checksum += table->checksum; - - if (table->tag == kHeadTableTag) { - head_checksum = table->checksum; - } } file_checksum += ComputeHeaderChecksum(*font); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/normalize.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/normalize.h index e0153488ed3..c6fee74db60 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/normalize.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/normalize.h @@ -1,20 +1,12 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Functions for normalizing fonts. Since the WOFF 2.0 decoder creates font -// files in normalized form, the WOFF 2.0 conversion is guaranteed to be -// lossless (in a bitwise sense) only for normalized font files. +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Functions for normalizing fonts. Since the WOFF 2.0 decoder creates font + files in normalized form, the WOFF 2.0 conversion is guaranteed to be + lossless (in a bitwise sense) only for normalized font files. */ #ifndef WOFF2_NORMALIZE_H_ #define WOFF2_NORMALIZE_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/port.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/port.h index bac47a93a61..8b60fee8bc9 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/port.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/port.h @@ -1,18 +1,10 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Helper function for bit twiddling and macros for branch prediction. +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Helper function for bit twiddling and macros for branch prediction. */ #ifndef WOFF2_PORT_H_ #define WOFF2_PORT_H_ @@ -60,4 +52,15 @@ inline int Log2Floor(uint32 n) { #define PREDICT_TRUE(x) (x) #endif +#if (defined(__ARM_ARCH) && (__ARM_ARCH == 7)) || \ + (defined(M_ARM) && (M_ARM == 7)) || \ + defined(__aarch64__) || defined(__ARM64_ARCH_8__) || defined(__i386) || \ + defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64) +#if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +#define WOFF_LITTLE_ENDIAN +#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#define WOFF_BIG_ENDIAN +#endif /* endianness */ +#endif /* CPU whitelist */ + #endif // WOFF2_PORT_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/round.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/round.h index abb81f8235d..e5b2cb12200 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/round.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/round.h @@ -1,18 +1,10 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Helper for rounding +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Helper for rounding */ #ifndef WOFF2_ROUND_H_ #define WOFF2_ROUND_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/store_bytes.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/store_bytes.h index 74b279c4277..fff3c62f846 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/store_bytes.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/store_bytes.h @@ -1,19 +1,11 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Helper functions for storing integer values into byte streams. -// No bounds checking is performed, that is the responsibility of the caller. +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Helper functions for storing integer values into byte streams. + No bounds checking is performed, that is the responsibility of the caller. */ #ifndef WOFF2_STORE_BYTES_H_ #define WOFF2_STORE_BYTES_H_ @@ -22,6 +14,8 @@ #include <stddef.h> #include <string.h> +#include "./port.h" + namespace woff2 { inline size_t StoreU32(uint8_t* dst, size_t offset, uint32_t x) { @@ -33,10 +27,10 @@ inline size_t StoreU32(uint8_t* dst, size_t offset, uint32_t x) { } inline size_t Store16(uint8_t* dst, size_t offset, int x) { -#if (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) +#if defined(WOFF_LITTLE_ENDIAN) *reinterpret_cast<uint16_t*>(dst + offset) = ((x & 0xFF) << 8) | ((x & 0xFF00) >> 8); -#elif (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) +#elif defined(WOFF_BIG_ENDIAN) *reinterpret_cast<uint16_t*>(dst + offset) = static_cast<uint16_t>(x); #else dst[offset] = x >> 8; @@ -53,11 +47,11 @@ inline void StoreU32(uint32_t val, size_t* offset, uint8_t* dst) { } inline void Store16(int val, size_t* offset, uint8_t* dst) { -#if (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) +#if defined(WOFF_LITTLE_ENDIAN) *reinterpret_cast<uint16_t*>(dst + *offset) = ((val & 0xFF) << 8) | ((val & 0xFF00) >> 8); *offset += 2; -#elif (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) +#elif defined(WOFF_BIG_ENDIAN) *reinterpret_cast<uint16_t*>(dst + *offset) = static_cast<uint16_t>(val); *offset += 2; #else diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/table_tags.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/table_tags.cc index 0071e00b00c..dca3ec8d287 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/table_tags.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/table_tags.cc @@ -1,18 +1,10 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Font table tags +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Font table tags */ #include "./table_tags.h" diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/table_tags.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/table_tags.h index daa5d9215de..42dc0ae1c44 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/table_tags.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/table_tags.h @@ -1,18 +1,10 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Font table tags +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Font table tags */ #ifndef WOFF2_TABLE_TAGS_H_ #define WOFF2_TABLE_TAGS_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/transform.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/transform.cc index 2ad8b163c3c..999bef37458 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/transform.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/transform.cc @@ -1,18 +1,10 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Library for preprocessing fonts as part of the WOFF 2.0 conversion. +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Library for preprocessing fonts as part of the WOFF 2.0 conversion. */ #include "./transform.h" diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/transform.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/transform.h index e9d1b0d3dc4..a4583d16cb2 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/transform.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/transform.h @@ -1,18 +1,10 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Library for preprocessing fonts as part of the WOFF 2.0 conversion. +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Library for preprocessing fonts as part of the WOFF 2.0 conversion. */ #ifndef WOFF2_TRANSFORM_H_ #define WOFF2_TRANSFORM_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/variable_length.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/variable_length.cc index 944a17f2e28..4f348d5e504 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/variable_length.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/variable_length.cc @@ -1,18 +1,10 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Helper functions for woff2 variable length types: 255UInt16 and UIntBase128 +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Helper functions for woff2 variable length types: 255UInt16 and UIntBase128 */ #include "./variable_length.h" @@ -49,8 +41,8 @@ void Write255UShort(std::vector<uint8_t>* out, int value) { void Store255UShort(int val, size_t* offset, uint8_t* dst) { std::vector<uint8_t> packed; Write255UShort(&packed, val); - for (uint8_t val : packed) { - dst[(*offset)++] = val; + for (uint8_t packed_byte : packed) { + dst[(*offset)++] = packed_byte; } } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/variable_length.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/variable_length.h index 2816ae23a20..20801065357 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/variable_length.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/variable_length.h @@ -1,18 +1,10 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Helper functions for woff2 variable length types: 255UInt16 and UIntBase128 +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Helper functions for woff2 variable length types: 255UInt16 and UIntBase128 */ #ifndef WOFF2_VARIABLE_LENGTH_H_ #define WOFF2_VARIABLE_LENGTH_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_common.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_common.cc index eba6a46e213..fe0a3beda71 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_common.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_common.cc @@ -1,23 +1,17 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Helpers common across multiple parts of woff2 +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Helpers common across multiple parts of woff2 */ #include <algorithm> #include "./woff2_common.h" +#include "./port.h" + namespace woff2 { @@ -25,11 +19,11 @@ uint32_t ComputeULongSum(const uint8_t* buf, size_t size) { uint32_t checksum = 0; size_t aligned_size = size & ~3; for (size_t i = 0; i < aligned_size; i += 4) { -#if (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) +#if defined(WOFF_LITTLE_ENDIAN) uint32_t v = *reinterpret_cast<const uint32_t*>(buf + i); checksum += (((v & 0xFF) << 24) | ((v & 0xFF00) << 8) | ((v & 0xFF0000) >> 8) | ((v & 0xFF000000) >> 24)); -#elif (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) +#elif defined(WOFF_BIG_ENDIAN) checksum += *reinterpret_cast<const uint32_t*>(buf + i); #else checksum += (buf[i] << 24) | (buf[i + 1] << 16) | diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_common.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_common.h index a8c45af80e1..51fd4a7bf8a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_common.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_common.h @@ -1,18 +1,10 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Common definition for WOFF2 encoding/decoding +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Common definition for WOFF2 encoding/decoding */ #ifndef WOFF2_WOFF2_COMMON_H_ #define WOFF2_WOFF2_COMMON_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_enc.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_enc.cc index d100ad51b73..9f32df90ee4 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_enc.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_enc.cc @@ -1,20 +1,12 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Library for converting TTF format font files to their WOFF2 versions. - -#include "./woff2_enc.h" +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Library for converting TTF format font files to their WOFF2 versions. */ + +#include <woff2/encode.h> #include <stdlib.h> #include <complex> @@ -23,7 +15,7 @@ #include <string> #include <vector> -#include "./compressor.h" +#include <brotli/encode.h> #include "./buffer.h" #include "./font.h" #include "./normalize.h" @@ -34,7 +26,6 @@ #include "./variable_length.h" #include "./woff2_common.h" - namespace woff2 { namespace { @@ -47,16 +38,11 @@ using std::vector; const size_t kWoff2HeaderSize = 48; const size_t kWoff2EntrySize = 20; - -bool Compress(const uint8_t* data, const size_t len, - uint8_t* result, uint32_t* result_len, - brotli::BrotliParams::Mode mode, int quality) { +bool Compress(const uint8_t* data, const size_t len, uint8_t* result, + uint32_t* result_len, BrotliEncoderMode mode, int quality) { size_t compressed_len = *result_len; - brotli::BrotliParams params; - params.mode = mode; - params.quality = quality; - if (brotli::BrotliCompressBuffer(params, len, data, &compressed_len, result) - == 0) { + if (BrotliEncoderCompress(quality, BROTLI_DEFAULT_WINDOW, mode, len, data, + &compressed_len, result) == 0) { return false; } *result_len = compressed_len; @@ -67,14 +53,14 @@ bool Woff2Compress(const uint8_t* data, const size_t len, uint8_t* result, uint32_t* result_len, int quality) { return Compress(data, len, result, result_len, - brotli::BrotliParams::MODE_FONT, quality); + BROTLI_MODE_FONT, quality); } bool TextCompress(const uint8_t* data, const size_t len, uint8_t* result, uint32_t* result_len, int quality) { return Compress(data, len, result, result_len, - brotli::BrotliParams::MODE_TEXT, quality); + BROTLI_MODE_TEXT, quality); } int KnownTableIndex(uint32_t tag) { @@ -111,7 +97,8 @@ size_t TableEntrySize(const Table& table) { size_t ComputeWoff2Length(const FontCollection& font_collection, const std::vector<Table>& tables, - std::map<uint32_t, uint16_t> index_by_offset, + std::map<std::pair<uint32_t, uint32_t>, uint16_t> + index_by_tag_offset, size_t compressed_data_length, size_t extended_metadata_length) { size_t size = kWoff2HeaderSize; @@ -134,7 +121,8 @@ size_t ComputeWoff2Length(const FontCollection& font_collection, // no collection entry for xform table if (table.tag & 0x80808080) continue; - uint16_t table_index = index_by_offset[table.offset]; + std::pair<uint32_t, uint32_t> tag_offset(table.tag, table.offset); + uint16_t table_index = index_by_tag_offset[tag_offset]; size += Size255UShort(table_index); // 255UInt16 index entry } } @@ -326,7 +314,7 @@ bool ConvertTTFToWOFF2(const uint8_t *data, size_t length, } std::vector<Table> tables; - std::map<uint32_t, uint16_t> index_by_offset; + std::map<std::pair<uint32_t, uint32_t>, uint16_t> index_by_tag_offset; for (const auto& font : font_collection.fonts) { @@ -336,8 +324,9 @@ bool ConvertTTFToWOFF2(const uint8_t *data, size_t length, continue; } - if (index_by_offset.find(src_table.offset) == index_by_offset.end()) { - index_by_offset[src_table.offset] = tables.size(); + std::pair<uint32_t, uint32_t> tag_offset(src_table.tag, src_table.offset); + if (index_by_tag_offset.find(tag_offset) == index_by_tag_offset.end()) { + index_by_tag_offset[tag_offset] = tables.size(); } else { return false; } @@ -347,22 +336,20 @@ bool ConvertTTFToWOFF2(const uint8_t *data, size_t length, table.flags = src_table.flag_byte; table.src_length = src_table.length; table.transform_length = src_table.length; - const uint8_t* transformed_data = src_table.data; const Font::Table* transformed_table = font.FindTable(src_table.tag ^ 0x80808080); if (transformed_table != NULL) { table.flags = transformed_table->flag_byte; table.flags |= kWoff2FlagsTransform; table.transform_length = transformed_table->length; - transformed_data = transformed_table->data; - } tables.push_back(table); } } size_t woff2_length = ComputeWoff2Length(font_collection, tables, - index_by_offset, total_compressed_length, compressed_metadata_buf_length); + index_by_tag_offset, total_compressed_length, + compressed_metadata_buf_length); if (woff2_length > *result_length) { #ifdef FONT_COMPRESSION_BIN fprintf(stderr, "Result allocation was too small (%zd vs %zd bytes).\n", @@ -433,16 +420,15 @@ bool ConvertTTFToWOFF2(const uint8_t *data, size_t length, // for reused tables, only the original has an updated offset uint32_t table_offset = table.IsReused() ? table.reuse_of->offset : table.offset; - uint32_t table_length = - table.IsReused() ? table.reuse_of->length : table.length; - if (index_by_offset.find(table_offset) == index_by_offset.end()) { + std::pair<uint32_t, uint32_t> tag_offset(table.tag, table_offset); + if (index_by_tag_offset.find(tag_offset) == index_by_tag_offset.end()) { #ifdef FONT_COMPRESSION_BIN - fprintf(stderr, "Missing table index for offset 0x%08x\n", +fprintf(stderr, "Missing table index for offset 0x%08x\n", table_offset); #endif return FONT_COMPRESSION_FAILURE(); } - uint16_t index = index_by_offset[table_offset]; + uint16_t index = index_by_tag_offset[tag_offset]; Store255UShort(index, &offset, result); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_out.cc b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_out.cc index 8882306445b..8ab32681f1d 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_out.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_out.cc @@ -1,20 +1,14 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Output buffer for WOFF2 decompression. +/* Copyright 2014 Google Inc. All Rights Reserved. -#include "./woff2_out.h" + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Output buffer for WOFF2 decompression. */ + +#include <woff2/output.h> + +using std::string; namespace woff2 { diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/xxhash.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/xxhash.c index bc673ed575f..63a11711c8a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/xxhash.c +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/xxhash.c @@ -50,26 +50,32 @@ * Prefer these methods in priority order (0 > 1 > 2) */ #ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */ -# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) ) +# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ + || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ + || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) ) # define XXH_FORCE_MEMORY_ACCESS 2 # elif defined(__INTEL_COMPILER) || \ - (defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) )) + (defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ + || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ + || defined(__ARM_ARCH_7S__) )) # define XXH_FORCE_MEMORY_ACCESS 1 # endif #endif /*!XXH_ACCEPT_NULL_INPUT_POINTER : - * If the input pointer is a null pointer, xxHash default behavior is to trigger a memory access error, since it is a bad pointer. - * When this option is enabled, xxHash output for null input pointers will be the same as a null-length input. - * By default, this option is disabled. To enable it, uncomment below define : + * If input pointer is NULL, xxHash default behavior is to dereference it, triggering a segfault. + * When this macro is enabled, xxHash actively checks input for null pointer. + * It it is, result for null input pointers is the same as a null-length input. */ -/* #define XXH_ACCEPT_NULL_INPUT_POINTER 1 */ +#ifndef XXH_ACCEPT_NULL_INPUT_POINTER /* can be defined externally */ +# define XXH_ACCEPT_NULL_INPUT_POINTER 0 +#endif /*!XXH_FORCE_NATIVE_FORMAT : - * By default, xxHash library provides endian-independant Hash values, based on little-endian convention. + * By default, xxHash library provides endian-independent Hash values, based on little-endian convention. * Results are therefore identical for little-endian and big-endian CPU. * This comes at a performance cost for big-endian CPU, since some swapping is required to emulate little-endian format. - * Should endian-independance be of no importance for your application, you may set the #define below to 1, + * Should endian-independence be of no importance for your application, you may set the #define below to 1, * to improve speed for Big-endian CPU. * This option has no impact on Little_Endian CPU. */ @@ -80,8 +86,9 @@ /*!XXH_FORCE_ALIGN_CHECK : * This is a minor performance trick, only useful with lots of very small keys. * It means : check for aligned/unaligned input. - * The check costs one initial branch per hash; set to 0 when the input data - * is guaranteed to be aligned. + * The check costs one initial branch per hash; + * set it to 0 when the input is guaranteed to be aligned, + * or when alignment doesn't matter for performance. */ #ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */ # if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64) @@ -95,12 +102,12 @@ /* ************************************* * Includes & Memory related functions ***************************************/ -/* Modify the local functions below should you wish to use some other memory routines */ -/* for malloc(), free() */ +/*! Modify the local functions below should you wish to use some other memory routines +* for malloc(), free() */ #include <stdlib.h> static void* XXH_malloc(size_t s) { return malloc(s); } static void XXH_free (void* p) { free(p); } -/* for memcpy() */ +/*! and for memcpy() */ #include <string.h> static void* XXH_memcpy(void* dest, const void* src, size_t size) { return memcpy(dest,src,size); } @@ -115,7 +122,7 @@ static void* XXH_memcpy(void* dest, const void* src, size_t size) { return memcp # pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ # define FORCE_INLINE static __forceinline #else -# if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */ +# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */ # ifdef __GNUC__ # define FORCE_INLINE static inline __attribute__((always_inline)) # else @@ -131,17 +138,17 @@ static void* XXH_memcpy(void* dest, const void* src, size_t size) { return memcp * Basic Types ***************************************/ #ifndef MEM_MODULE -# if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) +# if !defined (__VMS) \ + && (defined (__cplusplus) \ + || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) # include <stdint.h> typedef uint8_t BYTE; typedef uint16_t U16; typedef uint32_t U32; - typedef int32_t S32; # else typedef unsigned char BYTE; typedef unsigned short U16; typedef unsigned int U32; - typedef signed int S32; # endif #endif @@ -175,7 +182,7 @@ static U32 XXH_read32(const void* memPtr) /* **************************************** * Compiler-specific Functions and Macros ******************************************/ -#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) +#define XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) /* Note : although _rotl exists for minGW (GCC under windows), performance seems poor */ #if defined(_MSC_VER) @@ -188,7 +195,7 @@ static U32 XXH_read32(const void* memPtr) #if defined(_MSC_VER) /* Visual Studio */ # define XXH_swap32 _byteswap_ulong -#elif GCC_VERSION >= 403 +#elif XXH_GCC_VERSION >= 403 # define XXH_swap32 __builtin_bswap32 #else static U32 XXH_swap32 (U32 x) @@ -240,7 +247,7 @@ static U32 XXH_readBE32(const void* ptr) /* ************************************* * Macros ***************************************/ -#define XXH_STATIC_ASSERT(c) { enum { XXH_static_assert = 1/(int)(!!(c)) }; } /* use only *after* variable declarations */ +#define XXH_STATIC_ASSERT(c) { enum { XXH_sa = 1/(int)(!!(c)) }; } /* use after variable declarations */ XXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NUMBER; } @@ -268,7 +275,7 @@ FORCE_INLINE U32 XXH32_endian_align(const void* input, size_t len, U32 seed, XXH U32 h32; #define XXH_get32bits(p) XXH_readLE32_align(p, endian, align) -#ifdef XXH_ACCEPT_NULL_INPUT_POINTER +#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1) if (p==NULL) { len=0; bEnd=p=(const BYTE*)(size_t)16; @@ -322,10 +329,10 @@ XXH_PUBLIC_API unsigned int XXH32 (const void* input, size_t len, unsigned int s { #if 0 /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ - XXH32_CREATESTATE_STATIC(state); - XXH32_reset(state, seed); - XXH32_update(state, input, len); - return XXH32_digest(state); + XXH32_state_t state; + XXH32_reset(&state, seed); + XXH32_update(&state, input, len); + return XXH32_digest(&state); #else XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN; @@ -366,23 +373,28 @@ XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dstState, const XXH32_state_t XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, unsigned int seed) { XXH32_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */ - memset(&state, 0, sizeof(state)-4); /* do not write into reserved, for future removal */ + memset(&state, 0, sizeof(state)); state.v1 = seed + PRIME32_1 + PRIME32_2; state.v2 = seed + PRIME32_2; state.v3 = seed + 0; state.v4 = seed - PRIME32_1; - memcpy(statePtr, &state, sizeof(state)); + /* do not write into reserved, planned to be removed in a future version */ + memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved)); return XXH_OK; } -FORCE_INLINE XXH_errorcode XXH32_update_endian (XXH32_state_t* state, const void* input, size_t len, XXH_endianess endian) +FORCE_INLINE +XXH_errorcode XXH32_update_endian (XXH32_state_t* state, const void* input, size_t len, XXH_endianess endian) { const BYTE* p = (const BYTE*)input; const BYTE* const bEnd = p + len; -#ifdef XXH_ACCEPT_NULL_INPUT_POINTER - if (input==NULL) return XXH_ERROR; + if (input==NULL) +#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1) + return XXH_OK; +#else + return XXH_ERROR; #endif state->total_len_32 += (unsigned)len; @@ -400,7 +412,7 @@ FORCE_INLINE XXH_errorcode XXH32_update_endian (XXH32_state_t* state, const void state->v1 = XXH32_round(state->v1, XXH_readLE32(p32, endian)); p32++; state->v2 = XXH32_round(state->v2, XXH_readLE32(p32, endian)); p32++; state->v3 = XXH32_round(state->v3, XXH_readLE32(p32, endian)); p32++; - state->v4 = XXH32_round(state->v4, XXH_readLE32(p32, endian)); p32++; + state->v4 = XXH32_round(state->v4, XXH_readLE32(p32, endian)); } p += 16-state->memsize; state->memsize = 0; @@ -453,7 +465,10 @@ FORCE_INLINE U32 XXH32_digest_endian (const XXH32_state_t* state, XXH_endianess U32 h32; if (state->large_len) { - h32 = XXH_rotl32(state->v1, 1) + XXH_rotl32(state->v2, 7) + XXH_rotl32(state->v3, 12) + XXH_rotl32(state->v4, 18); + h32 = XXH_rotl32(state->v1, 1) + + XXH_rotl32(state->v2, 7) + + XXH_rotl32(state->v3, 12) + + XXH_rotl32(state->v4, 18); } else { h32 = state->v3 /* == seed */ + PRIME32_5; } @@ -498,7 +513,7 @@ XXH_PUBLIC_API unsigned int XXH32_digest (const XXH32_state_t* state_in) /*! Default XXH result types are basic unsigned 32 and 64 bits. * The canonical representation follows human-readable write convention, aka big-endian (large digits first). * These functions allow transformation of hash result into and from its canonical format. -* This way, hash values can be written into a file or buffer, and remain comparable across different systems and programs. +* This way, hash values can be written into a file or buffer, remaining comparable across different systems. */ XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash) @@ -524,11 +539,14 @@ XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src #ifndef MEM_MODULE # define MEM_MODULE -# if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) +# if !defined (__VMS) \ + && (defined (__cplusplus) \ + || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) # include <stdint.h> typedef uint64_t U64; # else - typedef unsigned long long U64; /* if your compiler doesn't support unsigned long long, replace by another 64-bit type here. Note that xxhash.h will also need to be updated. */ + /* if compiler doesn't support unsigned long long, replace by another 64-bit type */ + typedef unsigned long long U64; # endif #endif @@ -543,7 +561,6 @@ static U64 XXH_read64(const void* memPtr) { return *(const U64*) memPtr; } /* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */ /* currently only defined for gcc and icc */ typedef union { U32 u32; U64 u64; } __attribute__((packed)) unalign64; - static U64 XXH_read64(const void* ptr) { return ((const unalign64*)ptr)->u64; } #else @@ -563,7 +580,7 @@ static U64 XXH_read64(const void* memPtr) #if defined(_MSC_VER) /* Visual Studio */ # define XXH_swap64 _byteswap_uint64 -#elif GCC_VERSION >= 403 +#elif XXH_GCC_VERSION >= 403 # define XXH_swap64 __builtin_bswap64 #else static U64 XXH_swap64 (U64 x) @@ -625,11 +642,11 @@ static U64 XXH64_mergeRound(U64 acc, U64 val) FORCE_INLINE U64 XXH64_endian_align(const void* input, size_t len, U64 seed, XXH_endianess endian, XXH_alignment align) { const BYTE* p = (const BYTE*)input; - const BYTE* const bEnd = p + len; + const BYTE* bEnd = p + len; U64 h64; #define XXH_get64bits(p) XXH_readLE64_align(p, endian, align) -#ifdef XXH_ACCEPT_NULL_INPUT_POINTER +#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1) if (p==NULL) { len=0; bEnd=p=(const BYTE*)(size_t)32; @@ -695,10 +712,10 @@ XXH_PUBLIC_API unsigned long long XXH64 (const void* input, size_t len, unsigned { #if 0 /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ - XXH64_CREATESTATE_STATIC(state); - XXH64_reset(state, seed); - XXH64_update(state, input, len); - return XXH64_digest(state); + XXH64_state_t state; + XXH64_reset(&state, seed); + XXH64_update(&state, input, len); + return XXH64_digest(&state); #else XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN; @@ -737,22 +754,27 @@ XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dstState, const XXH64_state_t XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, unsigned long long seed) { XXH64_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */ - memset(&state, 0, sizeof(state)-8); /* do not write into reserved, for future removal */ + memset(&state, 0, sizeof(state)); state.v1 = seed + PRIME64_1 + PRIME64_2; state.v2 = seed + PRIME64_2; state.v3 = seed + 0; state.v4 = seed - PRIME64_1; - memcpy(statePtr, &state, sizeof(state)); + /* do not write into reserved, planned to be removed in a future version */ + memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved)); return XXH_OK; } -FORCE_INLINE XXH_errorcode XXH64_update_endian (XXH64_state_t* state, const void* input, size_t len, XXH_endianess endian) +FORCE_INLINE +XXH_errorcode XXH64_update_endian (XXH64_state_t* state, const void* input, size_t len, XXH_endianess endian) { const BYTE* p = (const BYTE*)input; const BYTE* const bEnd = p + len; -#ifdef XXH_ACCEPT_NULL_INPUT_POINTER - if (input==NULL) return XXH_ERROR; + if (input==NULL) +#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1) + return XXH_OK; +#else + return XXH_ERROR; #endif state->total_len += len; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/xxhash.h b/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/xxhash.h index 870a6d910c5..13136633843 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/xxhash.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/xxhash.h @@ -102,7 +102,8 @@ typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode; # elif defined(_MSC_VER) # define XXH_PUBLIC_API static __inline # else -# define XXH_PUBLIC_API static /* this version may generate warnings for unused static functions; disable the relevant warning */ + /* this version may generate warnings for unused static functions */ +# define XXH_PUBLIC_API static # endif #else # define XXH_PUBLIC_API /* do nothing */ @@ -149,7 +150,7 @@ regular symbol name will be automatically translated by this header. ***************************************/ #define XXH_VERSION_MAJOR 0 #define XXH_VERSION_MINOR 6 -#define XXH_VERSION_RELEASE 2 +#define XXH_VERSION_RELEASE 4 #define XXH_VERSION_NUMBER (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE) XXH_PUBLIC_API unsigned XXH_versionNumber (void); @@ -157,7 +158,7 @@ XXH_PUBLIC_API unsigned XXH_versionNumber (void); /*-********************************************************************** * 32-bits hash ************************************************************************/ -typedef unsigned int XXH32_hash_t; +typedef unsigned int XXH32_hash_t; /*! XXH32() : Calculate the 32-bits hash of sequence "length" bytes stored at memory address "input". @@ -244,44 +245,44 @@ XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src #ifdef XXH_STATIC_LINKING_ONLY /* ================================================================================================ - This section contains definitions which are not guaranteed to remain stable. + This section contains declarations which are not guaranteed to remain stable. They may change in future versions, becoming incompatible with a different version of the library. - They shall only be used with static linking. - Never use these definitions in association with dynamic linking ! + These declarations should only be used with static linking. + Never use them in association with dynamic linking ! =================================================================================================== */ -/* These definitions are only meant to allow allocation of XXH state - statically, on stack, or in a struct for example. - Do not use members directly. */ - - struct XXH32_state_s { - unsigned total_len_32; - unsigned large_len; - unsigned v1; - unsigned v2; - unsigned v3; - unsigned v4; - unsigned mem32[4]; /* buffer defined as U32 for alignment */ - unsigned memsize; - unsigned reserved; /* never read nor write, will be removed in a future version */ - }; /* typedef'd to XXH32_state_t */ - -#ifndef XXH_NO_LONG_LONG - struct XXH64_state_s { - unsigned long long total_len; - unsigned long long v1; - unsigned long long v2; - unsigned long long v3; - unsigned long long v4; - unsigned long long mem64[4]; /* buffer defined as U64 for alignment */ - unsigned memsize; - unsigned reserved[2]; /* never read nor write, will be removed in a future version */ - }; /* typedef'd to XXH64_state_t */ +/* These definitions are only meant to make possible + static allocation of XXH state, on stack or in a struct for example. + Never use members directly. */ + +struct XXH32_state_s { + unsigned total_len_32; + unsigned large_len; + unsigned v1; + unsigned v2; + unsigned v3; + unsigned v4; + unsigned mem32[4]; /* buffer defined as U32 for alignment */ + unsigned memsize; + unsigned reserved; /* never read nor write, will be removed in a future version */ +}; /* typedef'd to XXH32_state_t */ + +#ifndef XXH_NO_LONG_LONG /* remove 64-bits support */ +struct XXH64_state_s { + unsigned long long total_len; + unsigned long long v1; + unsigned long long v2; + unsigned long long v3; + unsigned long long v4; + unsigned long long mem64[4]; /* buffer defined as U64 for alignment */ + unsigned memsize; + unsigned reserved[2]; /* never read nor write, will be removed in a future version */ +}; /* typedef'd to XXH64_state_t */ #endif -# ifdef XXH_PRIVATE_API -# include "xxhash.c" /* include xxhash function bodies as `static`, for inlining */ -# endif +#ifdef XXH_PRIVATE_API +# include "xxhash.c" /* include xxhash function bodies as `static`, for inlining */ +#endif #endif /* XXH_STATIC_LINKING_ONLY */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/m4/ax_code_coverage.m4 b/Build/source/texk/dvisvgm/dvisvgm-src/m4/ax_code_coverage.m4 index a257469f7fb..6484f033243 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/m4/ax_code_coverage.m4 +++ b/Build/source/texk/dvisvgm/dvisvgm-src/m4/ax_code_coverage.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_code_coverage.html +# https://www.gnu.org/software/autoconf-archive/ax_code_coverage.html # =========================================================================== # # SYNOPSIS @@ -21,7 +21,7 @@ # Test also for gcov program and create GCOV variable that could be # substituted. # -# Note that all optimisation flags in CFLAGS must be disabled when code +# Note that all optimization flags in CFLAGS must be disabled when code # coverage is enabled. # # Usage example: @@ -73,9 +73,9 @@ # General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +# along with this program. If not, see <https://www.gnu.org/licenses/>. -#serial 20 +#serial 25 AC_DEFUN([AX_CODE_COVERAGE],[ dnl Check for --enable-code-coverage @@ -218,9 +218,12 @@ CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT) CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\ $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\ --rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE)) -CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULTS) +CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) CODE_COVERAGE_IGNORE_PATTERN ?= +GITIGNOREFILES ?= +GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY) + code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V)) code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY)) code_coverage_v_lcov_cap_0 = @echo " LCOV --capture"\ @@ -250,9 +253,6 @@ code-coverage-capture-hook: '"$CODE_COVERAGE_RULES_CLEAN"' -GITIGNOREFILES ?= -GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY) - A''M_DISTCHECK_CONFIGURE_FLAGS ?= A''M_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/m4/ax_cxx_compile_stdcxx.m4 b/Build/source/texk/dvisvgm/dvisvgm-src/m4/ax_cxx_compile_stdcxx.m4 index b61fcb6314a..5032bba8091 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/m4/ax_cxx_compile_stdcxx.m4 +++ b/Build/source/texk/dvisvgm/dvisvgm-src/m4/ax_cxx_compile_stdcxx.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html +# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html # =========================================================================== # # SYNOPSIS @@ -40,7 +40,7 @@ # and this notice are preserved. This file is offered as-is, without any # warranty. -#serial 6 +#serial 7 dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro dnl (serial version number 13). diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/m4/libtool.m4 b/Build/source/texk/dvisvgm/dvisvgm-src/m4/libtool.m4 index ee80844b619..a644432f431 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/m4/libtool.m4 +++ b/Build/source/texk/dvisvgm/dvisvgm-src/m4/libtool.m4 @@ -728,6 +728,7 @@ _LT_CONFIG_SAVE_COMMANDS([ cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. @@ -2866,6 +2867,9 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) # before this can be enabled. hardcode_into_libs=yes + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command @@ -2874,7 +2878,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -2886,18 +2890,6 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) dynamic_linker='GNU/Linux ld.so' ;; -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - netbsd*) version_type=sunos need_lib_prefix=no @@ -3557,7 +3549,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; -netbsd* | netbsdelf*-gnu) +netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else @@ -4435,7 +4427,7 @@ m4_if([$1], [CXX], [ ;; esac ;; - netbsd* | netbsdelf*-gnu) + netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise @@ -4947,9 +4939,6 @@ m4_if([$1], [CXX], [ ;; esac ;; - linux* | k*bsd*-gnu | gnu*) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; @@ -5012,9 +5001,6 @@ dnl Note also adjust exclude_expsyms for C++ above. openbsd* | bitrig*) with_gnu_ld=no ;; - linux* | k*bsd*-gnu | gnu*) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes @@ -5269,7 +5255,7 @@ _LT_EOF fi ;; - netbsd* | netbsdelf*-gnu) + netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -5790,7 +5776,6 @@ _LT_EOF if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi - _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' @@ -5812,7 +5797,7 @@ _LT_EOF esac ;; - netbsd* | netbsdelf*-gnu) + netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/AGLTable.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/AGLTable.hpp index fe4e6466ac2..8b8514626b3 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/AGLTable.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/AGLTable.hpp @@ -2,7 +2,7 @@ ** AGLTable.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ - /* The following table provides a compact mapping from PostScript character names * to Unicode points. Instead of using the character names directly it maps the * hash values (xxhash32) of the names to the corresponding code points. @@ -33,7 +32,7 @@ struct HashCodepointPair { uint32_t codepoint; }; -std::array<HashCodepointPair, 4048> hash2unicode = {{ +std::array<HashCodepointPair, 4048> hash2unicode {{ {0x001cf4a9, 0x0118}, // Eogonek {0x003b11fb, 0x055f}, // abbreviationmarkarmenian {0x0050a316, 0x0444}, // afii10086 diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.cpp index 88eeefdb69e..7bd3e73b90b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.cpp @@ -2,7 +2,7 @@ ** BasicDVIReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <algorithm> #include <sstream> #include "BasicDVIReader.hpp" diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.hpp index cf2d8194e04..f3fc8c7d37c 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.hpp @@ -2,7 +2,7 @@ ** BasicDVIReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -47,7 +47,7 @@ class Matrix; class BasicDVIReader : public StreamReader { protected: - typedef void (BasicDVIReader::*CommandHandler)(int); + using CommandHandler = void (BasicDVIReader::*)(int); enum DVIVersion {DVI_NONE=0, DVI_STANDARD=2, DVI_PTEX=3, DVI_XDV5=5, DVI_XDV6=6, DVI_XDV7=7}; const uint8_t OP_SETCHAR0=0, OP_SETCHAR127=127, OP_SET1=128, OP_EOP=140, OP_FNTNUM0=171, OP_FNTNUM63=234, OP_PRE=247, OP_POST=248, OP_POSTPOST=249, OP_DIR=255, DVI_FILL=223; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.cpp index 5a342fbb111..f056409aa75 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.cpp @@ -2,7 +2,7 @@ ** Bezier.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.hpp index a4f227c014f..82275212e22 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.hpp @@ -2,7 +2,7 @@ ** Bezier.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.cpp index d8a7efb39ee..e2873311574 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.cpp @@ -2,7 +2,7 @@ ** BgColorSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <algorithm> #include "BgColorSpecialHandler.hpp" #include "ColorSpecialHandler.hpp" @@ -47,12 +46,6 @@ bool BgColorSpecialHandler::process (const char*, istream &, SpecialActions&) { } -static bool operator < (const pair<unsigned,Color> &pc1, const pair<unsigned,Color> &pc2) { - // order PageColor objects by page number - return pc1.first < pc2.first; -} - - void BgColorSpecialHandler::dviBeginPage (unsigned pageno, SpecialActions &actions) { // Ensure that the background color of the preceeding page is set as the // default background color of the current page because this special affects @@ -69,7 +62,7 @@ void BgColorSpecialHandler::dviBeginPage (unsigned pageno, SpecialActions &actio } -const char** BgColorSpecialHandler::prefixes () const { - static const char *pfx[] = {"background", 0}; +const vector<const char*> BgColorSpecialHandler::prefixes () const { + const vector<const char*> pfx {"background"}; return pfx; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.hpp index d83fb1c7ddc..06572ab1a7e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.hpp @@ -2,7 +2,7 @@ ** BgColorSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -33,13 +33,13 @@ class BgColorSpecialHandler : public SpecialHandler, public DVIBeginPageListener bool process (const char *prefix, std::istream &is, SpecialActions &actions) override; const char* info () const override {return "background color special";} const char* name () const override {return "bgcolor";} - const char** prefixes () const override; + const std::vector<const char*> prefixes () const override; protected: void dviBeginPage (unsigned pageno, SpecialActions &actions) override; private: - typedef std::pair<unsigned,Color> PageColor; // page number and color + using PageColor = std::pair<unsigned,Color>; // page number and color std::vector<PageColor> _pageColors; }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.cpp index 40f5c1b5f8b..25fa2c66125 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.cpp @@ -2,7 +2,7 @@ ** Bitmap.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <algorithm> #include <cstdlib> #include <limits> diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.hpp index 30c29cf5f16..c82e2cdba99 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.hpp @@ -2,7 +2,7 @@ ** Bitmap.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.cpp index ba5d62c9835..1b1f234a604 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.cpp @@ -2,7 +2,7 @@ ** BoundingBox.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <algorithm> #include <sstream> #include "BoundingBox.hpp" @@ -70,25 +69,16 @@ BoundingBox::BoundingBox (const string &boxstr) /** Extracts a sequence of length values from a string like "5cm, 2.4in, 0pt". * @param[in] boxstr whitespace and/or comma separated string of lengths. * @param[out] the extracted lengths */ -void BoundingBox::extractLengths (string boxstr, vector<Length> &lengths) { - boxstr = util::trim(boxstr); - const size_t len = boxstr.length(); - size_t left=0; - string lenstr; - do { - while (left < len && isspace(boxstr[left])) - left++; - size_t right=left; - while (right < len && !isspace(boxstr[right]) && boxstr[right] != ',') - right++; - lenstr = boxstr.substr(left, right-left); - if (!lenstr.empty()) { +vector<Length> BoundingBox::extractLengths (string boxstr) { + vector<Length> lengths; + boxstr = util::replace(boxstr, ",", " "); + boxstr = util::normalize_space(boxstr); + vector<string> lengthStrings = util::split(boxstr, " "); + for (string lenstr : lengthStrings) { + if (!lenstr.empty()) lengths.emplace_back(Length(lenstr)); - if (boxstr[right] == ',') - right++; - left = right; - } - } while (!lenstr.empty() && lengths.size() < 4); + } + return lengths; } @@ -98,8 +88,7 @@ void BoundingBox::extractLengths (string boxstr, vector<Length> &lengths) { * left and (l,l) to the lower right corner. * @param[in] boxstr whitespace and/or comma separated string of lengths. */ void BoundingBox::set (const string &boxstr) { - vector<Length> coord; - extractLengths(boxstr, coord); + vector<Length> coord = extractLengths(boxstr); set(coord); } @@ -272,8 +261,8 @@ ostream& BoundingBox::write (ostream &os) const { } -XMLElementNode* BoundingBox::createSVGRect () const { - XMLElementNode *rect = new XMLElementNode("rect"); +unique_ptr<XMLElementNode> BoundingBox::createSVGRect () const { + auto rect = util::make_unique<XMLElementNode>("rect"); rect->addAttribute("x", minX()); rect->addAttribute("y", minY()); rect->addAttribute("width", width()); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.hpp index 963484ad9d0..2d50dab803a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.hpp @@ -2,7 +2,7 @@ ** BoundingBox.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,6 +21,7 @@ #ifndef BOUNDINGBOX_HPP #define BOUNDINGBOX_HPP +#include <memory> #include <ostream> #include <string> #include <vector> @@ -33,14 +34,12 @@ class Matrix; class XMLElementNode; -struct BoundingBoxException : MessageException -{ +struct BoundingBoxException : MessageException { BoundingBoxException (const std::string &msg) : MessageException(msg) {} }; -class BoundingBox -{ +class BoundingBox { public: BoundingBox (); BoundingBox (double ulxx, double ulyy, double lrxx, double lryy); @@ -54,7 +53,7 @@ class BoundingBox void embed (const DPair &p) {embed(p.x(), p.y());} void embed (const DPair &c, double r); - static void extractLengths (std::string boxstr, std::vector<Length> &lengths); + static std::vector<Length> extractLengths (std::string boxstr); template <typename T> void embed (const Pair<T> &p) {embed(p.x(), p.y());} @@ -79,7 +78,7 @@ class BoundingBox void transform (const Matrix &tm); std::string toSVGViewBox () const; std::ostream& write (std::ostream &os) const; - XMLElementNode* createSVGRect () const; + std::unique_ptr<XMLElementNode> createSVGRect () const; private: double _ulx, _uly; ///< coordinates of upper left vertex (in PS point units) diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.cpp index 45a9a4d4b17..1127fa0531b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.cpp @@ -2,7 +2,7 @@ ** CLCommandLine.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -20,7 +20,7 @@ #include <algorithm> #include <cstring> -#include <map> +#include <unordered_map> #include "CLCommandLine.hpp" #include "version.hpp" @@ -192,7 +192,7 @@ void CommandLine::help (ostream &os, int mode) const { os << '\n'; // compute width of first column of help output - map<Option*, pair<string,string>> linecols; + unordered_map<Option*, pair<string,string>> linecols; size_t col1width=0; for (const OptSectPair &ospair : options()) { string line = ospair.first->helpline(); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.hpp index 549bfa80c32..e4e6788aef6 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.hpp @@ -2,7 +2,7 @@ ** CLCommandLine.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -40,7 +40,7 @@ class CommandLine { const std::vector<std::string>& filenames () const {return _files;} protected: - typedef std::pair<Option*,int> OptSectPair; + using OptSectPair = std::pair<Option*,int>; void parseShortOption (std::istringstream &is, int argc, char **argv, int &argn); void parseLongOption (std::istream &is); virtual std::vector<OptSectPair>& options () const =0; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CLOption.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CLOption.hpp index 3e1efe84043..96bc9a3d13e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CLOption.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CLOption.hpp @@ -2,7 +2,7 @@ ** CLOption.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.cpp index 857d6b0947f..10be33338c0 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.cpp @@ -2,7 +2,7 @@ ** CMap.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <algorithm> #include <sstream> #include "CMap.hpp" diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.hpp index 31adbaac038..86a76e9bfea 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.hpp @@ -2,7 +2,7 @@ ** CMap.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.cpp index 5881a8f8af6..9fcaa484b4e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.cpp @@ -2,7 +2,7 @@ ** CMapManager.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,7 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> +#include <array> #include <sstream> #include "CMap.hpp" #include "CMapManager.hpp" @@ -38,7 +38,7 @@ CMapManager& CMapManager::instance () { /** Loads a cmap and returns the corresponding object. */ CMap* CMapManager::lookup (const string &name) { - CMaps::iterator it = _cmaps.find(name); + auto it = _cmaps.find(name); if (it != _cmaps.end()) return it->second.get(); @@ -49,16 +49,17 @@ CMap* CMapManager::lookup (const string &name) { throw CMapReaderException(oss.str()); } - CMap *cmap=0; + unique_ptr<CMap> cmap_ptr; if (name == "Identity-H") - cmap = new IdentityHCMap; + cmap_ptr = util::make_unique<IdentityHCMap>(); else if (name == "Identity-V") - cmap = new IdentityVCMap; + cmap_ptr = util::make_unique<IdentityVCMap>(); else if (name == "unicode") - cmap = new UnicodeCMap; - if (cmap) { - _cmaps[name].reset(cmap); - return cmap; + cmap_ptr = util::make_unique<UnicodeCMap>(); + if (cmap_ptr) { + CMap *ret = cmap_ptr.get(); + _cmaps[name] = std::move(cmap_ptr); + return ret; } // Load cmap data of file <name> and also process all cmaps referenced by operator "usecmap". // This can lead to a sequence of further calls of lookup(). In order to prevent infinite loops @@ -66,20 +67,22 @@ CMap* CMapManager::lookup (const string &name) { // a sequence of inclusions. _includedCMaps.insert(name); // save name of current cmap being processed _level++; // increase nesting level + CMap *ret=nullptr; try { CMapReader reader; - if (!(cmap = reader.read(name))) { + if (!(cmap_ptr = reader.read(name))) { _level = 1; Message::wstream(true) << "CMap file '" << name << "' not found\n"; } - _cmaps[name].reset(cmap); + ret = cmap_ptr.get(); + _cmaps[name] = std::move(cmap_ptr); } catch (const CMapReaderException &e) { Message::estream(true) << "CMap file " << name << ": " << e.what() << "\n"; } if (--_level == 0) // back again at initial nesting level? _includedCMaps.clear(); // => names of included cmaps are no longer needed - return cmap; + return ret; } @@ -93,12 +96,13 @@ CMap* CMapManager::lookup (const string &name) { * @return base font CMap that maps from CIDs to character codes */ const CMap* CMapManager::findCompatibleBaseFontMap (const PhysicalFont *font, const CMap *cmap, CharMapID &charmapID) { if (!font || !cmap) - return 0; + return nullptr; - static const struct CharMapIDToEncName { + struct CharMapIDToEncName { CharMapID id; const char *encname; - } encodings[] = { + }; + const array<CharMapIDToEncName, 10> encodings {{ {CharMapID::WIN_UCS4, "UCS4"}, {CharMapID::WIN_UCS2, "UCS2"}, {CharMapID::WIN_SHIFTJIS, "90ms-RKSJ"}, @@ -109,28 +113,27 @@ const CMap* CMapManager::findCompatibleBaseFontMap (const PhysicalFont *font, co {CharMapID::MAC_TRADCHINESE, "B5pc"}, {CharMapID::MAC_SIMPLCHINESE, "GBpc-EUC"}, {CharMapID::MAC_KOREAN, "KSCpc-EUC"} - }; + }}; // get IDs of all available charmaps in font vector<CharMapID> charmapIDs; font->collectCharMapIDs(charmapIDs); - const bool is_unicode_map = bool(dynamic_cast<const UnicodeCMap*>(cmap)); - const size_t num_encodings = is_unicode_map ? 2 : sizeof(encodings)/sizeof(CharMapIDToEncName); // try to find a compatible encoding CMap + const bool is_unicode_map = bool(dynamic_cast<const UnicodeCMap*>(cmap)); const string ro = cmap->getROString(); - for (const CharMapIDToEncName *enc=encodings; enc < enc+num_encodings; enc++) { + for (const CharMapIDToEncName &enc : encodings) { for (size_t i=0; i < charmapIDs.size(); i++) { - if (enc->id == charmapIDs[i]) { - string cmapname = ro+"-"+enc->encname; + if (enc.id == charmapIDs[i]) { + string cmapname = ro+"-"+enc.encname; if (is_unicode_map || FileFinder::instance().lookup(cmapname, "cmap", false)) { - charmapID = enc->id; + charmapID = enc.id; return is_unicode_map ? cmap : lookup(cmapname); } } } } - return 0; + return nullptr; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.hpp index 994d5dc2155..1c6f0b7332f 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.hpp @@ -2,7 +2,7 @@ ** CMapManager.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,10 +21,10 @@ #ifndef CMAPMANAGER_HPP #define CMAPMANAGER_HPP -#include <map> #include <memory> -#include <set> #include <string> +#include <unordered_map> +#include <unordered_set> #include "CharMapID.hpp" struct CMap; @@ -34,7 +34,6 @@ class PhysicalFont; class CMapManager { - typedef std::map<std::string, std::unique_ptr<CMap>> CMaps; public: CMap* lookup (const std::string &name); const CMap* findCompatibleBaseFontMap (const PhysicalFont *font, const CMap *cmap, CharMapID &charmapID); @@ -44,9 +43,9 @@ class CMapManager CMapManager () : _level(0) {} private: - CMaps _cmaps; ///< loaded cmaps + std::unordered_map<std::string, std::unique_ptr<CMap>> _cmaps; ///< loaded cmaps + std::unordered_set<std::string> _includedCMaps; ///< names of cmaps loaded by "usecmap" int _level; ///< current inclusion depth; >0 if a cmap loaded by "usecmap" is being processed - std::set<std::string> _includedCMaps; ///< names of cmaps loaded by "usecmap" }; #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.cpp index 642e0e3a595..e736e1fdd98 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.cpp @@ -2,7 +2,7 @@ ** CMapReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <algorithm> #include <array> #include <fstream> @@ -28,26 +27,26 @@ #include "CMapReader.hpp" #include "FileFinder.hpp" #include "InputReader.hpp" +#include "utility.hpp" using namespace std; -CMapReader::CMapReader () : _cmap(0), _inCMap(false) -{ +CMapReader::CMapReader () : _inCMap(false) { } /** Reads a cmap file and returns the corresponding CMap object. * @param fname[in] name/path of cmap file * @return CMap object representing the read data, or 0 if file could not be read */ -CMap* CMapReader::read (const string &fname) { - if (const char *path = FileFinder::instance().lookup(fname.c_str(), "cmap", false)) { +unique_ptr<CMap> CMapReader::read (const string &fname) { + if (const char *path = FileFinder::instance().lookup(fname, "cmap", false)) { ifstream ifs(path); if (ifs) return read(ifs, fname); } _tokens.clear(); - return 0; + return unique_ptr<CMap>(); } @@ -55,9 +54,9 @@ CMap* CMapReader::read (const string &fname) { * @param is[in] cmap data input stream * @param is[in] name name of CMap to be read * @return CMap object representing the read data, or 0 if file could not be read */ -CMap* CMapReader::read (std::istream& is, const string &name) { +unique_ptr<CMap> CMapReader::read (std::istream& is, const string &name) { _tokens.clear(); - _cmap = new SegmentedCMap(name); + _cmap = util::make_unique<SegmentedCMap>(name); StreamInputReader ir(is); try { while (ir) { @@ -75,11 +74,10 @@ CMap* CMapReader::read (std::istream& is, const string &name) { } } catch (CMapReaderException &e) { - delete _cmap; - _cmap = 0; + _cmap.release(); throw; } - return _cmap; + return std::move(_cmap); } @@ -91,7 +89,7 @@ void CMapReader::executeOperator (const string &opname, InputReader &ir) { const char *name; void (CMapReader::*handler)(InputReader&); }; - array<Operator, 6> operators = {{ + constexpr array<Operator, 6> operators {{ {"beginbfchar", &CMapReader::op_beginbfchar}, {"beginbfrange", &CMapReader::op_beginbfrange}, {"begincidrange", &CMapReader::op_begincidrange}, diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.hpp index 7c6662d2b17..3d199f6bbf0 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.hpp @@ -2,7 +2,7 @@ ** CMapReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,6 +23,7 @@ #include <cstdlib> #include <istream> +#include <memory> #include <string> #include <vector> #include "MessageException.hpp" @@ -31,10 +32,8 @@ struct CMap; class InputReader; -class CMapReader -{ - class Token - { +class CMapReader { + class Token { public: enum class Type {UNKNOWN, END, DELIM, NUMBER, STRING, NAME, OPERATOR}; @@ -52,8 +51,8 @@ class CMapReader public: CMapReader (); - CMap* read (const std::string &fname); - CMap* read (std::istream &is, const std::string &name); + std::unique_ptr<CMap> read (const std::string &fname); + std::unique_ptr<CMap> read (std::istream &is, const std::string &name); protected: Token popToken () {Token t=_tokens.back(); _tokens.pop_back(); return t;} @@ -66,15 +65,14 @@ class CMapReader void op_usecmap (InputReader &ir); private: - SegmentedCMap *_cmap; ///< CMap being read - std::vector<Token> _tokens; ///< stack of tokens to be processed - bool _inCMap; ///< operator begincmap has been executed + std::unique_ptr<SegmentedCMap> _cmap; ///< pointer to CMap being read + std::vector<Token> _tokens; ///< stack of tokens to be processed + bool _inCMap; ///< operator begincmap has been executed }; -struct CMapReaderException : public MessageException -{ +struct CMapReaderException : public MessageException { CMapReaderException (const std::string &msg) : MessageException(msg) {} }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CRC32.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CRC32.cpp index 1a4b56eb740..f530cedda03 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CRC32.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CRC32.cpp @@ -2,7 +2,7 @@ ** CRC32.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cstring> #include "CRC32.hpp" diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CRC32.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CRC32.hpp index f91de71a41b..8ecfe5bb226 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CRC32.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CRC32.hpp @@ -2,7 +2,7 @@ ** CRC32.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -24,10 +24,10 @@ #include <cstdlib> #include <istream> -class CRC32 -{ +class CRC32 { public: CRC32 (); + CRC32 (const CRC32 &crc32) =delete; void update (const uint8_t *bytes, size_t len); void update (uint32_t n, int bytes=4); void update (const char *str); @@ -38,9 +38,6 @@ class CRC32 static uint32_t compute (const char *str); static uint32_t compute (std::istream &is); - protected: - CRC32 (const CRC32 &crc32) {} - private: uint32_t _crc32; uint32_t _tab[256]; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.cpp index 493751df0a4..b4e90eacec2 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.cpp @@ -2,7 +2,7 @@ ** Calculator.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cmath> #include <sstream> #include <stdexcept> @@ -178,7 +177,7 @@ char Calculator::lex (istream &is) { * @param[in] name name of variable * @return assigned value */ double Calculator::getVariable (const string &name) const { - map<string,double>::const_iterator it = _variables.find(name); + auto it = _variables.find(name); if (it == _variables.end()) throw CalculatorException("undefined variable '" + name + "'"); return it->second; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.hpp index 2c117bb0456..5c0df985b20 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.hpp @@ -2,7 +2,7 @@ ** Calculator.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,8 +22,8 @@ #define CALCULATOR_HPP #include <istream> -#include <map> #include <string> +#include <unordered_map> #include "MessageException.hpp" @@ -49,7 +49,7 @@ class Calculator char lookAhead (std::istream &is); private: - std::map<std::string,double> _variables; + std::unordered_map<std::string,double> _variables; double _numValue; std::string _strValue; }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.cpp index 5084081d0c9..25a973fb15d 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.cpp @@ -2,7 +2,7 @@ ** CharMapID.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.hpp index ca1d47be9b7..1e3fc2142a9 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.hpp @@ -2,7 +2,7 @@ ** CharMapID.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Character.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Character.hpp index ebb4c3476cb..c7dcbbcb1db 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Character.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Character.hpp @@ -2,7 +2,7 @@ ** Character.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.cpp index 948aa8adfb4..b0a3dcd8608 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.cpp @@ -2,7 +2,7 @@ ** Color.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -73,7 +73,7 @@ bool Color::setPSName (string name, bool case_sensitive) { const uint32_t rgb; }; // converted color constants from color.pro - static const array<ColorConstant, 68> constants = {{ + static const array<ColorConstant, 68> constants {{ {"Apricot", 0xFFAD7A}, {"Aquamarine", 0x2DFFB2}, {"Bittersweet", 0xC10200}, @@ -156,11 +156,9 @@ bool Color::setPSName (string name, bool case_sensitive) { } } else { - util::tolower(name); + name = util::tolower(name); auto it = find_if(constants.begin(), constants.end(), [&](const ColorConstant &cc) { - string cmpname = cc.name; - util::tolower(cmpname); - return name == cmpname; + return name == util::tolower(cc.name); }); if (it != constants.end()) { _rgb = it->rgb; @@ -210,12 +208,16 @@ void Color::set (ColorSpace colorSpace, VectorIterator<double> &it) { Color Color::operator *= (double c) { - uint32_t rgb=0; - for (int i=0; i < 3; i++) { - rgb |= uint32_t(floor((_rgb & 0xff)*c+0.5)) << (8*i); - _rgb >>= 8; + if (abs(c) < 0.001) + _rgb &= 0xff000000; + else if (abs(c-trunc(c)) < 0.999) { + uint32_t rgb=0; + for (int i=0; i < 3; i++) { + rgb |= uint32_t((_rgb & 0xff)*c+0.5) << (8*i); + _rgb >>= 8; + } + _rgb = rgb; } - _rgb = rgb; return *this; } @@ -241,7 +243,7 @@ string Color::svgColorString (bool rgbonly) const { uint32_t rgb; const char *name; }; - static const array<ColorName, 138> colornames = {{ + static const array<ColorName, 138> colornames {{ {0x000000, "black"}, {0x000080, "navy"}, {0x00008b, "darkblue"}, @@ -552,7 +554,7 @@ void Color::getLab (std::valarray<double> &lab) const { } -static inline double sqr (double x) {return x*x;} +// static inline double sqr (double x) {return x*x;} static inline double cube (double x) {return x*x*x;} void Color::Lab2XYZ (const valarray<double> &lab, valarray<double> &xyz) { diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.hpp index 035c36e6b6b..95187e0dc53 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.hpp @@ -2,7 +2,7 @@ ** Color.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -47,9 +47,12 @@ class Color Color (double r, double g, double b) {setRGB(r,g,b);} Color (const std::valarray<double> &rgb) {setRGB(rgb);} Color (const std::string &name); - operator uint32_t () const {return _rgb;} + explicit operator uint32_t () const {return _rgb;} bool operator == (const Color &c) const {return _rgb == c._rgb;} bool operator != (const Color &c) const {return _rgb != c._rgb;} + bool operator < (const Color &c) const {return _rgb < c._rgb;} + Color operator *= (double c); + Color operator * (double c) const {return Color(*this) *= c;} void setRGB (uint8_t r, uint8_t g, uint8_t b) {_rgb = (r << 16) | (g << 8) | b;} void setRGB (double r, double g, double b); void setRGB (const std::valarray<double> &rgb) {setRGB(rgb[0], rgb[1], rgb[2]);} @@ -74,7 +77,6 @@ class Color void getXYZ (double &x, double &y, double &z) const; void getLab (double &l, double &a, double &b) const; void getLab (std::valarray<double> &lab) const; - Color operator *= (double c); double deltaE (const Color &c) const; std::string rgbString () const; std::string svgColorString (bool rgbonly) const; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.cpp index 1bc7067c23a..ffca4aa780d 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.cpp @@ -2,7 +2,7 @@ ** ColorSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cstring> #include <sstream> #include <vector> @@ -114,8 +113,8 @@ bool ColorSpecialHandler::process (const char *, istream &is, SpecialActions &ac } -const char** ColorSpecialHandler::prefixes () const { - static const char *pfx[] = {"color", 0}; +const vector<const char*> ColorSpecialHandler::prefixes () const { + const vector<const char*> pfx {"color"}; return pfx; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.hpp index 079618f73ca..e36901564b2 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.hpp @@ -2,7 +2,7 @@ ** ColorSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -36,7 +36,7 @@ class ColorSpecialHandler : public SpecialHandler static Color readColor (const std::string &model, std::istream &is); const char* name () const override {return "color";} const char* info () const override {return "complete support of color specials";} - const char** prefixes () const override; + const std::vector<const char*> prefixes () const override; private: std::stack<Color> _colorStack; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/CommandLine.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/CommandLine.hpp index f412aa2927d..d742d6a877d 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/CommandLine.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/CommandLine.hpp @@ -2,7 +2,7 @@ // It is part of the dvisvgm package and published under the terms // of the GNU General Public License version 3, or (at your option) any later version. // See file COPYING for further details. -// Copyright (C) 2016-2017 Martin Gieseking <martin.gieseking@uos.de> +// Copyright (C) 2016-2018 Martin Gieseking <martin.gieseking@uos.de> #ifndef COMMANDLINE_HPP #define COMMANDLINE_HPP @@ -21,7 +21,7 @@ class CommandLine : public CL::CommandLine CommandLine () : CL::CommandLine( "This program converts DVI files, as created by TeX/LaTeX, to\nthe XML-based scalable vector graphics format SVG.", "[options] dvifile\n-E [options] epsfile", - "Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de>" + "Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de>" ) {} CommandLine (int argc, char **argv) : CommandLine() { @@ -75,7 +75,7 @@ class CommandLine : public CL::CommandLine const char* section (size_t n) const override {return n < _sections.size() ? _sections[n] : nullptr;} private: - std::array<const char*, 5> _sections = {{ + std::array<const char*, 5> _sections {{ "Input options", "SVG output options", "SVG transformations", diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.cpp index b0bd0bd1f49..e00d0894034 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.cpp @@ -2,7 +2,7 @@ ** DLLoader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,43 +18,42 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include "DLLoader.hpp" +using namespace std; -DLLoader::DLLoader (const char *dlname) : _handle(0) -{ - if (dlname && *dlname) { -#ifdef _WIN32 - _handle = LoadLibrary(dlname); -#else - _handle = dlopen(dlname, RTLD_LAZY); -#endif - } + +/** Creates a new DLLoader object and tries to load the given dynamic/shared library. + * @param[in] dlname name of library to load */ +DLLoader::DLLoader (const string &dlname) : _handle(nullptr) { + loadLibrary(dlname); } -DLLoader::~DLLoader () { - if (_handle) { +/** Releases the currently assigned dynamic/shared library and loads another one. + * @param[in] dlname name of library to load */ +bool DLLoader::loadLibrary (const string &dlname) { + closeLibrary(); + if (!dlname.empty()) { #ifdef _WIN32 - FreeLibrary(_handle); + _handle = LoadLibrary(dlname.c_str()); #else - dlclose(_handle); + _handle = dlopen(dlname.c_str(), RTLD_LAZY); #endif } + return _handle != nullptr; } -/** Loads a function or variable from the dynamic/shared library. - * @param[in] name name of function/variable to load - * @return pointer to loaded symbol, or 0 if the symbol could not be loaded */ -void* DLLoader::loadSymbol (const char *name) { +/** Releases the library currently assigned to the DLLoader object. */ +void DLLoader::closeLibrary () { if (_handle) { #ifdef _WIN32 - return (void*)GetProcAddress(_handle, name); + FreeLibrary(_handle); #else - return dlsym(_handle, name); + dlclose(_handle); #endif + _handle = nullptr; } - return 0; } + diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.hpp index 6cedd193abc..1dc71393809 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.hpp @@ -2,7 +2,7 @@ ** DLLoader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,23 +21,27 @@ #ifndef DLLOADER_HPP #define DLLOADER_HPP +#include <string> + #ifdef _WIN32 - #include <windows.h> + #include "windows.hpp" #else #include <dlfcn.h> #endif -class DLLoader -{ +class DLLoader { public: - DLLoader (const char *dlname); - virtual ~DLLoader (); - bool loaded () const {return _handle != 0;} + DLLoader () =delete; + DLLoader (const std::string &dlname); + DLLoader (DLLoader &&loader) =default; + virtual ~DLLoader () {closeLibrary();} + bool loaded () const {return _handle != nullptr;} + bool loadLibrary (const std::string &dlname); protected: - DLLoader () : _handle(0) {} - void* loadSymbol (const char *name); + template <typename T> T loadSymbol (const char *name) const; + void closeLibrary (); private: #ifdef _WIN32 @@ -47,4 +51,22 @@ class DLLoader #endif }; + +/** Loads a function or variable from the dynamic/shared library. + * @param[in] name name of function/variable to load + * @return pointer to loaded symbol, or 0 if the symbol could not be loaded */ +template <typename T> +T DLLoader::loadSymbol (const char *name) const { + if (_handle) { +#ifdef _WIN32 + return reinterpret_cast<T>(GetProcAddress(_handle, name)); +#else + return reinterpret_cast<T>(dlsym(_handle, name)); +#endif + } + return nullptr; +} + +#define LOAD_SYMBOL(sym) loadSymbol<decltype(&sym)>(#sym) + #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIActions.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIActions.hpp index fa3228d1473..8361e7dccce 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIActions.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIActions.hpp @@ -2,7 +2,7 @@ ** DVIActions.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -27,10 +27,9 @@ class BoundingBox; class Font; - -struct DVIActions -{ +struct DVIActions{ virtual ~DVIActions () =default; + virtual void reset () {} virtual void setChar (double x, double y, unsigned c, bool vertical, const Font &f) {} virtual void setRule (double x, double y, double height, double width) {} virtual void setTextOrientation (bool vertical) {} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.cpp index 4c94d3edf7a..ff0237109f0 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.cpp @@ -2,7 +2,7 @@ ** DVIReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <algorithm> #include <cstdarg> #include <fstream> diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.hpp index cd66c0e5681..e46748e664c 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.hpp @@ -2,7 +2,7 @@ ** DVIReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -34,14 +34,12 @@ class FontStyle; class NativeFont; class VirtualFont; -class DVIReader : public BasicDVIReader, public VFActions -{ +class DVIReader : public BasicDVIReader, public VFActions { protected: enum class WritingMode {LR=0, TB=1, BT=3}; enum class SetFontMode {SF_SHORT, SF_LONG, VF_ENTER, VF_LEAVE}; - struct DVIState - { + struct DVIState { double h, v; ///< horizontal and vertical cursor position double x, w, y, z; ///< additional registers to store horizontal (x, w) and vertical (y, z) positions WritingMode d; ///< direction: 0: horizontal, 1: vertical(top->bottom), 3: vertical (bottom->top) diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.cpp index 64a0e183b4a..d527ab2553d 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.cpp @@ -2,7 +2,7 @@ ** DVIToSVG.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -37,6 +37,7 @@ #include "PreScanDVIReader.hpp" #include "SignalHandler.hpp" #include "SVGOutput.hpp" +#include "utility.hpp" #include "version.hpp" /////////////////////////////////// @@ -49,13 +50,13 @@ #include "HtmlSpecialHandler.hpp" #include "PapersizeSpecialHandler.hpp" #include "PdfSpecialHandler.hpp" +#include "TpicSpecialHandler.hpp" #ifndef HAVE_LIBGS #include "NoPsSpecialHandler.hpp" #endif #ifndef DISABLE_GS #include "PsSpecialHandler.hpp" #endif -#include "TpicSpecialHandler.hpp" /////////////////////////////////// @@ -75,12 +76,7 @@ DVIToSVG::DVIToSVG (istream &is, SVGOutputBase &out) : DVIReader(is), _out(out) _pageByte = 0; _prevXPos = _prevYPos = numeric_limits<double>::min(); _prevWritingMode = WritingMode::LR; - _actions = new DVIToSVGActions(*this, _svg); -} - - -DVIToSVG::~DVIToSVG () { - delete _actions; + _actions = util::make_unique<DVIToSVGActions>(*this, _svg); } @@ -112,7 +108,7 @@ void DVIToSVG::convert (unsigned first, unsigned last, pair<int,int> *pageinfo) else Message::wstream(true) << "failed to write output to " << fname << '\n'; _svg.reset(); - static_cast<DVIToSVGActions*>(_actions)->reset(); + _actions->reset(); } if (pageinfo) { pageinfo->first = last-first+1; @@ -130,7 +126,7 @@ void DVIToSVG::convert (const string &rangestr, pair<int,int> *pageinfo) { throw MessageException("invalid page range format"); Message::mstream(false, Message::MC_PAGE_NUMBER) << "pre-processing DVI file (format version " << getDVIVersion() << ")\n"; - if (DVIToSVGActions *actions = dynamic_cast<DVIToSVGActions*>(_actions)) { + if (DVIToSVGActions *actions = dynamic_cast<DVIToSVGActions*>(_actions.get())) { PreScanDVIReader prescan(getInputStream(), actions); actions->setDVIReader(prescan); prescan.executeAllPages(); @@ -171,13 +167,13 @@ int DVIToSVG::executeCommand () { * @param[in] pageno physical page number (1 = first page) * @param[in] c contains information about the page (page number etc.) */ void DVIToSVG::enterBeginPage (unsigned pageno, const vector<int32_t> &c) { - if (dynamic_cast<DVIToSVGActions*>(_actions)) { + if (dynamic_cast<DVIToSVGActions*>(_actions.get())) { Message::mstream().indent(0); Message::mstream(false, Message::MC_PAGE_NUMBER) << "processing page " << pageno; if (pageno != (unsigned)c[0]) // Does page number shown on page differ from physical page number? Message::mstream(false) << " [" << c[0] << ']'; Message::mstream().indent(1); - _svg.appendToDoc(new XMLCommentNode(" This file was generated by dvisvgm " + string(PROGRAM_VERSION) + " ")); + _svg.appendToDoc(util::make_unique<XMLCommentNode>(" This file was generated by dvisvgm " + string(PROGRAM_VERSION) + " ")); } } @@ -185,7 +181,7 @@ void DVIToSVG::enterBeginPage (unsigned pageno, const vector<int32_t> &c) { /** This template method is called by DVIReader::cmdEop() after * executing the EOP actions. */ void DVIToSVG::leaveEndPage (unsigned) { - if (!dynamic_cast<DVIToSVGActions*>(_actions)) + if (!dynamic_cast<DVIToSVGActions*>(_actions.get())) return; // set bounding box and apply page transformations @@ -212,13 +208,12 @@ void DVIToSVG::leaveEndPage (unsigned) { // convention: DVI position (0,0) equals (1in, 1in) relative // to the upper left vertex of the page (see DVI specification) const double border = -72; - bbox = BoundingBox(border, border, size.widthInBP()+border, size.heightInBP()+border); + bbox = BoundingBox(border, border, size.width().bp()+border, size.height().bp()+border); } } else { // set/modify bounding box by explicitly given values try { - vector<Length> lengths; - BoundingBox::extractLengths(_bboxFormatString, lengths); + vector<Length> lengths = BoundingBox::extractLengths(_bboxFormatString); if (lengths.size() == 1 || lengths.size() == 2) { // relative box size? // apply the page transformation and adjust the bbox afterwards Matrix matrix; @@ -269,7 +264,7 @@ void DVIToSVG::getPageTransformation(Matrix &matrix) const { } -static void collect_chars (map<const Font*, set<int>> &fontmap) { +static void collect_chars (unordered_map<const Font*, set<int>> &fontmap) { for (const auto &entry : fontmap) { if (entry.first->uniqueFont() != entry.first) { for (int c : entry.second) @@ -282,18 +277,16 @@ static void collect_chars (map<const Font*, set<int>> &fontmap) { /** Adds the font information to the SVG tree. * @param[in] svgElement the font nodes are added to this node */ void DVIToSVG::embedFonts (XMLElementNode *svgElement) { - if (!svgElement) - return; - if (!_actions) // no dvi actions => no chars written => no fonts to embed + if (!svgElement || !_actions) // no dvi actions => no chars written => no fonts to embed return; - const DVIToSVGActions *svgActions = static_cast<DVIToSVGActions*>(_actions); - map<const Font*,set<int>> &usedCharsMap = svgActions->getUsedChars(); + const DVIToSVGActions *svgActions = static_cast<DVIToSVGActions*>(_actions.get()); + auto &usedCharsMap = svgActions->getUsedChars(); collect_chars(usedCharsMap); GlyphTracerMessages messages; - set<const Font*> tracedFonts; // collect unique fonts already traced + unordered_set<const Font*> tracedFonts; // collect unique fonts already traced for (const auto &fontchar : usedCharsMap) { const Font *font = fontchar.first; if (const PhysicalFont *ph_font = dynamic_cast<const PhysicalFont*>(font)) { @@ -324,32 +317,28 @@ void DVIToSVG::embedFonts (XMLElementNode *svgElement) { * @param[in] pswarning if true, shows warning about disabled PS support * @return the SpecialManager that handles special statements */ void DVIToSVG::setProcessSpecials (const char *ignorelist, bool pswarning) { - if (ignorelist && strcmp(ignorelist, "*") == 0) { // ignore all specials? + if (ignorelist && strcmp(ignorelist, "*") == 0) // ignore all specials? SpecialManager::instance().unregisterHandlers(); - } else { // add special handlers - SpecialHandler *handlers[] = { - 0, // placeholder for PsSpecialHandler - new BgColorSpecialHandler, // handles background color special - new ColorSpecialHandler, // handles color specials - new DvisvgmSpecialHandler, // handles raw SVG embeddings - new EmSpecialHandler, // handles emTeX specials - new HtmlSpecialHandler, // handles hyperref specials - new PapersizeSpecialHandler, // handles papersize special - new PdfSpecialHandler, // handles pdf specials - new TpicSpecialHandler, // handles tpic specials - 0 - }; - SpecialHandler **p = handlers; + vector<unique_ptr<SpecialHandler>> handlers; + handlers.emplace_back(util::make_unique<BgColorSpecialHandler>()); // handles background color special + handlers.emplace_back(util::make_unique<ColorSpecialHandler>()); // handles color specials + handlers.emplace_back(util::make_unique<DvisvgmSpecialHandler>()); // handles raw SVG embeddings + handlers.emplace_back(util::make_unique<EmSpecialHandler>()); // handles emTeX specials + handlers.emplace_back(util::make_unique<HtmlSpecialHandler>()); // handles hyperref specials + handlers.emplace_back(util::make_unique<PapersizeSpecialHandler>()); // handles papersize special + handlers.emplace_back(util::make_unique<PdfSpecialHandler>()); // handles pdf specials + handlers.emplace_back(util::make_unique<TpicSpecialHandler>()); // handles tpic specials #ifndef DISABLE_GS if (Ghostscript().available()) - *p = new PsSpecialHandler; + handlers.emplace_back(util::make_unique<PsSpecialHandler>()); // handles PostScript specials else #endif { #ifndef HAVE_LIBGS - *p = new NoPsSpecialHandler; // dummy PS special handler that only prints warning messages + // dummy PS special handler that only prints warning messages + handlers.emplace_back(util::make_unique<NoPsSpecialHandler>()); if (pswarning) { #ifdef DISABLE_GS Message::wstream() << "processing of PostScript specials has been disabled permanently\n"; @@ -360,7 +349,7 @@ void DVIToSVG::setProcessSpecials (const char *ignorelist, bool pswarning) { #endif } SpecialManager::instance().unregisterHandlers(); - SpecialManager::instance().registerHandlers(p, ignorelist); + SpecialManager::instance().registerHandlers(handlers, ignorelist); } } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.hpp index 6e1aafd699e..5385188f370 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.hpp @@ -2,7 +2,7 @@ ** DVIToSVG.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -30,11 +30,9 @@ struct DVIActions; class Matrix; struct SVGOutputBase; -class DVIToSVG : public DVIReader -{ +class DVIToSVG : public DVIReader { public: explicit DVIToSVG (std::istream &is, SVGOutputBase &out); - ~DVIToSVG (); void convert (const std::string &range, std::pair<int,int> *pageinfo=0); void setPageSize (const std::string &format) {_bboxFormatString = format;} void setPageTransformation (const std::string &cmds) {_transCmds = cmds;} @@ -54,7 +52,7 @@ class DVIToSVG : public DVIReader static char TRACE_MODE; protected: - DVIToSVG (const DVIToSVG&); + DVIToSVG (const DVIToSVG&) =delete; void convert (unsigned firstPage, unsigned lastPage, std::pair<int,int> *pageinfo=0); int executeCommand () override; void enterBeginPage (unsigned pageno, const std::vector<int32_t> &c); @@ -82,7 +80,7 @@ class DVIToSVG : public DVIReader private: SVGTree _svg; SVGOutputBase &_out; - DVIActions *_actions; + std::unique_ptr<DVIActions> _actions; std::string _bboxFormatString; ///< bounding box size/format set by the user std::string _transCmds; ///< page transformation commands set by the user double _pageHeight, _pageWidth; ///< global page height and width stored in the postamble diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.cpp index c1f35ef0115..ef377e7266b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.cpp @@ -2,7 +2,7 @@ ** DVIToSVGActions.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -158,7 +158,7 @@ void DVIToSVGActions::setChar (double x, double y, unsigned c, bool vertical, co * @param[in] width length of the horizontal edges */ void DVIToSVGActions::setRule (double x, double y, double height, double width) { // (x,y) is the lower left corner of the rectangle - XMLElementNode *rect = new XMLElementNode("rect"); + auto rect = util::make_unique<XMLElementNode>("rect"); rect->addAttribute("x", x); rect->addAttribute("y", y-height); rect->addAttribute("height", height); @@ -167,7 +167,7 @@ void DVIToSVGActions::setRule (double x, double y, double height, double width) rect->addAttribute("transform", getMatrix().getSVG()); if (getColor() != Color::BLACK) rect->addAttribute("fill", _svg.getColor().svgColorString()); - _svg.appendToPage(rect); + _svg.appendToPage(std::move(rect)); // update bounding box BoundingBox bb(x, y-height, x+width, y); @@ -225,13 +225,13 @@ void DVIToSVGActions::endPage (unsigned pageno) { _svg.transformPage(matrix); if (_bgcolor != Color::TRANSPARENT) { // create a rectangle filled with the background color - XMLElementNode *r = new XMLElementNode("rect"); - r->addAttribute("x", _bbox.minX()); - r->addAttribute("y", _bbox.minY()); - r->addAttribute("width", _bbox.width()); - r->addAttribute("height", _bbox.height()); - r->addAttribute("fill", _bgcolor.svgColorString()); - _svg.prependToPage(r); + auto rect = util::make_unique<XMLElementNode>("rect"); + rect->addAttribute("x", _bbox.minX()); + rect->addAttribute("y", _bbox.minY()); + rect->addAttribute("width", _bbox.width()); + rect->addAttribute("height", _bbox.height()); + rect->addAttribute("fill", _bgcolor.svgColorString()); + _svg.prependToPage(std::move(rect)); } } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.hpp index 613315346e1..0712f6cd1e0 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.hpp @@ -2,7 +2,7 @@ ** DVIToSVGActions.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,8 +21,8 @@ #ifndef DVITOSVGACTIONS_HPP #define DVITOSVGACTIONS_HPP -#include <map> -#include <set> +#include <unordered_map> +#include <unordered_set> #include "BoundingBox.hpp" #include "DVIActions.hpp" #include "Matrix.hpp" @@ -36,15 +36,14 @@ class FileFinder; class Font; class XMLNode; -class DVIToSVGActions : public DVIActions, public SpecialActions -{ - typedef std::map<const Font*, std::set<int>> CharMap; - typedef std::set<const Font*> FontSet; - typedef std::map<std::string,BoundingBox> BoxMap; +class DVIToSVGActions : public DVIActions, public SpecialActions { + using CharMap = std::unordered_map<const Font*, std::set<int>>; + using FontSet = std::unordered_set<const Font*>; + using BoxMap = std::unordered_map<std::string,BoundingBox>; public: DVIToSVGActions (DVIToSVG &dvisvg, SVGTree &svg); - void reset (); + void reset () override; void setChar (double x, double y, unsigned c, bool vertical, const Font &f) override; void setRule (double x, double y, double height, double width) override; void setBgColor (const Color &color) override; @@ -55,10 +54,10 @@ class DVIToSVGActions : public DVIActions, public SpecialActions Color getColor () const override {return _svg.getColor();} int getDVIStackDepth() const override {return _dvireader->stackDepth();} unsigned getCurrentPageNumber() const override {return _dvireader->currentPageNumber();} - void appendToPage (XMLNode *node) override {_svg.appendToPage(node);} - void appendToDefs (XMLNode *node) override {_svg.appendToDefs(node);} - void prependToPage (XMLNode *node) override {_svg.prependToPage(node);} - void pushContextElement (XMLElementNode *node) override {_svg.pushContextElement(node);} + void appendToPage(std::unique_ptr<XMLNode> &&node) override {_svg.appendToPage(std::move(node));} + void appendToDefs(std::unique_ptr<XMLNode> &&node) override {_svg.appendToDefs(std::move(node));} + void prependToPage(std::unique_ptr<XMLNode> &&node) override {_svg.prependToPage(std::move(node));} + void pushContextElement (std::unique_ptr<XMLElementNode> &&node) override {_svg.pushContextElement(std::move(node));} void popContextElement () override {_svg.popContextElement();} void setTextOrientation(bool vertical) override {_svg.setVertical(vertical);} void moveToX (double x) override; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/DependencyGraph.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/DependencyGraph.hpp index 52dd46ac17b..ba8fccd932d 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/DependencyGraph.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/DependencyGraph.hpp @@ -2,7 +2,7 @@ ** DependencyGraph.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,73 +22,86 @@ #define DEPENDENCYGRAPH_HPP #include <map> +#include <memory> +#include <set> #include <vector> +#include "utility.hpp" template <typename T> -class DependencyGraph -{ +class DependencyGraph { struct GraphNode { - typedef typename std::vector<GraphNode*> Dependees; - - GraphNode (const T &k) : key(k), dependent(0) {} + GraphNode (const T &k) : key(k), dependent() {} void addDependee (GraphNode *node) { if (node) { node->dependent = this; - dependees.push_back(node); + dependees.insert(node); } } - void deleteDependentsAndSelf () { - if (dependent) - dependent->deleteDependentsAndSelf(); - for (typename Dependees::iterator it = dependees.begin(); it != dependees.end(); ++it) - (*it)->dependent = 0; - delete this; + void unlinkDependees () { + for (GraphNode *dependee : dependees) + dependee->dependent = nullptr; + dependees.clear(); + } + + void unlinkDependee (GraphNode *dependee) { + auto it = dependees.find(dependee); + if (it != dependees.end()) { + (*it)->dependent = nullptr; + dependees.erase(it); + } } T key; GraphNode *dependent; - Dependees dependees; + std::set<GraphNode*> dependees; }; - typedef std::map<T, GraphNode*> NodeMap; + using NodeMap = std::map<T, std::unique_ptr<GraphNode>>; public: - ~DependencyGraph() { - for (typename NodeMap::iterator it=_nodeMap.begin(); it != _nodeMap.end(); ++it) - delete it->second; - } - + /** Inserts a new isolated node into the dependency graph. */ void insert (const T &key) { if (!contains(key)) - _nodeMap[key] = new GraphNode(key); + _nodeMap.emplace(key, util::make_unique<GraphNode>(key)); } - void insert (const T &depKey, const T &key) { - if (contains(key)) - return; - typename NodeMap::iterator it = _nodeMap.find(depKey); - if (it != _nodeMap.end()) { - GraphNode *node = new GraphNode(key); - it->second->addDependee(node); - _nodeMap[key] = node; + /** Inserts a new node to the graph and adds a dependency on an existing one to it. + * @param[in] key ID of new node to insert + * @param[in] dependantKey ID of node the new node should depend on */ + void insert (const T &dependentKey, const T &key) { + if (!contains(key)) { + auto dependentIter = _nodeMap.find(dependentKey); + if (dependentIter != _nodeMap.end()) { + auto node = util::make_unique<GraphNode>(key); + dependentIter->second->addDependee(node.get()); + _nodeMap.emplace(key, std::move(node)); + } } } + /** Removes a node and all its dependents from the graph. */ void removeDependencyPath (const T &key) { - typename NodeMap::iterator it = _nodeMap.find(key); + auto it = _nodeMap.find(key); if (it != _nodeMap.end()) { - GraphNode *startNode = it->second; - for (GraphNode *node=startNode; node; node=node->dependent) + for (GraphNode *node = it->second.get(); node;) { + GraphNode *dependent = node->dependent; + node->unlinkDependees(); + if (dependent) + dependent->unlinkDependee(node); _nodeMap.erase(node->key); - startNode->deleteDependentsAndSelf(); + node = dependent; + } } } - void getKeys (std::vector<T> &keys) const { - for (typename NodeMap::const_iterator it=_nodeMap.begin(); it != _nodeMap.end(); ++it) - keys.push_back(it->first); + /** Returns the IDs of all nodes present in the graph. */ + std::vector<T> getKeys () const { + std::vector<T> keys; + for (auto &entry : _nodeMap) + keys.emplace_back(entry.first); + return keys; } bool contains (const T &value) const { @@ -102,7 +115,7 @@ class DependencyGraph #if 0 void writeDOT (std::ostream &os) const { os << "digraph {\n"; - for (typename NodeMap::const_iterator it=_nodeMap.begin(); it != _nodeMap.end(); ++it) { + for (auto it=_nodeMap.begin(); it != _nodeMap.end(); ++it) { GraphNode *node = it->second; if (node->dependent) os << (node->key) << " -> " << (node->dependent->key) << ";\n"; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.cpp index 3849200d7bc..15bcfd83f92 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.cpp @@ -2,7 +2,7 @@ ** Directory.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,13 +18,12 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include "Directory.hpp" using namespace std; #ifdef _WIN32 - #include <windows.h> + #include "windows.hpp" #else #include <errno.h> #include <sys/stat.h> @@ -111,7 +110,7 @@ const char* Directory::read (EntryType type) { #else if (_dir) { while ((_dirent = readdir(_dir))) { - string path = string(_dirname) + "/" + _dirent->d_name; + string path = _dirname + "/" + _dirent->d_name; struct stat stats; if (stat(path.c_str(), &stats) == 0) { if (S_ISDIR(stats.st_mode)) { diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.hpp index fa0e2543abb..4ff46e734f2 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.hpp @@ -2,7 +2,7 @@ ** Directory.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,13 +23,12 @@ #include <string> #ifdef _WIN32 - #include <windows.h> + #include "windows.hpp" #else #include <dirent.h> #endif -class Directory -{ +class Directory { public: enum EntryType {ET_FILE, ET_DIR, ET_FILE_OR_DIR}; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.cpp index ad09f800d7e..720da8ddeca 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.cpp @@ -2,7 +2,7 @@ ** DvisvgmSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,7 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> +#include <array> #include <cstring> #include <utility> #include "DvisvgmSpecialHandler.hpp" @@ -26,6 +26,7 @@ #include "InputReader.hpp" #include "Length.hpp" #include "SpecialActions.hpp" +#include "utility.hpp" #include "XMLNode.hpp" #include "XMLString.hpp" @@ -42,20 +43,21 @@ void DvisvgmSpecialHandler::preprocess (const char*, istream &is, SpecialActions struct Command { const char *name; void (DvisvgmSpecialHandler::*handler)(InputReader&); - } commands[] = { + }; + constexpr array<Command, 5> commands {{ {"raw", &DvisvgmSpecialHandler::preprocessRaw}, {"rawdef", &DvisvgmSpecialHandler::preprocessRawDef}, {"rawset", &DvisvgmSpecialHandler::preprocessRawSet}, {"endrawset", &DvisvgmSpecialHandler::preprocessEndRawSet}, - {"rawput", &DvisvgmSpecialHandler::preprocessRawPut}, - }; + {"rawput", &DvisvgmSpecialHandler::preprocessRawPut} + }}; StreamInputReader ir(is); - string cmd = ir.getWord(); - for (size_t i=0; i < sizeof(commands)/sizeof(Command); i++) { - if (commands[i].name == cmd) { + string cmdstr = ir.getWord(); + for (const Command &command : commands) { + if (command.name == cmdstr) { ir.skipSpace(); - (this->*commands[i].handler)(ir); + (this->*command.handler)(ir); return; } } @@ -92,7 +94,7 @@ void DvisvgmSpecialHandler::preprocessRaw (InputReader &ir) { return; string str = ir.getLine(); if (!str.empty()) - _currentMacro->second.emplace_back(string("P")+str); + _currentMacro->second.emplace_back("P"+str); } @@ -101,7 +103,7 @@ void DvisvgmSpecialHandler::preprocessRawDef (InputReader &ir) { return; string str = ir.getLine(); if (!str.empty()) - _currentMacro->second.emplace_back(string("D")+str); + _currentMacro->second.emplace_back("D"+str); } @@ -119,21 +121,22 @@ bool DvisvgmSpecialHandler::process (const char *prefix, istream &is, SpecialAct struct Command { const char *name; void (DvisvgmSpecialHandler::*handler)(InputReader&, SpecialActions&); - } commands[] = { + }; + constexpr array<Command, 7> commands {{ {"raw", &DvisvgmSpecialHandler::processRaw}, {"rawdef", &DvisvgmSpecialHandler::processRawDef}, {"rawset", &DvisvgmSpecialHandler::processRawSet}, {"endrawset", &DvisvgmSpecialHandler::processEndRawSet}, {"rawput", &DvisvgmSpecialHandler::processRawPut}, {"bbox", &DvisvgmSpecialHandler::processBBox}, - {"img", &DvisvgmSpecialHandler::processImg}, - }; + {"img", &DvisvgmSpecialHandler::processImg} + }}; StreamInputReader ir(is); - string cmd = ir.getWord(); - for (size_t i=0; i < sizeof(commands)/sizeof(Command); i++) { - if (commands[i].name == cmd) { + string cmdstr = ir.getWord(); + for (const Command &command : commands) { + if (command.name == cmdstr) { ir.skipSpace(); - (this->*commands[i].handler)(ir, actions); + (this->*command.handler)(ir, actions); return true; } } @@ -145,20 +148,9 @@ bool DvisvgmSpecialHandler::process (const char *prefix, istream &is, SpecialAct * @param[in,out] str text to expand * @param[in] actions interfcae to the world outside the special handler */ static void expand_constants (string &str, SpecialActions &actions) { - struct Constant { - const char *name; - string val; - } - constants[] = { - {"x", XMLString(actions.getX())}, - {"y", XMLString(actions.getY())}, - {"color", actions.getColor().svgColorString()}, - {"nl", "\n"}, - {0, ""} - }; bool repl_bbox = true; while (repl_bbox) { - size_t pos = str.find(string("{?bbox ")); + size_t pos = str.find("{?bbox "); if (pos == string::npos) repl_bbox = false; else { @@ -173,12 +165,22 @@ static void expand_constants (string &str, SpecialActions &actions) { repl_bbox = false; } } - for (const Constant *p=constants; p->name; p++) { - const string pattern = string("{?")+p->name+"}"; + struct Constant { + const char *name; + string val; + }; + const array<Constant, 4> constants {{ + {"x", XMLString(actions.getX())}, + {"y", XMLString(actions.getY())}, + {"color", actions.getColor().svgColorString()}, + {"nl", "\n"}, + }}; + for (const Constant &constant : constants) { + const string pattern = string("{?")+constant.name+"}"; size_t pos = str.find(pattern); while (pos != string::npos) { - str.replace(pos, strlen(p->name)+3, p->val); - pos = str.find(pattern, pos+p->val.length()); // look for further matches + str.replace(pos, strlen(constant.name)+3, constant.val); + pos = str.find(pattern, pos+constant.val.length()); // look for further matches } } } @@ -189,7 +191,7 @@ void DvisvgmSpecialHandler::processRaw (InputReader &ir, SpecialActions &actions string str = ir.getLine(); if (!str.empty()) { expand_constants(str, actions); - actions.appendToPage(new XMLTextNode(str)); + actions.appendToPage(util::make_unique<XMLTextNode>(str)); } } } @@ -200,7 +202,7 @@ void DvisvgmSpecialHandler::processRawDef (InputReader &ir, SpecialActions &acti string str = ir.getLine(); if (!str.empty()) { expand_constants(str, actions); - actions.appendToDefs(new XMLTextNode(str)); + actions.appendToDefs(util::make_unique<XMLTextNode>(str)); } } } @@ -221,7 +223,7 @@ void DvisvgmSpecialHandler::processRawPut (InputReader &ir, SpecialActions &acti if (_nestingLevel > 0) return; string id = ir.getString(); - MacroMap::iterator it = _macros.find(id); + auto it = _macros.find(id); if (it == _macros.end()) throw SpecialException("undefined SVG fragment '" + id + "' referenced"); @@ -232,9 +234,9 @@ void DvisvgmSpecialHandler::processRawPut (InputReader &ir, SpecialActions &acti if ((type == 'P' || type == 'D') && !def.empty()) { expand_constants(def, actions); if (type == 'P') - actions.appendToPage(new XMLTextNode(def)); + actions.appendToPage(util::make_unique<XMLTextNode>(def)); else { // type == 'D' - actions.appendToDefs(new XMLTextNode(def)); + actions.appendToDefs(util::make_unique<XMLTextNode>(def)); type = 'L'; // locked } } @@ -248,11 +250,20 @@ void DvisvgmSpecialHandler::processRawPut (InputReader &ir, SpecialActions &acti * @param[in] h height of the rectangle in PS point units * @param[in] d depth of the rectangle in PS point units * @param[in] actions object providing the actions that can be performed by the SpecialHandler */ -static void update_bbox (double w, double h, double d, SpecialActions &actions) { +static void update_bbox (Length w, Length h, Length d, SpecialActions &actions) { double x = actions.getX(); double y = actions.getY(); - actions.embed(BoundingBox(x, y, x+w, y-h)); - actions.embed(BoundingBox(x, y, x+w, y+d)); + actions.embed(BoundingBox(x, y, x+w.bp(), y-h.bp())); + actions.embed(BoundingBox(x, y, x+w.bp(), y+d.bp())); +} + + +/** Reads a length value including a trailing unit specifier and returns it. */ +static Length read_length (InputReader &ir) { + ir.skipSpace(); + double val = ir.getDouble(); + string unit = isalpha(ir.peek()) ? ir.getString(2) : "pt"; + return Length(val, unit); } @@ -264,57 +275,66 @@ static void update_bbox (double w, double h, double d, SpecialActions &actions) void DvisvgmSpecialHandler::processBBox (InputReader &ir, SpecialActions &actions) { ir.skipSpace(); int c = ir.peek(); - if (isalpha(c)) { - while (!isspace(ir.peek())) // skip trailing characters - ir.get(); - if (c == 'n') { - ir.skipSpace(); - string name; - while (isalnum(ir.peek())) - name += char(ir.get()); - ir.skipSpace(); - if (!name.empty() && ir.eof()) - actions.bbox(name, true); // create new user box - } - else if (c == 'a' || c == 'f') { - double p[4]; - for (int i=0; i < 4; i++) - p[i] = ir.getDouble()*Length::pt2bp; - BoundingBox b(p[0], p[1], p[2], p[3]); - if (c == 'a') - actions.embed(b); - else { - actions.bbox() = b; - actions.bbox().lock(); + try { + if (!isalpha(c)) + c = 'r'; // no mode specifier => relative box parameters + else { + while (!isspace(ir.peek())) // skip trailing characters + ir.get(); + if (c == 'n') { // "new": create new local bounding box + ir.skipSpace(); + string name; + while (isalnum(ir.peek())) + name += char(ir.get()); + ir.skipSpace(); + if (!name.empty() && ir.eof()) + actions.bbox(name, true); // create new user box + } + else if (c == 'a' || c == 'f') { // "abs" or "fix" + Length lengths[4]; + for (int i=0; i < 4; i++) + lengths[i] = read_length(ir); + BoundingBox b(lengths[0], lengths[1], lengths[2], lengths[3]); + if (c == 'a') + actions.embed(b); + else { + actions.bbox() = b; + actions.bbox().lock(); + } } } + if (c == 'r') { + Length w = read_length(ir); + Length h = read_length(ir); + Length d = read_length(ir); + update_bbox(w, h, d, actions); + } } - else - c = 'r'; // no mode specifier => relative box parameters - - if (c == 'r') { - double w = ir.getDouble()*Length::pt2bp; - double h = ir.getDouble()*Length::pt2bp; - double d = ir.getDouble()*Length::pt2bp; - update_bbox(w, h, d, actions); + catch (const UnitException &e) { + throw SpecialException(string("dvisvgm:bbox: ") + e.what()); } } void DvisvgmSpecialHandler::processImg (InputReader &ir, SpecialActions &actions) { - double w = ir.getDouble()*Length::pt2bp; - double h = ir.getDouble()*Length::pt2bp; - string f = ir.getString(); - update_bbox(w, h, 0, actions); - XMLElementNode *img = new XMLElementNode("image"); - img->addAttribute("x", actions.getX()); - img->addAttribute("y", actions.getY()); - img->addAttribute("width", w); - img->addAttribute("height", h); - img->addAttribute("xlink:href", f); - if (!actions.getMatrix().isIdentity()) - img->addAttribute("transform", actions.getMatrix().getSVG()); - actions.appendToPage(img); + try { + Length w = read_length(ir); + Length h = read_length(ir); + string f = ir.getString(); + update_bbox(w, h, 0, actions); + auto img = util::make_unique<XMLElementNode>("image"); + img->addAttribute("x", actions.getX()); + img->addAttribute("y", actions.getY()); + img->addAttribute("width", w.bp()); + img->addAttribute("height", h.bp()); + img->addAttribute("xlink:href", f); + if (!actions.getMatrix().isIdentity()) + img->addAttribute("transform", actions.getMatrix().getSVG()); + actions.appendToPage(std::move(img)); + } + catch (const UnitException &e) { + throw SpecialException(string("dvisvgm:img: ") + e.what()); + } } @@ -342,7 +362,7 @@ void DvisvgmSpecialHandler::dviEndPage (unsigned, SpecialActions&) { } -const char** DvisvgmSpecialHandler::prefixes () const { - static const char *pfx[] = {"dvisvgm:", 0}; +const vector<const char*> DvisvgmSpecialHandler::prefixes () const { + const vector<const char*> pfx {"dvisvgm:"}; return pfx; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.hpp index 5282f546bc1..242aa6a4aa4 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.hpp @@ -2,7 +2,7 @@ ** DvisvgmSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,8 +21,8 @@ #ifndef DVISVGMSPECIALHANDLER_HPP #define DVISVGMSPECIALHANDLER_HPP -#include <map> #include <string> +#include <unordered_map> #include <vector> #include "SpecialHandler.hpp" @@ -31,14 +31,14 @@ class SpecialActions; class DvisvgmSpecialHandler : public SpecialHandler, public DVIPreprocessingListener, public DVIEndPageListener { - typedef std::vector<std::string> StringVector; - typedef std::map<std::string, StringVector> MacroMap; + using StringVector = std::vector<std::string>; + using MacroMap = std::unordered_map<std::string, StringVector>; public: DvisvgmSpecialHandler (); const char* name () const override {return "dvisvgm";} const char* info () const override {return "special set for embedding raw SVG snippets";} - const char** prefixes () const override; + const std::vector<const char*> prefixes () const override; void preprocess (const char *prefix, std::istream &is, SpecialActions &actions) override; bool process (const char *prefix, std::istream &is, SpecialActions &actions) override; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.cpp index 516590e84aa..ef1096ef6b9 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.cpp @@ -2,7 +2,7 @@ ** EPSFile.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cstring> #include <istream> #include <limits> diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.hpp index b4139090d13..28d2aa8264c 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.hpp @@ -2,7 +2,7 @@ ** EPSFile.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSToSVG.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSToSVG.cpp index ec50c21c487..06958c1b963 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSToSVG.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSToSVG.cpp @@ -2,7 +2,7 @@ ** EPSToSVG.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,6 +18,7 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ +#include <config.h> #include <fstream> #include <sstream> #include "EPSFile.hpp" @@ -27,6 +28,7 @@ #include "PsSpecialHandler.hpp" #include "SVGOutput.hpp" #include "System.hpp" +#include "utility.hpp" #include "version.hpp" using namespace std; @@ -65,8 +67,9 @@ void EPSToSVG::convert () { } progress(0); // output SVG file + _svg.removeRedundantElements(); _svg.setBBox(_bbox); - _svg.appendToDoc(new XMLCommentNode(" This file was generated by dvisvgm " + string(PROGRAM_VERSION) + " ")); + _svg.appendToDoc(util::make_unique<XMLCommentNode>(" This file was generated by dvisvgm " + string(PROGRAM_VERSION) + " ")); bool success = _svg.write(_out.getPageStream(1, 1)); string svgfname = _out.filename(1, 1); if (svgfname.empty()) diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSToSVG.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSToSVG.hpp index 5d3172d2911..6965a65a9e9 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSToSVG.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSToSVG.hpp @@ -2,7 +2,7 @@ ** EPSToSVG.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,14 +21,14 @@ #ifndef EPSTOSVG_HPP #define EPSTOSVG_HPP +#include <memory> #include <string> #include "SpecialActions.hpp" #include "SVGTree.hpp" struct SVGOutputBase; -class EPSToSVG : protected SpecialActions -{ +class EPSToSVG : protected SpecialActions { public: EPSToSVG (const std::string &fname, SVGOutputBase &out) : _fname(fname), _out(out), _x(0), _y(0) {} void convert (); @@ -48,10 +48,10 @@ class EPSToSVG : protected SpecialActions const Matrix& getMatrix () const override {return _svg.getMatrix();} void getPageTransform (Matrix &matrix) const override {} void setBgColor (const Color &color) override {} - void appendToPage (XMLNode *node) override {_svg.appendToPage(node);} - void appendToDefs (XMLNode *node) override {_svg.appendToDefs(node);} - void prependToPage (XMLNode *node) override {_svg.prependToPage(node);} - void pushContextElement (XMLElementNode *node) override {_svg.pushContextElement(node);} + void appendToPage(std::unique_ptr<XMLNode> &&node) override {_svg.appendToPage(std::move(node));} + void appendToDefs(std::unique_ptr<XMLNode> &&node) override {_svg.appendToDefs(std::move(node));} + void prependToPage(std::unique_ptr<XMLNode> &&node) override {_svg.prependToPage(std::move(node));} + void pushContextElement (std::unique_ptr<XMLElementNode> &&node) override {_svg.pushContextElement(std::move(node));} void popContextElement () override {_svg.popContextElement();} void embed (const BoundingBox &bbox) override {_bbox.embed(bbox);} void embed (const DPair &p, double r=0) override {if (r==0) _bbox.embed(p); else _bbox.embed(p, r);} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.cpp index d7fc27bce98..83f167e428e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.cpp @@ -2,7 +2,7 @@ ** EmSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <sstream> #include "EmSpecialHandler.hpp" #include "InputBuffer.hpp" @@ -79,11 +78,11 @@ static DPair cut_vector (char cuttype, const DPair &linedir, double linewidth) { * @param[in] lw line width in PS point units * @param[in] actions object providing the actions that can be performed by the SpecialHandler */ static void create_line (const DPair &p1, const DPair &p2, char c1, char c2, double lw, SpecialActions &actions) { - XMLElementNode *node=0; + unique_ptr<XMLElementNode> node; DPair dir = p2-p1; if (dir.x() == 0 || dir.y() == 0 || (c1 == 'p' && c2 == 'p')) { // draw regular line - node = new XMLElementNode("line"); + node = util::make_unique<XMLElementNode>("line"); node->addAttribute("x1", p1.x()); node->addAttribute("y1", p1.y()); node->addAttribute("x2", p2.x()); @@ -108,7 +107,7 @@ static void create_line (const DPair &p1, const DPair &p2, char c1, char c2, dou << XMLString(q12.x()) << ',' << XMLString(q12.y()) << ' ' << XMLString(q22.x()) << ',' << XMLString(q22.y()) << ' ' << XMLString(q21.x()) << ',' << XMLString(q21.y()); - node = new XMLElementNode("polygon"); + node = util::make_unique<XMLElementNode>("polygon"); node->addAttribute("points", oss.str()); if (actions.getColor() != Color::BLACK) node->addAttribute("fill", actions.getColor().svgColorString()); @@ -118,7 +117,7 @@ static void create_line (const DPair &p1, const DPair &p2, char c1, char c2, dou actions.embed(q21); actions.embed(q22); } - actions.appendToPage(node); + actions.appendToPage(std::move(node)); } @@ -230,8 +229,8 @@ void EmSpecialHandler::line (InputReader &ir, SpecialActions& actions) { double linewidth = _linewidth; if (ir.getPunct() == ',') linewidth = read_length(ir); - map<int,DPair>::iterator it1=_points.find(pointnum1); - map<int,DPair>::iterator it2=_points.find(pointnum2); + auto it1=_points.find(pointnum1); + auto it2=_points.find(pointnum2); if (it1 != _points.end() && it2 != _points.end()) create_line(it1->second, it2->second, char(cut1), char(cut2), linewidth, actions); else { @@ -259,7 +258,7 @@ void EmSpecialHandler::dviEndPage (unsigned pageno, SpecialActions &actions) { } -const char** EmSpecialHandler::prefixes () const { - static const char *pfx[] = {"em:", 0}; +const vector<const char*> EmSpecialHandler::prefixes () const { + const vector<const char*> pfx {"em:"}; return pfx; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.hpp index c9febab3425..5a86b1322ce 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.hpp @@ -2,7 +2,7 @@ ** EmSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,7 +22,7 @@ #define EMSPECIALHANDLER_HPP #include <list> -#include <map> +#include <unordered_map> #include "Pair.hpp" #include "SpecialHandler.hpp" @@ -42,7 +42,7 @@ class EmSpecialHandler : public SpecialHandler, public DVIEndPageListener EmSpecialHandler (); const char* name () const override {return "em";} const char* info () const override {return "line drawing statements of the emTeX special set";} - const char** prefixes () const override; + const std::vector<const char*> prefixes () const override; bool process (const char *prefix, std::istream &in, SpecialActions &actions) override; protected: @@ -54,10 +54,10 @@ class EmSpecialHandler : public SpecialHandler, public DVIEndPageListener void point (InputReader &ir, SpecialActions &actions); private: - std::map<int, DPair> _points; ///< points defined by special em:point - std::list<Line> _lines; ///< list of lines with undefined end points - double _linewidth; ///< global line width - DPair _pos; ///< current position of "graphic cursor" + std::unordered_map<int, DPair> _points; ///< points defined by special em:point + std::list<Line> _lines; ///< list of lines with undefined end points + double _linewidth; ///< global line width + DPair _pos; ///< current position of "graphic cursor" }; #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.cpp index 2dc2ab8e7d2..1b99d17e280 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.cpp @@ -2,7 +2,7 @@ ** EncFile.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <fstream> #include "Font.hpp" #include "EncFile.hpp" diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.hpp index 6296104e0b1..4cb4945856a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.hpp @@ -2,7 +2,7 @@ ** EncFile.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.cpp index 591da5e6fe9..40a7aa01c22 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.cpp @@ -2,7 +2,7 @@ ** FileFinder.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -19,9 +19,9 @@ *************************************************************************/ #include <config.h> - #ifdef MIKTEX #include "MiKTeXCom.hpp" + #include "utility.hpp" #else #ifdef KPSE_CXX_UNSAFE extern "C" { @@ -37,13 +37,14 @@ #include <map> #include <set> #include "FileFinder.hpp" +#include "FilePath.hpp" #include "FileSystem.hpp" #include "FontMap.hpp" #include "Message.hpp" #include "MessageException.hpp" #include "Process.hpp" -const char *FileFinder::_argv0 = nullptr; +std::string FileFinder::_argv0; std::string FileFinder::_progname; bool FileFinder::_enableMktex = false; @@ -55,11 +56,9 @@ bool FileFinder::_enableMktex = false; FileFinder::FileFinder () { addLookupDir("."); // always lookup files in the current working directory #ifdef MIKTEX - _miktex.reset(new MiKTeXCom); + _miktex = util::make_unique<MiKTeXCom>(); #else - if (_argv0 == nullptr) - _argv0 = ""; - kpse_set_program_name(_argv0, _progname.c_str()); + kpse_set_program_name(_argv0.c_str(), _progname.c_str()); // enable tfm and mf generation (actually invoked by calls of kpse_make_tex) kpse_set_program_enabled(kpse_tfm_format, 1, kpse_src_env); kpse_set_program_enabled(kpse_mf_format, 1, kpse_src_env); @@ -71,9 +70,9 @@ FileFinder::FileFinder () { } -void FileFinder::init (const char *argv0, const char *progname, bool enable_mktexmf) { +void FileFinder::init (const std::string &argv0, const std::string &progname, bool enable_mktexmf) { _argv0 = argv0; - _progname = progname; + _progname = progname.c_str(); _enableMktex = enable_mktexmf; } @@ -99,7 +98,8 @@ std::string FileFinder::version () const { void FileFinder::addLookupDir (const std::string &path) { - _additionalDirs.insert(path); + FilePath filepath(path); + _additionalDirs.insert(filepath.absolute()); } @@ -110,27 +110,22 @@ void FileFinder::addLookupDir (const std::string &path) { * @return file path on success, 0 otherwise */ const char* FileFinder::findFile (const std::string &fname, const char *ftype) const { if (fname.empty()) - return 0; + return nullptr; static std::string buf; // try to lookup the file in the additionally specified directories for (const std::string &dir : _additionalDirs) { - if (dir[0] == '/') - buf.clear(); - else - buf = FileSystem::getcwd()+"/"; - buf += dir + "/" + fname; + buf = dir + "/" + fname; if (FileSystem::exists(buf)) return buf.c_str(); } - std::string ext; if (ftype) ext = ftype; else { size_t pos = fname.rfind('.'); if (pos == std::string::npos) - return 0; // no extension and no file type => no search + return nullptr; // no extension and no file type => no search ext = fname.substr(pos+1); } @@ -145,15 +140,15 @@ const char* FileFinder::findFile (const std::string &fname, const char *ftype) c // The MiKTeX SDK doesn't support the lookup of files without suffix (yet), thus // it's not possible to find cmap files which usually don't have a suffix. In order // to work around this, we try to lookup the files by calling kpsewhich. - Process process("kpsewhich", std::string("-format=cmap ")+fname); + Process process("kpsewhich", "-format=cmap "+fname); process.run(&buf); - return buf.empty() ? 0 : buf.c_str(); + return buf.empty() ? nullptr : buf.c_str(); } try { return _miktex->findFile(fname.c_str()); } catch (const MessageException &e) { - return 0; + return nullptr; } #else #ifdef TEXLIVEWIN32 @@ -161,9 +156,9 @@ const char* FileFinder::findFile (const std::string &fname, const char *ftype) c // lookup exe files in directory where dvisvgm is located if (const char *path = kpse_var_value("SELFAUTOLOC")) { buf = std::string(path) + "/" + fname; - return FileSystem::exists(buf) ? buf.c_str() : 0; + return FileSystem::exists(buf) ? buf.c_str() : nullptr; } - return 0; + return nullptr; } #endif static std::map<std::string, kpse_file_format_type> types = { @@ -180,10 +175,11 @@ const char* FileFinder::findFile (const std::string &fname, const char *ftype) c {"enc", kpse_enc_format}, {"pro", kpse_tex_ps_header_format}, {"sfd", kpse_sfd_format}, + {"eps", kpse_pict_format}, }; - auto it = types.find(ext.c_str()); + auto it = types.find(ext); if (it == types.end()) - return 0; + return nullptr; if (char *path = kpse_find_file(fname.c_str(), it->second, 0)) { // In the current version of libkpathsea, each call of kpse_find_file produces @@ -193,7 +189,7 @@ const char* FileFinder::findFile (const std::string &fname, const char *ftype) c std::free(path); return buf.c_str(); } - return 0; + return nullptr; #endif } @@ -205,11 +201,11 @@ const char* FileFinder::findFile (const std::string &fname, const char *ftype) c const char* FileFinder::findMappedFile (std::string fname) const { size_t pos = fname.rfind('.'); if (pos == std::string::npos) - return 0; + return nullptr; const std::string ext = fname.substr(pos+1); // file extension const std::string base = fname.substr(0, pos); if (const FontMap::Entry *entry = FontMap::instance().lookup(base)) { - const char *path=0; + const char *path=nullptr; if (entry->fontname.find('.') != std::string::npos) // does the mapped filename has an extension? path = findFile(entry->fontname, 0); // look for that file else { // otherwise, use extension of unmapped file @@ -218,7 +214,7 @@ const char* FileFinder::findMappedFile (std::string fname) const { } return path; } - return 0; + return nullptr; } @@ -228,13 +224,13 @@ const char* FileFinder::findMappedFile (std::string fname) const { const char* FileFinder::mktex (const std::string &fname) const { size_t pos = fname.rfind('.'); if (!_enableMktex || pos == std::string::npos) - return 0; + return nullptr; std::string ext = fname.substr(pos+1); // file extension if (ext != "tfm" && ext != "mf") - return 0; + return nullptr; - const char *path = 0; + const char *path = nullptr; #ifdef MIKTEX // maketfm and makemf are located in miktex/bin which is in the search PATH std::string toolname = (ext == "tfm" ? "miktex-maketfm" : "miktex-makemf"); @@ -263,5 +259,5 @@ const char* FileFinder::lookup (const std::string &fname, const char *ftype, boo const char *path; if ((path = findFile(fname, ftype)) || (extended && ((path = findMappedFile(fname)) || (path = mktex(fname))))) return path; - return 0; + return nullptr; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.hpp index cc88e52d57f..0ccc84f2755 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.hpp @@ -2,7 +2,7 @@ ** FileFinder.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -27,10 +27,9 @@ class MiKTeXCom; -class FileFinder -{ +class FileFinder { public: - static void init (const char *argv0, const char *progname, bool enable_mktexmf); + static void init (const std::string &argv0, const std::string &progname, bool enable_mktexmf); static FileFinder& instance (); std::string version () const; void addLookupDir (const std::string &path); @@ -44,7 +43,7 @@ class FileFinder const char* mktex (const std::string &fname) const; private: - static const char *_argv0; + static std::string _argv0; static std::string _progname; static bool _enableMktex; std::set<std::string> _additionalDirs; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.cpp index 9f9b295ad62..f7fe431cf16 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.cpp @@ -2,7 +2,7 @@ ** FilePath.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cctype> #include "FilePath.hpp" #include "FileSystem.hpp" @@ -70,14 +69,12 @@ static char adapt_current_path (string &path, char target_drive) { bool FilePath::Directory::operator == (const Directory &dir) const { - string dirstr1 = _dirstr; - string dirstr2 = dir._dirstr; #ifdef _WIN32 // letter case is not significant on Windows systems - util::tolower(dirstr1); - util::tolower(dirstr2); + return util::tolower(_dirstr) == util::tolower(dir._dirstr); +#else + return _dirstr == dir._dirstr; #endif - return dirstr1 == dirstr2; } @@ -85,7 +82,7 @@ bool FilePath::Directory::operator == (const Directory &dir) const { * relative to the current working directory. * @param[in] path absolute or relative path to a file or directory */ FilePath::FilePath (const string &path) { - init(path, !FileSystem::isDirectory(path.c_str()), FileSystem::getcwd()); + init(path, !FileSystem::isDirectory(path), FileSystem::getcwd()); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.hpp index 4f73324a27a..385e1d2fb4b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.hpp @@ -2,7 +2,7 @@ ** FilePath.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -25,8 +25,7 @@ #include <utility> #include <vector> -class FilePath -{ +class FilePath { class Directory { public: Directory (const std::string &dir) : _dirstr(dir) {} @@ -39,7 +38,6 @@ class FilePath std::string _dirstr; }; - typedef std::vector<Directory> Directories; public: FilePath (const std::string &path); FilePath (const std::string &path, bool isfile) : FilePath(path, isfile, "") {} @@ -60,7 +58,7 @@ class FilePath void add (const std::string &elem); private: - Directories _dirs; + std::vector<std::string> _dirs; std::string _fname; #ifdef _WIN32 char _drive; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.cpp index 8c5386ac8d5..769ff0a7c23 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.cpp @@ -2,7 +2,7 @@ ** FileSystem.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -36,7 +36,7 @@ using namespace std; #ifdef _WIN32 #include <direct.h> - #include <windows.h> + #include "windows.hpp" const char *FileSystem::DEVNULL = "nul"; const char FileSystem::PATHSEP = '\\'; #define unlink _unlink @@ -272,7 +272,7 @@ bool FileSystem::rmdir (const string &dirname) { struct dirent *ent; while ((ent = readdir(dir)) && ok) { const char *fname = ent->d_name; - string path = string(fname) + "/" + fname; + string path = dirname + "/" + fname; if (isDirectory(path)) { if (strcmp(fname, ".") != 0 && strcmp(fname, "..") != 0) ok = rmdir(path) && s_rmdir(path); @@ -335,16 +335,16 @@ bool FileSystem::isFile (const string &fname) { } -int FileSystem::collect (const char *dirname, vector<string> &entries) { +int FileSystem::collect (const std::string &dirname, vector<string> &entries) { entries.clear(); #ifdef _WIN32 - string pattern = string(dirname) + "/*"; + string pattern = dirname + "/*"; WIN32_FIND_DATA data; HANDLE h = FindFirstFile(pattern.c_str(), &data); bool ready = (h == INVALID_HANDLE_VALUE); while (!ready) { string fname = data.cFileName; - string path = string(dirname)+"/"+fname; + string path = dirname+"/"+fname; string typechar = isFile(path) ? "f" : isDirectory(path) ? "d" : "?"; if (fname != "." && fname != "..") entries.emplace_back(typechar+fname); @@ -352,11 +352,11 @@ int FileSystem::collect (const char *dirname, vector<string> &entries) { } FindClose(h); #else - if (DIR *dir = opendir(dirname)) { + if (DIR *dir = opendir(dirname.c_str())) { struct dirent *ent; while ((ent = readdir(dir))) { string fname = ent->d_name; - string path = string(dirname)+"/"+fname; + string path = dirname+"/"+fname; string typechar = isFile(path) ? "f" : isDirectory(path) ? "d" : "?"; if (fname != "." && fname != "..") entries.emplace_back(typechar+fname); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.hpp index 798ca982e74..955062d956f 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.hpp @@ -2,7 +2,7 @@ ** FileSystem.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -39,7 +39,7 @@ class FileSystem static bool exists (const std::string &fname); static bool mkdir (const std::string &dirname); static bool rmdir (const std::string &dirname); - static int collect (const char *dirname, std::vector<std::string> &entries); + static int collect (const std::string &dirname, std::vector<std::string> &entries); static bool isDirectory (const std::string &fname); static bool isFile (const std::string &fname); static const char* userdir (); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FixWord.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FixWord.hpp index 7f6a5ebd298..a7078ec46e2 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FixWord.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FixWord.hpp @@ -2,7 +2,7 @@ ** FixWord.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.cpp index 01f18f41690..889e070b263 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.cpp @@ -2,7 +2,7 @@ ** Font.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cstdlib> #include <fstream> #include <set> @@ -33,6 +32,7 @@ #include "SignalHandler.hpp" #include "Subfont.hpp" #include "Unicode.hpp" +#include "utility.hpp" using namespace std; @@ -48,7 +48,7 @@ uint32_t Font::unicode (uint32_t c) const { const FontEncoding* Font::encoding () const { if (const FontMap::Entry *entry = fontMapEntry()) return FontEncoding::encoding(entry->encname); - return 0; + return nullptr; } @@ -110,14 +110,14 @@ TFMFont::TFMFont (const string &name, uint32_t cs, double ds, double ss) const FontMetrics* TFMFont::getMetrics () const { if (!_metrics) { try { - _metrics.reset(FontMetrics::read(_fontname.c_str())); + _metrics = FontMetrics::read(_fontname); if (!_metrics) { - _metrics.reset(new NullFontMetric); + _metrics = util::make_unique<NullFontMetric>(); Message::wstream(true) << "can't find "+_fontname+".tfm\n"; } } catch (FontMetricException &e) { - _metrics.reset(new NullFontMetric); + _metrics = util::make_unique<NullFontMetric>(); Message::wstream(true) << e.what() << " in " << _fontname << ".tfm\n"; } } @@ -127,18 +127,18 @@ const FontMetrics* TFMFont::getMetrics () const { double TFMFont::charWidth (int c) const { double w = getMetrics() ? getMetrics()->getCharWidth(c) : 0; - if (style()) { + if (style()) w *= style()->extend; - w += fabs(style()->slant*charHeight(c)); // slant := tan(phi) = dx/height - } return w; } double TFMFont::italicCorr (int c) const { double w = getMetrics() ? getMetrics()->getItalicCorr(c) : 0; - if (style()) + if (style()) { + w += abs(style()->slant*charHeight(c)); // slant := tan(phi) = dx/height w *= style()->extend; + } return w; } @@ -164,13 +164,13 @@ double PhysicalFont::METAFONT_MAG = 4; FontCache PhysicalFont::_cache; -Font* PhysicalFont::create (const string &name, uint32_t checksum, double dsize, double ssize, PhysicalFont::Type type) { - return new PhysicalFontImpl(name, 0, checksum, dsize, ssize, type); +unique_ptr<Font> PhysicalFont::create (const string &name, uint32_t checksum, double dsize, double ssize, PhysicalFont::Type type) { + return unique_ptr<PhysicalFontImpl>(new PhysicalFontImpl(name, 0, checksum, dsize, ssize, type)); } -Font* PhysicalFont::create (const string &name, int fontindex, uint32_t checksum, double dsize, double ssize) { - return new PhysicalFontImpl(name, fontindex, checksum, dsize, ssize, PhysicalFont::Type::TTC); +unique_ptr<Font> PhysicalFont::create (const string &name, int fontindex, uint32_t checksum, double dsize, double ssize) { + return unique_ptr<PhysicalFontImpl>(new PhysicalFontImpl(name, fontindex, checksum, dsize, ssize, PhysicalFont::Type::TTC)); } @@ -326,7 +326,7 @@ bool PhysicalFont::getGlyph (int c, GraphicsPath<int32_t> &glyph, GFGlyphTracer: const Glyph *cached_glyph=0; if (CACHE_PATH) { _cache.write(CACHE_PATH); - _cache.read(name().c_str(), CACHE_PATH); + _cache.read(name(), CACHE_PATH); cached_glyph = _cache.getGlyph(c); } if (cached_glyph) { @@ -399,7 +399,7 @@ int PhysicalFont::traceAllGlyphs (bool includeCached, GFGlyphTracer::Callback *c string gfname; Glyph glyph; if (createGF(gfname)) { - _cache.read(name().c_str(), CACHE_PATH); + _cache.read(name(), CACHE_PATH); double ds = getMetrics() ? getMetrics()->getDesignSize() : 1; GFGlyphTracer tracer(gfname, unitsPerEm()/ds, cb); tracer.setGlyph(glyph); @@ -463,8 +463,8 @@ bool PhysicalFont::getExactGlyphBox (int c, GlyphMetrics &metrics, bool vertical } -Font* VirtualFont::create (const string &name, uint32_t checksum, double dsize, double ssize) { - return new VirtualFontImpl(name, checksum, dsize, ssize); +unique_ptr<Font> VirtualFont::create (const string &name, uint32_t checksum, double dsize, double ssize) { + return unique_ptr<VirtualFontImpl>(new VirtualFontImpl(name, checksum, dsize, ssize)); } @@ -473,7 +473,7 @@ Font* VirtualFont::create (const string &name, uint32_t checksum, double dsize, PhysicalFontImpl::PhysicalFontImpl (const string &name, int fontindex, uint32_t cs, double ds, double ss, PhysicalFont::Type type) : TFMFont(name, cs, ds, ss), - _filetype(type), _fontIndex(fontindex), _fontMapEntry(Font::fontMapEntry()), _encodingPair(Font::encoding()), _localCharMap(0) + _filetype(type), _fontIndex(fontindex), _encodingPair(Font::encoding()) { } @@ -483,13 +483,12 @@ PhysicalFontImpl::~PhysicalFontImpl () { _cache.write(CACHE_PATH); if (!KEEP_TEMP_FILES) tidy(); - delete _localCharMap; } const FontEncoding* PhysicalFontImpl::encoding () const { if (!_encodingPair.enc1()) - return 0; + return nullptr; return &_encodingPair; } @@ -506,7 +505,8 @@ bool PhysicalFontImpl::findAndAssignBaseFontMap () { } else if (type() != Type::MF) { FontEngine::instance().setFont(*this); - if ((_localCharMap = FontEngine::instance().createCustomToUnicodeMap()) != 0) + _localCharMap = FontEngine::instance().createCustomToUnicodeMap(); + if (_localCharMap) _charmapID = FontEngine::instance().setCustomCharMap(); else _charmapID = FontEngine::instance().setUnicodeCharMap(); @@ -547,14 +547,20 @@ uint32_t PhysicalFontImpl::unicode (uint32_t c) const { } +const FontStyle* PhysicalFontImpl::style () const { + if (auto *entry = fontMapEntry()) + return &entry->style; + return nullptr; +} + + /** Delete all temporary font files created by Metafont. */ void PhysicalFontImpl::tidy () const { if (type() == Type::MF) { - const char *ext[] = {"gf", "tfm", "log", 0}; string fname = FileSystem::tmpdir()+name(); - for (const char **p=ext; *p; ++p) { - if (FileSystem::exists(fname+"."+(*p))) - FileSystem::remove(fname+"."+(*p)); + for (const char *ext : {"gf", "tfm", "log"}) { + if (FileSystem::exists(fname+"."+ext)) + FileSystem::remove(fname+"."+ext); } } } @@ -562,10 +568,10 @@ void PhysicalFontImpl::tidy () const { ////////////////////////////////////////////////////////////////////////////// string NativeFont::uniqueName (const string &path, const FontStyle &style) { - static map<string, int> ids; + static unordered_map<string, int> ids; ostringstream oss; oss << path << "b" << style.bold << "e" << style.extend << "s" << style.slant; - map<string, int>::iterator it = ids.find(oss.str()); + auto it = ids.find(oss.str()); int id = ids.size(); if (it == ids.end()) ids[oss.str()] = id; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.hpp index f04368b9a8f..49f69f54725 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.hpp @@ -2,7 +2,7 @@ ** Font.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,9 +21,9 @@ #ifndef FONT_HPP #define FONT_HPP -#include <map> #include <memory> #include <string> +#include <unordered_map> #include <vector> #include "Character.hpp" #include "CharMapID.hpp" @@ -40,13 +40,11 @@ #include "ToUnicodeMap.hpp" #include "VFActions.hpp" #include "VFReader.hpp" - +#include "utility.hpp" struct FontStyle; - -struct GlyphMetrics -{ +struct GlyphMetrics { GlyphMetrics () : wl(0), wr(0), h(0), d(0) {} GlyphMetrics (double wwl, double wwr, double hh, double dd) : wl(wwl), wr(wwr), h(hh), d(dd) {} double wl, wr, h, d; @@ -57,7 +55,7 @@ struct GlyphMetrics class Font { public: virtual ~Font () =default; - virtual Font* clone (double ds, double sc) const =0; + virtual std::unique_ptr<Font> clone (double ds, double sc) const =0; virtual const Font* uniqueFont () const =0; virtual std::string name () const =0; virtual double designSize () const =0; @@ -79,7 +77,7 @@ class Font { virtual bool verticalLayout () const {return getMetrics() ? getMetrics()->verticalLayout() : false;} virtual bool verifyChecksums () const {return true;} virtual int fontIndex () const {return 0;} - virtual const FontStyle* style () const {return 0;} + virtual const FontStyle* style () const {return nullptr;} virtual Color color () const {return Color::BLACK;} virtual const FontMap::Entry* fontMapEntry () const; }; @@ -91,7 +89,7 @@ class Font { class EmptyFont : public Font { public: EmptyFont (const std::string &name) : _fontname(name) {} - Font* clone (double ds, double sc) const override {return new EmptyFont(*this);} + std::unique_ptr<Font> clone (double ds, double sc) const override {return util::make_unique<EmptyFont>(*this);} const Font* uniqueFont () const override {return this;} std::string name () const override {return _fontname;} double designSize () const override {return 10;} // cmr10 design size in pt @@ -100,8 +98,8 @@ class EmptyFont : public Font { double charHeight (int c) const override {return 6.833;} // height of cmr10's 'M' in pt double charDepth (int c) const override {return 0;} double italicCorr (int c) const override {return 0;} - const FontMetrics* getMetrics () const override {return 0;} - const char* path () const override {return 0;} + const FontMetrics* getMetrics () const override {return nullptr;} + const char* path () const override {return nullptr;} bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=0) const override {return false;} private: @@ -114,12 +112,12 @@ class PhysicalFont : public virtual Font { public: enum class Type {MF, OTF, PFB, TTC, TTF, UNKNOWN}; - static Font* create (const std::string &name, uint32_t checksum, double dsize, double ssize, PhysicalFont::Type type); - static Font* create (const std::string &name, int fontindex, uint32_t checksum, double dsize, double ssize); + static std::unique_ptr<Font> create (const std::string &name, uint32_t checksum, double dsize, double ssize, PhysicalFont::Type type); + static std::unique_ptr<Font> create (const std::string &name, int fontindex, uint32_t checksum, double dsize, double ssize); virtual Type type () const =0; - virtual bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=0) const override; - virtual bool getExactGlyphBox (int c, BoundingBox &bbox, GFGlyphTracer::Callback *cb=0) const; - virtual bool getExactGlyphBox (int c, GlyphMetrics &metrics, bool vertical, GFGlyphTracer::Callback *cb=0) const; + virtual bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=nullptr) const override; + virtual bool getExactGlyphBox (int c, BoundingBox &bbox, GFGlyphTracer::Callback *cb=nullptr) const; + virtual bool getExactGlyphBox (int c, GlyphMetrics &metrics, bool vertical, GFGlyphTracer::Callback *cb=nullptr) const; virtual bool isCIDFont () const; virtual int hAdvance () const; virtual std::string familyName () const; @@ -131,7 +129,7 @@ class PhysicalFont : public virtual Font { virtual double scaledAscent () const; virtual int ascent () const; virtual int descent () const; - virtual int traceAllGlyphs (bool includeCached, GFGlyphTracer::Callback *cb=0) const; + virtual int traceAllGlyphs (bool includeCached, GFGlyphTracer::Callback *cb=nullptr) const; virtual int collectCharMapIDs (std::vector<CharMapID> &charmapIDs) const; virtual CharMapID getCharMapID () const =0; virtual void setCharMapID (const CharMapID &id) {} @@ -156,12 +154,12 @@ class PhysicalFont : public virtual Font { class VirtualFont : public virtual Font { friend class FontManager; public: - typedef std::vector<uint8_t> DVIVector; + using DVIVector = std::vector<uint8_t>; public: - static Font* create (const std::string &name, uint32_t checksum, double dsize, double ssize); + static std::unique_ptr<Font> create (const std::string &name, uint32_t checksum, double dsize, double ssize); virtual const DVIVector* getDVI (int c) const =0; - bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=0) const override {return false;} + bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=nullptr) const override {return false;} protected: virtual void assignChar (uint32_t c, DVIVector &&dvi) =0; @@ -193,7 +191,10 @@ class TFMFont : public virtual Font { class PhysicalFontProxy : public PhysicalFont { friend class PhysicalFontImpl; public: - Font* clone (double ds, double sc) const override {return new PhysicalFontProxy(*this, ds, sc);} + std::unique_ptr<Font> clone (double ds, double sc) const override { + return std::unique_ptr<PhysicalFontProxy>(new PhysicalFontProxy(*this, ds, sc)); + } + const Font* uniqueFont () const override {return _pf;} std::string name () const override {return _pf->name();} double designSize () const override {return _dsize;} @@ -227,12 +228,15 @@ class PhysicalFontImpl : public PhysicalFont, public TFMFont { friend class PhysicalFont; public: ~PhysicalFontImpl(); - Font* clone (double ds, double ss) const override {return new PhysicalFontProxy(this, ds, ss);} + + std::unique_ptr<Font> clone (double ds, double ss) const override { + return std::unique_ptr<PhysicalFontProxy>(new PhysicalFontProxy(this, ds, ss)); + } + const Font* uniqueFont () const override {return this;} Type type () const override {return _filetype;} int fontIndex() const override {return _fontIndex;} - const FontStyle* style () const override {return _fontMapEntry ? &_fontMapEntry->style : 0;} - const FontMap::Entry* fontMapEntry () const override {return _fontMapEntry;} + const FontStyle* style () const override; const FontEncoding* encoding () const override; uint32_t unicode (uint32_t c) const override; bool findAndAssignBaseFontMap () override; @@ -245,17 +249,16 @@ class PhysicalFontImpl : public PhysicalFont, public TFMFont { private: Type _filetype; int _fontIndex; - const FontMap::Entry *_fontMapEntry; FontEncodingPair _encodingPair; CharMapID _charmapID; ///< ID of the font's charmap to use - const RangeMap *_localCharMap; + std::unique_ptr<const RangeMap> _localCharMap; }; class NativeFont : public PhysicalFont { public: - virtual NativeFont* clone (double ptsize, const FontStyle &style, Color color) const =0; - virtual Font* clone (double ds, double sc) const override =0; + virtual std::unique_ptr<NativeFont> clone (double ptsize, const FontStyle &style, Color color) const =0; + virtual std::unique_ptr<Font> clone (double ds, double sc) const override =0; std::string name () const override; Type type () const override; double designSize () const override {return _ptsize;} @@ -264,10 +267,10 @@ class NativeFont : public PhysicalFont { double charDepth (int c) const override; double charHeight (int c) const override; double italicCorr (int c) const override {return 0;} - const FontMetrics* getMetrics () const override {return 0;} + const FontMetrics* getMetrics () const override {return nullptr;} const FontStyle* style () const override {return &_style;} Color color () const override {return _color;} - const FontMap::Entry* fontMapEntry () const override {return 0;} + const FontMap::Entry* fontMapEntry () const override {return nullptr;} static std::string uniqueName (const std::string &path, const FontStyle &style); protected: @@ -283,11 +286,14 @@ class NativeFont : public PhysicalFont { class NativeFontProxy : public NativeFont { friend class NativeFontImpl; public: - NativeFont* clone (double ptsize, const FontStyle &style, Color color) const override { - return new NativeFontProxy(this, ptsize, style, color); + std::unique_ptr<NativeFont> clone (double ptsize, const FontStyle &style, Color color) const override { + return std::unique_ptr<NativeFontProxy>(new NativeFontProxy(this, ptsize, style, color)); + } + + std::unique_ptr<Font> clone (double ds, double sc) const override { + return std::unique_ptr<NativeFontProxy>(new NativeFontProxy(this , sc, *style(), color())); } - Font* clone (double ds, double sc) const override {return new NativeFontProxy(this , sc, *style(), color());} const Font* uniqueFont () const override {return _nfont;} const char* path () const override {return _nfont->path();} int fontIndex () const override {return _nfont->fontIndex();} @@ -309,11 +315,14 @@ class NativeFontImpl : public NativeFont { NativeFontImpl (const std::string &fname, int fontIndex, double ptsize, const FontStyle &style, Color color) : NativeFont(ptsize, style, color), _path(fname), _fontIndex(fontIndex) {} - NativeFont* clone (double ptsize, const FontStyle &style, Color color) const override { - return new NativeFontProxy(this, ptsize, style, color); + std::unique_ptr<NativeFont> clone (double ptsize, const FontStyle &style, Color color) const override { + return std::unique_ptr<NativeFontProxy>(new NativeFontProxy(this, ptsize, style, color)); + } + + std::unique_ptr<Font> clone (double ds, double sc) const override { + return std::unique_ptr<NativeFontProxy>(new NativeFontProxy(this , sc, *style(), color())); } - Font* clone (double ds, double sc) const override {return new NativeFontProxy(this , sc, *style(), color());} const Font* uniqueFont () const override {return this;} const char* path () const override {return _path.c_str();} int fontIndex() const override {return _fontIndex;} @@ -333,7 +342,10 @@ class NativeFontImpl : public NativeFont { class VirtualFontProxy : public VirtualFont { friend class VirtualFontImpl; public: - Font* clone (double ds, double ss) const override {return new VirtualFontProxy(*this, ds, ss);} + std::unique_ptr<Font> clone (double ds, double ss) const override { + return std::unique_ptr<VirtualFontProxy>(new VirtualFontProxy(*this, ds, ss)); + } + const Font* uniqueFont () const override {return _vf;} std::string name () const override {return _vf->name();} const DVIVector* getDVI (int c) const override {return _vf->getDVI(c);} @@ -361,7 +373,10 @@ class VirtualFontProxy : public VirtualFont { class VirtualFontImpl : public VirtualFont, public TFMFont { friend class VirtualFont; public: - Font* clone (double ds, double ss) const override {return new VirtualFontProxy(this, ds, ss);} + std::unique_ptr<Font> clone (double ds, double ss) const override { + return std::unique_ptr<VirtualFontProxy>(new VirtualFontProxy(this, ds, ss)); + } + const Font* uniqueFont () const override {return this;} const DVIVector* getDVI (int c) const override; const char* path () const override; @@ -371,12 +386,11 @@ class VirtualFontImpl : public VirtualFont, public TFMFont { void assignChar (uint32_t c, DVIVector &&dvi) override; private: - std::map<uint32_t, DVIVector> _charDefs; ///< dvi subroutines defining the characters + std::unordered_map<uint32_t, DVIVector> _charDefs; ///< dvi subroutines defining the characters }; -struct FontException : public MessageException -{ +struct FontException : public MessageException { FontException (const std::string &msg) : MessageException(msg) {} }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.cpp index cd1b6529092..f14a4ca8bd0 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.cpp @@ -2,7 +2,7 @@ ** FontCache.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,8 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ - -#include <config.h> #include <algorithm> #include <cstring> #include <fstream> @@ -65,7 +63,7 @@ void FontCache::setGlyph (int c, const Glyph &glyph) { * @param[in] c character code * @return font glyph data (0 if no matching data was found) */ const Glyph* FontCache::getGlyph (int c) const { - GlyphMap::const_iterator it = _glyphs.find(c); + auto it = _glyphs.find(c); return (it != _glyphs.end()) ? &it->second : 0; } @@ -75,12 +73,12 @@ const Glyph* FontCache::getGlyph (int c) const { * @param[in] fontname name of current font * @param[in] dir directory where the cache file should go * @return true if writing was successful */ -bool FontCache::write (const char *fontname, const char *dir) const { +bool FontCache::write (const string &fontname, const string &dir) const { if (!_changed) return true; - if (fontname && strlen(fontname) > 0) { - string dirstr = (dir == 0 || strlen(dir) == 0) ? FileSystem::getcwd() : dir; + if (!fontname.empty()) { + string dirstr = dir.empty() ? FileSystem::getcwd() : dir; ostringstream oss; oss << dirstr << '/' << fontname << ".fgd"; ofstream ofs(oss.str().c_str(), ios::binary); @@ -90,8 +88,8 @@ bool FontCache::write (const char *fontname, const char *dir) const { } -bool FontCache::write (const char* dir) const { - return _fontname.empty() ? false : write(_fontname.c_str(), dir); +bool FontCache::write (const string &dir) const { + return _fontname.empty() ? false : write(_fontname, dir); } @@ -124,7 +122,7 @@ static int max_int_size (const Pair<int32_t> *pairs, size_t n) { * @param[in] fontname name of current font * @param[in] os output stream * @return true if writing was successful */ -bool FontCache::write (const char *fontname, ostream &os) const { +bool FontCache::write (const string &fontname, ostream &os) const { if (!_changed) return true; if (!os) @@ -170,13 +168,13 @@ bool FontCache::write (const char *fontname, ostream &os) const { * @param[in] fontname name of font data to read * @param[in] dir directory where the cache files are located * @return true if reading was successful */ -bool FontCache::read (const char *fontname, const char *dir) { - if (!fontname || strlen(fontname) == 0) +bool FontCache::read (const string &fontname, const string &dir) { + if (fontname.empty()) return false; if (_fontname == fontname) return true; clear(); - string dirstr = (dir == 0 || strlen(dir) == 0) ? FileSystem::getcwd() : dir; + string dirstr = dir.empty() ? FileSystem::getcwd() : dir; ostringstream oss; oss << dirstr << '/' << fontname << ".fgd"; ifstream ifs(oss.str().c_str(), ios::binary); @@ -188,7 +186,7 @@ bool FontCache::read (const char *fontname, const char *dir) { * @param[in] fontname name of font data to read * @param[in] is input stream to read the glyph data from * @return true if reading was successful */ -bool FontCache::read (const char *fontname, istream &is) { +bool FontCache::read (const string &fontname, istream &is) { if (_fontname == fontname) return true; clear(); @@ -257,16 +255,16 @@ bool FontCache::read (const char *fontname, istream &is) { * @param[out] infos the collected font information * @param[out] invalid names of outdated/corrupted cache files * @return true on success */ -bool FontCache::fontinfo (const char *dirname, vector<FontInfo> &infos, vector<string> &invalid) { +bool FontCache::fontinfo (const string &dirname, vector<FontInfo> &infos, vector<string> &invalid) { infos.clear(); invalid.clear(); - if (dirname) { + if (!dirname.empty()) { vector<string> fnames; FileSystem::collect(dirname, fnames); for (const string &fname : fnames) { if (fname[0] == 'f' && fname.length() > 5 && fname.substr(fname.length()-4) == ".fgd") { FontInfo info; - string path = string(dirname)+"/"+(fname.substr(1)); + string path = dirname+"/"+(fname.substr(1)); ifstream ifs(path.c_str(), ios::binary); if (fontinfo(ifs, info)) infos.emplace_back(move(info)); @@ -345,8 +343,8 @@ bool FontCache::fontinfo (std::istream &is, FontInfo &info) { * @param[in] dirname path to font cache directory * @param[in] os output is written to this stream * @param[in] purge if true, outdated and corrupted cache files are removed */ -void FontCache::fontinfo (const char *dirname, ostream &os, bool purge) { - if (dirname) { +void FontCache::fontinfo (const string &dirname, ostream &os, bool purge) { + if (!dirname.empty()) { ios::fmtflags osflags(os.flags()); vector<FontInfo> infos; vector<string> invalid_files; @@ -369,7 +367,7 @@ void FontCache::fontinfo (const char *dirname, ostream &os, bool purge) { } if (purge) { for (const string &str : invalid_files) { - string path=string(dirname)+"/"+str; + string path=dirname+"/"+str; if (FileSystem::remove(path)) os << "invalid cache file " << str << " removed\n"; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.hpp index 7cdfe4d16eb..e8d25bd0d0c 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.hpp @@ -2,7 +2,7 @@ ** FontCache.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,18 +21,15 @@ #ifndef FONTCACHE_HPP #define FONTCACHE_HPP -#include <string> #include <map> +#include <string> +#include <vector> #include "Glyph.hpp" -class FontCache -{ - typedef std::map<int, Glyph> GlyphMap; - +class FontCache { public: - struct FontInfo - { + struct FontInfo { std::string name; // fontname uint16_t version; // file format version uint32_t checksum; // CRC32 checksum of file data @@ -44,24 +41,24 @@ class FontCache public: FontCache () : _changed(false) {} ~FontCache () {clear();} - bool read (const char *fontname, const char *dir); - bool read (const char *fontname, std::istream &is); - bool write (const char *dir) const; - bool write (const char *fontname, const char *dir) const; - bool write (const char *fontname, std::ostream &os) const; + bool read (const std::string &fontname, const std::string &dir); + bool read (const std::string &fontname, std::istream &is); + bool write (const std::string &dir) const; + bool write (const std::string &fontname, const std::string &dir) const; + bool write (const std::string &fontname, std::ostream &os) const; const Glyph* getGlyph (int c) const; void setGlyph (int c, const Glyph &glyph); void clear (); const std::string& fontname () const {return _fontname;} - static bool fontinfo (const char *dirname, std::vector<FontInfo> &infos, std::vector<std::string> &invalid); + static bool fontinfo (const std::string &dirname, std::vector<FontInfo> &infos, std::vector<std::string> &invalid); static bool fontinfo (std::istream &is, FontInfo &info); - static void fontinfo (const char *dirname, std::ostream &os, bool purge=false); + static void fontinfo (const std::string &dirname, std::ostream &os, bool purge=false); private: static const uint8_t FORMAT_VERSION; std::string _fontname; - GlyphMap _glyphs; + std::map<int, Glyph> _glyphs; bool _changed; }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.cpp index 886ab0ec6c6..d6f3325d31e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.cpp @@ -2,7 +2,7 @@ ** FontEncoding.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,45 +18,36 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include "CMap.hpp" #include "CMapManager.hpp" #include "EncFile.hpp" #include "FileFinder.hpp" #include "FontEncoding.hpp" +#include "utility.hpp" using namespace std; - -struct EncodingMap : public map<string, EncFile*> -{ - ~EncodingMap () { - for (auto &entry : *this) - delete entry.second; - } -}; - - /** Returns the encoding object for a given encoding name. * @param[in] encname name of the encoding to lookup * @return pointer to encoding object, or 0 if there is no encoding defined */ FontEncoding* FontEncoding::encoding (const string &encname) { if (encname.empty()) return 0; - // initially, try to find an .enc file with the given name + + using EncodingMap = unordered_map<string, unique_ptr<EncFile>>; static EncodingMap encmap; - EncodingMap::const_iterator it = encmap.find(encname); + // initially, try to find an .enc file with the given name + auto it = encmap.find(encname); if (it != encmap.end()) - return it->second; + return it->second.get(); if (FileFinder::instance().lookup(encname + ".enc", false)) { - EncFile *enc = new EncFile(encname); - encmap[encname] = enc; - return enc; + auto state = encmap.emplace(encname, util::make_unique<EncFile>(encname)); + return state.first->second.get(); } // no .enc file found => try to find a CMap if (CMap *cmap = CMapManager::instance().lookup(encname)) return cmap; - return 0; + return nullptr; } ///////////////////////////////////////////////////////////////////////// diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.hpp index ea0f15e4beb..77175adce06 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.hpp @@ -2,7 +2,7 @@ ** FontEncoding.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -28,8 +28,7 @@ struct CharMapID; class PhysicalFont; -struct FontEncoding -{ +struct FontEncoding { virtual ~FontEncoding () =default; virtual Character decode (uint32_t c) const =0; virtual bool mapsToCharIndex () const =0; @@ -38,15 +37,13 @@ struct FontEncoding }; -struct NamedFontEncoding : public FontEncoding -{ +struct NamedFontEncoding : public FontEncoding { virtual const char* name () const =0; virtual const char* path () const =0; }; -class FontEncodingPair : public FontEncoding -{ +class FontEncodingPair : public FontEncoding { public: FontEncodingPair (const FontEncoding *enc1) : _enc1(enc1), _enc2(0) {} FontEncodingPair (const FontEncoding *enc1, const FontEncoding *enc2) : _enc1(enc1), _enc2(enc2) {} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.cpp index 61128964655..59101458caa 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.cpp @@ -2,7 +2,7 @@ ** FontEngine.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <sstream> #include <ft2build.h> #include FT_ADVANCES_H @@ -30,6 +29,7 @@ #include "FontEngine.hpp" #include "FontStyle.hpp" #include "Message.hpp" +#include "utility.hpp" using namespace std; @@ -143,15 +143,15 @@ void FontEngine::buildCharMap (RangeMap &charmap) { /** Creates a charmap that maps from the custom character encoding to unicode. * @return pointer to charmap if it could be created, 0 otherwise */ -const RangeMap* FontEngine::createCustomToUnicodeMap () { +unique_ptr<const RangeMap> FontEngine::createCustomToUnicodeMap () { FT_CharMap ftcharmap = _currentFace->charmap; if (FT_Select_Charmap(_currentFace, FT_ENCODING_ADOBE_CUSTOM) != 0) - return 0; + return nullptr; RangeMap index_to_source_chrcode; buildCharMap(index_to_source_chrcode); if (FT_Select_Charmap(_currentFace, FT_ENCODING_UNICODE) != 0) - return 0; - RangeMap *charmap = new RangeMap; + return nullptr; + auto charmap = util::make_unique<RangeMap>(); FT_UInt glyph_index; uint32_t unicode_point = FT_Get_First_Char(_currentFace, &glyph_index); while (glyph_index) { @@ -160,17 +160,17 @@ const RangeMap* FontEngine::createCustomToUnicodeMap () { unicode_point = FT_Get_Next_Char(_currentFace, unicode_point, &glyph_index); } FT_Set_Charmap(_currentFace, ftcharmap); - return charmap; + return std::move(charmap); } const char* FontEngine::getFamilyName () const { - return _currentFace ? _currentFace->family_name : 0; + return _currentFace ? _currentFace->family_name : nullptr; } const char* FontEngine::getStyleName () const { - return _currentFace ? _currentFace->style_name : 0; + return _currentFace ? _currentFace->style_name : nullptr; } @@ -326,9 +326,9 @@ CharMapID FontEngine::setCustomCharMap () { // handle API change in freetype version 2.2.1 #if FREETYPE_MAJOR > 2 || (FREETYPE_MAJOR == 2 && (FREETYPE_MINOR > 2 || (FREETYPE_MINOR == 2 && FREETYPE_PATCH >= 1))) - typedef const FT_Vector *FTVectorPtr; + using FTVectorPtr = const FT_Vector*; #else - typedef FT_Vector *FTVectorPtr; + using FTVectorPtr = FT_Vector*; #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.hpp index a2ec3947c2b..0f831cc971b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.hpp @@ -2,7 +2,7 @@ ** FontEngine.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -25,6 +25,7 @@ #include FT_FREETYPE_H #include FT_CID_H #include <map> +#include <memory> #include <string> #include <vector> #include "Character.hpp" @@ -36,8 +37,7 @@ class Font; /** This class provides methods to handle font files and font data. * It's a wrapper for the Freetype font library. */ -class FontEngine -{ +class FontEngine { public: ~FontEngine (); static FontEngine& instance (); @@ -65,7 +65,7 @@ class FontEngine int getCharByGlyphName (const char *name) const; bool setCharMap (const CharMapID &charMapID); void buildCharMap (RangeMap &charmap); - const RangeMap* createCustomToUnicodeMap (); + std::unique_ptr<const RangeMap> createCustomToUnicodeMap (); protected: FontEngine (); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.cpp index 885a596b7cd..dafd4938004 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.cpp @@ -2,7 +2,7 @@ ** FontManager.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cstring> #include <cstdlib> #include <fstream> @@ -48,7 +47,7 @@ int FontManager::fontID (int n) const { auto it = _num2id.find(n); return (it == _num2id.end()) ? -1 : it->second; } - VfNum2IdMap::const_iterator vit = _vfnum2id.find(_vfStack.top()); + auto vit = _vfnum2id.find(_vfStack.top()); if (vit == _vfnum2id.end()) return -1; const Num2IdMap &num2id = vit->second; @@ -102,7 +101,7 @@ int FontManager::fontnum (int id) const { int FontManager::vfFirstFontNum (const VirtualFont *vf) const { - VfFirstFontMap::const_iterator it = _vfFirstFontMap.find(vf); + auto it = _vfFirstFontMap.find(vf); return (it == _vfFirstFontMap.end()) ? -1 : (int) it->second; } @@ -112,32 +111,32 @@ int FontManager::vfFirstFontNum (const VirtualFont *vf) const { * @return pointer to font if font was found, 0 otherwise */ Font* FontManager::getFont (int n) const { int id = fontID(n); - return (id < 0) ? 0 : _fonts[id].get(); + return (id < 0) ? nullptr : _fonts[id].get(); } Font* FontManager::getFont (const string &name) const { int id = fontID(name); if (id < 0) - return 0; + return nullptr; return _fonts[id].get(); } Font* FontManager::getFontById (int id) const { if (id < 0 || size_t(id) >= _fonts.size()) - return 0; + return nullptr; return _fonts[id].get(); } /** Returns the current active virtual font. */ const VirtualFont* FontManager::getVF () const { - return _vfStack.empty() ? 0 : _vfStack.top(); + return _vfStack.empty() ? nullptr : _vfStack.top(); } -static Font* create_font (const string &filename, const string &fontname, int fontindex, uint32_t checksum, double dsize, double ssize) { +static unique_ptr<Font> create_font (const string &filename, const string &fontname, int fontindex, uint32_t checksum, double dsize, double ssize) { string ext; if (const char *dot = strrchr(filename.c_str(), '.')) ext = dot+1; @@ -155,7 +154,7 @@ static Font* create_font (const string &filename, const string &fontname, int fo if (ext == "mf") return PhysicalFont::create(fontname, checksum, dsize, ssize, PhysicalFont::Type::MF); } - return 0; + return nullptr; } @@ -174,10 +173,10 @@ int FontManager::registerFont (uint32_t fontnum, const string &name, uint32_t ch unique_ptr<Font> newfont; const int newid = _fonts.size(); // the new font gets this ID - Name2IdMap::iterator it = _name2id.find(name); + auto it = _name2id.find(name); if (it != _name2id.end()) { // font with same name already registered? const auto &font = _fonts[it->second]; - newfont.reset(font->clone(dsize, ssize)); + newfont = font->clone(dsize, ssize); } else { string filename = name; @@ -189,12 +188,12 @@ int FontManager::registerFont (uint32_t fontnum, const string &name, uint32_t ch } // try to find font file with the exact given name if (filename.rfind(".") != string::npos) - newfont.reset(create_font(filename, name, fontindex, checksum, dsize, ssize)); + newfont = create_font(filename, name, fontindex, checksum, dsize, ssize); else { // try various font file formats if the given file has no extension const char *exts[] = {"pfb", "otf", "ttc", "ttf", "vf", "mf", 0}; for (const char **p = exts; *p && !newfont; ++p) - newfont.reset(create_font(filename+"."+*p, name, fontindex, checksum, dsize, ssize)); + newfont = create_font(filename+"."+*p, name, fontindex, checksum, dsize, ssize); } if (newfont) { if (!newfont->findAndAssignBaseFontMap()) @@ -204,7 +203,7 @@ int FontManager::registerFont (uint32_t fontnum, const string &name, uint32_t ch } else { // create dummy font as a placeholder if the proper font is not available - newfont.reset(new EmptyFont(name)); + newfont = util::make_unique<EmptyFont>(name); if (filename.rfind(".") == string::npos) filename += ".mf"; // print warning message about missing font file (only once for each filename) @@ -262,10 +261,10 @@ int FontManager::registerFont (uint32_t fontnum, string filename, int fontIndex, const char *path = filename.c_str(); unique_ptr<Font> newfont; const int newid = _fonts.size(); // the new font gets this ID - Name2IdMap::iterator it = _name2id.find(fontname); + auto it = _name2id.find(fontname); if (it != _name2id.end()) { // font with same name already registered? if (NativeFont *font = dynamic_cast<NativeFont*>(_fonts[it->second].get())) - newfont.reset(font->clone(ptsize, style, color)); + newfont = font->clone(ptsize, style, color); } else { if (!FileSystem::exists(path)) @@ -276,7 +275,7 @@ int FontManager::registerFont (uint32_t fontnum, string filename, int fontIndex, } if (!newfont) { // create dummy font as a placeholder if the proper font is not available - newfont.reset(new EmptyFont(filename)); + newfont = util::make_unique<EmptyFont>(filename); // print warning message about missing font file (only once for each filename) static set<string> missing_fonts; if (missing_fonts.find(filename) == missing_fonts.end()) { diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.hpp index ade32bec26c..49aece6fc62 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.hpp @@ -2,7 +2,7 @@ ** FontManager.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,12 +21,12 @@ #ifndef FONTMANAGER_HPP #define FONTMANAGER_HPP -#include <map> #include <memory> #include <ostream> #include <set> #include <string> #include <stack> +#include <unordered_map> #include <vector> #include "Color.hpp" #include "FontStyle.hpp" @@ -43,11 +43,11 @@ class VirtualFont; * appear anywhere in the output. */ class FontManager { - typedef std::map<uint32_t,int> Num2IdMap; - typedef std::map<std::string,int> Name2IdMap; - typedef std::map<const VirtualFont*,Num2IdMap> VfNum2IdMap; - typedef std::map<const VirtualFont*, uint32_t> VfFirstFontMap; - typedef std::stack<VirtualFont*> VfStack; + using Num2IdMap = std::unordered_map<uint32_t,int>; + using Name2IdMap = std::unordered_map<std::string,int>; + using VfNum2IdMap = std::unordered_map<const VirtualFont*,Num2IdMap>; + using VfFirstFontMap = std::unordered_map<const VirtualFont*,uint32_t>; + using VfStack = std::stack<VirtualFont*>; public: static FontManager& instance (); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.cpp index e91d9c7eaa6..b8293a14361 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.cpp @@ -2,7 +2,7 @@ ** FontMap.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <algorithm> #include <cstring> #include <fstream> @@ -32,6 +31,7 @@ #include "MapLine.hpp" #include "Message.hpp" #include "Subfont.hpp" +#include "utility.hpp" using namespace std; @@ -164,12 +164,12 @@ bool FontMap::append (const MapLine &mapline) { if (mapline.sfd()) mapline.sfd()->subfonts(subfonts); else - subfonts.push_back(0); + subfonts.push_back(nullptr); for (Subfont *subfont : subfonts) { string fontname = mapline.texname()+(subfont ? subfont->id() : ""); auto it = _entries.find(fontname); if (it == _entries.end()) { - _entries[fontname].reset(new Entry(mapline, subfont)); + _entries.emplace(fontname, util::make_unique<Entry>(mapline, subfont)); appended = true; } } @@ -193,12 +193,12 @@ bool FontMap::replace (const MapLine &mapline) { if (mapline.sfd()) mapline.sfd()->subfonts(subfonts); else - subfonts.push_back(0); + subfonts.push_back(nullptr); for (Subfont *subfont : subfonts) { string fontname = mapline.texname()+(subfont ? subfont->id() : ""); auto it = _entries.find(fontname); if (it == _entries.end()) - _entries[fontname].reset(new Entry(mapline, subfont)); + _entries.emplace(fontname, util::make_unique<Entry>(mapline, subfont)); else if (!it->second->locked) *it->second = Entry(mapline, subfont); } @@ -217,7 +217,7 @@ bool FontMap::remove (const MapLine &mapline) { if (mapline.sfd()) mapline.sfd()->subfonts(subfonts); else - subfonts.push_back(0); + subfonts.push_back(nullptr); for (const Subfont *subfont : subfonts) { string fontname = mapline.texname()+(subfont ? subfont->id() : ""); auto it = _entries.find(fontname); @@ -245,7 +245,7 @@ void FontMap::readdir (const string &dirname) { while (const char *fname = dir.read(Directory::ET_FILE)) { if (strlen(fname) >= 4 && strcmp(fname+strlen(fname)-4, ".map") == 0) { string path = dirname + "/" + fname; - read(path.c_str()); + read(path); } } } @@ -257,7 +257,7 @@ void FontMap::readdir (const string &dirname) { const FontMap::Entry* FontMap::lookup (const string &fontname) const { auto it = _entries.find(fontname); if (it == _entries.end()) - return 0; + return nullptr; return it->second.get(); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.hpp index 103bb6aa89a..09344b68fc3 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.hpp @@ -2,7 +2,7 @@ ** FontMap.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,23 +21,20 @@ #ifndef FONTMAP_HPP #define FONTMAP_HPP -#include <map> #include <memory> #include <ostream> #include <string> +#include <unordered_map> #include "FontStyle.hpp" - struct FontEncoding; class MapLine; class Subfont; -class FontMap -{ +class FontMap { public: - struct Entry - { - Entry (const MapLine &mapline, Subfont *subfont=0); + struct Entry { + Entry (const MapLine &mapline, Subfont *subfont=nullptr); Entry (const Entry &entry) =delete; Entry (Entry &&entry) =default; Entry& operator = (Entry &&entry) =default; @@ -71,7 +68,7 @@ class FontMap FontMap () =default; private: - std::map<std::string,std::unique_ptr<Entry>> _entries; + std::unordered_map<std::string,std::unique_ptr<Entry>> _entries; }; #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.cpp index 375062f7f0a..87a03599795 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.cpp @@ -2,7 +2,7 @@ ** FontMetrics.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,23 +18,24 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <fstream> +#include <memory> #include "FileFinder.hpp" #include "FontMetrics.hpp" #include "JFM.hpp" +#include "utility.hpp" using namespace std; -FontMetrics* FontMetrics::read (const char *fontname) { - const char *path = FileFinder::instance().lookup(string(fontname) + ".tfm"); +unique_ptr<FontMetrics> FontMetrics::read (const string &fontname) { + const char *path = FileFinder::instance().lookup(fontname + ".tfm"); ifstream ifs(path, ios::binary); if (!ifs) - return 0; + return unique_ptr<FontMetrics>(); uint16_t id = 256*ifs.get(); id += ifs.get(); if (id == 9 || id == 11) // Japanese font metric file? - return new JFM(ifs); - return new TFM(ifs); + return util::make_unique<JFM>(ifs); + return util::make_unique<TFM>(ifs); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.hpp index cdf462a5a20..c9d8b2d37b7 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.hpp @@ -2,7 +2,7 @@ ** FontMetrics.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,10 +22,11 @@ #define FONTMETRICS_HPP #include <istream> +#include <memory> +#include <string> #include "MessageException.hpp" -struct FontMetrics -{ +struct FontMetrics { virtual ~FontMetrics () =default; virtual double getDesignSize () const =0; virtual double getCharWidth (int c) const =0; @@ -42,12 +43,11 @@ struct FontMetrics virtual uint32_t getChecksum () const =0; virtual uint16_t firstChar () const =0; virtual uint16_t lastChar () const =0; - static FontMetrics* read (const char *fontname); + static std::unique_ptr<FontMetrics> read (const std::string &fontname); }; -struct NullFontMetric : public FontMetrics -{ +struct NullFontMetric : public FontMetrics { double getDesignSize () const override {return 1;} double getCharWidth (int c) const override {return 0;} double getCharHeight (int c) const override {return 0;} @@ -66,8 +66,7 @@ struct NullFontMetric : public FontMetrics }; -struct FontMetricException : public MessageException -{ +struct FontMetricException : public MessageException { FontMetricException (const std::string &msg) : MessageException(msg) {} }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontStyle.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontStyle.hpp index fc2a952142a..8f0d17c8764 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontStyle.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontStyle.hpp @@ -2,7 +2,7 @@ ** FontStyle.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.cpp index 86a822db976..774bfeb40a4 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.cpp @@ -2,7 +2,7 @@ ** FontWriter.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,17 +18,17 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <algorithm> #include <array> #include "FontWriter.hpp" +#include "Message.hpp" #include "utility.hpp" using namespace std; bool FontWriter::AUTOHINT_FONTS = false; -const array<FontWriter::FontFormatInfo, 4> FontWriter::_formatInfos = {{ +const array<FontWriter::FontFormatInfo, 4> FontWriter::_formatInfos {{ {FontWriter::FontFormat::SVG, "image/svg+xml", "svg", "svg"}, {FontWriter::FontFormat::TTF, "application/x-font-ttf", "ttf", "truetype"}, {FontWriter::FontFormat::WOFF, "application/x-font-woff", "woff", "woff"}, @@ -38,7 +38,7 @@ const array<FontWriter::FontFormatInfo, 4> FontWriter::_formatInfos = {{ /** Returns the corresponding FontFormat for a given format name (e.g. "svg", "woff" etc.). */ FontWriter::FontFormat FontWriter::toFontFormat (string formatstr) { - util::tolower(formatstr); + formatstr = util::tolower(formatstr); for (const FontFormatInfo &info : _formatInfos) { if (formatstr == info.formatstr_short) return info.format; @@ -66,6 +66,8 @@ vector<string> FontWriter::supportedFormats () { } +#include <config.h> + #ifdef DISABLE_WOFF // dummy functions used if WOFF support is disabled FontWriter::FontWriter (const PhysicalFont &font) : _font(font) {} @@ -76,14 +78,14 @@ bool FontWriter::writeCSSFontFace (FontFormat format, const set<int> &charcodes, #include <fstream> #include <iomanip> #include <sstream> -#include <woff2_enc.h> -#include <file.h> +#include <woff2/encode.h> #include "ffwrapper.h" #include "Bezier.hpp" #include "FileSystem.hpp" #include "Font.hpp" #include "Glyph.hpp" -#include "utility.hpp" +#include "TTFAutohint.hpp" +#include "TrueTypeFont.hpp" FontWriter::FontWriter (const PhysicalFont &font) : _font(font) { @@ -183,6 +185,32 @@ static void writeSFD (const string &sfdname, const PhysicalFont &font, const set } +bool FontWriter::createTTFFile (const string &sfdname, const string &ttfname) const { + TTFAutohint autohinter; + if (!autohinter.available()) + return ff_sfd_to_ttf(sfdname.c_str(), ttfname.c_str(), AUTOHINT_FONTS); + + bool ok = ff_sfd_to_ttf(sfdname.c_str(), ttfname.c_str(), false); + if (ok && AUTOHINT_FONTS) { + string tmpname = ttfname+"-ah"; + int errnum = autohinter.autohint(ttfname, tmpname, true); + if (errnum) { + Message::wstream(true) << "failed to autohint font '" << _font.name() << "'"; + string msg = autohinter.lastErrorMessage(); + if (!msg.empty()) + Message::wstream() << " (" << msg << ")"; + // keep the unhinted TTF + FileSystem::remove(tmpname); + } + else { + FileSystem::remove(ttfname); + FileSystem::rename(tmpname, ttfname); + } + } + return ok; +} + + /** Creates a font file containing a given set of glyphs mapped to their Unicode points. * @param[in] format target font format * @param[in] charcodes character codes of the glyphs to be considered @@ -190,37 +218,22 @@ static void writeSFD (const string &sfdname, const PhysicalFont &font, const set * @return name of the created font file */ string FontWriter::createFontFile (FontFormat format, const set<int> &charcodes, GFGlyphTracer::Callback *cb) const { string tmpdir = FileSystem::tmpdir(); - string sfdname = tmpdir+_font.name()+"-tmp.sfd"; + string basename = tmpdir+_font.name()+"-tmp"; + string sfdname = basename+".sfd"; writeSFD(sfdname, _font, charcodes, cb); - bool ok = false; - string targetname = tmpdir+_font.name()+"-tmp."+fontFormatInfo(format)->formatstr_short; - switch (format) { - case FontFormat::TTF: - ok = ff_sfd_to_ttf(sfdname.c_str(), targetname.c_str(), AUTOHINT_FONTS); - break; - case FontFormat::WOFF: - ok = ff_sfd_to_woff(sfdname.c_str(), targetname.c_str(), AUTOHINT_FONTS); - break; - case FontFormat::WOFF2: { - string ttfname = tmpdir+_font.name()+".ttf"; - if (ff_sfd_to_ttf(sfdname.c_str(), ttfname.c_str(), AUTOHINT_FONTS)) { - string input = woff2::GetFileContent(ttfname); - const uint8_t* input_data = reinterpret_cast<const uint8_t*>(input.data()); - size_t output_size = woff2::MaxWOFF2CompressedSize(input_data, input.size()); - string output(output_size, 0); - uint8_t* output_data = reinterpret_cast<uint8_t*>(&output[0]); - woff2::WOFF2Params params; - if (woff2::ConvertTTFToWOFF2(input_data, input.size(), output_data, &output_size, params)) { - output.resize(output_size); - woff2::SetFileContents(targetname, output.begin(), output.end()); - ok = true; - } - if (!PhysicalFont::KEEP_TEMP_FILES) - FileSystem::remove(ttfname); - } - break; + string ttfname = basename+".ttf"; + string targetname = basename+"."+fontFormatInfo(format)->formatstr_short; + bool ok = createTTFFile(sfdname, ttfname); + if (ok) { + if (format == FontFormat::WOFF || format == FontFormat::WOFF2) { + TrueTypeFont ttf(ttfname); + if (format == FontFormat::WOFF) + ttf.writeWOFF(targetname); + else + ok = ttf.writeWOFF2(targetname); + if (!PhysicalFont::KEEP_TEMP_FILES) + FileSystem::remove(ttfname); } - default:; } if (!PhysicalFont::KEEP_TEMP_FILES) FileSystem::remove(sfdname); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.hpp index 05995200383..8b780d02ebc 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.hpp @@ -2,7 +2,7 @@ ** FontWriter.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -49,8 +49,8 @@ class FontWriter { const char *formatstr_short; const char *formatstr_long; }; - static const FontFormatInfo* fontFormatInfo (FontFormat format); + bool createTTFFile (const std::string &sfdname, const std::string &ttfname) const; private: const PhysicalFont &_font; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.cpp index 79b3d085782..425bc6494aa 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.cpp @@ -2,7 +2,7 @@ ** GFGlyphTracer.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include "GFGlyphTracer.hpp" using namespace std; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.hpp index 4ccad3fd19e..bbcebedd557 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.hpp @@ -2,7 +2,7 @@ ** GFGlyphTracer.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.cpp index ae58c1b8bf6..ddb306d612e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.cpp @@ -2,7 +2,7 @@ ** GFReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -28,8 +28,7 @@ using namespace std; -struct GFCommand -{ +struct GFCommand { void (GFReader::*method)(int); int numBytes; }; @@ -340,21 +339,21 @@ void GFReader::cmdNop (int) { /** Reads character locator (part of postamble) */ void GFReader::cmdCharLoc0 (int) { uint8_t c = readUnsigned(1); // character code mod 256 - uint8_t dm = readUnsigned(1); // + uint8_t dm = readUnsigned(1); // = dx/65536 int32_t w = readSigned(4); // (1<<24)*characterWidth/designSize - int32_t p = readSigned(4); // pointer to begin of (last) character data - int32_t dx = 65536*dm; - int32_t dy = 0; - _charInfoMap[c] = CharInfo(dx, dy, w, p); + int32_t p = readSigned(4); // pointer to begin of (last) character data + int32_t dx = 65536*dm; // horizontal escapement + int32_t dy = 0; // vertical escapement + _charInfoMap.emplace(c, CharInfo(dx, dy, w, p)); } /** Reads character locator (part of postamble) */ void GFReader::cmdCharLoc (int) { - uint32_t c = readUnsigned(1); // character code mod 256 + uint8_t c = readUnsigned(1); // character code mod 256 int32_t dx = readSigned(4); // horizontal escapement (scaled pixel units) int32_t dy = readSigned(4); // vertical escapement (scaled pixel units) int32_t w = readSigned(4); // (1<<24)*characterWidth/designSize int32_t p = readSigned(4); // pointer to begin of (last) character data - _charInfoMap[c] = CharInfo(dx, dy, w, p); + _charInfoMap.emplace(c, CharInfo(dx, dy, w, p)); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.hpp index 6ca0dc3fca1..85ee6ffd8fb 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.hpp @@ -2,7 +2,7 @@ ** GFReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,8 +22,8 @@ #define GFREADER_HPP #include <istream> -#include <map> #include <string> +#include <unordered_map> #include "Bitmap.hpp" #include "MessageException.hpp" @@ -101,7 +101,7 @@ class GFReader double _designSize; ///< designSize in PS points double _hppp, _vppp; ///< horizontal and vertical pixel per point uint32_t _checksum; - std::map<uint8_t,CharInfo> _charInfoMap; + std::unordered_map<uint8_t,CharInfo> _charInfoMap; bool _insideCharDef; ///< true if inside a character definition (between BOC and EOC) bool _penDown; }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.cpp index 66f16f05bff..cff950025d6 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.cpp @@ -2,7 +2,7 @@ ** GFTracer.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <fstream> #include <potracelib.h> #include "GFTracer.hpp" diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.hpp index 229ef2593fe..61c8fdd6e49 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.hpp @@ -2,7 +2,7 @@ ** GFTracer.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.cpp index 1798f35a1b5..5672a8b4eb0 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.cpp @@ -2,7 +2,7 @@ ** Ghostscript.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -51,13 +51,11 @@ static string get_path_from_registry () { mode |= KEY_WOW64_32KEY; #endif #endif - static const char *gs_companies[] = {"GPL", "GNU", "AFPL", "Aladdin"}; - for (size_t i=0; i < sizeof(gs_companies)/sizeof(char*); i++) { - const string reg_path = string("SOFTWARE\\") + gs_companies[i] + " Ghostscript"; - static HKEY reg_roots[] = {HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE}; - for (size_t j=0; j < sizeof(reg_roots)/sizeof(HKEY); j++) { + for (const char *gs_company : {"GPL", "GNU", "AFPL", "Aladdin"}) { + const string reg_path = string("SOFTWARE\\") + gs_company + " Ghostscript"; + for (HKEY reg_root : {HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE}) { HKEY hkey; - if (RegOpenKeyExA(reg_roots[j], reg_path.c_str(), 0, mode, &hkey) == ERROR_SUCCESS) { + if (RegOpenKeyExA(reg_root, reg_path.c_str(), 0, mode, &hkey) == ERROR_SUCCESS) { char subkey[16]; for (int k=0; RegEnumKeyA(hkey, k, subkey, 16) == ERROR_SUCCESS; k++) { istringstream iss(subkey); @@ -112,15 +110,19 @@ static string get_libgs (const string &fname) { // try to find libgs.so.X on the user's system const int abi_min=7, abi_max=9; // supported libgs ABI versions for (int i=abi_max; i >= abi_min; i--) { - ostringstream oss; #if defined(__CYGWIN__) - oss << "cyggs-" << i << ".dll"; + string dlname = "cyggs-" + to_string(i) + ".dll"; #else - oss << "libgs.so." << i; + string dlname = "libgs.so." + to_string(i); #endif - DLLoader loader(oss.str().c_str()); + DLLoader loader(dlname); if (loader.loaded()) - return oss.str(); + return dlname; +#if defined(__APPLE__) + dlname = "libgs." + to_string(i) + ".dylib"; + if (loader.loadLibrary(dlname)) + return dlname; +#endif } #endif // no appropriate library found @@ -133,7 +135,7 @@ static string get_libgs (const string &fname) { * constructor should only be used to call available() and revision(). */ Ghostscript::Ghostscript () #if !defined(HAVE_LIBGS) - : DLLoader(get_libgs(LIBGS_NAME).c_str()) + : DLLoader(get_libgs(LIBGS_NAME)) #endif { _inst = 0; @@ -146,7 +148,7 @@ Ghostscript::Ghostscript () * @param[in] caller this parameter is passed to all callback functions */ Ghostscript::Ghostscript (int argc, const char **argv, void *caller) #if !defined(HAVE_LIBGS) - : DLLoader(get_libgs(LIBGS_NAME).c_str()) + : DLLoader(get_libgs(LIBGS_NAME)) #endif { _inst = 0; @@ -194,7 +196,7 @@ bool Ghostscript::revision (gsapi_revision_t *r) { #if defined(HAVE_LIBGS) return (gsapi_revision(r, sizeof(gsapi_revision_t)) == 0); #else - if (PFN_gsapi_revision fn = (PFN_gsapi_revision)loadSymbol("gsapi_revision")) + if (auto fn = LOAD_SYMBOL(gsapi_revision)) return (fn(r, sizeof(gsapi_revision_t)) == 0); return false; #endif @@ -224,7 +226,7 @@ int Ghostscript::new_instance (void **psinst, void *caller) { #if defined(HAVE_LIBGS) return gsapi_new_instance(psinst, caller); #else - if (PFN_gsapi_new_instance fn = (PFN_gsapi_new_instance)loadSymbol("gsapi_new_instance")) + if (auto fn = LOAD_SYMBOL(gsapi_new_instance)) return fn(psinst, caller); *psinst = 0; return 0; @@ -238,7 +240,7 @@ void Ghostscript::delete_instance () { #if defined(HAVE_LIBGS) gsapi_delete_instance(_inst); #else - if (PFN_gsapi_delete_instance fn = (PFN_gsapi_delete_instance)loadSymbol("gsapi_delete_instance")) + if (auto fn = LOAD_SYMBOL(gsapi_delete_instance)) fn(_inst); #endif } @@ -249,7 +251,7 @@ int Ghostscript::exit () { #if defined(HAVE_LIBGS) return gsapi_exit(_inst); #else - if (PFN_gsapi_exit fn = (PFN_gsapi_exit)loadSymbol("gsapi_exit")) + if (auto fn = LOAD_SYMBOL(gsapi_exit)) return fn(_inst); return 0; #endif @@ -264,7 +266,7 @@ int Ghostscript::set_stdio (Stdin in, Stdout out, Stderr err) { #if defined(HAVE_LIBGS) return gsapi_set_stdio(_inst, in, out, err); #else - if (PFN_gsapi_set_stdio fn = (PFN_gsapi_set_stdio)loadSymbol("gsapi_set_stdio")) + if (auto fn = LOAD_SYMBOL(gsapi_set_stdio)) return fn(_inst, in, out, err); return 0; #endif @@ -279,7 +281,7 @@ int Ghostscript::init_with_args (int argc, char **argv) { #if defined(HAVE_LIBGS) return gsapi_init_with_args(_inst, argc, argv); #else - if (PFN_gsapi_init_with_args fn = (PFN_gsapi_init_with_args)loadSymbol("gsapi_init_with_args")) + if (auto fn = LOAD_SYMBOL(gsapi_init_with_args)) return fn(_inst, argc, argv); return 0; #endif @@ -291,7 +293,7 @@ int Ghostscript::run_string_begin (int user_errors, int *pexit_code) { #if defined(HAVE_LIBGS) return gsapi_run_string_begin(_inst, user_errors, pexit_code); #else - if (PFN_gsapi_run_string_begin fn = (PFN_gsapi_run_string_begin)loadSymbol("gsapi_run_string_begin")) + if (auto fn = LOAD_SYMBOL(gsapi_run_string_begin)) return fn(_inst, user_errors, pexit_code); *pexit_code = 0; return 0; @@ -310,7 +312,7 @@ int Ghostscript::run_string_continue (const char *str, unsigned length, int user #if defined(HAVE_LIBGS) return gsapi_run_string_continue(_inst, str, length, user_errors, pexit_code); #else - if (PFN_gsapi_run_string_continue fn = (PFN_gsapi_run_string_continue)loadSymbol("gsapi_run_string_continue")) + if (auto fn = LOAD_SYMBOL(gsapi_run_string_continue)) return fn(_inst, str, length, user_errors, pexit_code); *pexit_code = 0; return 0; @@ -323,7 +325,7 @@ int Ghostscript::run_string_end (int user_errors, int *pexit_code) { #if defined(HAVE_LIBGS) return gsapi_run_string_end(_inst, user_errors, pexit_code); #else - if (PFN_gsapi_run_string_end fn = (PFN_gsapi_run_string_end)loadSymbol("gsapi_run_string_end")) + if (auto fn = LOAD_SYMBOL(gsapi_run_string_end)) return fn(_inst, user_errors, pexit_code); *pexit_code = 0; return 0; @@ -336,7 +338,7 @@ const char* Ghostscript::error_name (int code) { code = -code; const char *error_names[] = { ERROR_NAMES }; if (code == 0 || (size_t)code > sizeof(error_names)/sizeof(error_names[0])) - return 0; + return nullptr; #if defined(HAVE_LIBGS) // use array defined in libgs to avoid linking the error strings into the binary return gs_error_names[code-1]; @@ -344,9 +346,9 @@ const char* Ghostscript::error_name (int code) { // gs_error_names is private in the Ghostscript DLL so we can't access it here return error_names[code-1]; #else - if (const char **error_names = (const char**)loadSymbol("gs_error_names")) + if (auto error_names = loadSymbol<const char**>("gs_error_names")) return error_names[code-1]; - return 0; + return nullptr; #endif } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.hpp index 01f4b3abea2..258055f7672 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.hpp @@ -2,7 +2,7 @@ ** Ghostscript.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -40,9 +40,9 @@ #if defined(DISABLE_GS) struct Ghostscript { - typedef int (GSDLLCALLPTR Stdin) (void *caller, char *buf, int len); - typedef int (GSDLLCALLPTR Stdout) (void *caller, const char *str, int len); - typedef int (GSDLLCALLPTR Stderr) (void *caller, const char *str, int len); + using Stdin = int (GSDLLCALLPTR)(void *caller, char *buf, int len); + using Stdout = int (GSDLLCALLPTR)(void *caller, const char *str, int len); + using Stderr = int (GSDLLCALLPTR)(void *caller, const char *str, int len); Ghostscript () {} Ghostscript (int argc, const char **argv, void *caller=0) {} @@ -67,9 +67,9 @@ class Ghostscript #endif { public: - typedef int (GSDLLCALLPTR Stdin) (void *caller, char *buf, int len); - typedef int (GSDLLCALLPTR Stdout) (void *caller, const char *str, int len); - typedef int (GSDLLCALLPTR Stderr) (void *caller, const char *str, int len); + using Stdin = int (GSDLLCALLPTR)(void *caller, char *buf, int len); + using Stdout = int (GSDLLCALLPTR)(void *caller, const char *str, int len); + using Stderr = int (GSDLLCALLPTR)(void *caller, const char *str, int len); public: Ghostscript (); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Glyph.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Glyph.hpp index cc593a269aa..d2ec97e1c1b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Glyph.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Glyph.hpp @@ -2,7 +2,7 @@ ** Glyph.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,6 +23,6 @@ #include "GraphicsPath.hpp" -typedef GraphicsPath<int32_t> Glyph; +using Glyph = GraphicsPath<int32_t>; #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/GlyphTracerMessages.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/GlyphTracerMessages.hpp index b77a582796b..f37e6f06860 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/GlyphTracerMessages.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/GlyphTracerMessages.hpp @@ -2,7 +2,7 @@ ** GlyphTracerMessages.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPath.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPath.hpp index 010302a2257..bcf781256b7 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPath.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPath.hpp @@ -2,7 +2,7 @@ ** GraphicsPath.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,8 +22,8 @@ #define GRAPHICSPATH_HPP #include <cctype> +#include <deque> #include <ostream> -#include <vector> #include "BoundingBox.hpp" #include "Matrix.hpp" #include "Pair.hpp" @@ -36,7 +36,7 @@ class GraphicsPath friend class PathClipper; public: enum class WindingRule {EVEN_ODD, NON_ZERO}; - typedef Pair<T> Point; + using Point = Pair<T>; struct Command { enum class Type {MOVETO, LINETO, CONICTO, CUBICTO, CLOSEPATH}; @@ -320,7 +320,7 @@ class GraphicsPath void iterate (Actions &actions, bool optimize) const; private: - std::vector<Command> _commands; + std::deque<Command> _commands; WindingRule _windingRule; }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.cpp index e8b11bcb434..86f0ef022bf 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.cpp @@ -2,7 +2,7 @@ ** HtmlSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,64 +18,25 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> -#include <cassert> -#include <sstream> #include "HtmlSpecialHandler.hpp" +#include "HyperlinkManager.hpp" #include "InputReader.hpp" -#include "Message.hpp" #include "SpecialActions.hpp" -#include "SVGTree.hpp" using namespace std; -// variable to select the link marker variant (none, underlined, boxed, or colored background) -HtmlSpecialHandler::MarkerType HtmlSpecialHandler::MARKER_TYPE = HtmlSpecialHandler::MarkerType::LINE; -Color HtmlSpecialHandler::LINK_BGCOLOR; -Color HtmlSpecialHandler::LINK_LINECOLOR; -bool HtmlSpecialHandler::USE_LINECOLOR = false; - void HtmlSpecialHandler::preprocess (const char *, istream &is, SpecialActions &actions) { StreamInputReader ir(is); ir.skipSpace(); // collect page number and ID of named anchors - map<string,string> attribs; + unordered_map<string,string> attribs; if (ir.check("<a ") && ir.parseAttributes(attribs, '"') > 0) { - map<string,string>::iterator it; + unordered_map<string,string>::iterator it; if ((it = attribs.find("name")) != attribs.end()) - preprocessNameAnchor(it->second, actions); + HyperlinkManager::instance().addNameAchor(it->second, actions.getCurrentPageNumber()); else if ((it = attribs.find("href")) != attribs.end()) - preprocessHrefAnchor(it->second); - } -} - - -void HtmlSpecialHandler::preprocessNameAnchor (const string &name, SpecialActions &actions) { - NamedAnchors::iterator it = _namedAnchors.find(name); - if (it == _namedAnchors.end()) { // anchor completely undefined? - int id = static_cast<int>(_namedAnchors.size())+1; - _namedAnchors[name] = NamedAnchor(actions.getCurrentPageNumber(), id, 0); - } - else if (it->second.id < 0) { // anchor referenced but not defined yet? - it->second.id *= -1; - it->second.pageno = actions.getCurrentPageNumber(); - } - else - Message::wstream(true) << "named hyperref anchor '" << name << "' redefined\n"; -} - - -void HtmlSpecialHandler::preprocessHrefAnchor (const string &uri) { - if (uri[0] != '#') - return; - string name = uri.substr(1); - NamedAnchors::iterator it = _namedAnchors.find(name); - if (it != _namedAnchors.end()) // anchor already defined? - it->second.referenced = true; - else { - int id = static_cast<int>(_namedAnchors.size())+1; - _namedAnchors[name] = NamedAnchor(0, -id, 0, true); + HyperlinkManager::instance().addHrefAnchor(it->second); } } @@ -84,218 +45,42 @@ bool HtmlSpecialHandler::process (const char *, istream &is, SpecialActions &act _active = true; StreamInputReader ir(is); ir.skipSpace(); - map<string,string> attribs; - map<string,string>::iterator it; + unordered_map<string,string> attribs; + unordered_map<string,string>::iterator it; if (ir.check("<a ") && ir.parseAttributes(attribs, '"') > 0) { if ((it = attribs.find("href")) != attribs.end()) // <a href="URI"> - processHrefAnchor(it->second, actions); + HyperlinkManager::instance().createLink(it->second, actions); else if ((it = attribs.find("name")) != attribs.end()) // <a name="ID"> - processNameAnchor(it->second, actions); + HyperlinkManager::instance().setActiveNameAnchor(it->second, actions); else return false; // none or only invalid attributes } else if (ir.check("</a>")) - closeAnchor(actions); + HyperlinkManager::instance().closeAnchor(actions); else if (ir.check("<img src=")) { } else if (ir.check("<base ") && ir.parseAttributes(attribs, '"') > 0 && (it = attribs.find("href")) != attribs.end()) - _base = it->second; + HyperlinkManager::instance().setBaseUrl(it->second); return true; } -/** Handles anchors with href attribute: <a href="URI">...</a> - * @param uri value of href attribute */ -void HtmlSpecialHandler::processHrefAnchor (string uri, SpecialActions &actions) { - closeAnchor(actions); - string name; - if (uri[0] == '#') { // reference to named anchor? - name = uri.substr(1); - NamedAnchors::iterator it = _namedAnchors.find(name); - if (it == _namedAnchors.end() || it->second.id < 0) - Message::wstream(true) << "reference to undefined anchor '" << name << "'\n"; - else { - int id = it->second.id; - uri = "#loc"+XMLString(id); - if (actions.getCurrentPageNumber() != it->second.pageno) { - ostringstream oss; - oss << actions.getSVGFilename(it->second.pageno) << uri; - uri = oss.str(); - } - } - } - if (!_base.empty() && uri.find("://") != string::npos) { - if (*_base.rbegin() != '/' && uri[0] != '/' && uri[0] != '#') - uri = "/" + uri; - uri = _base + uri; - } - XMLElementNode *anchor = new XMLElementNode("a"); - anchor->addAttribute("xlink:href", uri); - anchor->addAttribute("xlink:title", XMLString(name.empty() ? uri : name, false)); - actions.pushContextElement(anchor); - actions.bbox("{anchor}", true); // start computing the bounding box of the linked area - _depthThreshold = actions.getDVIStackDepth(); - _anchorType = AnchorType::HREF; -} - - -/** Handles anchors with name attribute: <a name="NAME">...</a> - * @param name value of name attribute */ -void HtmlSpecialHandler::processNameAnchor (const string &name, SpecialActions &actions) { - closeAnchor(actions); - NamedAnchors::iterator it = _namedAnchors.find(name); - assert(it != _namedAnchors.end()); - it->second.pos = actions.getY(); - _anchorType = AnchorType::NAME; -} - - -/** Handles the closing tag (</a> of the current anchor element. */ -void HtmlSpecialHandler::closeAnchor (SpecialActions &actions) { - if (_anchorType == AnchorType::HREF) { - markLinkedBox(actions); - actions.popContextElement(); - _depthThreshold = 0; - } - _anchorType = AnchorType::NONE; -} - - -/** Marks a single rectangular area of the linked part of the document with a line or - * a box so that it's noticeable by the user. Additionally, an invisible rectangle is - * placed over this area in order to avoid flickering of the mouse cursor when moving - * it over the hyperlinked area. */ -void HtmlSpecialHandler::markLinkedBox (SpecialActions &actions) { - const BoundingBox &bbox = actions.bbox("{anchor}"); - if (bbox.width() > 0 && bbox.height() > 0) { // does the bounding box extend in both dimensions? - if (MARKER_TYPE != MarkerType::NONE) { - const double linewidth = min(0.5, bbox.height()/15); - XMLElementNode *rect = new XMLElementNode("rect"); - double x = bbox.minX(); - double y = bbox.maxY()+linewidth; - double w = bbox.width(); - double h = linewidth; - const Color &linecolor = USE_LINECOLOR ? LINK_LINECOLOR : actions.getColor(); - if (MARKER_TYPE == MarkerType::LINE) - rect->addAttribute("fill", linecolor.svgColorString()); - else { - x -= linewidth; - y = bbox.minY()-linewidth; - w += 2*linewidth; - h += bbox.height()+linewidth; - if (MARKER_TYPE == MarkerType::BGCOLOR) { - rect->addAttribute("fill", LINK_BGCOLOR.svgColorString()); - if (USE_LINECOLOR) { - rect->addAttribute("stroke", linecolor.svgColorString()); - rect->addAttribute("stroke-width", linewidth); - } - } - else { // LM_BOX - rect->addAttribute("fill", "none"); - rect->addAttribute("stroke", linecolor.svgColorString()); - rect->addAttribute("stroke-width", linewidth); - } - } - rect->addAttribute("x", x); - rect->addAttribute("y", y); - rect->addAttribute("width", w); - rect->addAttribute("height", h); - actions.prependToPage(rect); - if (MARKER_TYPE == MarkerType::BOX || MARKER_TYPE == MarkerType::BGCOLOR) { - // slightly enlarge the boxed area - x -= linewidth; - y -= linewidth; - w += 2*linewidth; - h += 2*linewidth; - } - actions.embed(BoundingBox(x, y, x+w, y+h)); - } - // Create an invisible rectangle around the linked area so that it's easier to access. - // This is only necessary when using paths rather than real text elements together with fonts. - if (!SVGTree::USE_FONTS) { - XMLElementNode *rect = new XMLElementNode("rect"); - rect->addAttribute("x", bbox.minX()); - rect->addAttribute("y", bbox.minY()); - rect->addAttribute("width", bbox.width()); - rect->addAttribute("height", bbox.height()); - rect->addAttribute("fill", "white"); - rect->addAttribute("fill-opacity", 0); - actions.appendToPage(rect); - } - } -} - - /** This method is called every time the DVI position changes. */ void HtmlSpecialHandler::dviMovedTo (double x, double y, SpecialActions &actions) { - if (_active && _anchorType != AnchorType::NONE) { - // Start a new box if the current depth of the DVI stack underruns - // the initial threshold which indicates a line break. - if (actions.getDVIStackDepth() < _depthThreshold) { - markLinkedBox(actions); - _depthThreshold = actions.getDVIStackDepth(); - actions.bbox("{anchor}", true); // start a new box on the new line - } - } + if (_active) + HyperlinkManager::instance().checkNewLine(actions); } void HtmlSpecialHandler::dviEndPage (unsigned pageno, SpecialActions &actions) { if (_active) { - // create views for all collected named anchors defined on the recent page - const BoundingBox &pagebox = actions.bbox(); - for (auto &stranchorpair : _namedAnchors) { - if (stranchorpair.second.pageno == pageno && stranchorpair.second.referenced) { // current anchor referenced? - ostringstream oss; - oss << pagebox.minX() << ' ' << stranchorpair.second.pos << ' ' - << pagebox.width() << ' ' << pagebox.height(); - XMLElementNode *view = new XMLElementNode("view"); - view->addAttribute("id", "loc"+XMLString(stranchorpair.second.id)); - view->addAttribute("viewBox", oss.str()); - actions.appendToDefs(view); - } - } - closeAnchor(actions); + HyperlinkManager::instance().createViews(pageno, actions); _active = false; } } -/** Sets the appearance of the link markers. - * @param[in] marker string specifying the marker (format: type[:linecolor]) - * @return true on success */ -bool HtmlSpecialHandler::setLinkMarker (const string &marker) { - string type; // "none", "box", "line", or a background color specifier - string color; // optional line color specifier - size_t seppos = marker.find(":"); - if (seppos == string::npos) - type = marker; - else { - type = marker.substr(0, seppos); - color = marker.substr(seppos+1); - } - if (type.empty() || type == "none") - MARKER_TYPE = MarkerType::NONE; - else if (type == "line") - MARKER_TYPE = MarkerType::LINE; - else if (type == "box") - MARKER_TYPE = MarkerType::BOX; - else { - if (!LINK_BGCOLOR.setPSName(type, false)) - return false; - MARKER_TYPE = MarkerType::BGCOLOR; - } - USE_LINECOLOR = false; - if (MARKER_TYPE != MarkerType::NONE && !color.empty()) { - if (!LINK_LINECOLOR.setPSName(color, false)) - return false; - USE_LINECOLOR = true; - } - return true; -} - - -const char** HtmlSpecialHandler::prefixes () const { - static const char *pfx[] = {"html:", 0}; +const vector<const char*> HtmlSpecialHandler::prefixes () const { + const vector<const char*> pfx {"html:"}; return pfx; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.hpp index 6d64a93b879..125f69192fd 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.hpp @@ -2,7 +2,7 @@ ** HtmlSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,59 +21,28 @@ #ifndef HTMLSPECIALHANDLER_HPP #define HTMLSPECIALHANDLER_HPP -#include <map> #include <string> +#include <unordered_map> #include "Color.hpp" #include "SpecialHandler.hpp" class SpecialActions; -class HtmlSpecialHandler : public SpecialHandler, public DVIEndPageListener, public DVIPositionListener -{ - struct NamedAnchor { - NamedAnchor () : pageno(0), id(0), pos(0), referenced(false) {} - NamedAnchor (unsigned pn, int i, double p, bool r=false) : pageno(pn), id(i), pos(p), referenced(r) {} - unsigned pageno; ///< page number where the anchor is located - int id; ///< unique numerical ID (< 0 if anchor is undefined yet) - double pos; ///< vertical position of named anchor (in PS point units) - bool referenced; ///< true if a reference to this anchor exists - }; - - enum class AnchorType {NONE, HREF, NAME}; - typedef std::map<std::string, NamedAnchor> NamedAnchors; - +class HtmlSpecialHandler : public SpecialHandler, public DVIEndPageListener, public DVIPositionListener { public: - HtmlSpecialHandler () : _active(false), _anchorType(AnchorType::NONE), _depthThreshold(0) {} + HtmlSpecialHandler () : _active(false) {} void preprocess (const char *prefix, std::istream &is, SpecialActions &actions) override; bool process (const char *prefix, std::istream &is, SpecialActions &actions) override; const char* name () const override {return "html";} const char* info () const override {return "hyperref specials";} - const char** prefixes () const override; - - static bool setLinkMarker (const std::string &marker); + const std::vector<const char*> prefixes () const override; protected: - void preprocessHrefAnchor (const std::string &uri); - void preprocessNameAnchor (const std::string &name, SpecialActions &actions); - void processHrefAnchor (std::string uri, SpecialActions &actions); - void processNameAnchor (const std::string &name, SpecialActions &actions); void dviEndPage (unsigned pageno, SpecialActions &actions) override; void dviMovedTo (double x, double y, SpecialActions &actions) override; - void closeAnchor (SpecialActions &actions); - void markLinkedBox (SpecialActions &actions); - - enum class MarkerType {NONE, LINE, BOX, BGCOLOR}; - static MarkerType MARKER_TYPE; ///< selects how to mark linked areas - static Color LINK_BGCOLOR; ///< background color if linkmark type == LT_BGCOLOR - static Color LINK_LINECOLOR; ///< line color if linkmark type is LM_LINE or LM_BOX - static bool USE_LINECOLOR; ///< if true, LINK_LINECOLOR is applied private: bool _active; - AnchorType _anchorType; ///< type of active anchor - int _depthThreshold; ///< break anchor box if the DVI stack depth underruns this threshold - std::string _base; ///< base URL that is prepended to all relative targets - NamedAnchors _namedAnchors; ///< information about all named anchors processed }; #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.cpp new file mode 100644 index 00000000000..1c41c22a5db --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.cpp @@ -0,0 +1,265 @@ +/************************************************************************* +** HyperlinkManager.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#include <sstream> +#include "HyperlinkManager.hpp" +#include "Message.hpp" +#include "SpecialActions.hpp" +#include "SVGTree.hpp" +#include "utility.hpp" +#include "XMLNode.hpp" + +using namespace std; + +// variable to select the link marker variant (none, underlined, boxed, or colored background) +HyperlinkManager::MarkerType HyperlinkManager::MARKER_TYPE = MarkerType::LINE; +Color HyperlinkManager::LINK_BGCOLOR; +Color HyperlinkManager::LINK_LINECOLOR; +HyperlinkManager::ColorSource HyperlinkManager::COLORSOURCE = ColorSource::DEFAULT; + + +HyperlinkManager& HyperlinkManager::instance () { + static HyperlinkManager instance; + return instance; +} + + +void HyperlinkManager::addHrefAnchor (const string &uri) { + if (uri.empty() || uri[0] != '#') + return; + string name = uri.substr(1); + auto it = _namedAnchors.find(name); + if (it != _namedAnchors.end()) // anchor already defined? + it->second.referenced = true; + else { + int id = static_cast<int>(_namedAnchors.size())+1; + _namedAnchors.emplace(name, NamedAnchor(0, -id, 0, true)); + } +} + + +void HyperlinkManager::addNameAchor (const string &name, int pageno) { + if (name.empty()) + return; + auto it = _namedAnchors.find(name); + if (it == _namedAnchors.end()) { // anchor completely undefined? + int id = static_cast<int>(_namedAnchors.size())+1; + _namedAnchors.emplace(name, NamedAnchor(pageno, id, 0)); + } + else if (it->second.id >= 0) // anchor already defined? + Message::wstream(true) << "named hyperref anchor '" << name << "' redefined\n"; + else { + // anchor referenced but not defined yet? + it->second.id *= -1; + it->second.pageno = pageno; + } +} + + +void HyperlinkManager::setActiveNameAnchor (const string &name, SpecialActions &actions) { + auto it = _namedAnchors.find(name); + if (it != _namedAnchors.end()) { + closeAnchor(actions); + it->second.pos = actions.getY(); + _anchorType = AnchorType::NAME; + } +} + + +void HyperlinkManager::createLink (string uri, SpecialActions &actions) { + closeAnchor(actions); + string name; + if (uri[0] == '#') { // reference to named anchor? + name = uri.substr(1); + NamedAnchors::iterator it = _namedAnchors.find(name); + if (it == _namedAnchors.end() || it->second.id < 0) + Message::wstream(true) << "reference to undefined anchor '" << name << "'\n"; + else { + int id = it->second.id; + uri = "#loc"+XMLString(id); + if (actions.getCurrentPageNumber() != it->second.pageno) { + ostringstream oss; + oss << actions.getSVGFilename(it->second.pageno) << uri; + uri = oss.str(); + } + } + } + if (!_base.empty() && uri.find("://") != string::npos) { + if (*_base.rbegin() != '/' && uri[0] != '/' && uri[0] != '#') + uri = "/" + uri; + uri = _base + uri; + } + auto anchorNode = util::make_unique<XMLElementNode>("a"); + anchorNode->addAttribute("xlink:href", uri); + anchorNode->addAttribute("xlink:title", XMLString(name.empty() ? uri : name, false)); + actions.pushContextElement(std::move(anchorNode)); + actions.bbox("{anchor}", true); // start computing the bounding box of the linked area + _depthThreshold = actions.getDVIStackDepth(); + _anchorType = AnchorType::HREF; +} + + +void HyperlinkManager::closeAnchor (SpecialActions &actions) { + if (_anchorType == AnchorType::HREF) { + markLinkedBox(actions); + actions.popContextElement(); + _depthThreshold = 0; + } + _anchorType = AnchorType::NONE; +} + + +void HyperlinkManager::checkNewLine (SpecialActions &actions) { + if (_anchorType == AnchorType::NONE) + return; + // Start a new box if the current depth of the DVI stack underruns + // the initial threshold which indicates a line break. + if (actions.getDVIStackDepth() < _depthThreshold) { + markLinkedBox(actions); + _depthThreshold = actions.getDVIStackDepth(); + actions.bbox("{anchor}", true); // start a new box on the new line + } +} + + +/** Marks a single rectangular area of the linked part of the document with a line or + * a box so that it's noticeable by the user. Additionally, an invisible rectangle is + * placed over this area in order to avoid flickering of the mouse cursor when moving + * it over the hyperlinked area. */ +void HyperlinkManager::markLinkedBox (SpecialActions &actions) { + const BoundingBox &bbox = actions.bbox("{anchor}"); + if (bbox.width() > 0 && bbox.height() > 0) { // does the bounding box extend in both dimensions? + if (MARKER_TYPE != MarkerType::NONE) { + const double linewidth = _linewidth >= 0 ? _linewidth : min(0.5, bbox.height()/15); + auto rect = util::make_unique<XMLElementNode>("rect"); + double x = bbox.minX(); + double y = bbox.maxY()+linewidth; + double w = bbox.width(); + double h = linewidth; + const Color linecolor = COLORSOURCE == ColorSource::DEFAULT ? actions.getColor() : LINK_LINECOLOR; + if (MARKER_TYPE == MarkerType::LINE) + rect->addAttribute("fill", linecolor.svgColorString()); + else { + const double offset = _linewidth < 0 ? linewidth : 0 ; + x -= offset; + y = bbox.minY()-offset; + w += 2*offset; + h += bbox.height()+offset; + if (MARKER_TYPE == MarkerType::BGCOLOR) { + rect->addAttribute("fill", LINK_BGCOLOR.svgColorString()); + if (COLORSOURCE != ColorSource::DEFAULT) { + rect->addAttribute("stroke", linecolor.svgColorString()); + rect->addAttribute("stroke-width", linewidth); + } + } + else { // LM_BOX + rect->addAttribute("fill", "none"); + rect->addAttribute("stroke", linecolor.svgColorString()); + rect->addAttribute("stroke-width", linewidth); + } + } + rect->addAttribute("x", x); + rect->addAttribute("y", y); + rect->addAttribute("width", w); + rect->addAttribute("height", h); + actions.prependToPage(std::move(rect)); + if (MARKER_TYPE == MarkerType::BOX || MARKER_TYPE == MarkerType::BGCOLOR) { + // slightly enlarge the boxed area + x -= linewidth; + y -= linewidth; + w += 2*linewidth; + h += 2*linewidth; + } + actions.embed(BoundingBox(x, y, x+w, y+h)); + } + // Create an invisible rectangle around the linked area so that it's easier to access. + // This is only necessary when using paths rather than real text elements together with fonts. + if (!SVGTree::USE_FONTS) { + auto rect = util::make_unique<XMLElementNode>("rect"); + rect->addAttribute("x", bbox.minX()); + rect->addAttribute("y", bbox.minY()); + rect->addAttribute("width", bbox.width()); + rect->addAttribute("height", bbox.height()); + rect->addAttribute("fill", "white"); + rect->addAttribute("fill-opacity", 0); + actions.appendToPage(std::move(rect)); + } + } +} + + +// Creates SVG views for all collected named anchors defined on a given page. +void HyperlinkManager::createViews (unsigned pageno, SpecialActions &actions) { + const BoundingBox &pagebox = actions.bbox(); + for (auto &stranchorpair : _namedAnchors) { + if (stranchorpair.second.pageno == pageno && stranchorpair.second.referenced) { // current anchor referenced? + ostringstream oss; + oss << pagebox.minX() << ' ' << stranchorpair.second.pos << ' ' + << pagebox.width() << ' ' << pagebox.height(); + auto view = util::make_unique<XMLElementNode>("view"); + view->addAttribute("id", "loc"+XMLString(stranchorpair.second.id)); + view->addAttribute("viewBox", oss.str()); + actions.appendToDefs(std::move(view)); + } + } + closeAnchor(actions); +} + + +/** Sets the appearance of the link markers. + * @param[in] marker string specifying the marker (format: type[:linecolor]) + * @return true on success */ +bool HyperlinkManager::setLinkMarker (const string &marker) { + string type; // "none", "box", "line", or a background color specifier + string color; // optional line color specifier + size_t seppos = marker.find(":"); + if (seppos == string::npos) + type = marker; + else { + type = marker.substr(0, seppos); + color = marker.substr(seppos+1); + } + if (type.empty() || type == "none") + MARKER_TYPE = MarkerType::NONE; + else if (type == "line") + MARKER_TYPE = MarkerType::LINE; + else if (type == "box") + MARKER_TYPE = MarkerType::BOX; + else { + if (!LINK_BGCOLOR.setPSName(type, false)) + return false; + MARKER_TYPE = MarkerType::BGCOLOR; + } + COLORSOURCE = ColorSource::DEFAULT; + if (MARKER_TYPE != MarkerType::NONE && !color.empty()) { + if (!LINK_LINECOLOR.setPSName(color, false)) + return false; + COLORSOURCE = ColorSource::LINKMARKER; + } + return true; +} + + +void HyperlinkManager::setDefaultLinkColor (Color color) { + if (COLORSOURCE != ColorSource::LINKMARKER) { + COLORSOURCE = ColorSource::STATIC; + LINK_LINECOLOR = color; + } +}
\ No newline at end of file diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.hpp new file mode 100644 index 00000000000..2b4f9cb1420 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.hpp @@ -0,0 +1,79 @@ +/************************************************************************* +** HyperlinkManager.hpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#ifndef HYPERLINKMANAGER_HPP +#define HYPERLINKMANAGER_HPP + +#include <string> +#include <unordered_map> +#include "Color.hpp" +#include "SpecialActions.hpp" + +class SpecialActions; + +class HyperlinkManager { + struct NamedAnchor { + NamedAnchor () : pageno(0), id(0), pos(0), referenced(false) {} + NamedAnchor (unsigned pn, int i, double p, bool r=false) : pageno(pn), id(i), pos(p), referenced(r) {} + unsigned pageno; ///< page number where the anchor is located + int id; ///< unique numerical ID (< 0 if anchor is undefined yet) + double pos; ///< vertical position of named anchor (in PS point units) + bool referenced; ///< true if a reference to this anchor exists + }; + + enum class AnchorType {NONE, HREF, NAME}; + enum class ColorSource {DEFAULT, LINKMARKER, STATIC}; + using NamedAnchors = std::unordered_map<std::string, NamedAnchor>; + + public: + HyperlinkManager (const HyperlinkManager&) =delete; + HyperlinkManager (HyperlinkManager&&) =delete; + void addHrefAnchor (const std::string &uri); + void addNameAchor (const std::string &name, int pageno); + void setActiveNameAnchor (const std::string &name, SpecialActions &actions); + void closeAnchor (SpecialActions &actions); + void checkNewLine (SpecialActions &actions); + void createLink (std::string uri, SpecialActions &actions); + void createViews (unsigned pageno, SpecialActions &actions); + void setBaseUrl (std::string &base) {_base = base;} + void setLineWidth (double w) {_linewidth = w;} + static HyperlinkManager& instance (); + static bool setLinkMarker (const std::string &marker); + static void setDefaultLinkColor (Color color); + + protected: + HyperlinkManager () : _anchorType(AnchorType::NONE), _depthThreshold(0), _linewidth(-1) {} + void markLinkedBox (SpecialActions &actions); + + enum class MarkerType {NONE, LINE, BOX, BGCOLOR}; + static MarkerType MARKER_TYPE; ///< selects how to mark linked areas + static Color LINK_BGCOLOR; ///< background color if linkmark type == LT_BGCOLOR + static Color LINK_LINECOLOR; ///< line color if linkmark type is LM_LINE or LM_BOX + static ColorSource COLORSOURCE; ///< if true, LINK_LINECOLOR is applied + + private: + AnchorType _anchorType; ///< type of active anchor + int _depthThreshold; ///< break anchor box if the DVI stack depth underruns this threshold + double _linewidth; ///< line width of link marker (-1 => compute individual value per link) + std::string _base; ///< base URL that is prepended to all relative targets + NamedAnchors _namedAnchors; ///< information about all named anchors processed +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.cpp index 53d7eeee9d0..a89d95462f5 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.cpp @@ -2,7 +2,7 @@ ** InputBuffer.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cmath> #include <cstring> #include "InputBuffer.hpp" diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.hpp index 2509997d05c..4ee43615517 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.hpp @@ -2,7 +2,7 @@ ** InputBuffer.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.cpp index 6b4cd500343..99f7bfe35f9 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.cpp @@ -2,7 +2,7 @@ ** InputReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,15 +18,46 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cmath> #include <functional> -#include <vector> #include "InputReader.hpp" using namespace std; +void StringMatcher::setPattern (const string &pattern) { + _pattern = pattern; + _charsRead = 0; + _borders.resize(pattern.length()+1); + // preprocessing to set up the border indexes + _borders[0] = -1; + int i=0, j=-1; + const int len = static_cast<int>(pattern.length()); + while (i < len) { + while (j >= 0 && _pattern[i] != _pattern[j]) + j = _borders[j]; + _borders[++i] = ++j; + } +} + + +bool StringMatcher::match (InputReader &ir) { + _charsRead = 0; + int c; + int i=0; + const int len = static_cast<int>(_pattern.length()); + while ((c = ir.get()) >= 0) { + _charsRead++; + while (i >= 0 && c != _pattern[i]) + i = _borders[i]; + if (++i == len) + return true; + } + return false; +} + +/////////////////////////////////////////////////////////////////////////// + /** Skips n characters. */ void InputReader::skip (size_t n) { while (n-- > 0) @@ -43,14 +74,11 @@ void InputReader::skipSpace () { /** Tries to find a given string and skips all characters preceding that string. - * @param[in] s string to look for (must not be longer than the maximal buffer size) - * @param[in] consume if true, the buffer pointer is moved to the first character following string s + * @param[in] str string to look for (must not be longer than the maximal buffer size) * @return true if s was found */ -bool InputReader::skipUntil (const char *s, bool consume) { - bool found = false; - while (!eof() && !(found = check(s, consume))) - get(); - return found; +bool InputReader::skipUntil (const char *str) { + StringMatcher matcher(str); + return matcher.match(*this); } @@ -82,22 +110,6 @@ bool InputReader::check (const char *s, bool consume) { } -int InputReader::compare (const char *s, bool consume) { - size_t count = 0; - for (const char *p=s; *p; p++) { - int c = peek(count++); - if (c != *p) - return c < *p ? -1 : 1; - } - int c = peek(count); - if (c < 0 || !isspace(c)) - return 1; - if (consume) - skip(count); - return 0; -} - - /** Reads an integer from the buffer. All characters that are part of * the read integer constant are skipped. If this function returns false, * the buffer pointer points to the same position as before the function call. @@ -298,6 +310,20 @@ string InputReader::getString (size_t n) { } +/** Reads a string delimited by EOF or a single character from a given set of characters. + * @param[in] delim characters delimiting the string + * @return the read string */ +string InputReader::getString (const char *delim) { + if (!delim || !delim[0]) + return getString(); + string ret; + skipSpace(); + while (!eof() && peek() > 0 && !strchr(delim, peek())) + ret += get(); + return ret; +} + + string InputReader::getLine () { string ret; skipSpace(); @@ -313,7 +339,7 @@ string InputReader::getLine () { * @param[out] attr the scanned atributes * @param[in] quotechar quote character used to enclose the attribute values * @return number of attributes scanned */ -int InputReader::parseAttributes (map<string,string> &attr, char quotechar) { +int InputReader::parseAttributes (unordered_map<string,string> &attr, char quotechar) { bool ready=false; while (!eof() && !ready) { string key; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.hpp index 0780da028dd..037cf8b4365 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.hpp @@ -2,7 +2,7 @@ ** InputReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,13 +22,12 @@ #define INPUTREADER_HPP #include <istream> -#include <map> #include <string> +#include <unordered_map> +#include <vector> #include "InputBuffer.hpp" - -class InputReader -{ +class InputReader { public: virtual ~InputReader() =default; virtual int get () =0; @@ -37,9 +36,8 @@ class InputReader virtual bool eof () const =0; virtual bool check (char c) const {return peek() == c;} virtual bool check (const char *s, bool consume=true); - virtual int compare (const char *s, bool consume=true); virtual void skip (size_t n); - virtual bool skipUntil (const char *s, bool consume=true); + virtual bool skipUntil (const char *s); virtual int find (char c) const; virtual void skipSpace (); virtual int getInt (); @@ -53,28 +51,28 @@ class InputReader virtual std::string getQuotedString (char quotechar); virtual std::string getString (); virtual std::string getString (size_t n); + virtual std::string getString (const char *delim); virtual std::string getLine (); - virtual int parseAttributes (std::map<std::string,std::string> &attr, char quotechar=0); + virtual int parseAttributes (std::unordered_map<std::string,std::string> &attr, char quotechar=0); virtual operator bool () const {return !eof();} }; -class StreamInputReader : public InputReader -{ +class StreamInputReader : public InputReader { public: StreamInputReader (std::istream &is) : _is(is) {} int get () override {return _is.get();} int peek () const override {return _is.peek();} int peek (size_t n) const override; bool eof () const override {return !_is || _is.eof();} + std::istream& getStream () {return _is;} private: std::istream &_is; }; -class BufferInputReader : public InputReader -{ +class BufferInputReader : public InputReader { public: BufferInputReader (InputBuffer &ib) : _ib(&ib) {} void assign (InputBuffer &ib) {_ib = &ib;} @@ -87,4 +85,21 @@ class BufferInputReader : public InputReader InputBuffer *_ib; }; + +/** Implementation of the Knuth-Morris-Pratt search algorithm. + * http://www.inf.fh-flensburg.de/lang/algorithmen/pattern/kmpen.htm */ +class StringMatcher { + public: + StringMatcher () : _charsRead(0) {} + StringMatcher (const std::string &pattern) : _charsRead(0) {setPattern(pattern);} + void setPattern (const std::string &pattern); + bool match (InputReader &ir); + size_t charsRead () const {return _charsRead;} + + private: + std::string _pattern; + std::vector<size_t> _borders; + size_t _charsRead; +}; + #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.cpp index 9946e7cc26a..2291ca83ec1 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.cpp @@ -2,7 +2,7 @@ ** JFM.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <algorithm> #include <cstring> #include <fstream> diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.hpp index e267b29def3..908ad7a1c14 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.hpp @@ -2,7 +2,7 @@ ** JFM.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.cpp index 7b8b84814fd..f4c9d6638d0 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.cpp @@ -2,7 +2,7 @@ ** Length.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.hpp index 8c05ae49834..f606dab4549 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.hpp @@ -2,7 +2,7 @@ ** Length.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -28,20 +28,19 @@ #undef IN #endif -struct UnitException : MessageException -{ +struct UnitException : MessageException { UnitException (const std::string &msg) : MessageException(msg) {} }; -class Length -{ +class Length { public: enum class Unit {PT, BP, CM, MM, IN, PC, DD, CC, SP}; public: - Length () : _pt(0) {} - Length (double val, Unit unit=Unit::PT) {set(val, unit);} + constexpr Length () : _pt(0) {} + constexpr Length (long double pt) : _pt(static_cast<double>(pt)) {} + Length (double val, Unit unit) {set(val, unit);} Length (double val, const std::string &unitstr) {set(val, unitstr);} Length (const std::string &lenstr) {set(lenstr);} void set (double val, Unit unit); @@ -76,4 +75,14 @@ class Length double _pt; // length in TeX point units (72.27pt = 1in) }; + +constexpr Length operator "" _pt (long double pt) {return Length(pt);} +constexpr Length operator "" _bp (long double bp) {return Length(bp/Length::pt2bp);} +constexpr Length operator "" _mm (long double mm) {return Length(mm/Length::pt2mm);} +constexpr Length operator "" _in (long double in) {return Length(in/Length::pt2in);} +constexpr Length operator "" _pt (unsigned long long pt) {return Length(static_cast<double>(pt));} +constexpr Length operator "" _bp (unsigned long long bp) {return Length(static_cast<double>(bp)/Length::pt2bp);} +constexpr Length operator "" _mm (unsigned long long mm) {return Length(static_cast<double>(mm)/Length::pt2mm);} +constexpr Length operator "" _in (unsigned long long in) {return Length(static_cast<double>(in)/Length::pt2in);} + #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.am index 512f66dbb00..9d098904169 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.am +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.am @@ -1,12 +1,14 @@ ## This file is part of dvisvgm -## Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> +## Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ## ## Process this file with automake. -bin_PROGRAMS = dvisvgm -noinst_LIBRARIES = libdvisvgm.a +bin_PROGRAMS = dvisvgm +noinst_LIBRARIES = libdvisvgm.a -dvisvgm_SOURCES = dvisvgm.cpp +dvisvgm_SOURCES = \ + CommandLine.hpp \ + dvisvgm.cpp dvisvgm_LDADD = \ $(noinst_LIBRARIES) \ @@ -17,7 +19,7 @@ if ENABLE_WOFF dvisvgm_LDADD += \ ../libs/ff-woff/libfontforge.a \ ../libs/woff2/libwoff2.a \ - ../libs/woff2/brotli/libbrotli.a + ../libs/brotli/libbrotli.a endif dvisvgm_LDADD += \ @@ -61,7 +63,6 @@ libdvisvgm_a_SOURCES = \ Color.hpp \ ColorSpecialHandler.cpp \ ColorSpecialHandler.hpp \ - CommandLine.hpp \ CRC32.cpp \ CRC32.hpp \ DependencyGraph.hpp \ @@ -123,6 +124,8 @@ libdvisvgm_a_SOURCES = \ GraphicsPath.hpp \ HtmlSpecialHandler.cpp \ HtmlSpecialHandler.hpp \ + HyperlinkManager.cpp \ + HyperlinkManager.hpp \ InputBuffer.cpp \ InputBuffer.hpp \ InputReader.cpp \ @@ -153,6 +156,8 @@ libdvisvgm_a_SOURCES = \ PapersizeSpecialHandler.hpp \ PathClipper.cpp \ PathClipper.hpp \ + PDFParser.cpp \ + PDFParser.hpp \ PdfSpecialHandler.cpp \ PdfSpecialHandler.hpp \ PreScanDVIReader.cpp \ @@ -213,6 +218,10 @@ libdvisvgm_a_SOURCES = \ TpicSpecialHandler.hpp \ TriangularPatch.cpp \ TriangularPatch.hpp \ + TrueTypeFont.cpp \ + TrueTypeFont.hpp \ + TTFAutohint.cpp \ + TTFAutohint.hpp \ Unicode.cpp \ Unicode.hpp \ utility.hpp \ @@ -223,6 +232,7 @@ libdvisvgm_a_SOURCES = \ VFActions.hpp \ VFReader.cpp \ VFReader.hpp \ + windows.hpp \ XMLDocument.cpp \ XMLDocument.hpp \ XMLNode.cpp \ @@ -245,16 +255,23 @@ AM_CFLAGS = $(WARNING_CFLAGS) \ AM_CXXFLAGS = $(WARNING_CFLAGS) -Wnon-virtual-dtor \ -I$(dvisvgm_srcdir)/libs/clipper \ + -I$(dvisvgm_srcdir)/libs/variant/include \ -I$(dvisvgm_srcdir)/libs/xxHash +AM_LDFLAGS = \ + $(CODE_COVERAGE_LDFLAGS) + if ENABLE_WOFF AM_CFLAGS += \ -I$(dvisvgm_srcdir)/libs/ff-woff/fontforge \ -I$(dvisvgm_srcdir)/libs/ff-woff/inc AM_CXXFLAGS += \ - -I$(dvisvgm_srcdir)/libs/woff2/brotli/enc \ - -I$(dvisvgm_srcdir)/libs/woff2/src + $(TTFAUTOHINT_CFLAGS) \ + -I$(dvisvgm_srcdir)/libs/brotli/include \ + -I$(dvisvgm_srcdir)/libs/woff2/include + +AM_LDFLAGS += $(TTFAUTOHINT_LIBS) endif AM_CXXFLAGS += \ @@ -269,13 +286,11 @@ if WIN32 AM_CXXFLAGS += -DTEXLIVEWIN32 endif WIN32 -AM_LDFLAGS = $(CODE_COVERAGE_LDFLAGS) - if ! TEXLIVE_BUILD # TL: do not try to rebuild these source files. # the command-line parser class is generated from options.xml by opt2cpp $(srcdir)/CommandLine.hpp: options.xml - rm -f $@ $*.hpp + rm -f $@ python $(srcdir)/opt2cpp.py $< >$@ # Create a C string definition containing the PostScript routines psdefs.ps needed by class PSInterpreter diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in index 5a8296297ff..dfaa9fb0896 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in @@ -93,7 +93,7 @@ bin_PROGRAMS = dvisvgm$(EXEEXT) @ENABLE_WOFF_TRUE@am__append_1 = \ @ENABLE_WOFF_TRUE@ ../libs/ff-woff/libfontforge.a \ @ENABLE_WOFF_TRUE@ ../libs/woff2/libwoff2.a \ -@ENABLE_WOFF_TRUE@ ../libs/woff2/brotli/libbrotli.a +@ENABLE_WOFF_TRUE@ ../libs/brotli/libbrotli.a @ENABLE_WOFF_TRUE@am__append_2 = ffwrapper.c ffwrapper.h @ENABLE_WOFF_TRUE@am__append_3 = \ @@ -101,10 +101,12 @@ bin_PROGRAMS = dvisvgm$(EXEEXT) @ENABLE_WOFF_TRUE@ -I$(dvisvgm_srcdir)/libs/ff-woff/inc @ENABLE_WOFF_TRUE@am__append_4 = \ -@ENABLE_WOFF_TRUE@ -I$(dvisvgm_srcdir)/libs/woff2/brotli/enc \ -@ENABLE_WOFF_TRUE@ -I$(dvisvgm_srcdir)/libs/woff2/src +@ENABLE_WOFF_TRUE@ $(TTFAUTOHINT_CFLAGS) \ +@ENABLE_WOFF_TRUE@ -I$(dvisvgm_srcdir)/libs/brotli/include \ +@ENABLE_WOFF_TRUE@ -I$(dvisvgm_srcdir)/libs/woff2/include -@WIN32_TRUE@am__append_5 = -DTEXLIVEWIN32 +@ENABLE_WOFF_TRUE@am__append_5 = $(TTFAUTOHINT_LIBS) +@WIN32_TRUE@am__append_6 = -DTEXLIVEWIN32 subdir = dvisvgm-src/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \ @@ -145,7 +147,7 @@ am__libdvisvgm_a_SOURCES_DIST = AGLTable.hpp BasicDVIReader.cpp \ CLCommandLine.cpp CLCommandLine.hpp CLOption.hpp CMap.cpp \ CMap.hpp CMapManager.cpp CMapManager.hpp CMapReader.cpp \ CMapReader.hpp Color.cpp Color.hpp ColorSpecialHandler.cpp \ - ColorSpecialHandler.hpp CommandLine.hpp CRC32.cpp CRC32.hpp \ + ColorSpecialHandler.hpp CRC32.cpp CRC32.hpp \ DependencyGraph.hpp Directory.cpp Directory.hpp DLLoader.cpp \ DLLoader.hpp DVIActions.hpp DVIReader.cpp DVIReader.hpp \ DvisvgmSpecialHandler.cpp DvisvgmSpecialHandler.hpp \ @@ -161,7 +163,8 @@ am__libdvisvgm_a_SOURCES_DIST = AGLTable.hpp BasicDVIReader.cpp \ GFGlyphTracer.cpp GFGlyphTracer.hpp GFReader.cpp GFReader.hpp \ GFTracer.cpp GFTracer.hpp Ghostscript.cpp Ghostscript.hpp \ Glyph.hpp GlyphTracerMessages.hpp GraphicsPath.hpp \ - HtmlSpecialHandler.cpp HtmlSpecialHandler.hpp InputBuffer.cpp \ + HtmlSpecialHandler.cpp HtmlSpecialHandler.hpp \ + HyperlinkManager.cpp HyperlinkManager.hpp InputBuffer.cpp \ InputBuffer.hpp InputReader.cpp InputReader.hpp JFM.cpp \ JFM.hpp Length.cpp Length.hpp macros.hpp MapLine.cpp \ MapLine.hpp Matrix.cpp Matrix.hpp Message.cpp Message.hpp \ @@ -170,32 +173,33 @@ am__libdvisvgm_a_SOURCES_DIST = AGLTable.hpp BasicDVIReader.cpp \ NumericRanges.hpp PageRanges.cpp PageRanges.hpp PageSize.cpp \ PageSize.hpp Pair.hpp PapersizeSpecialHandler.cpp \ PapersizeSpecialHandler.hpp PathClipper.cpp PathClipper.hpp \ - PdfSpecialHandler.cpp PdfSpecialHandler.hpp \ - PreScanDVIReader.cpp PreScanDVIReader.hpp Process.cpp \ - Process.hpp psdefs.cpp PSFilter.hpp PSInterpreter.cpp \ - PSInterpreter.hpp PSPattern.cpp PSPattern.hpp \ - PSPreviewFilter.cpp PSPreviewFilter.hpp PsSpecialHandler.cpp \ - PsSpecialHandler.hpp RangeMap.cpp RangeMap.hpp \ - ShadingPatch.cpp ShadingPatch.hpp SignalHandler.cpp \ - SignalHandler.hpp SpecialActions.hpp SpecialHandler.hpp \ - SpecialManager.cpp SpecialManager.hpp StreamReader.cpp \ - StreamReader.hpp StreamWriter.cpp StreamWriter.hpp Subfont.cpp \ - Subfont.hpp SVGCharHandler.cpp SVGCharHandler.hpp \ - SVGCharHandlerFactory.cpp SVGCharHandlerFactory.hpp \ - SVGCharPathHandler.cpp SVGCharPathHandler.hpp \ - SVGCharTspanTextHandler.cpp SVGCharTspanTextHandler.hpp \ - SVGOutput.cpp SVGOutput.hpp SVGSingleCharTextHandler.cpp \ - SVGSingleCharTextHandler.hpp SVGTree.cpp SVGTree.hpp \ - System.cpp System.hpp TensorProductPatch.cpp \ - TensorProductPatch.hpp Terminal.cpp Terminal.hpp TFM.cpp \ - TFM.hpp ToUnicodeMap.cpp ToUnicodeMap.hpp \ + PDFParser.cpp PDFParser.hpp PdfSpecialHandler.cpp \ + PdfSpecialHandler.hpp PreScanDVIReader.cpp \ + PreScanDVIReader.hpp Process.cpp Process.hpp psdefs.cpp \ + PSFilter.hpp PSInterpreter.cpp PSInterpreter.hpp PSPattern.cpp \ + PSPattern.hpp PSPreviewFilter.cpp PSPreviewFilter.hpp \ + PsSpecialHandler.cpp PsSpecialHandler.hpp RangeMap.cpp \ + RangeMap.hpp ShadingPatch.cpp ShadingPatch.hpp \ + SignalHandler.cpp SignalHandler.hpp SpecialActions.hpp \ + SpecialHandler.hpp SpecialManager.cpp SpecialManager.hpp \ + StreamReader.cpp StreamReader.hpp StreamWriter.cpp \ + StreamWriter.hpp Subfont.cpp Subfont.hpp SVGCharHandler.cpp \ + SVGCharHandler.hpp SVGCharHandlerFactory.cpp \ + SVGCharHandlerFactory.hpp SVGCharPathHandler.cpp \ + SVGCharPathHandler.hpp SVGCharTspanTextHandler.cpp \ + SVGCharTspanTextHandler.hpp SVGOutput.cpp SVGOutput.hpp \ + SVGSingleCharTextHandler.cpp SVGSingleCharTextHandler.hpp \ + SVGTree.cpp SVGTree.hpp System.cpp System.hpp \ + TensorProductPatch.cpp TensorProductPatch.hpp Terminal.cpp \ + Terminal.hpp TFM.cpp TFM.hpp ToUnicodeMap.cpp ToUnicodeMap.hpp \ TpicSpecialHandler.cpp TpicSpecialHandler.hpp \ - TriangularPatch.cpp TriangularPatch.hpp Unicode.cpp \ + TriangularPatch.cpp TriangularPatch.hpp TrueTypeFont.cpp \ + TrueTypeFont.hpp TTFAutohint.cpp TTFAutohint.hpp Unicode.cpp \ Unicode.hpp utility.hpp utility.cpp VectorIterator.hpp \ VectorStream.hpp version.hpp VFActions.hpp VFReader.cpp \ - VFReader.hpp XMLDocument.cpp XMLDocument.hpp XMLNode.cpp \ - XMLNode.hpp XMLString.cpp XMLString.hpp ZLibOutputStream.hpp \ - ffwrapper.c ffwrapper.h + VFReader.hpp windows.hpp XMLDocument.cpp XMLDocument.hpp \ + XMLNode.cpp XMLNode.hpp XMLString.cpp XMLString.hpp \ + ZLibOutputStream.hpp ffwrapper.c ffwrapper.h @ENABLE_WOFF_TRUE@am__objects_1 = ffwrapper.$(OBJEXT) am_libdvisvgm_a_OBJECTS = BasicDVIReader.$(OBJEXT) Bezier.$(OBJEXT) \ BgColorSpecialHandler.$(OBJEXT) Bitmap.$(OBJEXT) \ @@ -213,12 +217,13 @@ am_libdvisvgm_a_OBJECTS = BasicDVIReader.$(OBJEXT) Bezier.$(OBJEXT) \ FontMetrics.$(OBJEXT) FontWriter.$(OBJEXT) \ GFGlyphTracer.$(OBJEXT) GFReader.$(OBJEXT) GFTracer.$(OBJEXT) \ Ghostscript.$(OBJEXT) HtmlSpecialHandler.$(OBJEXT) \ - InputBuffer.$(OBJEXT) InputReader.$(OBJEXT) JFM.$(OBJEXT) \ - Length.$(OBJEXT) MapLine.$(OBJEXT) Matrix.$(OBJEXT) \ - Message.$(OBJEXT) MetafontWrapper.$(OBJEXT) \ - NoPsSpecialHandler.$(OBJEXT) PageRanges.$(OBJEXT) \ - PageSize.$(OBJEXT) PapersizeSpecialHandler.$(OBJEXT) \ - PathClipper.$(OBJEXT) PdfSpecialHandler.$(OBJEXT) \ + HyperlinkManager.$(OBJEXT) InputBuffer.$(OBJEXT) \ + InputReader.$(OBJEXT) JFM.$(OBJEXT) Length.$(OBJEXT) \ + MapLine.$(OBJEXT) Matrix.$(OBJEXT) Message.$(OBJEXT) \ + MetafontWrapper.$(OBJEXT) NoPsSpecialHandler.$(OBJEXT) \ + PageRanges.$(OBJEXT) PageSize.$(OBJEXT) \ + PapersizeSpecialHandler.$(OBJEXT) PathClipper.$(OBJEXT) \ + PDFParser.$(OBJEXT) PdfSpecialHandler.$(OBJEXT) \ PreScanDVIReader.$(OBJEXT) Process.$(OBJEXT) psdefs.$(OBJEXT) \ PSInterpreter.$(OBJEXT) PSPattern.$(OBJEXT) \ PSPreviewFilter.$(OBJEXT) PsSpecialHandler.$(OBJEXT) \ @@ -232,9 +237,9 @@ am_libdvisvgm_a_OBJECTS = BasicDVIReader.$(OBJEXT) Bezier.$(OBJEXT) \ System.$(OBJEXT) TensorProductPatch.$(OBJEXT) \ Terminal.$(OBJEXT) TFM.$(OBJEXT) ToUnicodeMap.$(OBJEXT) \ TpicSpecialHandler.$(OBJEXT) TriangularPatch.$(OBJEXT) \ - Unicode.$(OBJEXT) utility.$(OBJEXT) VFReader.$(OBJEXT) \ - XMLDocument.$(OBJEXT) XMLNode.$(OBJEXT) XMLString.$(OBJEXT) \ - $(am__objects_1) + TrueTypeFont.$(OBJEXT) TTFAutohint.$(OBJEXT) Unicode.$(OBJEXT) \ + utility.$(OBJEXT) VFReader.$(OBJEXT) XMLDocument.$(OBJEXT) \ + XMLNode.$(OBJEXT) XMLString.$(OBJEXT) $(am__objects_1) libdvisvgm_a_OBJECTS = $(am_libdvisvgm_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) @@ -470,7 +475,10 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libdvisvgm.a -dvisvgm_SOURCES = dvisvgm.cpp +dvisvgm_SOURCES = \ + CommandLine.hpp \ + dvisvgm.cpp + dvisvgm_LDADD = $(noinst_LIBRARIES) ../libs/clipper/libclipper.a \ ../libs/xxHash/libxxhash.a $(am__append_1) $(KPATHSEA_LIBS) \ $(POTRACE_LIBS) $(FREETYPE2_LIBS) $(FONTFORGE_LIBS) \ @@ -485,7 +493,7 @@ libdvisvgm_a_SOURCES = AGLTable.hpp BasicDVIReader.cpp \ CLCommandLine.cpp CLCommandLine.hpp CLOption.hpp CMap.cpp \ CMap.hpp CMapManager.cpp CMapManager.hpp CMapReader.cpp \ CMapReader.hpp Color.cpp Color.hpp ColorSpecialHandler.cpp \ - ColorSpecialHandler.hpp CommandLine.hpp CRC32.cpp CRC32.hpp \ + ColorSpecialHandler.hpp CRC32.cpp CRC32.hpp \ DependencyGraph.hpp Directory.cpp Directory.hpp DLLoader.cpp \ DLLoader.hpp DVIActions.hpp DVIReader.cpp DVIReader.hpp \ DvisvgmSpecialHandler.cpp DvisvgmSpecialHandler.hpp \ @@ -501,7 +509,8 @@ libdvisvgm_a_SOURCES = AGLTable.hpp BasicDVIReader.cpp \ GFGlyphTracer.cpp GFGlyphTracer.hpp GFReader.cpp GFReader.hpp \ GFTracer.cpp GFTracer.hpp Ghostscript.cpp Ghostscript.hpp \ Glyph.hpp GlyphTracerMessages.hpp GraphicsPath.hpp \ - HtmlSpecialHandler.cpp HtmlSpecialHandler.hpp InputBuffer.cpp \ + HtmlSpecialHandler.cpp HtmlSpecialHandler.hpp \ + HyperlinkManager.cpp HyperlinkManager.hpp InputBuffer.cpp \ InputBuffer.hpp InputReader.cpp InputReader.hpp JFM.cpp \ JFM.hpp Length.cpp Length.hpp macros.hpp MapLine.cpp \ MapLine.hpp Matrix.cpp Matrix.hpp Message.cpp Message.hpp \ @@ -510,43 +519,45 @@ libdvisvgm_a_SOURCES = AGLTable.hpp BasicDVIReader.cpp \ NumericRanges.hpp PageRanges.cpp PageRanges.hpp PageSize.cpp \ PageSize.hpp Pair.hpp PapersizeSpecialHandler.cpp \ PapersizeSpecialHandler.hpp PathClipper.cpp PathClipper.hpp \ - PdfSpecialHandler.cpp PdfSpecialHandler.hpp \ - PreScanDVIReader.cpp PreScanDVIReader.hpp Process.cpp \ - Process.hpp psdefs.cpp PSFilter.hpp PSInterpreter.cpp \ - PSInterpreter.hpp PSPattern.cpp PSPattern.hpp \ - PSPreviewFilter.cpp PSPreviewFilter.hpp PsSpecialHandler.cpp \ - PsSpecialHandler.hpp RangeMap.cpp RangeMap.hpp \ - ShadingPatch.cpp ShadingPatch.hpp SignalHandler.cpp \ - SignalHandler.hpp SpecialActions.hpp SpecialHandler.hpp \ - SpecialManager.cpp SpecialManager.hpp StreamReader.cpp \ - StreamReader.hpp StreamWriter.cpp StreamWriter.hpp Subfont.cpp \ - Subfont.hpp SVGCharHandler.cpp SVGCharHandler.hpp \ - SVGCharHandlerFactory.cpp SVGCharHandlerFactory.hpp \ - SVGCharPathHandler.cpp SVGCharPathHandler.hpp \ - SVGCharTspanTextHandler.cpp SVGCharTspanTextHandler.hpp \ - SVGOutput.cpp SVGOutput.hpp SVGSingleCharTextHandler.cpp \ - SVGSingleCharTextHandler.hpp SVGTree.cpp SVGTree.hpp \ - System.cpp System.hpp TensorProductPatch.cpp \ - TensorProductPatch.hpp Terminal.cpp Terminal.hpp TFM.cpp \ - TFM.hpp ToUnicodeMap.cpp ToUnicodeMap.hpp \ + PDFParser.cpp PDFParser.hpp PdfSpecialHandler.cpp \ + PdfSpecialHandler.hpp PreScanDVIReader.cpp \ + PreScanDVIReader.hpp Process.cpp Process.hpp psdefs.cpp \ + PSFilter.hpp PSInterpreter.cpp PSInterpreter.hpp PSPattern.cpp \ + PSPattern.hpp PSPreviewFilter.cpp PSPreviewFilter.hpp \ + PsSpecialHandler.cpp PsSpecialHandler.hpp RangeMap.cpp \ + RangeMap.hpp ShadingPatch.cpp ShadingPatch.hpp \ + SignalHandler.cpp SignalHandler.hpp SpecialActions.hpp \ + SpecialHandler.hpp SpecialManager.cpp SpecialManager.hpp \ + StreamReader.cpp StreamReader.hpp StreamWriter.cpp \ + StreamWriter.hpp Subfont.cpp Subfont.hpp SVGCharHandler.cpp \ + SVGCharHandler.hpp SVGCharHandlerFactory.cpp \ + SVGCharHandlerFactory.hpp SVGCharPathHandler.cpp \ + SVGCharPathHandler.hpp SVGCharTspanTextHandler.cpp \ + SVGCharTspanTextHandler.hpp SVGOutput.cpp SVGOutput.hpp \ + SVGSingleCharTextHandler.cpp SVGSingleCharTextHandler.hpp \ + SVGTree.cpp SVGTree.hpp System.cpp System.hpp \ + TensorProductPatch.cpp TensorProductPatch.hpp Terminal.cpp \ + Terminal.hpp TFM.cpp TFM.hpp ToUnicodeMap.cpp ToUnicodeMap.hpp \ TpicSpecialHandler.cpp TpicSpecialHandler.hpp \ - TriangularPatch.cpp TriangularPatch.hpp Unicode.cpp \ + TriangularPatch.cpp TriangularPatch.hpp TrueTypeFont.cpp \ + TrueTypeFont.hpp TTFAutohint.cpp TTFAutohint.hpp Unicode.cpp \ Unicode.hpp utility.hpp utility.cpp VectorIterator.hpp \ VectorStream.hpp version.hpp VFActions.hpp VFReader.cpp \ - VFReader.hpp XMLDocument.cpp XMLDocument.hpp XMLNode.cpp \ - XMLNode.hpp XMLString.cpp XMLString.hpp ZLibOutputStream.hpp \ - $(am__append_2) + VFReader.hpp windows.hpp XMLDocument.cpp XMLDocument.hpp \ + XMLNode.cpp XMLNode.hpp XMLString.cpp XMLString.hpp \ + ZLibOutputStream.hpp $(am__append_2) EXTRA_DIST = options.xml options.dtd iapi.h ierrors.h MiKTeXCom.hpp MiKTeXCom.cpp dvisvgm_srcdir = $(top_srcdir)/dvisvgm-src AM_CFLAGS = $(WARNING_CFLAGS) $(ZLIB_INCLUDES) $(CODE_COVERAGE_CFLAGS) \ $(am__append_3) AM_CXXFLAGS = $(WARNING_CFLAGS) -Wnon-virtual-dtor \ -I$(dvisvgm_srcdir)/libs/clipper \ + -I$(dvisvgm_srcdir)/libs/variant/include \ -I$(dvisvgm_srcdir)/libs/xxHash $(am__append_4) \ $(KPATHSEA_INCLUDES) $(POTRACE_INCLUDES) $(FREETYPE2_INCLUDES) \ $(ZLIB_INCLUDES) $(LIBGS_INCLUDES) $(CODE_COVERAGE_CFLAGS) \ - $(am__append_5) -AM_LDFLAGS = $(CODE_COVERAGE_LDFLAGS) + $(am__append_6) +AM_LDFLAGS = $(CODE_COVERAGE_LDFLAGS) $(am__append_5) CLEANFILES = *.gcda *.gcno all: all-am @@ -691,6 +702,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GFTracer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Ghostscript.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HtmlSpecialHandler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HyperlinkManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InputBuffer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InputReader.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JFM.Po@am__quote@ @@ -700,6 +712,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Message.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MetafontWrapper.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NoPsSpecialHandler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PDFParser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSInterpreter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSPattern.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSPreviewFilter.Po@am__quote@ @@ -727,11 +740,13 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Subfont.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/System.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TFM.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TTFAutohint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TensorProductPatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Terminal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ToUnicodeMap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TpicSpecialHandler.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TriangularPatch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TrueTypeFont.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Unicode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VFReader.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLDocument.Po@am__quote@ @@ -1010,7 +1025,7 @@ uninstall-am: uninstall-binPROGRAMS # TL: do not try to rebuild these source files. # the command-line parser class is generated from options.xml by opt2cpp @TEXLIVE_BUILD_FALSE@$(srcdir)/CommandLine.hpp: options.xml -@TEXLIVE_BUILD_FALSE@ rm -f $@ $*.hpp +@TEXLIVE_BUILD_FALSE@ rm -f $@ @TEXLIVE_BUILD_FALSE@ python $(srcdir)/opt2cpp.py $< >$@ # Create a C string definition containing the PostScript routines psdefs.ps needed by class PSInterpreter diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.cpp index 333bd204cb2..00284bcad86 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.cpp @@ -2,7 +2,7 @@ ** MapLine.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cstring> #include <sstream> #include "InputBuffer.hpp" @@ -124,8 +123,8 @@ void MapLine::parseDVIPSLine (InputReader &ir) { while (ir.peek() == '<' || ir.peek() == '"') { if (ir.peek() == '<') { ir.get(); - if (ir.peek() == '[') - ir.get(); + if (ir.peek() == '[' || ir.peek() == '<') + ir.get(); // skip second char of "<[" and "<<" string name = ir.getString(); if (name.length() > 4 && name.substr(name.length()-4) == ".enc") _encname = name.substr(0, name.length()-4); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.hpp index f5fea478ad7..64d85050648 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.hpp @@ -2,7 +2,7 @@ ** MapLine.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.cpp index 257335c0071..57456ba36b0 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.cpp @@ -2,7 +2,7 @@ ** Matrix.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.hpp index 0d8917f56ae..9ea836b9837 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.hpp @@ -2,7 +2,7 @@ ** Matrix.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -57,7 +57,9 @@ class Matrix Matrix& lmultiply (const Matrix &tm); Matrix& rmultiply (const Matrix &tm); Matrix& translate (double tx, double ty); + Matrix& translate (const DPair &p) {return translate(p.x(), p.y());} Matrix& scale (double sx, double sy); + Matrix& scale (const DPair &p) {return scale(p.x(), p.y());} Matrix& rotate (double deg); Matrix& xskewByAngle (double deg); Matrix& yskewByAngle (double deg); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.cpp index 7e60ad3b9fa..96c826f5a41 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.cpp @@ -2,7 +2,7 @@ ** Message.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,12 +18,11 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cstdarg> #include <cstdlib> #include <cstring> #include <iostream> -#include <map> +#include <unordered_map> #include "Message.hpp" #include "Terminal.hpp" @@ -218,7 +217,7 @@ static bool colorchar2int (char colorchar, int *val) { * - 0-7: dark colors * - 8-F: light colors * - *: default color - * Example: num:01 sets page number messages to red on black background */ + * Example: pn:01 sets page number messages to red on black background */ void Message::init () { if (_initialized || !Message::COLORIZE) return; @@ -234,7 +233,7 @@ void Message::init () { _classColors[MC_PROGRESS] = Color(Terminal::MAGENTA); if (const char *color_str = getenv("DVISVGM_COLORS")) { - map<string, MessageClass> classes = { + unordered_map<string, MessageClass> classes = { {"er", MC_ERROR}, {"wn", MC_WARNING}, {"pn", MC_PAGE_NUMBER}, @@ -263,7 +262,7 @@ void Message::init () { p += 5; // skip trailing characters in a malformed entry - while (!isspace(*p) && *p != ':' && *p != ';') + while (*p && !isspace(*p) && *p != ':' && *p != ';') ++p; // skip separation characters while (isspace(*p) || *p == ':' || *p == ';') diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.hpp index f05eb6aa0ed..acd3454daa3 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.hpp @@ -2,7 +2,7 @@ ** Message.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/MessageException.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/MessageException.hpp index d94a1feab8a..cf217db2688 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/MessageException.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/MessageException.hpp @@ -2,7 +2,7 @@ ** MessageException.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.cpp index dd2a6cf2941..295237d1d91 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.cpp @@ -2,7 +2,7 @@ ** MetafontWrapper.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cstdlib> #include <cctype> #include <fstream> @@ -76,7 +75,7 @@ bool MetafontWrapper::call (const string &mode, double mag) { "batchmode;" // don't halt on errors and don't print informational messages "input " << _fontname << "\""; // load font description Message::mstream(false, Message::MC_STATE) << "\nrunning Metafont for " << _fontname << '\n'; - Process mf_process(cmd, oss.str().c_str()); + Process mf_process(cmd, oss.str()); string mf_messages; mf_process.run(_dir, &mf_messages); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.hpp index 3bda79c5683..03f77b9ef11 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.hpp @@ -2,7 +2,7 @@ ** MetafontWrapper.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.cpp index bdb0cc89073..d22cc45f690 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.cpp @@ -2,7 +2,7 @@ ** MiKTeXCom.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <stdio.h> #include <comdef.h> #include <string> @@ -29,8 +28,8 @@ using namespace std; /** Constructs a COM object representing a MiKTeX session. */ -MiKTeXCom::MiKTeXCom () : _session(0) { - if (FAILED(CoInitialize(0))) +MiKTeXCom::MiKTeXCom () : _session() { + if (FAILED(CoInitialize(nullptr))) throw MessageException("COM library could not be initialized\n"); // try to initialize the MiKTeX session object #ifdef _MSC_VER @@ -54,7 +53,7 @@ MiKTeXCom::~MiKTeXCom () { #else _session->Release(); #endif - _session = 0; // prevent automatic call of Release() after CoUninitialize() + _session = nullptr; // prevent automatic call of Release() after CoUninitialize() } CoUninitialize(); } @@ -105,7 +104,7 @@ const char* MiKTeXCom::findFile (const char *fname) { ret = _bstr_t(path); return ret.c_str(); } - return 0; + return nullptr; } catch (_com_error &e) { throw MessageException((const char*)e.Description()); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.hpp index a87a8488c7c..a68dc4dc674 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.hpp @@ -2,7 +2,7 @@ ** MiKTeXCom.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,6 +22,7 @@ #define MIKTEXCOM_HPP #include <string> +#include "windows.hpp" #ifdef _MSC_VER #import <MiKTeX209-session.tlb> @@ -30,9 +31,7 @@ using namespace MiKTeXSession2_9; #include "miktex209-session.h" #endif - -class MiKTeXCom -{ +class MiKTeXCom { public: MiKTeXCom (); ~MiKTeXCom (); @@ -48,5 +47,4 @@ class MiKTeXCom #endif }; - #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.cpp index a5b2a680ebc..a1df816cb67 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.cpp @@ -2,7 +2,7 @@ ** NoPsSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include "Message.hpp" #include "NoPsSpecialHandler.hpp" @@ -40,7 +39,7 @@ void NoPsSpecialHandler::dviEndPage (unsigned pageno, SpecialActions &actions) { } -const char** NoPsSpecialHandler::prefixes () const { - static const char *pfx[] = {"header=", "psfile=", "PSfile=", "ps:", "ps::", "!", "\"", 0}; +const vector<const char*> NoPsSpecialHandler::prefixes () const { + const vector<const char*> pfx {"header=", "psfile=", "PSfile=", "ps:", "ps::", "!", "\""}; return pfx; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.hpp index bec66478864..33922799b2f 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.hpp @@ -2,7 +2,7 @@ ** NoPsSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -30,7 +30,7 @@ class NoPsSpecialHandler : public SpecialHandler, public DVIEndPageListener bool process (const char *prefix, std::istream &is, SpecialActions &actions) override; const char* name () const override {return 0;} const char* info () const override {return 0;} - const char** prefixes () const override; + const std::vector<const char*> prefixes () const override; protected: void dviEndPage (unsigned pageno, SpecialActions &actions) override; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp index c87eddf054f..4ba3f8719cb 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp @@ -2,7 +2,7 @@ ** NumericRanges.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -29,9 +29,9 @@ template <class T> class NumericRanges { public: - typedef std::pair<T,T> Range; - typedef std::list<Range> Container; - typedef typename Container::const_iterator ConstIterator; + using Range = std::pair<T,T>; + using Container = std::list<Range>; + using ConstIterator = typename Container::const_iterator; public: void addRange (T value) {addRange(value, value);} @@ -98,7 +98,7 @@ void NumericRanges<T>::addRange (T first, T last) { template <class T> bool NumericRanges<T>::valueExists (T value) const { - ConstIterator it = std::lower_bound(_ranges.begin(), _ranges.end(), Range(value, 0), + auto it = std::lower_bound(_ranges.begin(), _ranges.end(), Range(value, 0), [](const Range &r1, const Range &r2) { return r1.first < r2.first; }); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.cpp new file mode 100644 index 00000000000..91020868a3c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.cpp @@ -0,0 +1,469 @@ +/************************************************************************* +** PDFParser.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#include <cctype> +#include <istream> +#include <ostream> +#include <sstream> +#include <stdexcept> +#include "InputReader.hpp" +#include "PDFParser.hpp" +#include "utility.hpp" + +using namespace std; + + +/** Parses PDF from an input stream and returns the corresponding object representation. + * @param[in] is input stream the PDF data is read from + * @param[in] opHandler handler used to treat PDF operators + * @return the parsed objects */ +vector<PDFObject> PDFParser::parse (std::istream &is, const PDFOperatorHandler &opHandler) { + StreamInputReader ir(is); + return parse(ir, opHandler); +} + + +/** Parses PDF from a string and returns the corresponding object representation. + * @param[in] str string that contains the PDF data + * @param[in] opHandler handler used to treat PDF operators + * @return the parsed objects */ +vector<PDFObject> PDFParser::parse (const std::string &str, const PDFOperatorHandler &opHandler) { + istringstream iss(str); + return parse(iss, opHandler); +} + + +/** Parses PDF from an InputReader object and returns the corresponding object representation. + * @param[in] ir InputReader the PDF data is read from + * @param[in] opHandler handler used to treat PDF operators + * @return the parsed objects */ +vector<PDFObject> PDFParser::parse (InputReader &ir, const PDFOperatorHandler &opHandler) { + vector<PDFObject> objects; + while (!ir.eof()) { + ir.skipSpace(); + if (ir.peek() == '%') // comment? + while (ir.get() != '\n' && !ir.eof()); + else if (!ir.eof()) + parse(ir, objects, opHandler); + } + return objects; +} + + +/** Default handler for PDF operators. Just adds the operators to the + * object vector without evaluating them. + * @param[in] opname name of the operator + * @param[in,out] objects vector holding the parsed objects */ +static void append_operator (const string &opname, vector<PDFObject> &objects) { + objects.emplace_back(PDFOperator(opname)); +} + + +/** Parses PDF from an input stream and returns the corresponding object representation. + * @param[in] is input stream the PDF data is read from + * @return the parsed objects */ +vector<PDFObject> PDFParser::parse (std::istream &is) { + return parse(is, append_operator); +} + + +/** Parses PDF from a string and returns the corresponding object representation. + * @param[in] str string that contains the PDF data + * @return the parsed objects */ +vector<PDFObject> PDFParser::parse (const std::string &str) { + return parse(str, append_operator); +} + +/** Parses PDF from an InputReader object and returns the corresponding object representation. + * @param[in] ir InputReader the PDF data is read from + * @return the parsed objects */ +vector<PDFObject> PDFParser::parse (InputReader &ir) { + return parse(ir, append_operator); +} + + +/** Parses PDF from an InputReader object and appends the recognized objects to a vector. + * @param[in] ir InputReader the PDF data is read from + * @param[in,out] objects the parsed PDF objects are appended to this vector + * @return the parsed objects */ +void PDFParser::parse (InputReader &ir, vector<PDFObject> &objects) { + parse(ir, objects, append_operator); +} + + +inline bool isoctaldigit (int c) {return c >= '0' && c <= '7';} + +/** Parses a PDF escape sequence of the form \FOO, where FOO is a single + * character or a sequence of 1-3 octal digits + * @return pair (s,c), s=true if c contains a parsed character */ +static pair<bool,int> parse_escape_seq (InputReader &ir) { + // leading backslash has already been read + if (isoctaldigit(ir.peek())) { + string str; + for (int i=0; i < 3 && isoctaldigit(ir.peek()); i++) + str += static_cast<char>(ir.get()); + return pair<bool,int>{true, stoi(str, 0, 8)}; + } + char c = static_cast<char>(ir.get()); + switch (c) { + case 'n': c = '\n'; break; + case 'r': c = '\r'; break; + case 't': c = '\t'; break; + case 'b': c = '\b'; break; + case 'f': c = '\f'; break; + case '\n': + case '\r': + if ((c == '\n' && ir.peek() == '\r') || (c == '\r' && ir.peek() == '\n')) + ir.get(); + return pair<bool,int>{false, 0}; + } + return pair<bool,int>{true, c}; +} + + +/** Parses a literal PDF string of the form (FOO). */ +static string parse_literal_string (InputReader &ir) { + string str; + ir.get(); // skip initial '(' + int open_parens=1; + while (ir.peek() >= 0 && open_parens > 0) { + if (ir.peek() == '\n' || ir.peek() == '\r') + break; + int c = ir.get(); + switch (c) { + case '(': open_parens++; break; + case ')': open_parens--; break; + case '\\': + pair<bool,int> state = parse_escape_seq(ir); + c = state.first ? state.second : -1; + break; + } + if (open_parens > 0 && c >= 0) + str += static_cast<char>(c); + } + if (open_parens > 0) + throw PDFException("missing ')' at end of literal string"); + return str; +} + + +/** Gets a single hex digit from the InputReader. */ +static char get_hex_digit (InputReader &ir) { + int c = ir.get(); + if (isxdigit(c)) + return static_cast<char>(c); + ostringstream oss; + oss << "invalid hexadecimal digit '" << static_cast<char>(c) << "'"; + throw PDFException(oss.str()); +} + + +/** Parses a PDF hex string of the form <FOO>, where FOO is a sequence of + * hex digits optionally separated by whitespace. */ +static string parse_hex_string (InputReader &ir) { + // initial '<' has already been read + string str; + ir.skipSpace(); + while (ir.peek() > 0 && ir.peek() != '>') { + string hexpair; + hexpair += get_hex_digit(ir); + ir.skipSpace(); + if (ir.peek() > 0 && ir.peek() != '>') + hexpair += get_hex_digit(ir); + else if (ir.peek() == '>') + hexpair += '0'; + ir.skipSpace(); + str += static_cast<char>(stoi(hexpair, 0, 16)); + } + if (ir.peek() != '>') + throw PDFException("missing '>' at end of hexadecimal string"); + ir.get(); // skip closing '>' + return str; +} + + +using NumberVariant = mpark::variant<int, double>; + +/** Parses a PDF number from a string. The number is either integer or real. + * @param[in] str string to parse + * @param[out] nv variant holding the numeric value + * @return true if entire string has been parsed succesfully */ +static bool parse_number (const string &str, NumberVariant &nv) { + if (str.empty()) + return false; + try { + size_t dotpos = str.find('.'); + if (dotpos == string::npos) { // not a real number? + size_t count; + nv = NumberVariant(stoi(str, &count, 10)); // then try to convert str to int + return count == str.length(); // successful only if all characters have been processed + } + string postdot = str.substr(dotpos+1); + // ensure signless integer after dot to exclude exponental notation + // which is not allowed in PDF real number constants + if (!postdot.empty() && isdigit(postdot[0])) { + size_t count; + stoi(postdot, &count, 10); + if (count != postdot.length()) + return false; + } + size_t count; + nv = NumberVariant(stod(str, &count)); + return count == str.length(); + } + catch (invalid_argument &e) { + return false; + } +} + + +/** Parses a PDF array from the input stream and returns a corresponding object. */ +PDFArray PDFParser::parseArray (InputReader &ir, const PDFOperatorHandler &opHandler) { + ir.get(); // skip '[' + vector<PDFObject> localObjects; + while (!ir.eof() && ir.peek() != ']') + parse(ir, localObjects, opHandler); + ir.skipSpace(); + if (ir.peek() != ']') + throw PDFException("missing ']' at end of array"); + ir.get(); + PDFArray arr; + std::move(localObjects.begin(), localObjects.end(), back_inserter(arr)); + return arr; +} + + +/** Parses a PDF dictionary from the input stream and returns a corresponding object. + * The function expects that the first opening angle bracket denoting the start of an + * dictionary has already been swallowed from the stream. */ +PDFDict PDFParser::parseDict (InputReader &ir, const PDFOperatorHandler &opHandler) { + ir.get(); // skip second "<" + vector<PDFObject> localObjects; + while (!ir.eof() && ir.peek() != '>') + parse(ir, localObjects, opHandler); + if (ir.getString(2) != ">>") + throw PDFException("missing '>>' at end of dictionary"); + PDFDict dict; + for (auto it=localObjects.begin(); it != localObjects.end(); ++it) { + if (!it->get<PDFName>()) + throw PDFException("name key expected in dictionary"); + const PDFName &key = *it->get<PDFName>(); + if (++it == localObjects.end()) + throw PDFException(string("missing dictionary value for key '")+key.str+"'"); + dict.emplace(key.str, std::move(*it)); + } + return dict; +} + + +static PDFStream parse_stream (InputReader &ir, const char *delim) { + do + ir.skipUntil("endstream"); + while (ir.peek() >= 0 && !strchr(delim, ir.peek())); // ensure delimiter after "endstream" + return PDFStream(); +} + + +static PDFIndirectObject parse_indirect_object (InputReader &ir, const char *delim, vector<PDFObject> &objects) { + do + ir.skipUntil("endobj"); + while (ir.peek() >= 0 && !strchr(delim, ir.peek())); // ensure delimiter after "endobj" + if (objects.size() >= 2) { + const int *genno = objects.back().get<int>(); + objects.pop_back(); + const int *objno = objects.back().get<int>(); + objects.pop_back(); + if (objno && genno) + return PDFIndirectObject(*objno, *genno); + } + throw PDFException("object and generation number expected before 'obj'"); +} + + +static PDFObjectRef parse_object_ref (vector<PDFObject> &objects) { + if (objects.size() >= 2) { + const int *genno = objects.back().get<int>(); + objects.pop_back(); + const int *objno = objects.back().get<int>(); + objects.pop_back(); + if (objno && genno) + return PDFObjectRef(*objno, *genno); + } + throw PDFException("object and generation number expected before 'R'"); +} + + +/** Replaces all occurences of "#XX" (XX are two hex digits) with the corresponding character. */ +static string& subst_numeric_chars (string &str) { + for (size_t pos=str.find('#'); pos != string::npos; pos=str.find('#', pos+1)) { + if (pos > str.length()-3) + throw PDFException("sign character # must be followed by two hexadecimal digits"); + if (isxdigit(str[pos+1]) && isxdigit(str[pos+2])) { + int c = stoi(str.substr(pos+1, 2), 0, 16); + if (c == 0) + throw PDFException("null character not permitted in name"); + str.replace(pos, 3, 1, static_cast<char>(c)); + } + else + throw PDFException("sign character # must be followed by two hexadecimal digits"); + } + return str; +} + + +/** Parses a single PDF object from an InputReader object. + * @param[in,out] ir reader object to read the PDF data from + * @param[out] objects the parsed object is appended to this vector + * @param[in] opHandler handler used to treat PDF operators + * @throws PDFException on failure */ +void PDFParser::parse (InputReader &ir, vector<PDFObject> &objects, const PDFOperatorHandler &opHandler) { + static const char *delim = "()<>[]{}/% \t\n\r\f"; + ir.skipSpace(); + if (ir.peek() < 0) + return; + switch (ir.peek()) { + case '(': + objects.emplace_back(parse_literal_string(ir)); break; + case '[': + objects.emplace_back(util::make_unique<PDFArray>(parseArray(ir, opHandler))); break; + case '<': + ir.get(); + if (ir.peek() != '<') + objects.emplace_back(parse_hex_string(ir)); + else + objects.emplace_back(util::make_unique<PDFDict>(parseDict(ir, opHandler))); + break; + case '/': { + ir.get(); + string name = ir.getString(delim); + objects.emplace_back(PDFName(subst_numeric_chars(name))); + break; + } + default: { + string str = ir.getString(delim); + if (str.empty()) + break; + if (str == "null") + objects.emplace_back(PDFNull()); + else if (str == "true") + objects.emplace_back(true); + else if (str == "false") + objects.emplace_back(false); + else if (str == "stream") + objects.emplace_back(parse_stream(ir, delim)); + else if (str == "obj") + objects.emplace_back(parse_indirect_object(ir, delim, objects)); + else if (str == "R") + objects.emplace_back(parse_object_ref(objects)); + else { + NumberVariant number; + if (!parse_number(str, number)) + opHandler(str, objects); + else { + if (mpark::get_if<int>(&number)) + objects.emplace_back(mpark::get<int>(number)); + else + objects.emplace_back(mpark::get<double>(number)); + } + } + } + } +} + +////////////////////////////////////////////////////////////////////////// + +struct ToDoubleVisitor { + template <typename V> + double operator () (const V &val) {return 0;} +}; + +template<> double ToDoubleVisitor::operator () (const int &val) {return static_cast<double>(val);} +template<> double ToDoubleVisitor::operator () (const double &val) {return val;} +template<> double ToDoubleVisitor::operator () (const string &val) { + try { + return stod(val); + } + catch (exception &e) { + return 0; + } +} + + +PDFObject::operator double () const { + return mpark::visit(ToDoubleVisitor(), _value); +} + + +PDFObject::operator std::string () const { + ostringstream oss; + oss << *this; + return oss.str(); +} + + +static std::ostream& operator << (std::ostream &os, const PDFName &name) {return os << name.str;} +static ostream& operator << (ostream &os, const PDFNull&) {return os << "null";} +static ostream& operator << (ostream &os, const PDFStream&) {return os << "stream";} +static ostream& operator << (ostream &os, const PDFOperator &op) {return os << op.opname;} + +static ostream& operator << (ostream &os, const PDFIndirectObject &obj) { + return os << "obj(" << obj.objnum << ", " << obj.gennum << ')'; +} + + +static ostream& operator << (ostream &os, const PDFObjectRef &ref) { + return os << "obj(" << ref.objnum << ", " << ref.gennum << ')'; +} + + +static ostream& operator << (ostream &os, const unique_ptr<vector<PDFObject>> &val) { + os << '['; + for (auto it=val->begin(); it != val->end(); ++it) { + if (it != val->begin()) + os << ", "; + it->write(os); + } + os << ']'; + return os; +} + + +static ostream& operator << (ostream &os, const unique_ptr<Dictionary<string,PDFObject>> &val) { + os << "<<"; + for (auto it=val->begin(); it != val->end(); ++it) { + if (it != val->begin()) + os << ", "; + os << it->first << ':' << it->second; + } + os << ">>"; + return os; +} + + +struct WriteVisitor { + WriteVisitor (ostream &os) : _os(os) {} + template <typename T> void operator () (const T &val) {_os << val;} + ostream &_os; +}; + + +void PDFObject::write (ostream &os) const { + mpark::visit(WriteVisitor(os), _value); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.hpp new file mode 100644 index 00000000000..18e61ee19a6 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.hpp @@ -0,0 +1,185 @@ +/************************************************************************* +** PDFParser.hpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#ifndef PDFPARSER_HPP +#define PDFPARSER_HPP + +#include <initializer_list> +#include <istream> +#include <functional> +#include <map> +#include <memory> +#include <string> +#include <unordered_map> +#include <utility> +#include <vector> +#include <mpark/variant.hpp> +#include "MessageException.hpp" + +template <typename K, typename V> +class Dictionary { + using Map = std::map<K, V>; + + public: + typename Map::const_iterator begin () const {return _map.begin();} + typename Map::const_iterator end () const {return _map.end();} + typename Map::iterator begin () {return _map.begin();} + typename Map::iterator end () {return _map.end();} + typename Map::const_iterator find (const K &key) const {return _map.find(key);} + bool empty () const {return _map.empty();} + bool exists (const K &key) const {return _map.find(key) != _map.end();} + size_t size () const {return _map.size();} + + const V* get (const K &key) const { + auto it = _map.find(key); + if (it != _map.end()) + return &it->second; + return nullptr; + } + + std::pair<typename Map::iterator,bool> emplace (const K &key, V &&value) { + return _map.emplace(key, std::forward<V>(value)); + } + + private: + Map _map; +}; + +////////////////////////////////////////////////////////////////////////// +// PDF object types + +struct PDFNull {}; +struct PDFStream {}; + +struct PDFIndirectObject { + PDFIndirectObject (int n, int gen) : objnum(n), gennum(gen) {} + int objnum, gennum; +}; + +struct PDFObjectRef { + PDFObjectRef (int n, int gen) : objnum(n), gennum(gen) {} + int objnum, gennum; +}; + +struct PDFOperator { + PDFOperator (const std::string &name) : opname(name) {} + std::string opname; +}; + +struct PDFName { + PDFName (const std::string &val) : str(val) {} + bool operator == (const PDFName &name) const {return str == name.str;} + std::string str; +}; + +class PDFObject; + +using PDFArray = std::vector<PDFObject>; +using PDFDict = Dictionary<std::string, PDFObject>; + +////////////////////////////////////////////////////////////////////////// + +/** This class represents a single variadic PDF object. */ +class PDFObject { + using Value = mpark::variant< + PDFNull, + bool, + int, + double, + PDFName, + PDFStream, + PDFIndirectObject, + PDFObjectRef, + PDFOperator, + std::string, + std::unique_ptr<PDFArray>, + std::unique_ptr<PDFDict> + >; + + public: + PDFObject () : _value(0) {} + + template <typename T> + explicit PDFObject (T &&value) : _value(std::forward<T>(value)) {} + + explicit PDFObject (const char *value) : _value(std::string(value)) {} + explicit operator std::string () const; + explicit operator double () const; + + template <typename T> + const T* get () const {return mpark::get_if<T>(&_value);} + + void write (std::ostream &os) const; + + private: + Value _value; +}; + + +template<> inline const PDFArray* PDFObject::get() const { + if (auto *p = mpark::get_if<std::unique_ptr<PDFArray>>(&_value)) + return &(**p); + return nullptr; +} + + +template<> inline const PDFDict* PDFObject::get() const { + if (auto *p = mpark::get_if<std::unique_ptr<PDFDict>>(&_value)) + return &(**p); + return nullptr; +} + + +inline std::ostream& operator << (std::ostream &os, const PDFObject &obj) { + obj.write(os); + return os; +} + +////////////////////////////////////////////////////////////////////////// + +class InputReader; + +class PDFParser { + public: + using PDFOperatorHandler = std::function<void (const std::string&, std::vector<PDFObject>&)>; + + public: + std::vector<PDFObject> parse (std::istream &is); + std::vector<PDFObject> parse (const std::string &str); + std::vector<PDFObject> parse (InputReader &ir); + void parse (InputReader &ir, std::vector<PDFObject> &objects); + + std::vector<PDFObject> parse (std::istream &is, const PDFOperatorHandler &opHandler); + std::vector<PDFObject> parse (const std::string &str, const PDFOperatorHandler &opHandler); + std::vector<PDFObject> parse (InputReader &ir, const PDFOperatorHandler &opHandler); + void parse (InputReader &ir, std::vector<PDFObject> &objects, const PDFOperatorHandler &opHandler); + + protected: + PDFArray parseArray (InputReader &ir, const PDFOperatorHandler &opHandler); + PDFDict parseDict (InputReader &ir, const PDFOperatorHandler &opHandler); +}; + + +/** If errors occur while parsing a sequence of PDF objects, an instance of this exception is thrown. */ +struct PDFException : public MessageException { + PDFException (const std::string &msg) : MessageException(msg) {} +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSFilter.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSFilter.hpp index 61adb5af36e..4e74879d301 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSFilter.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSFilter.hpp @@ -2,7 +2,7 @@ ** PSFilter.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.cpp index 407f0eb32e7..c33bffb8927 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.cpp @@ -2,7 +2,7 @@ ** PSInterpreter.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,10 +18,11 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> +#include <algorithm> #include <cstring> #include <fstream> #include <sstream> +#include <unordered_map> #include "FileFinder.hpp" #include "InputReader.hpp" #include "Message.hpp" @@ -239,108 +240,90 @@ int GSDLLCALL PSInterpreter::output (void *inst, const char *buf, int len) { } -/** Converts a vector of strings to a vector of doubles. - * @param[in] str the strings to be converted - * @param[out] d the resulting doubles */ -static void str2double (const vector<string> &str, vector<double> &d) { - for (size_t i=0; i < str.size(); i++) { - istringstream iss(str[i]); - iss >> d[i]; - } -} - - /** Evaluates a command emitted by Ghostscript and invokes the corresponding * method of interface class PSActions. * @param[in] in reader pointing to the next command */ void PSInterpreter::callActions (InputReader &in) { - // array of currently supported operators (must be ascendingly sorted) - static const struct Operator { - const char *name; // name of operator + struct Operator { int pcount; // number of parameters (< 0 : variable number of parameters) - void (PSActions::*op)(vector<double> &p); // operation handler - } operators [] = { - {"applyscalevals", 3, &PSActions::applyscalevals}, - {"clip", 0, &PSActions::clip}, - {"clippath", 0, &PSActions::clippath}, - {"closepath", 0, &PSActions::closepath}, - {"curveto", 6, &PSActions::curveto}, - {"eoclip", 0, &PSActions::eoclip}, - {"eofill", 0, &PSActions::eofill}, - {"fill", 0, &PSActions::fill}, - {"grestore", 0, &PSActions::grestore}, - {"grestoreall", 0, &PSActions::grestoreall}, - {"gsave", 0, &PSActions::gsave}, - {"initclip", 0, &PSActions::initclip}, - {"lineto", 2, &PSActions::lineto}, - {"makepattern", -1, &PSActions::makepattern}, - {"moveto", 2, &PSActions::moveto}, - {"newpath", 1, &PSActions::newpath}, - {"querypos", 2, &PSActions::querypos}, - {"raw", -1, 0}, - {"restore", 1, &PSActions::restore}, - {"rotate", 1, &PSActions::rotate}, - {"save", 1, &PSActions::save}, - {"scale", 2, &PSActions::scale}, - {"setcmykcolor", 4, &PSActions::setcmykcolor}, - {"setdash", -1, &PSActions::setdash}, - {"setgray", 1, &PSActions::setgray}, - {"sethsbcolor", 3, &PSActions::sethsbcolor}, - {"setlinecap", 1, &PSActions::setlinecap}, - {"setlinejoin", 1, &PSActions::setlinejoin}, - {"setlinewidth", 1, &PSActions::setlinewidth}, - {"setmatrix", 6, &PSActions::setmatrix}, - {"setmiterlimit", 1, &PSActions::setmiterlimit}, - {"setopacityalpha", 1, &PSActions::setopacityalpha}, - {"setpattern", -1, &PSActions::setpattern}, - {"setrgbcolor", 3, &PSActions::setrgbcolor}, - {"shfill", -1, &PSActions::shfill}, - {"stroke", 0, &PSActions::stroke}, - {"translate", 2, &PSActions::translate}, + void (PSActions::*handler)(vector<double> &p); // operation handler + }; + static const unordered_map<string, Operator> operators { + {"applyscalevals", { 3, &PSActions::applyscalevals}}, + {"clip", { 0, &PSActions::clip}}, + {"clippath", { 0, &PSActions::clippath}}, + {"closepath", { 0, &PSActions::closepath}}, + {"curveto", { 6, &PSActions::curveto}}, + {"eoclip", { 0, &PSActions::eoclip}}, + {"eofill", { 0, &PSActions::eofill}}, + {"fill", { 0, &PSActions::fill}}, + {"grestore", { 0, &PSActions::grestore}}, + {"grestoreall", { 0, &PSActions::grestoreall}}, + {"gsave", { 0, &PSActions::gsave}}, + {"initclip", { 0, &PSActions::initclip}}, + {"lineto", { 2, &PSActions::lineto}}, + {"makepattern", {-1, &PSActions::makepattern}}, + {"moveto", { 2, &PSActions::moveto}}, + {"newpath", { 1, &PSActions::newpath}}, + {"querypos", { 2, &PSActions::querypos}}, + {"raw", {-1, nullptr}}, + {"restore", { 1, &PSActions::restore}}, + {"rotate", { 1, &PSActions::rotate}}, + {"save", { 1, &PSActions::save}}, + {"scale", { 2, &PSActions::scale}}, + {"setcmykcolor", { 4, &PSActions::setcmykcolor}}, + {"setdash", {-1, &PSActions::setdash}}, + {"setgray", { 1, &PSActions::setgray}}, + {"sethsbcolor", { 3, &PSActions::sethsbcolor}}, + {"setlinecap", { 1, &PSActions::setlinecap}}, + {"setlinejoin", { 1, &PSActions::setlinejoin}}, + {"setlinewidth", { 1, &PSActions::setlinewidth}}, + {"setmatrix", { 6, &PSActions::setmatrix}}, + {"setmiterlimit", { 1, &PSActions::setmiterlimit}}, + {"setopacityalpha",{ 1, &PSActions::setopacityalpha}}, + {"setpattern", {-1, &PSActions::setpattern}}, + {"setrgbcolor", { 3, &PSActions::setrgbcolor}}, + {"shfill", {-1, &PSActions::shfill}}, + {"stroke", { 0, &PSActions::stroke}}, + {"translate", { 2, &PSActions::translate}}, }; if (_actions) { in.skipSpace(); - // binary search - int first=0, last=sizeof(operators)/sizeof(Operator)-1; - while (first <= last) { - int mid = first+(last-first)/2; - int cmp = in.compare(operators[mid].name); - if (cmp < 0) - last = mid-1; - else if (cmp > 0) - first = mid+1; + auto it = operators.find(in.getWord()); + if (it != operators.end()) { + if (!it->second.handler) { // raw string data received? + _rawData.clear(); + in.skipSpace(); + while (!in.eof()) { + _rawData.emplace_back(in.getString()); + in.skipSpace(); + } + } else { - if (!operators[mid].op) { // raw string data received - _rawData.clear(); + // collect parameters + vector<string> params; + int pcount = it->second.pcount; + if (pcount < 0) { // variable number of parameters? in.skipSpace(); - while (!in.eof()) { - _rawData.emplace_back(in.getString()); + while (!in.eof()) { // read all available parameters + params.emplace_back(in.getString()); in.skipSpace(); } } - else { - // collect parameters and call handler - vector<string> params; - int pcount = operators[mid].pcount; - if (pcount < 0) { // variable number of parameters? + else { // fix number of parameters + for (int i=0; i < pcount; i++) { in.skipSpace(); - while (!in.eof()) { // read all available parameters - params.emplace_back(in.getString()); - in.skipSpace(); - } - } - else { // fix number of parameters - for (int i=0; i < pcount; i++) { - in.skipSpace(); - params.emplace_back(in.getString()); - } + params.emplace_back(in.getString()); } - vector<double> v(params.size()); - str2double(params, v); - (_actions->*operators[mid].op)(v); - _actions->executed(); } - break; + // convert parameter strings to doubles + vector<double> v(params.size()); + transform(params.begin(), params.end(), v.begin(), [](const string &str) { + return stod(str); + }); + // call operator handler + (_actions->*it->second.handler)(v); + _actions->executed(); } } } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.hpp index d3ae0733b54..503c45dac65 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.hpp @@ -2,7 +2,7 @@ ** PSInterpreter.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.cpp index cbcd7f1e10a..419df9cc8eb 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.cpp @@ -2,7 +2,7 @@ ** PSPattern.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,13 +18,14 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> +#include <array> #include <sstream> #include <vector> #include "BoundingBox.hpp" #include "PSPattern.hpp" #include "SpecialActions.hpp" #include "SVGTree.hpp" +#include "utility.hpp" #include "XMLNode.hpp" using namespace std; @@ -37,31 +38,34 @@ string PSPattern::svgID () const { /** Appends the definition of this pattern to the "def" section of the SVG tree. */ void PSPattern::apply (SpecialActions &actions) { - if (XMLElementNode *pattern = createPatternNode()) - actions.appendToDefs(pattern); + if (auto pattern = createPatternNode()) + actions.appendToDefs(std::move(pattern)); } ///////////////////////////////////////////////////////////////////////////// PSTilingPattern::PSTilingPattern (int id, BoundingBox &bbox, Matrix &matrix, double xstep, double ystep) - : PSPattern(id), _bbox(bbox), _matrix(matrix), _xstep(xstep), _ystep(ystep), _groupNode(0) + : PSPattern(id), _bbox(bbox), _matrix(matrix), _xstep(xstep), _ystep(ystep) { _groupNode = PSTilingPattern::createGroupNode(); + _groupNodePtr = _groupNode.get(); } -PSTilingPattern::~PSTilingPattern () { - delete _groupNode; +/** Assigns a new group element. */ +void PSTilingPattern::setGroupNode (unique_ptr<XMLElementNode> &&node) { + _groupNode = std::move(node); + _groupNodePtr = _groupNode.get(); } /** Creates a new pattern element representing the pattern defined in the PS code. */ -XMLElementNode* PSTilingPattern::createPatternNode () const { +unique_ptr<XMLElementNode> PSTilingPattern::createPatternNode () const { if (!_groupNode) - return 0; + return nullptr; BoundingBox box(_bbox.minX(), _bbox.minY(), _bbox.minX()+_xstep, _bbox.minY()+_ystep); - XMLElementNode *pattern = new XMLElementNode("pattern"); + auto pattern = util::make_unique<XMLElementNode>("pattern"); pattern->addAttribute("id", svgID()); pattern->addAttribute("x", box.minX()); pattern->addAttribute("y", box.minY()); @@ -75,33 +79,34 @@ XMLElementNode* PSTilingPattern::createPatternNode () const { // disable clipping at the tile borders => tiles become "transparent" pattern->addAttribute("overflow", "visible"); } - if (XMLElementNode *clip=createClipNode()) - pattern->append(clip); - pattern->append(_groupNode); + if (auto clip = createClipNode()) + pattern->append(std::move(clip)); + pattern->append(std::move(_groupNode)); + _groupNode.reset(); return pattern; } /** Creates a new clip element restricting the drawing area to the * dimensions given in the definition of the pattern. */ -XMLElementNode* PSTilingPattern::createClipNode() const { - XMLElementNode *clip = new XMLElementNode("clipPath"); +unique_ptr<XMLElementNode> PSTilingPattern::createClipNode() const { + auto clip = util::make_unique<XMLElementNode>("clipPath"); clip->addAttribute("id", "pc"+XMLString(psID())); - XMLElementNode *rect = new XMLElementNode("rect"); + auto rect = util::make_unique<XMLElementNode>("rect"); rect->addAttribute("x", _bbox.minX()); rect->addAttribute("y", _bbox.minY()); rect->addAttribute("width", _bbox.width()); rect->addAttribute("height", _bbox.height()); - clip->append(rect); + clip->append(std::move(rect)); return clip; } /** Creates a new group element that contains all "drawing" elements that * define the pattern graphic. */ -XMLElementNode* PSTilingPattern::createGroupNode () const { +unique_ptr<XMLElementNode> PSTilingPattern::createGroupNode () const { // add all succeeding path elements to this group - XMLElementNode *group = new XMLElementNode("g"); + auto group = util::make_unique<XMLElementNode>("g"); group->addAttribute("clip-path", XMLString("url(#pc")+XMLString(psID())+")"); return group; } @@ -109,7 +114,7 @@ XMLElementNode* PSTilingPattern::createGroupNode () const { void PSTilingPattern::apply (SpecialActions &actions) { PSPattern::apply(actions); - _groupNode = 0; + _groupNode.reset(); } @@ -124,21 +129,15 @@ PSColoredTilingPattern::PSColoredTilingPattern (int id, BoundingBox &bbox, Matri ///////////////////////////////////////////////////////////////////////////// PSUncoloredTilingPattern::PSUncoloredTilingPattern (int id, BoundingBox &bbox, Matrix &matrix, double xstep, double ystep) - : PSTilingPattern(id, bbox, matrix, xstep, ystep), _applied(false) + : PSTilingPattern(id, bbox, matrix, xstep, ystep), _applied() { } -PSUncoloredTilingPattern::~PSUncoloredTilingPattern () { - if (_applied) - setGroupNode(0); // prevent deleting the group node in the parent destructor -} - - /** Returns an SVG id value that identifies this pattern with the current color applied. */ string PSUncoloredTilingPattern::svgID () const { ostringstream oss; - oss << PSPattern::svgID() << '-' << hex << _currentColor; + oss << PSPattern::svgID() << '-' << hex << uint32_t(_currentColor); return oss.str(); } @@ -149,15 +148,16 @@ void PSUncoloredTilingPattern::apply (SpecialActions &actions) { set<Color>::iterator it=_colors.find(_currentColor); if (it == _colors.end()) { if (_applied) - setGroupNode(static_cast<XMLElementNode*>(getGroupNode()->clone())); + setGroupNode(util::static_unique_ptr_cast<XMLElementNode>(getGroupNode()->clone())); // assign current color to the pattern graphic vector<XMLElementNode*> colored_elems; - const char *attribs[] = {"fill", "stroke"}; - for (int i=0; i < 2; i++) { - getGroupNode()->getDescendants(0, attribs[i], colored_elems); - for (XMLElementNode *elem : colored_elems) - if (string(elem->getAttributeValue(attribs[i])) != "none") - elem->addAttribute(attribs[i], _currentColor.svgColorString()); + const array<const char*, 2> attribs = {{"fill", "stroke"}}; + for (const char *attrib : attribs) { + getGroupNode()->getDescendants(nullptr, attrib, colored_elems); + for (XMLElementNode *elem : colored_elems) { + if (string(elem->getAttributeValue(attrib)) != "none") + elem->addAttribute(attrib, _currentColor.svgColorString()); + } colored_elems.clear(); } PSPattern::apply(actions); @@ -167,9 +167,9 @@ void PSUncoloredTilingPattern::apply (SpecialActions &actions) { } -XMLElementNode* PSUncoloredTilingPattern::createClipNode() const { +unique_ptr<XMLElementNode> PSUncoloredTilingPattern::createClipNode() const { // only the first instance of this patterns get a clip element if (_colors.empty()) return PSTilingPattern::createClipNode(); - return 0; + return nullptr; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.hpp index 122ae590f82..ec2a6949331 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.hpp @@ -2,7 +2,7 @@ ** PSPattern.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,19 +21,20 @@ #ifndef PSPATTERN_HPP #define PSPATTERN_HPP +#include <memory> #include <set> #include <string> #include "BoundingBox.hpp" #include "Color.hpp" #include "Matrix.hpp" +#include "XMLNode.hpp" class SpecialActions; class SVGTree; class XMLElementNode; -class PSPattern -{ +class PSPattern { public: virtual ~PSPattern () =default; virtual int psID () const {return _id;} @@ -42,54 +43,50 @@ class PSPattern protected: PSPattern (int id) : _id(id) {} - virtual XMLElementNode* createPatternNode () const =0; + virtual std::unique_ptr<XMLElementNode> createPatternNode () const =0; private: int _id; ///< PostSCript ID of this pattern }; -class PSTilingPattern : public PSPattern -{ +class PSTilingPattern : public PSPattern { public: - ~PSTilingPattern (); - virtual XMLElementNode* getContainerNode () {return _groupNode;} + virtual XMLElementNode* getContainerNode () {return _groupNode.get();} void apply (SpecialActions &actions) override; protected: PSTilingPattern (int id, BoundingBox &bbox, Matrix &matrix, double xstep, double ystep); - XMLElementNode* createPatternNode () const override; - virtual XMLElementNode* createClipNode () const; - virtual XMLElementNode* createGroupNode () const; - virtual XMLElementNode* getGroupNode () const {return _groupNode;} - virtual void setGroupNode (XMLElementNode *node) {_groupNode = node;} + std::unique_ptr<XMLElementNode> createPatternNode () const override; + virtual std::unique_ptr<XMLElementNode> createClipNode () const; + virtual std::unique_ptr<XMLElementNode> createGroupNode () const; + virtual XMLElementNode* getGroupNode () const {return _groupNodePtr;} + virtual void setGroupNode (std::unique_ptr<XMLElementNode> &&node); private: BoundingBox _bbox; ///< bounding box of the tile graphics Matrix _matrix; ///< tile transformation double _xstep, _ystep; ///< horizontal and vertical distance between neighboured tiles - XMLElementNode *_groupNode; ///< group containing the drawing elements + mutable std::unique_ptr<XMLElementNode> _groupNode; ///< group containing the drawing elements + XMLElementNode *_groupNodePtr; ///< keeps a pointer to the group node even after moving _groupNode to the SVGTree }; -class PSColoredTilingPattern : public PSTilingPattern -{ +class PSColoredTilingPattern final : public PSTilingPattern { public: PSColoredTilingPattern (int id, BoundingBox &bbox, Matrix &matrix, double xstep, double ystep); }; -class PSUncoloredTilingPattern : public PSTilingPattern -{ +class PSUncoloredTilingPattern final : public PSTilingPattern { public: PSUncoloredTilingPattern (int id, BoundingBox &bbox, Matrix &matrix, double xstep, double ystep); - ~PSUncoloredTilingPattern (); std::string svgID () const override; void setColor (Color color) {_currentColor = color;} void apply (SpecialActions &actions) override; protected: - XMLElementNode* createClipNode () const override; + std::unique_ptr<XMLElementNode> createClipNode () const override; private: std::set<Color> _colors; ///< colors this pattern has already been drawn with diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.cpp index 7ad11c04d6a..efe5835981e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.cpp @@ -2,7 +2,7 @@ ** PSPreviewFilter.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <vector> #include "InputBuffer.hpp" #include "InputReader.hpp" diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.hpp index 0479120391c..62a40699145 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.hpp @@ -2,7 +2,7 @@ ** PSPreviewFilter.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.cpp index c2f3b4f3ad5..29627b1be2e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.cpp @@ -2,7 +2,7 @@ ** PageRanges.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <sstream> #include "InputBuffer.hpp" #include "InputReader.hpp" diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.hpp index 61f04f7225a..28fa5a7b914 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.hpp @@ -2,7 +2,7 @@ ** PageRanges.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.cpp index a1a5dd41ce8..4f4cc448ecc 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.cpp @@ -2,7 +2,7 @@ ** PageSize.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <algorithm> #include <cctype> #include <cmath> @@ -29,40 +28,39 @@ using namespace std; -/** Computes width and height of ISO/DIN An in millimeters. +/** Computes width and height of ISO/DIN An. * @param[in] n the A level (e.g. n=4 => DIN A4) * @param[out] width contains the page width when function returns * @param[out] height contains the page height when function returns */ -static void computeASize (int n, double &width, double &height) { - double sqrt2 = sqrt(2.0); - height = floor(1189.0/pow(sqrt2, n)+0.5); - width = floor(height/sqrt2+0.5); +static void computeASize (int n, Length &width, Length &height) { + height.set(floor(1189.0/pow(math::SQRT2, n)+0.5), Length::Unit::MM); + width.set(floor(height.mm()/math::SQRT2+0.5), Length::Unit::MM); } -/** Computes width and height of ISO/DIN Bn in millimeters. +/** Computes width and height of ISO/DIN Bn. * @param[in] n the B level (e.g. n=4 => DIN B4) * @param[out] width contains the page width when function returns * @param[out] height contains the page height when function returns */ -static void computeBSize (int n, double &width, double &height) { - double w, h; +static void computeBSize (int n, Length &width, Length &height) { + Length w, h; computeASize(n, width, height); computeASize(n-1, w, h); - width = floor(sqrt(width * w)+0.5); - height = floor(sqrt(height * h)+0.5); + width.set(floor(sqrt(width.mm() * w.mm())+0.5), Length::Unit::MM); + height.set(floor(sqrt(height.mm() * h.mm())+0.5), Length::Unit::MM); } -/** Computes width and height of ISO/DIN Cn in millimeters. +/** Computes width and height of ISO/DIN Cn. * @param[in] n the C level (e.g. n=4 => DIN C4) * @param[out] width contains the page width when function returns * @param[out] height contains the page height when function returns */ -static void computeCSize (int n, double &width, double &height) { - double w, h; +static void computeCSize (int n, Length &width, Length &height) { + Length w, h; computeASize(n, width, height); computeBSize(n, w, h); - width = floor(sqrt(width * w)+0.5); - height = floor(sqrt(height * h)+0.5); + width.set(floor(sqrt(width.mm() * w.mm())+0.5), Length::Unit::MM); + height.set(floor(sqrt(height.mm() * h.mm())+0.5), Length::Unit::MM); } @@ -70,12 +68,12 @@ static void computeCSize (int n, double &width, double &height) { * @param[in] n the D level (e.g. n=4 => DIN D4) * @param[out] width contains the page width when function returns * @param[out] height contains the page height when function returns */ -static void computeDSize (int n, double &width, double &height) { - double w, h; +static void computeDSize (int n, Length &width, Length &height) { + Length w, h; computeASize(n, width, height); computeBSize(n+1, w, h); - width = floor(sqrt(width * w)+0.5); - height = floor(sqrt(height * h)+0.5); + width.set(floor(sqrt(width.mm() * w.mm())+0.5), Length::Unit::MM); + height.set(floor(sqrt(height.mm() * h.mm())+0.5), Length::Unit::MM); } @@ -86,16 +84,17 @@ PageSize::PageSize (const string &name) : _width(0), _height(0) { } -void PageSize::resize (double w, double h) { +void PageSize::resize (Length w, Length h) { _width = w; _height = h; } + void PageSize::resize (string name) { if (name.length() < 2) throw PageSizeException("unknown page format: "+name); - util::tolower(name); + name = util::tolower(name); // extract optional suffix size_t pos = name.rfind("-"); bool landscape = false; @@ -109,24 +108,24 @@ void PageSize::resize (string name) { } if (name == "invoice") { - _width = 140; - _height = 216; + _width = 140_mm; + _height = 216_mm; } else if (name == "executive") { - _width = 184; - _height = 267; + _width = 184_mm; + _height = 267_mm; } else if (name == "legal") { - _width = 216; - _height = 356; + _width = 216_mm; + _height = 356_mm;; } else if (name == "letter") { - _width = 216; - _height = 279; + _width = 216_mm; + _height = 279_mm; } else if (name == "ledger") { - _width = 279; - _height = 432; + _width = 279_mm;; + _height = 432_mm; } else if (isdigit(name[1]) && name.length() < 5) { // limit length of number to prevent arithmetic errors istringstream iss(name.substr(1)); @@ -140,13 +139,8 @@ void PageSize::resize (string name) { default : throw PageSizeException("invalid page format: "+name); } } - if (_width == 0 || _height == 0) + if (_width.pt() == 0 || _height.pt() == 0) throw PageSizeException("unknown page format: "+name); if (landscape) swap(_width, _height); - - const double bppmm = 72/25.4; // PS points per millimeter (72pt = 1in = 25.4mm) - _width *= bppmm; - _height *= bppmm; } - diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.hpp index 9c0dced9491..f9db51b4bc1 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.hpp @@ -2,7 +2,7 @@ ** PageSize.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,28 +21,26 @@ #ifndef PAGESIZE_HPP #define PAGESIZE_HPP +#include "Length.hpp" #include "MessageException.hpp" -struct PageSizeException : public MessageException -{ +struct PageSizeException : public MessageException { PageSizeException (const std::string &msg) : MessageException(msg) {} }; -class PageSize -{ +class PageSize { public: - PageSize (double w=0, double h=0) : _width(w), _height(h) {} + PageSize () =default; + PageSize (Length w, Length h) : _width(w), _height(h) {} PageSize (const std::string &name); void resize (std:: string name); - void resize (double w, double h); - double widthInBP () const {return _width;} - double heightInBP () const {return _height;} - double widthInMM () const {return _width*25.4/72;} - double heightInMM () const {return _height*25.4/72;} - bool valid () const {return _width > 0 && _height > 0;} + void resize (Length w, Length h); + Length width () const {return _width;} + Length height () const {return _height;} + bool valid () const {return _width.pt() > 0 && _height.pt() > 0;} private: - double _width, _height; // in PS points + Length _width, _height; }; #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Pair.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Pair.hpp index c9058a3ff69..a3747faeb57 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Pair.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Pair.hpp @@ -2,7 +2,7 @@ ** Pair.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -34,6 +34,7 @@ class Pair Pair operator -= (const Pair &p) {_x -= p._x; _y -= p._y; return *this;} Pair operator *= (T c) {_x *= c; _y *= c; return *this;} Pair operator /= (T c) {_x /= c; _y /= c; return *this;} + Pair operator - () const {return Pair(-_x, -_y);} Pair ortho () const {return Pair(-_y, _x);} double length () const {return std::sqrt(_x*_x + _y*_y);} bool operator == (const Pair &p) const {return _x == p._x && _y == p._y;} @@ -48,6 +49,10 @@ class Pair T _x, _y; }; +template <typename T> +inline Pair<T> abs (const Pair<T> &p) { + return Pair<T>(std::abs(p.x()), std::abs(p.y())); +} struct Pair32 : public Pair<int32_t> { diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.cpp index 031d59ffaf0..00cd7428757 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.cpp @@ -2,7 +2,7 @@ ** PapersizeSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include "Length.hpp" #include "Message.hpp" #include "PapersizeSpecialHandler.hpp" #include "SpecialActions.hpp" @@ -30,21 +29,18 @@ void PapersizeSpecialHandler::preprocess (const char*, std::istream &is, Special is >> params; Length w, h; size_t splitpos = params.find(','); - if (splitpos == string::npos) { - w.set(params); - h.set(params); + try { + if (splitpos == string::npos) { + w.set(params); + h.set(params); + } + else { + w.set(params.substr(0, splitpos)); + h.set(params.substr(splitpos+1)); + } + storePaperSize(actions.getCurrentPageNumber(), w, h); } - else { - w.set(params.substr(0, splitpos)); - h.set(params.substr(splitpos+1)); - } - DoublePair whpair(w.bp(), h.bp()); - if (_pageSizes.empty() || _pageSizes.back().second != whpair) { - unsigned pageno = actions.getCurrentPageNumber(); - if (!_pageSizes.empty() && _pageSizes.back().first == pageno) - _pageSizes.back().second = whpair; - else - _pageSizes.emplace_back(PageSize(pageno, whpair)); + catch (UnitException &e) { // ignore invalid length units for now } } @@ -54,18 +50,28 @@ bool PapersizeSpecialHandler::process (const char*, std::istream&, SpecialAction } -void PapersizeSpecialHandler::dviEndPage (unsigned pageno, SpecialActions &actions) { - if (actions.getBBoxFormatString() != "papersize") - return; +/** Records a paper size for a given page number for later processing. This function doesn't + * assign them to the page. */ +void PapersizeSpecialHandler::storePaperSize (unsigned pageno, Length width, Length height) { + DoublePair whpair(width.bp(), height.bp()); + if (_pageSizes.empty() || _pageSizes.back().second != whpair) { + if (!_pageSizes.empty() && _pageSizes.back().first == pageno) + _pageSizes.back().second = whpair; + else + _pageSizes.emplace_back(PageSize(pageno, whpair)); + } +} + +/** Applies the previously recorded size to a given page. */ +void PapersizeSpecialHandler::applyPaperSize (unsigned pageno, SpecialActions &actions) { // find page n >= pageno that contains a papersize special - typedef vector<PageSize>::iterator Iterator; - Iterator lb_it = lower_bound(_pageSizes.begin(), _pageSizes.end(), PageSize(pageno, DoublePair()), + auto lb_it = lower_bound(_pageSizes.begin(), _pageSizes.end(), PageSize(pageno, DoublePair()), [](const PageSize &ps1, const PageSize &ps2) { // order PageSize objects by page number return ps1.first < ps2.first; }); - Iterator it = _pageSizes.end(); + auto it = _pageSizes.end(); if (lb_it != _pageSizes.end() && lb_it->first == pageno) it = lb_it; // if current page contains a papersize special, use it else if (lb_it != _pageSizes.begin()) // no papersize special on current page? @@ -80,7 +86,13 @@ void PapersizeSpecialHandler::dviEndPage (unsigned pageno, SpecialActions &actio } -const char** PapersizeSpecialHandler::prefixes () const { - static const char *pfx[] = {"papersize=", 0}; +void PapersizeSpecialHandler::dviEndPage (unsigned pageno, SpecialActions &actions) { + if (actions.getBBoxFormatString() == "papersize") + applyPaperSize(pageno, actions); +} + + +const vector<const char*> PapersizeSpecialHandler::prefixes () const { + const vector<const char*> pfx {"papersize="}; return pfx; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.hpp index 211920a9340..c38b58cd649 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.hpp @@ -2,7 +2,7 @@ ** PapersizeSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,26 +23,28 @@ #include <utility> #include <vector> +#include "Length.hpp" #include "SpecialHandler.hpp" class PapersizeSpecialHandler : public SpecialHandler, public DVIEndPageListener { - typedef std::pair<double,double> DoublePair; - typedef std::pair<unsigned,DoublePair> PageSize; + using DoublePair = std::pair<double,double>; // (width, height) + using PageSize = std::pair<unsigned,DoublePair>; // page number -> (width, height) public: void preprocess (const char *prefix, std::istream &is, SpecialActions &actions) override; bool process (const char *prefix, std::istream &is, SpecialActions &actions) override; const char* info () const override {return "special to set the page size";} const char* name () const override {return "papersize";} - const char** prefixes () const override; + const std::vector<const char*> prefixes () const override; + void storePaperSize (unsigned pageno, Length width, Length height); void reset () {_pageSizes.clear();} protected: void dviEndPage (unsigned pageno, SpecialActions &actions) override; + void applyPaperSize (unsigned pageno, SpecialActions &actions); private: std::vector<PageSize> _pageSizes; }; #endif - diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.cpp index 7fa21855b23..ceb550ea815 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.cpp @@ -2,7 +2,7 @@ ** PathClipper.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,16 +18,15 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include "Bezier.hpp" #include "PathClipper.hpp" using namespace std; using namespace ClipperLib; -typedef ClipperLib::Path Polygon; -typedef ClipperLib::Paths Polygons; -typedef PathClipper::CurvedPath CurvedPath; +using Polygon = ClipperLib::Path; +using Polygons = ClipperLib::Paths; +using CurvedPath = PathClipper::CurvedPath; const int SCALE_FACTOR = 1000; @@ -192,12 +191,6 @@ static int32_t segment_id (const IntPoint &p1, const IntPoint &p2, double &t1, d } -inline int32_t edge_id (const IntPoint &p1, const IntPoint &p2) { - double t=0; - return segment_id(p1, p2, t, t); -} - - /** This function expects 3 colinear points p1, p2, and q, where q lies between p1 and p2, * i.e. q divides the line \f$ \overline{p_1 p_2} \f$ somewhere. The function returns * the corresponding division ratio. */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.hpp index b265c9de0cf..72ce9a47695 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.hpp @@ -2,7 +2,7 @@ ** PathClipper.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -34,7 +34,7 @@ using ClipperLib::IntPoint; class PathClipper { public: - typedef GraphicsPath<double> CurvedPath; + using CurvedPath = GraphicsPath<double>; public: PathClipper () : _numLines(0) {} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.cpp index f5e6026bc99..99d6e370190 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.cpp @@ -2,7 +2,7 @@ ** PdfSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,58 +18,282 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> +#include <array> #include <cstring> +#include <unordered_map> +#include <utility> +#include "Color.hpp" +#include "HyperlinkManager.hpp" #include "InputReader.hpp" #include "MapLine.hpp" #include "PdfSpecialHandler.hpp" #include "FontMap.hpp" #include "Message.hpp" +#include "PapersizeSpecialHandler.hpp" +#include "PDFParser.hpp" +#include "SpecialActions.hpp" +#include "SpecialManager.hpp" using namespace std; -PdfSpecialHandler::PdfSpecialHandler () : _maplineProcessed(false) +using CmdHandler = void (PdfSpecialHandler::*)(StreamInputReader&, SpecialActions&); + + +PdfSpecialHandler::PdfSpecialHandler () : _active(false), _maplineProcessed(false) { } -bool PdfSpecialHandler::process (const char *prefix, istream &is, SpecialActions &actions) { +void PdfSpecialHandler::preprocess (const char*, istream &is, SpecialActions &actions) { + StreamInputReader ir(is); + ir.skipSpace(); + string cmdstr = ir.getWord(); + static unordered_map<string, CmdHandler> commands = { + {"bann", &PdfSpecialHandler::preprocessBeginAnn}, + {"bannot", &PdfSpecialHandler::preprocessBeginAnn}, + {"beginann", &PdfSpecialHandler::preprocessBeginAnn}, + {"dest", &PdfSpecialHandler::preprocessDest}, + {"pagesize", &PdfSpecialHandler::preprocessPagesize} + }; + auto it = commands.find(cmdstr); + if (it != commands.end()) + (this->*it->second)(ir, actions); +} + + +bool PdfSpecialHandler::process (const char*, istream &is, SpecialActions &actions) { + _active = true; StreamInputReader ir(is); ir.skipSpace(); - string cmd = ir.getWord(); + string cmdstr = ir.getWord(); ir.skipSpace(); - if (cmd == "mapline" || cmd == "mapfile") { - // read mode selector ('+', '-', or '=') - char modechar = '+'; // default mode (append if new, do not replace existing mapping) - if (strchr("=+-", ir.peek())) // leading modifier given? - modechar = char(ir.get()); - else if (!_maplineProcessed) { // no modifier given? - // remove default map entries if this is the first mapline/mapfile special called - FontMap::instance().clear(); - } + // dvipdfm(x) specials currently supported + static unordered_map<string, CmdHandler> commands = { + {"bann", &PdfSpecialHandler::processBeginAnn}, + {"bannot", &PdfSpecialHandler::processBeginAnn}, + {"beginann", &PdfSpecialHandler::processBeginAnn}, + {"eann", &PdfSpecialHandler::processEndAnn}, + {"eannot", &PdfSpecialHandler::processEndAnn}, + {"endann", &PdfSpecialHandler::processEndAnn}, + {"dest", &PdfSpecialHandler::processDest}, + {"mapfile", &PdfSpecialHandler::processMapfile}, + {"mapline", &PdfSpecialHandler::processMapline} + }; + auto it = commands.find(cmdstr); + if (it != commands.end()) + (this->*it->second)(ir, actions); + return true; +} + + +static char prepare_mode (InputReader &ir, bool maplineProcessed) { + // read mode selector ('+', '-', or '=') + char modechar = '+'; // default mode (append if new, do not replace existing mapping) + if (strchr("=+-", ir.peek())) // leading modifier given? + modechar = static_cast<char>(ir.get()); + else if (!maplineProcessed) { // no modifier given? + // remove default map entries if this is the first mapline/mapfile special called + FontMap::instance().clear(); + } + return modechar; +} - if (cmd == "mapline") { - try { - MapLine mapline(is); - FontMap::instance().apply(mapline, modechar); + +/** Sets the page size. This command is similar to the papersize special. + * Syntax pdf:pagesize (<dimname> <dimlenhth>)+ */ +void PdfSpecialHandler::preprocessPagesize (StreamInputReader &ir, SpecialActions &actions) { + // add page sizes to collection of paper sizes in order to handle them equally + SpecialHandler *handler = SpecialManager::instance().findHandlerByName("papersize"); + if (auto *papersizeHandler = dynamic_cast<PapersizeSpecialHandler*>(handler)) { + try { + Length width, height; + // parse parameter sequence of the form (name length)+ + while (!ir.eof()) { + string dimname = ir.getWord(); + string lenstr = ir.getString(" \t"); + // only consider width and height settings + if (dimname == "width" && !lenstr.empty()) + width.set(lenstr); + else if (dimname == "height" && !lenstr.empty()) + height.set(lenstr); } - catch (const MapLineException &ex) { - Message::wstream(true) << "pdf:mapline: " << ex.what() << '\n'; + papersizeHandler->storePaperSize(actions.getCurrentPageNumber(), width, height); + } + catch (UnitException &e) { // ignore invalid length units for now + } + } +} + + +void PdfSpecialHandler::processMapfile (StreamInputReader &ir, SpecialActions&) { + char modechar = prepare_mode(ir, _maplineProcessed); + string fname = ir.getString(); + if (!FontMap::instance().read(fname, modechar)) + Message::wstream(true) << "can't open map file " << fname << '\n'; +} + + +void PdfSpecialHandler::processMapline (StreamInputReader &ir, SpecialActions&) { + char modechar = prepare_mode(ir, _maplineProcessed); + try { + MapLine mapline(ir.getStream()); + FontMap::instance().apply(mapline, modechar); + } + catch (const MapLineException &ex) { + Message::wstream(true) << "pdf:mapline: " << ex.what() << '\n'; + } +} + + +/** Defines a named destination, e.g. a link target. + * Syntax: dest PDFString PDFDest */ +void PdfSpecialHandler::preprocessDest (StreamInputReader &ir, SpecialActions &actions) { + PDFParser parser; + vector<PDFObject> objects = parser.parse(ir, [&](const string &opname, vector<PDFObject> &objects) { + if (!opname.empty() && opname[0] == '@') { + if (opname == "@thispage") + objects.emplace_back(static_cast<int>(actions.getCurrentPageNumber())); + else if (opname == "@xpos") + objects.emplace_back(actions.getX()); + else if (opname == "@ypos") + objects.emplace_back(actions.getY()); + } + }); + if (objects.size() < 2) + return; + auto *name = objects[0].get<string>(); + auto *dest = objects[1].get<PDFArray>(); + // get target info from array [pageno /XYZ xpos ypos zpos] + if (name && dest && dest->size() >= 4 && dest->at(0).get<int>()) { + int pageno = *dest->at(0).get<int>(); + HyperlinkManager::instance().addNameAchor(*name, pageno); + } +} + + +/** Extracts the URI from a PDF annotation dictionary. "GoTo" targets (named anchors) + * are prefixed with a '#'. + * @param[in] annotDict annotation dictionary containing the target URI + * @return the URI if one was found, "" otherwise */ +static string get_uri (const PDFDict &annotDict) { + // At the moment, we only support link annotations + const PDFObject *type = annotDict.get("Type"); + if (type && string(*type) == "Annot") { + const PDFObject *subtype = annotDict.get("Subtype"); + if (subtype && string(*subtype) == "Link") { + const PDFObject *dict = annotDict.get("A"); + if (const PDFDict *actionDict = dict->get<PDFDict>()) { + if (const PDFObject *s = actionDict->get("S")) { + if (string(*s) == "GoTo") { + if (const PDFObject *dest = actionDict->get("D")) + return "#" + string(*dest); + } + else if (string(*s) == "URI") { + if (const PDFObject *uri = actionDict->get("URI")) + return string(*uri); + } + } } } - else { // mapfile - string fname = ir.getString(); - if (!FontMap::instance().read(fname, modechar)) - Message::wstream(true) << "can't open map file " << fname << '\n'; + } + return ""; +} + + +void PdfSpecialHandler::preprocessBeginAnn (StreamInputReader &ir, SpecialActions&) { + PDFParser parser; + vector<PDFObject> pdfobjs = parser.parse(ir); + if (pdfobjs.empty() || !pdfobjs[0].get<PDFDict>()) + return; + const PDFDict &annotDict = *pdfobjs[0].get<PDFDict>(); + string uri = get_uri(annotDict); + if (!uri.empty()) + HyperlinkManager::instance().addHrefAnchor(uri); +} + + +/** Converts a PDFObject to a Color, where a single number denotes a gray value. + * Number arrays are treated as gray, RGB, or CMYK colors depending on the + * number of components. */ +static Color to_color (const PDFObject &obj) { + Color color; + if (obj.get<int>() || obj.get<double>()) + color.setGray(double(obj)); + else if (auto *colorArray = obj.get<PDFArray>()) { + size_t size = min(size_t(4), colorArray->size()); + valarray<double> colorComps(size); + for (size_t i=0; i < size; i++) + colorComps[i] = double(colorArray->at(i)); + switch (size) { + case 1: color.setGray(colorComps); break; + case 3: color.setRGB(colorComps); break; + case 4: color.setCMYK(colorComps); break; } - _maplineProcessed = true; } - return true; + return color; +} + + +/** Begins a breakable annotation, e.g. a hyperlink. + * Syntax: beginann PDFDict */ +void PdfSpecialHandler::processBeginAnn (StreamInputReader &ir, SpecialActions &actions) { + PDFParser parser; + vector<PDFObject> pdfobjs = parser.parse(ir); + if (pdfobjs.empty() || !pdfobjs[0].get<PDFDict>()) + return; + const PDFDict &annotDict = *pdfobjs[0].get<PDFDict>(); + string uri = get_uri(annotDict); + if (uri.empty()) + return; + + // check presence of entry /Border [hr vr bw] defining the horizontal/vertical + // corner radius and the border width + auto it = annotDict.find("Border"); + if (it != annotDict.end() && it->second.get<PDFArray>() && it->second.get<PDFArray>()->size() > 2) + HyperlinkManager::instance().setLineWidth(double(it->second.get<PDFArray>()->at(2))); + + // check presence of entry /C defining the border color + it = annotDict.find("C"); + if (it != annotDict.end()) + HyperlinkManager::setDefaultLinkColor(to_color(it->second)); + HyperlinkManager::instance().createLink(uri, actions); +} + + +/** Terminates the preceding breakable annotation. + * Syntax: endann */ +void PdfSpecialHandler::processEndAnn (StreamInputReader&, SpecialActions &actions) { + HyperlinkManager::instance().closeAnchor(actions); +} + + +void PdfSpecialHandler::processDest (StreamInputReader &ir, SpecialActions &actions) { + PDFParser parser; + vector<PDFObject> objects = parser.parse(ir); + if (!objects.empty()) { + if (auto *name = objects[0].get<string>()) + HyperlinkManager::instance().setActiveNameAnchor(*name, actions); + } +} + + +/** This method is called every time the DVI position changes. */ +void PdfSpecialHandler::dviMovedTo (double x, double y, SpecialActions &actions) { + if (_active) + HyperlinkManager::instance().checkNewLine(actions); +} + + +void PdfSpecialHandler::dviEndPage (unsigned pageno, SpecialActions &actions) { + if (_active) { + HyperlinkManager::instance().createViews(pageno, actions); + _active = false; + } } -const char** PdfSpecialHandler::prefixes () const { - static const char *pfx[] = {"pdf:", 0}; +const vector<const char*> PdfSpecialHandler::prefixes () const { + const vector<const char*> pfx {"pdf:"}; return pfx; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.hpp index cca0d07fc83..f2d145c1328 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.hpp @@ -2,7 +2,7 @@ ** PdfSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,16 +23,33 @@ #include "SpecialHandler.hpp" -class PdfSpecialHandler : public SpecialHandler -{ +class StreamInputReader; + +class PdfSpecialHandler : public SpecialHandler, public DVIPositionListener, public DVIEndPageListener { public: PdfSpecialHandler (); - const char* info () const override {return "pdfTeX font map specials";} + const char* info () const override {return "PDF hyperlink, font map, and pagesize specials";} const char* name () const override {return "pdf";} - const char** prefixes () const override; + const std::vector<const char*> prefixes () const override; + void preprocess (const char *prefix, std::istream &is, SpecialActions &actions) override; bool process (const char *prefix, std::istream &is, SpecialActions &actions) override; + protected: + // handlers for corresponding PDF specials + void preprocessBeginAnn (StreamInputReader &ir, SpecialActions &actions); + void preprocessDest (StreamInputReader &ir, SpecialActions &actions); + void preprocessPagesize (StreamInputReader &ir, SpecialActions &actions); + void processBeginAnn (StreamInputReader &ir, SpecialActions &actions); + void processEndAnn (StreamInputReader &ir, SpecialActions &actions); + void processDest (StreamInputReader &ir, SpecialActions &actions); + void processMapfile (StreamInputReader &ir, SpecialActions &actions); + void processMapline (StreamInputReader &ir, SpecialActions &actions); + + void dviMovedTo (double x, double y, SpecialActions &actions) override; + void dviEndPage (unsigned pageno, SpecialActions &actions) override; + private: + bool _active; bool _maplineProcessed; ///< true if a mapline or mapfile special has already been processed }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.cpp index 0f831439c60..05c4a6e82d2 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.cpp @@ -2,7 +2,7 @@ ** PreScanDVIReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.hpp index b543490c8a4..eb646e9a7a7 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.hpp @@ -2,7 +2,7 @@ ** PreScanDVIReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.cpp index 16c2d41b3c4..238bacb2373 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.cpp @@ -2,7 +2,7 @@ ** Process.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,15 +18,13 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> - #ifdef _WIN32 - #include <windows.h> + #include "windows.hpp" #else #include <fcntl.h> #include <sys/wait.h> - #include <unistd.h> #include <signal.h> + #include <unistd.h> #endif #include <cstdlib> @@ -36,43 +34,208 @@ using namespace std; + +/** Helper class that encapsulates the system-specific parts of + * running a subprocess and retrieving its terminal output. */ +class Subprocess { + public: + enum class State {RUNNING, FINISHED, FAILED}; + + public: + Subprocess (); + Subprocess (const Subprocess&) =delete; + Subprocess (Subprocess&&) =delete; + ~Subprocess (); + bool run (const string &cmd, string params); + bool readFromPipe (string &out); + State state (); + + private: +#ifdef _WIN32 + HANDLE _pipeReadHandle; ///< handle of read end of pipe + HANDLE _childProcHandle; ///< handle of child process +#else + int _readfd; ///< file descriptor of read end of pipe + pid_t _pid; ///< PID of the subprocess +#endif +}; + + Process::Process (const string &cmd, const string ¶mstr) : _cmd(cmd), _paramstr(paramstr) { } -#ifdef _WIN32 -static void pipe_read (HANDLE handle, string &out) { - char buf[4096]; - out.clear(); +/** Runs the process and waits until it's finished. + * @param[out] out takes the output written to stdout by the executed subprocess + * @return true if process terminated properly + * @throw SignalException if CTRL-C was pressed during execution */ +bool Process::run (string *out) { + Subprocess subprocess; + if (!subprocess.run(_cmd, _paramstr)) + return false; for (;;) { - DWORD num_chars; - bool success = ReadFile(handle, buf, 1024, &num_chars, NULL); - if (!success || num_chars == 0) - break; - out.append(buf, num_chars); + if (out) + subprocess.readFromPipe(*out); + Subprocess::State state = subprocess.state(); + if (state != Subprocess::State::RUNNING) + return state == Subprocess::State::FINISHED; + SignalHandler::instance().check(); } - // remove trailing space - if (!out.empty()) { - int pos = out.size()-1; - while (pos >= 0 && isspace(out[pos])) - pos--; - out.erase(pos+1); +} + + +/** Runs the process in the given working directory and waits until it's finished. + * @param[in] dir working directory + * @param[out] out takes the output written to stdout by the executed process + * @return true if process terminated properly + * @throw SignalException if CTRL-C was pressed during execution */ +bool Process::run (const string &dir, string *out) { + bool ret = false; + string cwd = FileSystem::getcwd(); + if (FileSystem::chdir(dir)) { + ret = run(out); + ret &= FileSystem::chdir(cwd); } + return ret; } +// system-specific stuff -static inline void close_handle (HANDLE handle) { - if (handle != NULL) - CloseHandle(handle); +#ifdef _WIN32 + +static inline void close_and_zero_handle (HANDLE &handle) { + CloseHandle(handle); + handle = NULL; } -#else -/** Extracts whitespace-sparated parameters from a string. +Subprocess::Subprocess() : _pipeReadHandle(NULL), _childProcHandle(NULL) { +} + + +Subprocess::~Subprocess () { + if (_pipeReadHandle != NULL) + CloseHandle(_pipeReadHandle); + if (_childProcHandle != NULL) { + TerminateProcess(_childProcHandle, 1); + CloseHandle(_childProcHandle); + } +} + + +/** Retrieves output generated by child process. + * @param[out] out read output is appended to this string + * @returns false on errors */ +bool Subprocess::readFromPipe (string &out) { + if (!_pipeReadHandle) + return false; + + bool success=false; + DWORD len; + while (PeekNamedPipe(_pipeReadHandle, NULL, 0, NULL, &len, NULL) && len > 0) { // prevent blocking + char buf[4096]; + success = ReadFile(_pipeReadHandle, buf, sizeof(buf), &len, NULL); + if (success && len > 0) + out.append(buf, len); + } + return success; +} + + +/** Starts a child process. + * @param[in] cmd name of command to execute + * @param[in] paramstr parameters required by command + * @returns true if child process started properly */ +bool Subprocess::run (const string &cmd, string paramstr) { + SECURITY_ATTRIBUTES securityAttribs; + ZeroMemory(&securityAttribs, sizeof(SECURITY_ATTRIBUTES)); + securityAttribs.nLength = sizeof(SECURITY_ATTRIBUTES); + securityAttribs.bInheritHandle = true; + + HANDLE pipeWriteHandle; // write end of pipe + if (CreatePipe(&_pipeReadHandle, &pipeWriteHandle, &securityAttribs, 0) == ERROR_INVALID_HANDLE) + return false; + + SetHandleInformation(_pipeReadHandle, HANDLE_FLAG_INHERIT, 0); + HANDLE nullFile = CreateFile("NUL", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, &securityAttribs, OPEN_EXISTING, 0, NULL); + bool success = false; + if (nullFile != INVALID_HANDLE_VALUE) { + STARTUPINFO startupInfo; + ZeroMemory(&startupInfo, sizeof(STARTUPINFO)); + startupInfo.cb = sizeof(STARTUPINFO); + startupInfo.dwFlags = STARTF_USESTDHANDLES; + startupInfo.hStdInput = nullFile; + startupInfo.hStdOutput = pipeWriteHandle; + startupInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE); + + PROCESS_INFORMATION processInfo; + ZeroMemory(&processInfo, sizeof(PROCESS_INFORMATION)); + + string cmdline = cmd + " " + paramstr; + // put subprocess in separate process group to prevent its termination in case of CTRL-C + success = CreateProcess(NULL, (LPSTR)cmdline.c_str(), NULL, NULL, true, CREATE_NEW_PROCESS_GROUP, NULL, NULL, &startupInfo, &processInfo); + if (success) { + _childProcHandle = processInfo.hProcess; + CloseHandle(processInfo.hThread); + } + CloseHandle(nullFile); + } + CloseHandle(pipeWriteHandle); // must be closed before reading from pipe to prevent blocking + if (!success) + close_and_zero_handle(_pipeReadHandle); + return success; +} + + +/** Returns the current state of the child process. */ +Subprocess::State Subprocess::state () { + DWORD status; + if (!GetExitCodeProcess(_childProcHandle, &status)) + return State::FAILED; + if (status == STILL_ACTIVE) + return State::RUNNING; + close_and_zero_handle(_childProcHandle); + return status == 0 ? State::FINISHED : State::FAILED; +} + +#else // !_WIN32 + +Subprocess::Subprocess () : _readfd(-1), _pid(-1) { +} + + +Subprocess::~Subprocess () { + if (_readfd >= 0) + close(_readfd); + if (_pid > 0) + kill(_pid, SIGKILL); +} + + +/** Retrieves output generated by child process. + * @param[out] out read output is appended to this string + * @returns false on errors */ +bool Subprocess::readFromPipe (string &out) { + if (_readfd < 0 || _pid < 0) + return false; + + char buf[1024]; + ssize_t len; + while ((len = read(_readfd, buf, sizeof(buf))) > 0) + out.append(buf, len); + if (len < 0) { + close(_readfd); + _readfd = -1; + } + return len >= 0; +} + + +/** Extracts whitespace-separated parameters from a string. * @param[in,out] paramstr the parameter string - * @param[out] params vector holding the extracted parameters */ + * @param[out] params vector holding pointers to the extracted parameters */ static void split_paramstr (string ¶mstr, vector<const char*> ¶ms) { size_t left=0, right=0; // index of first and last character of current parameter char quote=0; // current quote character, 0=none @@ -99,119 +262,52 @@ static void split_paramstr (string ¶mstr, vector<const char*> ¶ms) { } } -#endif +/** Starts a child process. + * @param[in] cmd name of command to execute + * @param[in] paramstr parameters required by command + * @returns true if child process started properly */ +bool Subprocess::run (const string &cmd, string paramstr) { + int pipefd[2]; + if (pipe(pipefd) < 0) + return false; -/** Runs the process and waits until it's finished. - * @param[out] out takes the output written to stdout by the executed process - * @return true if process terminated properly - * @throw SignalException if CTRL-C was pressed during execution */ -bool Process::run (string *out) { -#ifdef _WIN32 - SECURITY_ATTRIBUTES sa; - ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES)); - sa.nLength = sizeof(SECURITY_ATTRIBUTES); - sa.bInheritHandle = true; - - STARTUPINFO si; - ZeroMemory(&si, sizeof(STARTUPINFO)); - si.cb = sizeof(STARTUPINFO); - si.dwFlags = STARTF_USESTDHANDLES; - HANDLE devnull = NULL; - HANDLE proc_read_handle = NULL; - HANDLE proc_write_handle = NULL; - if (out) { - CreatePipe(&proc_read_handle, &proc_write_handle, &sa, 0); - SetHandleInformation(proc_read_handle, HANDLE_FLAG_INHERIT, 0); - si.hStdOutput = proc_write_handle; - } - else { - devnull = CreateFile("nul", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, &sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - si.hStdOutput = devnull; - } - si.hStdInput = GetStdHandle(STD_INPUT_HANDLE); - si.hStdError = GetStdHandle(STD_ERROR_HANDLE); - - PROCESS_INFORMATION pi; - ZeroMemory(&pi, sizeof(pi)); - DWORD exitcode = DWORD(-1); - string cmdline = _cmd+" "+_paramstr; - bool success = CreateProcess(NULL, (LPSTR)cmdline.c_str(), NULL, NULL, true, 0, NULL, NULL, &si, &pi); - if (success) { - WaitForSingleObject(pi.hProcess, INFINITE); - GetExitCodeProcess(pi.hProcess, &exitcode); - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); + _pid = fork(); + if (_pid < 0) { + close(pipefd[0]); + close(pipefd[1]); + return false; } - close_handle(proc_write_handle); // must be closed before reading from pipe to prevent blocking - if (success && out) - pipe_read(proc_read_handle, *out); - close_handle(proc_read_handle); - close_handle(devnull); - return exitcode == 0; -#else - int pipefd[2]; - pipe(pipefd); - pid_t pid = fork(); - if (pid == 0) { // child process + if (_pid == 0) { // child process dup2(pipefd[1], STDOUT_FILENO); // redirect stdout to the pipe dup2(pipefd[1], STDERR_FILENO); // redirect stderr to the pipe close(pipefd[0]); close(pipefd[1]); vector<const char*> params; - params.push_back(_cmd.c_str()); - string paramstr = _paramstr; // private copy to be changed by split_paramstr() + params.push_back(cmd.c_str()); split_paramstr(paramstr, params); - params.push_back(0); // trailing NULL marks end of parameter list - execvp(_cmd.c_str(), const_cast<char* const*>(¶ms[0])); + params.push_back(nullptr); // trailing null pointer marks end of parameter list + signal(SIGINT, SIG_IGN); // child process is supposed to ignore ctrl-c events + execvp(cmd.c_str(), const_cast<char* const*>(¶ms[0])); exit(1); } - close(pipefd[1]); - bool ok = false; - if (pid > 0) { // parent process - for (;;) { - if (out) { - char buf[512]; - ssize_t len; - while ((len = read(pipefd[0], buf, sizeof(buf)-1)) > 0) { - buf[len] = 0; - *out += string(buf); - } - } - int status; - waitpid(pid, &status, WNOHANG); - if (WIFEXITED(status)) { // child process exited normally - ok = (WEXITSTATUS(status) == 0); - break; - } - try { - SignalHandler::instance().check(); - } - catch (SignalException &e) { // caught ctrl-c - close(pipefd[0]); - kill(pid, SIGKILL); - throw; - } - } - } - close(pipefd[0]); - return ok; -#endif + _readfd = pipefd[0]; + close(pipefd[1]); // close write end of pipe + return true; } -/** Runs the process in the given working directory and waits until it's finished. - * @param[in] dir working directory - * @param[out] out takes the output written to stdout by the executed process - * @return true if process terminated properly - * @throw SignalException if CTRL-C was pressed during execution */ -bool Process::run (const string &dir, string *out) { - bool ret = false; - string cwd = FileSystem::getcwd(); - if (FileSystem::chdir(dir)) { - ret = run(out); - ret &= FileSystem::chdir(cwd); - } - return ret; +/** Returns the current state of the child process. */ +Subprocess::State Subprocess::state () { + int status; + pid_t wpid = waitpid(_pid, &status, WNOHANG); + if (wpid == 0) + return State::RUNNING; // still running + _pid = -1; + if (wpid > 0 && WIFEXITED(status) && WEXITSTATUS(status) == 0) + return State::FINISHED; + return State::FAILED; } + +#endif // !_WIN32 diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.hpp index b45bdfe1fe4..caed7139439 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.hpp @@ -2,7 +2,7 @@ ** Process.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,16 +23,14 @@ #include <string> -class Process -{ +class Process { public: Process (const std::string &cmd, const std::string ¶mstr); + Process (const Process &orig) =delete; + Process (Process &&orig) =delete; bool run (std::string *out=0); bool run (const std::string &dir, std::string *out=0); - protected: - Process (const Process &orig) =default; - private: std::string _cmd; const std::string _paramstr; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp index 9c60546bc0f..c0624cc8c8a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp @@ -2,7 +2,7 @@ ** PsSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cmath> #include <fstream> #include <memory> @@ -53,15 +52,13 @@ int PsSpecialHandler::SHADING_SEGMENT_SIZE = 20; double PsSpecialHandler::SHADING_SIMPLIFY_DELTA = 0.01; -PsSpecialHandler::PsSpecialHandler () : _psi(this), _actions(0), _previewFilter(_psi), _psSection(PS_NONE), _xmlnode(0) +PsSpecialHandler::PsSpecialHandler () : _psi(this), _actions(), _previewFilter(_psi), _psSection(PS_NONE), _xmlnode(), _savenode() { } PsSpecialHandler::~PsSpecialHandler () { - _psi.setActions(0); // ensure no further PS actions are performed - for (auto &entry : _patterns) - delete entry.second; + _psi.setActions(nullptr); // ensure no further PS actions are performed } @@ -72,9 +69,8 @@ void PsSpecialHandler::initialize () { if (_psSection == PS_NONE) { initgraphics(); // execute dvips prologue/header files - const char *headers[] = {"tex.pro", "texps.pro", "special.pro", /*"color.pro",*/ 0}; - for (const char **p=headers; *p; ++p) - processHeaderFile(*p); + for (const char *fname : {"tex.pro", "texps.pro", "special.pro"}) + processHeaderFile(fname); // disable bop/eop operators to prevent side-effects by // unexpected bops/eops present in PS specials _psi.execute("\nTeXDict begin /bop{pop pop}def /eop{}def end "); @@ -88,10 +84,10 @@ void PsSpecialHandler::initgraphics () { _linewidth = 1; _linecap = _linejoin = 0; // butt end caps and miter joins _miterlimit = 4; - _xmlnode = _savenode = 0; + _xmlnode = _savenode = nullptr; _opacityalpha = 1; // fully opaque _sx = _sy = _cos = 1.0; - _pattern = 0; + _pattern = nullptr; _currentcolor = Color::BLACK; _dashoffset = 0; _dashpattern.clear(); @@ -214,7 +210,7 @@ bool PsSpecialHandler::process (const char *prefix, istream &is, SpecialActions if (_actions) { StreamInputReader in(is); string fname = in.getQuotedString(in.peek() == '"' ? '"' : 0); - map<string,string> attr; + unordered_map<string,string> attr; in.parseAttributes(attr); psfile(fname, attr); } @@ -273,87 +269,96 @@ bool PsSpecialHandler::process (const char *prefix, istream &is, SpecialActions /** Handles psfile special. * @param[in] fname EPS file to be included * @param[in] attr attributes given with \\special psfile */ -void PsSpecialHandler::psfile (const string &fname, const map<string,string> &attr) { - EPSFile epsfile(fname); - istream &is = epsfile.istream(); - if (!is) +void PsSpecialHandler::psfile (const string &fname, const unordered_map<string,string> &attr) { + const char *filepath = FileFinder::instance().lookup(fname, false); + if (!filepath) { Message::wstream(true) << "file '" << fname << "' not found in special 'psfile'\n"; - else { - map<string,string>::const_iterator it; - - // bounding box of EPS figure - double llx = (it = attr.find("llx")) != attr.end() ? str2double(it->second) : 0; - double lly = (it = attr.find("lly")) != attr.end() ? str2double(it->second) : 0; - double urx = (it = attr.find("urx")) != attr.end() ? str2double(it->second) : 0; - double ury = (it = attr.find("ury")) != attr.end() ? str2double(it->second) : 0; - - // desired width/height of resulting figure - double rwi = (it = attr.find("rwi")) != attr.end() ? str2double(it->second)/10.0 : -1; - double rhi = (it = attr.find("rhi")) != attr.end() ? str2double(it->second)/10.0 : -1; - if (rwi == 0 || rhi == 0 || urx-llx == 0 || ury-lly == 0) - return; - - // user transformations (default values chosen according to dvips manual) - double hoffset = (it = attr.find("hoffset")) != attr.end() ? str2double(it->second) : 0; - double voffset = (it = attr.find("voffset")) != attr.end() ? str2double(it->second) : 0; -// double hsize = (it = attr.find("hsize")) != attr.end() ? str2double(it->second) : 612; -// double vsize = (it = attr.find("vsize")) != attr.end() ? str2double(it->second) : 792; - double hscale = (it = attr.find("hscale")) != attr.end() ? str2double(it->second) : 100; - double vscale = (it = attr.find("vscale")) != attr.end() ? str2double(it->second) : 100; - double angle = (it = attr.find("angle")) != attr.end() ? str2double(it->second) : 0; - - Matrix m(1); - m.rotate(angle).scale(hscale/100, vscale/100).translate(hoffset, voffset); - BoundingBox bbox(llx, lly, urx, ury); - bbox.transform(m); - - double sx = rwi/bbox.width(); - double sy = rhi/bbox.height(); - if (sx < 0) sx = sy; - if (sy < 0) sy = sx; - if (sx < 0) sx = sy = 1.0; - - // save current DVI position (in pt units) - const double x = _actions->getX(); - const double y = _actions->getY(); - - // all following drawings are relative to (0,0) - _actions->setX(0); - _actions->setY(0); - moveToDVIPos(); - - _xmlnode = new XMLElementNode("g"); // append following elements to this group - _psi.execute("\n@beginspecial @setspecial "); // enter \special environment - _psi.limit(epsfile.pslength()); // limit the number of bytes to be processed - _psi.execute(is); // process EPS file - _psi.limit(0); // disable limitation - _psi.execute("\n@endspecial "); // leave special environment - if (_xmlnode->empty()) // nothing been drawn? - delete _xmlnode; // => don't need to add empty group node - else { // has anything been drawn? - Matrix matrix(1); - matrix.rotate(angle).scale(hscale/100, vscale/100).translate(hoffset, voffset); - matrix.translate(-llx, lly); - matrix.scale(sx, sy); // resize image to width "rwi" and height "rhi" - matrix.translate(x, y); // move image to current DVI position - if (!matrix.isIdentity()) - _xmlnode->addAttribute("transform", matrix.getSVG()); - _actions->appendToPage(_xmlnode); - } - _xmlnode = 0; // append following elements to page group again + return; + } + unordered_map<string,string>::const_iterator it; + + // bounding box of EPS figure (lower left and upper right corner) + double llx = (it = attr.find("llx")) != attr.end() ? str2double(it->second) : 0; + double lly = (it = attr.find("lly")) != attr.end() ? str2double(it->second) : 0; + double urx = (it = attr.find("urx")) != attr.end() ? str2double(it->second) : 0; + double ury = (it = attr.find("ury")) != attr.end() ? str2double(it->second) : 0; + + // desired width/height of resulting figure + double rwi = (it = attr.find("rwi")) != attr.end() ? str2double(it->second)/10.0 : -1; + double rhi = (it = attr.find("rhi")) != attr.end() ? str2double(it->second)/10.0 : -1; + if (rwi == 0 || rhi == 0 || urx-llx == 0 || ury-lly == 0) + return; - // restore DVI position - _actions->setX(x); - _actions->setY(y); - moveToDVIPos(); + // user transformations (default values chosen according to dvips manual) + double hoffset = (it = attr.find("hoffset")) != attr.end() ? str2double(it->second) : 0; + double voffset = (it = attr.find("voffset")) != attr.end() ? str2double(it->second) : 0; +// double hsize = (it = attr.find("hsize")) != attr.end() ? str2double(it->second) : 612; +// double vsize = (it = attr.find("vsize")) != attr.end() ? str2double(it->second) : 792; + double hscale = (it = attr.find("hscale")) != attr.end() ? str2double(it->second) : 100; + double vscale = (it = attr.find("vscale")) != attr.end() ? str2double(it->second) : 100; + double angle = (it = attr.find("angle")) != attr.end() ? str2double(it->second) : 0; + + Matrix m(1); + m.rotate(angle).scale(hscale/100, vscale/100).translate(hoffset, voffset); + BoundingBox bbox(llx, lly, urx, ury); + bbox.transform(m); + + // compute factors to scale the bounding box to width rwi and height rhi + double sx = rwi/bbox.width(); + double sy = rhi/bbox.height(); + if (sx == 0 || sy == 0) + return; - // update bounding box - m.scale(sx, -sy); - m.translate(x, y); - bbox = BoundingBox(0, 0, fabs(urx-llx), fabs(ury-lly)); - bbox.transform(m); - _actions->embed(bbox); + if (sx < 0) sx = sy; // rwi attribute not set + if (sy < 0) sy = sx; // rhi attribute not set + if (sx < 0) sx = sy = 1.0; // neither rwi nor rhi set + + // save current DVI position + const double x = _actions->getX(); + const double y = _actions->getY(); + + // all following drawings are relative to (0,0) + _actions->setX(0); + _actions->setY(0); + moveToDVIPos(); + + // transform current DVI position and bounding box location + // according to current transformation matrix + DPair llTrans = _actions->getMatrix()*DPair(llx, -lly); + DPair urTrans = _actions->getMatrix()*DPair(urx, -ury); + DPair dviposTrans = _actions->getMatrix()*DPair(x, y); + + auto groupNode = util::make_unique<XMLElementNode>("g"); // append following elements to this group + _xmlnode = groupNode.get(); + _psi.execute("\n@beginspecial @setspecial "); // enter \special environment + EPSFile epsfile(filepath); + _psi.limit(epsfile.pslength()); // limit the number of bytes going to be processed + _psi.execute(epsfile.istream()); // process EPS file + _psi.limit(0); // disable limitation + _psi.execute("\n@endspecial "); // leave special environment + if (!groupNode->empty()) { // has anything been drawn? + Matrix matrix(1); + matrix.rotate(angle).scale(hscale/100, vscale/100).translate(hoffset, voffset); + matrix.translate(-llTrans); + matrix.scale(sx, sy); // resize image to width "rwi" and height "rhi" + matrix.translate(dviposTrans); // move image to current DVI position + if (!matrix.isIdentity()) + groupNode->addAttribute("transform", matrix.getSVG()); + _actions->appendToPage(std::move(groupNode)); } + _xmlnode = nullptr; // append following elements to page group again + + // restore DVI position + _actions->setX(x); + _actions->setY(y); + moveToDVIPos(); + + // update bounding box + m.scale(sx, -sy); + m.translate(dviposTrans); + bbox = BoundingBox(DPair(0, 0), abs(urTrans-llTrans)); + bbox.transform(m); + _actions->embed(bbox); } @@ -525,14 +530,14 @@ void PsSpecialHandler::stroke (vector<double> &p) { } if (_clipStack.clippathLoaded() && _clipStack.top()) _path.prepend(*_clipStack.top()); - XMLElementNode *path=0; + unique_ptr<XMLElementNode> path; Pair<double> point; if (_path.isDot(point)) { // zero-length path? if (_linecap == 1) { // round line ends? => draw dot double x = point.x(); double y = point.y(); double r = _linewidth/2.0; - path = new XMLElementNode("circle"); + path = util::make_unique<XMLElementNode>("circle"); path->addAttribute("cx", x); path->addAttribute("cy", y); path->addAttribute("r", r); @@ -547,7 +552,7 @@ void PsSpecialHandler::stroke (vector<double> &p) { ostringstream oss; _path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS); - path = new XMLElementNode("path"); + path = util::make_unique<XMLElementNode>("path"); path->addAttribute("d", oss.str()); path->addAttribute("stroke", _actions->getColor().svgColorString()); path->addAttribute("fill", "none"); @@ -582,9 +587,9 @@ void PsSpecialHandler::stroke (vector<double> &p) { _clipStack.setClippathLoaded(false); } if (_xmlnode) - _xmlnode->append(path); + _xmlnode->append(std::move(path)); else { - _actions->appendToPage(path); + _actions->appendToPage(std::move(path)); _actions->embed(bbox); } _path.clear(); @@ -612,7 +617,7 @@ void PsSpecialHandler::fill (vector<double> &p, bool evenodd) { ostringstream oss; _path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS); - XMLElementNode *path = new XMLElementNode("path"); + unique_ptr<XMLElementNode> path = util::make_unique<XMLElementNode>("path"); path->addAttribute("d", oss.str()); if (_pattern) path->addAttribute("fill", XMLString("url(#")+_pattern->svgID()+")"); @@ -631,9 +636,9 @@ void PsSpecialHandler::fill (vector<double> &p, bool evenodd) { if (_opacityalpha < 1) path->addAttribute("fill-opacity", _opacityalpha); if (_xmlnode) - _xmlnode->append(path); + _xmlnode->append(std::move(path)); else { - _actions->appendToPage(path); + _actions->appendToPage(std::move(path)); _actions->embed(bbox); } _path.clear(); @@ -682,7 +687,7 @@ void PsSpecialHandler::makepattern (vector<double> &p) { // pattern definition completed if (_savenode) { _xmlnode = _savenode; - _savenode = 0; + _savenode = nullptr; } break; case 1: { // tiling pattern @@ -694,14 +699,14 @@ void PsSpecialHandler::makepattern (vector<double> &p) { create_matrix(p, 9, matrix); matrix.rmultiply(_actions->getMatrix()); - PSTilingPattern *pattern=0; + unique_ptr<PSTilingPattern> pattern; if (paint_type == 1) - pattern = new PSColoredTilingPattern(id, bbox, matrix, xstep, ystep); + pattern = util::make_unique<PSColoredTilingPattern>(id, bbox, matrix, xstep, ystep); else - pattern = new PSUncoloredTilingPattern(id, bbox, matrix, xstep, ystep); - _patterns[id] = pattern; + pattern = util::make_unique<PSUncoloredTilingPattern>(id, bbox, matrix, xstep, ystep); _savenode = _xmlnode; _xmlnode = pattern->getContainerNode(); // insert the following SVG elements into this node + _patterns[id] = std::move(pattern); break; } case 2: { @@ -716,21 +721,21 @@ void PsSpecialHandler::makepattern (vector<double> &p) { * 1-3: (optional) RGB values for uncolored tiling patterns * further parameters depend on the pattern type */ void PsSpecialHandler::setpattern (vector<double> &p) { - int pattern_id = static_cast<int>(p[0]); + int patternID = static_cast<int>(p[0]); Color color; if (p.size() == 4) color.setRGB(p[1], p[2], p[3]); - map<int,PSPattern*>::iterator it = _patterns.find(pattern_id); + auto it = _patterns.find(patternID); if (it == _patterns.end()) - _pattern = 0; + _pattern = nullptr; else { - if (PSUncoloredTilingPattern *pattern = dynamic_cast<PSUncoloredTilingPattern*>(it->second)) + if (auto *pattern = dynamic_cast<PSUncoloredTilingPattern*>(it->second.get())) pattern->setColor(color); it->second->apply(*_actions); - if (PSTilingPattern *pattern = dynamic_cast<PSTilingPattern*>(it->second)) + if (auto *pattern = dynamic_cast<PSTilingPattern*>(it->second.get())) _pattern = pattern; else - _pattern = 0; + _pattern = nullptr; } } @@ -787,7 +792,7 @@ void PsSpecialHandler::clip (Path &path, bool evenodd) { } else { // compute the intersection of the current clipping path with the current graphics path - Path *oldPath = _clipStack.getPath(oldID); + const Path *oldPath = _clipStack.top(); Path intersectedPath(windingRule); PathClipper clipper; clipper.intersect(*oldPath, path, intersectedPath); @@ -795,19 +800,19 @@ void PsSpecialHandler::clip (Path &path, bool evenodd) { intersectedPath.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS); } - XMLElementNode *pathElem = new XMLElementNode("path"); + auto pathElem = util::make_unique<XMLElementNode>("path"); pathElem->addAttribute("d", oss.str()); if (evenodd) pathElem->addAttribute("clip-rule", "evenodd"); int newID = _clipStack.topID(); - XMLElementNode *clipElem = new XMLElementNode("clipPath"); + auto clipElem = util::make_unique<XMLElementNode>("clipPath"); clipElem->addAttribute("id", XMLString("clip")+XMLString(newID)); if (!COMPUTE_CLIPPATHS_INTERSECTIONS && oldID) clipElem->addAttribute("clip-path", XMLString("url(#clip")+XMLString(oldID)+")"); - clipElem->append(pathElem); - _actions->appendToDefs(clipElem); + clipElem->append(std::move(pathElem)); + _actions->appendToDefs(std::move(clipElem)); } @@ -918,12 +923,14 @@ static void read_patch_data (ShadingPatch &patch, int edgeflag, class ShadingCallback : public ShadingPatch::Callback { public: ShadingCallback (SpecialActions &actions, XMLElementNode *parent, int clippathID) - : _actions(actions), _group(new XMLElementNode("g")) + : _actions(actions) { + auto group = util::make_unique<XMLElementNode>("g"); + _group = group.get(); if (parent) - parent->append(_group); + parent->append(std::move(group)); else - actions.appendToPage(_group); + actions.appendToPage(std::move(group)); if (clippathID > 0) _group->addAttribute("clip-path", XMLString("url(#clip")+XMLString(clippathID)+")"); } @@ -935,10 +942,10 @@ class ShadingCallback : public ShadingPatch::Callback { // draw a single patch segment ostringstream oss; path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS); - XMLElementNode *pathElem = new XMLElementNode("path"); + auto pathElem = util::make_unique<XMLElementNode>("path"); pathElem->addAttribute("d", oss.str()); pathElem->addAttribute("fill", color.svgColorString()); - _group->append(pathElem); + _group->append(std::move(pathElem)); } private: @@ -955,9 +962,7 @@ void PsSpecialHandler::processSequentialPatchMesh (int shadingTypeID, ColorSpace int edgeflag = static_cast<int>(*it++); vector<DPair> points; vector<Color> colors; - unique_ptr<ShadingPatch> patch; - - patch = unique_ptr<ShadingPatch>(ShadingPatch::create(shadingTypeID, colorSpace)); + unique_ptr<ShadingPatch> patch = ShadingPatch::create(shadingTypeID, colorSpace); read_patch_data(*patch, edgeflag, it, points, colors); patch->setPoints(points, edgeflag, previousPatch.get()); patch->setColors(colors, edgeflag, previousPatch.get()); @@ -1139,22 +1144,20 @@ void PsSpecialHandler::executed () { void PsSpecialHandler::ClippingStack::pushEmptyPath () { if (!_stack.empty()) - _stack.push(Entry(0, -1)); + _stack.emplace(Entry()); } void PsSpecialHandler::ClippingStack::push (const Path &path, int saveID) { if (path.empty()) - _stack.push(Entry(0, saveID)); - else { - _paths.push_back(path); - _stack.push(Entry(_paths.size(), saveID)); - } + _stack.emplace(Entry(saveID)); + else + _stack.emplace(Entry(path, ++_maxID, saveID)); } /** Pops a single or several elements from the clipping stack. - * The method distingushes between the following cases: + * The method distinguishes between the following cases: * 1) saveID < 0 and grestoreall == false: * pop top element if it was pushed by gsave (its saveID is < 0 as well) * 2) saveID < 0 and grestoreall == true @@ -1163,36 +1166,30 @@ void PsSpecialHandler::ClippingStack::push (const Path &path, int saveID) { * 3) saveID >= 0: * pop all elements until the saveID of the top element equals parameter saveID */ void PsSpecialHandler::ClippingStack::pop (int saveID, bool grestoreall) { - if (!_stack.empty()) { - if (saveID < 0) { // grestore? - if (_stack.top().saveID < 0) // pushed by 'gsave'? - _stack.pop(); - // pop all further elements pushed by 'gsave' if grestoreall == true - while (grestoreall && !_stack.empty() && _stack.top().saveID < 0) - _stack.pop(); - } - else { - // pop elements pushed by 'gsave' - while (!_stack.empty() && _stack.top().saveID != saveID) - _stack.pop(); - // pop element pushed by 'save' - if (!_stack.empty()) - _stack.pop(); - } + if (_stack.empty()) + return; + + if (saveID < 0) { // grestore? + if (_stack.top().saveID < 0) // pushed by 'gsave'? + _stack.pop(); + // pop all further elements pushed by 'gsave' if grestoreall == true + while (grestoreall && !_stack.empty() && _stack.top().saveID < 0) + _stack.pop(); + } + else { + // pop elements pushed by 'gsave' + while (!_stack.empty() && _stack.top().saveID != saveID) + _stack.pop(); + // pop element pushed by 'save' + if (!_stack.empty()) + _stack.pop(); } } /** Returns a pointer to the path on top of the stack, or 0 if the stack is empty. */ const PsSpecialHandler::Path* PsSpecialHandler::ClippingStack::top () const { - return (!_stack.empty() && _stack.top().pathID) - ? &_paths[_stack.top().pathID-1] - : 0; -} - - -PsSpecialHandler::Path* PsSpecialHandler::ClippingStack::getPath (size_t id) { - return (id > 0 && id <= _paths.size()) ? &_paths[id-1] : 0; + return _stack.empty() ? nullptr : _stack.top().path.get(); } @@ -1211,7 +1208,6 @@ void PsSpecialHandler::ClippingStack::setClippathLoaded (bool loaded) { /** Pops all elements from the stack. */ void PsSpecialHandler::ClippingStack::clear() { - _paths.clear(); while (!_stack.empty()) _stack.pop(); } @@ -1223,21 +1219,21 @@ void PsSpecialHandler::ClippingStack::replace (const Path &path) { if (_stack.empty()) push(path, -1); else { - _paths.push_back(path); - _stack.top().pathID = _paths.size(); + _stack.top().path = make_shared<Path>(path); + _stack.top().pathID = ++_maxID; } } /** Duplicates the top element, i.e. the top element is pushed again. */ void PsSpecialHandler::ClippingStack::dup (int saveID) { - _stack.push(_stack.empty() ? Entry(0, -1) : _stack.top()); + _stack.emplace(_stack.empty() ? Entry() : _stack.top()); _stack.top().saveID = saveID; } -const char** PsSpecialHandler::prefixes () const { - static const char *pfx[] = { +const vector<const char*> PsSpecialHandler::prefixes () const { + const vector<const char*> pfx { "header=", // read and execute PS header file prior to the following PS statements "psfile=", // read and execute PS file "PSfile=", // dito @@ -1247,6 +1243,6 @@ const char** PsSpecialHandler::prefixes () const { "\"", // execute literal PS code following this prefix "pst:", // dito "PST:", // same as "ps:" - 0}; + }; return pfx; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.hpp index fe95443215b..310a6b8c34e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.hpp @@ -2,7 +2,7 @@ ** PsSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,6 +21,7 @@ #ifndef PSSPECIALHANDLER_HPP #define PSSPECIALHANDLER_HPP +#include <memory> #include <set> #include <stack> #include <string> @@ -35,15 +36,17 @@ class PSPattern; class XMLElementNode; -class PsSpecialHandler : public SpecialHandler, public DVIEndPageListener, protected PSActions -{ - typedef GraphicsPath<double> Path; - typedef std::vector<double>::const_iterator DoubleVecIt; - typedef Color::ColorSpace ColorSpace; +class PsSpecialHandler : public SpecialHandler, public DVIEndPageListener, protected PSActions { + using Path = GraphicsPath<double>; + using ColorSpace = Color::ColorSpace; - class ClippingStack - { + /** Helper class storing the clipping paths currently present on the graphics context stack. + * Since PS operator 'clippath' only delivers a linearly approximated version of the paths + * that are sometimes too imprecise for direct usage in SVG, we keep the possibly curved + * clipping paths and compute their intersections locally if necessary. */ + class ClippingStack { public: + ClippingStack () : _maxID(0) {} void pushEmptyPath (); void push (const Path &path, int saveID=-1); void replace (const Path &path); @@ -54,18 +57,22 @@ class PsSpecialHandler : public SpecialHandler, public DVIEndPageListener, prote bool clippathLoaded () const; void setClippathLoaded (bool loaded); const Path* top () const; - Path* getPath (size_t id); int topID () const {return _stack.empty() ? 0 : _stack.top().pathID;} private: struct Entry { - int pathID; ///< index referencing a path of the pool - int saveID; ///< if >=0, path was pushed by 'save', and saveID holds the ID of the + std::shared_ptr<Path> path; // pointer to current clipping path + int pathID; ///< ID of current clipping path + int saveID; ///< if >=0, path was pushed by 'save', and saveID holds the ID of the PS memory object bool cpathLoaded; ///< true if clipping path was loaded into current path - Entry (int pid, int sid) : pathID(pid), saveID(sid), cpathLoaded(false) {} + Entry () : Entry(-1) {} + Entry (const Path &p, int pid, int sid) : path(std::make_shared<Path>(p)), pathID(pid), saveID(sid), cpathLoaded(false) {} + Entry (int sid) : path(nullptr), pathID(0), saveID(sid), cpathLoaded(false) {} + Entry (const Entry &entry) =default; + Entry (Entry &&entry) =default; }; - std::vector<Path> _paths; ///< pool of all clipping paths - std::stack<Entry> _stack; + size_t _maxID; + std::stack<Entry> _stack; ///< stack holding the clipping information of the current graphics context }; enum PsSection {PS_NONE, PS_HEADERS, PS_BODY}; @@ -75,7 +82,7 @@ class PsSpecialHandler : public SpecialHandler, public DVIEndPageListener, prote ~PsSpecialHandler (); const char* name () const override {return "ps";} const char* info () const override {return "dvips PostScript specials";} - const char** prefixes () const override; + const std::vector<const char*> prefixes () const override; void preprocess (const char *prefix, std::istream &is, SpecialActions &actions) override; bool process (const char *prefix, std::istream &is, SpecialActions &actions) override; void setDviScaleFactor (double dvi2bp) override {_previewFilter.setDviScaleFactor(dvi2bp);} @@ -93,14 +100,14 @@ class PsSpecialHandler : public SpecialHandler, public DVIEndPageListener, prote void moveToDVIPos (); void executeAndSync (std::istream &is, bool updatePos); void processHeaderFile (const char *fname); - void psfile (const std::string &fname, const std::map<std::string,std::string> &attr); + void psfile (const std::string &fname, const std::unordered_map<std::string,std::string> &attr); void dviEndPage (unsigned pageno, SpecialActions &actions) override; void clip (Path &path, bool evenodd); void processSequentialPatchMesh (int shadingTypeID, ColorSpace cspace, VectorIterator<double> &it); void processLatticeTriangularPatchMesh (ColorSpace colorSpace, VectorIterator<double> &it); /// scale given value by current PS scale factors - double scale (double v) const {return v*(_sx*_cos*_cos + _sy*(1-_cos*_cos));} + double scale (double v) const {return v*(_sx*(1-_cos*_cos) + _sy*_cos*_cos);} void applyscalevals (std::vector<double> &p) override {_sx = p[0]; _sy = p[1]; _cos = p[2];} void clip (std::vector<double> &p) override {clip(p, false);} @@ -131,9 +138,9 @@ class PsSpecialHandler : public SpecialHandler, public DVIEndPageListener, prote void sethsbcolor (std::vector<double> &hsb) override; void setlinecap (std::vector<double> &p) override {_linecap = uint8_t(p[0]);} void setlinejoin (std::vector<double> &p) override {_linejoin = uint8_t(p[0]);} - void setlinewidth (std::vector<double> &p) override {_linewidth = p[0] ? scale(p[0])*1.00375 : 0.5;} + void setlinewidth (std::vector<double> &p) override {_linewidth = scale(p[0] ? p[0] : 0.5);} void setmatrix (std::vector<double> &p) override; - void setmiterlimit (std::vector<double> &p) override {_miterlimit = p[0]*1.00375;} + void setmiterlimit (std::vector<double> &p) override {_miterlimit = p[0];} void setopacityalpha (std::vector<double> &p) override {_opacityalpha = p[0];} void setpattern (std::vector<double> &p) override; void setrgbcolor (std::vector<double> &rgb) override; @@ -155,15 +162,15 @@ class PsSpecialHandler : public SpecialHandler, public DVIEndPageListener, prote Color _currentcolor; ///< current stroke/fill color double _sx, _sy; ///< horizontal and vertical scale factors retrieved by operator "applyscalevals" double _cos; ///< cosine of angle between (1,0) and transform(1,0) - double _linewidth; ///< current linewidth - double _miterlimit; ///< current miter limit + double _linewidth; ///< current line width in bp units + double _miterlimit; ///< current miter limit in bp units double _opacityalpha; ///< opacity level (0=fully transparent, ..., 1=opaque) uint8_t _linecap : 2; ///< current line cap (0=butt, 1=round, 2=projecting square) uint8_t _linejoin : 2; ///< current line join (0=miter, 1=round, 2=bevel) double _dashoffset; ///< current dash offset std::vector<double> _dashpattern; ClippingStack _clipStack; - std::map<int, PSPattern*> _patterns; + std::unordered_map<int, std::unique_ptr<PSPattern>> _patterns; PSTilingPattern *_pattern; ///< current pattern }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.cpp index ac2097624f7..24b76362bd5 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.cpp @@ -2,7 +2,7 @@ ** RangeMap.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp index 6170a2aa5dc..70291696f66 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp @@ -2,7 +2,7 @@ ** RangeMap.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -58,7 +58,7 @@ class RangeMap { uint32_t _minval; }; - typedef std::vector<Range> Ranges; + using Ranges = std::vector<Range>; public: void addRange (uint32_t first, uint32_t last, uint32_t cid); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.cpp index 50215d936dc..140207bb67a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.cpp @@ -2,7 +2,7 @@ ** SVGCharHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -19,6 +19,7 @@ *************************************************************************/ #include "SVGCharHandler.hpp" +#include "utility.hpp" #include "XMLNode.hpp" using namespace std; @@ -30,12 +31,17 @@ void SVGCharHandler::setInitialContextNode (XMLElementNode *node) { } -/** Changes the context element. All following nodes will be appended to this node. */ -void SVGCharHandler::pushContextNode (XMLElementNode *node) { - if (node && (_contextNodeStack.empty() || node != _contextNodeStack.top())) { - contextNode()->append(node); - _contextNodeStack.push(node); +/** Changes the context element. All following nodes will be appended to this node. + * @param[in] node the new context node + * @return bare pointer to the new context node or 0 if context hasn't changed */ +XMLElementNode* SVGCharHandler::pushContextNode (unique_ptr<XMLElementNode> &&node) { + if (node && (_contextNodeStack.empty() || node.get() != _contextNodeStack.top())) { + XMLElementNode *nodeptr = node.get(); + contextNode()->append(std::move(node)); + _contextNodeStack.push(nodeptr); + return nodeptr; } + return nullptr; } @@ -55,15 +61,14 @@ void SVGCharHandler::resetContextNode () { /** Creates and returns a new SVG text element. * @param[in] x current x coordinate * @param[in] y current y coordinate */ -XMLElementNode* SVGCharTextHandler::createTextNode (double x, double y) const { +unique_ptr<XMLElementNode> SVGCharTextHandler::createTextNode (double x, double y) const { const Font *font = _font.get(); if (!font) - return 0; - XMLElementNode *textNode = new XMLElementNode("text"); + return nullptr; + auto textNode = util::make_unique<XMLElementNode>("text"); if (_selectFontByClass) textNode->addAttribute("class", string("f")+XMLString(_fontnum)); else { - textNode->addAttribute("font-family", font->name()); textNode->addAttribute("font-size", XMLString(font->scaledSize())); if (font->color() != Color::BLACK) @@ -72,15 +77,16 @@ XMLElementNode* SVGCharTextHandler::createTextNode (double x, double y) const { if (_vertical) { textNode->addAttribute("writing-mode", "tb"); // align glyphs designed for horizontal layout properly - if (const PhysicalFont *pf = dynamic_cast<const PhysicalFont*>(font)) + if (const PhysicalFont *pf = dynamic_cast<const PhysicalFont*>(font)) { if (!pf->getMetrics()->verticalLayout()) { // alphabetic text designed for horizontal layout? x += pf->scaledAscent()/2.5; // move vertical baseline to the right by strikethrough offset textNode->addAttribute("glyph-orientation-vertical", 90); // ensure rotation } + } } textNode->addAttribute("x", x); textNode->addAttribute("y", y); if (!_matrix.get().isIdentity()) textNode->addAttribute("transform", _matrix.get().getSVG()); return textNode; -}
\ No newline at end of file +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.hpp index 5bcd92a685a..2cc54614f35 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.hpp @@ -2,7 +2,7 @@ ** SVGCharHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,6 +21,7 @@ #ifndef SVGCHARHANDLER_HPP #define SVGCHARHANDLER_HPP +#include <memory> #include <stack> #include "Color.hpp" #include "Font.hpp" @@ -73,7 +74,7 @@ class SVGCharHandler { protected: virtual void resetContextNode (); - void pushContextNode (XMLElementNode *node); + XMLElementNode* pushContextNode (std::unique_ptr<XMLElementNode> &&node); void popContextNode (); XMLElementNode* contextNode () const { @@ -98,7 +99,7 @@ class SVGCharTextHandler : public SVGCharHandler { SVGCharTextHandler (bool selectFontByClass) : _selectFontByClass(selectFontByClass) {} protected: - XMLElementNode* createTextNode (double x, double y) const; + std::unique_ptr<XMLElementNode> createTextNode (double x, double y) const; private: bool _selectFontByClass; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.cpp index 820850a161c..ebc4eb4fe69 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.cpp @@ -2,7 +2,7 @@ ** SVGCharHandlerFactory.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,14 +23,14 @@ #include "SVGSingleCharTextHandler.hpp" #include "SVGCharTspanTextHandler.hpp" #include "SVGTree.hpp" +#include "utility.hpp" +using namespace std; -SVGCharHandler* SVGCharHandlerFactory::createHandler () { +unique_ptr<SVGCharHandler> SVGCharHandlerFactory::createHandler () { if (!SVGTree::USE_FONTS) - return new SVGCharPathHandler(SVGTree::CREATE_USE_ELEMENTS, SVGTree::RELATIVE_PATH_CMDS); + return util::make_unique<SVGCharPathHandler>(SVGTree::CREATE_USE_ELEMENTS, SVGTree::RELATIVE_PATH_CMDS); if (SVGTree::MERGE_CHARS) - return new SVGCharTspanTextHandler(SVGTree::CREATE_CSS); - else - return new SVGSingleCharTextHandler(SVGTree::CREATE_CSS); - return 0; -}
\ No newline at end of file + return util::make_unique<SVGCharTspanTextHandler>(SVGTree::CREATE_CSS); + return util::make_unique<SVGSingleCharTextHandler>(SVGTree::CREATE_CSS); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.hpp index 4000bd76634..5bd1d01493a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.hpp @@ -2,7 +2,7 @@ ** SVGCharHandlerFactory.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,12 +21,11 @@ #ifndef SVGCHARHANDLERFACTORY_HPP #define SVGCHARHANDLERFACTORY_HPP +#include <memory> #include "SVGCharHandler.hpp" - -struct SVGCharHandlerFactory -{ - static SVGCharHandler* createHandler (); +struct SVGCharHandlerFactory { + static std::unique_ptr<SVGCharHandler> createHandler (); }; #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.cpp index db6c2aba999..c3a4f283e9e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.cpp @@ -2,7 +2,7 @@ ** SVGCharPathHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,6 +22,7 @@ #include "Font.hpp" #include "FontManager.hpp" #include "SVGCharPathHandler.hpp" +#include "utility.hpp" #include "XMLNode.hpp" using namespace std; @@ -68,8 +69,7 @@ void SVGCharPathHandler::appendChar (uint32_t c, double x, double y) { if (color.changed() || _matrix.changed()) { resetContextNode(); if (applyColor || applyMatrix) { - _groupNode = new XMLElementNode("g"); - pushContextNode(_groupNode); + _groupNode = pushContextNode(util::make_unique<XMLElementNode>("g")); if (applyColor) contextNode()->addAttribute("fill", color.get().svgColorString()); if (applyMatrix) @@ -108,15 +108,14 @@ void SVGCharPathHandler::appendChar (uint32_t c, double x, double y) { void SVGCharPathHandler::appendUseElement (uint32_t c, double x, double y, const Matrix &matrix) { - ostringstream oss; - oss << "#g" << FontManager::instance().fontID(_font) << '-' << c; - XMLElementNode *useNode = new XMLElementNode("use"); + string id = "#g" + to_string(FontManager::instance().fontID(_font)) + "-" + to_string(c); + auto useNode = util::make_unique<XMLElementNode>("use"); useNode->addAttribute("x", XMLString(x)); useNode->addAttribute("y", XMLString(y)); - useNode->addAttribute("xlink:href", oss.str()); + useNode->addAttribute("xlink:href", id); if (!matrix.isIdentity()) useNode->addAttribute("transform", matrix.getSVG()); - contextNode()->append(useNode); + contextNode()->append(std::move(useNode)); } @@ -128,10 +127,10 @@ void SVGCharPathHandler::appendPathElement (uint32_t c, double x, double y, cons double sy = -sx; ostringstream oss; glyph.writeSVG(oss, _relativePathCommands, sx, sy, x, y); - XMLElementNode *glyphNode = new XMLElementNode("path"); + auto glyphNode = util::make_unique<XMLElementNode>("path"); glyphNode->addAttribute("d", oss.str()); if (!matrix.isIdentity()) glyphNode->addAttribute("transform", matrix.getSVG()); - contextNode()->append(glyphNode); + contextNode()->append(std::move(glyphNode)); } } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.hpp index 2031c6c472f..6e248cbca89 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.hpp @@ -2,7 +2,7 @@ ** SVGCharPathHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -25,7 +25,7 @@ /** Creates SVG path elements for all characters. */ class SVGCharPathHandler : public SVGCharHandler { - typedef void (SVGCharPathHandler::*AppendMethod)(uint32_t c, double x, double y, const Matrix &matrix); + using AppendMethod = void (SVGCharPathHandler::*)(uint32_t c, double x, double y, const Matrix &matrix); public: SVGCharPathHandler (bool createUseElements, bool relativePathsCommands); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.cpp index d9432971180..cb1e4d23f2d 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.cpp @@ -2,7 +2,7 @@ ** SVGCharTspanTextHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -19,6 +19,7 @@ *************************************************************************/ #include "SVGCharTspanTextHandler.hpp" +#include "utility.hpp" #include "XMLNode.hpp" using namespace std; @@ -34,8 +35,7 @@ void SVGCharTspanTextHandler::appendChar (uint32_t c, double x, double y) { // changes of fonts and transformations require a new text element if (!_textNode || _font.changed() || _matrix.changed() || _vertical.changed()) { resetContextNode(); - _textNode = createTextNode(x, y); - pushContextNode(_textNode); + _textNode = pushContextNode(createTextNode(x, y)); _color.changed(true); // force creating tspan with color attribute if current color differs from font color } if (_tspanNode && (_xchanged || _ychanged || _color.changed())) { @@ -47,8 +47,7 @@ void SVGCharTspanTextHandler::appendChar (uint32_t c, double x, double y) { // Glyphs of non-black fonts (e.g. defined in a XeTeX document) can't change their color. bool applyColor = _color.get() != Color::BLACK && _font.get()->color() == Color::BLACK; if (_xchanged || _ychanged || (_color.changed() && applyColor)) { - _tspanNode = new XMLElementNode("tspan"); - pushContextNode(_tspanNode); + _tspanNode = pushContextNode(util::make_unique<XMLElementNode>("tspan")); if (applyColor) _tspanNode->addAttribute("fill", _color.get().svgColorString()); _color.changed(false); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.hpp index 868a90626e9..ee8a049a691 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.hpp @@ -2,7 +2,7 @@ ** SVGCharTspanTextHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.cpp index 84c66d82ac1..f65d4e85181 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.cpp @@ -2,7 +2,7 @@ ** SVGOutput.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -54,9 +54,9 @@ ostream& SVGOutput::getPageStream (int page, int numPages) const { _page = page; if (_zipLevel > 0) - _osptr.reset(new ZLibOutputStream(fname, _zipLevel)); + _osptr = util::make_unique<ZLibOutputStream>(fname, _zipLevel); else - _osptr.reset(new ofstream(fname.c_str())); + _osptr = util::make_unique<ofstream>(fname.c_str()); if (!_osptr) throw MessageException("can't open file "+fname+" for writing"); return *_osptr; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.hpp index d5edebf7865..a24f09821e6 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.hpp @@ -2,7 +2,7 @@ ** SVGOutput.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.cpp index af99de0dacb..9ef88c708ee 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.cpp @@ -2,7 +2,7 @@ ** SVGSingleCharTextHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -25,7 +25,7 @@ using namespace std; void SVGSingleCharTextHandler::appendChar (uint32_t c, double x, double y) { const Font *font = _font.get(); - XMLElementNode *textNode = createTextNode(x, y); + auto textNode = createTextNode(x, y); textNode->append(XMLString(font->unicode(c), false)); // Apply color changes only if the color differs from black and if the font color itself is black. // Glyphs from non-black fonts (e.g. defined in a XeTeX document) can't change their color. @@ -33,5 +33,5 @@ void SVGSingleCharTextHandler::appendChar (uint32_t c, double x, double y) { textNode->addAttribute("fill", _color.get().svgColorString()); _color.changed(false); } - contextNode()->append(textNode); + contextNode()->append(std::move(textNode)); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.hpp index f2525dcbce0..c8c0555b024 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.hpp @@ -2,7 +2,7 @@ ** SVGSingleCharTextHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -24,8 +24,7 @@ #include "SVGCharHandler.hpp" -class SVGSingleCharTextHandler : public SVGCharTextHandler -{ +class SVGSingleCharTextHandler : public SVGCharTextHandler { public: SVGSingleCharTextHandler (bool createStyleElements) : SVGCharTextHandler(createStyleElements) {} void appendChar (uint32_t c, double x, double y) override; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.cpp index 5a88650b864..646af3d4e40 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.cpp @@ -2,7 +2,7 @@ ** SVGTree.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <algorithm> #include <array> #include <sstream> @@ -49,8 +48,7 @@ bool SVGTree::ADD_COMMENTS=false; double SVGTree::ZOOM_FACTOR=1.0; -SVGTree::SVGTree () { - _charHandler.reset(SVGCharHandlerFactory::createHandler()); +SVGTree::SVGTree () : _charHandler(SVGCharHandlerFactory::createHandler()) { reset(); } @@ -58,11 +56,12 @@ SVGTree::SVGTree () { /** Clears the SVG tree and initializes the root element. */ void SVGTree::reset () { _doc.clear(); - _root = new XMLElementNode("svg"); - _root->addAttribute("version", "1.1"); - _root->addAttribute("xmlns", "http://www.w3.org/2000/svg"); - _root->addAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); - _doc.setRootNode(_root); + auto rootNode = util::make_unique<XMLElementNode>("svg"); + rootNode->addAttribute("version", "1.1"); + rootNode->addAttribute("xmlns", "http://www.w3.org/2000/svg"); + rootNode->addAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); + _root = rootNode.get(); + _doc.setRootNode(std::move(rootNode)); _page = _defs = nullptr; _styleCDataNode = nullptr; } @@ -113,37 +112,39 @@ bool SVGTree::setFontFormat (string formatstr) { /** Starts a new page. * @param[in] pageno number of new page */ void SVGTree::newPage (int pageno) { - _page = new XMLElementNode("g"); + auto pageNode = util::make_unique<XMLElementNode>("g"); if (pageno >= 0) - _page->addAttribute("id", string("page")+XMLString(pageno)); - _root->append(_page); - _charHandler->setInitialContextNode(_page); + pageNode->addAttribute("id", string("page")+XMLString(pageno)); + _charHandler->setInitialContextNode(pageNode.get()); + _page = pageNode.get(); + _root->append(std::move(pageNode)); while (!_contextElementStack.empty()) _contextElementStack.pop(); } -void SVGTree::appendToDefs (XMLNode *node) { +void SVGTree::appendToDefs (unique_ptr<XMLNode> &&node) { if (!_defs) { - _defs = new XMLElementNode("defs"); - _root->prepend(_defs); + auto defsNode = util::make_unique<XMLElementNode>("defs"); + _defs = defsNode.get(); + _root->prepend(std::move(defsNode)); } - _defs->append(node); + _defs->append(std::move(node)); } -void SVGTree::appendToPage (XMLNode *node) { +void SVGTree::appendToPage (unique_ptr<XMLNode> &&node) { XMLElementNode *parent = _contextElementStack.empty() ? _page : _contextElementStack.top(); - parent->append(node); + parent->append(std::move(node)); _charHandler->setInitialContextNode(parent); } -void SVGTree::prependToPage (XMLNode *node) { +void SVGTree::prependToPage (unique_ptr<XMLNode> &&node) { if (_contextElementStack.empty()) - _page->prepend(node); + _page->prepend(std::move(node)); else - _contextElementStack.top()->prepend(node); + _contextElementStack.top()->prepend(std::move(node)); } @@ -158,36 +159,34 @@ void SVGTree::transformPage (const Matrix &usermatrix) { * @param[in] font font to extract the glyph from * @param[in] cb pointer to callback object for sending feedback to the glyph tracer (may be 0) * @return pointer to element node if glyph exists, 0 otherwise */ -static XMLElementNode* createGlyphNode (int c, const PhysicalFont &font, GFGlyphTracer::Callback *cb) { +static unique_ptr<XMLElementNode> createGlyphNode (int c, const PhysicalFont &font, GFGlyphTracer::Callback *cb) { Glyph glyph; if (!font.getGlyph(c, glyph, cb) || (!SVGTree::USE_FONTS && !SVGTree::CREATE_USE_ELEMENTS)) - return 0; + return nullptr; double sx=1.0, sy=1.0; double upem = font.unitsPerEm(); - XMLElementNode *glyph_node=0; + unique_ptr<XMLElementNode> glyphNode; if (SVGTree::USE_FONTS) { double extend = font.style() ? font.style()->extend : 1; - glyph_node = new XMLElementNode("glyph"); - glyph_node->addAttribute("unicode", XMLString(font.unicode(c), false)); - glyph_node->addAttribute("horiz-adv-x", XMLString(font.hAdvance(c)*extend)); - glyph_node->addAttribute("vert-adv-y", XMLString(font.vAdvance(c))); + glyphNode = util::make_unique<XMLElementNode>("glyph"); + glyphNode->addAttribute("unicode", XMLString(font.unicode(c), false)); + glyphNode->addAttribute("horiz-adv-x", XMLString(font.hAdvance(c)*extend)); + glyphNode->addAttribute("vert-adv-y", XMLString(font.vAdvance(c))); string name = font.glyphName(c); if (!name.empty()) - glyph_node->addAttribute("glyph-name", name); + glyphNode->addAttribute("glyph-name", name); } else { - ostringstream oss; - oss << 'g' << FontManager::instance().fontID(&font) << '-' << c; - glyph_node = new XMLElementNode("path"); - glyph_node->addAttribute("id", oss.str()); + glyphNode = util::make_unique<XMLElementNode>("path"); + glyphNode->addAttribute("id", "g"+to_string(FontManager::instance().fontID(&font))+"-"+to_string(c)); sx = font.scaledSize()/upem; sy = -sx; } ostringstream oss; glyph.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS, sx, sy); - glyph_node->addAttribute("d", oss.str()); - return glyph_node; + glyphNode->addAttribute("d", oss.str()); + return glyphNode; } @@ -208,7 +207,7 @@ static string font_info (const Font &font) { } -void SVGTree::appendFontStyles (const set<const Font*> &fonts) { +void SVGTree::appendFontStyles (const unordered_set<const Font*> &fonts) { if (CREATE_CSS && USE_FONTS && !fonts.empty() && _page) { map<int, const Font*> sortmap; for (const Font *font : fonts) @@ -256,24 +255,24 @@ void SVGTree::append (const PhysicalFont &font, const set<int> &chars, GFGlyphTr if (ADD_COMMENTS) { string info = font_info(font); if (!info.empty()) - appendToDefs(new XMLCommentNode(string(" font: ")+info+" ")); + appendToDefs(util::make_unique<XMLCommentNode>(string(" font: ")+info+" ")); } - XMLElementNode *fontNode = new XMLElementNode("font"); + auto fontNode = util::make_unique<XMLElementNode>("font"); string fontname = font.name(); fontNode->addAttribute("id", fontname); fontNode->addAttribute("horiz-adv-x", XMLString(font.hAdvance())); - appendToDefs(fontNode); - XMLElementNode *faceNode = new XMLElementNode("font-face"); + auto faceNode = util::make_unique<XMLElementNode>("font-face"); faceNode->addAttribute("font-family", fontname); faceNode->addAttribute("units-per-em", XMLString(font.unitsPerEm())); if (!font.verticalLayout()) { faceNode->addAttribute("ascent", XMLString(font.ascent())); faceNode->addAttribute("descent", XMLString(font.descent())); } - fontNode->append(faceNode); + fontNode->append(std::move(faceNode)); for (int c : chars) fontNode->append(createGlyphNode(c, font, callback)); + appendToDefs(std::move(fontNode)); } } else if (CREATE_USE_ELEMENTS && &font != font.uniqueFont()) { @@ -282,20 +281,13 @@ void SVGTree::append (const PhysicalFont &font, const set<int> &chars, GFGlyphTr // reference the already embedded path together with a transformation attribute and let the SVG renderer // scale the glyphs properly. This is only necessary if we don't want to use font but path elements. for (int c : chars) { - ostringstream oss; - XMLElementNode *use = new XMLElementNode("use"); - oss << 'g' << FontManager::instance().fontID(&font) << '-' << c; - use->addAttribute("id", oss.str()); - oss.str(""); - oss << "#g" << FontManager::instance().fontID(font.uniqueFont()) << '-' << c; - use->addAttribute("xlink:href", oss.str()); + auto useNode = util::make_unique<XMLElementNode>("use"); + useNode->addAttribute("id", "g"+to_string(FontManager::instance().fontID(&font))+"-"+to_string(c)); + useNode->addAttribute("xlink:href", "#g"+to_string(FontManager::instance().fontID(font.uniqueFont()))+"-"+to_string(c)); double scale = font.scaledSize()/font.uniqueFont()->scaledSize(); - if (scale != 1.0) { - oss.str(""); - oss << "scale(" << scale << ')'; - use->addAttribute("transform", oss.str()); - } - appendToDefs(use); + if (scale != 1.0) + useNode->addAttribute("transform", "scale("+XMLString(scale)+")"); + appendToDefs(std::move(useNode)); } } else { @@ -306,13 +298,14 @@ void SVGTree::append (const PhysicalFont &font, const set<int> &chars, GFGlyphTr /** Pushes a new context element that will take all following nodes added to the page. */ -void SVGTree::pushContextElement (XMLElementNode *node) { +void SVGTree::pushContextElement (unique_ptr<XMLElementNode> &&node) { + XMLElementNode *nodePtr = node.get(); if (_contextElementStack.empty()) - _page->append(node); + _page->append(std::move(node)); else - _contextElementStack.top()->append(node); - _contextElementStack.push(node); - _charHandler->setInitialContextNode(node); + _contextElementStack.top()->append(std::move(node)); + _contextElementStack.push(nodePtr); + _charHandler->setInitialContextNode(nodePtr); } @@ -330,16 +323,16 @@ static inline string extract_id_from_url (const string &url) { } -/** Removes elements present in the SVH tree that are not required. +/** Removes elements present in the SVG tree that are not required. * For now, only clipPath elements are removed. */ void SVGTree::removeRedundantElements () { - vector<XMLElementNode*> clipElements; - if (!_defs || !_defs->getDescendants("clipPath", 0, clipElements)) + vector<XMLElementNode*> clipPathElements; + if (!_defs || !_defs->getDescendants("clipPath", nullptr, clipPathElements)) return; // collect dependencies between clipPath elements in the defs section of the SVG tree DependencyGraph<string> idTree; - for (const XMLElementNode *clip : clipElements) { + for (const XMLElementNode *clip : clipPathElements) { if (const char *id = clip->getAttributeValue("id")) { if (const char *url = clip->getAttributeValue("clip-path")) idTree.insert(extract_id_from_url(url), id); @@ -347,18 +340,16 @@ void SVGTree::removeRedundantElements () { idTree.insert(id); } } - // collect elements that reference a clipPath (have a clip-path attribute) + // collect elements that reference a clipPath, i.e. have a clip-path attribute vector<XMLElementNode*> descendants; - _page->getDescendants(0, "clip-path", descendants); + _page->getDescendants(nullptr, "clip-path", descendants); // remove referenced IDs and their dependencies from the dependency graph for (const XMLElementNode *elem : descendants) { string idref = extract_id_from_url(elem->getAttributeValue("clip-path")); idTree.removeDependencyPath(idref); } descendants.clear(); - vector<string> ids; - idTree.getKeys(ids); - for (const string &str : ids) { + for (const string &str : idTree.getKeys()) { XMLElementNode *node = _defs->getFirstDescendant("clipPath", "id", str.c_str()); _defs->remove(node); } @@ -367,11 +358,12 @@ void SVGTree::removeRedundantElements () { XMLCDataNode* SVGTree::styleCDataNode () { if (!_styleCDataNode) { - XMLElementNode *styleNode = new XMLElementNode("style"); + auto styleNode = util::make_unique<XMLElementNode>("style"); styleNode->addAttribute("type", "text/css"); - _root->insertBefore(styleNode, _page); - _styleCDataNode = new XMLCDataNode; - styleNode->append(_styleCDataNode); + auto cdataNode = util::make_unique<XMLCDataNode>(); + _styleCDataNode = cdataNode.get(); + styleNode->append(std::move(cdataNode)); + _root->insertBefore(std::move(styleNode), _page); } return _styleCDataNode; -}
\ No newline at end of file +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.hpp index 82ccc8332dc..9cac4ff51d9 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.hpp @@ -2,7 +2,7 @@ ** SVGTree.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -25,6 +25,7 @@ #include <memory> #include <set> #include <stack> +#include <unordered_set> #include "Color.hpp" #include "FontWriter.hpp" #include "GFGlyphTracer.hpp" @@ -45,15 +46,15 @@ class SVGTree { void reset (); bool write (std::ostream &os) const {return bool(_doc.write(os));} void newPage (int pageno); - void appendToDefs (XMLNode *node); - void appendToPage (XMLNode *node); - void prependToPage (XMLNode *node); - void appendToDoc (XMLNode *node) {_doc.append(node);} - void appendToRoot (XMLNode *node) {_root->append(node);} + void appendToDefs (std::unique_ptr<XMLNode> &&node); + void appendToPage (std::unique_ptr<XMLNode> &&node); + void prependToPage (std::unique_ptr<XMLNode> &&node); + void appendToDoc (std::unique_ptr<XMLNode> &&node) {_doc.append(std::move(node));} + void appendToRoot (std::unique_ptr<XMLNode> &&node) {_root->append(std::move(node));} void appendChar (int c, double x, double y) {_charHandler->appendChar(c, x, y);} - void appendFontStyles (const std::set<const Font*> &fonts); + void appendFontStyles (const std::unordered_set<const Font*> &fonts); void append (const PhysicalFont &font, const std::set<int> &chars, GFGlyphTracer::Callback *callback=0); - void pushContextElement (XMLElementNode *node); + void pushContextElement (std::unique_ptr<XMLElementNode> &&node); void popContextElement (); void removeRedundantElements (); void setBBox (const BoundingBox &bbox); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.cpp index 97a567fd20d..f3239da84ba 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.cpp @@ -2,7 +2,7 @@ ** ShadingPatch.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,6 +22,7 @@ #include "ShadingPatch.hpp" #include "TensorProductPatch.hpp" #include "TriangularPatch.hpp" +#include "utility.hpp" using namespace std; @@ -48,12 +49,12 @@ void ShadingPatch::colorQueryFuncs (ColorGetter &getter, ColorSetter &setter) co /** Factory method: Creates a shading patch object depending on the given PostScript shading type. */ -ShadingPatch* ShadingPatch::create (int psShadingType, Color::ColorSpace cspace) { +unique_ptr<ShadingPatch> ShadingPatch::create (int psShadingType, Color::ColorSpace cspace) { switch (psShadingType) { - case 4: return new TriangularPatch(cspace); - case 5: return new LatticeTriangularPatch(cspace); - case 6: return new CoonsPatch(cspace); - case 7: return new TensorProductPatch(cspace); + case 4: return util::make_unique<TriangularPatch>(cspace); + case 5: return util::make_unique<LatticeTriangularPatch>(cspace); + case 6: return util::make_unique<CoonsPatch>(cspace); + case 7: return util::make_unique<TensorProductPatch>(cspace); } ostringstream oss; if (psShadingType > 0 && psShadingType < 4) diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.hpp index 25d88d0ac49..c401b959d1a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.hpp @@ -2,7 +2,7 @@ ** ShadingPatch.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,21 +21,21 @@ #ifndef SHADINGPATCH_HPP #define SHADINGPATCH_HPP +#include <memory> #include "Color.hpp" #include "GraphicsPath.hpp" #include "MessageException.hpp" -class ShadingPatch -{ +class ShadingPatch { public: struct Callback { virtual ~Callback () =default; virtual void patchSegment (GraphicsPath<double> &path, const Color &color) =0; }; - typedef std::vector<DPair> PointVec; - typedef std::vector<Color> ColorVec; + using PointVec = std::vector<DPair>; + using ColorVec = std::vector<Color>; public: ShadingPatch (Color::ColorSpace colorSpace) : _colorspace(colorSpace) {} @@ -50,11 +50,11 @@ class ShadingPatch virtual int numColors (int edgeflag) const =0; virtual Color averageColor() const =0; Color::ColorSpace colorSpace () const {return _colorspace;} - static ShadingPatch* create (int psShadingType, Color::ColorSpace cspace); + static std::unique_ptr<ShadingPatch> create (int psShadingType, Color::ColorSpace cspace); protected: - typedef void (Color::*ColorGetter)(std::valarray<double> &va) const; - typedef void (Color::*ColorSetter)(const std::valarray<double> &va); + using ColorGetter = void (Color::*)(std::valarray<double> &va) const; + using ColorSetter = void (Color::*)(const std::valarray<double> &va); void colorQueryFuncs (ColorGetter &getter, ColorSetter &setter) const; private: @@ -62,8 +62,7 @@ class ShadingPatch }; -struct ShadingException : public MessageException -{ +struct ShadingException : public MessageException { ShadingException (const std::string &msg) : MessageException(msg) {} }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.cpp index 696c99ac18d..988ec8d19a5 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.cpp @@ -2,7 +2,7 @@ ** SignalHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,13 +23,38 @@ #include <csignal> #include <cstdlib> #include "SignalHandler.hpp" +#include "utility.hpp" using namespace std; -bool SignalHandler::_break = false; +volatile bool SignalHandler::_break = false; + +/** Helper class that encapsulates the system-specific parts of + * registering and handling CTRL-C (SIGINT) events. */ +class SignalHandler::Impl { + using HandlerFunc = void (*)(int); + public: + Impl (); + bool setSigintHandler (HandlerFunc handler); + bool restoreSigintHandler (); + + private: +#ifdef HAVE_SIGACTION + struct sigaction _currentSigaction; + struct sigaction _origSigaction; +#else + HandlerFunc _origHandlerFunc; +#endif +}; + + +SignalHandler::SignalHandler () + : _active(false), _impl(util::make_unique<SignalHandler::Impl>()) +{ +} -SignalHandler::~SignalHandler() { +SignalHandler::~SignalHandler () { stop(); } @@ -46,19 +71,17 @@ SignalHandler& SignalHandler::instance() { bool SignalHandler::start () { if (!_active) { _break = false; - if (signal(SIGINT, SignalHandler::callback) != SIG_ERR) { + if (_impl->setSigintHandler(callback)) _active = true; - return true; - } } - return false; + return _active; } /** Stops listening for CTRL-C signals. */ void SignalHandler::stop () { if (_active) { - signal(SIGINT, SIG_DFL); + _impl->restoreSigintHandler(); _active = false; } } @@ -84,3 +107,47 @@ void SignalHandler::callback (int) { _break = true; } + +// Prefer sigaction() to signal() due to its more reliable interface and behavior. +// Use signal() as fallback on systems that don't provide sigaction(). + +#ifdef HAVE_SIGACTION + +SignalHandler::Impl::Impl () { + _origSigaction.sa_handler = nullptr; +} + + +bool SignalHandler::Impl::setSigintHandler (HandlerFunc handler) { + sigemptyset(&_currentSigaction.sa_mask); + _currentSigaction.sa_handler = handler; + _currentSigaction.sa_flags = SA_SIGINFO; + return (sigaction(SIGINT, &_currentSigaction, &_origSigaction) == 0); +} + + +bool SignalHandler::Impl::restoreSigintHandler () { + if (_origSigaction.sa_handler == nullptr) + return false; + return (sigaction(SIGINT, &_origSigaction, 0) == 0); +} + +#else // !HAVE_SIGACTION + +SignalHandler::Impl::Impl () : _origHandlerFunc(SIG_ERR) { +} + + +bool SignalHandler::Impl::setSigintHandler (HandlerFunc handler) { + _origHandlerFunc = signal(SIGINT, handler); + return _origHandlerFunc != SIG_ERR; +} + + +bool SignalHandler::Impl::restoreSigintHandler () { + if (_origHandlerFunc == SIG_ERR) + return false; + return (signal(SIGINT, _origHandlerFunc) != SIG_ERR); +} + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.hpp index c1c48346d43..06dd163f38e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.hpp @@ -2,7 +2,7 @@ ** SignalHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,14 +22,16 @@ #define SIGNALHANDLER_HPP #include <exception> +#include <memory> struct SignalException : public std::exception { }; -class SignalHandler -{ +class SignalHandler { public: + SignalHandler (const SignalHandler&) =delete; + SignalHandler (SignalHandler&&) =delete; ~SignalHandler (); static SignalHandler& instance (); bool start (); @@ -39,12 +41,14 @@ class SignalHandler bool active () const {return _active;} protected: - SignalHandler () : _active(false) {} + SignalHandler (); static void callback (int signal); private: bool _active; ///< true if listening for signals - static bool _break; ///< true if signal has been caught + static volatile bool _break; ///< true if signal has been caught + class Impl; + std::unique_ptr<Impl> _impl; ///< system-specific data/functions }; #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialActions.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialActions.hpp index 5dfaaa17b08..80dbd595d91 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialActions.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialActions.hpp @@ -2,7 +2,7 @@ ** SpecialActions.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,6 +22,7 @@ #define SPECIALACTIONS_HPP #include <string> +#include <memory> #include "BoundingBox.hpp" #include "Color.hpp" #include "Matrix.hpp" @@ -29,8 +30,7 @@ class XMLNode; class XMLElementNode; -class SpecialActions -{ +class SpecialActions { public: virtual ~SpecialActions () =default; virtual double getX () const =0; @@ -44,10 +44,10 @@ class SpecialActions virtual const Matrix& getMatrix () const =0; virtual void getPageTransform (Matrix &matrix) const =0; virtual void setBgColor (const Color &color) =0; - virtual void appendToPage (XMLNode *node) =0; - virtual void appendToDefs (XMLNode *node) =0; - virtual void prependToPage (XMLNode *node) =0; - virtual void pushContextElement (XMLElementNode *node) =0; + virtual void appendToPage(std::unique_ptr<XMLNode> &&node) =0; + virtual void appendToDefs(std::unique_ptr<XMLNode> &&node) =0; + virtual void prependToPage(std::unique_ptr<XMLNode> &&node) =0; + virtual void pushContextElement (std::unique_ptr<XMLElementNode> &&node) =0; virtual void popContextElement () =0; virtual BoundingBox& bbox () =0; virtual BoundingBox& bbox (const std::string &name, bool reset=false) =0; @@ -63,8 +63,7 @@ class SpecialActions }; -class EmptySpecialActions : public SpecialActions -{ +class EmptySpecialActions : public SpecialActions { public: double getX () const override {return 0;} double getY () const override {return 0;} @@ -77,10 +76,10 @@ class EmptySpecialActions : public SpecialActions void setMatrix (const Matrix &m) override {} const Matrix& getMatrix () const override {return _matrix;} void getPageTransform (Matrix &matrix) const override {} - void appendToPage (XMLNode *node) override {} - void appendToDefs (XMLNode *node) override {} - void prependToPage (XMLNode *node) override {} - void pushContextElement (XMLElementNode *node) override {} + void appendToPage(std::unique_ptr<XMLNode> &&node) override {} + void appendToDefs(std::unique_ptr<XMLNode> &&node) override {} + void prependToPage(std::unique_ptr<XMLNode> &&node) override {} + void pushContextElement (std::unique_ptr<XMLElementNode> &&node) override {} void popContextElement () override {} BoundingBox& bbox () override {return _bbox;} BoundingBox& bbox (const std::string &name, bool reset=false) override {return _bbox;} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialHandler.hpp index 1822181ad4c..e08bcd6092d 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialHandler.hpp @@ -2,7 +2,7 @@ ** SpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,6 +23,7 @@ #include <istream> #include <list> +#include <vector> #include "MessageException.hpp" @@ -30,48 +31,42 @@ class SpecialActions; class SpecialManager; -struct SpecialException : public MessageException -{ +struct SpecialException : public MessageException { SpecialException (const std::string &msg) : MessageException(msg) {} }; -struct DVIPreprocessingListener -{ +struct DVIPreprocessingListener { virtual ~DVIPreprocessingListener () =default; virtual void dviPreprocessingFinished () =0; }; -struct DVIBeginPageListener -{ +struct DVIBeginPageListener { virtual ~DVIBeginPageListener () =default; virtual void dviBeginPage (unsigned pageno, SpecialActions &actions) =0; }; -struct DVIEndPageListener -{ +struct DVIEndPageListener { virtual ~DVIEndPageListener () =default; virtual void dviEndPage (unsigned pageno, SpecialActions &actions) =0; }; -struct DVIPositionListener -{ +struct DVIPositionListener { virtual ~DVIPositionListener () =default; virtual void dviMovedTo (double x, double y, SpecialActions &actions) =0; }; -class SpecialHandler -{ +class SpecialHandler { friend class SpecialManager; public: virtual ~SpecialHandler () =default; - virtual const char** prefixes () const=0; virtual const char* info () const=0; virtual const char* name () const=0; + virtual const std::vector<const char*> prefixes () const=0; virtual void setDviScaleFactor (double dvi2bp) {} virtual void preprocess (const char *prefix, std::istream &is, SpecialActions &actions) {} virtual bool process (const char *prefix, std::istream &is, SpecialActions &actions)=0; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp index 9a2027cb8f7..7b0c66c9b5b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp @@ -2,7 +2,7 @@ ** SpecialManager.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,24 +18,18 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <iomanip> +#include <map> #include <sstream> #include "SpecialActions.hpp" #include "SpecialHandler.hpp" #include "SpecialManager.hpp" -#include "PsSpecialHandler.hpp" using namespace std; double SpecialActions::PROGRESSBAR_DELAY=1000; // initial delay in seconds (values >= 1000 disable the progressbar) -SpecialManager::~SpecialManager () { - unregisterHandlers(); -} - - SpecialManager& SpecialManager::instance() { static SpecialManager sm; return sm; @@ -44,11 +38,11 @@ SpecialManager& SpecialManager::instance() { /** Remove all registered handlers. */ void SpecialManager::unregisterHandlers () { - for (SpecialHandler *handler : _pool) - delete handler; - _pool.clear(); - _handlers.clear(); + _handlerPool.clear(); + _handlersByPrefix.clear(); + _beginPageListeners.clear(); _endPageListeners.clear(); + _preprocListeners.clear(); _positionListeners.clear(); } @@ -56,20 +50,21 @@ void SpecialManager::unregisterHandlers () { /** Registers a single special handler. This method doesn't check if a * handler of the same class is already registered. * @param[in] handler pointer to handler to be registered */ -void SpecialManager::registerHandler (SpecialHandler *handler) { +void SpecialManager::registerHandler (unique_ptr<SpecialHandler> &&handler) { if (handler) { // get array of prefixes this handler is responsible for - _pool.push_back(handler); - for (const char **p=handler->prefixes(); *p; ++p) - _handlers[*p] = handler; - if (DVIPreprocessingListener *listener = dynamic_cast<DVIPreprocessingListener*>(handler)) + for (const char *prefix : handler->prefixes()) + _handlersByPrefix[prefix] = handler.get(); + // initialize listener vectors + if (auto listener = dynamic_cast<DVIPreprocessingListener*>(handler.get())) _preprocListeners.push_back(listener); - if (DVIBeginPageListener *listener = dynamic_cast<DVIBeginPageListener*>(handler)) + if (auto listener = dynamic_cast<DVIBeginPageListener*>(handler.get())) _beginPageListeners.push_back(listener); - if (DVIEndPageListener *listener = dynamic_cast<DVIEndPageListener*>(handler)) + if (auto listener = dynamic_cast<DVIEndPageListener*>(handler.get())) _endPageListeners.push_back(listener); - if (DVIPositionListener *listener = dynamic_cast<DVIPositionListener*>(handler)) + if (auto listener = dynamic_cast<DVIPositionListener*>(handler.get())) _positionListeners.push_back(listener); + _handlerPool.emplace_back(std::move(handler)); } } @@ -80,32 +75,41 @@ void SpecialManager::registerHandler (SpecialHandler *handler) { * e.g. "color, ps, em" or "color: ps em" etc. * @param[in] handlers pointer to zero-terminated array of handlers to be registered * @param[in] ignorelist list of special names to be ignored */ -void SpecialManager::registerHandlers (SpecialHandler **handlers, const char *ignorelist) { - if (handlers) { - string ignorestr = ignorelist ? ignorelist : ""; - for (char &c : ignorestr) - if (!isalnum(c)) - c = '%'; - ignorestr = "%"+ignorestr+"%"; - - for (; *handlers; handlers++) { - if (!(*handlers)->name() || ignorestr.find("%"+string((*handlers)->name())+"%") == string::npos) - registerHandler(*handlers); - else - delete *handlers; - } - } +void SpecialManager::registerHandlers (vector<unique_ptr<SpecialHandler>> &handlers, const char *ignorelist) { + if (handlers.empty()) + return; + string ignorestr = ignorelist ? ignorelist : ""; + for (char &c : ignorestr) + if (!isalnum(c)) + c = '%'; + ignorestr = "%"+ignorestr+"%"; + + for (auto &handler : handlers) + if (!handler->name() || ignorestr.find("%"+string(handler->name())+"%") == string::npos) + registerHandler(std::move(handler)); } -/** Looks for an appropriate handler for a given special prefix. +/** Looks for a handler responsible for a given special prefix. * @param[in] prefix the special prefix, e.g. "color" or "em" * @return in case of success: pointer to handler, 0 otherwise */ -SpecialHandler* SpecialManager::findHandler (const string &prefix) const { - auto it = _handlers.find(prefix); - if (it != _handlers.end()) +SpecialHandler* SpecialManager::findHandlerByPrefix (const string &prefix) const { + auto it = _handlersByPrefix.find(prefix); + if (it != _handlersByPrefix.end()) return it->second; - return 0; + return nullptr; +} + + +/** Looks for a handler with a given name. + * @param[in] name name of handler to look for, e.g. "papersize" + * @return in case of success: pointer to handler, 0 otherwise */ +SpecialHandler* SpecialManager::findHandlerByName (const string &name) const { + for (auto &handler : _handlerPool) { + if (handler->name() == name) + return handler.get(); + } + return nullptr; } @@ -114,7 +118,7 @@ static string extract_prefix (istream &is) { string prefix; while (isalnum(c=is.get())) prefix += c; - if (ispunct(c)) // also add seperation character to identifying prefix + if (ispunct(c)) // also add separation character to identifying prefix prefix += c; if (prefix == "ps:" && is.peek() == ':') prefix += is.get(); @@ -125,7 +129,7 @@ static string extract_prefix (istream &is) { void SpecialManager::preprocess (const string &special, SpecialActions &actions) const { istringstream iss(special); string prefix = extract_prefix(iss); - if (SpecialHandler *handler = findHandler(prefix)) + if (SpecialHandler *handler = findHandlerByPrefix(prefix)) handler->preprocess(prefix.c_str(), iss, actions); } @@ -140,7 +144,7 @@ bool SpecialManager::process (const string &special, double dvi2bp, SpecialActio istringstream iss(special); string prefix = extract_prefix(iss); bool success=false; - if (SpecialHandler *handler = findHandler(prefix)) { + if (SpecialHandler *handler = findHandlerByPrefix(prefix)) { handler->setDviScaleFactor(dvi2bp); success = handler->process(prefix.c_str(), iss, actions); } @@ -149,36 +153,36 @@ bool SpecialManager::process (const string &special, double dvi2bp, SpecialActio void SpecialManager::notifyPreprocessingFinished () const { - for (DVIPreprocessingListener *listener : _preprocListeners) + for (auto *listener : _preprocListeners) listener->dviPreprocessingFinished(); } void SpecialManager::notifyBeginPage (unsigned pageno, SpecialActions &actions) const { - for (DVIBeginPageListener *listener : _beginPageListeners) + for (auto *listener : _beginPageListeners) listener->dviBeginPage(pageno, actions); } void SpecialManager::notifyEndPage (unsigned pageno, SpecialActions &actions) const { - for (DVIEndPageListener *listener : _endPageListeners) + for (auto *listener : _endPageListeners) listener->dviEndPage(pageno, actions); } void SpecialManager::notifyPositionChange (double x, double y, SpecialActions &actions) const { - for (DVIPositionListener *listener : _positionListeners) + for (auto *listener : _positionListeners) listener->dviMovedTo(x, y, actions); } void SpecialManager::writeHandlerInfo (ostream &os) const { ios::fmtflags osflags(os.flags()); - HandlerMap sortmap; - for (const auto &strhandlerpair : _handlers) - if (strhandlerpair.second->name()) - sortmap[strhandlerpair.second->name()] = strhandlerpair.second; - for (auto &strhandlerpair : sortmap) { + map<string,SpecialHandler*> sortmap; + for (const auto &handler : _handlerPool) + if (handler->name()) + sortmap[handler->name()] = handler.get(); + for (const auto &strhandlerpair : sortmap) { os << setw(10) << left << strhandlerpair.second->name() << ' '; if (strhandlerpair.second->info()) os << strhandlerpair.second->info(); @@ -186,4 +190,3 @@ void SpecialManager::writeHandlerInfo (ostream &os) const { } os.flags(osflags); // restore format flags } - diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.hpp index 919881811a4..250ebef082b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.hpp @@ -2,7 +2,7 @@ ** SpecialManager.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,25 +21,24 @@ #ifndef SPECIALMANAGER_HPP #define SPECIALMANAGER_HPP -#include <map> +#include <memory> #include <ostream> #include <string> +#include <unordered_map> #include <vector> #include "SpecialHandler.hpp" class SpecialActions; -class SpecialManager -{ +class SpecialManager { private: - typedef std::vector<SpecialHandler*> HandlerPool; - typedef std::map<std::string,SpecialHandler*> HandlerMap; + using HandlerPool = std::vector<std::unique_ptr<SpecialHandler>>; + using HandlerMap = std::unordered_map<std::string,SpecialHandler*>; public: - ~SpecialManager (); static SpecialManager& instance (); - void registerHandler (SpecialHandler *handler); - void registerHandlers (SpecialHandler **handlers, const char *ignorelist); + void registerHandler (std::unique_ptr<SpecialHandler> &&handler); + void registerHandlers (std::vector<std::unique_ptr<SpecialHandler>> &handlers, const char *ignorelist); void unregisterHandlers (); void preprocess (const std::string &special, SpecialActions &actions) const; bool process (const std::string &special, double dvi2bp, SpecialActions &actions) const; @@ -48,15 +47,16 @@ class SpecialManager void notifyEndPage (unsigned pageno, SpecialActions &actions) const; void notifyPositionChange (double x, double y, SpecialActions &actions) const; void writeHandlerInfo (std::ostream &os) const; + SpecialHandler* findHandlerByName (const std::string &name) const; protected: - SpecialManager () {} - SpecialManager (const SpecialManager &) {} - SpecialHandler* findHandler (const std::string &prefix) const; + SpecialManager () =default; + SpecialManager (const SpecialManager &) =delete; + SpecialHandler* findHandlerByPrefix (const std::string &prefix) const; private: - HandlerPool _pool; ///< stores pointers to all handlers - HandlerMap _handlers; ///< pointers to handlers for corresponding prefixes + HandlerPool _handlerPool; ///< stores pointers to all handlers + HandlerMap _handlersByPrefix; ///< pointers to handlers for corresponding prefixes std::vector<DVIPreprocessingListener*> _preprocListeners; std::vector<DVIBeginPageListener*> _beginPageListeners; std::vector<DVIEndPageListener*> _endPageListeners; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.cpp index 60080634ce9..3e4fa2adcc5 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.cpp @@ -2,7 +2,7 @@ ** StreamReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.hpp index 45cafe73423..586bf0b6980 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.hpp @@ -2,7 +2,7 @@ ** StreamReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -28,8 +28,7 @@ class CRC32; -class StreamReader -{ +class StreamReader { public: StreamReader (std::istream &is) : _is(&is) {} virtual ~StreamReader () =default; @@ -62,8 +61,7 @@ class StreamReader }; -struct StreamReaderException : public MessageException -{ +struct StreamReaderException : public MessageException { StreamReaderException (const std::string &msg) : MessageException(msg) {} }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.cpp index 16bd13c82ce..9291f066ad7 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.cpp @@ -2,7 +2,7 @@ ** StreamWriter.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include "CRC32.hpp" #include "StreamWriter.hpp" @@ -42,12 +41,28 @@ void StreamWriter::writeSigned (int32_t val, int n) { } -/** Writes a signed integer to the output stream. - * @param[in] val the value to write +void StreamWriter::writeBytes (const std::vector<uint8_t> &bytes) { + _os.write(reinterpret_cast<const char*>(bytes.data()), bytes.size()); +} + + +void StreamWriter::writeBytes (const uint8_t *buf, size_t bufsize) { + _os.write(reinterpret_cast<const char*>(buf), bufsize); +} + + +void StreamWriter::writeBytes (int byte, size_t count) { + while (count-- > 0) + _os.put(byte); +} + + +/** Writes a string to the output stream. + * @param[in] str the string to write * @param[in] finalZero if true, a final 0-byte is appended */ void StreamWriter::writeString (const string &str, bool finalZero) { - for (size_t i=0; i < str.length(); i++) - _os.put(str[i]); + for (char c : str) + _os.put(c); if (finalZero) _os.put(0); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.hpp index bc6e504348a..8228bd04267 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.hpp @@ -2,7 +2,7 @@ ** StreamWriter.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,17 +22,19 @@ #define STREAMWRITER_HPP #include <ostream> - +#include <vector> class CRC32; -class StreamWriter -{ +class StreamWriter { public: StreamWriter (std::ostream &os) : _os(os) {} virtual ~StreamWriter () =default; void writeUnsigned (uint32_t val, int n); void writeSigned (int32_t val, int n); + void writeBytes (const std::vector<uint8_t> &bytes); + void writeBytes (const uint8_t *buf, size_t bufsize); + void writeBytes (int byte, size_t count); void writeString (const std::string &str, bool finalZero=false); void writeUnsigned (uint32_t val, int n, CRC32 &crc32); void writeSigned (int32_t val, int n, CRC32 &crc32); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.cpp index 8eadf5e0e78..dff6337ad1c 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.cpp @@ -2,7 +2,7 @@ ** Subfont.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -26,6 +26,7 @@ #include "FileFinder.hpp" #include "Message.hpp" #include "Subfont.hpp" +#include "utility.hpp" using namespace std; @@ -33,7 +34,7 @@ using namespace std; // helper functions static int skip_mapping_data (istream &is); -static bool scan_line (const char *line, int lineno, uint16_t *mapping, const string &fname, long &pos); +static bool scan_line (const char *line, int lineno, vector<uint16_t> &mapping, const string &fname, long &pos); /** Constructs a new SubfontDefinition object. @@ -52,9 +53,9 @@ SubfontDefinition::SubfontDefinition (const string &name, const char *fpath) : _ while (is && !isspace(is.peek())) id += is.get(); if (!id.empty()) { - auto state = _subfonts.emplace(pair<string,Subfont*>(id, (Subfont*)0)); + auto state = _subfonts.emplace(pair<string,unique_ptr<Subfont>>(id, unique_ptr<Subfont>())); if (state.second) // id was not present in map already - state.first->second = new Subfont(*this, state.first->first); + state.first->second = unique_ptr<Subfont>(new Subfont(*this, state.first->first)); skip_mapping_data(is); } } @@ -62,12 +63,6 @@ SubfontDefinition::SubfontDefinition (const string &name, const char *fpath) : _ } -SubfontDefinition::~SubfontDefinition () { - for (auto &entry : _subfonts) - delete entry.second; -} - - /** Looks for a subfont definition of the given name and returns the corresponding object. * All objects are only created once for a given name and stored in an internal cache. * @param[in] name name of subfont definition to lookup @@ -77,12 +72,12 @@ SubfontDefinition* SubfontDefinition::lookup (const std::string &name) { auto it = sfdMap.find(name); if (it != sfdMap.end()) return it->second.get(); - unique_ptr<SubfontDefinition> sfd; + SubfontDefinition *sfd=nullptr; if (const char *path = FileFinder::instance().lookup(name+".sfd", false)) { - sfd.reset(new SubfontDefinition(name, path)); - sfdMap[name] = std::move(sfd); + sfd = new SubfontDefinition(name, path); + sfdMap[name] = unique_ptr<SubfontDefinition>(sfd); } - return sfd.get(); + return sfd; } @@ -96,24 +91,20 @@ const char* SubfontDefinition::path () const { Subfont* SubfontDefinition::subfont (const string &id) const { auto it = _subfonts.find(id); if (it != _subfonts.end()) - return it->second; - return 0; + return it->second.get(); + return nullptr; } /** Returns all subfonts defined in this SFD. */ int SubfontDefinition::subfonts (vector<Subfont*> &sfs) const { for (const auto &strsfpair : _subfonts) - sfs.push_back(strsfpair.second); + sfs.push_back(strsfpair.second.get()); return int(sfs.size()); } ////////////////////////////////////////////////////////////////////// -Subfont::~Subfont () { - delete [] _mapping; -} - /** Reads the character mappings for a given subfont ID. * Format of subfont definition (sfd) files: @@ -128,13 +119,12 @@ Subfont::~Subfont () { * to c=10, 11 and 12, respectively. * @return true if the data has been read successfully */ bool Subfont::read () { - if (_mapping) // if there's already a mapping assigned, we're finished here + if (!_mapping.empty()) // if there's already a mapping assigned, we're finished here return true; if (const char *p = _sfd.path()) { ifstream is(p); if (!is) return false; - int lineno=1; while (is) { if (is.peek() == '#' || is.peek() == '\n') { @@ -151,14 +141,13 @@ bool Subfont::read () { lineno += skip_mapping_data(is); else { // build mapping array - _mapping = new uint16_t[256]; - memset(_mapping, 0, 256*sizeof(uint16_t)); + _mapping.resize(256, 0); long pos=0; char buf[1024]; bool complete=false; while (!complete) { is.getline(buf, 1024); - complete = scan_line(buf, lineno, _mapping, _sfd.filename() ,pos); + complete = scan_line(buf, lineno, _mapping, _sfd.filename(), pos); } return true; } @@ -174,7 +163,7 @@ bool Subfont::read () { * @param[in] c local character code relative to the subfont * @return character code of the target font */ uint16_t Subfont::decode (unsigned char c) { - if (!_mapping && !read()) + if (_mapping.empty() && !read()) return 0; return _mapping[c]; } @@ -210,7 +199,7 @@ static int skip_mapping_data (istream &is) { * @param[in] fname name of the mapfile being scanned * @param[in,out] offset position/index of next mapping value * @return true if the line is the last one the current mapping sequence, i.e. the line doesn't end with a backslash */ -static bool scan_line (const char *line, int lineno, uint16_t *mapping, const string &fname, long &offset) { +static bool scan_line (const char *line, int lineno, vector<uint16_t> &mapping, const string &fname, long &offset) { const char *p=line; char *q; for (; *p && isspace(*p); p++); @@ -223,11 +212,10 @@ static bool scan_line (const char *line, int lineno, uint16_t *mapping, const st else { long val1 = strtol(p, &q, 0); // first value of range long val2 = -1; // last value of range - ostringstream oss; // output stream for exception messages switch (*q) { case ':': if (val1 < 0 || val1 > 255) - throw SubfontException(oss << "offset value " << val1 << " out of range (0-255)", fname, lineno); + throw SubfontException("offset value "+to_string(val1)+" out of range (0-255)", fname, lineno); offset = val1; val1 = -1; q++; @@ -236,25 +224,25 @@ static bool scan_line (const char *line, int lineno, uint16_t *mapping, const st p = q+1; val2 = strtol(p, &q, 0); if (val1 < 0 || val1 > 0xffffL) - throw SubfontException(oss << "table value " << val1 << " out of range", fname, lineno); + throw SubfontException("table value "+to_string(val1)+" out of range", fname, lineno); if (val2 < 0 || val2 > 0xffffL) - throw SubfontException(oss << "table value " << val2 << " out of range", fname, lineno); + throw SubfontException("table value "+to_string(val2)+" out of range", fname, lineno); if (p == q || (!isspace(*q) && *q != '\\' && *q)) - throw SubfontException(oss << "unexpected character '" << *q << "'", fname, lineno); + throw SubfontException("unexpected character '"+to_string(*q)+"'", fname, lineno); break; default: if (p == q || (!isspace(*q) && *q != '\\' && *q)) - throw SubfontException(oss << "unexpected character '" << *q << "'", fname, lineno); + throw SubfontException("unexpected character '"+to_string(*q)+"'", fname, lineno); if (val1 < 0 || val1 > 0xffffL) throw SubfontException("invalid character code", fname, lineno); val2 = val1; } if (val1 >= 0) { if (val1 > val2 || offset+val2-val1 > 255) - throw SubfontException(oss << "invalid range in mapping table: " << hex << val1 << '_' << val2, fname, lineno); + throw SubfontException("invalid range in mapping table: "+util::tohex(val1)+"_"+util::tohex(val2), fname, lineno); for (long v=val1; v <= val2; v++) { if (mapping[offset]) - throw SubfontException(oss << "mapping of character " << offset << " already defined", fname, lineno); + throw SubfontException("mapping of character "+to_string(offset)+" already defined", fname, lineno); mapping[offset++] = static_cast<uint16_t>(v); } } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.hpp index 46c322a4c08..a1aa52a4d58 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.hpp @@ -2,7 +2,7 @@ ** Subfont.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,22 +23,20 @@ #include <istream> #include <map> +#include <memory> #include <sstream> #include <string> #include <vector> #include "MessageException.hpp" - class Subfont; /** Represents a collection of subfont mappings as defined in a .sfd file, and * encapsulates the evaluation of these files. */ -class SubfontDefinition -{ - typedef std::map<std::string, Subfont*> Subfonts; +class SubfontDefinition { + using Subfonts = std::map<std::string, std::unique_ptr<Subfont>>; public: - ~SubfontDefinition (); static SubfontDefinition* lookup (const std::string &name); // int getIDs (std::vector<std::string> &ids) const; const std::string& name() const {return _sfname;} @@ -49,7 +47,7 @@ class SubfontDefinition protected: SubfontDefinition (const std::string &name, const char *fpath); - SubfontDefinition (const SubfontDefinition &sfd) {} + SubfontDefinition (const SubfontDefinition &sfd) =delete; private: std::string _sfname; ///< name of subfont @@ -58,38 +56,31 @@ class SubfontDefinition /** Represents a single subfont mapping defined in a SubfontDefinition (.sfd file). */ -class Subfont -{ +class Subfont { friend class SubfontDefinition; public: - ~Subfont(); const std::string& id () const {return _id;} uint16_t decode (unsigned char c); protected: Subfont (SubfontDefinition &sfd, const std::string &id) : _sfd(sfd), _id(id), _mapping(0) {} + Subfont (const Subfont &sf) =delete; bool read (); private: - SubfontDefinition &_sfd; ///< SubfontDefinition where this Subfont belongs to - const std::string &_id; ///< id of this subfont as specified in the .sfd file - uint16_t *_mapping; ///< the character mapping table with 256 entries + SubfontDefinition &_sfd; ///< SubfontDefinition where this Subfont belongs to + const std::string &_id; ///< id of this subfont as specified in the .sfd file + std::vector<uint16_t> _mapping; ///< the character mapping table with 256 entries }; -class SubfontException : public MessageException -{ +class SubfontException : public MessageException { public: SubfontException (const std::string &msg, const std::string &fname, int lineno=0) : MessageException(msg), _fname(fname), _lineno(lineno) {} - SubfontException (const std::ostream &oss, const std::string &fname, int lineno=0) - : MessageException(dynamic_cast<const std::ostringstream&>(oss).str()), _fname(fname), _lineno(lineno) {} - - virtual ~SubfontException () throw() =default; - const char* filename () const {return _fname.c_str();} - int lineno () const {return _lineno;} + int lineno () const {return _lineno;} private: std::string _fname; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/System.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/System.cpp index 30af5e0aa00..52d568cd1d9 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/System.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/System.cpp @@ -2,7 +2,7 @@ ** System.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/System.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/System.hpp index 19f89f7074f..7574ccdef0d 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/System.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/System.hpp @@ -2,7 +2,7 @@ ** System.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.cpp index 94901437c7a..0aba9d4811f 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.cpp @@ -2,7 +2,7 @@ ** TFM.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <fstream> #include <vector> #include "FileFinder.hpp" diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.hpp index 495b051eb89..9fdc432bdf7 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.hpp @@ -2,7 +2,7 @@ ** TFM.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.cpp new file mode 100644 index 00000000000..e2d7714de42 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.cpp @@ -0,0 +1,139 @@ +/************************************************************************* +** TTFAutohint.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#include "TTFAutohint.hpp" + +using namespace std; + +#ifndef HAVE_TTFAUTOHINT_H +TTFAutohint::TTFAutohint () {} + +bool TTFAutohint::available () const { + return false; +} + +int TTFAutohint::autohint (const string&, const string&, bool) { + return 0; +} + +string TTFAutohint::lastErrorMessage () const { + return ""; +} + +string TTFAutohint::version () const { + return ""; +} + +#else // HAVE_TTFAUTOHINT_H + +#include <ttfautohint.h> + +#ifndef HAVE_LIBTTFAUTOHINT +static string get_libttfautohint () { +#ifdef _WIN32 + return "ttfautohint.dll"; +#else + string dlname = "libttfautohint.so.1"; +#ifdef __APPLE__ + DLLoader loader(dlname); + if (!loader.loaded()) + dlname = "libttfautohint.1.dylib"; +#endif + return dlname; +#endif // _WIN32 +} +#endif // HAVE_LIBTTFAUTOHINT + + +TTFAutohint::TTFAutohint () : +#ifndef HAVE_LIBTTFAUTOHINT + DLLoader(get_libttfautohint()), +#endif + _lastErrorMessage() +{ +} + + +/** Returns true if the ttfautohint library is present. */ +bool TTFAutohint::available () const { +#ifdef HAVE_LIBTTFAUTOHINT + return true; +#else + return loaded(); +#endif +} + + +/** Runs ttfautohint on a given font file. + * @param[in] source name of TTF input file + * @param[in] target name of TTF output file + * @param[in] rehintIfSymbolFont if true, ttfautohint is run again with option "symbol" in case regular hinting is rejected. + * @return ttfautohint error code (0 = success) */ +int TTFAutohint::autohint (const string &source, const string &target, bool rehintIfSymbolFont) { +#ifdef HAVE_LIBTTFAUTOHINT + auto fn = &TTF_autohint; +#else + auto fn = LOAD_SYMBOL(TTF_autohint); +#endif + int ret=0; + if (fn) { + FILE *ttf_in = fopen(source.c_str(), "rb"); + FILE *ttf_out = fopen(target.c_str(), "wb"); + ret = fn("in-file, out-file, default-script, error-string", ttf_in, ttf_out, "latn", &_lastErrorMessage); + if (ret == TA_Err_Missing_Glyph && rehintIfSymbolFont) { + fseek(ttf_in, 0, SEEK_SET); + fseek(ttf_out, 0, SEEK_SET); + ret = fn("in-file, out-file, symbol, error-string", ttf_in, ttf_out, true, &_lastErrorMessage); + } + fclose(ttf_out); + fclose(ttf_in); + } + return ret; +} + + +/** Returns the error message of the last autohint call. */ +string TTFAutohint::lastErrorMessage () const { + string message; + if (_lastErrorMessage) + message = reinterpret_cast<const char*>(_lastErrorMessage); + return message; +} + + +/** Returns the version number of ttfautohint. */ +string TTFAutohint::version () const { +#ifdef HAVE_LIBTTFAUTOHINT + auto fn = &TTF_autohint_version; +#else + auto fn = LOAD_SYMBOL(TTF_autohint_version); +#endif + string ret; + if (fn) { + int major, minor, revision; + fn(&major, &minor, &revision); + ret = to_string(major)+"."+to_string(minor); + if (revision) + ret += "."+to_string(revision); + } + return ret; +} + +#endif // HAVE_TTFAUTOHINT_H diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.hpp new file mode 100644 index 00000000000..68d9e89357d --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.hpp @@ -0,0 +1,51 @@ +/************************************************************************* +** TTFAutohint.hpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#ifndef TTFAUTOHINT_HPP +#define TTFAUTOHINT_HPP + +#include <config.h> +#include <string> + +#if defined(HAVE_TTFAUTOHINT_H) && !defined(HAVE_LIBTTFAUTOHINT) +#include "DLLoader.hpp" +#endif + +class TTFAutohint +#if defined(HAVE_TTFAUTOHINT_H) && !defined(HAVE_LIBTTFAUTOHINT) + : public DLLoader +#endif +{ + public: + TTFAutohint (); + TTFAutohint (const TTFAutohint &ta) =delete; + bool available () const; + int autohint (const std::string &source, const std::string &target, bool rehintIfSymbolFont); + std::string lastErrorMessage () const; + std::string version () const; + +#ifdef HAVE_TTFAUTOHINT_H + private: + const unsigned char *_lastErrorMessage; +#endif +}; + +#endif + diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.cpp index 89ee6174233..4d910e140dc 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.cpp @@ -2,7 +2,7 @@ ** TensorProductPatch.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.hpp index c9d2818fc25..3c8084d03ce 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.hpp @@ -2,7 +2,7 @@ ** TensorProductPatch.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.cpp index 32ebf3a35f8..f7f185507ba 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.cpp @@ -2,7 +2,7 @@ ** Terminal.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -30,7 +30,7 @@ #endif #ifdef _WIN32 -#include <windows.h> +#include "windows.hpp" #endif #include <cstdio> diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.hpp index ea8f67e42d1..c51affcfbdc 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.hpp @@ -2,7 +2,7 @@ ** Terminal.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp index 752b8517fa0..1e405d94a28 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp @@ -2,7 +2,7 @@ ** ToUnicodeMap.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.hpp index f8ffe3bace9..403651dc0f9 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.hpp @@ -2,7 +2,7 @@ ** ToUnicodeMap.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.cpp index ecccf636906..7f007697395 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.cpp @@ -2,7 +2,7 @@ ** TpicSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,9 +18,10 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> +#include <bitset> #include <cstring> #include <sstream> +#include <string> #include "Color.hpp" #include "InputBuffer.hpp" #include "InputReader.hpp" @@ -46,42 +47,77 @@ void TpicSpecialHandler::dviEndPage (unsigned pageno, SpecialActions&) { void TpicSpecialHandler::reset () { _points.clear(); _penwidth = 1.0; - _fill = -1.0; // no fill + _grayLevel = -1.0; // no fill +} + + +/** Returns the current color used to fill closed paths or shapes. + * The TPIC documentation only specifies grayscale colors set by a floating point value + * in the range of 0 (white) and 1 (black). Most DVI drivers extend the color support + * by taking color specials into account: The grayscale colors are only applied if + * the DVI color is set to black. All other colors are directly used as fill color + * without evaluating the TPIC gray level. */ +Color TpicSpecialHandler::fillColor (bool grayOnly) const { + if (_grayLevel >= 0 && (_dviColor == Color::BLACK || grayOnly)) + return Color::WHITE*(1.0-_grayLevel); + return _dviColor; +} + + +/** Adds stroke attributes to a given element depending on the pen width. + * @param[in] elem element node the attributes are added to + * @param[in] penwidth pen with used to compute the stroke parameters + * @param[in] pencolor the drawing color + * @param[in] ddist dash/dot distance of line in PS point units (0:solid line, >0:dashed line, <0:dotted line) */ +static void add_stroke_attribs (XMLElementNode *elem, double penwidth, Color pencolor, double ddist) { + if (penwidth > 0) { // attributes actually required? + elem->addAttribute("stroke", pencolor.svgColorString()); + elem->addAttribute("stroke-width", XMLString(penwidth)); + if (ddist > 0) + elem->addAttribute("stroke-dasharray", XMLString(ddist)); + else if (ddist < 0) + elem->addAttribute("stroke-dasharray", XMLString(penwidth) + ' ' + XMLString(-ddist)); + } +} + + +static unique_ptr<XMLElementNode> create_ellipse_element (double cx, double cy, double rx, double ry) { + bool is_circle = (rx == ry); + auto elem = util::make_unique<XMLElementNode>(is_circle ? "circle" : "ellipse"); + elem->addAttribute("cx", XMLString(cx)); + elem->addAttribute("cy", XMLString(cy)); + if (is_circle) + elem->addAttribute("r", XMLString(rx)); + else { + elem->addAttribute("rx", XMLString(rx)); + elem->addAttribute("ry", XMLString(ry)); + } + return elem; } /** Creates SVG elements that draw lines through the recorded points. - * @param[in] stroke if true, the (out)line is drawn (in black) - * @param[in] fill if true, enclosed area is filled with current color - * @param[in] ddist dash/dot distance of line in PS point units - * (0:solid line, >0:dashed line, <0:dotted line) + * @param[in] ddist dash/dot distance of line in PS point units (0:solid line, >0:dashed line, <0:dotted line) * @param[in] actions object providing the actions that can be performed by the SpecialHandler */ -void TpicSpecialHandler::drawLines (bool stroke, bool fill, double ddist, SpecialActions &actions) { - if (!_points.empty()) { - XMLElementNode *elem=0; +void TpicSpecialHandler::drawLines (double ddist, SpecialActions &actions) { + if (!_points.empty() && (_penwidth > 0 || _grayLevel >= 0)) { + unique_ptr<XMLElementNode> elem; if (_points.size() == 1) { const DPair &p = _points.back(); - elem = new XMLElementNode("circle"); - elem->addAttribute("cx", p.x()+actions.getX()); - elem->addAttribute("cy", p.y()+actions.getY()); - elem->addAttribute("r", _penwidth/2.0); + elem = create_ellipse_element(p.x()+actions.getX(), p.y()+actions.getY(), _penwidth/2.0, _penwidth/2.0); actions.embed(p, _penwidth/2.0); } else { - if (_points.size() == 2 || (!fill && _points.front() != _points.back())) { - elem = new XMLElementNode("polyline"); + if (_points.size() == 2 || (_grayLevel < 0 && _points.front() != _points.back())) { + elem = util::make_unique<XMLElementNode>("polyline"); elem->addAttribute("fill", "none"); elem->addAttribute("stroke-linecap", "round"); } else { - if (_points.front() == _points.back()) + while (_points.front() == _points.back()) _points.pop_back(); - if (_fill < 0) - _fill = 1; - Color color = actions.getColor(); - color *= _fill; - elem = new XMLElementNode("polygon"); - elem->addAttribute("fill", fill ? color.svgColorString() : "none"); + elem = util::make_unique<XMLElementNode>("polygon"); + elem->addAttribute("fill", _grayLevel < 0 ? "none" : fillColor(false).svgColorString()); } ostringstream oss; for (auto it=_points.begin(); it != _points.end(); ++it) { @@ -93,16 +129,9 @@ void TpicSpecialHandler::drawLines (bool stroke, bool fill, double ddist, Specia actions.embed(DPair(x, y)); } elem->addAttribute("points", oss.str()); - if (stroke) { // draw outline? - elem->addAttribute("stroke", "black"); - elem->addAttribute("stroke-width", XMLString(_penwidth)); - } + add_stroke_attribs(elem.get(), _penwidth, Color::BLACK, ddist); } - if (ddist > 0) - elem->addAttribute("stroke-dasharray", XMLString(ddist)); - else if (ddist < 0) - elem->addAttribute("stroke-dasharray", XMLString(_penwidth) + ' ' + XMLString(-ddist)); - actions.appendToPage(elem); + actions.appendToPage(std::move(elem)); } reset(); } @@ -117,177 +146,191 @@ void TpicSpecialHandler::drawLines (bool stroke, bool fill, double ddist, Specia * @param[in] ddist length of dashes and gaps * @param[in] actions object providing the actions that can be performed by the SpecialHandler */ void TpicSpecialHandler::drawSplines (double ddist, SpecialActions &actions) { - if (_points.empty()) - return; - const size_t size = _points.size(); - if (size < 3) - drawLines(true, false, ddist, actions); - else { - DPair p(actions.getX(), actions.getY()); - GraphicsPath<double> path; - path.moveto(p+_points[0]); - DPair mid = p+_points[0]+(_points[1]-_points[0])/2.0; - path.lineto(mid); - actions.embed(p+_points[0]); - for (size_t i=1; i < size-1; i++) { - const DPair p0 = p+_points[i-1]; - const DPair p1 = p+_points[i]; - const DPair p2 = p+_points[i+1]; - mid = p1+(p2-p1)/2.0; - path.conicto(p1, mid); - actions.embed(mid); - actions.embed((p0+p1*6.0+p2)/8.0, _penwidth); + if (!_points.empty() && _penwidth > 0) { + const size_t numPoints = _points.size(); + if (numPoints < 3) { + _grayLevel = -1; + drawLines(ddist, actions); } - if (_points[0] == _points[size-1]) // closed path? - path.closepath(); else { - path.lineto(p+_points[size-1]); - actions.embed(p+_points[size-1]); - } - - Color color = actions.getColor(); - color *= _fill; - XMLElementNode *pathElem = new XMLElementNode("path"); - if (_fill >= 0) { - if (_points[0] != _points[size-1]) + DPair p(actions.getX(), actions.getY()); + GraphicsPath<double> path; + path.moveto(p+_points[0]); + DPair mid = p+_points[0]+(_points[1]-_points[0])/2.0; + path.lineto(mid); + actions.embed(p+_points[0]); + for (size_t i=1; i < numPoints-1; i++) { + const DPair p0 = p+_points[i-1]; + const DPair p1 = p+_points[i]; + const DPair p2 = p+_points[i+1]; + mid = p1+(p2-p1)/2.0; + path.conicto(p1, mid); + actions.embed(mid); + actions.embed((p0+p1*6.0+p2)/8.0, _penwidth); + } + if (_points[0] == _points[numPoints-1]) // closed path? path.closepath(); - pathElem->addAttribute("fill", color.svgColorString()); - } - else + else { + path.lineto(p+_points[numPoints-1]); + actions.embed(p+_points[numPoints-1]); + } + auto pathElem = util::make_unique<XMLElementNode>("path"); pathElem->addAttribute("fill", "none"); - - ostringstream oss; - path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS); - pathElem->addAttribute("d", oss.str()); - pathElem->addAttribute("stroke", actions.getColor().svgColorString()); - pathElem->addAttribute("stroke-width", XMLString(_penwidth)); - if (ddist > 0) - pathElem->addAttribute("stroke-dasharray", XMLString(ddist)); - else if (ddist < 0) - pathElem->addAttribute("stroke-dasharray", XMLString(_penwidth) + ' ' + XMLString(-ddist)); - actions.appendToPage(pathElem); + ostringstream oss; + path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS); + pathElem->addAttribute("d", oss.str()); + add_stroke_attribs(pathElem.get(), _penwidth, _dviColor, ddist); + actions.appendToPage(std::move(pathElem)); + } } reset(); } +static double normalized_angle (double rad) { + rad = fmod(rad, math::TWO_PI); + if (rad < 0) + rad += math::TWO_PI; + return rad; +} + + /** Draws an elliptical arc. - * @param[in] cx x-coordinate of arc center - * @param[in] cy y-coordinate of arc center - * @param[in] rx length of horizonal semi-axis + * @param[in] cx x-coordinate of arc center relative to current DVI position + * @param[in] cy y-coordinate of arc center relative to current DVI position + * @param[in] rx length of horizontal semi-axis * @param[in] ry length of vertical semi-axis * @param[in] angle1 starting angle (clockwise) relative to x-axis * @param[in] angle2 ending angle (clockwise) relative to x-axis * @param[in] actions object providing the actions that can be performed by the SpecialHandler */ void TpicSpecialHandler::drawArc (double cx, double cy, double rx, double ry, double angle1, double angle2, SpecialActions &actions) { - angle1 *= -1; - angle2 *= -1; - if (fabs(angle1) > math::TWO_PI) { - int n = (int)(angle1/math::TWO_PI); - angle1 = angle1 - n*math::TWO_PI; - angle2 = angle2 - n*math::TWO_PI; - } - - double x = cx + actions.getX(); - double y = cy + actions.getY(); - XMLElementNode *elem=0; - if (fabs(angle1-angle2) >= math::TWO_PI) { // closed ellipse? - elem = new XMLElementNode("ellipse"); - elem->addAttribute("cx", XMLString(x)); - elem->addAttribute("cy", XMLString(y)); - elem->addAttribute("rx", XMLString(rx)); - elem->addAttribute("ry", XMLString(ry)); - } - else { - if (angle1 < 0) - angle1 = math::TWO_PI+angle1; - if (angle2 < 0) - angle2 = math::TWO_PI+angle2; - elem = new XMLElementNode("path"); - int large_arg = fabs(angle1-angle2) > math::PI ? 0 : 1; - int sweep_flag = angle1 > angle2 ? 0 : 1; - if (angle1 > angle2) { - large_arg = 1-large_arg; - sweep_flag = 1-sweep_flag; + if (_penwidth > 0 || _grayLevel >= 0) { + angle1 = -angle1; + angle2 = -angle2; + cx += actions.getX(); + cy += actions.getY(); + unique_ptr<XMLElementNode> elem; + bool closed=true; + if (abs(angle2-angle1) >= math::TWO_PI) // closed ellipse? + elem = create_ellipse_element(cx, cy, rx, ry); + else { + angle1 = normalized_angle(angle1); + angle2 = normalized_angle(angle2); + double delta = normalized_angle(angle2-angle1); + int large_arg = (delta < math::PI) ? 1 : 0; + ostringstream oss; + oss << 'M' << XMLString(cx+rx*cos(angle1)) << ' ' << XMLString(cy+ry*sin(-angle1)) + << 'A' << XMLString(rx) << ' ' << XMLString(ry) + << " 0 " // no rotation of x-axis + << large_arg << " 1 " // always draw arc clockwise (sweep flag == 1) + << XMLString(cx+rx*cos(angle2)) << ' ' << XMLString(cy-ry*sin(angle2)); + if (_grayLevel >= 0) + oss << 'Z'; + else + closed = false; + elem = util::make_unique<XMLElementNode>("path"); + elem->addAttribute("d", oss.str()); } - ostringstream oss; - oss << 'M' << XMLString(x+rx*cos(angle1)) << ',' << XMLString(y+ry*sin(-angle1)) - << 'A' << XMLString(rx) << ',' << XMLString(ry) - << " 0 " - << large_arg << ' ' << sweep_flag << ' ' - << XMLString(x+rx*cos(angle2)) << ',' << XMLString(y-ry*sin(angle2)); - if (_fill >= 0) - oss << 'Z'; - elem->addAttribute("d", oss.str()); - } - elem->addAttribute("stroke-width", _penwidth); - elem->addAttribute("stroke", actions.getColor().svgColorString()); - elem->addAttribute("stroke-linecap", "round"); - elem->addAttribute("fill", "none"); - if (_fill >= 0) { - Color color=actions.getColor(); - color *= _fill; - elem->addAttribute("fill", color.svgColorString()); + if (_penwidth > 0) { + elem->addAttribute("stroke-width", _penwidth); + elem->addAttribute("stroke", actions.getColor().svgColorString()); + if (!closed) + elem->addAttribute("stroke-linecap", "round"); + } + elem->addAttribute("fill", _grayLevel < 0 ? "none" : fillColor(true).svgColorString()); + actions.appendToPage(std::move(elem)); + double pw = _penwidth/2.0; + actions.embed(BoundingBox(cx-rx-pw, cy-ry-pw, cx+rx+pw, cy+ry+pw)); } - else - elem->addAttribute("fill", "none"); - actions.appendToPage(elem); - actions.embed(BoundingBox(cx-rx, cy-ry, cx+rx, cy+ry)); reset(); } -static constexpr int cmd_id (int a, int b) { - return (a << 8) | b; +/** Computes the gray level based on the ratio of set bits to the total + * number of bits of a given hex value. + * @param[in] hexstr a sequence of hexadecimal digits + * @return the computed gray level [0-1] */ +static double bit_sequence_to_gray (const string &hexstr) { + if (hexstr.empty()) + return 1.0; + int setbits=0; // number of bits set + int totalbits=0; // number of bits processed + constexpr int CHUNKBITS = 8*sizeof(unsigned long long); + for (size_t pos=0; pos < hexstr.length(); pos+=CHUNKBITS/4) { + size_t digitcount; // number of hex digits processed + unsigned long long val = stoull(hexstr.substr(pos, CHUNKBITS/4), &digitcount, 16); + setbits += bitset<CHUNKBITS>(val).count(); + totalbits += 4*digitcount; + } + return 1.0-double(setbits)/double(totalbits); +} + + +/** Returns a unique integer for a TPIC command (consisting of two letters). */ +constexpr int cmd_id (const char *cmd) { + return (cmd[0] << 8) | cmd[1]; }; + bool TpicSpecialHandler::process (const char *prefix, istream &is, SpecialActions &actions) { if (!prefix || strlen(prefix) != 2) return false; - + _dviColor = actions.getColor(); const double mi2bp=0.072; // factor for milli-inch to PS points StreamInputBuffer ib(is); BufferInputReader ir(ib); - switch (cmd_id(prefix[0], prefix[1])) { - case cmd_id('p','n'): // set pen width in milli-inches - _penwidth = ir.getDouble()*mi2bp; + switch (cmd_id(prefix)) { + case cmd_id("pn"): // set pen width in milli-inches + _penwidth = max(0.0, ir.getDouble()*mi2bp); break; - case cmd_id('b','k'): // set fill color to black - _fill = 0; + case cmd_id("bk"): // set fill color to black + _grayLevel = 1; break; - case cmd_id('w','h'): // set fill color to white - _fill = 1; + case cmd_id("wh"): // set fill color to white + _grayLevel = 0; break; - case cmd_id('s','h'): // set fill color to given gray level + case cmd_id("sh"): // set fill color to given gray level (0=white, 1=black) ir.skipSpace(); - _fill = ir.eof() ? 0.5 : max(0.0, min(1.0, ir.getDouble())); + _grayLevel = ir.eof() ? 0.5 : max(0.0, min(1.0, ir.getDouble())); break; - case cmd_id('t','x'): // set fill pattern + case cmd_id("tx"): { // set fill color depending on a sequence of bits (given as hex value) + string hexstr; + while (!ir.eof()) { + ir.skipSpace(); + int c = ir.get(); + if (isxdigit(c)) + hexstr += static_cast<char>(tolower(c)); + else + break; + } + _grayLevel = bit_sequence_to_gray(hexstr); break; - case cmd_id('p','a'): { // add point to path + } + case cmd_id("pa"): { // add point to path double x = ir.getDouble()*mi2bp; double y = ir.getDouble()*mi2bp; _points.emplace_back(DPair(x,y)); break; } - case cmd_id('f','p'): // draw solid lines through recorded points; close and fill path if fill color was defined - drawLines(true, _fill >= 0, 0, actions); + case cmd_id("fp"): // draw solid lines through recorded points; close and fill path if fill color was defined + drawLines(0, actions); break; - case cmd_id('i','p'): // don't draw outlines but close the recorded path and fill the resulting polygon - drawLines(false, true, 0, actions); + case cmd_id("ip"): // don't draw outlines but close the recorded path and fill the resulting polygon + _penwidth = 0; + drawLines(0, actions); break; - case cmd_id('d','a'): // as fp but draw dashed lines - drawLines(true, _fill >= 0, ir.getDouble()*72, actions); + case cmd_id("da"): // as fp but draw dashed lines + drawLines(ir.getDouble()*72, actions); break; - case cmd_id('d','t'): // as fp but draw dotted lines - drawLines(true, _fill >= 0, -ir.getDouble()*72, actions); + case cmd_id("dt"): // as fp but draw dotted lines + drawLines(-ir.getDouble()*72, actions); break; - case cmd_id('s','p'): { // draw quadratic splines through recorded points - double ddist = ir.getDouble(); + case cmd_id("sp"): { // draw quadratic splines through recorded points + double ddist = ir.getDouble()*72; drawSplines(ddist, actions); break; } - case cmd_id('a','r'): { // draw elliptical arc + case cmd_id("ar"): { // draw elliptical arc double cx = ir.getDouble()*mi2bp; double cy = ir.getDouble()*mi2bp; double rx = ir.getDouble()*mi2bp; @@ -297,18 +340,15 @@ bool TpicSpecialHandler::process (const char *prefix, istream &is, SpecialAction drawArc(cx, cy, rx, ry, a1, a2, actions); break; } - case cmd_id('i','a'): { // fill elliptical arc + case cmd_id("ia"): { // fill elliptical arc double cx = ir.getDouble()*mi2bp; double cy = ir.getDouble()*mi2bp; double rx = ir.getDouble()*mi2bp; double ry = ir.getDouble()*mi2bp; double a1 = ir.getDouble(); double a2 = ir.getDouble(); - if (_fill < 0) - _fill = 1; + _penwidth = 0; drawArc(cx, cy, rx, ry, a1, a2, actions); - if (_fill < 0) - _fill = -1; break; } default: @@ -318,7 +358,7 @@ bool TpicSpecialHandler::process (const char *prefix, istream &is, SpecialAction } -const char** TpicSpecialHandler::prefixes () const { - static const char *pfx[] = {"ar", "bk", "da", "dt", "fp", "ia", "ip", "pa", "pn", "sh", "sp", "tx", "wh", 0}; +const vector<const char*> TpicSpecialHandler::prefixes () const { + const vector<const char*> pfx {"ar", "bk", "da", "dt", "fp", "ia", "ip", "pa", "pn", "sh", "sp", "tx", "wh"}; return pfx; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.hpp index ec2ff5d4cde..2bbc8182b12 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.hpp @@ -2,7 +2,7 @@ ** TpicSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -31,20 +31,24 @@ class TpicSpecialHandler : public SpecialHandler, public DVIEndPageListener TpicSpecialHandler (); const char* info () const override {return "TPIC specials";} const char* name () const override {return "tpic";} - const char** prefixes () const override; + const std::vector<const char*> prefixes () const override; bool process (const char *prefix, std::istream &is, SpecialActions &actions) override; + double penwidth () const {return _penwidth;} + double grayLevel () const {return _grayLevel;} + Color fillColor (bool grayOnly) const; protected: void dviEndPage (unsigned pageno, SpecialActions &actions) override; void reset (); - void drawLines (bool stroke, bool fill, double ddist, SpecialActions &actions); + void drawLines (double ddist, SpecialActions &actions); void drawSplines (double ddist, SpecialActions &actions); void drawArc (double cx, double cy, double rx, double ry, double angle1, double angle2, SpecialActions &actions); private: - double _penwidth; ///< pen width in PS point units - double _fill; ///< fill intensity [0,1]; if < 0, we don't fill anything + double _penwidth; ///< pen width in PS point units + double _grayLevel; ///< [0,1]; 0=white, 1=black, if < 0, we don't fill anything std::vector<DPair> _points; + Color _dviColor; ///< current DVI color }; #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.cpp index 7d38a5edfc8..65826459ee8 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.cpp @@ -2,7 +2,7 @@ ** TriangularPatch.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.hpp index c37f94d0f11..c2aa6028a76 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.hpp @@ -2,7 +2,7 @@ ** TriangularPatch.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.cpp new file mode 100644 index 00000000000..c7191c53698 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.cpp @@ -0,0 +1,175 @@ +/************************************************************************* +** TrueTypeFont.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#include <iterator> +#include <sstream> +#include <woff2/encode.h> +#include <zlib.h> +#include "StreamReader.hpp" +#include "StreamWriter.hpp" +#include "TrueTypeFont.hpp" +#include "utility.hpp" + +using namespace std; + + +/** Reads the font data from a TTF file. + * OTF specification: https://www.microsoft.com/typography/otspec/otff.htm + * @param[in] fname name/path of file to read + * @return true on success */ +bool TrueTypeFont::read (const string &fname) { + _tableRecords.clear(); + _buffer = util::read_file_contents(fname); + if (_buffer.empty()) + return false; + istringstream iss(_buffer); + StreamReader reader(iss); + _version = reader.readUnsigned(4); + uint16_t numTables = reader.readUnsigned(2); + if (numTables == 0 || _buffer.size() <= 12u+16u*numTables) + return false; + + // read table records + reader.seek(12); // skip searchRange, entrySelector, and rangeShift + for (uint16_t i=0; i < numTables; i++) { + uint32_t tag = reader.readUnsigned(4); + uint32_t checksum = reader.readUnsigned(4); + uint32_t offset = reader.readUnsigned(4); + uint32_t length = reader.readUnsigned(4); + if ((offset | length) > _buffer.size() || offset+length > _buffer.size()) + return false; + TTFTableRecord record = {tag, checksum, length, reinterpret_cast<const uint8_t*>(_buffer.data())+offset}; + _tableRecords.emplace_back(std::move(record)); + } + return true; +} + + +/** Compresses the data of the referenced TTF table and updated the record data accordingly. + * @return true if the data was compressed */ +bool TrueTypeFont::WOFFTableRecord::compressTableData () { + if (ttfRecord.size < 16) + return false; + uLong compressedSize = compressBound(ttfRecord.size); + compressedData.resize(compressedSize); + // Compress with zlib for now. We could also use zopfli for slightly better but much slower compression. + // Only use the compressed data if it actually leads to a size reduction. Otherwise, use the original table data. + if (compress2(compressedData.data(), &compressedSize, ttfRecord.data, ttfRecord.size, Z_BEST_COMPRESSION) != Z_OK + || compressedSize >= ttfRecord.size) { + compressedData.clear(); + return false; + } + size = compressedSize; + data = compressedData.data(); + return true; +} + + +/** Writes font data in WOFF format to a given output stream. + WOFF specifiction: https://www.w3.org/TR/WOFF */ +void TrueTypeFont::writeWOFF (ostream &os) const { + // compute WOFF table records first + vector<WOFFTableRecord> woffRecords; + uint32_t woffSize = static_cast<uint32_t>(44 + 20*_tableRecords.size()); + uint32_t ttfSize = static_cast<uint32_t>(12 + 16*_tableRecords.size()); + for (const TTFTableRecord &ttfRecord : _tableRecords) { + WOFFTableRecord woffRecord(woffSize, ttfRecord); + woffRecord.compressTableData(); + woffSize += woffRecord.paddedSize(); + ttfSize += ttfRecord.paddedSize(); + woffRecords.emplace_back(std::move(woffRecord)); + } + // write WOFF header + StreamWriter writer(os); + writer.writeUnsigned(0x774F4646, 4); // "WOFF" + writer.writeUnsigned(_version, 4); // version of contained TTF font + writer.writeUnsigned(woffSize, 4); // total length of WOFF file + writer.writeUnsigned(_tableRecords.size(), 2); // number of tables + writer.writeBytes(0, 2); // reserved + writer.writeUnsigned(ttfSize, 4); // size of uncompressed TTF data + writer.writeBytes(0, 4); // WOFF version (not required) + writer.writeBytes(0, 12); // offset, compressed and uncompressed size of metadata block + writer.writeBytes(0, 8); // offset and size of private data block + + // write WOFF table directory + for (const WOFFTableRecord &woffRecord : woffRecords) { + writer.writeUnsigned(woffRecord.ttfRecord.tag, 4); + writer.writeUnsigned(woffRecord.offset, 4); + writer.writeUnsigned(woffRecord.size, 4); + writer.writeUnsigned(woffRecord.ttfRecord.size, 4); + writer.writeUnsigned(woffRecord.ttfRecord.checksum, 4); + } + + // write WOFF tables + for (const WOFFTableRecord &woffRecord : woffRecords) { + writer.writeBytes(woffRecord.data, woffRecord.size); + size_t padding = woffRecord.paddedSize()-woffRecord.size; + writer.writeBytes(0, padding); + } +} + + +void TrueTypeFont::writeWOFF (const string &fname) const { + ofstream ofs(fname.c_str(), ios::binary); + writeWOFF(ofs); +} + + +/** Puts the TrueType data in a WOFF2 container and writes the resulting data to a given stream. + * @param[out] os stream to write the WOFF2 data to + * @return true on success */ +bool TrueTypeFont::writeWOFF2 (ostream &os) const { + const uint8_t* input_data = reinterpret_cast<const uint8_t*>(_buffer.data()); + size_t output_size = woff2::MaxWOFF2CompressedSize(input_data, _buffer.size()); + string output(output_size, 0); + uint8_t* output_data = reinterpret_cast<uint8_t*>(&output[0]); + woff2::WOFF2Params params; + if (woff2::ConvertTTFToWOFF2(input_data, _buffer.size(), output_data, &output_size, params)) { + output.resize(output_size); + copy(output.begin(), output.end(), ostream_iterator<uint8_t>(os)); + return true; + } + return false; +} + + +bool TrueTypeFont::writeWOFF2 (const string &fname) const { + ofstream ofs(fname.c_str(), ios::binary); + return writeWOFF2(ofs); +} + + +/** Converts the numeric table tag (which represents a four-character ID) to a string. */ +string TrueTypeFont::TTFTableRecord::name () const { + string ret; + for (int i=24; i >= 0; i-= 8) + ret += static_cast<char>(tag >> i); + return ret; +} + + +uint32_t TrueTypeFont::TTFTableRecord::computeChecksum () const { + uint32_t sum=0; + const uint32_t *startptr = reinterpret_cast<const uint32_t*>(data); + const uint32_t *endptr = startptr + paddedSize()/sizeof(uint32_t); + while (startptr < endptr) + sum += *startptr++; + return sum; +}
\ No newline at end of file diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.hpp new file mode 100644 index 00000000000..5a6f2a180bd --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.hpp @@ -0,0 +1,74 @@ +/************************************************************************* +** TrueTypeFont.hpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#ifndef TRUETYPEFONT_HPP +#define TRUETYPEFONT_HPP + +#include <istream> +#include <fstream> +#include <ostream> +#include <string> +#include <vector> +#include "MessageException.hpp" + + +class TrueTypeFont { + struct TTFTableRecord { + std::string name () const; + uint32_t paddedSize () const {return (size+3) & ~3;} + uint32_t computeChecksum () const; + uint32_t tag; ///< table tag + uint32_t checksum; ///< checksum of the table data + uint32_t size; ///< number of bytes in the table + const uint8_t *data; ///< points to the begin of the table + }; + + struct WOFFTableRecord { + WOFFTableRecord (uint32_t off, const TTFTableRecord &rec) : offset(off), size(rec.size), data(rec.data), ttfRecord(rec) {} + size_t paddedSize () const {return (size+3) & ~3;} + bool compressTableData (); + uint32_t offset; ///< file offset to first byte of the table + uint32_t size; ///< number of bytes in the table + const uint8_t *data; ///< points to the begin of the WOFF table + std::vector<uint8_t> compressedData; ///< compressed table data + const TTFTableRecord &ttfRecord; ///< corresponding TTF table record + }; + + public: + TrueTypeFont () : _version(0) {} + TrueTypeFont (const std::string &fname) {read(fname);} + bool read (const std::string &fname); + void writeWOFF (std::ostream &os) const; + void writeWOFF (const std::string &fname) const; + bool writeWOFF2 (std::ostream &os) const; + bool writeWOFF2 (const std::string &fname) const; + + private: + uint32_t _version; ///< TTF version + std::string _buffer; ///< contents of TTF file + std::vector<TTFTableRecord> _tableRecords; +}; + + +struct TrueTypeFontException : public MessageException { + TrueTypeFontException (const std::string &msg) : MessageException(msg) {} +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.cpp index efb6122e2a7..75256e38ce3 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.cpp @@ -2,7 +2,7 @@ ** Unicode.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.hpp index b44ed6e1a67..eef6788f2cd 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.hpp @@ -2,7 +2,7 @@ ** Unicode.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/VFActions.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/VFActions.hpp index d9816a12aa5..c5161954a6a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/VFActions.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/VFActions.hpp @@ -2,7 +2,7 @@ ** VFActions.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp index f8a93932316..a5014768921 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp @@ -2,7 +2,7 @@ ** VFReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,7 +18,6 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <sstream> #include "FixWord.hpp" #include "Font.hpp" diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.hpp index 69664c43474..7dc6238689b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.hpp @@ -2,7 +2,7 @@ ** VFReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -36,7 +36,7 @@ struct VFActions; class VFReader : public StreamReader { - typedef bool (*ApproveAction)(int); + using ApproveAction = bool (*)(int); public: VFReader (std::istream &is); virtual ~VFReader (); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorIterator.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorIterator.hpp index 34e90e3f864..f0d6fa88ec9 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorIterator.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorIterator.hpp @@ -2,7 +2,7 @@ ** VectorIterator.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorStream.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorStream.hpp index bb5f4ddfdfa..98d4ce50399 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorStream.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorStream.hpp @@ -2,7 +2,7 @@ ** VectorStream.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.cpp index 2b539924025..13c25b4540f 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.cpp @@ -2,7 +2,7 @@ ** XMLDocument.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,13 +18,12 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include "XMLDocument.hpp" using namespace std; -XMLDocument::XMLDocument (XMLElementNode *root) - : _rootElement(root) +XMLDocument::XMLDocument (unique_ptr<XMLElementNode> &&root) + : _rootElement(std::move(root)) { } @@ -35,18 +34,18 @@ void XMLDocument::clear () { } -void XMLDocument::append (XMLNode *node) { +void XMLDocument::append (unique_ptr<XMLNode> &&node) { if (node) { - if (XMLElementNode *newRoot = dynamic_cast<XMLElementNode*>(node)) - _rootElement.reset(newRoot); + if (dynamic_cast<XMLElementNode*>(node.get())) + _rootElement = util::static_unique_ptr_cast<XMLElementNode>(std::move(node)); else - _nodes.emplace_back(unique_ptr<XMLNode>(node)); + _nodes.emplace_back(std::move(node)); } } -void XMLDocument::setRootNode (XMLElementNode *root) { - _rootElement.reset(root); +void XMLDocument::setRootNode (unique_ptr<XMLElementNode> &&root) { + _rootElement = std::move(root); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.hpp index d8590b8b35f..90e1cd23cfb 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.hpp @@ -2,7 +2,7 @@ ** XMLDocument.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -24,13 +24,14 @@ #include <memory> #include "XMLNode.hpp" -class XMLDocument -{ +class XMLDocument { public: - XMLDocument (XMLElementNode *root=0); + XMLDocument () =default; + XMLDocument (std::unique_ptr<XMLElementNode> &&root); void clear (); - void append (XMLNode *node); - void setRootNode (XMLElementNode *root); + void append (std::unique_ptr<XMLElementNode> &&node); + void append (std::unique_ptr<XMLNode> &&node); + void setRootNode (std::unique_ptr<XMLElementNode> &&root); const XMLElementNode* getRootElement () const {return _rootElement.get();} std::ostream& write (std::ostream &os) const; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.cpp index 32607250f11..bfdbbe476ea 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.cpp @@ -2,7 +2,7 @@ ** XMLNode.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,10 +18,10 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <map> #include <list> #include <sstream> +#include "utility.hpp" #include "XMLNode.hpp" #include "XMLString.hpp" @@ -40,6 +40,12 @@ XMLElementNode::XMLElementNode (const XMLElementNode &node) } +XMLElementNode::XMLElementNode (XMLElementNode &&node) + : _name(std::move(node._name)), _attributes(std::move(node._attributes)), _children(std::move(node._children)) +{ +} + + void XMLElementNode::clear () { _attributes.clear(); _children.clear(); @@ -47,50 +53,62 @@ void XMLElementNode::clear () { void XMLElementNode::addAttribute (const string &name, const string &value) { - _attributes[name] = value; + _attributes.emplace(name, value); } void XMLElementNode::addAttribute (const string &name, double value) { - _attributes[name] = XMLString(value); + _attributes.emplace(name, XMLString(value)); } -void XMLElementNode::append (XMLNode *child) { +/** Appends a child node to this element. The element also takes the ownership of the child. + * @param[in] child node to be appended + * @return raw pointer to the appended child node */ +XMLNode* XMLElementNode::append (unique_ptr<XMLNode> &&child) { if (!child) - return; - XMLTextNode *textNode1 = dynamic_cast<XMLTextNode*>(child); + return nullptr; + XMLTextNode *textNode1 = dynamic_cast<XMLTextNode*>(child.get()); if (!textNode1 || _children.empty()) - _children.emplace_back(unique_ptr<XMLNode>(child)); + _children.emplace_back(std::move(child)); else { if (XMLTextNode *textNode2 = dynamic_cast<XMLTextNode*>(_children.back().get())) - textNode2->append(textNode1); // merge two consecutive text nodes + textNode2->append(util::static_unique_ptr_cast<XMLTextNode>(std::move(child))); // merge two consecutive text nodes else - _children.emplace_back(unique_ptr<XMLNode>(child)); + _children.emplace_back(std::move(child)); } + return _children.back().get(); } -void XMLElementNode::append (const string &str) { +/** Appends a string to this element. If the last child is a text node, the string is + * appended there, otherwise a new text node is created. + * @param[in] str string to be appended + * @return raw pointer to the text node the string was appended to */ +XMLNode* XMLElementNode::append (const string &str) { if (_children.empty() || !dynamic_cast<XMLTextNode*>(_children.back().get())) - _children.emplace_back(unique_ptr<XMLNode>(new XMLTextNode(str))); + _children.emplace_back(util::make_unique<XMLTextNode>(str)); else static_cast<XMLTextNode*>(_children.back().get())->append(str); + return _children.back().get(); } -void XMLElementNode::prepend (XMLNode *child) { +/** Prepends a child node to this element. The element also takes the ownership of the child. + * @param[in] child node to be prepended + * @return raw pointer to the prepended child node */ +XMLNode* XMLElementNode::prepend (unique_ptr<XMLNode> &&child) { if (!child) - return; - XMLTextNode *textNode1 = dynamic_cast<XMLTextNode*>(child); - unique_ptr<XMLNode> child_uptr(child); + return nullptr; + XMLTextNode *textNode1 = dynamic_cast<XMLTextNode*>(child.get()); if (textNode1 && !_children.empty()) { if (XMLTextNode *textNode2 = dynamic_cast<XMLTextNode*>(_children.front().get())) { - textNode2->prepend(textNode1); // merge two consecutive text nodes - return; + textNode2->prepend(util::static_unique_ptr_cast<XMLTextNode>(std::move(child))); // merge two consecutive text nodes + return textNode2; } } - _children.emplace_front(std::move(child_uptr)); + _children.emplace_front(std::move(child)); + return _children.front().get(); } @@ -100,13 +118,13 @@ void XMLElementNode::prepend (XMLNode *child) { * @param[in] child node to be inserted * @param[in] sibling following sibling of 'child' * @return true on success */ -bool XMLElementNode::insertBefore (XMLNode *child, XMLNode *sibling) { - ChildList::iterator it = _children.begin(); +bool XMLElementNode::insertBefore (unique_ptr<XMLNode> &&child, XMLNode *sibling) { + auto it = _children.begin(); while (it != _children.end() && it->get() != sibling) ++it; if (it == _children.end()) return false; - _children.emplace(it, unique_ptr<XMLNode>(child)); + _children.emplace(it, std::move(child)); return true; } @@ -117,13 +135,13 @@ bool XMLElementNode::insertBefore (XMLNode *child, XMLNode *sibling) { * @param[in] child node to be inserted * @param[in] sibling preceding sibling of 'child' * @return true on success */ -bool XMLElementNode::insertAfter (XMLNode *child, XMLNode *sibling) { - ChildList::iterator it = _children.begin(); +bool XMLElementNode::insertAfter (unique_ptr<XMLNode> &&child, XMLNode *sibling) { + auto it = _children.begin(); while (it != _children.end() && it->get() != sibling) ++it; if (it == _children.end()) return false; - _children.emplace(++it, unique_ptr<XMLNode>(child)); + _children.emplace(++it, std::move(child)); return true; } @@ -170,7 +188,7 @@ XMLElementNode* XMLElementNode::getFirstDescendant (const char *name, const char return descendant; } } - return 0; + return nullptr; } @@ -209,35 +227,33 @@ bool XMLElementNode::hasAttribute (const string &name) const { /** Returns the value of an attribute. * @param[in] name name of attribute * @return attribute value or 0 if attribute doesn't exist */ -const char* XMLElementNode::getAttributeValue(const std::string& name) const { - AttribMap::const_iterator it = _attributes.find(name); +const char* XMLElementNode::getAttributeValue (const std::string& name) const { + auto it = _attributes.find(name); if (it != _attributes.end()) return it->second.c_str(); - return 0; + return nullptr; } ////////////////////// -void XMLTextNode::append (XMLNode *node) { +void XMLTextNode::append (unique_ptr<XMLNode> &&node) { if (!node) return; - if (XMLTextNode *tn = dynamic_cast<XMLTextNode*>(node)) - append(tn); + if (dynamic_cast<XMLTextNode*>(node.get())) + append(util::static_unique_ptr_cast<XMLTextNode>(std::move(node))); else { // append text representation of the node ostringstream oss; node->write(oss); append(XMLString(oss.str())); - delete node; } } -void XMLTextNode::append (XMLTextNode *node) { +void XMLTextNode::append (unique_ptr<XMLTextNode> &&node) { if (node) _text += node->_text; - delete node; } @@ -246,16 +262,12 @@ void XMLTextNode::append (const string &str) { } -void XMLTextNode::prepend (XMLNode *node) { - if (XMLTextNode *tn = dynamic_cast<XMLTextNode*>(node)) - _text = tn->_text + _text; - else - delete node; +void XMLTextNode::prepend (unique_ptr<XMLNode> &&node) { + if (XMLTextNode *textNode = dynamic_cast<XMLTextNode*>(node.get())) + _text = textNode->_text + _text; } - -////////////////////// - +///////////////////////////////////////////////////////////////////// ostream& XMLCDataNode::write (ostream &os) const { if (!_data.empty()) @@ -269,4 +281,4 @@ void XMLCDataNode::append (string &&str) { _data = move(str); else _data += str; -}
\ No newline at end of file +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.hpp index 698b4b43205..faaab0b5322 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.hpp @@ -2,7 +2,7 @@ ** XMLNode.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -27,37 +27,37 @@ #include <ostream> #include <string> #include <vector> +#include "utility.hpp" -class XMLNode -{ +class XMLNode { public: virtual ~XMLNode () =default; - virtual XMLNode* clone () const =0; + virtual std::unique_ptr<XMLNode> clone () const =0; virtual void clear () =0; virtual std::ostream& write (std::ostream &os) const =0; }; -class XMLElementNode : public XMLNode -{ +class XMLElementNode : public XMLNode { public: - typedef std::map<std::string,std::string> AttribMap; - typedef std::list<std::unique_ptr<XMLNode>> ChildList; + using AttribMap = std::map<std::string,std::string>; + using ChildList = std::list<std::unique_ptr<XMLNode>>; public: XMLElementNode (const std::string &name); XMLElementNode (const XMLElementNode &node); - XMLElementNode* clone () const override {return new XMLElementNode(*this);} + XMLElementNode (XMLElementNode &&node); + std::unique_ptr<XMLNode> clone () const override {return util::make_unique<XMLElementNode>(*this);} void clear () override; void addAttribute (const std::string &name, const std::string &value); void addAttribute (const std::string &name, double value); - void append (XMLNode *child); - void append (const std::string &str); - void prepend (XMLNode *child); + XMLNode* append (std::unique_ptr<XMLNode> &&child); + XMLNode* append (const std::string &str); + XMLNode* prepend (std::unique_ptr<XMLNode> &&child); void remove (const XMLNode *child); - bool insertAfter (XMLNode *child, XMLNode *sibling); - bool insertBefore (XMLNode *child, XMLNode *sibling); + bool insertAfter (std::unique_ptr<XMLNode> &&child, XMLNode *sibling); + bool insertBefore (std::unique_ptr<XMLNode> &&child, XMLNode *sibling); bool hasAttribute (const std::string &name) const; const char* getAttributeValue (const std::string &name) const; bool getDescendants (const char *name, const char *attrName, std::vector<XMLElementNode*> &descendants) const; @@ -74,17 +74,16 @@ class XMLElementNode : public XMLNode }; -class XMLTextNode : public XMLNode -{ +class XMLTextNode : public XMLNode { public: XMLTextNode (const std::string &str) : _text(str) {} XMLTextNode (std::string &&str) : _text(std::move(str)) {} - XMLTextNode* clone () const override {return new XMLTextNode(*this);} + std::unique_ptr<XMLNode> clone () const override {return util::make_unique<XMLTextNode>(*this);} void clear () override {_text.clear();} - void append (XMLNode *node); - void append (XMLTextNode *node); + void append (std::unique_ptr<XMLNode> &&node); + void append (std::unique_ptr<XMLTextNode> &&node); void append (const std::string &str); - void prepend (XMLNode *child); + void prepend (std::unique_ptr<XMLNode> &&node); std::ostream& write (std::ostream &os) const override {return os << _text;} const std::string& getText () const {return _text;} @@ -93,12 +92,11 @@ class XMLTextNode : public XMLNode }; -class XMLCommentNode : public XMLNode -{ +class XMLCommentNode : public XMLNode { public: XMLCommentNode (const std::string &str) : _text(str) {} XMLCommentNode (std::string &&str) : _text(std::move(str)) {} - XMLCommentNode* clone () const override {return new XMLCommentNode(*this);} + std::unique_ptr<XMLNode> clone () const override {return util::make_unique<XMLCommentNode>(*this);} void clear () override {_text.clear();} std::ostream& write (std::ostream &os) const override {return os << "<!--" << _text << "-->";} @@ -107,13 +105,12 @@ class XMLCommentNode : public XMLNode }; -class XMLCDataNode : public XMLNode -{ +class XMLCDataNode : public XMLNode { public: - XMLCDataNode () {} + XMLCDataNode () =default; XMLCDataNode (const std::string &d) : _data(d) {} XMLCDataNode (std::string &&d) : _data(std::move(d)) {} - XMLCDataNode* clone () const override {return new XMLCDataNode(*this);} + std::unique_ptr<XMLNode> clone () const override {return util::make_unique<XMLCDataNode>(*this);} void clear () override {_data.clear();} void append (std::string &&str); std::ostream& write (std::ostream &os) const override; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.cpp index e23df4b7656..9c52064f1f1 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.cpp @@ -2,7 +2,7 @@ ** XMLString.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,11 +18,8 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ -#include <config.h> #include <cmath> #include <cstdlib> -#include <iomanip> -#include <sstream> #include "Unicode.hpp" #include "XMLString.hpp" @@ -47,7 +44,7 @@ XMLString::XMLString (const string &str, bool plain) { assign(str); else { for (char c : str) - *this += translate(c); + append(translate(c)); } } @@ -58,20 +55,15 @@ XMLString::XMLString (const char *str, bool plain) { assign(str); else { while (*str) - *this += translate(*str++); + append(translate(*str++)); } } } -XMLString::XMLString (int n, bool cast) { - if (cast) { - stringstream ss; - ss << n; - ss >> *this; - } - else - *this += translate(n); +XMLString::XMLString (int n, bool cast) + : string(cast ? to_string(n) : translate(n)) +{ } @@ -90,14 +82,21 @@ static inline double round (double x, int n) { XMLString::XMLString (double x) { - stringstream ss; if (DECIMAL_PLACES > 0) { // don't use fixed and setprecision() manipulators here to avoid // banker's rounding applied in some STL implementations x = round(x, DECIMAL_PLACES); } - if (std::abs(x) < 1e-7) + if (std::abs(x) < 1e-6) x = 0; - ss << x; - ss >> *this; + assign(to_string(x)); + size_t pos = find('.'); + if (pos != string::npos) { + pos = find_last_not_of('0'); + if (pos != string::npos) { + erase(pos+1); // remove trailing zeros + if (at(length()-1) == '.') + pop_back(); // remove trailing dot + } + } } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.hpp index 905d5413952..17323c3f99f 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.hpp @@ -2,7 +2,7 @@ ** XMLString.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/ZLibOutputStream.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/ZLibOutputStream.hpp index 3f321625f3e..4a0b2fa52e2 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/ZLibOutputStream.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/ZLibOutputStream.hpp @@ -2,7 +2,7 @@ ** ZLibOutputStream.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/dvisvgm.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/dvisvgm.cpp index a15f9f27845..2a8e6d60425 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/dvisvgm.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/dvisvgm.cpp @@ -2,7 +2,7 @@ ** dvisvgm.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -18,9 +18,11 @@ ** along with this program; if not, see <http://www.gnu.org/licenses/>. ** *************************************************************************/ +#include <config.h> #include <clipper.hpp> #include <fstream> #include <iostream> +#include <list> #include <potracelib.h> #include <sstream> #include <xxhash.h> @@ -34,7 +36,7 @@ #include "Font.hpp" #include "FontEngine.hpp" #include "Ghostscript.hpp" -#include "HtmlSpecialHandler.hpp" +#include "HyperlinkManager.hpp" #include "Message.hpp" #include "PageSize.hpp" #include "PSInterpreter.hpp" @@ -42,10 +44,14 @@ #include "SignalHandler.hpp" #include "SVGOutput.hpp" #include "System.hpp" +#include "utility.hpp" #include "version.hpp" #ifndef DISABLE_WOFF +#include <brotli/encode.h> +#include <woff2/version.h> #include "ffwrapper.h" +#include "TTFAutohint.hpp" #endif using namespace std; @@ -136,9 +142,8 @@ static bool set_temp_dir (const CommandLine &args) { static bool check_bbox (const string &bboxstr) { - const char *formats[] = {"none", "min", "preview", "papersize", "dvi", 0}; - for (const char **p=formats; *p; ++p) - if (bboxstr == *p) + for (const char *fmt : {"none", "min", "preview", "papersize", "dvi"}) + if (bboxstr == fmt) return true; if (isalpha(bboxstr[0])) { try { @@ -163,51 +168,122 @@ static bool check_bbox (const string &bboxstr) { } +// Helper class to generate a list of version information of the used libraries. +class VersionInfo { + public: + void add (const string &name, const string &version, bool ignoreEmpty=false) { + if (!version.empty() || !ignoreEmpty) + append(name, util::trim(version)); + } + + void add (const string &name, const char *version, bool ignoreEmpty=false) { + if (version && *version) + append(name, util::trim(version)); + else if (!ignoreEmpty) + append(name, ""); + } + + void add (const string &name, const vector<int> &versionComponents) { + string version; + for (auto it=versionComponents.begin(); it != versionComponents.end(); ++it) { + if (it != versionComponents.begin()) + version += '.'; + version += to_string(*it); + } + append(name, version); + } + + /** Adds a version number given as a single unsigned integer, and optionally + * extracts its components, e.g. 0x00010203 => "1.2.3" (3 components separated + * by multiples of 256). + * @param[in] name library name + * @param[in] version version number + * @param[in] compcount number of components the version consists of + * @param[in] factor factor used to separate the components */ + void add (const string &name, uint32_t version, int compcount=1, uint32_t factor=0xffffffff) { + string str; + while (compcount-- > 0) { + if (!str.empty()) + str.insert(0, "."); + str.insert(0, to_string(version % factor)); + version /= factor; + } + append(name, str); + } + + /** Writes the version information to the given output stream. */ + void write (ostream &os) { + using Entry = pair<string,string>; + _versionPairs.sort([](const Entry &e1, const Entry &e2) { + return util::tolower(e1.first) < util::tolower(e2.first); + }); + size_t maxNameLength=0; + for (const Entry &versionPair : _versionPairs) + maxNameLength = max(maxNameLength, versionPair.first.length()); + for (const Entry &versionPair : _versionPairs) { + string name = versionPair.first+":"; + os << left << setw(maxNameLength+2) << name; + os << (versionPair.second.empty() ? "unknown" : versionPair.second) << '\n'; + } + } + + protected: + void append (const string &name, const string &version) { + _versionPairs.emplace_back(pair<string,string>(name, version)); + } + + private: + list<pair<string,string>> _versionPairs; +}; + + static void print_version (bool extended) { - ostringstream oss; - oss << "dvisvgm " << PROGRAM_VERSION; + string versionstr = string(PROGRAM_NAME)+" "+PROGRAM_VERSION; +#ifdef TARGET_SYSTEM + if (extended && strlen(TARGET_SYSTEM) > 0) + versionstr += " (" TARGET_SYSTEM ")"; +#endif + cout << versionstr << '\n'; if (extended) { - if (strlen(TARGET_SYSTEM) > 0) - oss << " (" TARGET_SYSTEM ")"; - int len = oss.str().length(); - oss << "\n" << string(len, '-') << "\n" - "clipper: " << CLIPPER_VERSION "\n"; + cout << string(versionstr.length(), '-') << '\n'; + VersionInfo versionInfo; + versionInfo.add("clipper", CLIPPER_VERSION); + versionInfo.add("freetype", FontEngine::version()); + versionInfo.add("potrace", strchr(potrace_version(), ' ')); + versionInfo.add("xxhash", XXH_versionNumber(), 3, 100); + versionInfo.add("zlib", zlibVersion()); + versionInfo.add("Ghostscript", Ghostscript().revision(true), true); #ifndef DISABLE_WOFF - oss << "fontforge: " << ff_version() << '\n'; + versionInfo.add("brotli", BrotliEncoderVersion(), 3, 0x1000); + versionInfo.add("woff2", woff2::version, 3, 0x100); + versionInfo.add("fontforge", ff_version()); + versionInfo.add("ttfautohint", TTFAutohint().version(), true); #endif - oss << "freetype: " << FontEngine::version() << "\n"; - - Ghostscript gs; - string gsver = gs.revision(true); - if (!gsver.empty()) - oss << "Ghostscript: " << gsver + "\n"; - const unsigned xxh_ver = XXH_versionNumber(); - oss << #ifdef MIKTEX - "MiKTeX: " << FileFinder::instance().version() << "\n" + versionInfo.add("MiKTeX", FileFinder::instance().version()); #else - "kpathsea: " << FileFinder::instance().version() << "\n" + versionInfo.add("kpathsea", FileFinder::instance().version()); #endif - "potrace: " << (strchr(potrace_version(), ' ') ? strchr(potrace_version(), ' ')+1 : "unknown") << "\n" - "xxhash: " << xxh_ver/10000 << '.' << (xxh_ver/100)%100 << '.' << xxh_ver%100 << "\n" - "zlib: " << zlibVersion(); + versionInfo.write(cout); } - cout << oss.str() << endl; } static void init_fontmap (const CommandLine &cmdline) { - const char *mapseq = cmdline.fontmapOpt.given() ? cmdline.fontmapOpt.value().c_str() : 0; - bool additional = mapseq && strchr("+-=", *mapseq); - if (!mapseq || additional) { - const char *mapfiles[] = {"ps2pk.map", "dvipdfm.map", "psfonts.map", 0}; + string mapseq; + if (cmdline.fontmapOpt.given()) + mapseq = cmdline.fontmapOpt.value(); + bool additional = !mapseq.empty() && strchr("+-=", mapseq[0]); + if (mapseq.empty() || additional) { bool found = false; - for (const char **p=mapfiles; *p && !found; p++) - found = FontMap::instance().read(*p); + for (string mapfile : {"ps2pk", "pdftex", "dvipdfm", "psfonts"}) { + if ((found = FontMap::instance().read(mapfile+".map"))) + break; + } if (!found) Message::wstream(true) << "none of the default map files could be found\n"; } - if (mapseq) + if (!mapseq.empty()) FontMap::instance().read(mapseq); } @@ -274,7 +350,7 @@ int main (int argc, char *argv[]) { } if (!check_bbox(cmdline.bboxOpt.value())) return 1; - if (!HtmlSpecialHandler::setLinkMarker(cmdline.linkmarkOpt.value())) + if (!HyperlinkManager::setLinkMarker(cmdline.linkmarkOpt.value())) Message::wstream(true) << "invalid argument '"+cmdline.linkmarkOpt.value()+"' supplied for option --linkmark\n"; if (argc > 1 && cmdline.filenames().size() < 1) { Message::estream(true) << "no input file given\n"; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.c b/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.c index e74d4d6e8ec..0238c1ea952 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.c +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.c @@ -2,7 +2,7 @@ ** ffwrapper.c ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -82,20 +82,3 @@ int ff_sfd_to_ttf (const char *sfdname, const char *ttfname, int autohint) { } return ret; } - - -/** Creates a WOFF font from a FontForge SFD file. - * @param[in] sfdname name of SFD file - * @param[in] woffname name of WOFF file - * @param[in] autohint run the autohinter if != 0 */ -int ff_sfd_to_woff (const char *sfdname, const char *woffname, int autohint) { - int ret=0; - SplineFont *sf = SFDRead((char*)sfdname); - if (sf) { - if (autohint) - ff_autohint(sf, false); - ret = WriteWOFFFont((char*)woffname, sf, ff_woff, 0, 0, 0, sf->map, ly_fore); - SplineFontFree(sf); - } - return ret; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.h b/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.h index 763d122e56a..083b19faa9f 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.h @@ -2,7 +2,7 @@ ** ffwrapper.h ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -28,7 +28,6 @@ extern "C" { void ff_init (); int ff_version (); int ff_sfd_to_ttf (const char *sfdname, const char *ttfname, int autohint); -int ff_sfd_to_woff (const char *sfdname, const char *woffname, int autohint); #ifdef __cplusplus } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/macros.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/macros.hpp index 1966d31e17b..a353e516c04 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/macros.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/macros.hpp @@ -2,7 +2,7 @@ ** macros.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/options.dtd b/Build/source/texk/dvisvgm/dvisvgm-src/src/options.dtd index ff016a33990..1b6737a8f5c 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/options.dtd +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/options.dtd @@ -3,7 +3,7 @@ ** options.dtd ** ** ** ** This file is part of dvisvgm - a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/options.xml b/Build/source/texk/dvisvgm/dvisvgm-src/src/options.xml index 20185e10841..39659844307 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/options.xml +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/options.xml @@ -3,7 +3,7 @@ ** options.xml ** ** ** ** This file is part of dvisvgm - a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -25,7 +25,7 @@ <usage>[options] dvifile</usage> <usage>-E [options] epsfile</usage> <description>This program converts DVI files, as created by TeX/LaTeX, to\nthe XML-based scalable vector graphics format SVG.</description> - <copyright>Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de></copyright> + <copyright>Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de></copyright> </program> <options> <section title="Input options"> diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/psdefs.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/psdefs.cpp index eafc838749e..520d831a1d1 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/psdefs.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/psdefs.cpp @@ -2,7 +2,7 @@ ** psdefs.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -34,66 +34,66 @@ const char *PSInterpreter::PSDEFS = "}forall}put @SD/defpr{[exch[/copy @SD]cvxall 5 -1 roll dup 6 1 roll[/get/exec]" "cvxall 6 -1 roll dup 7 1 roll 4 -1 roll dup 5 1 roll dup length string cvs/prc" "md cvx]cvx def}put @SD/querypos{{currentpoint}stopped{$error/newerror false pu" -"t}{2(querypos)prcmd}ifelse}put @SD/applyscalevals{1 0 transform 0 0 transform " -"3 -1 roll sub dup mul 3 1 roll sub dup mul add sqrt 0 1 transform 0 0 transfor" -"m 3 -1 roll sub dup mul 3 1 roll sub dup mul add sqrt 1 0 transform dup mul ex" -"ch dup dup mul 3 -1 roll add sqrt div 3(applyscalevals)prcmd}put @SD/prpath{{2" -"(moveto)prcmd}{2(lineto)prcmd}{6(curveto)prcmd}{0(closepath)prcmd}pathforall}p" -"ut @SD/charpath{/@dodraw false store :charpath/@dodraw true store}put @SD/show" -"{@dodraw{dup :gsave currentpoint 2{50 mul exch}repeat :newpath moveto 50 50/sc" -"ale sysexec true charpath eofill :grestore/@dodraw false store :show/@dodraw t" -"rue store}{pop}ifelse}put @SD/awidthshow{{1 string dup 0 5 index put :gsave sh" -"ow :grestore pop 0 rmoveto 3 index eq{4 index 4 index rmoveto}if 1 index 1 ind" -"ex rmoveto}exch cshow 5{pop}repeat}put @SD/widthshow{0 0 3 -1 roll pstack awid" -"thshow}put @SD/ashow{0 0 0 6 3 roll awidthshow}put @SD/newpath{:newpath 0 1(ne" -"wpath)prcmd}put @SD/stroke{@dodraw{1 1(newpath)prcmd prpath 0(stroke)prcmd :ne" -"wpath}{:stroke}ifelse}put @SD/fill{@dodraw{1 1(newpath)prcmd prpath 0(fill)prc" -"md :newpath}{:fill}ifelse}put @SD/eofill{@dodraw{1 1(newpath)prcmd prpath 0(eo" -"fill)prcmd :newpath}{:eofill}ifelse}put @SD/clip{:clip 0 1(newpath)prcmd prpat" -"h 0(clip)prcmd}put @SD/eoclip{:eoclip 1 1(newpath)prcmd prpath 0(eoclip)prcmd}" -"put @SD/shfill{begin currentdict/ShadingType known currentdict/ColorSpace know" -"n and currentdict/DataSource known and currentdict/Function known not and Shad" -"ingType 4 ge and DataSource type/arraytype eq and{<</DeviceGray 1/DeviceRGB 3/" -"DeviceCMYK 4/bgknown currentdict/Background known/bbknown currentdict/BBox kno" -"wn>>begin currentdict ColorSpace known{ShadingType ColorSpace load bgknown{1 B" -"ackground aload pop}{0}ifelse bbknown{1 BBox aload pop}{0}ifelse ShadingType 5" -" eq{VerticesPerRow}if DataSource aload length 4 add bgknown{ColorSpace load ad" -"d}if bbknown{4 add}if ShadingType 5 eq{1 add}if(shfill)prcmd}if end}if end}put" -"/@rect{4 -2 roll moveto exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto c" -"losepath}bind def/@rectcc{4 -2 roll moveto 2 copy 0 lt exch 0 lt xor{dup 0 exc" -"h rlineto exch 0 rlineto neg 0 exch rlineto}{exch dup 0 rlineto exch 0 exch rl" -"ineto neg 0 rlineto}ifelse closepath}bind def @SD/rectclip{:newpath dup type/a" -"rraytype eq{aload length 4 idiv{@rectcc}repeat}{@rectcc}ifelse clip :newpath}p" -"ut @SD/rectfill{gsave :newpath dup type/arraytype eq{aload length 4 idiv{@rect" -"cc}repeat}{@rectcc}ifelse fill grestore}put @SD/rectstroke{gsave :newpath dup " -"type/arraytype eq{aload length 4 idiv{@rect}repeat}{@rect}ifelse stroke gresto" -"re}put false setglobal @SD readonly pop/initclip 0 defpr/clippath 0 defpr/syse" -"xec{@SD exch get exec}def/adddot{dup length 1 add string dup 0 46 put dup 3 -1" -" roll 1 exch putinterval}def/setlinewidth{dup/setlinewidth sysexec applyscalev" -"als 1(setlinewidth)prcmd}def/setlinecap 1 defpr/setlinejoin 1 defpr/setmiterli" -"mit 1 defpr/setdash{mark 3 1 roll 2 copy/setdash sysexec applyscalevals exch a" -"load length 1 add -1 roll counttomark(setdash)prcmd pop}def/setgstate{currentl" -"inewidth 1(setlinewidth)prcmd currentlinecap 1(setlinecap)prcmd currentlinejoi" -"n 1(setlinejoin)prcmd currentmiterlimit 1(setmiterlimit)prcmd currentrgbcolor " -"3(setrgbcolor)prcmd 6 array currentmatrix aload pop 6(setmatrix)prcmd currentd" -"ash mark 3 1 roll exch aload length 1 add -1 roll counttomark(setdash)prcmd po" -"p}def/save{@UD begin/@saveID vmstatus pop pop def end :save @saveID 1(save)prc" -"md}def/restore{:restore setgstate @UD/@saveID known{@UD begin @saveID end}{0}i" -"felse 1(restore)prcmd}def/gsave 0 defpr/grestore{:grestore setgstate 0(grestor" -"e)prcmd}def/grestoreall{:grestoreall setstate 0(grestoreall)prcmd}def/rotate{d" -"up type/arraytype ne{dup 1(rotate)prcmd}if/rotate sysexec}def/scale{dup type/a" -"rraytype ne{2 copy 2(scale)prcmd}if/scale sysexec}def/translate{dup type/array" -"type ne{2 copy 2(translate)prcmd}if/translate sysexec}def/setmatrix{dup/setmat" -"rix sysexec aload pop 6(setmatrix)prcmd}def/initmatrix{matrix setmatrix}def/co" -"ncat{matrix currentmatrix matrix concatmatrix setmatrix}def/makepattern{gsave<" -"</mx 3 -1 roll>>begin dup/XUID[1000000 @patcnt]put mx/makepattern sysexec dup " -"dup begin PatternType @patcnt BBox aload pop XStep YStep PaintType mx aload po" -"p 15(makepattern)prcmd :newpath matrix setmatrix PaintProc 0 1(makepattern)prc" -"md end/@patcnt @patcnt 1 add store end grestore}def/setpattern{begin PatternTy" -"pe 1 eq{PaintType 1 eq{XUID aload pop exch pop 1}{:gsave[currentcolorspace alo" -"ad length -1 roll pop]setcolorspace/setcolor sysexec XUID aload pop exch pop c" -"urrentrgbcolor :grestore 4}ifelse(setpattern)prcmd}{/setpattern sysexec}ifelse" -" end}def/setcolor{dup type/dicttype eq{setpattern}{/setcolor sysexec/currentrg" -"bcolor sysexec setrgbcolor}ifelse}def/setgray 1 defpr/setcmykcolor 4 defpr/set" -"hsbcolor 3 defpr/setrgbcolor 3 defpr/.setopacityalpha{dup/.setopacityalpha sys" -"exec 1(setopacityalpha)prcmd}def "; +"t}{2(querypos)prcmd}ifelse}put @SD/applyscalevals{1 0 dtransform exch dup mul " +"exch dup mul add sqrt 0 1 dtransform exch dup mul exch dup mul add sqrt 1 0 dt" +"ransform dup mul exch dup dup mul 3 -1 roll add dup 0 eq{pop}{sqrt div}ifelse " +"3(applyscalevals)prcmd}put @SD/prpath{{2(moveto)prcmd}{2(lineto)prcmd}{6(curve" +"to)prcmd}{0(closepath)prcmd}pathforall}put @SD/charpath{/@dodraw false store :" +"charpath/@dodraw true store}put @SD/show{@dodraw{dup :gsave currentpoint 2{50 " +"mul exch}repeat :newpath moveto 50 50/scale sysexec true charpath eofill :gres" +"tore/@dodraw false store :show/@dodraw true store}{pop}ifelse}put @SD/awidthsh" +"ow{{1 string dup 0 5 index put :gsave show :grestore pop 0 rmoveto 3 index eq{" +"4 index 4 index rmoveto}if 1 index 1 index rmoveto}exch cshow 5{pop}repeat}put" +" @SD/widthshow{0 0 3 -1 roll pstack awidthshow}put @SD/ashow{0 0 0 6 3 roll aw" +"idthshow}put @SD/newpath{:newpath 0 1(newpath)prcmd}put @SD/stroke{@dodraw{1 1" +"(newpath)prcmd prpath 0(stroke)prcmd :newpath}{:stroke}ifelse}put @SD/fill{@do" +"draw{1 1(newpath)prcmd prpath 0(fill)prcmd :newpath}{:fill}ifelse}put @SD/eofi" +"ll{@dodraw{1 1(newpath)prcmd prpath 0(eofill)prcmd :newpath}{:eofill}ifelse}pu" +"t @SD/clip{:clip 0 1(newpath)prcmd prpath 0(clip)prcmd}put @SD/eoclip{:eoclip " +"1 1(newpath)prcmd prpath 0(eoclip)prcmd}put @SD/shfill{begin currentdict/Shadi" +"ngType known currentdict/ColorSpace known and currentdict/DataSource known and" +" currentdict/Function known not and ShadingType 4 ge and DataSource type/array" +"type eq and{<</DeviceGray 1/DeviceRGB 3/DeviceCMYK 4/bgknown currentdict/Backg" +"round known/bbknown currentdict/BBox known>>begin currentdict ColorSpace known" +"{ShadingType ColorSpace load bgknown{1 Background aload pop}{0}ifelse bbknown{" +"1 BBox aload pop}{0}ifelse ShadingType 5 eq{VerticesPerRow}if DataSource aload" +" length 4 add bgknown{ColorSpace load add}if bbknown{4 add}if ShadingType 5 eq" +"{1 add}if(shfill)prcmd}if end}if end}put/@rect{4 -2 roll moveto exch dup 0 rli" +"neto exch 0 exch rlineto neg 0 rlineto closepath}bind def/@rectcc{4 -2 roll mo" +"veto 2 copy 0 lt exch 0 lt xor{dup 0 exch rlineto exch 0 rlineto neg 0 exch rl" +"ineto}{exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto}ifelse closepath}b" +"ind def @SD/rectclip{:newpath dup type/arraytype eq{aload length 4 idiv{@rectc" +"c}repeat}{@rectcc}ifelse clip :newpath}put @SD/rectfill{gsave :newpath dup typ" +"e/arraytype eq{aload length 4 idiv{@rectcc}repeat}{@rectcc}ifelse fill grestor" +"e}put @SD/rectstroke{gsave :newpath dup type/arraytype eq{aload length 4 idiv{" +"@rect}repeat}{@rect}ifelse stroke grestore}put false setglobal @SD readonly po" +"p/initclip 0 defpr/clippath 0 defpr/sysexec{@SD exch get exec}def/adddot{dup l" +"ength 1 add string dup 0 46 put dup 3 -1 roll 1 exch putinterval}def/setlinewi" +"dth{dup/setlinewidth sysexec 1(setlinewidth)prcmd}def/setlinecap 1 defpr/setli" +"nejoin 1 defpr/setmiterlimit 1 defpr/setdash{mark 3 1 roll 2 copy/setdash syse" +"xec exch aload length 1 add -1 roll counttomark(setdash)prcmd pop}def/setgstat" +"e{currentlinewidth 1(setlinewidth)prcmd currentlinecap 1(setlinecap)prcmd curr" +"entlinejoin 1(setlinejoin)prcmd currentmiterlimit 1(setmiterlimit)prcmd curren" +"trgbcolor 3(setrgbcolor)prcmd matrix currentmatrix aload pop 6(setmatrix)prcmd" +" applyscalevals currentdash mark 3 1 roll exch aload length 1 add -1 roll coun" +"ttomark(setdash)prcmd pop}def/save{@UD begin/@saveID vmstatus pop pop def end " +":save @saveID 1(save)prcmd}def/restore{:restore setgstate @UD/@saveID known{@U" +"D begin @saveID end}{0}ifelse 1(restore)prcmd}def/gsave 0 defpr/grestore{:gres" +"tore setgstate 0(grestore)prcmd}def/grestoreall{:grestoreall setstate 0(gresto" +"reall)prcmd}def/rotate{dup type/arraytype ne{dup 1(rotate)prcmd}if/rotate syse" +"xec applyscalevals}def/scale{dup type/arraytype ne{2 copy 2(scale)prcmd}if/sca" +"le sysexec applyscalevals}def/translate{dup type/arraytype ne{2 copy 2(transla" +"te)prcmd}if/translate sysexec}def/setmatrix{dup/setmatrix sysexec aload pop 6(" +"setmatrix)prcmd applyscalevals}def/initmatrix{matrix setmatrix}def/concat{matr" +"ix currentmatrix matrix concatmatrix setmatrix}def/makepattern{gsave<</mx 3 -1" +" roll>>begin dup/XUID[1000000 @patcnt]put mx/makepattern sysexec dup dup begin" +" PatternType @patcnt BBox aload pop XStep YStep PaintType mx aload pop 15(make" +"pattern)prcmd :newpath matrix setmatrix PaintProc 0 1(makepattern)prcmd end/@p" +"atcnt @patcnt 1 add store end grestore}def/setpattern{begin PatternType 1 eq{P" +"aintType 1 eq{XUID aload pop exch pop 1}{:gsave[currentcolorspace aload length" +" -1 roll pop]setcolorspace/setcolor sysexec XUID aload pop exch pop currentrgb" +"color :grestore 4}ifelse(setpattern)prcmd}{/setpattern sysexec}ifelse end}def/" +"setcolor{dup type/dicttype eq{setpattern}{/setcolor sysexec/currentrgbcolor sy" +"sexec setrgbcolor}ifelse}def/setgray 1 defpr/setcmykcolor 4 defpr/sethsbcolor " +"3 defpr/setrgbcolor 3 defpr/.setopacityalpha{dup/.setopacityalpha sysexec 1(se" +"topacityalpha)prcmd}def "; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.cpp index c6b9ea63fe9..9517a6a1013 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.cpp @@ -2,7 +2,7 @@ ** utility.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -20,7 +20,9 @@ #include <algorithm> #include <cctype> +#include <fstream> #include <functional> +#include <iterator> #include "utility.hpp" using namespace std; @@ -56,12 +58,57 @@ string util::normalize_space (string str, const char *ws) { } -string& util::tolower (string &str) { - transform(str.begin(), str.end(), str.begin(), ::tolower); +/** Replaces all occurences of a substring with another string. + * @param[in] str string to search through + * @param[in] find string to look for + * @param[in] repl replacement for "find" + * @return the resulting string */ +string util::replace (string str, const string &find, const string &repl) { + if (!find.empty() && !repl.empty()) { + size_t first = str.find(find); + while (first != string::npos) { + str.replace(first, find.length(), repl); + first = str.find(find, first+repl.length()); + } + } return str; } +/** Splits a string at all occurences of a given separator string and + * returns the substrings. + * @param[in] str string to split + * @param[in] sep separator to look for + * @return the substrings between the separators */ +vector<string> util::split (const string &str, const string &sep) { + vector<string> parts; + if (str.empty() || sep.empty()) + parts.emplace_back(str); + else { + size_t left=0; + while (left <= str.length()) { + size_t right = str.find(sep, left); + if (right == string::npos) { + parts.emplace_back(str.substr(left)); + left = string::npos; + } + else { + parts.emplace_back(str.substr(left, right-left)); + left = right+sep.length(); + } + } + } + return parts; +} + + +string util::tolower (const string &str) { + string ret=str; + transform(str.begin(), str.end(), ret.begin(), ::tolower); + return ret; +} + + /** Returns the integer part of log10 of a given integer \f$n>0\f$. * If \f$n<0\f$, the result is 0. */ int util::ilog10 (int n) { @@ -72,3 +119,21 @@ int util::ilog10 (int n) { } return result; } + + +/** Returns the contents of a file. + * @param[in] fname name/path of the file */ +string util::read_file_contents (const string &fname) { + ifstream ifs(fname.c_str(), ios::binary); + return string(istreambuf_iterator<char>(ifs.rdbuf()), istreambuf_iterator<char>()); +} + + +/** Writes a sequence of bytes given as a string to a file. + * @param[in] name/path of the file to write + * @param[in] start iterator pointing to the begin of the byte sequence + * @param[in] end iterator pointing to the first byte after the byte sequence to write */ +void util::write_file_contents (const string &fname, string::iterator start, string::iterator end) { + ofstream ofs(fname.c_str(), ios::binary); + copy(start, end, ostream_iterator<char>(ofs)); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.hpp index 760dfb634dd..72b4c8d06f6 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.hpp @@ -2,7 +2,7 @@ ** utility.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,14 +21,18 @@ #ifndef UTILITY_HPP #define UTILITY_HPP +#include <iomanip> +#include <memory> +#include <sstream> #include <string> +#include <vector> namespace math { constexpr const double PI = 3.141592653589793238462643383279502884; constexpr const double HALF_PI = 1.570796326794896619231321691639751442; constexpr const double TWO_PI = 6.283185307179586476925286766559005768; - +constexpr const double SQRT2 = 1.414213562373095048801688724209698079; inline double deg2rad (double deg) {return PI*deg/180.0;} @@ -36,11 +40,22 @@ inline double deg2rad (double deg) {return PI*deg/180.0;} namespace util { +template <typename T> +std::string tohex (T val) { + std::ostringstream oss; + oss << std::hex << val; + return oss.str(); +} + std::string trim (const std::string &str, const char *ws=" \t\n\r\f"); std::string normalize_space (std::string str, const char *ws=" \t\n\r\f"); -std::string& tolower (std::string &str); +std::string tolower (const std::string &str); +std::string replace (std::string str, const std::string &find, const std::string &repl); +std::vector<std::string> split (const std::string &str, const std::string &sep); int ilog10 (int n); +std::string read_file_contents (const std::string &fname); +void write_file_contents (const std::string &fname, std::string::iterator start, std::string::iterator end); /** Encodes the bytes in the half-open range [first,last) to Base64 and writes * the result to the range starting at 'dest'. @@ -72,6 +87,21 @@ void base64_copy (InputIterator first, InputIterator last, OutputIterator dest) } } + +/** Simple implementation mimicking std::make_unique introduced in C++14. + * Constructs an object of class T on the heap and returns a unique_ptr<T> to it. + * @param[in] args arguments forwarded to an constructor of T */ +template<typename T, typename... Args> +std::unique_ptr<T> make_unique (Args&&... args) { + return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); +} + + +template<typename T, typename U> +std::unique_ptr<T> static_unique_ptr_cast (std::unique_ptr<U> &&old){ + return std::unique_ptr<T>{static_cast<T*>(old.release())}; +} + } // namespace util #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/version.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/version.hpp index 41f118cfeb5..5feeeb38f68 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/version.hpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/version.hpp @@ -2,7 +2,7 @@ ** version.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,7 +22,7 @@ #define VERSION_HPP constexpr const char *PROGRAM_NAME = "dvisvgm"; -constexpr const char *PROGRAM_VERSION = "2.1.3"; +constexpr const char *PROGRAM_VERSION = "2.3.1"; #endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/version.hpp.in b/Build/source/texk/dvisvgm/dvisvgm-src/src/version.hpp.in index 40477d7360f..bea9f02bf72 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/version.hpp.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/version.hpp.in @@ -2,7 +2,7 @@ ** version.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/windows.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/windows.hpp new file mode 100644 index 00000000000..463b1f7a86c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/windows.hpp @@ -0,0 +1,32 @@ +/************************************************************************* +** windows.hpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#ifndef WINDOWS_HPP +#define WINDOWS_HPP + +// Prevent defining the macros min and max present in windows.h +#ifndef NOMINMAX + #define NOMINMAX +#endif + +#include <windows.h> + +#endif + diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/BezierTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/BezierTest.cpp index 550ea2b94fe..806f5275dd4 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/BezierTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/BezierTest.cpp @@ -2,7 +2,7 @@ ** BezierTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -118,16 +118,16 @@ TEST(BezierTest, approximate) { vector<DPair> points; vector<double> times; Bezier bezier(DPair(0,0), DPair(12,12), DPair(24,6), DPair(30,-5)); - int size = bezier.approximate(0.1, points, ×); + size_t size = bezier.approximate(0.1, points, ×); double t[] = {0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 1}; DPair p[] = { DPair(0,0), DPair(4.488,3.681), DPair(8.906,5.828), DPair(13.183,6.591), DPair(17.25,6.125), DPair(21.035,4.580), DPair(24.468,2.109), DPair(30,-5) }; - EXPECT_EQ(size, sizeof(t)/sizeof(double)); + EXPECT_EQ(size, (size_t)sizeof(t)/sizeof(double)); EXPECT_EQ(points.size(), size); EXPECT_EQ(times.size(), size); - for (int i=0; i < size; i++) { + for (size_t i=0; i < size; i++) { EXPECT_EQ(times[i], t[i]) << "i=" << i; EXPECT_PAIR_NEAR(points[i], p[i]); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/BitmapTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/BitmapTest.cpp index c1d6859fc3d..0d92ac6060b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/BitmapTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/BitmapTest.cpp @@ -2,7 +2,7 @@ ** BitmapTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -66,13 +66,13 @@ TEST(BitmapTest, copy) { vector<uint16_t> target; bitmap.setBits(4, 5, 5); bitmap.copy(target, false); - EXPECT_EQ(target.size(), 8); + EXPECT_EQ(target.size(), 8u); EXPECT_EQ(target[0], 0); EXPECT_EQ(target[1], 124); EXPECT_EQ(target[2], 0); bitmap.copy(target, true); - EXPECT_EQ(target.size(), 8); + EXPECT_EQ(target.size(), 8u); EXPECT_EQ(target[5], 0); EXPECT_EQ(target[6], 124); EXPECT_EQ(target[7], 0); -}
\ No newline at end of file +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/BoundingBoxTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/BoundingBoxTest.cpp index 30d646256cc..1844c7aa3be 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/BoundingBoxTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/BoundingBoxTest.cpp @@ -2,7 +2,7 @@ ** BoundingBoxTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -189,12 +189,21 @@ TEST(BoundingBoxTest, svgViewBox) { TEST(BoundingBoxTest, svgRectElement) { BoundingBox bbox(4, 5, 6, 7); - XMLElementNode *rect = bbox.createSVGRect(); - EXPECT_TRUE(rect != 0); + auto rect = bbox.createSVGRect(); + ASSERT_NE(rect, nullptr); EXPECT_EQ(rect->getName(), "rect"); EXPECT_EQ(string(rect->getAttributeValue("x")), "4"); EXPECT_EQ(string(rect->getAttributeValue("y")), "5"); EXPECT_EQ(string(rect->getAttributeValue("width")), "2"); EXPECT_EQ(string(rect->getAttributeValue("height")), "2"); - delete rect; +} + + +TEST(BoundingBoxTest, extractLengths) { + vector<Length> lengths = BoundingBox::extractLengths(" 1cm,2mm , 3pt 5in"); + ASSERT_EQ(lengths.size(), 4u); + EXPECT_DOUBLE_EQ(lengths[0].cm(), 1); + EXPECT_DOUBLE_EQ(lengths[1].mm(), 2); + EXPECT_DOUBLE_EQ(lengths[2].pt(), 3); + EXPECT_DOUBLE_EQ(lengths[3].in(), 5); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapManagerTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapManagerTest.cpp index e36ed3af0a7..d693ad90c06 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapManagerTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapManagerTest.cpp @@ -1,8 +1,8 @@ /************************************************************************* -** CMapReaderTest.cpp ** +** CMapManagerTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,64 +22,49 @@ #include <fstream> #include "CMap.hpp" #include "CMapManager.hpp" -#include "FileFinder.hpp" #include "Message.hpp" -#ifndef SRCDIR -#define SRCDIR "." -#endif - -class CMapManagerTest : public ::testing::Test -{ - protected: - void SetUp () override { - FileFinder::init("CMapManagerTest", "CMapManagerTest", false); - FileFinder::instance().addLookupDir(SRCDIR"/data"); - } -}; - - -TEST_F(CMapManagerTest, lookup_buildin) { +TEST(CMapManagerTest, lookup_buildin) { CMapManager &manager = CMapManager::instance(); CMap *cmap=0; - EXPECT_TRUE((cmap = manager.lookup("Identity-H")) != 0); + ASSERT_NE((cmap = manager.lookup("Identity-H")), nullptr); EXPECT_STREQ(cmap->name(), "Identity-H"); EXPECT_EQ(cmap->getROString(), "Adobe-Identity"); EXPECT_TRUE(cmap->mapsToCID()); - EXPECT_TRUE((cmap = manager.lookup("Identity-V")) != 0); + ASSERT_NE((cmap = manager.lookup("Identity-V")), nullptr); EXPECT_STREQ(cmap->name(), "Identity-V"); EXPECT_EQ(cmap->getROString(), "Adobe-Identity"); EXPECT_TRUE(cmap->mapsToCID()); - EXPECT_TRUE((cmap = manager.lookup("unicode")) != 0); + ASSERT_NE((cmap = manager.lookup("unicode")), nullptr); EXPECT_STREQ(cmap->name(), "unicode"); EXPECT_EQ(cmap->getROString(), ""); EXPECT_FALSE(cmap->mapsToCID()); - EXPECT_TRUE(cmap->path() == 0); + EXPECT_EQ(cmap->path(), nullptr); } -TEST_F(CMapManagerTest, lookup_file) { +TEST(CMapManagerTest, lookup_file) { CMapManager &manager = CMapManager::instance(); CMap *cmap = manager.lookup("ot1.cmap"); - EXPECT_TRUE(cmap != 0); + ASSERT_NE(cmap, nullptr); EXPECT_STREQ(cmap->name(), "ot1.cmap"); EXPECT_EQ(cmap->getROString(), ""); EXPECT_FALSE(cmap->mapsToCID()); - EXPECT_EQ(cmap->bfcode(0x00), 0x0393); - EXPECT_EQ(cmap->bfcode(0x01), 0x0394); - EXPECT_EQ(cmap->bfcode(0x02), 0x0398); - EXPECT_EQ(cmap->bfcode(0x7c), 0x2014); - EXPECT_EQ(cmap->bfcode(0x7d), 0x02dd); - EXPECT_EQ(cmap->bfcode(0x7f), 0x00a8); - EXPECT_EQ(cmap->bfcode(0x80), 0); + EXPECT_EQ(cmap->bfcode(0x00), 0x0393u); + EXPECT_EQ(cmap->bfcode(0x01), 0x0394u); + EXPECT_EQ(cmap->bfcode(0x02), 0x0398u); + EXPECT_EQ(cmap->bfcode(0x7c), 0x2014u); + EXPECT_EQ(cmap->bfcode(0x7d), 0x02ddu); + EXPECT_EQ(cmap->bfcode(0x7f), 0x00a8u); + EXPECT_EQ(cmap->bfcode(0x80), 0u); } -TEST_F(CMapManagerTest, lookup_fail) { +TEST(CMapManagerTest, lookup_fail) { Message::LEVEL = 0; // avoid warning messages CMapManager &manager = CMapManager::instance(); - EXPECT_TRUE(manager.lookup("does-not-exists") == 0); + EXPECT_EQ(manager.lookup("does-not-exists"), nullptr); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapReaderTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapReaderTest.cpp index 720253e83b2..e3df090a05e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapReaderTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapReaderTest.cpp @@ -1,8 +1,8 @@ /************************************************************************* -** CMapreaderTest.cpp ** +** CMapReaderTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -32,7 +32,7 @@ class CMapReaderTest : public ::testing::Test CMapReaderTest () { istringstream iss(cmapsrc); CMapReader reader; - cmap.reset(reader.read(iss, "Test-Map")); + cmap = reader.read(iss, "Test-Map"); } static const char *cmapsrc; @@ -82,41 +82,41 @@ const char *CMapReaderTest::cmapsrc = TEST_F(CMapReaderTest, rostring) { - ASSERT_TRUE(cmap != 0); + ASSERT_NE(cmap, nullptr); ASSERT_EQ(cmap->getROString(), "Adobe-Adobe_Japan1_UCS2"); ASSERT_FALSE(cmap->vertical()); } TEST_F(CMapReaderTest, bfcode) { - ASSERT_TRUE(cmap != 0); + ASSERT_NE(cmap, nullptr); ASSERT_EQ(cmap->getROString(), "Adobe-Adobe_Japan1_UCS2"); ASSERT_FALSE(cmap->vertical()); - ASSERT_EQ(cmap->bfcode(0), 0xfffd); - ASSERT_EQ(cmap->bfcode(0x3d), 0xa5); - ASSERT_EQ(cmap->bfcode(0x5d), 0xa6); - ASSERT_EQ(cmap->bfcode(0x5e), 0x7d); - ASSERT_EQ(cmap->bfcode(0x5f), 0x303); - ASSERT_EQ(cmap->bfcode(0x60), 0x2019); - ASSERT_EQ(cmap->bfcode(0x5830), 0x8c75); - ASSERT_EQ(cmap->bfcode(0x5831), 0x8c76); - ASSERT_EQ(cmap->bfcode(0x5833), 0x8c86); - ASSERT_EQ(cmap->bfcode(0x5838), 0x8c9c); - ASSERT_EQ(cmap->bfcode(0x5839), 0); + ASSERT_EQ(cmap->bfcode(0), 0xfffdu); + ASSERT_EQ(cmap->bfcode(0x3d), 0xa5u); + ASSERT_EQ(cmap->bfcode(0x5d), 0xa6u); + ASSERT_EQ(cmap->bfcode(0x5e), 0x7du); + ASSERT_EQ(cmap->bfcode(0x5f), 0x303u); + ASSERT_EQ(cmap->bfcode(0x60), 0x2019u); + ASSERT_EQ(cmap->bfcode(0x5830), 0x8c75u); + ASSERT_EQ(cmap->bfcode(0x5831), 0x8c76u); + ASSERT_EQ(cmap->bfcode(0x5833), 0x8c86u); + ASSERT_EQ(cmap->bfcode(0x5838), 0x8c9cu); + ASSERT_EQ(cmap->bfcode(0x5839), 0u); } TEST_F(CMapReaderTest, cid) { const SegmentedCMap *seg_cmap = dynamic_cast<const SegmentedCMap*>(cmap.get()); - ASSERT_TRUE(seg_cmap != 0); - ASSERT_EQ(seg_cmap->numBFRanges(), 9); - ASSERT_EQ(seg_cmap->numCIDRanges(), 2); - ASSERT_EQ(seg_cmap->cid(0x1233), 0); - ASSERT_EQ(seg_cmap->cid(0x1234), 100); - ASSERT_EQ(seg_cmap->cid(0x1240), 112); - ASSERT_EQ(seg_cmap->cid(0x1241), 0); - ASSERT_EQ(seg_cmap->cid(0x12FF), 0); - ASSERT_EQ(seg_cmap->cid(0x1300), 200); - ASSERT_EQ(seg_cmap->cid(0x1301), 201); - ASSERT_EQ(seg_cmap->cid(0x1302), 202); - ASSERT_EQ(seg_cmap->cid(0x1303), 0); + ASSERT_NE(seg_cmap, nullptr); + ASSERT_EQ(seg_cmap->numBFRanges(), 9u); + ASSERT_EQ(seg_cmap->numCIDRanges(), 2u); + ASSERT_EQ(seg_cmap->cid(0x1233), 0u); + ASSERT_EQ(seg_cmap->cid(0x1234), 100u); + ASSERT_EQ(seg_cmap->cid(0x1240), 112u); + ASSERT_EQ(seg_cmap->cid(0x1241), 0u); + ASSERT_EQ(seg_cmap->cid(0x12FF), 0u); + ASSERT_EQ(seg_cmap->cid(0x1300), 200u); + ASSERT_EQ(seg_cmap->cid(0x1301), 201u); + ASSERT_EQ(seg_cmap->cid(0x1302), 202u); + ASSERT_EQ(seg_cmap->cid(0x1303), 0u); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapTest.cpp index 969bd835ea1..15cf6db8eea 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapTest.cpp @@ -2,7 +2,7 @@ ** CMapTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,71 +23,77 @@ using namespace std; +#define CHECK_RANGE(name, cmap, cmin, cmax, cid_min) \ + {SCOPED_TRACE(name); check_range(cmap, cmin, cmax, cid_min);} + +#define CHECK_ZERO(name, cmap, cmin, cmax) \ + {SCOPED_TRACE(name); check_zero(cmap, cmin, cmax);} + static void check_range (const SegmentedCMap &cmap, int min, int max, int cid_min) { for (int i=min; i <= max; i++) - ASSERT_EQ(cmap.cid(i), cid_min+(i-min)); + ASSERT_EQ(cmap.cid(i), uint32_t(cid_min+(i-min))); } static void check_zero (const SegmentedCMap &cmap, int min, int max) { for (int i=min; i <= max; i++) - ASSERT_EQ(cmap.cid(i), 0); + ASSERT_EQ(cmap.cid(i), 0u); } TEST(SegmentedCMapTest, disjoint_ranges) { SegmentedCMap cmap("test"); cmap.addCIDRange(5, 8, 1); - ASSERT_EQ(cmap.numCIDRanges(), 1); - check_range(cmap, 5, 8, 1); - check_zero(cmap, 0, 4); - check_zero(cmap, 9, 20); + ASSERT_EQ(cmap.numCIDRanges(), 1u); + CHECK_RANGE("A", cmap, 5, 8, 1); + CHECK_ZERO("B", cmap, 0, 4); + CHECK_ZERO("C", cmap, 9, 20); cmap.addCIDRange(10, 15, 5); - ASSERT_EQ(cmap.numCIDRanges(), 2); - check_range(cmap, 5, 8, 1); - check_range(cmap, 10, 15, 5); - check_zero(cmap, 0, 4); - check_zero(cmap, 9, 9); - check_zero(cmap, 16, 20); + ASSERT_EQ(cmap.numCIDRanges(), 2u); + CHECK_RANGE("D", cmap, 5, 8, 1); + CHECK_RANGE("E", cmap, 10, 15, 5); + CHECK_ZERO("F", cmap, 0, 4); + CHECK_ZERO("G", cmap, 9, 9); + CHECK_ZERO("H", cmap, 16, 20); cmap.addCIDRange(0, 3, 50); - ASSERT_EQ(cmap.numCIDRanges(), 3); - check_range(cmap, 0, 3, 50); - check_range(cmap, 5, 8, 1); - check_range(cmap, 10, 15, 5); - check_zero(cmap, 4, 4); - check_zero(cmap, 9, 9); - check_zero(cmap, 16, 20); + ASSERT_EQ(cmap.numCIDRanges(), 3u); + CHECK_RANGE("I", cmap, 0, 3, 50); + CHECK_RANGE("J", cmap, 5, 8, 1); + CHECK_RANGE("K", cmap, 10, 15, 5); + CHECK_ZERO("L", cmap, 4, 4); + CHECK_ZERO("M", cmap, 9, 9); + CHECK_ZERO("N", cmap, 16, 20); cmap.addCIDRange(16, 20, 1); - ASSERT_EQ(cmap.numCIDRanges(), 4); - check_range(cmap, 5, 8, 1); - check_range(cmap, 10, 15, 5); - check_range(cmap, 0, 3, 50); - check_range(cmap, 16, 20, 1); + ASSERT_EQ(cmap.numCIDRanges(), 4u); + CHECK_RANGE("O", cmap, 5, 8, 1); + CHECK_RANGE("P", cmap, 10, 15, 5); + CHECK_RANGE("Q", cmap, 0, 3, 50); + CHECK_RANGE("R", cmap, 16, 20, 1); } TEST(SegmentedCMapTest, touching_ranges) { SegmentedCMap cmap("test"); cmap.addCIDRange(5, 8, 10); - ASSERT_EQ(cmap.numCIDRanges(), 1); - check_range(cmap, 5, 8, 10); + ASSERT_EQ(cmap.numCIDRanges(), 1u); + CHECK_RANGE("A", cmap, 5, 8, 10); cmap.addCIDRange(9, 15, 14); - ASSERT_EQ(cmap.numCIDRanges(), 1); - check_range(cmap, 5, 15, 10); + ASSERT_EQ(cmap.numCIDRanges(), 1u); + CHECK_RANGE("B", cmap, 5, 15, 10); cmap.addCIDRange(1, 4, 5); - ASSERT_EQ(cmap.numCIDRanges(), 2); - check_range(cmap, 1, 4, 5); - check_range(cmap, 5, 15, 10); + ASSERT_EQ(cmap.numCIDRanges(), 2u); + CHECK_RANGE("C", cmap, 1, 4, 5); + CHECK_RANGE("D", cmap, 5, 15, 10); cmap.addCIDRange(1, 4, 6); - ASSERT_EQ(cmap.numCIDRanges(), 1); - check_range(cmap, 1, 15, 6); + ASSERT_EQ(cmap.numCIDRanges(), 1u); + CHECK_RANGE("E", cmap, 1, 15, 6); } @@ -95,27 +101,27 @@ TEST(SegmentedCMapTest, overlapping_ranges) { SegmentedCMap cmap("test"); cmap.addCIDRange(5, 8, 10); cmap.addCIDRange(7, 15, 12); - ASSERT_EQ(cmap.numCIDRanges(), 1); - check_range(cmap, 5, 15, 10); + ASSERT_EQ(cmap.numCIDRanges(), 1u); + CHECK_RANGE("A", cmap, 5, 15, 10); cmap.addCIDRange(10, 20, 1); - ASSERT_EQ(cmap.numCIDRanges(), 2); - check_range(cmap, 5, 9, 10); - check_range(cmap, 10, 20, 1); + ASSERT_EQ(cmap.numCIDRanges(), 2u); + CHECK_RANGE("B", cmap, 5, 9, 10); + CHECK_RANGE("C", cmap, 10, 20, 1); cmap.addCIDRange(2, 7, 7); - ASSERT_EQ(cmap.numCIDRanges(), 2); - check_range(cmap, 2, 9, 7); - check_range(cmap, 10, 20, 1); + ASSERT_EQ(cmap.numCIDRanges(), 2u); + CHECK_RANGE("D", cmap, 2, 9, 7); + CHECK_RANGE("E", cmap, 10, 20, 1); cmap.addCIDRange(1, 12, 100); - ASSERT_EQ(cmap.numCIDRanges(), 2); - check_range(cmap, 1, 12, 100); - check_range(cmap, 13, 20, 4); + ASSERT_EQ(cmap.numCIDRanges(), 2u); + CHECK_RANGE("F", cmap, 1, 12, 100); + CHECK_RANGE("G", cmap, 13, 20, 4); cmap.addCIDRange(0, 30, 1); - ASSERT_EQ(cmap.numCIDRanges(), 1); - check_range(cmap, 0, 30, 1); + ASSERT_EQ(cmap.numCIDRanges(), 1u); + CHECK_RANGE("H", cmap, 0, 30, 1); } @@ -123,25 +129,25 @@ TEST(SegmentedCMapTest, inner_ranges) { SegmentedCMap cmap("test"); cmap.addCIDRange(5, 20, 1); cmap.addCIDRange(10, 15, 6); - ASSERT_EQ(cmap.numCIDRanges(), 1); - check_range(cmap, 5, 20, 1); + ASSERT_EQ(cmap.numCIDRanges(), 1u); + CHECK_RANGE("A", cmap, 5, 20, 1); cmap.addCIDRange(10, 15, 100); - ASSERT_EQ(cmap.numCIDRanges(), 3); - check_range(cmap, 5, 9, 1); - check_range(cmap, 10, 15, 100); - check_range(cmap, 16, 20, 12); + ASSERT_EQ(cmap.numCIDRanges(), 3u); + CHECK_RANGE("B", cmap, 5, 9, 1); + CHECK_RANGE("C", cmap, 10, 15, 100); + CHECK_RANGE("D", cmap, 16, 20, 12); cmap.addCIDRange(15, 15, 50); - ASSERT_EQ(cmap.numCIDRanges(), 4); - check_range(cmap, 5, 9, 1); - check_range(cmap, 10, 14, 100); - check_range(cmap, 15, 15, 50); - check_range(cmap, 16, 20, 12); + ASSERT_EQ(cmap.numCIDRanges(), 4u); + CHECK_RANGE("E", cmap, 5, 9, 1); + CHECK_RANGE("F", cmap, 10, 14, 100); + CHECK_RANGE("G", cmap, 15, 15, 50); + CHECK_RANGE("H", cmap, 16, 20, 12); cmap.addCIDRange(6, 19, 1); - ASSERT_EQ(cmap.numCIDRanges(), 3); - check_range(cmap, 5, 5, 1); - check_range(cmap, 6, 19, 1); - check_range(cmap, 20, 20, 16); + ASSERT_EQ(cmap.numCIDRanges(), 3u); + CHECK_RANGE("I", cmap, 5, 5, 1); + CHECK_RANGE("J", cmap, 6, 19, 1); + CHECK_RANGE("K", cmap, 20, 20, 16); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/CRC32Test.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/CRC32Test.cpp index c6033344655..f24b977376a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/CRC32Test.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/CRC32Test.cpp @@ -2,7 +2,7 @@ ** CRC32Test.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -26,9 +26,9 @@ using namespace std; TEST(CRC32Test, init) { CRC32 crc; - EXPECT_EQ(crc.get(), 0); + EXPECT_EQ(crc.get(), 0u); crc.reset(); - EXPECT_EQ(crc.get(), 0); + EXPECT_EQ(crc.get(), 0u); } @@ -40,14 +40,14 @@ TEST(CRC32Test, update_numbers) { EXPECT_EQ(crc.get(), comp[i+5]) << "i=" << i; } crc.reset(); - EXPECT_EQ(crc.get(), 0); + EXPECT_EQ(crc.get(), 0u); // add 32 bit values for (int i=0; i < 256; ++i) crc.update(i); EXPECT_EQ(crc.get(), 0xd4c2968b); for (int i=256; i < 10000; ++i) crc.update(i); - EXPECT_EQ(crc.get(), 0x6de9e841); + EXPECT_EQ(crc.get(), 0x6de9e841u); } @@ -58,21 +58,21 @@ TEST(CRC32Test, update_array) { for (int i=0; i < 256; ++i) vals[i] = i; crc.update(vals, 256); - EXPECT_EQ(crc.get(), 0x29058c73); + EXPECT_EQ(crc.get(), 0x29058c73u); } TEST(CRC32Test, update_string) { CRC32 crc; crc.update("dvisvgm converts DVI files to SVG."); - EXPECT_EQ(crc.get(), 0x7c4ef359); + EXPECT_EQ(crc.get(), 0x7c4ef359u); crc.update("It is published under the GNU General Public License."); - EXPECT_EQ(crc.get(), 0xa732081b); + EXPECT_EQ(crc.get(), 0xa732081bu); } TEST(CRC32Test, compute) { - EXPECT_EQ(CRC32::compute("dvisvgm converts DVI files to SVG."), 0x7c4ef359); + EXPECT_EQ(CRC32::compute("dvisvgm converts DVI files to SVG."), 0x7c4ef359u); istringstream iss("It is published under the GNU General Public License."); - EXPECT_EQ(CRC32::compute(iss), 0xbc02ba40); + EXPECT_EQ(CRC32::compute(iss), 0xbc02ba40u); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/CalculatorTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/CalculatorTest.cpp index 59c9666660b..74069e54154 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/CalculatorTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/CalculatorTest.cpp @@ -2,7 +2,7 @@ ** CalculatorTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/ColorSpecialTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/ColorSpecialTest.cpp index 55cf22f750c..e4fad5d231e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/ColorSpecialTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/ColorSpecialTest.cpp @@ -2,7 +2,7 @@ ** ColorSpecialTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -31,7 +31,7 @@ class ColorSpecialTest : public ::testing::Test struct SetColor : EmptySpecialActions { SetColor () : color(0) {} - void setColor (const Color &c) {color = c;} + void setColor (const Color &c) {color = uint32_t(c);} bool equals (uint32_t c) {return color == c;} uint32_t color; }; @@ -42,8 +42,8 @@ class ColorSpecialTest : public ::testing::Test TEST_F(ColorSpecialTest, info) { EXPECT_EQ(handler.name(), "color"); + EXPECT_EQ(handler.prefixes().size(), 1u); EXPECT_STREQ(handler.prefixes()[0], "color"); - EXPECT_EQ(handler.prefixes()[1], nullptr); ASSERT_NE(handler.info(), nullptr); EXPECT_FALSE(string(handler.info()).empty()); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/ColorTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/ColorTest.cpp index cfeae73ccae..f3b2d08a9e8 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/ColorTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/ColorTest.cpp @@ -2,7 +2,7 @@ ** ColorTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -201,14 +201,14 @@ TEST(ColorTest, set) { vector<double> vec{0.1, 0.2, 0.3, 0.4}; VectorIterator<double> it(vec); color.set(Color::ColorSpace::GRAY, it); - EXPECT_EQ(uint32_t(color), 0x1a1a1a); + EXPECT_EQ(uint32_t(color), 0x1a1a1au); it.reset(); color.set(Color::ColorSpace::RGB, it); - EXPECT_EQ(uint32_t(color), 0x1a334d); + EXPECT_EQ(uint32_t(color), 0x1a334du); it.reset(); color.set(Color::ColorSpace::CMYK, it); - EXPECT_EQ(uint32_t(color), 0x8a7a6b); + EXPECT_EQ(uint32_t(color), 0x8a7a6bu); it.reset(); color.set(Color::ColorSpace::LAB, it); - EXPECT_EQ(uint32_t(color), 0x010000); + EXPECT_EQ(uint32_t(color), 0x010000u); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/CommandLineTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/CommandLineTest.cpp index c8203a432cb..3426034463c 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/CommandLineTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/CommandLineTest.cpp @@ -2,7 +2,7 @@ ** CommandLineTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -35,8 +35,8 @@ TEST(CommandLineTest, noarg_short) { EXPECT_TRUE(cmd.helpOpt.given()); EXPECT_FALSE(cmd.listSpecialsOpt.given()); EXPECT_FALSE(cmd.verbosityOpt.given()); - EXPECT_EQ(cmd.verbosityOpt.value(), 7); - EXPECT_EQ(cmd.filenames().size(), 0); + EXPECT_EQ(cmd.verbosityOpt.value(), 7u); + EXPECT_EQ(cmd.filenames().size(), 0u); } @@ -52,9 +52,9 @@ TEST(CommandLineTest, noarg_long) { EXPECT_TRUE(cmd.noFontsOpt.given()); EXPECT_TRUE(cmd.helpOpt.given()); EXPECT_FALSE(cmd.listSpecialsOpt.given()); - EXPECT_EQ(cmd.filenames().size(), 0); + EXPECT_EQ(cmd.filenames().size(), 0u); EXPECT_TRUE(cmd.verbosityOpt.given()); - EXPECT_EQ(cmd.verbosityOpt.value(), 5); + EXPECT_EQ(cmd.verbosityOpt.value(), 5u); } @@ -74,11 +74,11 @@ TEST(CommandLineTest, arg_short) { EXPECT_EQ(cmd.outputOpt.value(), "myfile.xyz"); EXPECT_FALSE(cmd.bboxOpt.given()); EXPECT_EQ(cmd.bboxOpt.value(), "min"); - EXPECT_EQ(cmd.filenames().size(), 0); + EXPECT_EQ(cmd.filenames().size(), 0u); EXPECT_TRUE(cmd.traceAllOpt.given()); EXPECT_TRUE(cmd.traceAllOpt.value()); EXPECT_TRUE(cmd.verbosityOpt.given()); - EXPECT_EQ(cmd.verbosityOpt.value(), 3); + EXPECT_EQ(cmd.verbosityOpt.value(), 3u); } @@ -110,7 +110,7 @@ TEST(CommandLineTest, arg_separated) { EXPECT_EQ(cmd.pageOpt.value(), "5"); EXPECT_TRUE(cmd.rotateOpt.given()); EXPECT_EQ(cmd.rotateOpt.value(), 45); - EXPECT_EQ(cmd.filenames().size(), 1); + EXPECT_EQ(cmd.filenames().size(), 1u); EXPECT_TRUE(cmd.traceAllOpt.given()); EXPECT_FALSE(cmd.traceAllOpt.value()); } @@ -130,7 +130,7 @@ TEST(CommandLineTest, arg_long) { EXPECT_EQ(cmd.outputOpt.value(), "myfile.zyx"); EXPECT_FALSE(cmd.bboxOpt.given()); EXPECT_EQ(cmd.bboxOpt.value(), "min"); - EXPECT_EQ(cmd.filenames().size(), 0); + EXPECT_EQ(cmd.filenames().size(), 0u); EXPECT_TRUE(cmd.traceAllOpt.given()); EXPECT_FALSE(cmd.traceAllOpt.value()); } @@ -163,7 +163,7 @@ TEST(CommandLineTest, abbrev_long) { EXPECT_EQ(cmd.outputOpt.value(), "myfile.zyx"); EXPECT_FALSE(cmd.bboxOpt.given()); EXPECT_EQ(cmd.bboxOpt.value(), "min"); - EXPECT_EQ(cmd.filenames().size(), 0); + EXPECT_EQ(cmd.filenames().size(), 0u); EXPECT_TRUE(cmd.colorOpt.given()); } @@ -185,7 +185,7 @@ TEST(CommandLineTest, error) { EXPECT_FALSE(cmd.pageOpt.given()); EXPECT_EQ(cmd.pageOpt.value(), "1"); EXPECT_FALSE(cmd.rotateOpt.given()); - EXPECT_EQ(cmd.filenames().size(), 0); + EXPECT_EQ(cmd.filenames().size(), 0u); // error on ambiguous abbreviation of long option const char *args3[] = {"progname", "--no"}; @@ -211,7 +211,7 @@ TEST(CommandLineTest, file) { EXPECT_TRUE(cmd.zipOpt.given()); EXPECT_EQ(cmd.zipOpt.value(), 5); EXPECT_TRUE(cmd.listSpecialsOpt.given()); - EXPECT_EQ(cmd.filenames().size(), 2); + EXPECT_EQ(cmd.filenames().size(), 2u); EXPECT_EQ(cmd.filenames()[0], "myfile1"); EXPECT_EQ(cmd.filenames()[1], "myfile2"); } @@ -227,7 +227,7 @@ TEST(CommandLineTest, files_only) { EXPECT_EQ(cmd.pageOpt.value(), "3"); EXPECT_TRUE(cmd.zipOpt.given()); EXPECT_EQ(cmd.zipOpt.value(), 5); - EXPECT_EQ(cmd.filenames().size(), 2); + EXPECT_EQ(cmd.filenames().size(), 2u); EXPECT_EQ(cmd.filenames()[0], "-l"); EXPECT_EQ(cmd.filenames()[1], "myfile"); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/DVIReaderTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/DVIReaderTest.cpp new file mode 100644 index 00000000000..860e233a36d --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/DVIReaderTest.cpp @@ -0,0 +1,585 @@ +/************************************************************************* +** DVIReaderTest.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#include <gtest/gtest.h> +#include <cstdlib> +#include <fstream> +#include <ostream> +#include <string> +#include <vector> +#include "DVIReader.hpp" +#include "Font.hpp" +#include "Message.hpp" +#include "XMLString.hpp" + +using namespace std; + +template <typename T> +void write (ostream &os, T val) { + os << val; +} + +template<> +void write (ostream &os, double val) { + os << XMLString(val); +} + + +template <typename T> +ostream& operator << (ostream &os, const vector<T> &vec) { + os << '{'; + for (size_t i=0; i < vec.size(); i++) { + if (i > 0) + os << ", "; + write(os, vec[i]); + } + os << '}'; + return os; +} + + +class LoggingDVIReader : public DVIReader { + public: + LoggingDVIReader (istream& is, ostream &os) : DVIReader (is), _inVirtualFont(false), _os(os) {} + + void execute () { + clearStream(); + seek(0); + executeAll(); + } + + protected: + void dviPre (uint8_t id, uint32_t numer, uint32_t denom, uint32_t mag, const string &comment) override { + _os << "pre " << int(id) << ", " << numer << ", " << denom << ", " << mag << ", '" << comment << "'"; + } + + void dviPost (uint16_t stdepth, uint16_t pages, uint32_t pw, uint32_t ph, uint32_t mag, uint32_t num, uint32_t den, uint32_t lbopofs) override { + _os << "post " << stdepth << ", " << pages << ", " << pw << ", " << ph << ", " << mag << ", " << num << ", " << den << ", " << lbopofs; + } + + void dviPostPost (uint8_t id, uint32_t postOffset) override { + _os << "postpost " << int(id) << ", " << postOffset; + } + + void dviBop (const vector<int32_t> &c, int32_t prevBopOffset) override { + _os << "bop " << c << ", " << prevBopOffset; + } + + void dviEop () override {_os << "eop";} + void dviSetChar0 (uint32_t c, const Font *font) override {if (!_inVirtualFont) _os << "setchar0 " << c;} + void dviSetChar (uint32_t c, const Font *font) override {if (!_inVirtualFont) _os << "setchar " << c;} + void dviPutChar (uint32_t c, const Font *font) override {if (!_inVirtualFont) _os << "putchar " << c;} + void dviSetRule (double h, double w) override {_os << "setrule " << XMLString(h) << ", " << XMLString(w);} + void dviPutRule (double h, double w) override {_os << "putrule " << XMLString(h) << ", " << XMLString(w);} + void dviNop () override {_os << "nop";} + void dviPush () override {_os << "push";} + void dviPop () override {_os << "pop";} + void dviRight (double dx) override {_os << "right " << XMLString(dx);} + void dviDown (double dy) override {_os << "down " << XMLString(dy);} + void dviX0 () override {_os << "x0";} + void dviY0 () override {_os << "y0";} + void dviW0 () override {_os << "w0";} + void dviZ0 () override {_os << "z0";} + void dviX (double x) override {_os << "x " << XMLString(x);} + void dviY (double y) override {_os << "y " << XMLString(y);} + void dviW (double w) override {_os << "w " << XMLString(w);} + void dviZ (double z) override {_os << "z " << XMLString(z);} + void dviDir (WritingMode dir) override {_os << "dir " << int(dir);} + void dviXXX (const string &str) override {_os << "xxx '" << str << "'";} + + void dviFontDef (uint32_t fontnum, uint32_t checksum, const Font *font) override { + _os << "fontdef " << fontnum << ", " << checksum << ", " << font->name(); + } + + void dviFontNum (uint32_t fontnum, SetFontMode mode, const Font *font) override { + if (!_inVirtualFont) { // exclude logging of virtual fonts + if (mode == DVIReader::SetFontMode::VF_ENTER) + _inVirtualFont = true; + else + _os << "fontnum " << fontnum << ", " << font->name(); + } + else if (mode == DVIReader::SetFontMode::VF_LEAVE) + _inVirtualFont = false; + } + + void dviXPic (uint8_t box, const vector<int32_t> &matrix, int16_t page, const string &path) override { + _os << "xpic " << int(box) << ", " << matrix << ", " << page << ", " << path; + } + + void dviXFontDef (uint32_t fontnum, const NativeFont *font) override { + _os << "xfontdef " << fontnum; + } + + void dviXGlyphArray (vector<double> &dx, vector<double> &dy, vector<uint16_t> &glyphs, const Font &font) override { + _os << "xglypharray " << dx << ", " << dy << ", " << glyphs << ", " << font.name(); + } + + void dviXGlyphString (vector<double> &dx, vector<uint16_t> &glyphs, const Font &font) override { + _os << "xglyphstring " << dx << ", " << glyphs << ", " << font.name(); + } + + void dviXTextAndGlyphs (vector<double> &dx, vector<double> &dy, vector<uint16_t> &chars, vector<uint16_t> &glyphs, const Font &font) override { + _os << "xtxtglyphs " << dx << ", " << dy << ", " << chars << ", " << glyphs << ", " << font.name(); + } + + int executeCommand () override { + int ret = DVIReader::executeCommand(); + if (!_inVirtualFont) { + _os << " [h=" << XMLString(dviState().h) + << ", v=" << XMLString(dviState().v) + << ", x=" << XMLString(dviState().x) + << ", y=" << XMLString(dviState().y) + << ", w=" << XMLString(dviState().w) + << ", z=" << XMLString(dviState().z) + << ", d=" << int(dviState().d) + << "]\n"; + } + return ret; + } + + private: + bool _inVirtualFont; ///< true if reading a char definition of a virtual font + ostream &_os; +}; + + +static void test_dvi_file (const char *fname, const vector<const char*> &expected_lines) { + XMLString::DECIMAL_PLACES = 3; + string dviname = string(SRCDIR)+"/data/"+fname; + ifstream ifs(dviname.c_str(), ios::binary); + ASSERT_TRUE(bool(ifs)); + stringstream ss; + LoggingDVIReader dviReader(ifs, ss); + dviReader.execute(); + ss.seekg(0); + int lineno=0; + char line[512]; + for (const string expected_line : expected_lines) { + ASSERT_FALSE(ss.eof()); + ss.getline(line, 512); + lineno++; + ASSERT_EQ(line, expected_line) << "log line #" << lineno; + } + ss.getline(line, 512); + EXPECT_EQ(*line, '\0'); + EXPECT_TRUE(ss.eof()); +} + + +// test DVI file generated with standard LaTeX (DVI version 2) +TEST(DVIReaderTest, dvi_v2) { + vector<const char*> expected_lines { + "pre 2, 25400000, 473628672, 1000, ' TeX output 2017.11.22:1132' [h=0, v=0, x=0, y=0, w=0, z=0, d=0]", + "bop {1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -1 [h=0, v=0, x=0, y=0, w=0, z=0, d=0]", + "down 630.635 [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "push [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "down -602.74 [h=0, v=27.895, x=0, y=0, w=0, z=0, d=0]", + "push [h=0, v=27.895, x=0, y=0, w=0, z=0, d=0]", + "push [h=0, v=27.895, x=0, y=0, w=0, z=0, d=0]", + "right 61.768 [h=61.768, v=27.895, x=0, y=0, w=0, z=0, d=0]", + "xxx 'color push gray 0' [h=61.768, v=27.895, x=0, y=0, w=0, z=0, d=0]", + "right 343.711 [h=405.479, v=27.895, x=0, y=0, w=0, z=0, d=0]", + "xxx 'color pop' [h=405.479, v=27.895, x=0, y=0, w=0, z=0, d=0]", + "pop [h=0, v=27.895, x=0, y=0, w=0, z=0, d=0]", + "pop [h=0, v=27.895, x=0, y=0, w=0, z=0, d=0]", + "down 572.852 [h=0, v=600.747, x=0, y=0, w=0, z=0, d=0]", + "push [h=0, v=600.747, x=0, y=0, w=0, z=0, d=0]", + "right 61.768 [h=61.768, v=600.747, x=0, y=0, w=0, z=0, d=0]", + "down -547.945 [h=61.768, v=52.802, x=0, y=0, w=0, z=0, d=0]", + "xxx 'color push gray 0' [h=61.768, v=52.802, x=0, y=0, w=0, z=0, d=0]", + "down 9.963 [h=61.768, v=62.765, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=62.765, x=0, y=0, w=0, z=0, d=0]", + "fontdef 7, 1274110073, cmr10 [h=61.768, v=62.765, x=0, y=0, w=0, z=0, d=0]", + "fontnum 7, cmr10 [h=61.768, v=62.765, x=0, y=0, w=0, z=0, d=0]", + "setchar0 67 [h=68.964, v=62.765, x=0, y=0, w=0, z=0, d=0]", + "setchar0 111 [h=73.945, v=62.765, x=0, y=0, w=0, z=0, d=0]", + "setchar0 108 [h=76.712, v=62.765, x=0, y=0, w=0, z=0, d=0]", + "setchar0 111 [h=81.694, v=62.765, x=0, y=0, w=0, z=0, d=0]", + "setchar0 114 [h=85.596, v=62.765, x=0, y=0, w=0, z=0, d=0]", + "w 3.321 [h=88.917, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 116 [h=92.791, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 101 [h=97.219, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 115 [h=101.149, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 116 [h=105.023, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 58 [h=107.79, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "right 4.428 [h=112.218, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "xxx 'color push rgb 1 0 0' [h=112.218, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 114 [h=116.12, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 101 [h=120.548, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 100 [h=126.083, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "xxx 'color pop' [h=126.083, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 44 [h=128.85, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "w0 [h=132.171, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "xxx 'color push rgb 0 0 1' [h=132.171, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 98 [h=137.706, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 108 [h=140.473, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 117 [h=146.008, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 101 [h=150.436, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "xxx 'color pop' [h=150.436, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 44 [h=153.204, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "w0 [h=156.524, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "xxx 'color push cmyk 0 1 0 0' [h=156.524, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 109 [h=164.827, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 97 [h=169.808, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 103 [h=174.789, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 101 [h=179.217, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 110 [h=184.752, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "right -0.277 [h=184.475, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 116 [h=188.35, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 97 [h=193.331, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "xxx 'color pop' [h=193.331, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 46 [h=196.098, v=62.765, x=0, y=0, w=3.321, z=0, d=0]", + "pop [h=61.768, v=62.765, x=0, y=0, w=0, z=0, d=0]", + "down 44.638 [h=61.768, v=107.402, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=107.402, x=0, y=0, w=0, z=0, d=0]", + "setchar0 76 [h=67.995, v=107.402, x=0, y=0, w=0, z=0, d=0]", + "setchar0 105 [h=70.762, v=107.402, x=0, y=0, w=0, z=0, d=0]", + "setchar0 110 [h=76.297, v=107.402, x=0, y=0, w=0, z=0, d=0]", + "setchar0 101 [h=80.725, v=107.402, x=0, y=0, w=0, z=0, d=0]", + "w 3.321 [h=84.046, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 111 [h=89.027, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 102 [h=92.071, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "w0 [h=95.392, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 116 [h=99.267, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 101 [h=103.695, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 120 [h=108.953, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 116 [h=112.827, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "w0 [h=116.148, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 119 [h=123.343, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 105 [h=126.111, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 116 [h=129.985, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 104 [h=135.52, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "w0 [h=138.841, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 97 [h=143.822, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "push [h=143.822, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "push [h=143.822, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "right 6.78 [h=150.602, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "xxx 'ps: gsave currentpoint currentpoint translate 30 neg rotate neg exch neg exch translate' [h=150.602, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "push [h=150.602, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 114 [h=154.504, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 111 [h=159.485, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 116 [h=163.36, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 97 [h=168.341, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 116 [h=172.215, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 101 [h=176.643, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 100 [h=182.178, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "pop [h=150.602, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "right 31.576 [h=182.178, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "xxx 'ps: currentpoint grestore moveto' [h=182.178, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "pop [h=143.822, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "pop [h=143.822, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "right 37.446 [h=181.268, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 119 [h=188.463, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "right -0.277 [h=188.187, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 111 [h=193.168, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 114 [h=197.07, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 100 [h=202.605, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "setchar0 46 [h=205.372, v=107.402, x=0, y=0, w=3.321, z=0, d=0]", + "pop [h=61.768, v=107.402, x=0, y=0, w=0, z=0, d=0]", + "down 52.873 [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]", + "down -31.154 [h=61.768, v=129.121, x=0, y=0, w=0, z=0, d=0]", + "putrule 0.797, 220.922 [h=61.768, v=129.121, x=0, y=0, w=0, z=0, d=0]", + "y 11.157 [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "push [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "push [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "right 5.978 [h=67.746, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 12 [h=73.281, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 114 [h=77.183, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 115 [h=81.113, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 116 [h=84.987, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "right 3.321 [h=88.308, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 99 [h=92.736, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 111 [h=97.717, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 108 [h=100.484, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 117 [h=106.019, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 109 [h=114.321, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 110 [h=119.856, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "pop [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "push [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "right 110.558 [h=172.326, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 115 [h=176.256, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 101 [h=180.684, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 99 [h=185.112, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 111 [h=190.093, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 110 [h=195.628, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 100 [h=201.163, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "right 3.321 [h=204.483, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 99 [h=208.911, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 111 [h=213.893, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 108 [h=216.66, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 117 [h=222.195, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 109 [h=230.497, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 110 [h=236.032, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "pop [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "pop [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]", + "down 5.8 [h=61.768, v=146.078, x=0, y=11.157, w=0, z=0, d=0]", + "putrule 0.498, 220.922 [h=61.768, v=146.078, x=0, y=11.157, w=0, z=0, d=0]", + "y0 [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "push [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "push [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "right 5.978 [h=67.746, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 76 [h=73.973, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 111 [h=78.954, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 114 [h=82.856, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 101 [h=87.284, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 109 [h=95.586, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "right 3.321 [h=98.907, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 105 [h=101.674, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 112 [h=107.209, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 115 [h=111.139, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 117 [h=116.674, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 109 [h=124.976, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "pop [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "push [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "right 110.558 [h=172.326, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 100 [h=177.861, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 111 [h=182.842, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 108 [h=185.61, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 111 [h=190.591, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "setchar0 114 [h=194.493, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "w 3.321 [h=197.814, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]", + "setchar0 115 [h=201.744, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]", + "setchar0 105 [h=204.511, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]", + "setchar0 116 [h=208.386, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]", + "w0 [h=211.706, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]", + "setchar0 97 [h=216.688, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]", + "setchar0 109 [h=224.99, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]", + "setchar0 101 [h=229.418, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]", + "setchar0 116 [h=233.292, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]", + "pop [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "pop [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]", + "y 11.955 [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "push [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "push [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "right 5.978 [h=67.746, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 99 [h=72.174, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 111 [h=77.155, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 110 [h=82.69, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 115 [h=86.62, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 101 [h=91.048, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 116 [h=94.922, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 101 [h=99.35, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 116 [h=103.224, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 117 [h=108.759, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 114 [h=112.661, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "right 3.321 [h=115.982, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 115 [h=119.912, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 97 [h=124.893, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 100 [h=130.428, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 105 [h=133.195, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 112 [h=138.73, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 115 [h=142.66, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 99 [h=147.088, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 105 [h=149.855, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 110 [h=155.39, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 103 [h=160.371, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "pop [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "push [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "right 110.558 [h=172.326, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 101 [h=176.754, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 108 [h=179.521, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 105 [h=182.289, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 116 [h=186.163, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 114 [h=190.065, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "pop [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "pop [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]", + "y0 [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "push [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "push [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "right 5.978 [h=67.746, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 115 [h=71.676, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 101 [h=76.104, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 100 [h=81.638, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "w 3.321 [h=84.959, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]", + "setchar0 100 [h=90.494, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]", + "setchar0 105 [h=93.261, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]", + "setchar0 97 [h=98.243, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]", + "setchar0 109 [h=106.545, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]", + "w0 [h=109.866, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]", + "setchar0 110 [h=115.401, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]", + "setchar0 111 [h=120.382, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]", + "setchar0 110 [h=125.917, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]", + "w -0.277 [h=125.64, v=181.145, x=0, y=11.955, w=-0.277, z=0, d=0]", + "setchar0 117 [h=131.175, v=181.145, x=0, y=11.955, w=-0.277, z=0, d=0]", + "setchar0 109 [h=139.477, v=181.145, x=0, y=11.955, w=-0.277, z=0, d=0]", + "w0 [h=139.2, v=181.145, x=0, y=11.955, w=-0.277, z=0, d=0]", + "setchar0 121 [h=144.458, v=181.145, x=0, y=11.955, w=-0.277, z=0, d=0]", + "pop [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "push [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "right 110.558 [h=172.326, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 101 [h=176.754, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 105 [h=179.521, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 114 [h=183.423, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 109 [h=191.726, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "setchar0 111 [h=196.707, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "w 0.277 [h=196.984, v=181.145, x=0, y=11.955, w=0.277, z=0, d=0]", + "setchar0 100 [h=202.519, v=181.145, x=0, y=11.955, w=0.277, z=0, d=0]", + "x 3.321 [h=205.84, v=181.145, x=3.321, y=11.955, w=0.277, z=0, d=0]", + "setchar0 116 [h=209.714, v=181.145, x=3.321, y=11.955, w=0.277, z=0, d=0]", + "setchar0 101 [h=214.142, v=181.145, x=3.321, y=11.955, w=0.277, z=0, d=0]", + "setchar0 109 [h=222.444, v=181.145, x=3.321, y=11.955, w=0.277, z=0, d=0]", + "setchar0 112 [h=227.979, v=181.145, x=3.321, y=11.955, w=0.277, z=0, d=0]", + "w0 [h=228.256, v=181.145, x=3.321, y=11.955, w=0.277, z=0, d=0]", + "setchar0 111 [h=233.237, v=181.145, x=3.321, y=11.955, w=0.277, z=0, d=0]", + "setchar0 114 [h=237.139, v=181.145, x=3.321, y=11.955, w=0.277, z=0, d=0]", + "x0 [h=240.46, v=181.145, x=3.321, y=11.955, w=0.277, z=0, d=0]", + "setchar0 105 [h=243.227, v=181.145, x=3.321, y=11.955, w=0.277, z=0, d=0]", + "setchar0 110 [h=248.762, v=181.145, x=3.321, y=11.955, w=0.277, z=0, d=0]", + "w -0.277 [h=248.485, v=181.145, x=3.321, y=11.955, w=-0.277, z=0, d=0]", + "setchar0 118 [h=253.743, v=181.145, x=3.321, y=11.955, w=-0.277, z=0, d=0]", + "setchar0 105 [h=256.511, v=181.145, x=3.321, y=11.955, w=-0.277, z=0, d=0]", + "setchar0 100 [h=262.046, v=181.145, x=3.321, y=11.955, w=-0.277, z=0, d=0]", + "setchar0 117 [h=267.58, v=181.145, x=3.321, y=11.955, w=-0.277, z=0, d=0]", + "setchar0 110 [h=273.115, v=181.145, x=3.321, y=11.955, w=-0.277, z=0, d=0]", + "w0 [h=272.838, v=181.145, x=3.321, y=11.955, w=-0.277, z=0, d=0]", + "setchar0 116 [h=276.713, v=181.145, x=3.321, y=11.955, w=-0.277, z=0, d=0]", + "pop [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "pop [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]", + "down 6.099 [h=61.768, v=187.245, x=0, y=11.955, w=0, z=0, d=0]", + "putrule 0.797, 220.922 [h=61.768, v=187.245, x=0, y=11.955, w=0, z=0, d=0]", + "pop [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]", + "down 58.197 [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "down 2.989 [h=61.768, v=221.461, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=221.461, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=221.461, x=0, y=0, w=0, z=0, d=0]", + "down -2.989 [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "right 3.387 [h=65.156, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "setchar0 98 [h=70.69, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "right 0.277 [h=70.967, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "setchar0 111 [h=75.949, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "right -0.277 [h=75.672, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "setchar0 120 [h=80.93, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "setchar0 101 [h=85.358, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "setchar0 100 [h=90.893, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "right 3.321 [h=94.213, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "setchar0 116 [h=98.088, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "setchar0 101 [h=102.516, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "setchar0 120 [h=107.774, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "setchar0 116 [h=111.648, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=221.461, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=221.461, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "down -9.907 [h=61.768, v=208.565, x=0, y=0, w=0, z=0, d=0]", + "putrule 0.398, 53.267 [h=61.768, v=208.565, x=0, y=0, w=0, z=0, d=0]", + "down 13.095 [h=61.768, v=221.66, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=221.66, x=0, y=0, w=0, z=0, d=0]", + "setrule 13.295, 0.398 [h=62.167, v=221.66, x=0, y=0, w=0, z=0, d=0]", + "right 52.47 [h=114.637, v=221.66, x=0, y=0, w=0, z=0, d=0]", + "setrule 13.295, 0.398 [h=115.035, v=221.66, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=221.66, x=0, y=0, w=0, z=0, d=0]", + "down 0.199 [h=61.768, v=221.859, x=0, y=0, w=0, z=0, d=0]", + "putrule 0.398, 53.267 [h=61.768, v=221.859, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]", + "pop [h=0, v=600.747, x=0, y=0, w=0, z=0, d=0]", + "down 29.888 [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "push [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "right 61.768 [h=61.768, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "xxx 'color push gray 0' [h=61.768, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "push [h=61.768, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "right 169.365 [h=231.133, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "setchar0 49 [h=236.115, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "pop [h=61.768, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "right 343.711 [h=405.479, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "xxx 'color pop' [h=405.479, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "pop [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "pop [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "eop [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "post 10, 1, 405, 630, 1000, 25400000, 473628672, 42 [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "fontdef 7, 1274110073, cmr10 [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]", + "postpost 2, 953 [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]", + }; + test_dvi_file("sample_v2.dvi", expected_lines); +} + + +// test DVI file generated with pLaTeX in vertical mode (DVI version 3) +TEST(DVIReaderTest, dvi_v3) { + vector<const char*> expected_lines { + "pre 2, 25400000, 473628672, 1000, ' TeX output 2017.11.22:1928' [h=0, v=0, x=0, y=0, w=0, z=0, d=0]", + "bop {1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -1 [h=0, v=0, x=0, y=0, w=0, z=0, d=0]", + "down 703.125 [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]", + "push [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]", + "down -678.472 [h=0, v=24.653, x=0, y=0, w=0, z=0, d=0]", + "down 650.12 [h=0, v=674.773, x=0, y=0, w=0, z=0, d=0]", + "push [h=0, v=674.773, x=0, y=0, w=0, z=0, d=0]", + "down -601.603 [h=0, v=73.17, x=0, y=0, w=0, z=0, d=0]", + "push [h=0, v=73.17, x=0, y=0, w=0, z=0, d=0]", + "push [h=0, v=73.17, x=0, y=0, w=0, z=0, d=0]", + "right 12.552 [h=12.552, v=73.17, x=0, y=0, w=0, z=0, d=0]", + "down -30.128 [h=12.552, v=43.042, x=0, y=0, w=0, z=0, d=0]", + "dir 1 [h=12.552, v=43.042, x=0, y=0, w=0, z=0, d=1]", + "down -15.94 [h=28.492, v=43.042, x=0, y=0, w=0, z=0, d=1]", + "push [h=28.492, v=43.042, x=0, y=0, w=0, z=0, d=1]", + "down 3.404 [h=25.088, v=43.042, x=0, y=0, w=0, z=0, d=1]", + "fontdef 7, 1274110073, cmr10 [h=25.088, v=43.042, x=0, y=0, w=0, z=0, d=1]", + "fontnum 7, cmr10 [h=25.088, v=43.042, x=0, y=0, w=0, z=0, d=1]", + "setchar0 118 [h=25.088, v=48.3, x=0, y=0, w=0, z=0, d=1]", + "right -0.277 [h=25.088, v=48.023, x=0, y=0, w=0, z=0, d=1]", + "setchar0 101 [h=25.088, v=52.451, x=0, y=0, w=0, z=0, d=1]", + "setchar0 114 [h=25.088, v=56.353, x=0, y=0, w=0, z=0, d=1]", + "setchar0 116 [h=25.088, v=60.228, x=0, y=0, w=0, z=0, d=1]", + "setchar0 105 [h=25.088, v=62.995, x=0, y=0, w=0, z=0, d=1]", + "setchar0 99 [h=25.088, v=67.423, x=0, y=0, w=0, z=0, d=1]", + "setchar0 97 [h=25.088, v=72.404, x=0, y=0, w=0, z=0, d=1]", + "setchar0 108 [h=25.088, v=75.172, x=0, y=0, w=0, z=0, d=1]", + "pop [h=28.492, v=43.042, x=0, y=0, w=0, z=0, d=1]", + "down 15.94 [h=12.552, v=43.042, x=0, y=0, w=0, z=0, d=1]", + "push [h=12.552, v=43.042, x=0, y=0, w=0, z=0, d=1]", + "down 3.404 [h=9.148, v=43.042, x=0, y=0, w=0, z=0, d=1]", + "setchar0 116 [h=9.148, v=46.916, x=0, y=0, w=0, z=0, d=1]", + "setchar0 101 [h=9.148, v=51.344, x=0, y=0, w=0, z=0, d=1]", + "setchar0 120 [h=9.148, v=56.602, x=0, y=0, w=0, z=0, d=1]", + "setchar0 116 [h=9.148, v=60.477, x=0, y=0, w=0, z=0, d=1]", + "pop [h=12.552, v=43.042, x=0, y=0, w=0, z=0, d=1]", + "pop [h=0, v=73.17, x=0, y=0, w=0, z=0, d=0]", + "pop [h=0, v=73.17, x=0, y=0, w=0, z=0, d=0]", + "pop [h=0, v=674.773, x=0, y=0, w=0, z=0, d=0]", + "down 28.352 [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]", + "push [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]", + "right 223.147 [h=223.147, v=703.125, x=0, y=0, w=0, z=0, d=0]", + "setchar0 49 [h=228.128, v=703.125, x=0, y=0, w=0, z=0, d=0]", + "pop [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]", + "pop [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]", + "eop [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]", + "post 5, 1, 451, 703, 1000, 25400000, 473628672, 42 [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]", + "fontdef 7, 1274110073, cmr10 [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]", + "postpost 3, 195 [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]", + }; + test_dvi_file("sample_v3.dvi", expected_lines); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/DependencyGraphTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/DependencyGraphTest.cpp index 79c702c76ec..fa48741fdf3 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/DependencyGraphTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/DependencyGraphTest.cpp @@ -2,7 +2,7 @@ ** DependencyGraphTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,6 +21,8 @@ #include <gtest/gtest.h> #include "DependencyGraph.hpp" +using namespace std; + static void populate (DependencyGraph<int> &tree) { tree.insert(1); tree.insert(2); @@ -32,11 +34,24 @@ static void populate (DependencyGraph<int> &tree) { } +TEST(DependencyGraphTest, getKeys) { + DependencyGraph<int> graph; + populate(graph); + auto keys = graph.getKeys(); + ASSERT_EQ(keys.size(), 7u); + int count=0; + for (int key : keys) { + ASSERT_EQ(keys[count++], key); + } +} + + TEST(DependencyGraphTest, insert) { DependencyGraph<int> graph; populate(graph); - for (int i=1; i <= 7; i++) + for (int i=1; i <= 7; i++) { ASSERT_TRUE(graph.contains(i)); + } ASSERT_FALSE(graph.contains(0)); ASSERT_FALSE(graph.contains(8)); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/DirectoryTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/DirectoryTest.cpp index 98c58a13d4f..8b4f75fbd5c 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/DirectoryTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/DirectoryTest.cpp @@ -2,7 +2,7 @@ ** DirectoryTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -39,7 +39,7 @@ TEST(DirectoryTest, dirs) { while (const char *dname = dir.read(Directory::ET_DIR)) found_dirs.insert(dname); for (const char **p=dirs_to_find; *p; ++p) { - EXPECT_TRUE(found_dirs.find(*p) != found_dirs.end()) << *p; + EXPECT_NE(found_dirs.find(*p), found_dirs.end()) << *p; } } @@ -59,7 +59,7 @@ TEST(DirectoryTest, file) { while (const char *fname = dir.read(Directory::ET_FILE)) found_files.insert(fname); for (const char **p=files_to_find; *p; ++p) { - EXPECT_TRUE(found_files.find(*p) != found_files.end()) << *p; + EXPECT_NE(found_files.find(*p), found_files.end()) << *p; } - EXPECT_TRUE(found_files.find("tests") == found_files.end()); + EXPECT_EQ(found_files.find("tests"), found_files.end()); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/DvisvgmSpecialTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/DvisvgmSpecialTest.cpp index a021d6487fe..b3028f63f19 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/DvisvgmSpecialTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/DvisvgmSpecialTest.cpp @@ -2,7 +2,7 @@ ** DvisvgmSpecialTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -19,6 +19,7 @@ *************************************************************************/ #include <gtest/gtest.h> +#include <array> #include <sstream> #include "DvisvgmSpecialHandler.hpp" #include "SpecialActions.hpp" @@ -26,8 +27,7 @@ using namespace std; -class MyDvisvgmSpecialHandler : public DvisvgmSpecialHandler -{ +class MyDvisvgmSpecialHandler : public DvisvgmSpecialHandler { public: void finishPreprocessing () {dviPreprocessingFinished();} void finishPage () {dviEndPage(0, emptyActions);} @@ -37,23 +37,23 @@ class MyDvisvgmSpecialHandler : public DvisvgmSpecialHandler }; -class DvisvgmSpecialTest : public ::testing::Test -{ +class DvisvgmSpecialTest : public ::testing::Test { protected: - class ActionsRecorder : public EmptySpecialActions - { + class ActionsRecorder : public EmptySpecialActions { public: ActionsRecorder () : defs(""), page("") {} - void appendToDefs (XMLNode *node) {defs.append(node);} - void appendToPage (XMLNode *node) {page.append(node);} - void embed (const BoundingBox &bb) {bbox.embed(bb);} - double getX () const {return 0;} - double getY () const {return 0;} - void clear () {defs.clear(); page.clear(); bbox=BoundingBox(0, 0, 0, 0);} - bool defsEquals (const string &str) const {return defs.getText() == str;} - bool pageEquals (const string &str) const {return page.getText() == str;} - bool bboxEquals (const string &str) const {return bbox.toSVGViewBox() == str;} - const Matrix& getMatrix () const {static Matrix m(1); return m;} + void appendToDefs(unique_ptr<XMLNode> &&node) override {defs.append(std::move(node));} + void appendToPage(unique_ptr<XMLNode> &&node) override {page.append(std::move(node));} + void embed (const BoundingBox &bb) override {bbox.embed(bb);} + double getX () const override {return 0;} + double getY () const override {return 0;} + void clear () {defs.clear(); page.clear(); bbox=BoundingBox(0, 0, 0, 0);} + bool defsEquals (const string &str) const {return defs.getText() == str;} + bool pageEquals (const string &str) const {return page.getText() == str;} + bool bboxEquals (const string &str) const {return bbox.toSVGViewBox() == str;} + const Matrix& getMatrix () const override {static Matrix m(1); return m;} + string bboxString () const {return bbox.toSVGViewBox();} + string pageString () const {return page.getText();} void write (ostream &os) const { os << "defs: " << defs.getText() << '\n' @@ -108,7 +108,7 @@ TEST_F(DvisvgmSpecialTest, rawdef) { TEST_F(DvisvgmSpecialTest, pattern1) { - const char *cmds[] = { + const auto cmds = { "rawset pat1", "raw text1", "raw text2", @@ -117,13 +117,13 @@ TEST_F(DvisvgmSpecialTest, pattern1) { "rawput pat1", "rawput pat1", }; - for (size_t i=0; i < sizeof(cmds)/sizeof(char*); i++) { - std::istringstream iss(cmds[i]); + for (const char *cmd : cmds) { + std::istringstream iss(cmd); handler.preprocess(0, iss, recorder); } handler.finishPreprocessing(); - for (size_t i=0; i < sizeof(cmds)/sizeof(char*); i++) { - std::istringstream iss(cmds[i]); + for (const char *cmd : cmds) { + std::istringstream iss(cmd); handler.process(0, iss, recorder); } handler.finishPage(); @@ -133,7 +133,7 @@ TEST_F(DvisvgmSpecialTest, pattern1) { TEST_F(DvisvgmSpecialTest, pattern2) { - const char *cmds[] = { + const auto cmds = { "rawset pat2", "rawdef text1", "rawdef text2", @@ -142,13 +142,13 @@ TEST_F(DvisvgmSpecialTest, pattern2) { "rawput pat2", "rawput pat2", }; - for (size_t i=0; i < sizeof(cmds)/sizeof(char*); i++) { - std::istringstream iss(cmds[i]); + for (const char *cmd : cmds) { + std::istringstream iss(cmd); handler.preprocess(0, iss, recorder); } handler.finishPreprocessing(); - for (size_t i=0; i < sizeof(cmds)/sizeof(char*); i++) { - std::istringstream iss(cmds[i]); + for (const char *cmd : cmds) { + std::istringstream iss(cmd); handler.process(0, iss, recorder); } handler.finishPage(); @@ -158,7 +158,7 @@ TEST_F(DvisvgmSpecialTest, pattern2) { TEST_F(DvisvgmSpecialTest, pattern3) { - const char *cmds[] = { + const auto cmds = { "rawset pat3", "raw text1", "rawdef text2", @@ -168,13 +168,13 @@ TEST_F(DvisvgmSpecialTest, pattern3) { "rawput pat3", "rawput pat3", }; - for (size_t i=0; i < sizeof(cmds)/sizeof(char*); i++) { - std::istringstream iss(cmds[i]); + for (const char *cmd : cmds) { + std::istringstream iss(cmd); handler.preprocess(0, iss, recorder); } handler.finishPreprocessing(); - for (size_t i=0; i < sizeof(cmds)/sizeof(char*); i++) { - std::istringstream iss(cmds[i]); + for (const char *cmd : cmds) { + std::istringstream iss(cmd); handler.process(0, iss, recorder); } EXPECT_TRUE(recorder.defsEquals("firsttext2")); @@ -202,6 +202,18 @@ TEST_F(DvisvgmSpecialTest, processImg) { handler.process(0, iss, recorder); EXPECT_TRUE(recorder.defsEquals("")); EXPECT_TRUE(recorder.pageEquals("<image height='72' width='72' x='0' xlink:href='test.png' y='0'/>")); + + recorder.clear(); + iss.clear(); + iss.str("img 10bp 20bp test2.png"); + handler.process(0, iss, recorder); + EXPECT_TRUE(recorder.pageEquals("<image height='20' width='10' x='0' xlink:href='test2.png' y='0'/>")); +} + + +TEST_F(DvisvgmSpecialTest, fail3) { + std::istringstream iss("img 10 20xy test.png"); // unknown unit + EXPECT_THROW(handler.process(0, iss, recorder), SpecialException); } @@ -220,7 +232,25 @@ TEST_F(DvisvgmSpecialTest, processBBox) { recorder.clear(); iss.clear(); + iss.str("bbox 72bp 72bp"); + handler.process(0, iss, recorder); + EXPECT_TRUE(recorder.bboxEquals("0 -72 72 72")); + + recorder.clear(); + iss.clear(); + iss.str("bbox rel 72.27 72.27"); + handler.process(0, iss, recorder); + EXPECT_TRUE(recorder.bboxEquals("0 -72 72 72")); + + recorder.clear(); + iss.clear(); iss.str("bbox new name"); handler.process(0, iss, recorder); EXPECT_TRUE(recorder.bboxEquals("0 0 0 0")); } + + +TEST_F(DvisvgmSpecialTest, fail4) { + std::istringstream iss("bbox abs 0 0 72.27xx 72.27"); // unknown unit + EXPECT_THROW(handler.process(0, iss, recorder), SpecialException); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/EmSpecialTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/EmSpecialTest.cpp index 36e698aef7a..b57c2d35b5c 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/EmSpecialTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/EmSpecialTest.cpp @@ -2,7 +2,7 @@ ** EmSpecialTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -28,24 +28,22 @@ using namespace std; -class EmSpecialTest : public ::testing::Test -{ +class EmSpecialTest : public ::testing::Test { protected: - class ActionsRecorder : public EmptySpecialActions - { + class ActionsRecorder : public EmptySpecialActions { public: - ActionsRecorder () : page("page") {} - void appendToPage (XMLNode *node) {page.append(node);} - void embed (const BoundingBox &bb) {bbox.embed(bb);} - void setX (double xx) {x = xx;} - void setY (double yy) {x = yy;} - double getX () const {return x;} - double getY () const {return y;} - Color getColor () const {return color;} - void setColor (const Color &c) {color = c;} - void clear () {page.clear(); bbox=BoundingBox(0, 0, 0, 0);} - string getPageXML () const {ostringstream oss; oss << page; return oss.str();} - const Matrix& getMatrix () const {static Matrix m(1); return m;} + ActionsRecorder () : x(), y(), page("page") {} + void appendToPage(unique_ptr<XMLNode> &&node) {page.append(std::move(node));} + void embed (const BoundingBox &bb) {bbox.embed(bb);} + void setX (double xx) {x = xx;} + void setY (double yy) {x = yy;} + double getX () const {return x;} + double getY () const {return y;} + Color getColor () const {return color;} + void setColor (const Color &c) {color = c;} + void clear () {page.clear(); bbox=BoundingBox(0, 0, 0, 0);} + string getPageXML () const {ostringstream oss; oss << page; return oss.str();} + const Matrix& getMatrix () const {static Matrix m(1); return m;} void write (ostream &os) const { os << "page: " << page << '\n' @@ -60,8 +58,7 @@ class EmSpecialTest : public ::testing::Test }; - class MyEmSpecialHandler : public EmSpecialHandler - { + class MyEmSpecialHandler : public EmSpecialHandler { public: MyEmSpecialHandler (SpecialActions &a) : actions(a) {} void finishPage () {dviEndPage(0, actions);} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/FileFinderTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/FileFinderTest.cpp index 44615fa2336..045bf19dab5 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/FileFinderTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/FileFinderTest.cpp @@ -2,7 +2,7 @@ ** FileFinderTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,26 +21,13 @@ #include <gtest/gtest.h> #include <fstream> #include "FileFinder.hpp" - -#ifndef SRCDIR -#define SRCDIR "." -#endif +#include "testutil.hpp" using std::ifstream; -class FileFinderTest : public ::testing::Test -{ - protected: - void SetUp () override { - FileFinder::init("FileFinderTest", "FileFinderTest", false); - FileFinder::instance().addLookupDir(SRCDIR"/data"); - } -}; - - -TEST_F(FileFinderTest, find_base_file) { - const char *path = FileFinder::instance().lookup(SRCDIR"/FileFinderTest.cpp"); +TEST(FileFinderTest, find_base_file) { + const char *path = FileFinder::instance().lookup("FileFinderTest.cpp"); EXPECT_TRUE(path); path = FileFinder::instance().lookup("Does-not-exist"); EXPECT_FALSE(path); @@ -49,11 +36,11 @@ TEST_F(FileFinderTest, find_base_file) { path = FileFinder::instance().lookup("cmr10.tfm"); EXPECT_TRUE(path); ifstream ifs(path); - EXPECT_TRUE(bool(ifs)); + EXPECT_TRUE(bool(ifs)) << "path=" << path; } -TEST_F(FileFinderTest, find_mapped_file) { +TEST(FileFinderTest, find_mapped_file) { // mapped base tfm file => should be resolved by kpathsea // circle10.tfm is usually mapped to lcircle.tfm if (const char *path = FileFinder::instance().lookup("circle10.tfm")) { @@ -61,6 +48,8 @@ TEST_F(FileFinderTest, find_mapped_file) { ifstream ifs(path); EXPECT_TRUE(bool(ifs)); } + else + WARNING("circle10.tfm not found"); // mapped lm font => should be resolved using dvisvgm's FontMap // cork-lmr10 is usually mapped to lmr10 @@ -70,11 +59,15 @@ TEST_F(FileFinderTest, find_mapped_file) { ifstream ifs(path); EXPECT_TRUE(bool(ifs)); } + else + WARNING("cork-lmr10.pfb not found"); } + else + WARNING("lmodern.sty not found"); } -TEST_F(FileFinderTest, mktexmf) { +TEST(FileFinderTest, mktexmf) { // ensure availability of ec font => call mktexmf if necessary if (const char *path = FileFinder::instance().lookup("ecrm2000.mf")) { ifstream ifs(path); @@ -83,7 +76,7 @@ TEST_F(FileFinderTest, mktexmf) { } -TEST_F(FileFinderTest, find_unavailable_file) { +TEST(FileFinderTest, find_unavailable_file) { const char *path = FileFinder::instance().lookup("not-available.xyz"); EXPECT_FALSE(path); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/FilePathTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/FilePathTest.cpp index 31ec08f980a..cd42253ee0b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/FilePathTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/FilePathTest.cpp @@ -2,7 +2,7 @@ ** FilePathTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,6 +23,10 @@ #include "FilePath.hpp" #include "FileSystem.hpp" +#ifndef SRCDIR +#define SRCDIR "." +#endif + using namespace std; @@ -75,11 +79,12 @@ TEST(FilePathTest, file2) { TEST(FilePathTest, autodetect) { + FileSystem::chdir(SRCDIR); FilePath fp1("FilePathTest.cpp"); ASSERT_TRUE(fp1.isFile()); ASSERT_FALSE(fp1.empty()); string cwd = FileSystem::getcwd(); - ASSERT_EQ(fp1.absolute(), cwd + "/FilePathTest.cpp"); + ASSERT_EQ(fp1.absolute(), cwd + "/FilePathTest.cpp") << "fp1=" << fp1.absolute(); FilePath fp2(""); ASSERT_FALSE(fp2.isFile()); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/FileSystemTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/FileSystemTest.cpp index 4fd098636f7..1d1152a4d9f 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/FileSystemTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/FileSystemTest.cpp @@ -2,7 +2,7 @@ ** FileSystemTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -77,7 +77,7 @@ TEST(FileSystemTest, filesize) { for (int i=0; i < 123; ++i) ofs.put(i); ofs.close(); - EXPECT_EQ(FileSystem::filesize(tmpfile), 123); + EXPECT_EQ(FileSystem::filesize(tmpfile), 123u); FileSystem::remove(tmpfile); } @@ -96,6 +96,8 @@ TEST(FileSystemTest, copy) { EXPECT_EQ(ifs1.get(), ifs2.get()); } EXPECT_TRUE(ifs2.eof()); + ifs1.close(); + ifs2.close(); FileSystem::remove(tmpfile1); FileSystem::remove(tmpfile2); } @@ -117,5 +119,6 @@ TEST(FileSystemTest, move) { } ifs2.get(); EXPECT_TRUE(ifs2.eof()); + ifs2.close(); FileSystem::remove(tmpfile2); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontCacheTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontCacheTest.cpp index e4900f66756..45a65f8587e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontCacheTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontCacheTest.cpp @@ -2,7 +2,7 @@ ** FontCacheTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -24,16 +24,39 @@ #include "FileSystem.hpp" #include "FontCache.hpp" -#ifndef SRCDIR -#define SRCDIR "." +#ifndef BUILDDIR +#define BUILDDIR "." #endif using namespace std; -class FontCacheTest : public testing::Test -{ +class LocalCache { + public: + LocalCache (const string &cachedir) + : _cachedir(cachedir), + _created(!FileSystem::exists(cachedir) && FileSystem::mkdir(cachedir)) + { + } + + ~LocalCache () { + if (_created) + FileSystem::rmdir(_cachedir); + } + + string cachedir () const {return _cachedir;} + + private: + string _cachedir; + bool _created; +}; + + +static LocalCache localCache(BUILDDIR"/data"); + + +class FontCacheTest : public testing::Test { protected: - FontCacheTest () : testing::Test(), cachedir("data") { + FontCacheTest () : testing::Test(), cachedir(localCache.cachedir()) { glyph1.moveto(0, 0); glyph1.lineto(10, 0); glyph1.lineto(10, 10); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontManagerTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontManagerTest.cpp index 1bab3d2dab7..8d85917faf1 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontManagerTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontManagerTest.cpp @@ -2,7 +2,7 @@ ** FontManagerTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -22,19 +22,10 @@ #include <sstream> #include "Font.hpp" #include "FontManager.hpp" -#include "FileFinder.hpp" -#ifndef SRCDIR -#define SRCDIR "." -#endif - - -class FontManagerTest : public ::testing::Test -{ +class FontManagerTest : public ::testing::Test { public: FontManagerTest () : fm(FontManager::instance()) { - FileFinder::init("FontManagerTest", "FontManagerTest", false); - FileFinder::instance().addLookupDir(SRCDIR"/data"); fm.registerFont(10, "cmr10", 1274110073, 10, 10); fm.registerFont(11, "cmr10", 1274110073, 10, 12); fm.registerFont( 9, "cmr10", 1274110073, 10, 14); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontMapTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontMapTest.cpp index d9b75df10ea..2f2762d8a5a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontMapTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontMapTest.cpp @@ -2,7 +2,7 @@ ** FontMapTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/GFGlyphTracerTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/GFGlyphTracerTest.cpp index b9f2268ac42..b339fb01d1d 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/GFGlyphTracerTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/GFGlyphTracerTest.cpp @@ -2,7 +2,7 @@ ** GFGlyphTracerTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/GFReaderTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/GFReaderTest.cpp index bfba5514c4f..fe757de11ae 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/GFReaderTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/GFReaderTest.cpp @@ -2,7 +2,7 @@ ** GFReaderTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -32,18 +32,17 @@ using namespace std; -struct PixelActions : public Bitmap::Callback -{ +struct PixelActions : public Bitmap::Callback { void pixel (int x, int y, bool set, const Bitmap &bm) { if (charmap.size() == 0) { charmap.resize(bm.height()); for (int i=0; i < bm.height(); i++) charmap[i] = string(bm.width(), ' '); } - ASSERT_GE(x, 0); - ASSERT_LT(x, bm.width()); - ASSERT_GE(y, 0); - ASSERT_LT(y, bm.height()); + EXPECT_GE(x, 0); + EXPECT_LT(x, bm.width()); + EXPECT_GE(y, 0); + EXPECT_LT(y, bm.height()); charmap[y][x] = (set ? '*' : '-'); } @@ -261,26 +260,27 @@ TEST(GFReaderTest, executeChar) { ASSERT_TRUE(bool(ifs)); GFReader gfReader(ifs); PixelActions actions; - - gfReader.executeChar('a'); - ASSERT_EQ(gfReader.getBitmap().width(), 39); - ASSERT_EQ(gfReader.getBitmap().height(), 39); - gfReader.getBitmap().forAllPixels(actions); - check_letter(letter_a, actions.charmap); - - actions.charmap.clear(); - gfReader.executeChar('g'); - ASSERT_EQ(gfReader.getBitmap().width(), 39); - ASSERT_EQ(gfReader.getBitmap().height(), 56); - gfReader.getBitmap().forAllPixels(actions); - check_letter(letter_g, actions.charmap); - - actions.charmap.clear(); - gfReader.executeChar('M'); - ASSERT_EQ(gfReader.getBitmap().width(), 70); - ASSERT_EQ(gfReader.getBitmap().height(), 57); - gfReader.getBitmap().forAllPixels(actions); - check_letter(letter_M, actions.charmap); + { gfReader.executeChar('a'); + ASSERT_EQ(gfReader.getBitmap().width(), 39); + ASSERT_EQ(gfReader.getBitmap().height(), 39); + SCOPED_TRACE("A"); + gfReader.getBitmap().forAllPixels(actions); + check_letter(letter_a, actions.charmap); + }{ actions.charmap.clear(); + gfReader.executeChar('g'); + ASSERT_EQ(gfReader.getBitmap().width(), 39); + ASSERT_EQ(gfReader.getBitmap().height(), 56); + SCOPED_TRACE("B"); + gfReader.getBitmap().forAllPixels(actions); + check_letter(letter_g, actions.charmap); + }{ actions.charmap.clear(); + gfReader.executeChar('M'); + ASSERT_EQ(gfReader.getBitmap().width(), 70); + ASSERT_EQ(gfReader.getBitmap().height(), 57); + SCOPED_TRACE("C"); + gfReader.getBitmap().forAllPixels(actions); + check_letter(letter_M, actions.charmap); + } } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/GhostscriptTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/GhostscriptTest.cpp index 545c4cf6c2c..c292f945b92 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/GhostscriptTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/GhostscriptTest.cpp @@ -1,3 +1,23 @@ +/************************************************************************* +** GhostscriptTest.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + #include <gtest/gtest.h> #include "Ghostscript.hpp" diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/GraphicsPathTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/GraphicsPathTest.cpp index bef0cde0e28..144d60f58bc 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/GraphicsPathTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/GraphicsPathTest.cpp @@ -2,7 +2,7 @@ ** GraphicsPathTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -31,7 +31,7 @@ TEST(GraphicsPathTest, svg) { path.cubicto(20,20,30,30,40,40); path.closepath(); EXPECT_FALSE(path.empty()); - EXPECT_EQ(path.size(), 4); + EXPECT_EQ(path.size(), 4u); ostringstream oss; path.writeSVG(oss, false); EXPECT_EQ(oss.str(), "M0 0L10 10C20 20 30 30 40 40Z"); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/JFMReaderTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/JFMReaderTest.cpp index 347cb5e093a..9cfea3bc2ab 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/JFMReaderTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/JFMReaderTest.cpp @@ -2,7 +2,7 @@ ** JFMReaderTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,9 +21,11 @@ #include <gtest/gtest.h> #include <cstdlib> #include <fstream> +#include <memory> #include <string> #include <vector> #include "JFM.hpp" +#include "utility.hpp" #ifndef SRCDIR #define SRCDIR "." @@ -32,85 +34,78 @@ using namespace std; -class JFMReaderTest : public ::testing::Test -{ +class JFMReaderTest : public ::testing::Test { public: - JFMReaderTest () : jfm(0) {} - void SetUp () override { string fname = string(SRCDIR)+"/data/cidjmgr0-h.tfm"; ifstream ifs(fname.c_str(), ios::binary); ASSERT_TRUE(ifs.is_open()) << "failed opening " << fname; - jfm = new JFM(ifs); - } - - void TearDown () override { - delete jfm; + jfm = util::make_unique<JFM>(ifs); } protected: - JFM *jfm; + unique_ptr<JFM> jfm; }; TEST_F(JFMReaderTest, properties) { - ASSERT_EQ(jfm->getChecksum(), 0); - ASSERT_FALSE(jfm->verticalLayout()); - ASSERT_EQ(jfm->firstChar(), 0); - ASSERT_EQ(jfm->lastChar(), 1); - ASSERT_EQ(jfm->minChar(), 13143); - ASSERT_EQ(jfm->maxChar(), 14696); - ASSERT_DOUBLE_EQ(jfm->getDesignSize(), 10.0*72.0/72.27); + EXPECT_EQ(jfm->getChecksum(), 0u); + EXPECT_FALSE(jfm->verticalLayout()); + EXPECT_EQ(jfm->firstChar(), 0); + EXPECT_EQ(jfm->lastChar(), 1); + EXPECT_EQ(jfm->minChar(), 13143); + EXPECT_EQ(jfm->maxChar(), 14696); + EXPECT_DOUBLE_EQ(jfm->getDesignSize(), 10.0*72.0/72.27); } TEST_F(JFMReaderTest, charWidth) { uint16_t minchar = jfm->minChar(); uint16_t maxchar = jfm->maxChar(); - ASSERT_NEAR(jfm->getCharWidth(0), 9.963, 0.001); - ASSERT_NEAR(jfm->getCharWidth(minchar), 4.981, 0.001); - ASSERT_NEAR(jfm->getCharWidth(minchar+1), 4.981, 0.001); - ASSERT_NEAR(jfm->getCharWidth(maxchar), 4.981, 0.001); - ASSERT_NEAR(jfm->getCharWidth(maxchar+1), 9.963, 0.001); + EXPECT_NEAR(jfm->getCharWidth(0), 9.963, 0.001); + EXPECT_NEAR(jfm->getCharWidth(minchar), 4.981, 0.001); + EXPECT_NEAR(jfm->getCharWidth(minchar+1), 4.981, 0.001); + EXPECT_NEAR(jfm->getCharWidth(maxchar), 4.981, 0.001); + EXPECT_NEAR(jfm->getCharWidth(maxchar+1), 9.963, 0.001); } TEST_F(JFMReaderTest, charHeight) { uint16_t minchar = jfm->minChar(); uint16_t maxchar = jfm->maxChar(); - ASSERT_NEAR(jfm->getCharHeight(0), 8.767, 0.001); - ASSERT_NEAR(jfm->getCharHeight(minchar), 8.767, 0.001); - ASSERT_NEAR(jfm->getCharHeight(minchar+1), 8.767, 0.001); - ASSERT_NEAR(jfm->getCharHeight(maxchar), 8.767, 0.001); - ASSERT_NEAR(jfm->getCharHeight(maxchar+1), 8.767, 0.001); + EXPECT_NEAR(jfm->getCharHeight(0), 8.767, 0.001); + EXPECT_NEAR(jfm->getCharHeight(minchar), 8.767, 0.001); + EXPECT_NEAR(jfm->getCharHeight(minchar+1), 8.767, 0.001); + EXPECT_NEAR(jfm->getCharHeight(maxchar), 8.767, 0.001); + EXPECT_NEAR(jfm->getCharHeight(maxchar+1), 8.767, 0.001); } TEST_F(JFMReaderTest, charDepth) { uint16_t minchar = jfm->minChar(); uint16_t maxchar = jfm->maxChar(); - ASSERT_NEAR(jfm->getCharDepth(0), 1.195, 0.001); - ASSERT_NEAR(jfm->getCharDepth(minchar), 1.195, 0.001); - ASSERT_NEAR(jfm->getCharDepth(minchar+1), 1.195, 0.001); - ASSERT_NEAR(jfm->getCharDepth(maxchar), 1.195, 0.001); - ASSERT_NEAR(jfm->getCharDepth(maxchar+1), 1.195, 0.001); + EXPECT_NEAR(jfm->getCharDepth(0), 1.195, 0.001); + EXPECT_NEAR(jfm->getCharDepth(minchar), 1.195, 0.001); + EXPECT_NEAR(jfm->getCharDepth(minchar+1), 1.195, 0.001); + EXPECT_NEAR(jfm->getCharDepth(maxchar), 1.195, 0.001); + EXPECT_NEAR(jfm->getCharDepth(maxchar+1), 1.195, 0.001); } TEST_F(JFMReaderTest, italicCorr) { uint16_t minchar = jfm->minChar(); uint16_t maxchar = jfm->maxChar(); - ASSERT_DOUBLE_EQ(jfm->getItalicCorr(0), 0); - ASSERT_DOUBLE_EQ(jfm->getItalicCorr(minchar), 0); - ASSERT_DOUBLE_EQ(jfm->getItalicCorr(minchar+1), 0); - ASSERT_DOUBLE_EQ(jfm->getItalicCorr(maxchar), 0); - ASSERT_DOUBLE_EQ(jfm->getItalicCorr(maxchar+1), 0); + EXPECT_DOUBLE_EQ(jfm->getItalicCorr(0), 0); + EXPECT_DOUBLE_EQ(jfm->getItalicCorr(minchar), 0); + EXPECT_DOUBLE_EQ(jfm->getItalicCorr(minchar+1), 0); + EXPECT_DOUBLE_EQ(jfm->getItalicCorr(maxchar), 0); + EXPECT_DOUBLE_EQ(jfm->getItalicCorr(maxchar+1), 0); } TEST_F(JFMReaderTest, params) { - ASSERT_DOUBLE_EQ(jfm->getSpace(), 0); - ASSERT_DOUBLE_EQ(jfm->getSpaceShrink(), 0.); - ASSERT_NEAR(jfm->getSpaceStretch(), 0.996, 0.001); - ASSERT_NEAR(jfm->getQuad(), 9.963, 0.001); + EXPECT_DOUBLE_EQ(jfm->getSpace(), 0); + EXPECT_DOUBLE_EQ(jfm->getSpaceShrink(), 0.); + EXPECT_NEAR(jfm->getSpaceStretch(), 0.996, 0.001); + EXPECT_NEAR(jfm->getQuad(), 9.963, 0.001); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/LengthTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/LengthTest.cpp index cacd73576bf..ad8c5f36af9 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/LengthTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/LengthTest.cpp @@ -2,7 +2,7 @@ ** LengthTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.am index 2f436587130..642c9c97aed 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.am +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.am @@ -1,12 +1,12 @@ ## This file is part of dvisvgm -## Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> +## Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ## ## Process this file with automake. SUBDIRS = data check_LTLIBRARIES = libgtest.la -libgtest_la_SOURCES = gtest/src/gtest-all.cc gtest/src/gtest_main.cc +libgtest_la_SOURCES = gtest/src/gtest-all.cc testmain.cpp libgtest_la_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -I$(top_srcdir)/tests/gtest libgtest_la_LDFLAGS = -pthread EXTRA_DIST = gtest/LICENSE \ @@ -15,12 +15,16 @@ EXTRA_DIST = gtest/LICENSE \ gtest/src/gtest-death-test.cc \ gtest/src/gtest-filepath.cc \ gtest/src/gtest-internal-inl.h \ + gtest/src/gtest_main.cc \ gtest/src/gtest-port.cc \ gtest/src/gtest-printers.cc \ gtest/src/gtest-test-part.cc \ gtest/src/gtest-typed-test.cc -AM_CXXFLAGS = -I$(top_srcdir)/src -Wall -DSRCDIR='"$(srcdir)"' $(CODE_COVERAGE_CFLAGS) +AM_CXXFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/libs/variant/include \ + -Wall -Wno-mismatched-tags \ + -DBUILDDIR='"$(abs_builddir)"' -DSRCDIR='"$(abs_srcdir)"' \ + $(CODE_COVERAGE_CFLAGS) TESTS = hashcheck check_PROGRAMS = hashcheck @@ -31,323 +35,362 @@ hashcheck_CPPFLAGS = -I$(top_srcdir)/libs/xxHash hashcheck.cpp: genhashcheck.py $(top_srcdir)/src/AGLTable.hpp $(top_srcdir)/libs/xxHash/xxhash.h python $^ >$@ +TESTLIBS = libgtest.la ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a -lpotrace -lfreetype +if ENABLE_WOFF +TESTLIBS += \ + ../libs/ff-woff/libfontforge.a \ + ../libs/woff2/libwoff2.a \ + ../libs/brotli/libbrotli.a +endif +TESTLIBS += $(CODE_COVERAGE_LDFLAGS) + TESTS += BezierTest check_PROGRAMS += BezierTest -BezierTest_SOURCES = BezierTest.cpp +BezierTest_SOURCES = BezierTest.cpp testutil.hpp BezierTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -BezierTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +BezierTest_LDADD = $(TESTLIBS) TESTS += BitmapTest check_PROGRAMS += BitmapTest -BitmapTest_SOURCES = BitmapTest.cpp +BitmapTest_SOURCES = BitmapTest.cpp testutil.hpp BitmapTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -BitmapTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +BitmapTest_LDADD = $(TESTLIBS) TESTS += BoundingBoxTest check_PROGRAMS += BoundingBoxTest -BoundingBoxTest_SOURCES = BoundingBoxTest.cpp +BoundingBoxTest_SOURCES = BoundingBoxTest.cpp testutil.hpp BoundingBoxTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -BoundingBoxTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +BoundingBoxTest_LDADD = $(TESTLIBS) + +TESTS += CalculatorTest +check_PROGRAMS += CalculatorTest +CalculatorTest_SOURCES = CalculatorTest.cpp testutil.hpp +CalculatorTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +CalculatorTest_LDADD = $(TESTLIBS) TESTS += CMapManagerTest check_PROGRAMS += CMapManagerTest -CMapManagerTest_SOURCES = CMapManagerTest.cpp +CMapManagerTest_SOURCES = CMapManagerTest.cpp testutil.hpp CMapManagerTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -CMapManagerTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +CMapManagerTest_LDADD = $(TESTLIBS) TESTS += CMapReaderTest check_PROGRAMS += CMapReaderTest -CMapReaderTest_SOURCES = CMapReaderTest.cpp +CMapReaderTest_SOURCES = CMapReaderTest.cpp testutil.hpp CMapReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -CMapReaderTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +CMapReaderTest_LDADD = $(TESTLIBS) TESTS += CMapTest check_PROGRAMS += CMapTest -CMapTest_SOURCES = CMapTest.cpp +CMapTest_SOURCES = CMapTest.cpp testutil.hpp CMapTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -CMapTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) - -TESTS += CRC32Test -check_PROGRAMS += CRC32Test -CRC32Test_SOURCES = CRC32Test.cpp -CRC32Test_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -CRC32Test_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) - -TESTS += CalculatorTest -check_PROGRAMS += CalculatorTest -CalculatorTest_SOURCES = CalculatorTest.cpp -CalculatorTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -CalculatorTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +CMapTest_LDADD = $(TESTLIBS) TESTS += ColorSpecialTest check_PROGRAMS += ColorSpecialTest -ColorSpecialTest_SOURCES = ColorSpecialTest.cpp +ColorSpecialTest_SOURCES = ColorSpecialTest.cpp testutil.hpp ColorSpecialTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -ColorSpecialTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +ColorSpecialTest_LDADD = $(TESTLIBS) TESTS += ColorTest check_PROGRAMS += ColorTest -ColorTest_SOURCES = ColorTest.cpp +ColorTest_SOURCES = ColorTest.cpp testutil.hpp ColorTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -ColorTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +ColorTest_LDADD = $(TESTLIBS) TESTS += CommandLineTest check_PROGRAMS += CommandLineTest -CommandLineTest_SOURCES = CommandLineTest.cpp +CommandLineTest_SOURCES = CommandLineTest.cpp testutil.hpp CommandLineTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -CommandLineTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +CommandLineTest_LDADD = $(TESTLIBS) + +TESTS += CRC32Test +check_PROGRAMS += CRC32Test +CRC32Test_SOURCES = CRC32Test.cpp testutil.hpp +CRC32Test_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +CRC32Test_LDADD = $(TESTLIBS) TESTS += DependencyGraphTest check_PROGRAMS += DependencyGraphTest -DependencyGraphTest_SOURCES = DependencyGraphTest.cpp +DependencyGraphTest_SOURCES = DependencyGraphTest.cpp testutil.hpp DependencyGraphTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -DependencyGraphTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +DependencyGraphTest_LDADD = $(TESTLIBS) TESTS += DirectoryTest check_PROGRAMS += DirectoryTest -DirectoryTest_SOURCES = DirectoryTest.cpp +DirectoryTest_SOURCES = DirectoryTest.cpp testutil.hpp DirectoryTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -DirectoryTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +DirectoryTest_LDADD = $(TESTLIBS) + +TESTS += DVIReaderTest +check_PROGRAMS += DVIReaderTest +DVIReaderTest_SOURCES = DVIReaderTest.cpp testutil.hpp +DVIReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +DVIReaderTest_LDADD = $(TESTLIBS) TESTS += DvisvgmSpecialTest check_PROGRAMS += DvisvgmSpecialTest -DvisvgmSpecialTest_SOURCES = DvisvgmSpecialTest.cpp +DvisvgmSpecialTest_SOURCES = DvisvgmSpecialTest.cpp testutil.hpp DvisvgmSpecialTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -DvisvgmSpecialTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +DvisvgmSpecialTest_LDADD = $(TESTLIBS) TESTS += EmSpecialTest check_PROGRAMS += EmSpecialTest -EmSpecialTest_SOURCES = EmSpecialTest.cpp +EmSpecialTest_SOURCES = EmSpecialTest.cpp testutil.hpp EmSpecialTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -EmSpecialTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +EmSpecialTest_LDADD = $(TESTLIBS) TESTS += FileFinderTest check_PROGRAMS += FileFinderTest -FileFinderTest_SOURCES = FileFinderTest.cpp +FileFinderTest_SOURCES = FileFinderTest.cpp testutil.hpp FileFinderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -FileFinderTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +FileFinderTest_LDADD = $(TESTLIBS) TESTS += FilePathTest check_PROGRAMS += FilePathTest -FilePathTest_SOURCES = FilePathTest.cpp +FilePathTest_SOURCES = FilePathTest.cpp testutil.hpp FilePathTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -FilePathTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +FilePathTest_LDADD = $(TESTLIBS) TESTS += FileSystemTest check_PROGRAMS += FileSystemTest -FileSystemTest_SOURCES = FileSystemTest.cpp +FileSystemTest_SOURCES = FileSystemTest.cpp testutil.hpp FileSystemTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -FileSystemTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +FileSystemTest_LDADD = $(TESTLIBS) TESTS += FontCacheTest check_PROGRAMS += FontCacheTest -FontCacheTest_SOURCES = FontCacheTest.cpp +FontCacheTest_SOURCES = FontCacheTest.cpp testutil.hpp FontCacheTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -FontCacheTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +FontCacheTest_LDADD = $(TESTLIBS) TESTS += FontManagerTest check_PROGRAMS += FontManagerTest -FontManagerTest_SOURCES = FontManagerTest.cpp +FontManagerTest_SOURCES = FontManagerTest.cpp testutil.hpp FontManagerTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -FontManagerTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +FontManagerTest_LDADD = $(TESTLIBS) TESTS += FontMapTest check_PROGRAMS += FontMapTest -FontMapTest_SOURCES = FontMapTest.cpp +FontMapTest_SOURCES = FontMapTest.cpp testutil.hpp FontMapTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -FontMapTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +FontMapTest_LDADD = $(TESTLIBS) TESTS += GFGlyphTracerTest check_PROGRAMS += GFGlyphTracerTest -GFGlyphTracerTest_SOURCES = GFGlyphTracerTest.cpp +GFGlyphTracerTest_SOURCES = GFGlyphTracerTest.cpp testutil.hpp GFGlyphTracerTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -GFGlyphTracerTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +GFGlyphTracerTest_LDADD = $(TESTLIBS) TESTS += GFReaderTest check_PROGRAMS += GFReaderTest -GFReaderTest_SOURCES = GFReaderTest.cpp +GFReaderTest_SOURCES = GFReaderTest.cpp testutil.hpp GFReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -GFReaderTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +GFReaderTest_LDADD = $(TESTLIBS) TESTS += GhostscriptTest check_PROGRAMS += GhostscriptTest -GhostscriptTest_SOURCES = GhostscriptTest.cpp +GhostscriptTest_SOURCES = GhostscriptTest.cpp testutil.hpp GhostscriptTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -GhostscriptTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +GhostscriptTest_LDADD = $(TESTLIBS) TESTS += GraphicsPathTest check_PROGRAMS += GraphicsPathTest -GraphicsPathTest_SOURCES = GraphicsPathTest.cpp +GraphicsPathTest_SOURCES = GraphicsPathTest.cpp testutil.hpp GraphicsPathTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -GraphicsPathTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +GraphicsPathTest_LDADD = $(TESTLIBS) TESTS += JFMReaderTest check_PROGRAMS += JFMReaderTest -JFMReaderTest_SOURCES = JFMReaderTest.cpp +JFMReaderTest_SOURCES = JFMReaderTest.cpp testutil.hpp JFMReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -JFMReaderTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +JFMReaderTest_LDADD = $(TESTLIBS) TESTS += LengthTest check_PROGRAMS += LengthTest -LengthTest_SOURCES = LengthTest.cpp +LengthTest_SOURCES = LengthTest.cpp testutil.hpp LengthTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -LengthTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +LengthTest_LDADD = $(TESTLIBS) TESTS += MapLineTest check_PROGRAMS += MapLineTest -MapLineTest_SOURCES = MapLineTest.cpp +MapLineTest_SOURCES = MapLineTest.cpp testutil.hpp MapLineTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -MapLineTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +MapLineTest_LDADD = $(TESTLIBS) TESTS += MatrixTest check_PROGRAMS += MatrixTest -MatrixTest_SOURCES = MatrixTest.cpp +MatrixTest_SOURCES = MatrixTest.cpp testutil.hpp MatrixTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -MatrixTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +MatrixTest_LDADD = $(TESTLIBS) TESTS += MessageExceptionTest check_PROGRAMS += MessageExceptionTest -MessageExceptionTest_SOURCES = MessageExceptionTest.cpp +MessageExceptionTest_SOURCES = MessageExceptionTest.cpp testutil.hpp MessageExceptionTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -MessageExceptionTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) - -TESTS += PSInterpreterTest -check_PROGRAMS += PSInterpreterTest -PSInterpreterTest_SOURCES = PSInterpreterTest.cpp -PSInterpreterTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -PSInterpreterTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +MessageExceptionTest_LDADD = $(TESTLIBS) TESTS += PageRagesTest check_PROGRAMS += PageRagesTest -PageRagesTest_SOURCES = PageRagesTest.cpp +PageRagesTest_SOURCES = PageRagesTest.cpp testutil.hpp PageRagesTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -PageRagesTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +PageRagesTest_LDADD = $(TESTLIBS) TESTS += PageSizeTest check_PROGRAMS += PageSizeTest -PageSizeTest_SOURCES = PageSizeTest.cpp +PageSizeTest_SOURCES = PageSizeTest.cpp testutil.hpp PageSizeTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -PageSizeTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +PageSizeTest_LDADD = $(TESTLIBS) TESTS += PairTest check_PROGRAMS += PairTest -PairTest_SOURCES = PairTest.cpp +PairTest_SOURCES = PairTest.cpp testutil.hpp PairTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -PairTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +PairTest_LDADD = $(TESTLIBS) TESTS += PapersizeSpecialTest check_PROGRAMS += PapersizeSpecialTest -PapersizeSpecialTest_SOURCES = PapersizeSpecialTest.cpp +PapersizeSpecialTest_SOURCES = PapersizeSpecialTest.cpp testutil.hpp PapersizeSpecialTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -PapersizeSpecialTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +PapersizeSpecialTest_LDADD = $(TESTLIBS) + +TESTS += PDFParserTest +check_PROGRAMS += PDFParserTest +PDFParserTest_SOURCES = PDFParserTest.cpp testutil.hpp +PDFParserTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +PDFParserTest_LDADD = $(TESTLIBS) + +TESTS += PSInterpreterTest +check_PROGRAMS += PSInterpreterTest +PSInterpreterTest_SOURCES = PSInterpreterTest.cpp testutil.hpp +PSInterpreterTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +PSInterpreterTest_LDADD = $(TESTLIBS) TESTS += RangeMapTest check_PROGRAMS += RangeMapTest -RangeMapTest_SOURCES = RangeMapTest.cpp +RangeMapTest_SOURCES = RangeMapTest.cpp testutil.hpp RangeMapTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -RangeMapTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) - -TESTS += SVGOutputTest -check_PROGRAMS += SVGOutputTest -SVGOutputTest_SOURCES = SVGOutputTest.cpp -SVGOutputTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -SVGOutputTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +RangeMapTest_LDADD = $(TESTLIBS) TESTS += ShadingPatchTest check_PROGRAMS += ShadingPatchTest -ShadingPatchTest_SOURCES = ShadingPatchTest.cpp +ShadingPatchTest_SOURCES = ShadingPatchTest.cpp testutil.hpp ShadingPatchTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -ShadingPatchTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +ShadingPatchTest_LDADD = $(TESTLIBS) + +TESTS += SpecialManagerTest +check_PROGRAMS += SpecialManagerTest +SpecialManagerTest_SOURCES = SpecialManagerTest.cpp testutil.hpp +SpecialManagerTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +SpecialManagerTest_LDADD = $(TESTLIBS) TESTS += SplittedCharInputBufferTest check_PROGRAMS += SplittedCharInputBufferTest -SplittedCharInputBufferTest_SOURCES = SplittedCharInputBufferTest.cpp +SplittedCharInputBufferTest_SOURCES = SplittedCharInputBufferTest.cpp testutil.hpp SplittedCharInputBufferTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -SplittedCharInputBufferTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +SplittedCharInputBufferTest_LDADD = $(TESTLIBS) TESTS += StreamInputBufferTest check_PROGRAMS += StreamInputBufferTest -StreamInputBufferTest_SOURCES = StreamInputBufferTest.cpp +StreamInputBufferTest_SOURCES = StreamInputBufferTest.cpp testutil.hpp StreamInputBufferTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -StreamInputBufferTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +StreamInputBufferTest_LDADD = $(TESTLIBS) TESTS += StreamReaderTest check_PROGRAMS += StreamReaderTest -StreamReaderTest_SOURCES = StreamReaderTest.cpp +StreamReaderTest_SOURCES = StreamReaderTest.cpp testutil.hpp StreamReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -StreamReaderTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +StreamReaderTest_LDADD = $(TESTLIBS) TESTS += StreamWriterTest check_PROGRAMS += StreamWriterTest -StreamWriterTest_SOURCES = StreamWriterTest.cpp +StreamWriterTest_SOURCES = StreamWriterTest.cpp testutil.hpp StreamWriterTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -StreamWriterTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +StreamWriterTest_LDADD = $(TESTLIBS) + +TESTS += StringMatcherTest +check_PROGRAMS += StringMatcherTest +StringMatcherTest_SOURCES = StringMatcherTest.cpp testutil.hpp +StringMatcherTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +StringMatcherTest_LDADD = $(TESTLIBS) TESTS += SubfontTest check_PROGRAMS += SubfontTest -SubfontTest_SOURCES = SubfontTest.cpp +SubfontTest_SOURCES = SubfontTest.cpp testutil.hpp SubfontTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -SubfontTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +SubfontTest_LDADD = $(TESTLIBS) -TESTS += TFMReaderTest -check_PROGRAMS += TFMReaderTest -TFMReaderTest_SOURCES = TFMReaderTest.cpp -TFMReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -TFMReaderTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +TESTS += SVGOutputTest +check_PROGRAMS += SVGOutputTest +SVGOutputTest_SOURCES = SVGOutputTest.cpp testutil.hpp +SVGOutputTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +SVGOutputTest_LDADD = $(TESTLIBS) TESTS += TensorProductPatchTest check_PROGRAMS += TensorProductPatchTest -TensorProductPatchTest_SOURCES = TensorProductPatchTest.cpp +TensorProductPatchTest_SOURCES = TensorProductPatchTest.cpp testutil.hpp TensorProductPatchTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -TensorProductPatchTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +TensorProductPatchTest_LDADD = $(TESTLIBS) + +TESTS += TFMReaderTest +check_PROGRAMS += TFMReaderTest +TFMReaderTest_SOURCES = TFMReaderTest.cpp testutil.hpp +TFMReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +TFMReaderTest_LDADD = $(TESTLIBS) TESTS += ToUnicodeMapTest check_PROGRAMS += ToUnicodeMapTest -ToUnicodeMapTest_SOURCES = ToUnicodeMapTest.cpp +ToUnicodeMapTest_SOURCES = ToUnicodeMapTest.cpp testutil.hpp ToUnicodeMapTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -ToUnicodeMapTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +ToUnicodeMapTest_LDADD = $(TESTLIBS) + +TESTS += TpicSpecialTest +check_PROGRAMS += TpicSpecialTest +TpicSpecialTest_SOURCES = TpicSpecialTest.cpp testutil.hpp +TpicSpecialTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +TpicSpecialTest_LDADD = $(TESTLIBS) TESTS += TriangularPatchTest check_PROGRAMS += TriangularPatchTest -TriangularPatchTest_SOURCES = TriangularPatchTest.cpp +TriangularPatchTest_SOURCES = TriangularPatchTest.cpp testutil.hpp TriangularPatchTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -TriangularPatchTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +TriangularPatchTest_LDADD = $(TESTLIBS) TESTS += UnicodeTest check_PROGRAMS += UnicodeTest -UnicodeTest_SOURCES = UnicodeTest.cpp +UnicodeTest_SOURCES = UnicodeTest.cpp testutil.hpp UnicodeTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -UnicodeTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +UnicodeTest_LDADD = $(TESTLIBS) TESTS += UtilityTest check_PROGRAMS += UtilityTest -UtilityTest_SOURCES = UtilityTest.cpp +UtilityTest_SOURCES = UtilityTest.cpp testutil.hpp UtilityTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -UtilityTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +UtilityTest_LDADD = $(TESTLIBS) TESTS += VectorIteratorTest check_PROGRAMS += VectorIteratorTest -VectorIteratorTest_SOURCES = VectorIteratorTest.cpp +VectorIteratorTest_SOURCES = VectorIteratorTest.cpp testutil.hpp VectorIteratorTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -VectorIteratorTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +VectorIteratorTest_LDADD = $(TESTLIBS) TESTS += VectorStreamTest check_PROGRAMS += VectorStreamTest -VectorStreamTest_SOURCES = VectorStreamTest.cpp +VectorStreamTest_SOURCES = VectorStreamTest.cpp testutil.hpp VectorStreamTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -VectorStreamTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +VectorStreamTest_LDADD = $(TESTLIBS) TESTS += XMLNodeTest check_PROGRAMS += XMLNodeTest -XMLNodeTest_SOURCES = XMLNodeTest.cpp +XMLNodeTest_SOURCES = XMLNodeTest.cpp testutil.hpp XMLNodeTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -XMLNodeTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +XMLNodeTest_LDADD = $(TESTLIBS) TESTS += XMLStringTest check_PROGRAMS += XMLStringTest -XMLStringTest_SOURCES = XMLStringTest.cpp +XMLStringTest_SOURCES = XMLStringTest.cpp testutil.hpp XMLStringTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -XMLStringTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +XMLStringTest_LDADD = $(TESTLIBS) EXTRA_DIST += check-conv genhashcheck.py normalize.xsl TESTS += check-conv diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.in index 21290bcba7a..70c068ddd44 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -89,38 +89,42 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ TESTS = hashcheck$(EXEEXT) BezierTest$(EXEEXT) BitmapTest$(EXEEXT) \ - BoundingBoxTest$(EXEEXT) CMapManagerTest$(EXEEXT) \ - CMapReaderTest$(EXEEXT) CMapTest$(EXEEXT) CRC32Test$(EXEEXT) \ - CalculatorTest$(EXEEXT) ColorSpecialTest$(EXEEXT) \ - ColorTest$(EXEEXT) CommandLineTest$(EXEEXT) \ + BoundingBoxTest$(EXEEXT) CalculatorTest$(EXEEXT) \ + CMapManagerTest$(EXEEXT) CMapReaderTest$(EXEEXT) \ + CMapTest$(EXEEXT) ColorSpecialTest$(EXEEXT) ColorTest$(EXEEXT) \ + CommandLineTest$(EXEEXT) CRC32Test$(EXEEXT) \ DependencyGraphTest$(EXEEXT) DirectoryTest$(EXEEXT) \ - DvisvgmSpecialTest$(EXEEXT) EmSpecialTest$(EXEEXT) \ - FileFinderTest$(EXEEXT) FilePathTest$(EXEEXT) \ - FileSystemTest$(EXEEXT) FontCacheTest$(EXEEXT) \ - FontManagerTest$(EXEEXT) FontMapTest$(EXEEXT) \ - GFGlyphTracerTest$(EXEEXT) GFReaderTest$(EXEEXT) \ - GhostscriptTest$(EXEEXT) GraphicsPathTest$(EXEEXT) \ - JFMReaderTest$(EXEEXT) LengthTest$(EXEEXT) \ - MapLineTest$(EXEEXT) MatrixTest$(EXEEXT) \ - MessageExceptionTest$(EXEEXT) PSInterpreterTest$(EXEEXT) \ - PageRagesTest$(EXEEXT) PageSizeTest$(EXEEXT) PairTest$(EXEEXT) \ - PapersizeSpecialTest$(EXEEXT) RangeMapTest$(EXEEXT) \ - SVGOutputTest$(EXEEXT) ShadingPatchTest$(EXEEXT) \ + DVIReaderTest$(EXEEXT) DvisvgmSpecialTest$(EXEEXT) \ + EmSpecialTest$(EXEEXT) FileFinderTest$(EXEEXT) \ + FilePathTest$(EXEEXT) FileSystemTest$(EXEEXT) \ + FontCacheTest$(EXEEXT) FontManagerTest$(EXEEXT) \ + FontMapTest$(EXEEXT) GFGlyphTracerTest$(EXEEXT) \ + GFReaderTest$(EXEEXT) GhostscriptTest$(EXEEXT) \ + GraphicsPathTest$(EXEEXT) JFMReaderTest$(EXEEXT) \ + LengthTest$(EXEEXT) MapLineTest$(EXEEXT) MatrixTest$(EXEEXT) \ + MessageExceptionTest$(EXEEXT) PageRagesTest$(EXEEXT) \ + PageSizeTest$(EXEEXT) PairTest$(EXEEXT) \ + PapersizeSpecialTest$(EXEEXT) PDFParserTest$(EXEEXT) \ + PSInterpreterTest$(EXEEXT) RangeMapTest$(EXEEXT) \ + ShadingPatchTest$(EXEEXT) SpecialManagerTest$(EXEEXT) \ SplittedCharInputBufferTest$(EXEEXT) \ StreamInputBufferTest$(EXEEXT) StreamReaderTest$(EXEEXT) \ - StreamWriterTest$(EXEEXT) SubfontTest$(EXEEXT) \ - TFMReaderTest$(EXEEXT) TensorProductPatchTest$(EXEEXT) \ - ToUnicodeMapTest$(EXEEXT) TriangularPatchTest$(EXEEXT) \ - UnicodeTest$(EXEEXT) UtilityTest$(EXEEXT) \ - VectorIteratorTest$(EXEEXT) VectorStreamTest$(EXEEXT) \ - XMLNodeTest$(EXEEXT) XMLStringTest$(EXEEXT) check-conv + StreamWriterTest$(EXEEXT) StringMatcherTest$(EXEEXT) \ + SubfontTest$(EXEEXT) SVGOutputTest$(EXEEXT) \ + TensorProductPatchTest$(EXEEXT) TFMReaderTest$(EXEEXT) \ + ToUnicodeMapTest$(EXEEXT) TpicSpecialTest$(EXEEXT) \ + TriangularPatchTest$(EXEEXT) UnicodeTest$(EXEEXT) \ + UtilityTest$(EXEEXT) VectorIteratorTest$(EXEEXT) \ + VectorStreamTest$(EXEEXT) XMLNodeTest$(EXEEXT) \ + XMLStringTest$(EXEEXT) check-conv check_PROGRAMS = hashcheck$(EXEEXT) BezierTest$(EXEEXT) \ BitmapTest$(EXEEXT) BoundingBoxTest$(EXEEXT) \ - CMapManagerTest$(EXEEXT) CMapReaderTest$(EXEEXT) \ - CMapTest$(EXEEXT) CRC32Test$(EXEEXT) CalculatorTest$(EXEEXT) \ + CalculatorTest$(EXEEXT) CMapManagerTest$(EXEEXT) \ + CMapReaderTest$(EXEEXT) CMapTest$(EXEEXT) \ ColorSpecialTest$(EXEEXT) ColorTest$(EXEEXT) \ - CommandLineTest$(EXEEXT) DependencyGraphTest$(EXEEXT) \ - DirectoryTest$(EXEEXT) DvisvgmSpecialTest$(EXEEXT) \ + CommandLineTest$(EXEEXT) CRC32Test$(EXEEXT) \ + DependencyGraphTest$(EXEEXT) DirectoryTest$(EXEEXT) \ + DVIReaderTest$(EXEEXT) DvisvgmSpecialTest$(EXEEXT) \ EmSpecialTest$(EXEEXT) FileFinderTest$(EXEEXT) \ FilePathTest$(EXEEXT) FileSystemTest$(EXEEXT) \ FontCacheTest$(EXEEXT) FontManagerTest$(EXEEXT) \ @@ -128,18 +132,26 @@ check_PROGRAMS = hashcheck$(EXEEXT) BezierTest$(EXEEXT) \ GFReaderTest$(EXEEXT) GhostscriptTest$(EXEEXT) \ GraphicsPathTest$(EXEEXT) JFMReaderTest$(EXEEXT) \ LengthTest$(EXEEXT) MapLineTest$(EXEEXT) MatrixTest$(EXEEXT) \ - MessageExceptionTest$(EXEEXT) PSInterpreterTest$(EXEEXT) \ - PageRagesTest$(EXEEXT) PageSizeTest$(EXEEXT) PairTest$(EXEEXT) \ - PapersizeSpecialTest$(EXEEXT) RangeMapTest$(EXEEXT) \ - SVGOutputTest$(EXEEXT) ShadingPatchTest$(EXEEXT) \ + MessageExceptionTest$(EXEEXT) PageRagesTest$(EXEEXT) \ + PageSizeTest$(EXEEXT) PairTest$(EXEEXT) \ + PapersizeSpecialTest$(EXEEXT) PDFParserTest$(EXEEXT) \ + PSInterpreterTest$(EXEEXT) RangeMapTest$(EXEEXT) \ + ShadingPatchTest$(EXEEXT) SpecialManagerTest$(EXEEXT) \ SplittedCharInputBufferTest$(EXEEXT) \ StreamInputBufferTest$(EXEEXT) StreamReaderTest$(EXEEXT) \ - StreamWriterTest$(EXEEXT) SubfontTest$(EXEEXT) \ - TFMReaderTest$(EXEEXT) TensorProductPatchTest$(EXEEXT) \ - ToUnicodeMapTest$(EXEEXT) TriangularPatchTest$(EXEEXT) \ - UnicodeTest$(EXEEXT) UtilityTest$(EXEEXT) \ - VectorIteratorTest$(EXEEXT) VectorStreamTest$(EXEEXT) \ - XMLNodeTest$(EXEEXT) XMLStringTest$(EXEEXT) + StreamWriterTest$(EXEEXT) StringMatcherTest$(EXEEXT) \ + SubfontTest$(EXEEXT) SVGOutputTest$(EXEEXT) \ + TensorProductPatchTest$(EXEEXT) TFMReaderTest$(EXEEXT) \ + ToUnicodeMapTest$(EXEEXT) TpicSpecialTest$(EXEEXT) \ + TriangularPatchTest$(EXEEXT) UnicodeTest$(EXEEXT) \ + UtilityTest$(EXEEXT) VectorIteratorTest$(EXEEXT) \ + VectorStreamTest$(EXEEXT) XMLNodeTest$(EXEEXT) \ + XMLStringTest$(EXEEXT) +@ENABLE_WOFF_TRUE@am__append_1 = \ +@ENABLE_WOFF_TRUE@ ../libs/ff-woff/libfontforge.a \ +@ENABLE_WOFF_TRUE@ ../libs/woff2/libwoff2.a \ +@ENABLE_WOFF_TRUE@ ../libs/brotli/libbrotli.a + subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_code_coverage.m4 \ @@ -157,7 +169,7 @@ CONFIG_CLEAN_VPATH_FILES = libgtest_la_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp am_libgtest_la_OBJECTS = gtest/src/libgtest_la-gtest-all.lo \ - gtest/src/libgtest_la-gtest_main.lo + libgtest_la-testmain.lo libgtest_la_OBJECTS = $(am_libgtest_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -169,239 +181,207 @@ libgtest_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ am_BezierTest_OBJECTS = BezierTest-BezierTest.$(OBJEXT) BezierTest_OBJECTS = $(am_BezierTest_OBJECTS) am__DEPENDENCIES_1 = -BezierTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +am__DEPENDENCIES_2 = libgtest.la ../src/libdvisvgm.a \ + ../libs/xxHash/libxxhash.a $(am__append_1) \ + $(am__DEPENDENCIES_1) +BezierTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_BitmapTest_OBJECTS = BitmapTest-BitmapTest.$(OBJEXT) BitmapTest_OBJECTS = $(am_BitmapTest_OBJECTS) -BitmapTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +BitmapTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_BoundingBoxTest_OBJECTS = \ BoundingBoxTest-BoundingBoxTest.$(OBJEXT) BoundingBoxTest_OBJECTS = $(am_BoundingBoxTest_OBJECTS) -BoundingBoxTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +BoundingBoxTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_CMapManagerTest_OBJECTS = \ CMapManagerTest-CMapManagerTest.$(OBJEXT) CMapManagerTest_OBJECTS = $(am_CMapManagerTest_OBJECTS) -CMapManagerTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +CMapManagerTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_CMapReaderTest_OBJECTS = CMapReaderTest-CMapReaderTest.$(OBJEXT) CMapReaderTest_OBJECTS = $(am_CMapReaderTest_OBJECTS) -CMapReaderTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +CMapReaderTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_CMapTest_OBJECTS = CMapTest-CMapTest.$(OBJEXT) CMapTest_OBJECTS = $(am_CMapTest_OBJECTS) -CMapTest_DEPENDENCIES = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a \ - libgtest.la $(am__DEPENDENCIES_1) +CMapTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_CRC32Test_OBJECTS = CRC32Test-CRC32Test.$(OBJEXT) CRC32Test_OBJECTS = $(am_CRC32Test_OBJECTS) -CRC32Test_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +CRC32Test_DEPENDENCIES = $(am__DEPENDENCIES_2) am_CalculatorTest_OBJECTS = CalculatorTest-CalculatorTest.$(OBJEXT) CalculatorTest_OBJECTS = $(am_CalculatorTest_OBJECTS) -CalculatorTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +CalculatorTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_ColorSpecialTest_OBJECTS = \ ColorSpecialTest-ColorSpecialTest.$(OBJEXT) ColorSpecialTest_OBJECTS = $(am_ColorSpecialTest_OBJECTS) -ColorSpecialTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +ColorSpecialTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_ColorTest_OBJECTS = ColorTest-ColorTest.$(OBJEXT) ColorTest_OBJECTS = $(am_ColorTest_OBJECTS) -ColorTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +ColorTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_CommandLineTest_OBJECTS = \ CommandLineTest-CommandLineTest.$(OBJEXT) CommandLineTest_OBJECTS = $(am_CommandLineTest_OBJECTS) -CommandLineTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +CommandLineTest_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_DVIReaderTest_OBJECTS = DVIReaderTest-DVIReaderTest.$(OBJEXT) +DVIReaderTest_OBJECTS = $(am_DVIReaderTest_OBJECTS) +DVIReaderTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_DependencyGraphTest_OBJECTS = \ DependencyGraphTest-DependencyGraphTest.$(OBJEXT) DependencyGraphTest_OBJECTS = $(am_DependencyGraphTest_OBJECTS) -DependencyGraphTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +DependencyGraphTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_DirectoryTest_OBJECTS = DirectoryTest-DirectoryTest.$(OBJEXT) DirectoryTest_OBJECTS = $(am_DirectoryTest_OBJECTS) -DirectoryTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +DirectoryTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_DvisvgmSpecialTest_OBJECTS = \ DvisvgmSpecialTest-DvisvgmSpecialTest.$(OBJEXT) DvisvgmSpecialTest_OBJECTS = $(am_DvisvgmSpecialTest_OBJECTS) -DvisvgmSpecialTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +DvisvgmSpecialTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_EmSpecialTest_OBJECTS = EmSpecialTest-EmSpecialTest.$(OBJEXT) EmSpecialTest_OBJECTS = $(am_EmSpecialTest_OBJECTS) -EmSpecialTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +EmSpecialTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_FileFinderTest_OBJECTS = FileFinderTest-FileFinderTest.$(OBJEXT) FileFinderTest_OBJECTS = $(am_FileFinderTest_OBJECTS) -FileFinderTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +FileFinderTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_FilePathTest_OBJECTS = FilePathTest-FilePathTest.$(OBJEXT) FilePathTest_OBJECTS = $(am_FilePathTest_OBJECTS) -FilePathTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +FilePathTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_FileSystemTest_OBJECTS = FileSystemTest-FileSystemTest.$(OBJEXT) FileSystemTest_OBJECTS = $(am_FileSystemTest_OBJECTS) -FileSystemTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +FileSystemTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_FontCacheTest_OBJECTS = FontCacheTest-FontCacheTest.$(OBJEXT) FontCacheTest_OBJECTS = $(am_FontCacheTest_OBJECTS) -FontCacheTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +FontCacheTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_FontManagerTest_OBJECTS = \ FontManagerTest-FontManagerTest.$(OBJEXT) FontManagerTest_OBJECTS = $(am_FontManagerTest_OBJECTS) -FontManagerTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +FontManagerTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_FontMapTest_OBJECTS = FontMapTest-FontMapTest.$(OBJEXT) FontMapTest_OBJECTS = $(am_FontMapTest_OBJECTS) -FontMapTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +FontMapTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_GFGlyphTracerTest_OBJECTS = \ GFGlyphTracerTest-GFGlyphTracerTest.$(OBJEXT) GFGlyphTracerTest_OBJECTS = $(am_GFGlyphTracerTest_OBJECTS) -GFGlyphTracerTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +GFGlyphTracerTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_GFReaderTest_OBJECTS = GFReaderTest-GFReaderTest.$(OBJEXT) GFReaderTest_OBJECTS = $(am_GFReaderTest_OBJECTS) -GFReaderTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +GFReaderTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_GhostscriptTest_OBJECTS = \ GhostscriptTest-GhostscriptTest.$(OBJEXT) GhostscriptTest_OBJECTS = $(am_GhostscriptTest_OBJECTS) -GhostscriptTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +GhostscriptTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_GraphicsPathTest_OBJECTS = \ GraphicsPathTest-GraphicsPathTest.$(OBJEXT) GraphicsPathTest_OBJECTS = $(am_GraphicsPathTest_OBJECTS) -GraphicsPathTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +GraphicsPathTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_JFMReaderTest_OBJECTS = JFMReaderTest-JFMReaderTest.$(OBJEXT) JFMReaderTest_OBJECTS = $(am_JFMReaderTest_OBJECTS) -JFMReaderTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +JFMReaderTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_LengthTest_OBJECTS = LengthTest-LengthTest.$(OBJEXT) LengthTest_OBJECTS = $(am_LengthTest_OBJECTS) -LengthTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +LengthTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_MapLineTest_OBJECTS = MapLineTest-MapLineTest.$(OBJEXT) MapLineTest_OBJECTS = $(am_MapLineTest_OBJECTS) -MapLineTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +MapLineTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_MatrixTest_OBJECTS = MatrixTest-MatrixTest.$(OBJEXT) MatrixTest_OBJECTS = $(am_MatrixTest_OBJECTS) -MatrixTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +MatrixTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_MessageExceptionTest_OBJECTS = \ MessageExceptionTest-MessageExceptionTest.$(OBJEXT) MessageExceptionTest_OBJECTS = $(am_MessageExceptionTest_OBJECTS) -MessageExceptionTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +MessageExceptionTest_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_PDFParserTest_OBJECTS = PDFParserTest-PDFParserTest.$(OBJEXT) +PDFParserTest_OBJECTS = $(am_PDFParserTest_OBJECTS) +PDFParserTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_PSInterpreterTest_OBJECTS = \ PSInterpreterTest-PSInterpreterTest.$(OBJEXT) PSInterpreterTest_OBJECTS = $(am_PSInterpreterTest_OBJECTS) -PSInterpreterTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +PSInterpreterTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_PageRagesTest_OBJECTS = PageRagesTest-PageRagesTest.$(OBJEXT) PageRagesTest_OBJECTS = $(am_PageRagesTest_OBJECTS) -PageRagesTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +PageRagesTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_PageSizeTest_OBJECTS = PageSizeTest-PageSizeTest.$(OBJEXT) PageSizeTest_OBJECTS = $(am_PageSizeTest_OBJECTS) -PageSizeTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +PageSizeTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_PairTest_OBJECTS = PairTest-PairTest.$(OBJEXT) PairTest_OBJECTS = $(am_PairTest_OBJECTS) -PairTest_DEPENDENCIES = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a \ - libgtest.la $(am__DEPENDENCIES_1) +PairTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_PapersizeSpecialTest_OBJECTS = \ PapersizeSpecialTest-PapersizeSpecialTest.$(OBJEXT) PapersizeSpecialTest_OBJECTS = $(am_PapersizeSpecialTest_OBJECTS) -PapersizeSpecialTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +PapersizeSpecialTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_RangeMapTest_OBJECTS = RangeMapTest-RangeMapTest.$(OBJEXT) RangeMapTest_OBJECTS = $(am_RangeMapTest_OBJECTS) -RangeMapTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +RangeMapTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_SVGOutputTest_OBJECTS = SVGOutputTest-SVGOutputTest.$(OBJEXT) SVGOutputTest_OBJECTS = $(am_SVGOutputTest_OBJECTS) -SVGOutputTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +SVGOutputTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_ShadingPatchTest_OBJECTS = \ ShadingPatchTest-ShadingPatchTest.$(OBJEXT) ShadingPatchTest_OBJECTS = $(am_ShadingPatchTest_OBJECTS) -ShadingPatchTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +ShadingPatchTest_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_SpecialManagerTest_OBJECTS = \ + SpecialManagerTest-SpecialManagerTest.$(OBJEXT) +SpecialManagerTest_OBJECTS = $(am_SpecialManagerTest_OBJECTS) +SpecialManagerTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_SplittedCharInputBufferTest_OBJECTS = SplittedCharInputBufferTest-SplittedCharInputBufferTest.$(OBJEXT) SplittedCharInputBufferTest_OBJECTS = \ $(am_SplittedCharInputBufferTest_OBJECTS) -SplittedCharInputBufferTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +SplittedCharInputBufferTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_StreamInputBufferTest_OBJECTS = \ StreamInputBufferTest-StreamInputBufferTest.$(OBJEXT) StreamInputBufferTest_OBJECTS = $(am_StreamInputBufferTest_OBJECTS) -StreamInputBufferTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +StreamInputBufferTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_StreamReaderTest_OBJECTS = \ StreamReaderTest-StreamReaderTest.$(OBJEXT) StreamReaderTest_OBJECTS = $(am_StreamReaderTest_OBJECTS) -StreamReaderTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +StreamReaderTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_StreamWriterTest_OBJECTS = \ StreamWriterTest-StreamWriterTest.$(OBJEXT) StreamWriterTest_OBJECTS = $(am_StreamWriterTest_OBJECTS) -StreamWriterTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +StreamWriterTest_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_StringMatcherTest_OBJECTS = \ + StringMatcherTest-StringMatcherTest.$(OBJEXT) +StringMatcherTest_OBJECTS = $(am_StringMatcherTest_OBJECTS) +StringMatcherTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_SubfontTest_OBJECTS = SubfontTest-SubfontTest.$(OBJEXT) SubfontTest_OBJECTS = $(am_SubfontTest_OBJECTS) -SubfontTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +SubfontTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_TFMReaderTest_OBJECTS = TFMReaderTest-TFMReaderTest.$(OBJEXT) TFMReaderTest_OBJECTS = $(am_TFMReaderTest_OBJECTS) -TFMReaderTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +TFMReaderTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_TensorProductPatchTest_OBJECTS = \ TensorProductPatchTest-TensorProductPatchTest.$(OBJEXT) TensorProductPatchTest_OBJECTS = $(am_TensorProductPatchTest_OBJECTS) -TensorProductPatchTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +TensorProductPatchTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_ToUnicodeMapTest_OBJECTS = \ ToUnicodeMapTest-ToUnicodeMapTest.$(OBJEXT) ToUnicodeMapTest_OBJECTS = $(am_ToUnicodeMapTest_OBJECTS) -ToUnicodeMapTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +ToUnicodeMapTest_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_TpicSpecialTest_OBJECTS = \ + TpicSpecialTest-TpicSpecialTest.$(OBJEXT) +TpicSpecialTest_OBJECTS = $(am_TpicSpecialTest_OBJECTS) +TpicSpecialTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_TriangularPatchTest_OBJECTS = \ TriangularPatchTest-TriangularPatchTest.$(OBJEXT) TriangularPatchTest_OBJECTS = $(am_TriangularPatchTest_OBJECTS) -TriangularPatchTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +TriangularPatchTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_UnicodeTest_OBJECTS = UnicodeTest-UnicodeTest.$(OBJEXT) UnicodeTest_OBJECTS = $(am_UnicodeTest_OBJECTS) -UnicodeTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +UnicodeTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_UtilityTest_OBJECTS = UtilityTest-UtilityTest.$(OBJEXT) UtilityTest_OBJECTS = $(am_UtilityTest_OBJECTS) -UtilityTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +UtilityTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_VectorIteratorTest_OBJECTS = \ VectorIteratorTest-VectorIteratorTest.$(OBJEXT) VectorIteratorTest_OBJECTS = $(am_VectorIteratorTest_OBJECTS) -VectorIteratorTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +VectorIteratorTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_VectorStreamTest_OBJECTS = \ VectorStreamTest-VectorStreamTest.$(OBJEXT) VectorStreamTest_OBJECTS = $(am_VectorStreamTest_OBJECTS) -VectorStreamTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +VectorStreamTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_XMLNodeTest_OBJECTS = XMLNodeTest-XMLNodeTest.$(OBJEXT) XMLNodeTest_OBJECTS = $(am_XMLNodeTest_OBJECTS) -XMLNodeTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +XMLNodeTest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_XMLStringTest_OBJECTS = XMLStringTest-XMLStringTest.$(OBJEXT) XMLStringTest_OBJECTS = $(am_XMLStringTest_OBJECTS) -XMLStringTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../libs/xxHash/libxxhash.a libgtest.la $(am__DEPENDENCIES_1) +XMLStringTest_DEPENDENCIES = $(am__DEPENDENCIES_2) nodist_hashcheck_OBJECTS = hashcheck-hashcheck.$(OBJEXT) hashcheck_OBJECTS = $(nodist_hashcheck_OBJECTS) hashcheck_DEPENDENCIES = ../libs/xxHash/libxxhash.a @@ -439,31 +419,51 @@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = SOURCES = $(libgtest_la_SOURCES) $(BezierTest_SOURCES) \ $(BitmapTest_SOURCES) $(BoundingBoxTest_SOURCES) \ $(CMapManagerTest_SOURCES) $(CMapReaderTest_SOURCES) \ $(CMapTest_SOURCES) $(CRC32Test_SOURCES) \ $(CalculatorTest_SOURCES) $(ColorSpecialTest_SOURCES) \ $(ColorTest_SOURCES) $(CommandLineTest_SOURCES) \ - $(DependencyGraphTest_SOURCES) $(DirectoryTest_SOURCES) \ - $(DvisvgmSpecialTest_SOURCES) $(EmSpecialTest_SOURCES) \ - $(FileFinderTest_SOURCES) $(FilePathTest_SOURCES) \ - $(FileSystemTest_SOURCES) $(FontCacheTest_SOURCES) \ - $(FontManagerTest_SOURCES) $(FontMapTest_SOURCES) \ - $(GFGlyphTracerTest_SOURCES) $(GFReaderTest_SOURCES) \ - $(GhostscriptTest_SOURCES) $(GraphicsPathTest_SOURCES) \ - $(JFMReaderTest_SOURCES) $(LengthTest_SOURCES) \ - $(MapLineTest_SOURCES) $(MatrixTest_SOURCES) \ - $(MessageExceptionTest_SOURCES) $(PSInterpreterTest_SOURCES) \ + $(DVIReaderTest_SOURCES) $(DependencyGraphTest_SOURCES) \ + $(DirectoryTest_SOURCES) $(DvisvgmSpecialTest_SOURCES) \ + $(EmSpecialTest_SOURCES) $(FileFinderTest_SOURCES) \ + $(FilePathTest_SOURCES) $(FileSystemTest_SOURCES) \ + $(FontCacheTest_SOURCES) $(FontManagerTest_SOURCES) \ + $(FontMapTest_SOURCES) $(GFGlyphTracerTest_SOURCES) \ + $(GFReaderTest_SOURCES) $(GhostscriptTest_SOURCES) \ + $(GraphicsPathTest_SOURCES) $(JFMReaderTest_SOURCES) \ + $(LengthTest_SOURCES) $(MapLineTest_SOURCES) \ + $(MatrixTest_SOURCES) $(MessageExceptionTest_SOURCES) \ + $(PDFParserTest_SOURCES) $(PSInterpreterTest_SOURCES) \ $(PageRagesTest_SOURCES) $(PageSizeTest_SOURCES) \ $(PairTest_SOURCES) $(PapersizeSpecialTest_SOURCES) \ $(RangeMapTest_SOURCES) $(SVGOutputTest_SOURCES) \ - $(ShadingPatchTest_SOURCES) \ + $(ShadingPatchTest_SOURCES) $(SpecialManagerTest_SOURCES) \ $(SplittedCharInputBufferTest_SOURCES) \ $(StreamInputBufferTest_SOURCES) $(StreamReaderTest_SOURCES) \ - $(StreamWriterTest_SOURCES) $(SubfontTest_SOURCES) \ - $(TFMReaderTest_SOURCES) $(TensorProductPatchTest_SOURCES) \ - $(ToUnicodeMapTest_SOURCES) $(TriangularPatchTest_SOURCES) \ + $(StreamWriterTest_SOURCES) $(StringMatcherTest_SOURCES) \ + $(SubfontTest_SOURCES) $(TFMReaderTest_SOURCES) \ + $(TensorProductPatchTest_SOURCES) $(ToUnicodeMapTest_SOURCES) \ + $(TpicSpecialTest_SOURCES) $(TriangularPatchTest_SOURCES) \ $(UnicodeTest_SOURCES) $(UtilityTest_SOURCES) \ $(VectorIteratorTest_SOURCES) $(VectorStreamTest_SOURCES) \ $(XMLNodeTest_SOURCES) $(XMLStringTest_SOURCES) \ @@ -474,25 +474,27 @@ DIST_SOURCES = $(libgtest_la_SOURCES) $(BezierTest_SOURCES) \ $(CMapTest_SOURCES) $(CRC32Test_SOURCES) \ $(CalculatorTest_SOURCES) $(ColorSpecialTest_SOURCES) \ $(ColorTest_SOURCES) $(CommandLineTest_SOURCES) \ - $(DependencyGraphTest_SOURCES) $(DirectoryTest_SOURCES) \ - $(DvisvgmSpecialTest_SOURCES) $(EmSpecialTest_SOURCES) \ - $(FileFinderTest_SOURCES) $(FilePathTest_SOURCES) \ - $(FileSystemTest_SOURCES) $(FontCacheTest_SOURCES) \ - $(FontManagerTest_SOURCES) $(FontMapTest_SOURCES) \ - $(GFGlyphTracerTest_SOURCES) $(GFReaderTest_SOURCES) \ - $(GhostscriptTest_SOURCES) $(GraphicsPathTest_SOURCES) \ - $(JFMReaderTest_SOURCES) $(LengthTest_SOURCES) \ - $(MapLineTest_SOURCES) $(MatrixTest_SOURCES) \ - $(MessageExceptionTest_SOURCES) $(PSInterpreterTest_SOURCES) \ + $(DVIReaderTest_SOURCES) $(DependencyGraphTest_SOURCES) \ + $(DirectoryTest_SOURCES) $(DvisvgmSpecialTest_SOURCES) \ + $(EmSpecialTest_SOURCES) $(FileFinderTest_SOURCES) \ + $(FilePathTest_SOURCES) $(FileSystemTest_SOURCES) \ + $(FontCacheTest_SOURCES) $(FontManagerTest_SOURCES) \ + $(FontMapTest_SOURCES) $(GFGlyphTracerTest_SOURCES) \ + $(GFReaderTest_SOURCES) $(GhostscriptTest_SOURCES) \ + $(GraphicsPathTest_SOURCES) $(JFMReaderTest_SOURCES) \ + $(LengthTest_SOURCES) $(MapLineTest_SOURCES) \ + $(MatrixTest_SOURCES) $(MessageExceptionTest_SOURCES) \ + $(PDFParserTest_SOURCES) $(PSInterpreterTest_SOURCES) \ $(PageRagesTest_SOURCES) $(PageSizeTest_SOURCES) \ $(PairTest_SOURCES) $(PapersizeSpecialTest_SOURCES) \ $(RangeMapTest_SOURCES) $(SVGOutputTest_SOURCES) \ - $(ShadingPatchTest_SOURCES) \ + $(ShadingPatchTest_SOURCES) $(SpecialManagerTest_SOURCES) \ $(SplittedCharInputBufferTest_SOURCES) \ $(StreamInputBufferTest_SOURCES) $(StreamReaderTest_SOURCES) \ - $(StreamWriterTest_SOURCES) $(SubfontTest_SOURCES) \ - $(TFMReaderTest_SOURCES) $(TensorProductPatchTest_SOURCES) \ - $(ToUnicodeMapTest_SOURCES) $(TriangularPatchTest_SOURCES) \ + $(StreamWriterTest_SOURCES) $(StringMatcherTest_SOURCES) \ + $(SubfontTest_SOURCES) $(TFMReaderTest_SOURCES) \ + $(TensorProductPatchTest_SOURCES) $(ToUnicodeMapTest_SOURCES) \ + $(TpicSpecialTest_SOURCES) $(TriangularPatchTest_SOURCES) \ $(UnicodeTest_SOURCES) $(UtilityTest_SOURCES) \ $(VectorIteratorTest_SOURCES) $(VectorStreamTest_SOURCES) \ $(XMLNodeTest_SOURCES) $(XMLStringTest_SOURCES) @@ -817,6 +819,8 @@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KPSE_CFLAGS = @KPSE_CFLAGS@ +KPSE_LIBS = @KPSE_LIBS@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ @@ -852,6 +856,8 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +TTFAUTOHINT_CFLAGS = @TTFAUTOHINT_CFLAGS@ +TTFAUTOHINT_LIBS = @TTFAUTOHINT_LIBS@ VERSION = @VERSION@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ @@ -900,7 +906,6 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ -runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -915,178 +920,199 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = data check_LTLIBRARIES = libgtest.la -libgtest_la_SOURCES = gtest/src/gtest-all.cc gtest/src/gtest_main.cc +libgtest_la_SOURCES = gtest/src/gtest-all.cc testmain.cpp libgtest_la_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -I$(top_srcdir)/tests/gtest libgtest_la_LDFLAGS = -pthread EXTRA_DIST = gtest/LICENSE gtest/include gtest/src/gtest.cc \ gtest/src/gtest-death-test.cc gtest/src/gtest-filepath.cc \ - gtest/src/gtest-internal-inl.h gtest/src/gtest-port.cc \ - gtest/src/gtest-printers.cc gtest/src/gtest-test-part.cc \ - gtest/src/gtest-typed-test.cc check-conv genhashcheck.py \ - normalize.xsl -AM_CXXFLAGS = -I$(top_srcdir)/src -Wall -DSRCDIR='"$(srcdir)"' $(CODE_COVERAGE_CFLAGS) + gtest/src/gtest-internal-inl.h gtest/src/gtest_main.cc \ + gtest/src/gtest-port.cc gtest/src/gtest-printers.cc \ + gtest/src/gtest-test-part.cc gtest/src/gtest-typed-test.cc \ + check-conv genhashcheck.py normalize.xsl +AM_CXXFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/libs/variant/include \ + -Wall -Wno-mismatched-tags \ + -DBUILDDIR='"$(abs_builddir)"' -DSRCDIR='"$(abs_srcdir)"' \ + $(CODE_COVERAGE_CFLAGS) + nodist_hashcheck_SOURCES = hashcheck.cpp hashcheck_LDADD = ../libs/xxHash/libxxhash.a hashcheck_CPPFLAGS = -I$(top_srcdir)/libs/xxHash -BezierTest_SOURCES = BezierTest.cpp +TESTLIBS = libgtest.la ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a \ + -lpotrace -lfreetype $(am__append_1) $(CODE_COVERAGE_LDFLAGS) +BezierTest_SOURCES = BezierTest.cpp testutil.hpp BezierTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -BezierTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -BitmapTest_SOURCES = BitmapTest.cpp +BezierTest_LDADD = $(TESTLIBS) +BitmapTest_SOURCES = BitmapTest.cpp testutil.hpp BitmapTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -BitmapTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -BoundingBoxTest_SOURCES = BoundingBoxTest.cpp +BitmapTest_LDADD = $(TESTLIBS) +BoundingBoxTest_SOURCES = BoundingBoxTest.cpp testutil.hpp BoundingBoxTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -BoundingBoxTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -CMapManagerTest_SOURCES = CMapManagerTest.cpp +BoundingBoxTest_LDADD = $(TESTLIBS) +CalculatorTest_SOURCES = CalculatorTest.cpp testutil.hpp +CalculatorTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +CalculatorTest_LDADD = $(TESTLIBS) +CMapManagerTest_SOURCES = CMapManagerTest.cpp testutil.hpp CMapManagerTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -CMapManagerTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -CMapReaderTest_SOURCES = CMapReaderTest.cpp +CMapManagerTest_LDADD = $(TESTLIBS) +CMapReaderTest_SOURCES = CMapReaderTest.cpp testutil.hpp CMapReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -CMapReaderTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -CMapTest_SOURCES = CMapTest.cpp +CMapReaderTest_LDADD = $(TESTLIBS) +CMapTest_SOURCES = CMapTest.cpp testutil.hpp CMapTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -CMapTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -CRC32Test_SOURCES = CRC32Test.cpp -CRC32Test_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -CRC32Test_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -CalculatorTest_SOURCES = CalculatorTest.cpp -CalculatorTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -CalculatorTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -ColorSpecialTest_SOURCES = ColorSpecialTest.cpp +CMapTest_LDADD = $(TESTLIBS) +ColorSpecialTest_SOURCES = ColorSpecialTest.cpp testutil.hpp ColorSpecialTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -ColorSpecialTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -ColorTest_SOURCES = ColorTest.cpp +ColorSpecialTest_LDADD = $(TESTLIBS) +ColorTest_SOURCES = ColorTest.cpp testutil.hpp ColorTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -ColorTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -CommandLineTest_SOURCES = CommandLineTest.cpp +ColorTest_LDADD = $(TESTLIBS) +CommandLineTest_SOURCES = CommandLineTest.cpp testutil.hpp CommandLineTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -CommandLineTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -DependencyGraphTest_SOURCES = DependencyGraphTest.cpp +CommandLineTest_LDADD = $(TESTLIBS) +CRC32Test_SOURCES = CRC32Test.cpp testutil.hpp +CRC32Test_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +CRC32Test_LDADD = $(TESTLIBS) +DependencyGraphTest_SOURCES = DependencyGraphTest.cpp testutil.hpp DependencyGraphTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -DependencyGraphTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -DirectoryTest_SOURCES = DirectoryTest.cpp +DependencyGraphTest_LDADD = $(TESTLIBS) +DirectoryTest_SOURCES = DirectoryTest.cpp testutil.hpp DirectoryTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -DirectoryTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -DvisvgmSpecialTest_SOURCES = DvisvgmSpecialTest.cpp +DirectoryTest_LDADD = $(TESTLIBS) +DVIReaderTest_SOURCES = DVIReaderTest.cpp testutil.hpp +DVIReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +DVIReaderTest_LDADD = $(TESTLIBS) +DvisvgmSpecialTest_SOURCES = DvisvgmSpecialTest.cpp testutil.hpp DvisvgmSpecialTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -DvisvgmSpecialTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -EmSpecialTest_SOURCES = EmSpecialTest.cpp +DvisvgmSpecialTest_LDADD = $(TESTLIBS) +EmSpecialTest_SOURCES = EmSpecialTest.cpp testutil.hpp EmSpecialTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -EmSpecialTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -FileFinderTest_SOURCES = FileFinderTest.cpp +EmSpecialTest_LDADD = $(TESTLIBS) +FileFinderTest_SOURCES = FileFinderTest.cpp testutil.hpp FileFinderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -FileFinderTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -FilePathTest_SOURCES = FilePathTest.cpp +FileFinderTest_LDADD = $(TESTLIBS) +FilePathTest_SOURCES = FilePathTest.cpp testutil.hpp FilePathTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -FilePathTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -FileSystemTest_SOURCES = FileSystemTest.cpp +FilePathTest_LDADD = $(TESTLIBS) +FileSystemTest_SOURCES = FileSystemTest.cpp testutil.hpp FileSystemTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -FileSystemTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -FontCacheTest_SOURCES = FontCacheTest.cpp +FileSystemTest_LDADD = $(TESTLIBS) +FontCacheTest_SOURCES = FontCacheTest.cpp testutil.hpp FontCacheTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -FontCacheTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -FontManagerTest_SOURCES = FontManagerTest.cpp +FontCacheTest_LDADD = $(TESTLIBS) +FontManagerTest_SOURCES = FontManagerTest.cpp testutil.hpp FontManagerTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -FontManagerTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -FontMapTest_SOURCES = FontMapTest.cpp +FontManagerTest_LDADD = $(TESTLIBS) +FontMapTest_SOURCES = FontMapTest.cpp testutil.hpp FontMapTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -FontMapTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -GFGlyphTracerTest_SOURCES = GFGlyphTracerTest.cpp +FontMapTest_LDADD = $(TESTLIBS) +GFGlyphTracerTest_SOURCES = GFGlyphTracerTest.cpp testutil.hpp GFGlyphTracerTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -GFGlyphTracerTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -GFReaderTest_SOURCES = GFReaderTest.cpp +GFGlyphTracerTest_LDADD = $(TESTLIBS) +GFReaderTest_SOURCES = GFReaderTest.cpp testutil.hpp GFReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -GFReaderTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -GhostscriptTest_SOURCES = GhostscriptTest.cpp +GFReaderTest_LDADD = $(TESTLIBS) +GhostscriptTest_SOURCES = GhostscriptTest.cpp testutil.hpp GhostscriptTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -GhostscriptTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -GraphicsPathTest_SOURCES = GraphicsPathTest.cpp +GhostscriptTest_LDADD = $(TESTLIBS) +GraphicsPathTest_SOURCES = GraphicsPathTest.cpp testutil.hpp GraphicsPathTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -GraphicsPathTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -JFMReaderTest_SOURCES = JFMReaderTest.cpp +GraphicsPathTest_LDADD = $(TESTLIBS) +JFMReaderTest_SOURCES = JFMReaderTest.cpp testutil.hpp JFMReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -JFMReaderTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -LengthTest_SOURCES = LengthTest.cpp +JFMReaderTest_LDADD = $(TESTLIBS) +LengthTest_SOURCES = LengthTest.cpp testutil.hpp LengthTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -LengthTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -MapLineTest_SOURCES = MapLineTest.cpp +LengthTest_LDADD = $(TESTLIBS) +MapLineTest_SOURCES = MapLineTest.cpp testutil.hpp MapLineTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -MapLineTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -MatrixTest_SOURCES = MatrixTest.cpp +MapLineTest_LDADD = $(TESTLIBS) +MatrixTest_SOURCES = MatrixTest.cpp testutil.hpp MatrixTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -MatrixTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -MessageExceptionTest_SOURCES = MessageExceptionTest.cpp +MatrixTest_LDADD = $(TESTLIBS) +MessageExceptionTest_SOURCES = MessageExceptionTest.cpp testutil.hpp MessageExceptionTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -MessageExceptionTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -PSInterpreterTest_SOURCES = PSInterpreterTest.cpp -PSInterpreterTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -PSInterpreterTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -PageRagesTest_SOURCES = PageRagesTest.cpp +MessageExceptionTest_LDADD = $(TESTLIBS) +PageRagesTest_SOURCES = PageRagesTest.cpp testutil.hpp PageRagesTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -PageRagesTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -PageSizeTest_SOURCES = PageSizeTest.cpp +PageRagesTest_LDADD = $(TESTLIBS) +PageSizeTest_SOURCES = PageSizeTest.cpp testutil.hpp PageSizeTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -PageSizeTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -PairTest_SOURCES = PairTest.cpp +PageSizeTest_LDADD = $(TESTLIBS) +PairTest_SOURCES = PairTest.cpp testutil.hpp PairTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -PairTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -PapersizeSpecialTest_SOURCES = PapersizeSpecialTest.cpp +PairTest_LDADD = $(TESTLIBS) +PapersizeSpecialTest_SOURCES = PapersizeSpecialTest.cpp testutil.hpp PapersizeSpecialTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -PapersizeSpecialTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -RangeMapTest_SOURCES = RangeMapTest.cpp +PapersizeSpecialTest_LDADD = $(TESTLIBS) +PDFParserTest_SOURCES = PDFParserTest.cpp testutil.hpp +PDFParserTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +PDFParserTest_LDADD = $(TESTLIBS) +PSInterpreterTest_SOURCES = PSInterpreterTest.cpp testutil.hpp +PSInterpreterTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +PSInterpreterTest_LDADD = $(TESTLIBS) +RangeMapTest_SOURCES = RangeMapTest.cpp testutil.hpp RangeMapTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -RangeMapTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -SVGOutputTest_SOURCES = SVGOutputTest.cpp -SVGOutputTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -SVGOutputTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -ShadingPatchTest_SOURCES = ShadingPatchTest.cpp +RangeMapTest_LDADD = $(TESTLIBS) +ShadingPatchTest_SOURCES = ShadingPatchTest.cpp testutil.hpp ShadingPatchTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -ShadingPatchTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -SplittedCharInputBufferTest_SOURCES = SplittedCharInputBufferTest.cpp +ShadingPatchTest_LDADD = $(TESTLIBS) +SpecialManagerTest_SOURCES = SpecialManagerTest.cpp testutil.hpp +SpecialManagerTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +SpecialManagerTest_LDADD = $(TESTLIBS) +SplittedCharInputBufferTest_SOURCES = SplittedCharInputBufferTest.cpp testutil.hpp SplittedCharInputBufferTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -SplittedCharInputBufferTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -StreamInputBufferTest_SOURCES = StreamInputBufferTest.cpp +SplittedCharInputBufferTest_LDADD = $(TESTLIBS) +StreamInputBufferTest_SOURCES = StreamInputBufferTest.cpp testutil.hpp StreamInputBufferTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -StreamInputBufferTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -StreamReaderTest_SOURCES = StreamReaderTest.cpp +StreamInputBufferTest_LDADD = $(TESTLIBS) +StreamReaderTest_SOURCES = StreamReaderTest.cpp testutil.hpp StreamReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -StreamReaderTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -StreamWriterTest_SOURCES = StreamWriterTest.cpp +StreamReaderTest_LDADD = $(TESTLIBS) +StreamWriterTest_SOURCES = StreamWriterTest.cpp testutil.hpp StreamWriterTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -StreamWriterTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -SubfontTest_SOURCES = SubfontTest.cpp +StreamWriterTest_LDADD = $(TESTLIBS) +StringMatcherTest_SOURCES = StringMatcherTest.cpp testutil.hpp +StringMatcherTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +StringMatcherTest_LDADD = $(TESTLIBS) +SubfontTest_SOURCES = SubfontTest.cpp testutil.hpp SubfontTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -SubfontTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -TFMReaderTest_SOURCES = TFMReaderTest.cpp -TFMReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -TFMReaderTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -TensorProductPatchTest_SOURCES = TensorProductPatchTest.cpp +SubfontTest_LDADD = $(TESTLIBS) +SVGOutputTest_SOURCES = SVGOutputTest.cpp testutil.hpp +SVGOutputTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +SVGOutputTest_LDADD = $(TESTLIBS) +TensorProductPatchTest_SOURCES = TensorProductPatchTest.cpp testutil.hpp TensorProductPatchTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -TensorProductPatchTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -ToUnicodeMapTest_SOURCES = ToUnicodeMapTest.cpp +TensorProductPatchTest_LDADD = $(TESTLIBS) +TFMReaderTest_SOURCES = TFMReaderTest.cpp testutil.hpp +TFMReaderTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +TFMReaderTest_LDADD = $(TESTLIBS) +ToUnicodeMapTest_SOURCES = ToUnicodeMapTest.cpp testutil.hpp ToUnicodeMapTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -ToUnicodeMapTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -TriangularPatchTest_SOURCES = TriangularPatchTest.cpp +ToUnicodeMapTest_LDADD = $(TESTLIBS) +TpicSpecialTest_SOURCES = TpicSpecialTest.cpp testutil.hpp +TpicSpecialTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include +TpicSpecialTest_LDADD = $(TESTLIBS) +TriangularPatchTest_SOURCES = TriangularPatchTest.cpp testutil.hpp TriangularPatchTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -TriangularPatchTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -UnicodeTest_SOURCES = UnicodeTest.cpp +TriangularPatchTest_LDADD = $(TESTLIBS) +UnicodeTest_SOURCES = UnicodeTest.cpp testutil.hpp UnicodeTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -UnicodeTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -UtilityTest_SOURCES = UtilityTest.cpp +UnicodeTest_LDADD = $(TESTLIBS) +UtilityTest_SOURCES = UtilityTest.cpp testutil.hpp UtilityTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -UtilityTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -VectorIteratorTest_SOURCES = VectorIteratorTest.cpp +UtilityTest_LDADD = $(TESTLIBS) +VectorIteratorTest_SOURCES = VectorIteratorTest.cpp testutil.hpp VectorIteratorTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -VectorIteratorTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -VectorStreamTest_SOURCES = VectorStreamTest.cpp +VectorIteratorTest_LDADD = $(TESTLIBS) +VectorStreamTest_SOURCES = VectorStreamTest.cpp testutil.hpp VectorStreamTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -VectorStreamTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -XMLNodeTest_SOURCES = XMLNodeTest.cpp +VectorStreamTest_LDADD = $(TESTLIBS) +XMLNodeTest_SOURCES = XMLNodeTest.cpp testutil.hpp XMLNodeTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -XMLNodeTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) -XMLStringTest_SOURCES = XMLStringTest.cpp +XMLNodeTest_LDADD = $(TESTLIBS) +XMLStringTest_SOURCES = XMLStringTest.cpp testutil.hpp XMLStringTest_CPPFLAGS = -I$(top_srcdir)/tests/gtest/include -XMLStringTest_LDADD = ../src/libdvisvgm.a ../libs/xxHash/libxxhash.a libgtest.la -lpotrace -lfreetype $(CODE_COVERAGE_LDFLAGS) +XMLStringTest_LDADD = $(TESTLIBS) CLEANFILES = *.gcda *.gcno hashcheck.cpp all: all-recursive @@ -1140,8 +1166,6 @@ gtest/src/$(DEPDIR)/$(am__dirstamp): @: > gtest/src/$(DEPDIR)/$(am__dirstamp) gtest/src/libgtest_la-gtest-all.lo: gtest/src/$(am__dirstamp) \ gtest/src/$(DEPDIR)/$(am__dirstamp) -gtest/src/libgtest_la-gtest_main.lo: gtest/src/$(am__dirstamp) \ - gtest/src/$(DEPDIR)/$(am__dirstamp) libgtest.la: $(libgtest_la_OBJECTS) $(libgtest_la_DEPENDENCIES) $(EXTRA_libgtest_la_DEPENDENCIES) $(AM_V_CXXLD)$(libgtest_la_LINK) $(libgtest_la_OBJECTS) $(libgtest_la_LIBADD) $(LIBS) @@ -1199,6 +1223,10 @@ CommandLineTest$(EXEEXT): $(CommandLineTest_OBJECTS) $(CommandLineTest_DEPENDENC @rm -f CommandLineTest$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(CommandLineTest_OBJECTS) $(CommandLineTest_LDADD) $(LIBS) +DVIReaderTest$(EXEEXT): $(DVIReaderTest_OBJECTS) $(DVIReaderTest_DEPENDENCIES) $(EXTRA_DVIReaderTest_DEPENDENCIES) + @rm -f DVIReaderTest$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(DVIReaderTest_OBJECTS) $(DVIReaderTest_LDADD) $(LIBS) + DependencyGraphTest$(EXEEXT): $(DependencyGraphTest_OBJECTS) $(DependencyGraphTest_DEPENDENCIES) $(EXTRA_DependencyGraphTest_DEPENDENCIES) @rm -f DependencyGraphTest$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(DependencyGraphTest_OBJECTS) $(DependencyGraphTest_LDADD) $(LIBS) @@ -1275,6 +1303,10 @@ MessageExceptionTest$(EXEEXT): $(MessageExceptionTest_OBJECTS) $(MessageExceptio @rm -f MessageExceptionTest$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(MessageExceptionTest_OBJECTS) $(MessageExceptionTest_LDADD) $(LIBS) +PDFParserTest$(EXEEXT): $(PDFParserTest_OBJECTS) $(PDFParserTest_DEPENDENCIES) $(EXTRA_PDFParserTest_DEPENDENCIES) + @rm -f PDFParserTest$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(PDFParserTest_OBJECTS) $(PDFParserTest_LDADD) $(LIBS) + PSInterpreterTest$(EXEEXT): $(PSInterpreterTest_OBJECTS) $(PSInterpreterTest_DEPENDENCIES) $(EXTRA_PSInterpreterTest_DEPENDENCIES) @rm -f PSInterpreterTest$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(PSInterpreterTest_OBJECTS) $(PSInterpreterTest_LDADD) $(LIBS) @@ -1307,6 +1339,10 @@ ShadingPatchTest$(EXEEXT): $(ShadingPatchTest_OBJECTS) $(ShadingPatchTest_DEPEND @rm -f ShadingPatchTest$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(ShadingPatchTest_OBJECTS) $(ShadingPatchTest_LDADD) $(LIBS) +SpecialManagerTest$(EXEEXT): $(SpecialManagerTest_OBJECTS) $(SpecialManagerTest_DEPENDENCIES) $(EXTRA_SpecialManagerTest_DEPENDENCIES) + @rm -f SpecialManagerTest$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(SpecialManagerTest_OBJECTS) $(SpecialManagerTest_LDADD) $(LIBS) + SplittedCharInputBufferTest$(EXEEXT): $(SplittedCharInputBufferTest_OBJECTS) $(SplittedCharInputBufferTest_DEPENDENCIES) $(EXTRA_SplittedCharInputBufferTest_DEPENDENCIES) @rm -f SplittedCharInputBufferTest$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(SplittedCharInputBufferTest_OBJECTS) $(SplittedCharInputBufferTest_LDADD) $(LIBS) @@ -1323,6 +1359,10 @@ StreamWriterTest$(EXEEXT): $(StreamWriterTest_OBJECTS) $(StreamWriterTest_DEPEND @rm -f StreamWriterTest$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(StreamWriterTest_OBJECTS) $(StreamWriterTest_LDADD) $(LIBS) +StringMatcherTest$(EXEEXT): $(StringMatcherTest_OBJECTS) $(StringMatcherTest_DEPENDENCIES) $(EXTRA_StringMatcherTest_DEPENDENCIES) + @rm -f StringMatcherTest$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(StringMatcherTest_OBJECTS) $(StringMatcherTest_LDADD) $(LIBS) + SubfontTest$(EXEEXT): $(SubfontTest_OBJECTS) $(SubfontTest_DEPENDENCIES) $(EXTRA_SubfontTest_DEPENDENCIES) @rm -f SubfontTest$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(SubfontTest_OBJECTS) $(SubfontTest_LDADD) $(LIBS) @@ -1339,6 +1379,10 @@ ToUnicodeMapTest$(EXEEXT): $(ToUnicodeMapTest_OBJECTS) $(ToUnicodeMapTest_DEPEND @rm -f ToUnicodeMapTest$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(ToUnicodeMapTest_OBJECTS) $(ToUnicodeMapTest_LDADD) $(LIBS) +TpicSpecialTest$(EXEEXT): $(TpicSpecialTest_OBJECTS) $(TpicSpecialTest_DEPENDENCIES) $(EXTRA_TpicSpecialTest_DEPENDENCIES) + @rm -f TpicSpecialTest$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(TpicSpecialTest_OBJECTS) $(TpicSpecialTest_LDADD) $(LIBS) + TriangularPatchTest$(EXEEXT): $(TriangularPatchTest_OBJECTS) $(TriangularPatchTest_DEPENDENCIES) $(EXTRA_TriangularPatchTest_DEPENDENCIES) @rm -f TriangularPatchTest$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(TriangularPatchTest_OBJECTS) $(TriangularPatchTest_LDADD) $(LIBS) @@ -1390,6 +1434,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ColorSpecialTest-ColorSpecialTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ColorTest-ColorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CommandLineTest-CommandLineTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DVIReaderTest-DVIReaderTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DependencyGraphTest-DependencyGraphTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DirectoryTest-DirectoryTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DvisvgmSpecialTest-DvisvgmSpecialTest.Po@am__quote@ @@ -1409,6 +1454,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MapLineTest-MapLineTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MatrixTest-MatrixTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MessageExceptionTest-MessageExceptionTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PDFParserTest-PDFParserTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSInterpreterTest-PSInterpreterTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageRagesTest-PageRagesTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageSizeTest-PageSizeTest.Po@am__quote@ @@ -1417,14 +1463,17 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RangeMapTest-RangeMapTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SVGOutputTest-SVGOutputTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ShadingPatchTest-ShadingPatchTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SpecialManagerTest-SpecialManagerTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SplittedCharInputBufferTest-SplittedCharInputBufferTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamInputBufferTest-StreamInputBufferTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamReaderTest-StreamReaderTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamWriterTest-StreamWriterTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StringMatcherTest-StringMatcherTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SubfontTest-SubfontTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TFMReaderTest-TFMReaderTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TensorProductPatchTest-TensorProductPatchTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ToUnicodeMapTest-ToUnicodeMapTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TpicSpecialTest-TpicSpecialTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TriangularPatchTest-TriangularPatchTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnicodeTest-UnicodeTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UtilityTest-UtilityTest.Po@am__quote@ @@ -1433,8 +1482,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLNodeTest-XMLNodeTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLStringTest-XMLStringTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hashcheck-hashcheck.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgtest_la-testmain.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gtest/src/$(DEPDIR)/libgtest_la-gtest-all.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gtest/src/$(DEPDIR)/libgtest_la-gtest_main.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -1467,12 +1516,12 @@ gtest/src/libgtest_la-gtest-all.lo: gtest/src/gtest-all.cc @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgtest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest/src/libgtest_la-gtest-all.lo `test -f 'gtest/src/gtest-all.cc' || echo '$(srcdir)/'`gtest/src/gtest-all.cc -gtest/src/libgtest_la-gtest_main.lo: gtest/src/gtest_main.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgtest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gtest/src/libgtest_la-gtest_main.lo -MD -MP -MF gtest/src/$(DEPDIR)/libgtest_la-gtest_main.Tpo -c -o gtest/src/libgtest_la-gtest_main.lo `test -f 'gtest/src/gtest_main.cc' || echo '$(srcdir)/'`gtest/src/gtest_main.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) gtest/src/$(DEPDIR)/libgtest_la-gtest_main.Tpo gtest/src/$(DEPDIR)/libgtest_la-gtest_main.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gtest/src/gtest_main.cc' object='gtest/src/libgtest_la-gtest_main.lo' libtool=yes @AMDEPBACKSLASH@ +libgtest_la-testmain.lo: testmain.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgtest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libgtest_la-testmain.lo -MD -MP -MF $(DEPDIR)/libgtest_la-testmain.Tpo -c -o libgtest_la-testmain.lo `test -f 'testmain.cpp' || echo '$(srcdir)/'`testmain.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgtest_la-testmain.Tpo $(DEPDIR)/libgtest_la-testmain.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testmain.cpp' object='libgtest_la-testmain.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgtest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest/src/libgtest_la-gtest_main.lo `test -f 'gtest/src/gtest_main.cc' || echo '$(srcdir)/'`gtest/src/gtest_main.cc +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgtest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libgtest_la-testmain.lo `test -f 'testmain.cpp' || echo '$(srcdir)/'`testmain.cpp BezierTest-BezierTest.o: BezierTest.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(BezierTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT BezierTest-BezierTest.o -MD -MP -MF $(DEPDIR)/BezierTest-BezierTest.Tpo -c -o BezierTest-BezierTest.o `test -f 'BezierTest.cpp' || echo '$(srcdir)/'`BezierTest.cpp @@ -1628,6 +1677,20 @@ CommandLineTest-CommandLineTest.obj: CommandLineTest.cpp @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CommandLineTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o CommandLineTest-CommandLineTest.obj `if test -f 'CommandLineTest.cpp'; then $(CYGPATH_W) 'CommandLineTest.cpp'; else $(CYGPATH_W) '$(srcdir)/CommandLineTest.cpp'; fi` +DVIReaderTest-DVIReaderTest.o: DVIReaderTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(DVIReaderTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DVIReaderTest-DVIReaderTest.o -MD -MP -MF $(DEPDIR)/DVIReaderTest-DVIReaderTest.Tpo -c -o DVIReaderTest-DVIReaderTest.o `test -f 'DVIReaderTest.cpp' || echo '$(srcdir)/'`DVIReaderTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/DVIReaderTest-DVIReaderTest.Tpo $(DEPDIR)/DVIReaderTest-DVIReaderTest.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DVIReaderTest.cpp' object='DVIReaderTest-DVIReaderTest.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(DVIReaderTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DVIReaderTest-DVIReaderTest.o `test -f 'DVIReaderTest.cpp' || echo '$(srcdir)/'`DVIReaderTest.cpp + +DVIReaderTest-DVIReaderTest.obj: DVIReaderTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(DVIReaderTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DVIReaderTest-DVIReaderTest.obj -MD -MP -MF $(DEPDIR)/DVIReaderTest-DVIReaderTest.Tpo -c -o DVIReaderTest-DVIReaderTest.obj `if test -f 'DVIReaderTest.cpp'; then $(CYGPATH_W) 'DVIReaderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/DVIReaderTest.cpp'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/DVIReaderTest-DVIReaderTest.Tpo $(DEPDIR)/DVIReaderTest-DVIReaderTest.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DVIReaderTest.cpp' object='DVIReaderTest-DVIReaderTest.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(DVIReaderTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DVIReaderTest-DVIReaderTest.obj `if test -f 'DVIReaderTest.cpp'; then $(CYGPATH_W) 'DVIReaderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/DVIReaderTest.cpp'; fi` + DependencyGraphTest-DependencyGraphTest.o: DependencyGraphTest.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(DependencyGraphTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DependencyGraphTest-DependencyGraphTest.o -MD -MP -MF $(DEPDIR)/DependencyGraphTest-DependencyGraphTest.Tpo -c -o DependencyGraphTest-DependencyGraphTest.o `test -f 'DependencyGraphTest.cpp' || echo '$(srcdir)/'`DependencyGraphTest.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/DependencyGraphTest-DependencyGraphTest.Tpo $(DEPDIR)/DependencyGraphTest-DependencyGraphTest.Po @@ -1894,6 +1957,20 @@ MessageExceptionTest-MessageExceptionTest.obj: MessageExceptionTest.cpp @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(MessageExceptionTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MessageExceptionTest-MessageExceptionTest.obj `if test -f 'MessageExceptionTest.cpp'; then $(CYGPATH_W) 'MessageExceptionTest.cpp'; else $(CYGPATH_W) '$(srcdir)/MessageExceptionTest.cpp'; fi` +PDFParserTest-PDFParserTest.o: PDFParserTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(PDFParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PDFParserTest-PDFParserTest.o -MD -MP -MF $(DEPDIR)/PDFParserTest-PDFParserTest.Tpo -c -o PDFParserTest-PDFParserTest.o `test -f 'PDFParserTest.cpp' || echo '$(srcdir)/'`PDFParserTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/PDFParserTest-PDFParserTest.Tpo $(DEPDIR)/PDFParserTest-PDFParserTest.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PDFParserTest.cpp' object='PDFParserTest-PDFParserTest.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(PDFParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PDFParserTest-PDFParserTest.o `test -f 'PDFParserTest.cpp' || echo '$(srcdir)/'`PDFParserTest.cpp + +PDFParserTest-PDFParserTest.obj: PDFParserTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(PDFParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PDFParserTest-PDFParserTest.obj -MD -MP -MF $(DEPDIR)/PDFParserTest-PDFParserTest.Tpo -c -o PDFParserTest-PDFParserTest.obj `if test -f 'PDFParserTest.cpp'; then $(CYGPATH_W) 'PDFParserTest.cpp'; else $(CYGPATH_W) '$(srcdir)/PDFParserTest.cpp'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/PDFParserTest-PDFParserTest.Tpo $(DEPDIR)/PDFParserTest-PDFParserTest.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PDFParserTest.cpp' object='PDFParserTest-PDFParserTest.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(PDFParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PDFParserTest-PDFParserTest.obj `if test -f 'PDFParserTest.cpp'; then $(CYGPATH_W) 'PDFParserTest.cpp'; else $(CYGPATH_W) '$(srcdir)/PDFParserTest.cpp'; fi` + PSInterpreterTest-PSInterpreterTest.o: PSInterpreterTest.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(PSInterpreterTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PSInterpreterTest-PSInterpreterTest.o -MD -MP -MF $(DEPDIR)/PSInterpreterTest-PSInterpreterTest.Tpo -c -o PSInterpreterTest-PSInterpreterTest.o `test -f 'PSInterpreterTest.cpp' || echo '$(srcdir)/'`PSInterpreterTest.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/PSInterpreterTest-PSInterpreterTest.Tpo $(DEPDIR)/PSInterpreterTest-PSInterpreterTest.Po @@ -2006,6 +2083,20 @@ ShadingPatchTest-ShadingPatchTest.obj: ShadingPatchTest.cpp @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ShadingPatchTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ShadingPatchTest-ShadingPatchTest.obj `if test -f 'ShadingPatchTest.cpp'; then $(CYGPATH_W) 'ShadingPatchTest.cpp'; else $(CYGPATH_W) '$(srcdir)/ShadingPatchTest.cpp'; fi` +SpecialManagerTest-SpecialManagerTest.o: SpecialManagerTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(SpecialManagerTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SpecialManagerTest-SpecialManagerTest.o -MD -MP -MF $(DEPDIR)/SpecialManagerTest-SpecialManagerTest.Tpo -c -o SpecialManagerTest-SpecialManagerTest.o `test -f 'SpecialManagerTest.cpp' || echo '$(srcdir)/'`SpecialManagerTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/SpecialManagerTest-SpecialManagerTest.Tpo $(DEPDIR)/SpecialManagerTest-SpecialManagerTest.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SpecialManagerTest.cpp' object='SpecialManagerTest-SpecialManagerTest.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(SpecialManagerTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SpecialManagerTest-SpecialManagerTest.o `test -f 'SpecialManagerTest.cpp' || echo '$(srcdir)/'`SpecialManagerTest.cpp + +SpecialManagerTest-SpecialManagerTest.obj: SpecialManagerTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(SpecialManagerTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SpecialManagerTest-SpecialManagerTest.obj -MD -MP -MF $(DEPDIR)/SpecialManagerTest-SpecialManagerTest.Tpo -c -o SpecialManagerTest-SpecialManagerTest.obj `if test -f 'SpecialManagerTest.cpp'; then $(CYGPATH_W) 'SpecialManagerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/SpecialManagerTest.cpp'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/SpecialManagerTest-SpecialManagerTest.Tpo $(DEPDIR)/SpecialManagerTest-SpecialManagerTest.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SpecialManagerTest.cpp' object='SpecialManagerTest-SpecialManagerTest.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(SpecialManagerTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SpecialManagerTest-SpecialManagerTest.obj `if test -f 'SpecialManagerTest.cpp'; then $(CYGPATH_W) 'SpecialManagerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/SpecialManagerTest.cpp'; fi` + SplittedCharInputBufferTest-SplittedCharInputBufferTest.o: SplittedCharInputBufferTest.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(SplittedCharInputBufferTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SplittedCharInputBufferTest-SplittedCharInputBufferTest.o -MD -MP -MF $(DEPDIR)/SplittedCharInputBufferTest-SplittedCharInputBufferTest.Tpo -c -o SplittedCharInputBufferTest-SplittedCharInputBufferTest.o `test -f 'SplittedCharInputBufferTest.cpp' || echo '$(srcdir)/'`SplittedCharInputBufferTest.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/SplittedCharInputBufferTest-SplittedCharInputBufferTest.Tpo $(DEPDIR)/SplittedCharInputBufferTest-SplittedCharInputBufferTest.Po @@ -2062,6 +2153,20 @@ StreamWriterTest-StreamWriterTest.obj: StreamWriterTest.cpp @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(StreamWriterTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o StreamWriterTest-StreamWriterTest.obj `if test -f 'StreamWriterTest.cpp'; then $(CYGPATH_W) 'StreamWriterTest.cpp'; else $(CYGPATH_W) '$(srcdir)/StreamWriterTest.cpp'; fi` +StringMatcherTest-StringMatcherTest.o: StringMatcherTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(StringMatcherTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT StringMatcherTest-StringMatcherTest.o -MD -MP -MF $(DEPDIR)/StringMatcherTest-StringMatcherTest.Tpo -c -o StringMatcherTest-StringMatcherTest.o `test -f 'StringMatcherTest.cpp' || echo '$(srcdir)/'`StringMatcherTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/StringMatcherTest-StringMatcherTest.Tpo $(DEPDIR)/StringMatcherTest-StringMatcherTest.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StringMatcherTest.cpp' object='StringMatcherTest-StringMatcherTest.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(StringMatcherTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o StringMatcherTest-StringMatcherTest.o `test -f 'StringMatcherTest.cpp' || echo '$(srcdir)/'`StringMatcherTest.cpp + +StringMatcherTest-StringMatcherTest.obj: StringMatcherTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(StringMatcherTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT StringMatcherTest-StringMatcherTest.obj -MD -MP -MF $(DEPDIR)/StringMatcherTest-StringMatcherTest.Tpo -c -o StringMatcherTest-StringMatcherTest.obj `if test -f 'StringMatcherTest.cpp'; then $(CYGPATH_W) 'StringMatcherTest.cpp'; else $(CYGPATH_W) '$(srcdir)/StringMatcherTest.cpp'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/StringMatcherTest-StringMatcherTest.Tpo $(DEPDIR)/StringMatcherTest-StringMatcherTest.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StringMatcherTest.cpp' object='StringMatcherTest-StringMatcherTest.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(StringMatcherTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o StringMatcherTest-StringMatcherTest.obj `if test -f 'StringMatcherTest.cpp'; then $(CYGPATH_W) 'StringMatcherTest.cpp'; else $(CYGPATH_W) '$(srcdir)/StringMatcherTest.cpp'; fi` + SubfontTest-SubfontTest.o: SubfontTest.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(SubfontTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SubfontTest-SubfontTest.o -MD -MP -MF $(DEPDIR)/SubfontTest-SubfontTest.Tpo -c -o SubfontTest-SubfontTest.o `test -f 'SubfontTest.cpp' || echo '$(srcdir)/'`SubfontTest.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/SubfontTest-SubfontTest.Tpo $(DEPDIR)/SubfontTest-SubfontTest.Po @@ -2118,6 +2223,20 @@ ToUnicodeMapTest-ToUnicodeMapTest.obj: ToUnicodeMapTest.cpp @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ToUnicodeMapTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ToUnicodeMapTest-ToUnicodeMapTest.obj `if test -f 'ToUnicodeMapTest.cpp'; then $(CYGPATH_W) 'ToUnicodeMapTest.cpp'; else $(CYGPATH_W) '$(srcdir)/ToUnicodeMapTest.cpp'; fi` +TpicSpecialTest-TpicSpecialTest.o: TpicSpecialTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(TpicSpecialTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TpicSpecialTest-TpicSpecialTest.o -MD -MP -MF $(DEPDIR)/TpicSpecialTest-TpicSpecialTest.Tpo -c -o TpicSpecialTest-TpicSpecialTest.o `test -f 'TpicSpecialTest.cpp' || echo '$(srcdir)/'`TpicSpecialTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/TpicSpecialTest-TpicSpecialTest.Tpo $(DEPDIR)/TpicSpecialTest-TpicSpecialTest.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TpicSpecialTest.cpp' object='TpicSpecialTest-TpicSpecialTest.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(TpicSpecialTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TpicSpecialTest-TpicSpecialTest.o `test -f 'TpicSpecialTest.cpp' || echo '$(srcdir)/'`TpicSpecialTest.cpp + +TpicSpecialTest-TpicSpecialTest.obj: TpicSpecialTest.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(TpicSpecialTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TpicSpecialTest-TpicSpecialTest.obj -MD -MP -MF $(DEPDIR)/TpicSpecialTest-TpicSpecialTest.Tpo -c -o TpicSpecialTest-TpicSpecialTest.obj `if test -f 'TpicSpecialTest.cpp'; then $(CYGPATH_W) 'TpicSpecialTest.cpp'; else $(CYGPATH_W) '$(srcdir)/TpicSpecialTest.cpp'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/TpicSpecialTest-TpicSpecialTest.Tpo $(DEPDIR)/TpicSpecialTest-TpicSpecialTest.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TpicSpecialTest.cpp' object='TpicSpecialTest-TpicSpecialTest.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(TpicSpecialTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TpicSpecialTest-TpicSpecialTest.obj `if test -f 'TpicSpecialTest.cpp'; then $(CYGPATH_W) 'TpicSpecialTest.cpp'; else $(CYGPATH_W) '$(srcdir)/TpicSpecialTest.cpp'; fi` + TriangularPatchTest-TriangularPatchTest.o: TriangularPatchTest.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(TriangularPatchTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TriangularPatchTest-TriangularPatchTest.o -MD -MP -MF $(DEPDIR)/TriangularPatchTest-TriangularPatchTest.Tpo -c -o TriangularPatchTest-TriangularPatchTest.o `test -f 'TriangularPatchTest.cpp' || echo '$(srcdir)/'`TriangularPatchTest.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/TriangularPatchTest-TriangularPatchTest.Tpo $(DEPDIR)/TriangularPatchTest-TriangularPatchTest.Po @@ -2529,6 +2648,13 @@ BoundingBoxTest.log: BoundingBoxTest$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +CalculatorTest.log: CalculatorTest$(EXEEXT) + @p='CalculatorTest$(EXEEXT)'; \ + b='CalculatorTest'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) CMapManagerTest.log: CMapManagerTest$(EXEEXT) @p='CMapManagerTest$(EXEEXT)'; \ b='CMapManagerTest'; \ @@ -2550,20 +2676,6 @@ CMapTest.log: CMapTest$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -CRC32Test.log: CRC32Test$(EXEEXT) - @p='CRC32Test$(EXEEXT)'; \ - b='CRC32Test'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -CalculatorTest.log: CalculatorTest$(EXEEXT) - @p='CalculatorTest$(EXEEXT)'; \ - b='CalculatorTest'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) ColorSpecialTest.log: ColorSpecialTest$(EXEEXT) @p='ColorSpecialTest$(EXEEXT)'; \ b='ColorSpecialTest'; \ @@ -2585,6 +2697,13 @@ CommandLineTest.log: CommandLineTest$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +CRC32Test.log: CRC32Test$(EXEEXT) + @p='CRC32Test$(EXEEXT)'; \ + b='CRC32Test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) DependencyGraphTest.log: DependencyGraphTest$(EXEEXT) @p='DependencyGraphTest$(EXEEXT)'; \ b='DependencyGraphTest'; \ @@ -2599,6 +2718,13 @@ DirectoryTest.log: DirectoryTest$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +DVIReaderTest.log: DVIReaderTest$(EXEEXT) + @p='DVIReaderTest$(EXEEXT)'; \ + b='DVIReaderTest'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) DvisvgmSpecialTest.log: DvisvgmSpecialTest$(EXEEXT) @p='DvisvgmSpecialTest$(EXEEXT)'; \ b='DvisvgmSpecialTest'; \ @@ -2718,13 +2844,6 @@ MessageExceptionTest.log: MessageExceptionTest$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -PSInterpreterTest.log: PSInterpreterTest$(EXEEXT) - @p='PSInterpreterTest$(EXEEXT)'; \ - b='PSInterpreterTest'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) PageRagesTest.log: PageRagesTest$(EXEEXT) @p='PageRagesTest$(EXEEXT)'; \ b='PageRagesTest'; \ @@ -2753,16 +2872,23 @@ PapersizeSpecialTest.log: PapersizeSpecialTest$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -RangeMapTest.log: RangeMapTest$(EXEEXT) - @p='RangeMapTest$(EXEEXT)'; \ - b='RangeMapTest'; \ +PDFParserTest.log: PDFParserTest$(EXEEXT) + @p='PDFParserTest$(EXEEXT)'; \ + b='PDFParserTest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -SVGOutputTest.log: SVGOutputTest$(EXEEXT) - @p='SVGOutputTest$(EXEEXT)'; \ - b='SVGOutputTest'; \ +PSInterpreterTest.log: PSInterpreterTest$(EXEEXT) + @p='PSInterpreterTest$(EXEEXT)'; \ + b='PSInterpreterTest'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +RangeMapTest.log: RangeMapTest$(EXEEXT) + @p='RangeMapTest$(EXEEXT)'; \ + b='RangeMapTest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ @@ -2774,6 +2900,13 @@ ShadingPatchTest.log: ShadingPatchTest$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +SpecialManagerTest.log: SpecialManagerTest$(EXEEXT) + @p='SpecialManagerTest$(EXEEXT)'; \ + b='SpecialManagerTest'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) SplittedCharInputBufferTest.log: SplittedCharInputBufferTest$(EXEEXT) @p='SplittedCharInputBufferTest$(EXEEXT)'; \ b='SplittedCharInputBufferTest'; \ @@ -2802,6 +2935,13 @@ StreamWriterTest.log: StreamWriterTest$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +StringMatcherTest.log: StringMatcherTest$(EXEEXT) + @p='StringMatcherTest$(EXEEXT)'; \ + b='StringMatcherTest'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) SubfontTest.log: SubfontTest$(EXEEXT) @p='SubfontTest$(EXEEXT)'; \ b='SubfontTest'; \ @@ -2809,9 +2949,9 @@ SubfontTest.log: SubfontTest$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -TFMReaderTest.log: TFMReaderTest$(EXEEXT) - @p='TFMReaderTest$(EXEEXT)'; \ - b='TFMReaderTest'; \ +SVGOutputTest.log: SVGOutputTest$(EXEEXT) + @p='SVGOutputTest$(EXEEXT)'; \ + b='SVGOutputTest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ @@ -2823,6 +2963,13 @@ TensorProductPatchTest.log: TensorProductPatchTest$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +TFMReaderTest.log: TFMReaderTest$(EXEEXT) + @p='TFMReaderTest$(EXEEXT)'; \ + b='TFMReaderTest'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) ToUnicodeMapTest.log: ToUnicodeMapTest$(EXEEXT) @p='ToUnicodeMapTest$(EXEEXT)'; \ b='ToUnicodeMapTest'; \ @@ -2830,6 +2977,13 @@ ToUnicodeMapTest.log: ToUnicodeMapTest$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +TpicSpecialTest.log: TpicSpecialTest$(EXEEXT) + @p='TpicSpecialTest$(EXEEXT)'; \ + b='TpicSpecialTest'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) TriangularPatchTest.log: TriangularPatchTest$(EXEEXT) @p='TriangularPatchTest$(EXEEXT)'; \ b='TriangularPatchTest'; \ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/MapLineTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/MapLineTest.cpp index d6530dacdd3..5b5edab8a75 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/MapLineTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/MapLineTest.cpp @@ -2,7 +2,7 @@ ** MapLineTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -20,23 +20,13 @@ #include <gtest/gtest.h> #include <sstream> -#include "FileFinder.hpp" #include "MapLine.hpp" #include "Subfont.hpp" +#include "testutil.hpp" using namespace std; - -class MapLineTest : public ::testing::Test -{ - protected: - void SetUp () override { - FileFinder::init("MapLineTest", "MapLineTest", false); - } -}; - - -TEST_F(MapLineTest, psline1) { +TEST(MapLineTest, psline1) { istringstream iss("texname0 TEXNAME0 <texname.pfb <encname.enc"); MapLine mapline(iss); EXPECT_EQ(mapline.texname(), "texname0"); @@ -48,7 +38,19 @@ TEST_F(MapLineTest, psline1) { EXPECT_DOUBLE_EQ(mapline.bold(), 0); } -TEST_F(MapLineTest, psline2) { +TEST(MapLineTest, psline2) { + istringstream iss("texname0 TEXNAME0 <<texname.pfb <encname.enc"); + MapLine mapline(iss); + EXPECT_EQ(mapline.texname(), "texname0"); + EXPECT_EQ(mapline.psname(), "TEXNAME0"); + EXPECT_EQ(mapline.fontfname(), "texname.pfb"); + EXPECT_EQ(mapline.encname(), "encname"); + EXPECT_DOUBLE_EQ(mapline.slant(), 0); + EXPECT_DOUBLE_EQ(mapline.extend(), 1); + EXPECT_DOUBLE_EQ(mapline.bold(), 0); +} + +TEST(MapLineTest, psline3) { istringstream iss("texname0 TEXNAME0 \".123 SlantFont .456 ExtendFont\" <encname.enc <[texname.ttf"); MapLine mapline(iss); EXPECT_EQ(mapline.texname(), "texname0"); @@ -60,7 +62,7 @@ TEST_F(MapLineTest, psline2) { EXPECT_DOUBLE_EQ(mapline.bold(), 0); } -TEST_F(MapLineTest, psline3) { +TEST(MapLineTest, psline4) { istringstream iss("texname0 TEXNAME0 <encname.enc \".123 SlantFont IgnoreMe .456 ExtendFont\" <texname.ttf"); MapLine mapline(iss); EXPECT_EQ(mapline.texname(), "texname0"); @@ -72,7 +74,7 @@ TEST_F(MapLineTest, psline3) { EXPECT_DOUBLE_EQ(mapline.bold(), 0); } -TEST_F(MapLineTest, pdfline1) { +TEST(MapLineTest, pdfline1) { istringstream iss("texname"); MapLine mapline(iss); EXPECT_EQ(mapline.texname(), "texname"); @@ -81,7 +83,7 @@ TEST_F(MapLineTest, pdfline1) { EXPECT_EQ(mapline.fontfname(), ""); } -TEST_F(MapLineTest, pdfline2) { +TEST(MapLineTest, pdfline2) { istringstream iss("gbk unicode simsun.ttc"); MapLine mapline(iss); EXPECT_EQ(mapline.texname(), "gbk"); @@ -95,7 +97,7 @@ TEST_F(MapLineTest, pdfline2) { EXPECT_DOUBLE_EQ(mapline.extend(), 1); } -TEST_F(MapLineTest, pdfline3) { +TEST(MapLineTest, pdfline3) { istringstream iss("gbk@UGBK@10 unicode simsun.ttc -v 50 -r -s .123 -b 1 -e 0.456"); MapLine mapline(iss); EXPECT_EQ(mapline.texname(), "gbk10"); @@ -108,9 +110,11 @@ TEST_F(MapLineTest, pdfline3) { EXPECT_DOUBLE_EQ(mapline.bold(), 1); if (mapline.sfd() != 0) // if UGBK.sfd is installed, check SFD name EXPECT_EQ(mapline.sfd()->name(), "UGBK"); + else + WARNING("UGBK.sfd not found"); } -TEST_F(MapLineTest, pdfline4) { +TEST(MapLineTest, pdfline4) { istringstream iss("gbk@UGBK@ default :1:!simsun.ttc/UCS,Bold -e.345"); MapLine mapline(iss); EXPECT_EQ(mapline.texname(), "gbk"); @@ -122,10 +126,12 @@ TEST_F(MapLineTest, pdfline4) { EXPECT_DOUBLE_EQ(mapline.extend(), 0.345); if (mapline.sfd() != 0) // if UGBK.sfd is installed, check SFD name EXPECT_EQ(mapline.sfd()->name(), "UGBK"); + else + WARNING("UGBK.sfd not found"); } -TEST_F(MapLineTest, fail) { +TEST(MapLineTest, fail) { EXPECT_THROW(MapLine("texname -"), MapLineException); EXPECT_THROW(MapLine("texname -s"), MapLineException); EXPECT_THROW(MapLine("texname -e"), MapLineException); @@ -135,4 +141,4 @@ TEST_F(MapLineTest, fail) { EXPECT_THROW(MapLine("texname -v"), MapLineException); EXPECT_THROW(MapLine("texname -w"), MapLineException); EXPECT_THROW(MapLine("texname -Z"), MapLineException); -}
\ No newline at end of file +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/MatrixTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/MatrixTest.cpp index 11860cf883a..7ab8d231896 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/MatrixTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/MatrixTest.cpp @@ -2,7 +2,7 @@ ** MatrixTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -118,7 +118,7 @@ TEST(MatrixTest, isTranslation) { TEST(MatrixTest, lmultiply) { const Matrix m1({1, 2, 3, 4, 5, 6, 7, 8, 9}); const Matrix m2({9, 8, 7, 6, 5, 4, 3, 2, 1}); - EXPECT_TRUE(m1 != m2); + EXPECT_NE(m1, m2); Matrix m3; EXPECT_EQ((m3=m1).lmultiply(m2), Matrix({30, 24, 18, 84, 69, 54, 138, 114, 90})); EXPECT_EQ((m3=m2).lmultiply(m1), Matrix({90, 114, 138, 54, 69, 84, 18, 24, 30})); @@ -129,7 +129,7 @@ TEST(MatrixTest, lmultiply) { TEST(MatrixTest, rmultiply) { const Matrix m1({1, 2, 3, 4, 5, 6, 7, 8, 9}); const Matrix m2({9, 8, 7, 6, 5, 4, 3, 2, 1}); - EXPECT_TRUE(m1 != m2); + EXPECT_NE(m1, m2); Matrix m3; EXPECT_EQ((m3=m1).rmultiply(m2), Matrix({90, 114, 138, 54, 69, 84, 18, 24, 30})); EXPECT_EQ((m3=m2).rmultiply(m1), Matrix({30, 24, 18, 84, 69, 54, 138, 114, 90})); @@ -237,4 +237,4 @@ TEST(MatrixTest, fail) { EXPECT_THROW(Matrix("KX90", calc), ParserException); // invalid argument (pole at 90+180k degrees) EXPECT_THROW(Matrix("KY270", calc), ParserException); // invalid argument (pole at 90+180k degrees) EXPECT_THROW(Matrix("S2,", calc), ParserException); // missing argument -}
\ No newline at end of file +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/MessageExceptionTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/MessageExceptionTest.cpp index 360c2f1e55a..b9760b41190 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/MessageExceptionTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/MessageExceptionTest.cpp @@ -1,8 +1,8 @@ /************************************************************************* -** BoundingBoxTest.cpp ** +** MessageExceptionTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/PDFParserTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/PDFParserTest.cpp new file mode 100644 index 00000000000..4a808377f05 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/PDFParserTest.cpp @@ -0,0 +1,239 @@ +/************************************************************************* +** PDFParserTest.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#include <gtest/gtest.h> +#include "PDFParser.hpp" + +using namespace std; + +TEST(PDFParserTest, empty) { + PDFParser parser; + vector<PDFObject> objects = parser.parse(""); + EXPECT_TRUE(objects.empty()); + objects = parser.parse(" \n \r %comment 1 2 3 "); + EXPECT_TRUE(objects.empty()); +} + + +TEST(PDFParserTest, numbers) { + PDFParser parser; + vector<PDFObject> objects = parser.parse("5 1 +2 -3 1.1 9. .1 -7.2"); + ASSERT_EQ(objects.size(), 8u); + + size_t count=0; + for (int n : {5, 1, 2, -3}) { + ASSERT_NE(objects[count].get<int>(), nullptr); + EXPECT_EQ(*objects[count++].get<int>(), n); + } + for (double n : {1.1, 9.0, 0.1, -7.2}) { + ASSERT_NE(objects[count].get<double>(), nullptr); + EXPECT_DOUBLE_EQ(*objects[count++].get<double>(), n); + } +} + + +TEST(PDFParserTest, literal_strings) { + PDFParser parser; + vector<PDFObject> objects = parser.parse("()"); + ASSERT_EQ(objects.size(), 1u); + ASSERT_NE(objects[0].get<string>(), nullptr); + EXPECT_TRUE(objects[0].get<string>()->empty()); + + objects = parser.parse("(literal string) (balanced (bra(ck)ets) inside)(a\\n\\(b\\c)"); + ASSERT_EQ(objects.size(), 3u); + + size_t count=0; + for (string str : {"literal string", "balanced (bra(ck)ets) inside", "a\n(bc"}) { + ASSERT_NE(objects[count].get<string>(), nullptr); + ASSERT_EQ(*objects[count++].get<string>(), str); + } + + objects = parser.parse(R"*( ( octal \1\12\123\1234 ))*"); + ASSERT_EQ(objects.size(), 1u); + ASSERT_NE(objects[0].get<string>(), nullptr); + EXPECT_EQ(objects[0].get<string>()->size(), 13u); + EXPECT_EQ(*objects[0].get<string>(), " octal \001\012\123\1234 "); + + objects = parser.parse("(split \\\nline)"); + ASSERT_EQ(objects.size(), 1u); + ASSERT_NE(objects[0].get<string>(), nullptr); + EXPECT_EQ(*objects[0].get<string>(), "split line"); + + EXPECT_THROW(parser.parse("(missing parentheses"), PDFException); +} + + +TEST(PDFParserTest, hex_strings) { + PDFParser parser; + vector<PDFObject> objects = parser.parse("<>< ><\n\r\f>"); + ASSERT_EQ(objects.size(), 3u); + for (size_t i=0; i < objects.size(); i++) { + ASSERT_NE(objects[i].get<string>(), nullptr); + EXPECT_TRUE(objects[i].get<string>()->empty()); + } + + objects = parser.parse("<202>"); + ASSERT_EQ(objects.size(), 1u); + ASSERT_NE(objects[0].get<string>(), nullptr); + EXPECT_EQ(*objects[0].get<string>(), " "); + + objects = parser.parse("<616263646566 6768\n696A6b6c6D6E6F 7>"); + ASSERT_EQ(objects.size(), 1u); + ASSERT_NE(objects[0].get<string>(), nullptr); + EXPECT_EQ(*objects[0].get<string>(), "abcdefghijklmnop"); + + EXPECT_THROW(parser.parse("<abcdefinvalid>"), PDFException); + EXPECT_THROW(parser.parse("<missing parentheses"), PDFException); +} + + +TEST(PDFParserTest, arrays) { + PDFParser parser; + vector<PDFObject> objects = parser.parse("[1 2.0/name(string) [5] <6162>]"); + ASSERT_EQ(objects.size(), 1u); + const PDFArray *arr = objects[0].get<PDFArray>(); + ASSERT_NE(arr, nullptr); + ASSERT_EQ(arr->size(), 6u); + + // integer number + ASSERT_NE((*arr)[0].get<int>(), nullptr); + ASSERT_EQ(*(*arr)[0].get<int>(), 1); + + // real number + ASSERT_NE((*arr)[1].get<double>(), nullptr); + ASSERT_DOUBLE_EQ(*(*arr)[1].get<double>(), 2.0); + + // name + ASSERT_NE((*arr)[2].get<PDFName>(), nullptr); + ASSERT_EQ(*(*arr)[2].get<PDFName>(), PDFName("name")); + + // literal string + ASSERT_NE((*arr)[3].get<string>(), nullptr); + ASSERT_EQ(*(*arr)[3].get<string>(), "string"); + + // inner array + ASSERT_NE((*arr)[4].get<PDFArray>(), nullptr); + ASSERT_EQ((*arr)[4].get<PDFArray>()->size(), 1u); + ASSERT_NE((*arr)[4].get<PDFArray>()->at(0).get<int>(), nullptr); + ASSERT_EQ(*(*arr)[4].get<PDFArray>()->at(0).get<int>(), 5); + + // hex string + ASSERT_NE((*arr)[5].get<string>(), nullptr); + ASSERT_EQ(*(*arr)[5].get<string>(), "ab"); +} + + +TEST(PDFParserTest, dictionary) { + PDFParser parser; + vector<PDFObject> objects = parser.parse("<< >>"); + ASSERT_EQ(objects.size(), 1u); + const PDFDict *dict = objects[0].get<PDFDict>(); + ASSERT_NE(dict, nullptr); + ASSERT_TRUE(dict->empty()); + + objects = parser.parse("<</int 4 /real 5.5/str(string value)/color[0 1 1]>>"); + ASSERT_EQ(objects.size(), 1u); + dict = objects[0].get<PDFDict>(); + ASSERT_NE(dict, nullptr); + ASSERT_EQ(dict->size(), 4u); + + // integer number + ASSERT_NE(dict->find("int"), dict->end()); + ASSERT_NE(dict->find("int")->second.get<int>(), nullptr); + EXPECT_EQ(*dict->find("int")->second.get<int>(), 4); + + ASSERT_NE(dict->find("real"), dict->end()); + ASSERT_NE(dict->find("real")->second.get<double>(), nullptr); + EXPECT_DOUBLE_EQ(*dict->find("real")->second.get<double>(), 5.5); + + ASSERT_NE(dict->find("str"), dict->end()); + ASSERT_NE(dict->find("str")->second.get<string>(), nullptr); + EXPECT_EQ(*dict->find("str")->second.get<string>(), "string value"); + + ASSERT_NE(dict->find("color"), dict->end()); + ASSERT_NE(dict->find("color")->second.get<PDFArray>(), nullptr); + const PDFArray &arr = *dict->find("color")->second.get<PDFArray>(); + ASSERT_EQ(arr.size(), 3u); + EXPECT_EQ(*arr[0].get<int>(), 0); + EXPECT_EQ(*arr[1].get<int>(), 1); + EXPECT_EQ(*arr[2].get<int>(), 1); + + EXPECT_EQ(dict->find("nokey"), dict->end()); + + EXPECT_THROW(parser.parse("<</int >>"), PDFException); // missing value + EXPECT_THROW(parser.parse("<</int 4>"), PDFException); // missing ">" + EXPECT_THROW(parser.parse("<</int 4"), PDFException); // missing ">>" +} + + +TEST(PDFParserTest, indirect_objects) { + PDFParser parser; + vector<PDFObject> objects = parser.parse("1 0 obj\n1 2 3 4 5endobj 2 5 R"); + ASSERT_EQ(objects.size(), 2u); + ASSERT_NE(objects[0].get<PDFIndirectObject>(), nullptr); + EXPECT_EQ(objects[0].get<PDFIndirectObject>()->objnum, 1); + EXPECT_EQ(objects[0].get<PDFIndirectObject>()->gennum, 0); + + ASSERT_NE(objects[1].get<PDFObjectRef>(), nullptr); + EXPECT_EQ(objects[1].get<PDFObjectRef>()->objnum, 2); + EXPECT_EQ(objects[1].get<PDFObjectRef>()->gennum, 5); + + EXPECT_THROW(parser.parse("1 obj\n1 2 3 4 5endobj"), PDFException); + EXPECT_THROW(parser.parse("1 (string)obj\n1 2 3 4 5endobj"), PDFException); + + EXPECT_THROW(parser.parse("1 R"), PDFException); + EXPECT_THROW(parser.parse("1 (string)R"), PDFException); +} + + +TEST(PDFParserTest, stream) { + PDFParser parser; + vector<PDFObject> objects = parser.parse("stream\n1 2 3 4 endstream"); + ASSERT_EQ(objects.size(), 1u); + ASSERT_NE(objects[0].get<PDFStream>(), nullptr); +} + + +TEST(PDFParserTest, ops1) { + PDFParser parser; + vector<PDFObject> objects = parser.parse("@xpos 1op op2 1..2"); + ASSERT_EQ(objects.size(), 4u); + size_t count=0; + for (string str : {"@xpos", "1op", "op2", "1..2"}) { + ASSERT_NE(objects[count].get<PDFOperator>(), nullptr); + ASSERT_EQ(objects[count++].get<PDFOperator>()->opname, str); + } +} + + +TEST(PDFParserTest, ops2) { + PDFParser parser; + vector<PDFObject> objects = parser.parse("@xpos 1op op2 @ypos", [](const string &str, vector<PDFObject> &objects) { + if (str == "@xpos" || str == "@ypos") + objects.emplace_back(PDFObject(str == "@xpos" ? 1.23 : 3.21)); + else + objects.emplace_back(PDFOperator(str)); + }); + ASSERT_EQ(objects.size(), 4u); + size_t count=0; + for (string str : {"1.23", "1op", "op2", "3.21"}) { + ASSERT_EQ(string(objects[count++]), str); + } +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/PSInterpreterTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/PSInterpreterTest.cpp index 35e036f63c2..24f11dddf74 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/PSInterpreterTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/PSInterpreterTest.cpp @@ -2,7 +2,7 @@ ** PSInterpreterTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -26,8 +26,7 @@ using namespace std; -class PSTestActions : public PSActions -{ +class PSTestActions : public PSActions { public: void applyscalevals (vector<double> &p) {print("applyscalevals", p);} void clip (vector<double> &p) {print("clip", p);} @@ -87,7 +86,7 @@ TEST(PSInterpreterTest, init) { PSTestActions actions; PSInterpreter psi(&actions); ASSERT_TRUE(psi.active()); - ASSERT_EQ(actions.result(), ""); + EXPECT_EQ(actions.result(), ""); } @@ -95,19 +94,19 @@ TEST(PSInterpreterTest, gsave_grestore) { PSTestActions actions; PSInterpreter psi(&actions); psi.execute("gsave "); - ASSERT_EQ(actions.result(), "gsave;"); + EXPECT_EQ(actions.result(), "gsave;"); actions.clear(); psi.execute("grestore "); - ASSERT_EQ(actions.result(), "setlinewidth 1;setlinecap 0;setlinejoin 0;setmiterlimit 10;setrgbcolor 0 0 0;setmatrix 1 0 0 1 0 0;setdash 0;grestore;"); + EXPECT_EQ(actions.result(), "setlinewidth 1;setlinecap 0;setlinejoin 0;setmiterlimit 10;setrgbcolor 0 0 0;setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;setdash 0;grestore;"); actions.clear(); psi.execute("1 setlinecap 5 setmiterlimit 0 1 0 setrgbcolor gsave 0 setlinecap 10 setmiterlimit "); - ASSERT_EQ(actions.result(), "setlinecap 1;setmiterlimit 5;setrgbcolor 0 1 0;gsave;setlinecap 0;setmiterlimit 10;"); + EXPECT_EQ(actions.result(), "setlinecap 1;setmiterlimit 5;setrgbcolor 0 1 0;gsave;setlinecap 0;setmiterlimit 10;"); actions.clear(); psi.execute("grestore "); - ASSERT_EQ(actions.result(), "setlinewidth 1;setlinecap 1;setlinejoin 0;setmiterlimit 5;setrgbcolor 0 1 0;setmatrix 1 0 0 1 0 0;setdash 0;grestore;"); + EXPECT_EQ(actions.result(), "setlinewidth 1;setlinecap 1;setlinejoin 0;setmiterlimit 5;setrgbcolor 0 1 0;setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;setdash 0;grestore;"); } @@ -115,11 +114,11 @@ TEST(PSInterpreterTest, stroke_fill) { PSTestActions actions; PSInterpreter psi(&actions); psi.execute("0 0 moveto 10 10 lineto 0 10 lineto closepath stroke "); - ASSERT_EQ(actions.result(), "newpath 1;moveto 0 0;lineto 10 10;lineto 0 10;closepath;stroke;"); + EXPECT_EQ(actions.result(), "newpath 1;moveto 0 0;lineto 10 10;lineto 0 10;closepath;stroke;"); actions.clear(); psi.execute("0 0 moveto 10 10 lineto 0 10 lineto closepath fill "); - ASSERT_EQ(actions.result(), "newpath 1;moveto 0 0;lineto 10 10;lineto 0 10;closepath;fill;"); + EXPECT_EQ(actions.result(), "newpath 1;moveto 0 0;lineto 10 10;lineto 0 10;closepath;fill;"); } @@ -127,11 +126,11 @@ TEST(PSInterpreterTest, clip) { PSTestActions actions; PSInterpreter psi(&actions); psi.execute("initclip "); - ASSERT_EQ(actions.result(), "initclip;"); + EXPECT_EQ(actions.result(), "initclip;"); actions.clear(); psi.execute("0 0 moveto 10 10 lineto 0 10 lineto closepath clip "); - ASSERT_EQ(actions.result(), "newpath 0;moveto 0 0;lineto 10 10;lineto 0 10;closepath;clip;"); + EXPECT_EQ(actions.result(), "newpath 0;moveto 0 0;lineto 10 10;lineto 0 10;closepath;clip;"); } @@ -139,7 +138,7 @@ TEST(PSInterpreterTest, transform) { PSTestActions actions; PSInterpreter psi(&actions); psi.execute("10 10 scale 90 rotate 100 -100 translate "); - ASSERT_EQ(actions.result(), "scale 10 10;rotate 90;translate 100 -100;"); + EXPECT_EQ(actions.result(), "scale 10 10;applyscalevals 10 10 1;rotate 90;applyscalevals 10 10 0;translate 100 -100;"); } @@ -147,7 +146,7 @@ TEST(PSInterpreterTest, calculate) { PSTestActions actions; PSInterpreter psi(&actions); psi.execute("2 3 add 4 mul 5 div rotate "); - ASSERT_EQ(actions.result(), "rotate 4;"); + ASSERT_EQ(actions.result(), "rotate 4;applyscalevals 1 1 0.997564;"); } @@ -155,19 +154,19 @@ TEST(PSInterpreterTest, setlinewidth) { PSTestActions actions; PSInterpreter psi(&actions); psi.execute("10 setlinewidth "); - ASSERT_EQ(actions.result(), "applyscalevals 1 1 1;setlinewidth 10;"); + EXPECT_EQ(actions.result(), "setlinewidth 10;"); actions.clear(); psi.execute("5 5 scale 10 setlinewidth "); - ASSERT_EQ(actions.result(), "scale 5 5;applyscalevals 5 5 1;setlinewidth 10;"); + EXPECT_EQ(actions.result(), "scale 5 5;applyscalevals 5 5 1;setlinewidth 10;"); actions.clear(); psi.execute("90 rotate 10 setlinewidth "); - ASSERT_EQ(actions.result(), "rotate 90;applyscalevals 5 5 0;setlinewidth 10;"); + EXPECT_EQ(actions.result(), "rotate 90;applyscalevals 5 5 0;setlinewidth 10;"); actions.clear(); psi.execute("-30 rotate 10 setlinewidth "); - ASSERT_EQ(actions.result(), "rotate -30;applyscalevals 5 5 0.5;setlinewidth 10;"); + EXPECT_EQ(actions.result(), "rotate -30;applyscalevals 5 5 0.5;setlinewidth 10;"); } @@ -175,8 +174,8 @@ TEST(PSInterpreterTest, matrix) { PSTestActions actions; PSInterpreter psi(&actions); psi.execute("matrix setmatrix "); - ASSERT_EQ(actions.result(), "setmatrix 1 0 0 1 0 0;"); + EXPECT_EQ(actions.result(), "setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;"); actions.clear(); psi.execute("10 100 translate 30 rotate matrix currentmatrix setmatrix "); - ASSERT_EQ(actions.result(), "translate 10 100;rotate 30;setmatrix 0.866025 0.5 -0.5 0.866025 10 100;"); + EXPECT_EQ(actions.result(), "translate 10 100;rotate 30;applyscalevals 1 1 0.866025;setmatrix 0.866025 0.5 -0.5 0.866025 10 100;applyscalevals 1 1 0.866025;"); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/PageRagesTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/PageRagesTest.cpp index fbe3a365510..56fa4adbfda 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/PageRagesTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/PageRagesTest.cpp @@ -2,7 +2,7 @@ ** PageRagesTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -47,7 +47,7 @@ TEST(PageRangesTest, single) { ASSERT_TRUE(pr.parse("123")); ASSERT_FALSE(pr.ranges().empty()); ASSERT_EQ(pr.ranges().front(), PageRanges::Range(123,123)); - ASSERT_EQ(pr.numberOfPages(), 1); + ASSERT_EQ(pr.numberOfPages(), 1u); } @@ -56,7 +56,7 @@ TEST(PageRangesTest, single_range) { ASSERT_TRUE(pr.parse("3-19")); ASSERT_FALSE(pr.ranges().empty()); ASSERT_EQ(pr.ranges().front(), PageRanges::Range(3,19)); - ASSERT_EQ(pr.numberOfPages(), 17); + ASSERT_EQ(pr.numberOfPages(), 17u); } @@ -65,7 +65,7 @@ TEST(PageRangesTest, single_range_inv) { ASSERT_TRUE(pr.parse("19-3")); ASSERT_FALSE(pr.ranges().empty()); ASSERT_EQ(pr.ranges().front(), PageRanges::Range(3,19)); - ASSERT_EQ(pr.numberOfPages(), 17); + ASSERT_EQ(pr.numberOfPages(), 17u); } @@ -74,7 +74,7 @@ TEST(PageRangesTest, single_range_lopen) { ASSERT_TRUE(pr.parse("-19")); ASSERT_FALSE(pr.ranges().empty()); ASSERT_EQ(pr.ranges().front(), PageRanges::Range(1,19)); - ASSERT_EQ(pr.numberOfPages(), 19); + ASSERT_EQ(pr.numberOfPages(), 19u); } @@ -83,24 +83,24 @@ TEST(PageRangesTest, single_range_ropen) { ASSERT_TRUE(pr.parse("4-", 100)); ASSERT_FALSE(pr.ranges().empty()); ASSERT_EQ(pr.ranges().front(), PageRanges::Range(4,100)); - ASSERT_EQ(pr.numberOfPages(), 97); + ASSERT_EQ(pr.numberOfPages(), 97u); } TEST(PageRangesTest, multiple1) { PageRanges pr; ASSERT_TRUE(pr.parse("11,6,9,1,75,6,3")); - ASSERT_EQ(pr.size(), 6); + ASSERT_EQ(pr.size(), 6u); Range cmp[] = {{1,1},{3,3},{6,6},{9,9},{11,11},{75,75}}; ASSERT_TRUE(is_equal(pr, cmp)); - ASSERT_EQ(pr.numberOfPages(), 6); + ASSERT_EQ(pr.numberOfPages(), 6u); } TEST(PageRangesTest, multiple2) { PageRanges pr; ASSERT_TRUE(pr.parse("2,6,9,1,75,6,3")); - ASSERT_EQ(pr.size(), 4); + ASSERT_EQ(pr.size(), 4u); Range cmp[] = {{1,3},{6,6},{9,9},{75,75}}; ASSERT_TRUE(is_equal(pr, cmp)); } @@ -109,7 +109,7 @@ TEST(PageRangesTest, multiple2) { TEST(PageRangesTest, multiple3) { PageRanges pr; ASSERT_TRUE(pr.parse("2,6,9-11,1,25-,19-13,6,3", 100)); - ASSERT_EQ(pr.size(), 5); + ASSERT_EQ(pr.size(), 5u); Range cmp[] = {{1,3},{6,6},{9,11},{13,19},{25,100}}; ASSERT_TRUE(is_equal(pr, cmp)); } @@ -118,7 +118,7 @@ TEST(PageRangesTest, multiple3) { TEST(PageRangesTest, overlap1) { PageRanges pr; ASSERT_TRUE(pr.parse("5-11, 8-15")); - ASSERT_EQ(pr.size(), 1); + ASSERT_EQ(pr.size(), 1u); Range cmp[] = {{5,15}}; ASSERT_TRUE(is_equal(pr, cmp)); } @@ -127,7 +127,7 @@ TEST(PageRangesTest, overlap1) { TEST(PageRangesTest, overlap2) { PageRanges pr; ASSERT_TRUE(pr.parse("23-30, 5-11, 17-23, 12-19")); - ASSERT_EQ(pr.size(), 1); + ASSERT_EQ(pr.size(), 1u); Range cmp[] = {{5,30}}; ASSERT_TRUE(is_equal(pr, cmp)); } @@ -136,7 +136,7 @@ TEST(PageRangesTest, overlap2) { TEST(PageRangesTest, overlap3) { PageRanges pr; ASSERT_TRUE(pr.parse("22-30, 5-11, 21-23, 12-19")); - ASSERT_EQ(pr.size(), 2); + ASSERT_EQ(pr.size(), 2u); Range cmp[] = {{5,19},{21,30}}; ASSERT_TRUE(is_equal(pr, cmp)); } @@ -145,11 +145,11 @@ TEST(PageRangesTest, overlap3) { TEST(PageRangesTest, overlap4) { PageRanges pr; ASSERT_TRUE(pr.parse("-15, 20-, 8, 12-16, 18-19", 100)); - ASSERT_EQ(pr.size(), 2); + ASSERT_EQ(pr.size(), 2u); Range cmp[] = {{1,16},{18,100}}; ASSERT_TRUE(is_equal(pr, cmp)); ASSERT_TRUE(pr.parse("17")); - ASSERT_EQ(pr.size(), 1); + ASSERT_EQ(pr.size(), 1u); ASSERT_EQ(pr.ranges().front(), PageRanges::Range(1,100)); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/PageSizeTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/PageSizeTest.cpp index d80aa16caf3..52d85dcd9f3 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/PageSizeTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/PageSizeTest.cpp @@ -2,7 +2,7 @@ ** PageSizeTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -19,55 +19,47 @@ *************************************************************************/ #include <gtest/gtest.h> -#include <limits> +#include <vector> #include "PageSize.hpp" +using namespace std; -class PageSizeTest : public ::testing::Test -{ - protected: - struct PageData - { - const char *id; - double width, height; - }; - static const PageData pageData[]; - - PageSize ps; +struct PageData { + const char *name; + double width, height; // in mm }; -const PageSizeTest::PageData PageSizeTest::pageData[] = { +const vector<PageData> pageData = { {"A4", 210, 297}, - {"a4", 210, 297}, - {"a4-p", 210, 297}, - {"a4-portrait", 210, 297}, - {"a4-l", 297, 210}, - {"a4-landscape", 297, 210}, - {"a5", 148, 210}, + {"a4", 210, 297}, + {"a4-p", 210, 297}, + {"a4-portrait", 210, 297}, + {"a4-l", 297, 210}, + {"a4-landscape", 297, 210}, + {"a5", 148, 210}, + {"b2", 500, 707}, {"c10", 28, 40}, - {"letter", 216, 279}, - {0, 0, 0} + {"D3", 272, 385}, + {"letter", 216, 279} }; -TEST_F(PageSizeTest, resize) { - EXPECT_FALSE(ps.valid()); - - for (const PageData *p = pageData; p && p->id; p++) { - ps.resize(p->id); - EXPECT_DOUBLE_EQ(ps.widthInMM(), p->width); - EXPECT_DOUBLE_EQ(ps.heightInMM(), p->height); +TEST(PageSizeTest, resize) { + PageSize pageSize; + EXPECT_FALSE(pageSize.valid()); + for (const PageData &data : pageData) { + pageSize.resize(data.name); + EXPECT_DOUBLE_EQ(pageSize.width().mm(), data.width) << data.name; + EXPECT_DOUBLE_EQ(pageSize.height().mm(), data.height) << data.name; } } -TEST_F(PageSizeTest, exceptions) { - EXPECT_THROW(ps.resize("a"), PageSizeException); - EXPECT_THROW(ps.resize("e4"), PageSizeException); - EXPECT_THROW(ps.resize("a4-unknown"), PageSizeException); +TEST(PageSizeTest, exceptions) { + PageSize pageSize; + EXPECT_THROW(pageSize.resize("a"), PageSizeException); + EXPECT_THROW(pageSize.resize("e4"), PageSizeException); + EXPECT_THROW(pageSize.resize("a4-unknown"), PageSizeException); } - - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/PairTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/PairTest.cpp index 0ed2aa65d37..47c5a732231 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/PairTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/PairTest.cpp @@ -2,7 +2,7 @@ ** PairTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -96,6 +96,24 @@ TEST(PairTest, div) { } +TEST(PairTest, neg) { + EXPECT_EQ(-DPair(0, 0), DPair(0, 0)); + EXPECT_EQ(-DPair(1, 2), DPair(-1, -2)); + EXPECT_EQ(-DPair(-1, -2), DPair(1, 2)); + EXPECT_EQ(-DPair(-1, 2), DPair(1, -2)); + EXPECT_EQ(-DPair(1, -2), DPair(-1, 2)); +} + + +TEST(PairTest, abs) { + EXPECT_EQ(abs(DPair(0, 0)), DPair(0, 0)); + EXPECT_EQ(abs(DPair(1, 2)), DPair(1, 2)); + EXPECT_EQ(abs(DPair(-1, -2)), DPair(1, 2)); + EXPECT_EQ(abs(DPair(-1, 2)), DPair(1, 2)); + EXPECT_EQ(abs(DPair(1, -2)), DPair(1, 2)); +} + + TEST(PairTest, equality) { ASSERT_TRUE(DPair(2,3) == DPair(2,3)); ASSERT_FALSE(DPair(2,3) == DPair(-2,-3)); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/PapersizeSpecialTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/PapersizeSpecialTest.cpp index 0bc7756223a..9a0abe4ada5 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/PapersizeSpecialTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/PapersizeSpecialTest.cpp @@ -2,7 +2,7 @@ ** PapersizeSpecialTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -25,9 +25,7 @@ using namespace std; - -class PapersizeSpecialTest : public ::testing::Test -{ +class PapersizeSpecialTest : public ::testing::Test { protected: class PapersizeSpecialActions : public EmptySpecialActions { public: @@ -80,8 +78,8 @@ class PapersizeSpecialTest : public ::testing::Test TEST_F(PapersizeSpecialTest, name) { EXPECT_EQ(handler.name(), "papersize"); + ASSERT_EQ(handler.prefixes().size(), 1u); ASSERT_STREQ(handler.prefixes()[0], "papersize="); - ASSERT_EQ(handler.prefixes()[1], nullptr); } @@ -152,9 +150,3 @@ TEST_F(PapersizeSpecialTest, multiPage2) { endPage(); ASSERT_EQ(bboxString(), "-72 -72 321 456"); } - - -TEST_F(PapersizeSpecialTest, error) { - ASSERT_THROW(preprocess("abc"), UnitException); - ASSERT_THROW(preprocess("123bp,456x"), UnitException); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/RangeMapTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/RangeMapTest.cpp index 83f2f9fe2d1..2364023f772 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/RangeMapTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/RangeMapTest.cpp @@ -2,7 +2,7 @@ ** RangeMapTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,89 +23,95 @@ using namespace std; +#define CHECK_RANGE(name, cmap, cmin, cmax, cid_min) \ + {SCOPED_TRACE(name); check_range(cmap, cmin, cmax, cid_min);} + +#define CHECK_ZERO(name, cmap, cmin, cmax) \ + {SCOPED_TRACE(name); check_zero(cmap, cmin, cmax);} + static void check_range (const RangeMap &rangemap, int min, int max, int minval) { for (int i=min; i <= max; i++) - ASSERT_EQ(rangemap.valueAt(i), minval+(i-min)); + ASSERT_EQ((int)rangemap.valueAt(i), minval+(i-min)); } static void check_zero (const RangeMap &rangemap, int min, int max) { for (int i=min; i <= max; i++) - ASSERT_EQ(rangemap.valueAt(i), 0); + ASSERT_EQ(rangemap.valueAt(i), 0u); } TEST(RangeMapTest, disjoint_ranges) { RangeMap rangemap; rangemap.addRange(5, 8, 1); - ASSERT_EQ(rangemap.size(), 1); - check_range(rangemap, 5, 8, 1); - check_zero(rangemap, 0, 4); - check_zero(rangemap, 9, 20); + ASSERT_EQ(rangemap.size(), 1u); + CHECK_RANGE("A", rangemap, 5, 8, 1); + CHECK_ZERO("B", rangemap, 0, 4); + CHECK_ZERO("C", rangemap, 9, 20); rangemap.addRange(10, 15, 5); - ASSERT_EQ(rangemap.size(), 2); - check_range(rangemap, 5, 8, 1); - check_range(rangemap, 10, 15, 5); - check_zero(rangemap, 0, 4); - check_zero(rangemap, 9, 9); - check_zero(rangemap, 16, 20); + ASSERT_EQ(rangemap.size(), 2u); + CHECK_RANGE("D", rangemap, 5, 8, 1); + CHECK_RANGE("E", rangemap, 10, 15, 5); + CHECK_ZERO("F", rangemap, 0, 4); + CHECK_ZERO("G", rangemap, 9, 9); + CHECK_ZERO("H", rangemap, 16, 20); rangemap.addRange(0, 3, 50); - ASSERT_EQ(rangemap.size(), 3); - check_range(rangemap, 0, 3, 50); - check_range(rangemap, 5, 8, 1); - check_range(rangemap, 10, 15, 5); - check_zero(rangemap, 4, 4); - check_zero(rangemap, 9, 9); - check_zero(rangemap, 16, 20); + ASSERT_EQ(rangemap.size(), 3u); + CHECK_RANGE("I", rangemap, 0, 3, 50); + CHECK_RANGE("J", rangemap, 5, 8, 1); + CHECK_RANGE("K", rangemap, 10, 15, 5); + CHECK_ZERO("L", rangemap, 4, 4); + CHECK_ZERO("M", rangemap, 9, 9); + CHECK_ZERO("N", rangemap, 16, 20); rangemap.addRange(16, 20, 1); - ASSERT_EQ(rangemap.size(), 4); - check_range(rangemap, 5, 8, 1); - check_range(rangemap, 10, 15, 5); - check_range(rangemap, 0, 3, 50); - check_range(rangemap, 16, 20, 1); + ASSERT_EQ(rangemap.size(), 4u); + CHECK_RANGE("O", rangemap, 5, 8, 1); + CHECK_RANGE("P", rangemap, 10, 15, 5); + CHECK_RANGE("Q", rangemap, 0, 3, 50); + CHECK_RANGE("R", rangemap, 16, 20, 1); } TEST(RangeMapTest, touching_ranges1) { RangeMap rangemap; rangemap.addRange(5, 8, 10); - ASSERT_EQ(rangemap.size(), 1); - check_range(rangemap, 5, 8, 10); + ASSERT_EQ(rangemap.size(), 1u); + CHECK_RANGE("A", rangemap, 5, 8, 10); rangemap.addRange(9, 15, 14); - ASSERT_EQ(rangemap.size(), 1); - check_range(rangemap, 5, 15, 10); + ASSERT_EQ(rangemap.size(), 1u); + CHECK_RANGE("B", rangemap, 5, 15, 10); rangemap.addRange(1, 4, 5); - ASSERT_EQ(rangemap.size(), 2); - check_range(rangemap, 1, 4, 5); - check_range(rangemap, 5, 15, 10); + ASSERT_EQ(rangemap.size(), 2u); + CHECK_RANGE("C", rangemap, 1, 4, 5); + CHECK_RANGE("D", rangemap, 5, 15, 10); rangemap.addRange(1, 4, 6); - ASSERT_EQ(rangemap.size(), 1); - check_range(rangemap, 1, 15, 6); + ASSERT_EQ(rangemap.size(), 1u); + CHECK_RANGE("E", rangemap, 1, 15, 6); } TEST(RangeMapTest, touching_ranges2) { RangeMap rangemap; rangemap.addRange(7, 8, 10); - ASSERT_EQ(rangemap.size(), 1); - check_range(rangemap, 7, 8, 10); + ASSERT_EQ(rangemap.size(), 1u); + CHECK_RANGE("A", rangemap, 7, 8, 10); rangemap.addRange(2, 3, 1); - ASSERT_EQ(rangemap.size(), 2); - check_range(rangemap, 2, 3, 1); - check_range(rangemap, 7, 8, 10); + ASSERT_EQ(rangemap.size(), 2u); + CHECK_RANGE("B", rangemap, 2, 3, 1); + CHECK_RANGE("C", rangemap, 7, 8, 10); rangemap.addRange(4, 4, 3); - ASSERT_EQ(rangemap.size(), 2); - check_range(rangemap, 2, 4, 1); - check_range(rangemap, 7, 8, 10); + ASSERT_EQ(rangemap.size(), 2u); + CHECK_RANGE("D", rangemap, 2, 4, 1); + CHECK_RANGE("E", rangemap, 7, 8, 10); } @@ -113,27 +119,27 @@ TEST(RangeMapTest, overlapping_ranges) { RangeMap rangemap; rangemap.addRange(5, 8, 10); rangemap.addRange(7, 15, 12); - ASSERT_EQ(rangemap.size(), 1); - check_range(rangemap, 5, 15, 10); + ASSERT_EQ(rangemap.size(), 1u); + CHECK_RANGE("A", rangemap, 5, 15, 10); rangemap.addRange(10, 20, 1); - ASSERT_EQ(rangemap.size(), 2); - check_range(rangemap, 5, 9, 10); - check_range(rangemap, 10, 20, 1); + ASSERT_EQ(rangemap.size(), 2u); + CHECK_RANGE("B", rangemap, 5, 9, 10); + CHECK_RANGE("C", rangemap, 10, 20, 1); rangemap.addRange(2, 7, 7); - ASSERT_EQ(rangemap.size(), 2); - check_range(rangemap, 2, 9, 7); - check_range(rangemap, 10, 20, 1); + ASSERT_EQ(rangemap.size(), 2u); + CHECK_RANGE("D", rangemap, 2, 9, 7); + CHECK_RANGE("E", rangemap, 10, 20, 1); rangemap.addRange(1, 12, 100); - ASSERT_EQ(rangemap.size(), 2); - check_range(rangemap, 1, 12, 100); - check_range(rangemap, 13, 20, 4); + ASSERT_EQ(rangemap.size(), 2u); + CHECK_RANGE("F", rangemap, 1, 12, 100); + CHECK_RANGE("G", rangemap, 13, 20, 4); rangemap.addRange(0, 30, 1); - ASSERT_EQ(rangemap.size(), 1); - check_range(rangemap, 0, 30, 1); + ASSERT_EQ(rangemap.size(), 1u); + CHECK_RANGE("H", rangemap, 0, 30, 1); } @@ -141,25 +147,25 @@ TEST(RangeMapTest, inner_ranges) { RangeMap rangemap; rangemap.addRange(5, 20, 1); rangemap.addRange(10, 15, 6); - ASSERT_EQ(rangemap.size(), 1); - check_range(rangemap, 5, 20, 1); + ASSERT_EQ(rangemap.size(), 1u); + CHECK_RANGE("A", rangemap, 5, 20, 1); rangemap.addRange(10, 15, 100); - ASSERT_EQ(rangemap.size(), 3); - check_range(rangemap, 5, 9, 1); - check_range(rangemap, 10, 15, 100); - check_range(rangemap, 16, 20, 12); + ASSERT_EQ(rangemap.size(), 3u); + CHECK_RANGE("B", rangemap, 5, 9, 1); + CHECK_RANGE("C", rangemap, 10, 15, 100); + CHECK_RANGE("D", rangemap, 16, 20, 12); rangemap.addRange(15, 15, 50); - ASSERT_EQ(rangemap.size(), 4); - check_range(rangemap, 5, 9, 1); - check_range(rangemap, 10, 14, 100); - check_range(rangemap, 15, 15, 50); - check_range(rangemap, 16, 20, 12); + ASSERT_EQ(rangemap.size(), 4u); + CHECK_RANGE("E", rangemap, 5, 9, 1); + CHECK_RANGE("F", rangemap, 10, 14, 100); + CHECK_RANGE("G", rangemap, 15, 15, 50); + CHECK_RANGE("H", rangemap, 16, 20, 12); rangemap.addRange(6, 19, 1); - ASSERT_EQ(rangemap.size(), 3); - check_range(rangemap, 5, 5, 1); - check_range(rangemap, 6, 19, 1); - check_range(rangemap, 20, 20, 16); + ASSERT_EQ(rangemap.size(), 3u); + CHECK_RANGE("I", rangemap, 5, 5, 1); + CHECK_RANGE("J", rangemap, 6, 19, 1); + CHECK_RANGE("K", rangemap, 20, 20, 16); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/SVGOutputTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/SVGOutputTest.cpp index 4d6c27611b1..bed1920d6db 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/SVGOutputTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/SVGOutputTest.cpp @@ -2,7 +2,7 @@ ** SVGOutputTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -25,10 +25,18 @@ #include "SVGOutput.hpp" #include "ZLibOutputStream.hpp" +#ifndef SRCDIR +#define SRCDIR "." +#endif + using namespace std; +struct SVGOutputTest : public ::testing::Test { + void SetUp () override {FileSystem::chdir(SRCDIR);} +}; + -TEST(SVGOutputTest, defaults) { +TEST_F(SVGOutputTest, defaults) { SVGOutput out("SVGOutputTest.cpp", ""); EXPECT_EQ(out.filename(1, 1), "SVGOutputTest.svg"); EXPECT_EQ(out.filename(5, 9), "SVGOutputTest-5.svg"); @@ -37,7 +45,7 @@ TEST(SVGOutputTest, defaults) { } -TEST(SVGOutputTest, widthSpecifier) { +TEST_F(SVGOutputTest, widthSpecifier) { { SVGOutput out("SVGOutputTest.cpp", "%f--%3p"); EXPECT_EQ(out.filename(5, 9), "SVGOutputTest--005.svg"); @@ -62,7 +70,7 @@ TEST(SVGOutputTest, widthSpecifier) { } -TEST(SVGOutputTest, expressions) { +TEST_F(SVGOutputTest, expressions) { { SVGOutput out("SVGOutputTest.cpp", "no-macro"); EXPECT_EQ(out.filename(5, 9), "no-macro.svg"); @@ -87,7 +95,7 @@ TEST(SVGOutputTest, expressions) { } -TEST(SVGOutputTest, getPageStream) { +TEST_F(SVGOutputTest, getPageStream) { { SVGOutput out(0, ""); ostream &os = out.getPageStream(1, 10); @@ -98,23 +106,24 @@ TEST(SVGOutputTest, getPageStream) { EXPECT_TRUE(dynamic_cast<ofstream*>(os1)); ostream *os2 = &out.getPageStream(1, 10); EXPECT_EQ(os1, os2); - FileSystem::remove("SVGOutputTest-01.svg"); - }{ + } + FileSystem::remove("SVGOutputTest-01.svg"); + { SVGOutput out("SVGOutputTest.cpp", "%f-%p", 9); ostream *os = &out.getPageStream(1, 10); EXPECT_TRUE(dynamic_cast<ZLibOutputStream*>(os)); - FileSystem::remove("SVGOutputTest-01.svgz"); } + FileSystem::remove("SVGOutputTest-01.svgz"); } -TEST(SVGOutputTest, ignore) { +TEST_F(SVGOutputTest, ignore) { SVGOutput out("SVGOutputTest.cpp", "%x %y"); EXPECT_EQ(out.filename(5, 9), "SVGOutputTest-5.svg"); } -TEST(SVGOutputTest, error) { +TEST_F(SVGOutputTest, error) { SVGOutput out("SVGOutputTest.cpp", "%(p/0)"); EXPECT_THROW(out.filename(5, 9), MessageException); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/ShadingPatchTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/ShadingPatchTest.cpp index 55eb05207d7..60821dd61f5 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/ShadingPatchTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/ShadingPatchTest.cpp @@ -1,8 +1,8 @@ /************************************************************************* -** ShadingPatch.cpp ** +** ShadingPatchTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -27,19 +27,14 @@ using namespace std; TEST(ShadingPatchTest, create) { - ShadingPatch *patch=0; - patch = ShadingPatch::create(4, Color::ColorSpace::RGB); - EXPECT_TRUE(dynamic_cast<TriangularPatch*>(patch)); - delete patch; + auto patch = ShadingPatch::create(4, Color::ColorSpace::RGB); + EXPECT_TRUE(dynamic_cast<TriangularPatch*>(patch.get())); patch = ShadingPatch::create(5, Color::ColorSpace::RGB); - EXPECT_TRUE(dynamic_cast<LatticeTriangularPatch*>(patch)); - delete patch; + EXPECT_TRUE(dynamic_cast<LatticeTriangularPatch*>(patch.get())); patch = ShadingPatch::create(6, Color::ColorSpace::RGB); - EXPECT_TRUE(dynamic_cast<CoonsPatch*>(patch)); - delete patch; + EXPECT_TRUE(dynamic_cast<CoonsPatch*>(patch.get())); patch = ShadingPatch::create(7, Color::ColorSpace::RGB); - EXPECT_TRUE(dynamic_cast<TensorProductPatch*>(patch)); - delete patch; + EXPECT_TRUE(dynamic_cast<TensorProductPatch*>(patch.get())); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/SpecialManagerTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/SpecialManagerTest.cpp new file mode 100644 index 00000000000..c6c43c60026 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/SpecialManagerTest.cpp @@ -0,0 +1,88 @@ +/************************************************************************* +** SpecialManagerTest.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#include <gtest/gtest.h> +#include <sstream> +#include "SpecialManager.hpp" +#include "BgColorSpecialHandler.hpp" +#include "ColorSpecialHandler.hpp" +#include "DvisvgmSpecialHandler.hpp" +#include "EmSpecialHandler.hpp" +#include "HtmlSpecialHandler.hpp" +#include "NoPsSpecialHandler.hpp" +#include "PapersizeSpecialHandler.hpp" +#include "PdfSpecialHandler.hpp" +#include "TpicSpecialHandler.hpp" +#include "utility.hpp" + +using namespace std; + +class SpecialManagerTest : public ::testing::Test { + public: + SpecialManagerTest () { + handlers.emplace_back(util::make_unique<BgColorSpecialHandler>()); + handlers.emplace_back(util::make_unique<ColorSpecialHandler>()); + handlers.emplace_back(util::make_unique<DvisvgmSpecialHandler>()); + handlers.emplace_back(util::make_unique<EmSpecialHandler>()); + handlers.emplace_back(util::make_unique<HtmlSpecialHandler>()); + handlers.emplace_back(util::make_unique<PapersizeSpecialHandler>()); + handlers.emplace_back(util::make_unique<PdfSpecialHandler>()); + handlers.emplace_back(util::make_unique<TpicSpecialHandler>()); + handlers.emplace_back(util::make_unique<NoPsSpecialHandler>()); + } + + vector<unique_ptr<SpecialHandler>> handlers; +}; + + +TEST_F(SpecialManagerTest, info1) { + SpecialManager &sm = SpecialManager::instance(); + sm.unregisterHandlers(); + sm.registerHandlers(handlers, ""); + ostringstream oss; + sm.writeHandlerInfo(oss); + string expected = + "bgcolor background color special\n" + "color complete support of color specials\n" + "dvisvgm special set for embedding raw SVG snippets\n" + "em line drawing statements of the emTeX special set\n" + "html hyperref specials\n" + "papersize special to set the page size\n" + "pdf PDF hyperlink, font map, and pagesize specials\n" + "tpic TPIC specials\n"; + EXPECT_EQ(oss.str(), expected); +} + + +TEST_F(SpecialManagerTest, info2) { + SpecialManager &sm = SpecialManager::instance(); + sm.unregisterHandlers(); + sm.registerHandlers(handlers, "color,em"); + ostringstream oss; + sm.writeHandlerInfo(oss); + string expected = + "bgcolor background color special\n" + "dvisvgm special set for embedding raw SVG snippets\n" + "html hyperref specials\n" + "papersize special to set the page size\n" + "pdf PDF hyperlink, font map, and pagesize specials\n" + "tpic TPIC specials\n"; + EXPECT_EQ(oss.str(), expected); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/SplittedCharInputBufferTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/SplittedCharInputBufferTest.cpp index a5dc91228c9..e891a5a5c38 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/SplittedCharInputBufferTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/SplittedCharInputBufferTest.cpp @@ -2,7 +2,7 @@ ** SplittedCharInputBufferTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -76,11 +76,9 @@ TEST(SplittedCharInputBufferTest, skip) { BufferInputReader in(buffer); in.skip(3); EXPECT_EQ(in.peek(), 'd'); - in.skipUntil("ijk", false); - EXPECT_EQ(in.peek(), 'i'); - in.skipUntil("ijk", true); + in.skipUntil("ijk"); EXPECT_EQ(in.peek(), 'l'); - in.skipUntil("z", true); + in.skipUntil("z"); EXPECT_TRUE(in.eof()); } @@ -119,25 +117,25 @@ TEST(SplittedCharInputBufferTest, parseUInt_base) { BufferInputReader in(buffer); unsigned n; EXPECT_TRUE(in.parseUInt(10, n)); - EXPECT_EQ(n, 1234); + EXPECT_EQ(n, 1234u); EXPECT_EQ(in.get(), ','); EXPECT_FALSE(in.parseUInt(10, n)); in.get(); EXPECT_TRUE(in.parseUInt(10, n)); - EXPECT_EQ(n, 5); + EXPECT_EQ(n, 5u); EXPECT_EQ(in.get(), ','); EXPECT_TRUE(in.parseUInt(16, n)); - EXPECT_EQ(n, 16); + EXPECT_EQ(n, 16u); EXPECT_EQ(in.get(), ','); EXPECT_TRUE(in.parseUInt(16, n)); - EXPECT_EQ(n, 0x1abc); + EXPECT_EQ(n, 0x1ABCu); EXPECT_EQ(in.get(), ','); EXPECT_TRUE(in.parseUInt(8, n)); - EXPECT_EQ(n, 01234); + EXPECT_EQ(n, 01234u); EXPECT_EQ(in.get(), 'a'); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamInputBufferTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamInputBufferTest.cpp index 064ec88308a..7faee21729a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamInputBufferTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamInputBufferTest.cpp @@ -2,7 +2,7 @@ ** StreamInputBufferTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -19,15 +19,15 @@ *************************************************************************/ #include <gtest/gtest.h> -#include <map> #include <sstream> #include <string> +#include <unordered_map> #include "InputBuffer.hpp" #include "InputReader.hpp" using std::istringstream; -using std::map; using std::string; +using std::unordered_map; TEST(StreamInputBufferTest, get) { istringstream iss("abcdefghijklmnopqrstuvwxyz"); @@ -76,11 +76,9 @@ TEST(StreamInputBufferTest, skip) { BufferInputReader in(buffer); in.skip(3); EXPECT_EQ(in.peek(), 'd'); - in.skipUntil("ijk", false); - EXPECT_EQ(in.peek(), 'i'); - in.skipUntil("ijk", true); + in.skipUntil("ijk"); EXPECT_EQ(in.peek(), 'l'); - in.skipUntil("z", true); + in.skipUntil("z"); EXPECT_TRUE(in.eof()); } @@ -117,25 +115,25 @@ TEST(StreamInputBufferTest, parseUInt_base) { BufferInputReader in(buffer); unsigned n; EXPECT_TRUE(in.parseUInt(10, n)); - EXPECT_EQ(n, 1234); + EXPECT_EQ(n, 1234u); EXPECT_EQ(in.get(), ','); EXPECT_FALSE(in.parseUInt(10, n)); in.get(); EXPECT_TRUE(in.parseUInt(10, n)); - EXPECT_EQ(n, 5); + EXPECT_EQ(n, 5u); EXPECT_EQ(in.get(), ','); EXPECT_TRUE(in.parseUInt(16, n)); - EXPECT_EQ(n, 16); + EXPECT_EQ(n, 16u); EXPECT_EQ(in.get(), ','); EXPECT_TRUE(in.parseUInt(16, n)); - EXPECT_EQ(n, 0x1abc); + EXPECT_EQ(n, 0x1ABCu); EXPECT_EQ(in.get(), ','); EXPECT_TRUE(in.parseUInt(8, n)); - EXPECT_EQ(n, 01234); + EXPECT_EQ(n, 01234u); EXPECT_EQ(in.get(), 'a'); } @@ -186,7 +184,7 @@ TEST(StreamInputBufferTest, attribs) { istringstream iss("aaa=1 bbb=2 ccc=3 d e"); StreamInputBuffer buffer(iss, 10); BufferInputReader in(buffer); - map<string,string> attr; + unordered_map<string,string> attr; int s = in.parseAttributes(attr); EXPECT_EQ(s, 3); EXPECT_EQ(attr["aaa"], "1"); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamReaderTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamReaderTest.cpp index 2ecc63ca7e3..5a0201ac04b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamReaderTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamReaderTest.cpp @@ -2,7 +2,7 @@ ** StreamReaderTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -49,12 +49,12 @@ TEST(StreamReaderTest, readStringCRC) { CRC32 crc; string str2 = reader.readString(iss.str().length(), crc); EXPECT_EQ(str1, str2); - EXPECT_EQ(crc.get(), 0x7c4ef359); + EXPECT_EQ(crc.get(), 0x7c4ef359u); iss.clear(); iss.str(str1); crc.reset(); str2 = reader.readString(crc, false); - EXPECT_EQ(crc.get(), 0x7c4ef359); + EXPECT_EQ(crc.get(), 0x7c4ef359u); } @@ -63,7 +63,7 @@ TEST(StreamReaderTest, readUnsigned) { istringstream iss(str); StreamReader reader(iss); uint32_t val = reader.readUnsigned(4); - EXPECT_EQ(val, 0x01020304); + EXPECT_EQ(val, 0x01020304u); } @@ -73,8 +73,8 @@ TEST(StreamReaderTest, readUnsignedCRC) { StreamReader reader(iss); CRC32 crc; uint32_t val = reader.readUnsigned(4, crc); - EXPECT_EQ(val, 0x01020304); - EXPECT_EQ(crc.get(), 0xb63cfbcd); + EXPECT_EQ(val, 0x01020304u); + EXPECT_EQ(crc.get(), 0xb63cfbcdu); } @@ -83,7 +83,7 @@ TEST(StreamReaderTest, readSigned) { istringstream iss(str); StreamReader reader(iss); int32_t val = reader.readSigned(4); - EXPECT_EQ(val, 0xffeeddcc); + EXPECT_EQ(val, int32_t(0xffeeddcc)); } @@ -93,8 +93,8 @@ TEST(StreamReaderTest, readSignedCRC) { StreamReader reader(iss); CRC32 crc; int32_t val = reader.readSigned(4, crc); - EXPECT_EQ(val, 0xffeeddcc); - EXPECT_EQ(crc.get(), 0xfa79118e); + EXPECT_EQ(val, int32_t(0xffeeddcc)); + EXPECT_EQ(crc.get(), 0xfa79118eu); } @@ -124,9 +124,9 @@ TEST(StreamReaderTest, readBytesCRC) { EXPECT_EQ(bytes[1], 0xee); EXPECT_EQ(bytes[2], 0xdd); EXPECT_EQ(bytes[3], 0); - EXPECT_EQ(crc.get(), 0x68ab9f15); + EXPECT_EQ(crc.get(), 0x68ab9f15u); int byte = reader.readByte(crc); EXPECT_EQ(byte, 0xcc); - EXPECT_EQ(crc.get(), 0x2d652e62); + EXPECT_EQ(crc.get(), 0x2d652e62u); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamWriterTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamWriterTest.cpp index e06ff36dfa8..c30f2907c21 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamWriterTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamWriterTest.cpp @@ -2,7 +2,7 @@ ** StreamWriterTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -47,7 +47,7 @@ TEST(StreamWriterTest, writeStringCRC) { string str = "dvisvgm converts DVI files to SVG."; writer.writeString(str, crc); EXPECT_EQ(oss.str(), str); - EXPECT_EQ(crc.get(), 0x7C4EF359); + EXPECT_EQ(crc.get(), 0x7C4EF359u); oss.str(""); crc.reset(); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/StringMatcherTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/StringMatcherTest.cpp new file mode 100644 index 00000000000..1d8af2f5d43 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/StringMatcherTest.cpp @@ -0,0 +1,77 @@ +/************************************************************************* +** StringMatcherTest.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#include <gtest/gtest.h> +#include <sstream> +#include "InputReader.hpp" + +using namespace std; + +TEST(StringMatcherTest, match1) { + istringstream iss; + StringMatcher matcher("pattern"); + StreamInputReader ir(iss); + EXPECT_FALSE(matcher.match(ir)); + EXPECT_EQ(matcher.charsRead(), 0u); +} + + +TEST(StringMatcherTest, match2) { + istringstream iss("abcpatpatternxyz"); + StringMatcher matcher(""); + StreamInputReader ir(iss); + EXPECT_TRUE(matcher.match(ir)); + EXPECT_EQ(matcher.charsRead(), 1u); +} + + +TEST(StringMatcherTest, match3) { + istringstream iss("abcpatatternxyz"); + StringMatcher matcher("pattern"); + StreamInputReader ir(iss); + EXPECT_FALSE(matcher.match(ir)); + EXPECT_EQ(matcher.charsRead(), 15u); +} + + +TEST(StringMatcherTest, match4) { + istringstream iss("abcpatpatternxyz"); + StringMatcher matcher("pattern"); + StreamInputReader ir(iss); + EXPECT_TRUE(matcher.match(ir)); + EXPECT_EQ(matcher.charsRead(), 13u); + iss.clear(); + iss.str("abcpatpattern"); + EXPECT_TRUE(matcher.match(ir)); + EXPECT_EQ(matcher.charsRead(), 13u); + iss.clear(); + iss.str("pattern"); + EXPECT_TRUE(matcher.match(ir)); + EXPECT_EQ(matcher.charsRead(), 7u); +} + + +TEST(StringMatcherTest, match5) { + istringstream iss("abcpatpatternxyz"); + StringMatcher matcher("pattern"); + StreamInputReader ir(iss); + EXPECT_TRUE(matcher.match(ir)); + EXPECT_EQ(matcher.charsRead(), 13u); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/SubfontTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/SubfontTest.cpp index 13b420e28a7..f5b251b6844 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/SubfontTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/SubfontTest.cpp @@ -2,7 +2,7 @@ ** SubfontTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -19,22 +19,12 @@ *************************************************************************/ #include <gtest/gtest.h> -#include "FileFinder.hpp" #include "Subfont.hpp" +#include "testutil.hpp" using namespace std; - -class SubfontTest : public ::testing::Test -{ - protected: - void SetUp () override { - FileFinder::init("SubfontTest", "SubfontTest", false); - } -}; - - -TEST_F(SubfontTest, collect_subfonts) { +TEST(SubfontTest, collect_subfonts) { try { if (SubfontDefinition *sfd = SubfontDefinition::lookup("sample")) { vector<Subfont*> subfonts; @@ -52,12 +42,12 @@ TEST_F(SubfontTest, collect_subfonts) { } -TEST_F(SubfontTest, read_table) { +TEST(SubfontTest, read_table) { try { - if (SubfontDefinition *sfd = SubfontDefinition::lookup("sample")) { + if (SubfontDefinition *sfd = SubfontDefinition::lookup("sampl")) { // check scanning of single value entries Subfont *subfont = sfd->subfont("02"); - ASSERT_TRUE(subfont != 0); + ASSERT_NE(subfont, nullptr); EXPECT_EQ(subfont->id(), "02"); EXPECT_EQ(subfont->decode(0), 0xff45); EXPECT_EQ(subfont->decode(1), 0xff46); @@ -68,7 +58,7 @@ TEST_F(SubfontTest, read_table) { // check scanning of ranges subfont = sfd->subfont("x1"); - ASSERT_TRUE(subfont != 0); + ASSERT_NE(subfont, nullptr); EXPECT_EQ(subfont->id(), "x1"); EXPECT_EQ(subfont->decode(0), 0x0010); EXPECT_EQ(subfont->decode(1), 0x0011); @@ -85,6 +75,8 @@ TEST_F(SubfontTest, read_table) { EXPECT_EQ(subfont->decode(0xa1), 0x2000); EXPECT_EQ(subfont->decode(0xa2), 0); } + else + WARNING("sample.sfd not found"); } catch (SubfontException &e) { FAIL() << e.what() << " in line " << e.lineno(); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/TFMReaderTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/TFMReaderTest.cpp index b0ddacb668a..0cda3a9c9fe 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/TFMReaderTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/TFMReaderTest.cpp @@ -2,7 +2,7 @@ ** TFMReaderTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -20,10 +20,12 @@ #include <gtest/gtest.h> #include <cstdlib> +#include <memory> #include <fstream> #include <string> #include <vector> #include "TFM.hpp" +#include "utility.hpp" #ifndef SRCDIR #define SRCDIR "." @@ -32,73 +34,66 @@ using namespace std; -class TFMReaderTest : public ::testing::Test -{ +class TFMReaderTest : public ::testing::Test { public: - TFMReaderTest () : tfm(0) {} - void SetUp () override { string fname = string(SRCDIR)+"/data/cmr10.tfm"; ifstream ifs(fname.c_str(), ios::binary); ASSERT_TRUE(ifs.is_open()) << "failed opening " << fname; - tfm = new TFM(ifs); - } - - void TearDown () override { - delete tfm; + tfm = util::make_unique<TFM>(ifs); } protected: - TFM *tfm; + unique_ptr<TFM> tfm; }; TEST_F(TFMReaderTest, properties) { - ASSERT_TRUE(tfm != 0); - ASSERT_EQ(tfm->getChecksum(), 0x4BF16079); - ASSERT_FALSE(tfm->verticalLayout()); - ASSERT_EQ(tfm->firstChar(), 0); - ASSERT_EQ(tfm->lastChar(), 127); - ASSERT_DOUBLE_EQ(tfm->getDesignSize(), 10.0*72.0/72.27); + ASSERT_NE(tfm, nullptr); + EXPECT_EQ(tfm->getChecksum(), 0x4BF16079u); + EXPECT_FALSE(tfm->verticalLayout()); + EXPECT_EQ(tfm->firstChar(), 0); + EXPECT_EQ(tfm->lastChar(), 127); + EXPECT_DOUBLE_EQ(tfm->getDesignSize(), 10.0*72.0/72.27); } TEST_F(TFMReaderTest, charWidth) { - ASSERT_TRUE(tfm != 0); - ASSERT_NEAR(tfm->getCharWidth('M'), 9.132, 0.001); - ASSERT_NEAR(tfm->getCharWidth('g'), 4.981, 0.001); - ASSERT_DOUBLE_EQ(tfm->getCharWidth(200), 0); + ASSERT_NE(tfm, nullptr); + EXPECT_NEAR(tfm->getCharWidth('M'), 9.132, 0.001); + EXPECT_NEAR(tfm->getCharWidth('g'), 4.981, 0.001); + EXPECT_DOUBLE_EQ(tfm->getCharWidth(200), 0); } TEST_F(TFMReaderTest, charHeight) { - ASSERT_TRUE(tfm != 0); - ASSERT_NEAR(tfm->getCharHeight('M'), 6.808, 0.001); - ASSERT_NEAR(tfm->getCharHeight('g'), 4.289, 0.001); - ASSERT_DOUBLE_EQ(tfm->getCharHeight(200), 0); + ASSERT_NE(tfm, nullptr); + EXPECT_NEAR(tfm->getCharHeight('M'), 6.808, 0.001); + EXPECT_NEAR(tfm->getCharHeight('g'), 4.289, 0.001); + EXPECT_DOUBLE_EQ(tfm->getCharHeight(200), 0); } TEST_F(TFMReaderTest, charDepth) { - ASSERT_TRUE(tfm != 0); - ASSERT_DOUBLE_EQ(tfm->getCharDepth('M'), 0); - ASSERT_NEAR(tfm->getCharDepth('g'), 1.937, 0.001); - ASSERT_DOUBLE_EQ(tfm->getCharDepth(200), 0); + ASSERT_NE(tfm, nullptr); + EXPECT_DOUBLE_EQ(tfm->getCharDepth('M'), 0); + EXPECT_NEAR(tfm->getCharDepth('g'), 1.937, 0.001); + EXPECT_DOUBLE_EQ(tfm->getCharDepth(200), 0); } TEST_F(TFMReaderTest, italicCorr) { - ASSERT_TRUE(tfm != 0); - ASSERT_DOUBLE_EQ(tfm->getItalicCorr('M'), 0); - ASSERT_NEAR(tfm->getItalicCorr('g'), 0.138, 0.001); - ASSERT_DOUBLE_EQ(tfm->getItalicCorr(200), 0); + ASSERT_NE(tfm, nullptr); + EXPECT_DOUBLE_EQ(tfm->getItalicCorr('M'), 0); + EXPECT_NEAR(tfm->getItalicCorr('g'), 0.138, 0.001); + EXPECT_DOUBLE_EQ(tfm->getItalicCorr(200), 0); } TEST_F(TFMReaderTest, params) { - ASSERT_TRUE(tfm != 0); - ASSERT_NEAR(tfm->getSpace(), 3.321, 0.001); - ASSERT_NEAR(tfm->getSpaceShrink(), 1.107, 0.001); - ASSERT_NEAR(tfm->getSpaceStretch(), 1.66, 0.001); - ASSERT_NEAR(tfm->getQuad(), 9.963, 0.001); + ASSERT_NE(tfm, nullptr); + EXPECT_NEAR(tfm->getSpace(), 3.321, 0.001); + EXPECT_NEAR(tfm->getSpaceShrink(), 1.107, 0.001); + EXPECT_NEAR(tfm->getSpaceStretch(), 1.66, 0.001); + EXPECT_NEAR(tfm->getQuad(), 9.963, 0.001); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/TensorProductPatchTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/TensorProductPatchTest.cpp index de95ac478bd..9d22700c11d 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/TensorProductPatchTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/TensorProductPatchTest.cpp @@ -2,7 +2,7 @@ ** TensorProductPatchTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -26,8 +26,29 @@ using namespace std; -class TensorProductPatchTest : public ::testing::Test -{ +#define EXPECT_NEAR_PAIR(name, p1, p2, eps) \ + {SCOPED_TRACE(name); expect_near_pair(p1, p2, eps);} + +#define EXPECT_EQUAL_PAIR(name, p1, p2) \ + {SCOPED_TRACE(name); expect_equal_pair(p1, p2);} + +#define CHECK_BEZIER_POINTS(name, bezier, p1, p2, p3, p4) \ + {SCOPED_TRACE(name); checkBezierPoints(bezier, p1, p2, p3, p4);} + + +static void expect_near_pair (const DPair &p1, const DPair &p2, double eps) { + EXPECT_NEAR(p1.x(), p2.x(), eps); + EXPECT_NEAR(p1.y(), p2.y(), eps); +} + + +static void expect_equal_pair (const DPair &p1, const DPair &p2) { + EXPECT_DOUBLE_EQ(p1.x(), p2.x()); + EXPECT_DOUBLE_EQ(p1.y(), p2.y()); +} + + +class TensorProductPatchTest : public ::testing::Test { protected: void SetUp () override { _points.resize(16); @@ -64,15 +85,6 @@ class TensorProductPatchTest : public ::testing::Test EXPECT_EQ(b.point(3), p4); } - void expectNear (const DPair &p1, const DPair &p2, double eps) const { - EXPECT_NEAR(p1.x(), p2.x(), eps); - EXPECT_NEAR(p1.y(), p2.y(), eps); - } - - void expectEqual (const DPair &p1, const DPair &p2) const { - EXPECT_DOUBLE_EQ(p1.x(), p2.x()); - EXPECT_DOUBLE_EQ(p1.y(), p2.y()); - } protected: vector<DPair> _points; @@ -174,13 +186,13 @@ TEST_F(TensorProductPatchTest, vertices) { TEST_F(TensorProductPatchTest, curves) { Bezier bezier; _patch.horizontalCurve(0, bezier); - checkBezierPoints(bezier, DPair(10, 10), DPair(20, 0), DPair(50, 30), DPair(70, 20)); + CHECK_BEZIER_POINTS("A", bezier, DPair(10, 10), DPair(20, 0), DPair(50, 30), DPair(70, 20)); _patch.horizontalCurve(1, bezier); - checkBezierPoints(bezier, DPair(10, 70), DPair(20, 100), DPair(70, 100), DPair(100, 70)); + CHECK_BEZIER_POINTS("B", bezier, DPair(10, 70), DPair(20, 100), DPair(70, 100), DPair(100, 70)); _patch.verticalCurve(0, bezier); - checkBezierPoints(bezier, DPair(10, 10), DPair(0, 30), DPair(20, 40), DPair(10, 70)); + CHECK_BEZIER_POINTS("C", bezier, DPair(10, 10), DPair(0, 30), DPair(20, 40), DPair(10, 70)); _patch.verticalCurve(1, bezier); - checkBezierPoints(bezier, DPair(70, 20), DPair(80, 50), DPair(90, 60), DPair(100, 70)); + CHECK_BEZIER_POINTS("D", bezier, DPair(70, 20), DPair(80, 50), DPair(90, 60), DPair(100, 70)); } @@ -214,11 +226,11 @@ TEST_F(TensorProductPatchTest, blossom_inner) { TEST_F(TensorProductPatchTest, values) { - expectEqual(_patch.valueAt(0.25, 0.5), _patch.blossomValue(0.25, 0.25, 0.25, 0.5, 0.5, 0.5)); - expectNear(_patch.valueAt(0.25, 0.5), DPair(26.1133, 48.457), 0.0001); + EXPECT_EQUAL_PAIR("A", _patch.valueAt(0.25, 0.5), _patch.blossomValue(0.25, 0.25, 0.25, 0.5, 0.5, 0.5)); + EXPECT_NEAR_PAIR("B", _patch.valueAt(0.25, 0.5), DPair(26.1133, 48.457), 0.0001); - expectEqual(_patch.valueAt(0.8, 0.2), _patch.blossomValue(0.8, 0.8, 0.8, 0.2, 0.2, 0.2)); - expectNear(_patch.valueAt(0.8, 0.2), DPair(59.5974, 35.4502), 0.0001); + EXPECT_EQUAL_PAIR("C", _patch.valueAt(0.8, 0.2), _patch.blossomValue(0.8, 0.8, 0.8, 0.2, 0.2, 0.2)); + EXPECT_NEAR_PAIR("D", _patch.valueAt(0.8, 0.2), DPair(59.5974, 35.4502), 0.0001); } @@ -238,7 +250,7 @@ TEST_F(TensorProductPatchTest, subpatch) { tpp.getBoundaryPath(path); ostringstream oss; path.writeSVG(oss, false); - EXPECT_EQ(oss.str(), "M10 10C5 20 7.5 27.5 10 36.25C20.625 46.875 31.25 52.1875 43.2812 54.2188C40 40.9375 36.25 27.5 36.25 15C25 10 15 5 10 10Z"); + EXPECT_EQ(oss.str(), "M10 10C5 20 7.5 27.5 10 36.25C20.625 46.875 31.25 52.1875 43.28125 54.21875C40 40.9375 36.25 27.5 36.25 15C25 10 15 5 10 10Z"); EXPECT_EQ(tpp.colorAt(0, 0).rgbString(), "#ff0000"); EXPECT_EQ(tpp.colorAt(0, 1).rgbString(), "#ff8000"); EXPECT_EQ(tpp.colorAt(1, 0).rgbString(), "#808000"); @@ -286,10 +298,10 @@ TEST_F(TensorProductPatchTest, approximate) { _patch.approximate(2, false, 0.1, callback); EXPECT_EQ( callback.pathstr(), - "M10 10C15 5 25 10 36.25 15C36.25 27.5 40 40.9375 43.2812 54.2188C31.25 52.1875 20.625 46.875 10 36.25C7.5 27.5 5 20 10 10Z" - "M36.25 15C47.5 20 60 25 70 20C75 35 80 45 85 52.5C68.75 55 55.3125 56.25 43.2812 54.2188C40 40.9375 36.25 27.5 36.25 15Z" - "M10 36.25C20.625 46.875 31.25 52.1875 43.2812 54.2188C46.5625 67.5 49.375 80.625 47.5 92.5C30 92.5 15 85 10 70C15 55 12.5 45 10 36.25Z" - "M43.2812 54.2188C55.3125 56.25 68.75 55 85 52.5C90 60 95 65 100 70C85 85 65 92.5 47.5 92.5C49.375 80.625 46.5625 67.5 43.2812 54.2188Z"); + "M10 10C15 5 25 10 36.25 15C36.25 27.5 40 40.9375 43.28125 54.21875C31.25 52.1875 20.625 46.875 10 36.25C7.5 27.5 5 20 10 10Z" + "M36.25 15C47.5 20 60 25 70 20C75 35 80 45 85 52.5C68.75 55 55.3125 56.25 43.28125 54.21875C40 40.9375 36.25 27.5 36.25 15Z" + "M10 36.25C20.625 46.875 31.25 52.1875 43.28125 54.21875C46.5625 67.5 49.375 80.625 47.5 92.5C30 92.5 15 85 10 70C15 55 12.5 45 10 36.25Z" + "M43.28125 54.21875C55.3125 56.25 68.75 55 85 52.5C90 60 95 65 100 70C85 85 65 92.5 47.5 92.5C49.375 80.625 46.5625 67.5 43.28125 54.21875Z"); EXPECT_EQ(callback.colorstr(), "#cf6010#70a030#efa030#cf6090"); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/ToUnicodeMapTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/ToUnicodeMapTest.cpp index 29ffc6f2684..d5c61d8f3ed 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/ToUnicodeMapTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/ToUnicodeMapTest.cpp @@ -2,7 +2,7 @@ ** ToUnicodeMapTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -25,35 +25,37 @@ using namespace std; -#define CHECK_RANGE(ucmap, min, max, minval) check_range(ucmap, min, max, minval, __LINE__) +#define CHECK_RANGE(name, ucmap, min, max, minval) \ + {SCOPED_TRACE(name); check_range(ucmap, min, max, minval);} -static void check_range (const ToUnicodeMap &ucmap, uint32_t min, uint32_t max, uint32_t minval, int line) { + +static void check_range (const ToUnicodeMap &ucmap, uint32_t min, uint32_t max, uint32_t minval) { for (uint32_t i=min; i <= max; i++) - ASSERT_EQ(ucmap.valueAt(i), minval+(i-min)) << __FILE__ << ":" << line << ": i=" << i; + ASSERT_EQ(ucmap.valueAt(i), minval+(i-min)) << "i=" << i; } TEST(ToUnicodeMapTest, addMissingMappings1) { ToUnicodeMap ucmap; ASSERT_TRUE(ucmap.addMissingMappings(20)); - ASSERT_EQ(ucmap.size(), 1); - CHECK_RANGE(ucmap, 1, 20, 1); + ASSERT_EQ(ucmap.size(), 1u); + CHECK_RANGE("A", ucmap, 1, 20, 1); } TEST(ToUnicodeMapTest, addMissingMappings2) { ToUnicodeMap ucmap; ucmap.addRange(5, 8, 40); - ASSERT_EQ(ucmap.size(), 1); - CHECK_RANGE(ucmap, 5, 8, 40); + ASSERT_EQ(ucmap.size(), 1u); + CHECK_RANGE("A", ucmap, 5, 8, 40); ucmap.addRange(10, 15, 50); - ASSERT_EQ(ucmap.size(), 2); - CHECK_RANGE(ucmap, 5, 8, 40); - CHECK_RANGE(ucmap, 10, 15, 50); + ASSERT_EQ(ucmap.size(), 2u); + CHECK_RANGE("B", ucmap, 5, 8, 40); + CHECK_RANGE("C", ucmap, 10, 15, 50); ASSERT_TRUE(ucmap.addMissingMappings(20)); - ASSERT_EQ(ucmap.size(), 2); - CHECK_RANGE(ucmap, 1, 9, 36); - CHECK_RANGE(ucmap, 10, 20, 50); + ASSERT_EQ(ucmap.size(), 2u); + CHECK_RANGE("D", ucmap, 1, 9, 36); + CHECK_RANGE("E", ucmap, 10, 20, 50); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/TpicSpecialTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/TpicSpecialTest.cpp new file mode 100644 index 00000000000..fd849096539 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/TpicSpecialTest.cpp @@ -0,0 +1,398 @@ +/************************************************************************* +** TpicSpecialTest.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#include <gtest/gtest.h> +#include <sstream> +#include "SpecialActions.hpp" +#include "TpicSpecialHandler.hpp" +#include "utility.hpp" +#include "XMLNode.hpp" +#include "XMLString.hpp" + +using namespace std; + + +class TpicSpecialTest : public ::testing::Test { + protected: + class ActionsRecorder : public EmptySpecialActions { + public: + ActionsRecorder () : x(), y(), page("page") {} + void appendToPage(unique_ptr<XMLNode> &&node) {page.append(std::move(node));} + void embed (const BoundingBox &bb) {bbox.embed(bb);} + void setX (double xx) {x = xx;} + void setY (double yy) {x = yy;} + double getX () const {return x;} + double getY () const {return y;} + Color getColor () const {return color;} + void setColor (const Color &c) {color = c;} + void clear () {page.clear(); bbox=BoundingBox(0, 0, 0, 0);} + const Matrix& getMatrix () const {static Matrix m(1); return m;} + string getXMLSnippet () const { + ostringstream oss; + for (const auto &child : page.children()) + child->write(oss); + return oss.str(); + } + + void write (ostream &os) const { + os << "page: " << page << '\n' + << "bbox: " << bbox.toSVGViewBox() << '\n'; + } + + private: + double x, y; + Color color; + XMLElementNode page; + BoundingBox bbox; + }; + + + class MyTpicSpecialHandler : public TpicSpecialHandler { + public: + MyTpicSpecialHandler (SpecialActions &a) : actions(a) {} + void finishPage () {dviEndPage(0, actions);} + bool processSpecial (const char *cmd, string params="") { + stringstream ss; + ss << params; + return process(cmd, ss, actions); + } + + protected: + SpecialActions &actions; + }; + + public: + TpicSpecialTest () : handler(recorder) {} + + void SetUp () override { + XMLString::DECIMAL_PLACES=2; + recorder.clear(); + } + + + protected: + ActionsRecorder recorder; + MyTpicSpecialHandler handler; +}; + + +TEST_F(TpicSpecialTest, name) { + EXPECT_EQ(handler.name(), "tpic"); +} + + +TEST_F(TpicSpecialTest, fail) { + EXPECT_FALSE(handler.processSpecial(nullptr)); + EXPECT_FALSE(handler.processSpecial("")); + EXPECT_FALSE(handler.processSpecial("x")); + EXPECT_FALSE(handler.processSpecial("xy")); + EXPECT_FALSE(handler.processSpecial("xyz")); + EXPECT_FALSE(handler.processSpecial("bk ")); +} + + +TEST_F(TpicSpecialTest, set_fill_intensity) { + EXPECT_LT(handler.grayLevel(), 0); // no fill color set by default + EXPECT_TRUE(handler.processSpecial("bk")); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 1); + EXPECT_TRUE(handler.processSpecial("wh")); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 0); + EXPECT_TRUE(handler.processSpecial("sh")); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 0.5); + EXPECT_TRUE(handler.processSpecial("sh", "0.1")); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 0.1); + EXPECT_TRUE(handler.processSpecial("sh", "0.6")); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 0.6); + EXPECT_TRUE(handler.processSpecial("sh", "2")); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 1); + EXPECT_TRUE(handler.processSpecial("sh", "-2")); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 0); +} + + +TEST_F(TpicSpecialTest, set_penwidth) { + const double mi2bp=0.072; // milli-inch to PS points + EXPECT_DOUBLE_EQ(handler.penwidth(), 1); + handler.processSpecial("pn", "1000"); + EXPECT_DOUBLE_EQ(handler.penwidth(), 1000*mi2bp); + handler.processSpecial("pn", "-10"); + EXPECT_DOUBLE_EQ(handler.penwidth(), 0); +} + + +TEST_F(TpicSpecialTest, dot) { + handler.processSpecial("pn", "1000"); + handler.processSpecial("pa", "0 0"); + handler.processSpecial("bk"); + handler.processSpecial("fp"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<circle cx='0' cy='0' r='36'/>" + ); + EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); + EXPECT_LT(handler.grayLevel(), 0); +} + + +TEST_F(TpicSpecialTest, stroke_polyline) { + handler.processSpecial("pa", "0 0"); + handler.processSpecial("pa", "1000 1000"); + handler.processSpecial("pa", "1000 0"); + handler.processSpecial("fp"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<polyline fill='none' points='0,0 72,72 72,0' stroke='#000000' stroke-linecap='round' stroke-width='1'/>" + ); + EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); + EXPECT_LT(handler.grayLevel(), 0); +} + + +TEST_F(TpicSpecialTest, stroke_polygon) { + handler.processSpecial("pa", "0 0"); + handler.processSpecial("pa", "1000 1000"); + handler.processSpecial("pa", "1000 0"); + handler.processSpecial("pa", "0 0"); + handler.processSpecial("pa", "0 0"); + handler.processSpecial("fp"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<polygon fill='none' points='0,0 72,72 72,0' stroke='#000000' stroke-width='1'/>" + ); + EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); + EXPECT_LT(handler.grayLevel(), 0); +} + + +TEST_F(TpicSpecialTest, fill_polygon) { + handler.processSpecial("pa", "0 0"); + handler.processSpecial("pa", "1000 1000"); + handler.processSpecial("pa", "1000 0"); + handler.processSpecial("pa", "0 0"); + handler.processSpecial("wh"); + handler.processSpecial("fp"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<polygon fill='#ffffff' points='0,0 72,72 72,0' stroke='#000000' stroke-width='1'/>" + ); + EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); + EXPECT_LT(handler.grayLevel(), 0); + recorder.clear(); + handler.processSpecial("pa", "0 0"); + handler.processSpecial("pa", "1000 1000"); + handler.processSpecial("pa", "1000 0"); + handler.processSpecial("pa", "0 0"); + handler.processSpecial("wh"); + handler.processSpecial("ip"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<polygon fill='#ffffff' points='0,0 72,72 72,0'/>" + ); + EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); + EXPECT_LT(handler.grayLevel(), 0); +} + + +TEST_F(TpicSpecialTest, fill_dashed_polygon) { + handler.processSpecial("pa", "0 0"); + handler.processSpecial("pa", "1000 1000"); + handler.processSpecial("pa", "1000 0"); + handler.processSpecial("pa", "0 0"); + handler.processSpecial("wh"); + handler.processSpecial("da", "2"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<polygon fill='#ffffff' points='0,0 72,72 72,0' stroke='#000000' stroke-dasharray='144' stroke-width='1'/>" + ); + EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); + EXPECT_LT(handler.grayLevel(), 0); +} + + +TEST_F(TpicSpecialTest, fill_dotted_polygon) { + handler.processSpecial("pn", "500"); + handler.processSpecial("pa", "0 0"); + handler.processSpecial("pa", "1000 1000"); + handler.processSpecial("pa", "1000 0"); + handler.processSpecial("pa", "0 0"); + handler.processSpecial("wh"); + handler.processSpecial("dt", "2 2"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<polygon fill='#ffffff' points='0,0 72,72 72,0' stroke='#000000' stroke-dasharray='36 144' stroke-width='36'/>" + ); + EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); + EXPECT_LT(handler.grayLevel(), 0); +} + + +TEST_F(TpicSpecialTest, stroke_spline) { + handler.processSpecial("pa", "0 0"); + handler.processSpecial("pa", "1000 1000"); + handler.processSpecial("sp"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<polyline fill='none' points='0,0 72,72' stroke='#000000' stroke-linecap='round' stroke-width='1'/>" + ); + recorder.clear(); + handler.processSpecial("pa", "0 0"); + handler.processSpecial("pa", "1000 1000"); + handler.processSpecial("pa", "1500 500"); + handler.processSpecial("pa", "2000 1000"); + handler.processSpecial("pa", "3000 2000"); + handler.processSpecial("pa", "1000 500"); + handler.processSpecial("sp"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<path d='M0 0L36 36Q72 72 90 54Q108 36 126 54T180 108Q216 144 144 90L72 36' fill='none' stroke='#000000' stroke-width='1'/>" + ); + EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); + EXPECT_LT(handler.grayLevel(), 0); +} + + +TEST_F(TpicSpecialTest, stroke_dashed_spline) { + handler.processSpecial("pa", "0 0"); + handler.processSpecial("pa", "1000 1000"); + handler.processSpecial("pa", "1500 500"); + handler.processSpecial("pa", "2000 1000"); + handler.processSpecial("pa", "3000 2000"); + handler.processSpecial("pa", "0 0"); + handler.processSpecial("sp", "1"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<path d='M0 0L36 36Q72 72 90 54Q108 36 126 54T180 108Q216 144 108 72Z' fill='none' stroke='#000000' stroke-dasharray='72' stroke-width='1'/>" + ); + EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); + EXPECT_LT(handler.grayLevel(), 0); +} + + +TEST_F(TpicSpecialTest, stroke_dotted_spline) { + handler.processSpecial("pa", "0 0"); + handler.processSpecial("pa", "1000 1000"); + handler.processSpecial("pa", "1500 500"); + handler.processSpecial("pa", "2000 1000"); + handler.processSpecial("pa", "3000 2000"); + handler.processSpecial("pa", "1000 500"); + handler.processSpecial("sp", "-1"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<path d='M0 0L36 36Q72 72 90 54Q108 36 126 54T180 108Q216 144 144 90L72 36' fill='none' stroke='#000000' stroke-dasharray='1 72' stroke-width='1'/>" + ); + EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); + EXPECT_LT(handler.grayLevel(), 0); +} + + +TEST_F(TpicSpecialTest, stroke_ellipse) { + handler.processSpecial("ar", "0 0 500 500 0 7"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<circle cx='0' cy='0' fill='none' r='36' stroke='#000000' stroke-width='1'/>" + ); + recorder.clear(); + handler.processSpecial("ar", "0 0 1000 500 0 7"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<ellipse cx='0' cy='0' fill='none' rx='72' ry='36' stroke='#000000' stroke-width='1'/>" + ); + recorder.clear(); + handler.processSpecial("pn", "100"); + handler.processSpecial("ar", "0 0 1000 500 -1 -8"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<ellipse cx='0' cy='0' fill='none' rx='72' ry='36' stroke='#000000' stroke-width='7.2'/>" + ); +} + + +TEST_F(TpicSpecialTest, fill_ellipse) { + handler.processSpecial("bk"); + handler.processSpecial("ia", "0 0 500 500 0 7"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<circle cx='0' cy='0' fill='#000000' r='36'/>" + ); + recorder.clear(); + handler.processSpecial("bk"); + handler.processSpecial("ia", "0 0 1000 500 0 7"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<ellipse cx='0' cy='0' fill='#000000' rx='72' ry='36'/>" + ); + recorder.clear(); + handler.processSpecial("pn", "100"); + handler.processSpecial("wh"); + handler.processSpecial("ia", "0 0 1000 500 -1 -8"); + EXPECT_EQ(recorder.getXMLSnippet(), + "<ellipse cx='0' cy='0' fill='#ffffff' rx='72' ry='36'/>" + ); +} + + +TEST_F(TpicSpecialTest, stroke_arc) { + handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(math::PI/4)); + EXPECT_EQ(recorder.getXMLSnippet(), + "<path d='M72 0A72 36 0 0 1 50.91 25.46' fill='none' stroke='#000000' stroke-linecap='round' stroke-width='1'/>" + ); + recorder.clear(); + handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(math::PI/2)); + EXPECT_EQ(recorder.getXMLSnippet(), + "<path d='M72 0A72 36 0 0 1 0 36' fill='none' stroke='#000000' stroke-linecap='round' stroke-width='1'/>" + ); + recorder.clear(); + handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(3*math::PI/4)); + EXPECT_EQ(recorder.getXMLSnippet(), + "<path d='M72 0A72 36 0 0 1 -50.91 25.46' fill='none' stroke='#000000' stroke-linecap='round' stroke-width='1'/>" + ); + recorder.clear(); + handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(math::PI)); + EXPECT_EQ(recorder.getXMLSnippet(), + "<path d='M72 0A72 36 0 1 1 -72 0' fill='none' stroke='#000000' stroke-linecap='round' stroke-width='1'/>" + ); + recorder.clear(); + handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(5*math::PI/4)); + EXPECT_EQ(recorder.getXMLSnippet(), + "<path d='M72 0A72 36 0 1 1 -50.91 -25.46' fill='none' stroke='#000000' stroke-linecap='round' stroke-width='1'/>" + ); + recorder.clear(); + handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(3*math::PI/2)); + EXPECT_EQ(recorder.getXMLSnippet(), + "<path d='M72 0A72 36 0 1 1 0 -36' fill='none' stroke='#000000' stroke-linecap='round' stroke-width='1'/>" + ); + recorder.clear(); + handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(-3*math::PI/2)); + EXPECT_EQ(recorder.getXMLSnippet(), + "<path d='M72 0A72 36 0 0 1 0 36' fill='none' stroke='#000000' stroke-linecap='round' stroke-width='1'/>" + ); +} + + +TEST_F(TpicSpecialTest, bit_pattern) { + handler.processSpecial("tx", ""); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 1); + handler.processSpecial("tx", " \t \n "); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 1); + handler.processSpecial("tx", "INVALID"); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 1); + handler.processSpecial("tx", "0"); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 1); + handler.processSpecial("tx", "f"); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 0); + handler.processSpecial("tx", "1248"); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-4.0/16.0); + handler.processSpecial("tx", "12480"); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-4.0/20.0); + handler.processSpecial("tx", "DEAD BEEF"); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-24.0/32.0); + handler.processSpecial("tx", "123456789abcdef"); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-32.0/60.0); + handler.processSpecial("tx", "123456789ABCDEF0"); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-32.0/64.0); + handler.processSpecial("tx", "1234 5678 9abc def "); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-32.0/60.0); + handler.processSpecial("tx", "1234 5678 X 9abc def"); + EXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-13.0/32.0); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/TriangularPatchTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/TriangularPatchTest.cpp index 49d975754bd..747728b2602 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/TriangularPatchTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/TriangularPatchTest.cpp @@ -1,8 +1,8 @@ /************************************************************************* -** XMLStringTest.cpp ** +** TriangularPatchTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/UnicodeTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/UnicodeTest.cpp index addf349101a..08b39d8c9f0 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/UnicodeTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/UnicodeTest.cpp @@ -2,7 +2,7 @@ ** UnicodeTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -42,9 +42,9 @@ TEST(UnicodeTest, charToCodepoint) { EXPECT_EQ(Unicode::charToCodepoint(i), i) << "i=" << i; for (uint32_t i=0x7f; i <= 0x9f; i++) EXPECT_EQ(Unicode::charToCodepoint(i), 0xe021+i-0x7f) << "i=" << i; - EXPECT_EQ(Unicode::charToCodepoint(0x10fffd), 0x10fffd); - EXPECT_EQ(Unicode::charToCodepoint(0x10fffe), 0xe887); - EXPECT_EQ(Unicode::charToCodepoint(0x10ffff), 0xe888); + EXPECT_EQ(Unicode::charToCodepoint(0x10fffd), 0x10fffdu); + EXPECT_EQ(Unicode::charToCodepoint(0x10fffe), 0xe887u); + EXPECT_EQ(Unicode::charToCodepoint(0x10ffff), 0xe888u); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/UtilityTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/UtilityTest.cpp index 3ed509bfb1d..57ae2afff64 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/UtilityTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/UtilityTest.cpp @@ -1,3 +1,23 @@ +/************************************************************************* +** UtilityTest.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + #include <gtest/gtest.h> #include <cmath> #include <limits> @@ -36,14 +56,51 @@ TEST(UtilityTest, normalize_space) { TEST(UtilityTest, tolower) { - string str; - ASSERT_EQ(str, ""); - ASSERT_EQ(tolower(str), ""); - ASSERT_EQ(tolower(str="abcdefg"), "abcdefg"); - ASSERT_EQ(tolower(str="ABCDEFG"), "abcdefg"); - ASSERT_EQ(tolower(str="123XyZ456"), "123xyz456"); - ASSERT_EQ(tolower(str="123\nXyZ 456"), "123\nxyz 456"); - ASSERT_EQ(str, "123\nxyz 456"); + ASSERT_EQ(tolower(""), ""); + ASSERT_EQ(tolower("abcdefg"), "abcdefg"); + ASSERT_EQ(tolower("ABCDEFG"), "abcdefg"); + ASSERT_EQ(tolower("123XyZ456"), "123xyz456"); + ASSERT_EQ(tolower("123\nXyZ 456"), "123\nxyz 456"); +} + + +TEST(UtilityTest, replace) { + ASSERT_EQ(replace("abcdebcxyb", "bc", ","), "a,de,xyb"); + ASSERT_EQ(replace("abcdebcxyb", "bc", " : "), "a : de : xyb"); + ASSERT_EQ(replace("abcdebcxyb", "", ","), "abcdebcxyb"); + ASSERT_EQ(replace("abcdebcxyb", "bc", ""), "abcdebcxyb"); + ASSERT_EQ(replace("abcdebcxyb", "b", " B "), "a B cde B cxy B "); + ASSERT_EQ(replace("", "b", " B "), ""); + ASSERT_EQ(replace("a,b, c ,d , e", " ,", ","), "a,b, c,d, e"); +} + + +TEST(UtilityTest, split) { + vector<string> parts = split("", ","); + ASSERT_EQ(parts.size(), 1u); + EXPECT_EQ(parts[0], ""); + + parts = split("abcde", ""); + ASSERT_EQ(parts.size(), 1u); + EXPECT_EQ(parts[0], "abcde"); + + parts = split("abcde", ","); + ASSERT_EQ(parts.size(), 1u); + EXPECT_EQ(parts[0], "abcde"); + + parts = split("1,2 , 3, 4 ,,5", ","); + ASSERT_EQ(parts.size(), 6u); + size_t count=0; + for (const string &part : {"1", "2 ", " 3", " 4 ", "", "5"}) { + EXPECT_EQ(parts[count++], part); + } + + parts = split("1 sep2sep3, sep", "sep"); + ASSERT_EQ(parts.size(), 4u); + count=0; + for (const string &part : {"1 ", "2", "3, ", ""}) { + EXPECT_EQ(parts[count++], part); + } } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/VectorIteratorTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/VectorIteratorTest.cpp index 8febc5479dc..c406e517c7e 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/VectorIteratorTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/VectorIteratorTest.cpp @@ -2,7 +2,7 @@ ** VectorIteratorTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -32,7 +32,7 @@ TEST(VectorIteratorTest, inc) { EXPECT_EQ(*it, 3); EXPECT_EQ(*++it, 2); EXPECT_TRUE(it.valid()); - for (int i=2; it.valid(); i++) { + for (size_t i=2; it.valid(); i++) { EXPECT_LT(i, vec.size()) << "i=" << i; EXPECT_EQ(*it, vec[i]) << "*it=" << *it << ", vec[" << i << "]=" << vec[i]; ++it; @@ -59,7 +59,7 @@ TEST(VectorIteratorTest, dec) { EXPECT_EQ(*it, 7); EXPECT_EQ(*--it, 8); EXPECT_TRUE(it.valid()); - for (int i=4; it.valid(); i--) { + for (size_t i=4; it.valid(); i--) { EXPECT_LT(i, vec.size()) << "i=" << i; EXPECT_EQ(*it, vec[i]) << "*it=" << *it << ", vec[" << i << "]=" << vec[i]; --it; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/VectorStreamTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/VectorStreamTest.cpp index 4d189feac09..dcbe5fa9310 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/VectorStreamTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/VectorStreamTest.cpp @@ -2,7 +2,7 @@ ** VectorStreamTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -32,7 +32,7 @@ TEST(VectorStreamTest, read1) { for (unsigned count = 0; vs; count++) { int c = vs.get(); if (count < vec.size()) { - EXPECT_EQ(c, str[count]); + EXPECT_EQ(c, str[count]) << "count=" << count; } else { EXPECT_EQ(c, -1); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLNodeTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLNodeTest.cpp index 426075f5811..ab77c25e55a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLNodeTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLNodeTest.cpp @@ -2,7 +2,7 @@ ** XMLNodeTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -21,6 +21,8 @@ #include <gtest/gtest.h> #include <algorithm> #include <cstring> +#include <memory> +#include "utility.hpp" #include "XMLNode.hpp" using namespace std; @@ -28,16 +30,16 @@ using namespace std; TEST(XMLNodeTest, appendElement) { XMLElementNode root("root"); - root.append(new XMLElementNode("child1")); - root.append(new XMLElementNode("child2")); - EXPECT_EQ(root.children().size(), 2); + root.append(util::make_unique<XMLElementNode>("child1")); + root.append(util::make_unique<XMLElementNode>("child2")); + EXPECT_EQ(root.children().size(), 2u); EXPECT_FALSE(root.empty()); XMLElementNode *child1 = dynamic_cast<XMLElementNode*>(root.children().front().get()); XMLElementNode *child2 = dynamic_cast<XMLElementNode*>(root.children().back().get()); - EXPECT_TRUE(child1 != 0); - EXPECT_TRUE(child2 != 0); - EXPECT_EQ(string(child1->getName()), "child1"); - EXPECT_EQ(string(child2->getName()), "child2"); + ASSERT_NE(child1, nullptr); + ASSERT_NE(child2, nullptr); + EXPECT_EQ(child1->getName(), "child1"); + EXPECT_EQ(child2->getName(), "child2"); root.clear(); EXPECT_TRUE(root.empty()); } @@ -45,48 +47,48 @@ TEST(XMLNodeTest, appendElement) { TEST(XMLNodeTest, prependElement) { XMLElementNode root("root"); - root.prepend(new XMLElementNode("child1")); - root.prepend(new XMLElementNode("child2")); - EXPECT_EQ(root.children().size(), 2); + root.prepend(util::make_unique<XMLElementNode>("child1")); + root.prepend(util::make_unique<XMLElementNode>("child2")); + EXPECT_EQ(root.children().size(), 2u); XMLElementNode *child1 = dynamic_cast<XMLElementNode*>(root.children().front().get()); XMLElementNode *child2 = dynamic_cast<XMLElementNode*>(root.children().back().get()); - EXPECT_TRUE(child1 != 0); - EXPECT_TRUE(child2 != 0); - EXPECT_EQ(string(child1->getName()), "child2"); - EXPECT_EQ(string(child2->getName()), "child1"); + ASSERT_NE(child1, nullptr); + ASSERT_NE(child2, nullptr); + EXPECT_EQ(child1->getName(), "child2"); + EXPECT_EQ(child2->getName(), "child1"); } TEST(XMLNodeTest, appendText) { XMLElementNode root("root"); - root.append(new XMLTextNode("first string")); - EXPECT_EQ(root.children().size(), 1); + root.append(util::make_unique<XMLTextNode>("first string")); + EXPECT_EQ(root.children().size(), 1u); XMLTextNode *lastChild = dynamic_cast<XMLTextNode*>(root.children().back().get()); - EXPECT_TRUE(lastChild != 0); + ASSERT_NE(lastChild, nullptr); EXPECT_EQ(lastChild->getText(), "first string"); - root.append(new XMLTextNode(",second string")); - EXPECT_EQ(root.children().size(), 1); + root.append(util::make_unique<XMLTextNode>(",second string")); + EXPECT_EQ(root.children().size(), 1u); lastChild = dynamic_cast<XMLTextNode*>(root.children().back().get()); - EXPECT_TRUE(lastChild != 0); + ASSERT_NE(lastChild, nullptr); EXPECT_EQ(lastChild->getText(), "first string,second string"); root.append(",third string"); - EXPECT_EQ(root.children().size(), 1); + EXPECT_EQ(root.children().size(), 1u); lastChild = dynamic_cast<XMLTextNode*>(root.children().back().get()); - EXPECT_TRUE(lastChild != 0); + ASSERT_NE(lastChild, nullptr); EXPECT_EQ(lastChild->getText(), "first string,second string,third string"); - root.append(new XMLElementNode("separator")); + root.append(util::make_unique<XMLElementNode>("separator")); root.append(",fourth string"); lastChild = dynamic_cast<XMLTextNode*>(root.children().back().get()); - EXPECT_TRUE(lastChild != 0); + ASSERT_NE(lastChild, nullptr); EXPECT_EQ(lastChild->getText(), ",fourth string"); - root.append(new XMLElementNode("separator")); - root.append(new XMLTextNode(",fifth string")); + root.append(util::make_unique<XMLElementNode>("separator")); + root.append(util::make_unique<XMLTextNode>(",fifth string")); lastChild = dynamic_cast<XMLTextNode*>(root.children().back().get()); - EXPECT_TRUE(lastChild != 0); + ASSERT_NE(lastChild, nullptr); EXPECT_EQ(lastChild->getText(), ",fifth string"); root.clear(); @@ -96,22 +98,22 @@ TEST(XMLNodeTest, appendText) { TEST(XMLNodeTest, prependText) { XMLElementNode root("root"); - root.prepend(new XMLTextNode("first string")); - EXPECT_EQ(root.children().size(), 1); + root.prepend(util::make_unique<XMLTextNode>("first string")); + EXPECT_EQ(root.children().size(), 1u); XMLTextNode *firstChild = dynamic_cast<XMLTextNode*>(root.children().front().get()); - EXPECT_TRUE(firstChild != 0); + ASSERT_NE(firstChild, nullptr); EXPECT_EQ(firstChild->getText(), "first string"); - root.prepend(new XMLTextNode("second string,")); - EXPECT_EQ(root.children().size(), 1); + root.prepend(util::make_unique<XMLTextNode>("second string,")); + EXPECT_EQ(root.children().size(), 1u); firstChild = dynamic_cast<XMLTextNode*>(root.children().front().get()); - EXPECT_TRUE(firstChild != 0); + ASSERT_NE(firstChild, nullptr); EXPECT_EQ(firstChild->getText(), "second string,first string"); - root.prepend(new XMLElementNode("separator")); - root.prepend(new XMLTextNode("third string,")); + root.prepend(util::make_unique<XMLElementNode>("separator")); + root.prepend(util::make_unique<XMLTextNode>("third string,")); firstChild = dynamic_cast<XMLTextNode*>(root.children().front().get()); - EXPECT_TRUE(firstChild != 0); + ASSERT_NE(firstChild, nullptr); EXPECT_EQ(firstChild->getText(), "third string,"); } @@ -126,10 +128,10 @@ TEST(XMLNodeTest, attributes) { EXPECT_TRUE(root.hasAttribute("integer")); EXPECT_TRUE(root.hasAttribute("double")); EXPECT_FALSE(root.hasAttribute("noname ")); - EXPECT_EQ(string(root.getAttributeValue("string")), "text"); - EXPECT_EQ(string(root.getAttributeValue("integer")), "42"); - EXPECT_EQ(string(root.getAttributeValue("double")), "42.24"); - EXPECT_TRUE(root.getAttributeValue("none") == 0); + EXPECT_STREQ(root.getAttributeValue("string"), "text"); + EXPECT_STREQ(root.getAttributeValue("integer"), "42"); + EXPECT_STREQ(root.getAttributeValue("double"), "42.24"); + EXPECT_EQ(root.getAttributeValue("none"), nullptr); } @@ -139,30 +141,28 @@ TEST(XMLNodeTest, clone) { root.addAttribute("integer", 42); root.addAttribute("double", 42.24); root.append("text"); - XMLElementNode *clone = root.clone(); - EXPECT_EQ(clone->children().size(), 1); - EXPECT_EQ(string(clone->getAttributeValue("string")), "text"); - EXPECT_EQ(string(clone->getAttributeValue("integer")), "42"); - EXPECT_EQ(string(clone->getAttributeValue("double")), "42.24"); - delete clone; + unique_ptr<XMLElementNode> clone = util::static_unique_ptr_cast<XMLElementNode>(root.clone()); + EXPECT_EQ(clone->children().size(), 1u); + EXPECT_STREQ(clone->getAttributeValue("string"), "text"); + EXPECT_STREQ(clone->getAttributeValue("integer"), "42"); + EXPECT_STREQ(clone->getAttributeValue("double"), "42.24"); } TEST(XMLNodeTest, insertBefore) { XMLElementNode root("root"); - XMLElementNode *child1 = new XMLElementNode("child1"); - XMLElementNode *child2 = new XMLElementNode("child2"); - root.append(child1); - root.append(child2); - XMLElementNode *node = new XMLElementNode("node"); - EXPECT_FALSE(root.insertBefore(child1, node)); - delete node; - EXPECT_EQ(root.children().size(), 2); - EXPECT_TRUE(root.insertBefore(new XMLElementNode("child3"), child1)); - EXPECT_EQ(root.children().size(), 3); + auto child1 = util::make_unique<XMLElementNode>("child1"); + auto child2 = util::make_unique<XMLElementNode>("child2"); + XMLNode* child1Ptr = root.append(std::move(child1)); + XMLNode* child2Ptr = root.append(std::move(child2)); + auto node = util::make_unique<XMLElementNode>("node"); + EXPECT_FALSE(root.insertBefore(util::make_unique<XMLElementNode>("dummy"), node.get())); + EXPECT_EQ(root.children().size(), 2u); + EXPECT_TRUE(root.insertBefore(util::make_unique<XMLElementNode>("child3"), child1Ptr)); + EXPECT_EQ(root.children().size(), 3u); XMLElementNode *child = dynamic_cast<XMLElementNode*>(root.children().front().get()); - EXPECT_EQ(string(child->getName()), "child3"); - EXPECT_TRUE(root.insertBefore(new XMLElementNode("child4"), child2)); + EXPECT_EQ(child->getName(), "child3"); + EXPECT_TRUE(root.insertBefore(util::make_unique<XMLElementNode>("child4"), child2Ptr)); const char *names[] = {"child3", "child1", "child4", "child2"}; const char **p = names; for (const auto &node : root.children()) { @@ -175,17 +175,16 @@ TEST(XMLNodeTest, insertBefore) { TEST(XMLNodeTest, insertAfter) { XMLElementNode root("root"); - XMLElementNode *child1 = new XMLElementNode("child1"); - XMLElementNode *child2 = new XMLElementNode("child2"); - root.append(child1); - root.append(child2); - XMLElementNode *node = new XMLElementNode("node"); - EXPECT_FALSE(root.insertAfter(child1, node)); - delete node; - EXPECT_EQ(root.children().size(), 2); - EXPECT_TRUE(root.insertAfter(new XMLElementNode("child3"), child1)); - EXPECT_TRUE(root.insertAfter(new XMLElementNode("child4"), child2)); - EXPECT_EQ(root.children().size(), 4); + auto child1 = util::make_unique<XMLElementNode>("child1"); + auto child2 = util::make_unique<XMLElementNode>("child2"); + XMLNode *child1Ptr = root.append(std::move(child1)); + XMLNode *child2Ptr =root.append(std::move(child2)); + auto node = util::make_unique<XMLElementNode>("node"); + EXPECT_FALSE(root.insertAfter(util::make_unique<XMLElementNode>("dummy"), node.get())); + EXPECT_EQ(root.children().size(), 2u); + EXPECT_TRUE(root.insertAfter(util::make_unique<XMLElementNode>("child3"), child1Ptr)); + EXPECT_TRUE(root.insertAfter(util::make_unique<XMLElementNode>("child4"), child2Ptr)); + EXPECT_EQ(root.children().size(), 4u); const char *names[] = {"child1", "child3", "child2", "child4"}; const char **p = names; for (const auto &node : root.children()) { @@ -198,39 +197,39 @@ TEST(XMLNodeTest, insertAfter) { TEST(XMLNodeTest, getDescendants) { XMLElementNode root("root"); - XMLElementNode *child1 = new XMLElementNode("child"); - XMLElementNode *child2 = new XMLElementNode("childX"); - XMLElementNode *child3 = new XMLElementNode("child"); - XMLElementNode *child4 = new XMLElementNode("child"); - root.append(child1); + auto child1 = util::make_unique<XMLElementNode>("child"); + auto child2 = util::make_unique<XMLElementNode>("childX"); + auto child3 = util::make_unique<XMLElementNode>("child"); + auto child4 = util::make_unique<XMLElementNode>("child"); child1->addAttribute("attr", "value"); - child1->append(child2); child2->addAttribute("attr", "value"); - child2->append(child3); child3->addAttribute("attr", "value"); child3->append("text"); - root.append(child4); + XMLElementNode *child3Ptr = static_cast<XMLElementNode*>(child2->append(std::move(child3))); + XMLElementNode *child2Ptr = static_cast<XMLElementNode*>(child1->append(std::move(child2))); + XMLElementNode *child1Ptr = static_cast<XMLElementNode*>(root.append(std::move(child1))); + XMLElementNode *child4Ptr = static_cast<XMLElementNode*>(root.append(std::move(child4))); vector<XMLElementNode*> elements; - root.getDescendants("child", 0, elements); - EXPECT_EQ(elements.size(), 3); + root.getDescendants("child", nullptr, elements); + EXPECT_EQ(elements.size(), 3u); { - XMLElementNode *nodes[] = {child1, child3, child4}; + XMLElementNode *nodes[] = {child1Ptr, child3Ptr, child4Ptr}; XMLElementNode **p = nodes; for (const XMLElementNode *elem : elements) EXPECT_EQ(elem, *p++); }{ elements.clear(); root.getDescendants("child", "attr", elements); - EXPECT_EQ(elements.size(), 2); - XMLElementNode *nodes[] = {child1, child3}; + EXPECT_EQ(elements.size(), 2u); + XMLElementNode *nodes[] = {child1Ptr, child3Ptr}; XMLElementNode **p = nodes; for (const XMLElementNode *elem : elements) EXPECT_EQ(elem, *p++); }{ elements.clear(); - root.getDescendants(0, "attr", elements); - EXPECT_EQ(elements.size(), 3); - XMLElementNode *nodes[] = {child1, child2, child3}; + root.getDescendants(nullptr, "attr", elements); + EXPECT_EQ(elements.size(), 3u); + XMLElementNode *nodes[] = {child1Ptr, child2Ptr, child3Ptr}; XMLElementNode **p = nodes; for (const XMLElementNode *elem : elements) EXPECT_EQ(elem, *p++); @@ -240,42 +239,42 @@ TEST(XMLNodeTest, getDescendants) { TEST(XMLNodeTest, getFirstDescendant) { XMLElementNode root("root"); - XMLElementNode *child1 = new XMLElementNode("child"); - XMLElementNode *child2 = new XMLElementNode("childX"); - XMLElementNode *child3 = new XMLElementNode("child"); - XMLElementNode *child4 = new XMLElementNode("child"); - root.append(child1); + auto child1 = util::make_unique<XMLElementNode>("child"); + auto child2 = util::make_unique<XMLElementNode>("childX"); + auto child3 = util::make_unique<XMLElementNode>("child"); + auto child4 = util::make_unique<XMLElementNode>("child"); child1->addAttribute("attr", "valueX"); - child1->append(child2); child2->addAttribute("attr", "value"); - child2->append(child3); child3->addAttribute("attrX", "value"); child3->append("text"); - root.append(child4); - EXPECT_EQ(root.getFirstDescendant("child", 0, 0), child1); - EXPECT_EQ(root.getFirstDescendant("child", "attr", 0), child1); - EXPECT_EQ(root.getFirstDescendant("child", "attrX", 0), child3); - EXPECT_EQ(root.getFirstDescendant("child", "attrX", "value"), child3); - EXPECT_EQ(root.getFirstDescendant(0, "attrX", "value"), child3); - EXPECT_EQ(root.getFirstDescendant(0, "attrX", 0), child3); - EXPECT_TRUE(root.getFirstDescendant("child", "attr", "value") == 0); + XMLNode *child3Ptr = child2->append(std::move(child3)); + child1->append(std::move(child2)); + XMLNode *child1Ptr = root.append(std::move(child1)); + root.append(std::move(child4)); + EXPECT_EQ(root.getFirstDescendant("child", nullptr, nullptr), child1Ptr); + EXPECT_EQ(root.getFirstDescendant("child", "attr", nullptr), child1Ptr); + EXPECT_EQ(root.getFirstDescendant("child", "attrX", nullptr), child3Ptr); + EXPECT_EQ(root.getFirstDescendant("child", "attrX", "value"), child3Ptr); + EXPECT_EQ(root.getFirstDescendant(0, "attrX", "value"), child3Ptr); + EXPECT_EQ(root.getFirstDescendant(0, "attrX", nullptr), child3Ptr); + EXPECT_EQ(root.getFirstDescendant("child", "attr", "value"), nullptr); } TEST(XMLNodeTest, write) { XMLElementNode root("root"); - XMLElementNode *child1 = new XMLElementNode("child"); - XMLElementNode *child2 = new XMLElementNode("childX"); - XMLElementNode *child3 = new XMLElementNode("child"); - XMLElementNode *child4 = new XMLElementNode("child"); - root.append(child1); + auto child1 = util::make_unique<XMLElementNode>("child"); + auto child2 = util::make_unique<XMLElementNode>("childX"); + auto child3 = util::make_unique<XMLElementNode>("child"); + auto child4 = util::make_unique<XMLElementNode>("child"); child1->addAttribute("attr", "valueX"); - child1->append(child2); child2->addAttribute("attr", "value"); - child2->append(child3); child3->addAttribute("attrX", "value"); child3->append("text"); - root.append(child4); + child2->append(std::move(child3)); + child1->append(std::move(child2)); + root.append(std::move(child1)); + root.append(std::move(child4)); ostringstream oss; root.write(oss); string str = oss.str(); @@ -286,17 +285,17 @@ TEST(XMLNodeTest, write) { TEST(XMLNodeTest, cdata) { XMLElementNode root("root"); - XMLCDataNode *cdataNode = new XMLCDataNode("text & <text>"); - root.append(cdataNode); - root.append(new XMLElementNode("element")); - root.append(cdataNode->clone()); + auto cdataNode = util::make_unique<XMLCDataNode>("text & <text>"); + XMLNode *cdataNodePtr = root.append(std::move(cdataNode)); + root.append(util::make_unique<XMLElementNode>("element")); + root.append(cdataNodePtr->clone()); ostringstream oss; root.write(oss); string str = oss.str(); str.erase(remove(str.begin(), str.end(), '\n'), str.end()); EXPECT_EQ(str, "<root><![CDATA[text & <text>]]><element/><![CDATA[text & <text>]]></root>"); - cdataNode->clear(); + cdataNodePtr->clear(); oss.str(""); root.write(oss); str = oss.str(); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLStringTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLStringTest.cpp index 74ce4332115..1689240e828 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLStringTest.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLStringTest.cpp @@ -2,7 +2,7 @@ ** XMLStringTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -62,4 +62,7 @@ TEST(XMLStringTest, doublecast) { EXPECT_EQ(XMLString(-1.2345), string("-1.2")); XMLString::DECIMAL_PLACES = 0; EXPECT_EQ(XMLString(-1.2345), string("-1.2345")); + + EXPECT_EQ(XMLString(10.0), string("10")); + EXPECT_EQ(XMLString(-10.0), string("-10")); } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/check-conv b/Build/source/texk/dvisvgm/dvisvgm-src/tests/check-conv index d1e1a445848..a38b499440c 100755 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/check-conv +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/check-conv @@ -2,7 +2,7 @@ # This file is part of the dvisvgm package and published under the # terms of the GNU General Public License version 3 or later. # See file COPYING for further details. -# Copyright (C) 2009-2017 Martin Gieseking <martin.gieseking@uos.de> +# Copyright (C) 2009-2018 Martin Gieseking <martin.gieseking@uos.de> files=(sample frktest) diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.am index ce8e3c2da7d..1c63b79d3dc 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.am +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.am @@ -1,5 +1,5 @@ ## This file is part of dvisvgm -## Copyright (C) 2016-2017 Martin Gieseking <martin.gieseking@uos.de> +## Copyright (C) 2016-2018 Martin Gieseking <martin.gieseking@uos.de> ## ## Process this file with automake. @@ -16,5 +16,7 @@ EXTRA_DIST = \ sample-nf-cmp.svg \ sample.sfd \ sample-wf-cmp.svg \ + sample_v2.dvi \ + sample_v3.dvi \ ot1.cmap diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.in index 2fc23b49f27..018be0f9950 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -173,6 +173,8 @@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KPSE_CFLAGS = @KPSE_CFLAGS@ +KPSE_LIBS = @KPSE_LIBS@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ @@ -208,6 +210,8 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +TTFAUTOHINT_CFLAGS = @TTFAUTOHINT_CFLAGS@ +TTFAUTOHINT_LIBS = @TTFAUTOHINT_LIBS@ VERSION = @VERSION@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ @@ -256,7 +260,6 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ -runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -282,6 +285,8 @@ EXTRA_DIST = \ sample-nf-cmp.svg \ sample.sfd \ sample-wf-cmp.svg \ + sample_v2.dvi \ + sample_v3.dvi \ ot1.cmap all: all-am diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/genhashcheck.py b/Build/source/texk/dvisvgm/dvisvgm-src/tests/genhashcheck.py index d53ad22938e..dfe52b7b303 100755 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/genhashcheck.py +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/genhashcheck.py @@ -2,7 +2,7 @@ # This file is part of the dvisvgm package and published under the # terms of the GNU General Public License version 3 or later. # See file COPYING for further details. -# Copyright (C) 2016-2017 Martin Gieseking <martin.gieseking@uos.de> +# Copyright (C) 2016-2018 Martin Gieseking <martin.gieseking@uos.de> import re import sys @@ -12,7 +12,7 @@ def extract_hashes (fname): lines = f.readlines() found = False for line in lines: - if ' hash2unicode = {{\n' in line: + if ' hash2unicode {{\n' in line: found = True elif found: match = re.match(r'\s*{(0x[0-9a-f]{8}),\s*0x[0-9a-f]{4}}, //\s*(.+)\s*$', line) diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-param-test.h b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-param-test.h index 038f9ba79eb..7548a7c2ca2 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-param-test.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-param-test.h @@ -185,15 +185,10 @@ TEST_P(DerivedTest, DoesBlah) { # include <utility> #endif -// scripts/fuse_gtest.py depends on gtest's own header being #included -// *unconditionally*. Therefore these #includes cannot be moved -// inside #if GTEST_HAS_PARAM_TEST. #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-param-util.h" #include "gtest/internal/gtest-param-util-generated.h" -#if GTEST_HAS_PARAM_TEST - namespace testing { // Functions producing parameter generators. @@ -1439,6 +1434,4 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3, } // namespace testing -#endif // GTEST_HAS_PARAM_TEST - #endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-printers.h b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-printers.h index 8a33164cb38..282a2dac031 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-printers.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-printers.h @@ -137,7 +137,8 @@ class TypeWithoutFormatter { public: // This default version is called when kTypeKind is kOtherType. static void PrintValue(const T& value, ::std::ostream* os) { - PrintBytesInObjectTo(reinterpret_cast<const unsigned char*>(&value), + PrintBytesInObjectTo(static_cast<const unsigned char*>( + reinterpret_cast<const void *>(&value)), sizeof(value), os); } }; @@ -151,10 +152,10 @@ template <typename T> class TypeWithoutFormatter<T, kProtobuf> { public: static void PrintValue(const T& value, ::std::ostream* os) { - const ::testing::internal::string short_str = value.ShortDebugString(); - const ::testing::internal::string pretty_str = - short_str.length() <= kProtobufOneLinerMaxLength ? - short_str : ("\n" + value.DebugString()); + std::string pretty_str = value.ShortDebugString(); + if (pretty_str.length() > kProtobufOneLinerMaxLength) { + pretty_str = "\n" + value.DebugString(); + } *os << ("<" + pretty_str + ">"); } }; @@ -364,11 +365,18 @@ class UniversalPrinter; template <typename T> void UniversalPrint(const T& value, ::std::ostream* os); +enum DefaultPrinterType { + kPrintContainer, + kPrintPointer, + kPrintFunctionPointer, + kPrintOther, +}; +template <DefaultPrinterType type> struct WrapPrinterType {}; + // Used to print an STL-style container when the user doesn't define // a PrintTo() for it. template <typename C> -void DefaultPrintTo(IsContainer /* dummy */, - false_type /* is not a pointer */, +void DefaultPrintTo(WrapPrinterType<kPrintContainer> /* dummy */, const C& container, ::std::ostream* os) { const size_t kMaxCount = 32; // The maximum number of elements to print. *os << '{'; @@ -401,40 +409,38 @@ void DefaultPrintTo(IsContainer /* dummy */, // implementation-defined. Therefore they will be printed as raw // bytes.) template <typename T> -void DefaultPrintTo(IsNotContainer /* dummy */, - true_type /* is a pointer */, +void DefaultPrintTo(WrapPrinterType<kPrintPointer> /* dummy */, T* p, ::std::ostream* os) { if (p == NULL) { *os << "NULL"; } else { - // C++ doesn't allow casting from a function pointer to any object - // pointer. - // - // IsTrue() silences warnings: "Condition is always true", - // "unreachable code". - if (IsTrue(ImplicitlyConvertible<T*, const void*>::value)) { - // T is not a function type. We just call << to print p, - // relying on ADL to pick up user-defined << for their pointer - // types, if any. - *os << p; - } else { - // T is a function type, so '*os << p' doesn't do what we want - // (it just prints p as bool). We want to print p as a const - // void*. However, we cannot cast it to const void* directly, - // even using reinterpret_cast, as earlier versions of gcc - // (e.g. 3.4.5) cannot compile the cast when p is a function - // pointer. Casting to UInt64 first solves the problem. - *os << reinterpret_cast<const void*>( - reinterpret_cast<internal::UInt64>(p)); - } + // T is not a function type. We just call << to print p, + // relying on ADL to pick up user-defined << for their pointer + // types, if any. + *os << p; + } +} +template <typename T> +void DefaultPrintTo(WrapPrinterType<kPrintFunctionPointer> /* dummy */, + T* p, ::std::ostream* os) { + if (p == NULL) { + *os << "NULL"; + } else { + // T is a function type, so '*os << p' doesn't do what we want + // (it just prints p as bool). We want to print p as a const + // void*. However, we cannot cast it to const void* directly, + // even using reinterpret_cast, as earlier versions of gcc + // (e.g. 3.4.5) cannot compile the cast when p is a function + // pointer. Casting to UInt64 first solves the problem. + *os << reinterpret_cast<const void*>( + reinterpret_cast<internal::UInt64>(p)); } } // Used to print a non-container, non-pointer value when the user // doesn't define PrintTo() for it. template <typename T> -void DefaultPrintTo(IsNotContainer /* dummy */, - false_type /* is not a pointer */, +void DefaultPrintTo(WrapPrinterType<kPrintOther> /* dummy */, const T& value, ::std::ostream* os) { ::testing_internal::DefaultPrintNonContainerTo(value, os); } @@ -452,29 +458,40 @@ void DefaultPrintTo(IsNotContainer /* dummy */, // wants). template <typename T> void PrintTo(const T& value, ::std::ostream* os) { - // DefaultPrintTo() is overloaded. The type of its first two - // arguments determine which version will be picked. If T is an - // STL-style container, the version for container will be called; if - // T is a pointer, the pointer version will be called; otherwise the - // generic version will be called. + // DefaultPrintTo() is overloaded. The type of its first argument + // determines which version will be picked. // - // Note that we check for container types here, prior to we check - // for protocol message types in our operator<<. The rationale is: + // Note that we check for recursive and other container types here, prior + // to we check for protocol message types in our operator<<. The rationale is: // // For protocol messages, we want to give people a chance to // override Google Mock's format by defining a PrintTo() or // operator<<. For STL containers, other formats can be // incompatible with Google Mock's format for the container // elements; therefore we check for container types here to ensure - // that our format is used. - // - // The second argument of DefaultPrintTo() is needed to bypass a bug - // in Symbian's C++ compiler that prevents it from picking the right - // overload between: + // that our format is used. To prevent an infinite runtime recursion + // during the output of recursive container types, we check first for + // those. // - // PrintTo(const T& x, ...); - // PrintTo(T* x, ...); - DefaultPrintTo(IsContainerTest<T>(0), is_pointer<T>(), value, os); + // Note that MSVC and clang-cl do allow an implicit conversion from + // pointer-to-function to pointer-to-object, but clang-cl warns on it. + // So don't use ImplicitlyConvertible if it can be helped since it will + // cause this warning, and use a separate overload of DefaultPrintTo for + // function pointers so that the `*os << p` in the object pointer overload + // doesn't cause that warning either. + DefaultPrintTo( + WrapPrinterType< + (sizeof(IsContainerTest<T>(0)) == sizeof(IsContainer)) && !IsRecursiveContainer<T>::value + ? kPrintContainer : !is_pointer<T>::value + ? kPrintOther +#if GTEST_LANG_CXX11 + : std::is_function<typename std::remove_pointer<T>::type>::value +#else + : !internal::ImplicitlyConvertible<T, const void*>::value +#endif + ? kPrintFunctionPointer + : kPrintPointer>(), + value, os); } // The following list of PrintTo() overloads tells @@ -805,7 +822,7 @@ class UniversalTersePrinter<const char*> { if (str == NULL) { *os << "NULL"; } else { - UniversalPrint(string(str), os); + UniversalPrint(std::string(str), os); } } }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-spi.h b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-spi.h index f63fa9a1b2a..0e5c10cf7cd 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-spi.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-spi.h @@ -97,13 +97,12 @@ class GTEST_API_ SingleFailureChecker { public: // The constructor remembers the arguments. SingleFailureChecker(const TestPartResultArray* results, - TestPartResult::Type type, - const string& substr); + TestPartResult::Type type, const std::string& substr); ~SingleFailureChecker(); private: const TestPartResultArray* const results_; const TestPartResult::Type type_; - const string substr_; + const std::string substr_; GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker); }; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-typed-test.h b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-typed-test.h index 5f69d5678ea..20726b2cd5b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-typed-test.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest-typed-test.h @@ -241,9 +241,10 @@ INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes); namespace GTEST_CASE_NAMESPACE_(CaseName) { \ typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \ } \ - static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \ - GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\ - __FILE__, __LINE__, #__VA_ARGS__) + static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) \ + GTEST_ATTRIBUTE_UNUSED_ = \ + GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\ + __FILE__, __LINE__, #__VA_ARGS__) // The 'Types' template argument below must have spaces around it // since some compilers may choke on '>>' when passing a template diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest.h b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest.h index f846c5bd669..1b55677af19 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/gtest.h @@ -1180,14 +1180,12 @@ class GTEST_API_ UnitTest { // Returns the random seed used at the start of the current test run. int random_seed() const; -#if GTEST_HAS_PARAM_TEST // Returns the ParameterizedTestCaseRegistry object used to keep track of // value-parameterized tests and instantiate and register them. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. internal::ParameterizedTestCaseRegistry& parameterized_test_registry() GTEST_LOCK_EXCLUDED_(mutex_); -#endif // GTEST_HAS_PARAM_TEST // Gets the number of successful test cases. int successful_test_case_count() const; @@ -1287,7 +1285,7 @@ class GTEST_API_ UnitTest { internal::UnitTestImpl* impl() { return impl_; } const internal::UnitTestImpl* impl() const { return impl_; } - // These classes and funcions are friends as they need to access private + // These classes and functions are friends as they need to access private // members of UnitTest. friend class Test; friend class internal::AssertHelper; @@ -1706,7 +1704,6 @@ class GTEST_API_ AssertHelper { } // namespace internal -#if GTEST_HAS_PARAM_TEST // The pure interface class that all value-parameterized tests inherit from. // A value-parameterized class must inherit from both ::testing::Test and // ::testing::WithParamInterface. In most cases that just means inheriting @@ -1783,7 +1780,6 @@ template <typename T> class TestWithParam : public Test, public WithParamInterface<T> { }; -#endif // GTEST_HAS_PARAM_TEST // Macros for indicating success/failure in test code. @@ -2194,7 +2190,7 @@ bool StaticAssertTypeEq() { // name of the test within the test case. // // A test fixture class must be declared earlier. The user should put -// his test code between braces after using this macro. Example: +// the test code between braces after using this macro. Example: // // class FooTest : public testing::Test { // protected: @@ -2217,6 +2213,10 @@ bool StaticAssertTypeEq() { GTEST_TEST_(test_fixture, test_name, test_fixture, \ ::testing::internal::GetTypeId<test_fixture>()) +// Returns a path to temporary directory. +// Tries to determine an appropriate directory for the platform. +GTEST_API_ std::string TempDir(); + } // namespace testing // Use this function in main() to run all tests. It returns 0 if all diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/custom/gtest-port.h b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/custom/gtest-port.h index 7e744bd3bb3..c85f5d58477 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/custom/gtest-port.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/custom/gtest-port.h @@ -61,6 +61,9 @@ // GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) // GTEST_LOCK_EXCLUDED_(locks) // +// Exporting API symbols: +// GTEST_API_ - Specifier for exported symbols. +// // ** Custom implementation starts here ** #ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/custom/gtest.h b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/custom/gtest.h index c27412a8981..a7a1c0b7d9a 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/custom/gtest.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/custom/gtest.h @@ -33,6 +33,10 @@ // GTEST_OS_STACK_TRACE_GETTER_ - The name of an implementation of // OsStackTraceGetterInterface. // +// GTEST_CUSTOM_TEMPDIR_FUNCTION_ - An override for testing::TempDir(). +// See testing::TempDir for semantics and +// signature. +// // ** Custom implementation starts here ** #ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-internal.h b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-internal.h index ebd1cf615de..2a6e4dad1d1 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-internal.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-internal.h @@ -175,7 +175,7 @@ namespace edit_distance { // Returns the optimal edits to go from 'left' to 'right'. // All edits cost the same, with replace having lower priority than // add/remove. -// Simple implementation of the Wagner–Fischer algorithm. +// Simple implementation of the Wagner-Fischer algorithm. // See http://en.wikipedia.org/wiki/Wagner-Fischer_algorithm enum EditType { kMatch, kAdd, kRemove, kReplace }; GTEST_API_ std::vector<EditType> CalculateOptimalEdits( @@ -502,9 +502,10 @@ typedef void (*SetUpTestCaseFunc)(); typedef void (*TearDownTestCaseFunc)(); struct CodeLocation { - CodeLocation(const string& a_file, int a_line) : file(a_file), line(a_line) {} + CodeLocation(const std::string& a_file, int a_line) + : file(a_file), line(a_line) {} - string file; + std::string file; int line; }; @@ -939,6 +940,31 @@ typedef char IsNotContainer; template <class C> IsNotContainer IsContainerTest(long /* dummy */) { return '\0'; } +template <typename C, bool = + sizeof(IsContainerTest<C>(0)) == sizeof(IsContainer) +> +struct IsRecursiveContainerImpl; + +template <typename C> +struct IsRecursiveContainerImpl<C, false> : public false_type {}; + +template <typename C> +struct IsRecursiveContainerImpl<C, true> { + typedef + typename IteratorTraits<typename C::iterator>::value_type + value_type; + typedef is_same<value_type, C> type; +}; + +// IsRecursiveContainer<Type> is a unary compile-time predicate that +// evaluates whether C is a recursive container type. A recursive container +// type is a container type whose value_type is equal to the container type +// itself. An example for a recursive container type is +// boost::filesystem::path, whose iterator has a value_type that is equal to +// boost::filesystem::path. +template<typename C> +struct IsRecursiveContainer : public IsRecursiveContainerImpl<C>::type {}; + // EnableIf<condition>::type is void when 'Cond' is true, and // undefined when 'Cond' is false. To use SFINAE to make a function // overload only apply when a particular expression is true, add diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-param-util-generated.h b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-param-util-generated.h index 4d1d81d20ff..34bd0ddfb3b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-param-util-generated.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-param-util-generated.h @@ -46,14 +46,9 @@ #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ -// scripts/fuse_gtest.py depends on gtest's own header being #included -// *unconditionally*. Therefore these #includes cannot be moved -// inside #if GTEST_HAS_PARAM_TEST. #include "gtest/internal/gtest-param-util.h" #include "gtest/internal/gtest-port.h" -#if GTEST_HAS_PARAM_TEST - namespace testing { // Forward declarations of ValuesIn(), which is implemented in @@ -5141,6 +5136,4 @@ CartesianProductHolder10(const Generator1& g1, const Generator2& g2, } // namespace internal } // namespace testing -#endif // GTEST_HAS_PARAM_TEST - #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-param-util.h b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-param-util.h index 82cab9b0201..3c80863cde0 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-param-util.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-param-util.h @@ -41,16 +41,11 @@ #include <utility> #include <vector> -// scripts/fuse_gtest.py depends on gtest's own header being #included -// *unconditionally*. Therefore these #includes cannot be moved -// inside #if GTEST_HAS_PARAM_TEST. #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-linked_ptr.h" #include "gtest/internal/gtest-port.h" #include "gtest/gtest-printers.h" -#if GTEST_HAS_PARAM_TEST - namespace testing { // Input to a parameterized test name generator, describing a test parameter. @@ -472,7 +467,7 @@ class ParameterizedTestCaseInfoBase { virtual ~ParameterizedTestCaseInfoBase() {} // Base part of test case name for display purposes. - virtual const string& GetTestCaseName() const = 0; + virtual const std::string& GetTestCaseName() const = 0; // Test case id to verify identity. virtual TypeId GetTestCaseTypeId() const = 0; // UnitTest class invokes this method to register tests in this @@ -511,7 +506,7 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { : test_case_name_(name), code_location_(code_location) {} // Test case base name for display purposes. - virtual const string& GetTestCaseName() const { return test_case_name_; } + virtual const std::string& GetTestCaseName() const { return test_case_name_; } // Test case id to verify identity. virtual TypeId GetTestCaseTypeId() const { return GetTypeId<TestCase>(); } // TEST_P macro uses AddTestPattern() to record information @@ -529,11 +524,10 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { } // INSTANTIATE_TEST_CASE_P macro uses AddGenerator() to record information // about a generator. - int AddTestCaseInstantiation(const string& instantiation_name, + int AddTestCaseInstantiation(const std::string& instantiation_name, GeneratorCreationFunc* func, ParamNameGeneratorFunc* name_func, - const char* file, - int line) { + const char* file, int line) { instantiations_.push_back( InstantiationInfo(instantiation_name, func, name_func, file, line)); return 0; // Return value used only to run this method in namespace scope. @@ -550,13 +544,13 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { for (typename InstantiationContainer::iterator gen_it = instantiations_.begin(); gen_it != instantiations_.end(); ++gen_it) { - const string& instantiation_name = gen_it->name; + const std::string& instantiation_name = gen_it->name; ParamGenerator<ParamType> generator((*gen_it->generator)()); ParamNameGeneratorFunc* name_func = gen_it->name_func; const char* file = gen_it->file; int line = gen_it->line; - string test_case_name; + std::string test_case_name; if ( !instantiation_name.empty() ) test_case_name = instantiation_name + "/"; test_case_name += test_info->test_case_base_name; @@ -609,8 +603,8 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { test_base_name(a_test_base_name), test_meta_factory(a_test_meta_factory) {} - const string test_case_base_name; - const string test_base_name; + const std::string test_case_base_name; + const std::string test_base_name; const scoped_ptr<TestMetaFactoryBase<ParamType> > test_meta_factory; }; typedef ::std::vector<linked_ptr<TestInfo> > TestInfoContainer; @@ -651,7 +645,7 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { return true; } - const string test_case_name_; + const std::string test_case_name_; CodeLocation code_location_; TestInfoContainer tests_; InstantiationContainer instantiations_; @@ -726,6 +720,4 @@ class ParameterizedTestCaseRegistry { } // namespace internal } // namespace testing -#endif // GTEST_HAS_PARAM_TEST - #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-port-arch.h b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-port-arch.h index 74ab949057c..bb206167ba2 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-port-arch.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-port-arch.h @@ -69,6 +69,8 @@ # endif #elif defined __FreeBSD__ # define GTEST_OS_FREEBSD 1 +#elif defined __Fuchsia__ +# define GTEST_OS_FUCHSIA 1 #elif defined __linux__ # define GTEST_OS_LINUX 1 # if defined __ANDROID__ @@ -84,6 +86,8 @@ # define GTEST_OS_HPUX 1 #elif defined __native_client__ # define GTEST_OS_NACL 1 +#elif defined __NetBSD__ +# define GTEST_OS_NETBSD 1 #elif defined __OpenBSD__ # define GTEST_OS_OPENBSD 1 #elif defined __QNX__ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-port.h b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-port.h index 0094ed5077e..5d1b141d6df 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-port.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/include/gtest/internal/gtest-port.h @@ -122,12 +122,14 @@ // GTEST_OS_AIX - IBM AIX // GTEST_OS_CYGWIN - Cygwin // GTEST_OS_FREEBSD - FreeBSD +// GTEST_OS_FUCHSIA - Fuchsia // GTEST_OS_HPUX - HP-UX // GTEST_OS_LINUX - Linux // GTEST_OS_LINUX_ANDROID - Google Android // GTEST_OS_MAC - Mac OS X // GTEST_OS_IOS - iOS // GTEST_OS_NACL - Google Native Client (NaCl) +// GTEST_OS_NETBSD - NetBSD // GTEST_OS_OPENBSD - OpenBSD // GTEST_OS_QNX - QNX // GTEST_OS_SOLARIS - Sun Solaris @@ -169,7 +171,6 @@ // GTEST_HAS_COMBINE - the Combine() function (for value-parameterized // tests) // GTEST_HAS_DEATH_TEST - death tests -// GTEST_HAS_PARAM_TEST - value-parameterized tests // GTEST_HAS_TYPED_TEST - typed tests // GTEST_HAS_TYPED_TEST_P - type-parameterized tests // GTEST_IS_THREADSAFE - Google Test is thread-safe. @@ -323,7 +324,7 @@ // -std={c,gnu}++{0x,11} is passed. The C++11 standard specifies a // value for __cplusplus, and recent versions of clang, gcc, and // probably other compilers set that too in C++11 mode. -# if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L +# if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L || _MSC_VER >= 1900 // Compiling in at least C++11 mode. # define GTEST_LANG_CXX11 1 # else @@ -355,12 +356,16 @@ #if GTEST_STDLIB_CXX11 # define GTEST_HAS_STD_BEGIN_AND_END_ 1 # define GTEST_HAS_STD_FORWARD_LIST_ 1 -# define GTEST_HAS_STD_FUNCTION_ 1 +# if !defined(_MSC_VER) || (_MSC_FULL_VER >= 190023824) // works only with VS2015U2 and better +# define GTEST_HAS_STD_FUNCTION_ 1 +# endif # define GTEST_HAS_STD_INITIALIZER_LIST_ 1 # define GTEST_HAS_STD_MOVE_ 1 # define GTEST_HAS_STD_SHARED_PTR_ 1 # define GTEST_HAS_STD_TYPE_TRAITS_ 1 # define GTEST_HAS_STD_UNIQUE_PTR_ 1 +# define GTEST_HAS_UNORDERED_MAP_ 1 +# define GTEST_HAS_UNORDERED_SET_ 1 #endif // C++11 specifies that <tuple> provides std::tuple. @@ -396,10 +401,16 @@ # include <io.h> # endif // In order to avoid having to include <windows.h>, use forward declaration -// assuming CRITICAL_SECTION is a typedef of _RTL_CRITICAL_SECTION. +#if GTEST_OS_WINDOWS_MINGW && !defined(__MINGW64_VERSION_MAJOR) +// MinGW defined _CRITICAL_SECTION and _RTL_CRITICAL_SECTION as two +// separate (equivalent) structs, instead of using typedef +typedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION; +#else +// Assume CRITICAL_SECTION is a typedef of _RTL_CRITICAL_SECTION. // This assumption is verified by // WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION. -struct _RTL_CRITICAL_SECTION; +typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; +#endif #else // This assumes that non-Windows OSes provide unistd.h. For OSes where this // is not the case, we need to include headers that provide the functions @@ -600,8 +611,9 @@ struct _RTL_CRITICAL_SECTION; // // To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0 // to your compiler flags. -# define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX \ - || GTEST_OS_QNX || GTEST_OS_FREEBSD || GTEST_OS_NACL) +#define GTEST_HAS_PTHREAD \ + (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX || GTEST_OS_QNX || \ + GTEST_OS_FREEBSD || GTEST_OS_NACL || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA) #endif // GTEST_HAS_PTHREAD #if GTEST_HAS_PTHREAD @@ -616,7 +628,7 @@ struct _RTL_CRITICAL_SECTION; // Determines if hash_map/hash_set are available. // Only used for testing against those containers. #if !defined(GTEST_HAS_HASH_MAP_) -# if _MSC_VER +# if defined(_MSC_VER) && (_MSC_VER < 1900) # define GTEST_HAS_HASH_MAP_ 1 // Indicates that hash_map is available. # define GTEST_HAS_HASH_SET_ 1 // Indicates that hash_set is available. # endif // _MSC_VER @@ -629,6 +641,9 @@ struct _RTL_CRITICAL_SECTION; # if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) // STLport, provided with the Android NDK, has neither <tr1/tuple> or <tuple>. # define GTEST_HAS_TR1_TUPLE 0 +# elif defined(_MSC_VER) && (_MSC_VER >= 1910) +// Prevent `warning C4996: 'std::tr1': warning STL4002: The non-Standard std::tr1 namespace and TR1-only machinery are deprecated and will be REMOVED.` +# define GTEST_HAS_TR1_TUPLE 0 # else // The user didn't tell us not to do it, so we assume it's OK. # define GTEST_HAS_TR1_TUPLE 1 @@ -651,7 +666,8 @@ struct _RTL_CRITICAL_SECTION; // support TR1 tuple. libc++ only provides std::tuple, in C++11 mode, // and it can be used with some compilers that define __GNUC__. # if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000) \ - && !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) || _MSC_VER >= 1600 + && !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) \ + || (_MSC_VER >= 1600 && _MSC_VER < 1900) # define GTEST_ENV_HAS_TR1_TUPLE_ 1 # endif @@ -732,7 +748,7 @@ using ::std::tuple_size; # define _TR1_FUNCTIONAL 1 # include <tr1/tuple> # undef _TR1_FUNCTIONAL // Allows the user to #include - // <tr1/functional> if he chooses to. + // <tr1/functional> if they choose to. # else # include <tr1/tuple> // NOLINT # endif // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 @@ -754,8 +770,12 @@ using ::std::tuple_size; # if GTEST_OS_LINUX && !defined(__ia64__) # if GTEST_OS_LINUX_ANDROID -// On Android, clone() is only available on ARM starting with Gingerbread. -# if defined(__arm__) && __ANDROID_API__ >= 9 +// On Android, clone() became available at different API levels for each 32-bit +// architecture. +# if defined(__LP64__) || \ + (defined(__arm__) && __ANDROID_API__ >= 9) || \ + (defined(__mips__) && __ANDROID_API__ >= 12) || \ + (defined(__i386__) && __ANDROID_API__ >= 17) # define GTEST_HAS_CLONE 1 # else # define GTEST_HAS_CLONE 0 @@ -790,15 +810,10 @@ using ::std::tuple_size; (GTEST_OS_MAC && !GTEST_OS_IOS) || \ (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \ GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \ - GTEST_OS_OPENBSD || GTEST_OS_QNX || GTEST_OS_FREEBSD) + GTEST_OS_OPENBSD || GTEST_OS_QNX || GTEST_OS_FREEBSD || GTEST_OS_NETBSD) # define GTEST_HAS_DEATH_TEST 1 #endif -// We don't support MSVC 7.1 with exceptions disabled now. Therefore -// all the compilers we care about are adequate for supporting -// value-parameterized tests. -#define GTEST_HAS_PARAM_TEST 1 - // Determines whether to support type-driven tests. // Typed tests need <typeinfo> and variadic macros, which GCC, VC++ 8.0, @@ -809,11 +824,10 @@ using ::std::tuple_size; # define GTEST_HAS_TYPED_TEST_P 1 #endif -// Determines whether to support Combine(). This only makes sense when -// value-parameterized tests are enabled. The implementation doesn't -// work on Sun Studio since it doesn't understand templated conversion -// operators. -#if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC) +// Determines whether to support Combine(). +// The implementation doesn't work on Sun Studio since it doesn't +// understand templated conversion operators. +#if GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC) # define GTEST_HAS_COMBINE 1 #endif @@ -864,6 +878,23 @@ using ::std::tuple_size; # define GTEST_ATTRIBUTE_UNUSED_ #endif +// Use this annotation before a function that takes a printf format string. +#if defined(__GNUC__) && !defined(COMPILER_ICC) +# if defined(__MINGW_PRINTF_FORMAT) +// MinGW has two different printf implementations. Ensure the format macro +// matches the selected implementation. See +// https://sourceforge.net/p/mingw-w64/wiki2/gnu%20printf/. +# define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ + __attribute__((__format__(__MINGW_PRINTF_FORMAT, string_index, \ + first_to_check))) +# else +# define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ + __attribute__((__format__(__printf__, string_index, first_to_check))) +# endif +#else +# define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) +#endif + // A macro to disallow operator= // This should be used in the private: declarations for a class. #define GTEST_DISALLOW_ASSIGN_(type)\ @@ -920,6 +951,11 @@ using ::std::tuple_size; #endif // GTEST_HAS_SEH +// GTEST_API_ qualifies all symbols that must be exported. The definitions below +// are guarded by #ifndef to give embedders a chance to define GTEST_API_ in +// gtest/internal/custom/gtest-port.h +#ifndef GTEST_API_ + #ifdef _MSC_VER # if GTEST_LINKED_AS_SHARED_LIBRARY # define GTEST_API_ __declspec(dllimport) @@ -930,9 +966,11 @@ using ::std::tuple_size; # define GTEST_API_ __attribute__((visibility ("default"))) #endif // _MSC_VER +#endif // GTEST_API_ + #ifndef GTEST_API_ # define GTEST_API_ -#endif +#endif // GTEST_API_ #ifdef __GNUC__ // Ask the compiler to never inline a given function. @@ -1418,9 +1456,6 @@ GTEST_API_ std::string GetCapturedStderr(); #endif // GTEST_HAS_STREAM_REDIRECTION -// Returns a path to temporary directory. -GTEST_API_ std::string TempDir(); - // Returns the size (in bytes) of a file. GTEST_API_ size_t GetFileSize(FILE* file); @@ -1693,7 +1728,7 @@ class GTEST_API_ Mutex { // by the linker. MutexType type_; long critical_section_init_phase_; // NOLINT - _RTL_CRITICAL_SECTION* critical_section_; + GTEST_CRITICAL_SECTION* critical_section_; GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex); }; @@ -2027,7 +2062,7 @@ extern "C" inline void DeleteThreadLocalValue(void* value_holder) { // Implements thread-local storage on pthreads-based systems. template <typename T> -class ThreadLocal { +class GTEST_API_ ThreadLocal { public: ThreadLocal() : key_(CreateKey()), default_factory_(new DefaultValueHolderFactory()) {} @@ -2159,7 +2194,7 @@ class GTestMutexLock { typedef GTestMutexLock MutexLock; template <typename T> -class ThreadLocal { +class GTEST_API_ ThreadLocal { public: ThreadLocal() : value_() {} explicit ThreadLocal(const T& value) : value_(value) {} @@ -2178,12 +2213,13 @@ class ThreadLocal { GTEST_API_ size_t GetThreadCount(); // Passing non-POD classes through ellipsis (...) crashes the ARM -// compiler and generates a warning in Sun Studio. The Nokia Symbian +// compiler and generates a warning in Sun Studio before 12u4. The Nokia Symbian // and the IBM XL C/C++ compiler try to instantiate a copy constructor // for objects passed through ellipsis (...), failing for uncopyable // objects. We define this to ensure that only POD is passed through // ellipsis on these systems. -#if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC) +#if defined(__SYMBIAN32__) || defined(__IBMCPP__) || \ + (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x5130) // We lose support for NULL detection where the compiler doesn't like // passing non-POD classes through ellipsis (...). # define GTEST_ELLIPSIS_NEEDS_POD_ 1 @@ -2209,6 +2245,12 @@ template <bool bool_value> const bool bool_constant<bool_value>::value; typedef bool_constant<false> false_type; typedef bool_constant<true> true_type; +template <typename T, typename U> +struct is_same : public false_type {}; + +template <typename T> +struct is_same<T, T> : public true_type {}; + template <typename T> struct is_pointer : public false_type {}; @@ -2385,7 +2427,7 @@ inline int Close(int fd) { return close(fd); } inline const char* StrError(int errnum) { return strerror(errnum); } #endif inline const char* GetEnv(const char* name) { -#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE | GTEST_OS_WINDOWS_RT +#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT // We are on Windows CE, which has no environment variables. static_cast<void>(name); // To prevent 'unused argument' warning. return NULL; @@ -2549,6 +2591,7 @@ GTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val); std::string StringFromGTestEnv(const char* flag, const char* default_val); } // namespace internal + } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-death-test.cc b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-death-test.cc index a01a3698308..fca103556d5 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-death-test.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-death-test.cc @@ -883,11 +883,10 @@ class ExecDeathTest : public ForkingDeathTest { ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { } virtual TestRole AssumeRole(); private: - static ::std::vector<testing::internal::string> - GetArgvsForDeathTestChildProcess() { - ::std::vector<testing::internal::string> args = GetInjectableArgvs(); + static ::std::vector<std::string> GetArgvsForDeathTestChildProcess() { + ::std::vector<std::string> args = GetInjectableArgvs(); # if defined(GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_) - ::std::vector<testing::internal::string> extra_args = + ::std::vector<std::string> extra_args = GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_(); args.insert(args.end(), extra_args.begin(), extra_args.end()); # endif // defined(GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_) @@ -1243,7 +1242,7 @@ int GetStatusFileDescriptor(unsigned int parent_process_id, reinterpret_cast<HANDLE>(write_handle_as_size_t); HANDLE dup_write_handle; - // The newly initialized handle is accessible only in in the parent + // The newly initialized handle is accessible only in the parent // process. To obtain one accessible within the child, we need to use // DuplicateHandle. if (!::DuplicateHandle(parent_process_handle.Get(), write_handle, diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-internal-inl.h b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-internal-inl.h index ed8a682a964..143729378db 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-internal-inl.h +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-internal-inl.h @@ -426,7 +426,7 @@ class OsStackTraceGetterInterface { // in the trace. // skip_count - the number of top frames to be skipped; doesn't count // against max_depth. - virtual string CurrentStackTrace(int max_depth, int skip_count) = 0; + virtual std::string CurrentStackTrace(int max_depth, int skip_count) = 0; // UponLeavingGTest() should be called immediately before Google Test calls // user code. It saves some information about the current stack that @@ -446,7 +446,7 @@ class OsStackTraceGetter : public OsStackTraceGetterInterface { public: OsStackTraceGetter() {} - virtual string CurrentStackTrace(int max_depth, int skip_count); + virtual std::string CurrentStackTrace(int max_depth, int skip_count); virtual void UponLeavingGTest(); private: @@ -664,13 +664,11 @@ class GTEST_API_ UnitTestImpl { tear_down_tc)->AddTestInfo(test_info); } -#if GTEST_HAS_PARAM_TEST // Returns ParameterizedTestCaseRegistry object used to keep track of // value-parameterized tests and instantiate and register them. internal::ParameterizedTestCaseRegistry& parameterized_test_registry() { return parameterized_test_registry_; } -#endif // GTEST_HAS_PARAM_TEST // Sets the TestCase object for the test that's currently running. void set_current_test_case(TestCase* a_current_test_case) { @@ -845,14 +843,12 @@ class GTEST_API_ UnitTestImpl { // shuffled order. std::vector<int> test_case_indices_; -#if GTEST_HAS_PARAM_TEST // ParameterizedTestRegistry object used to register value-parameterized // tests. internal::ParameterizedTestCaseRegistry parameterized_test_registry_; // Indicates whether RegisterParameterizedTests() has been called already. bool parameterized_tests_registered_; -#endif // GTEST_HAS_PARAM_TEST // Index of the last death test case registered. Initially -1. int last_death_test_case_; @@ -1040,21 +1036,19 @@ class GTEST_API_ StreamingListener : public EmptyTestEventListener { virtual ~AbstractSocketWriter() {} // Sends a string to the socket. - virtual void Send(const string& message) = 0; + virtual void Send(const std::string& message) = 0; // Closes the socket. virtual void CloseConnection() {} // Sends a string and a newline to the socket. - void SendLn(const string& message) { - Send(message + "\n"); - } + void SendLn(const std::string& message) { Send(message + "\n"); } }; // Concrete class for actually writing strings to a socket. class SocketWriter : public AbstractSocketWriter { public: - SocketWriter(const string& host, const string& port) + SocketWriter(const std::string& host, const std::string& port) : sockfd_(-1), host_name_(host), port_num_(port) { MakeConnection(); } @@ -1065,7 +1059,7 @@ class GTEST_API_ StreamingListener : public EmptyTestEventListener { } // Sends a string to the socket. - virtual void Send(const string& message) { + virtual void Send(const std::string& message) { GTEST_CHECK_(sockfd_ != -1) << "Send() can be called only when there is a connection."; @@ -1091,17 +1085,19 @@ class GTEST_API_ StreamingListener : public EmptyTestEventListener { } int sockfd_; // socket file descriptor - const string host_name_; - const string port_num_; + const std::string host_name_; + const std::string port_num_; GTEST_DISALLOW_COPY_AND_ASSIGN_(SocketWriter); }; // class SocketWriter // Escapes '=', '&', '%', and '\n' characters in str as "%xx". - static string UrlEncode(const char* str); + static std::string UrlEncode(const char* str); - StreamingListener(const string& host, const string& port) - : socket_writer_(new SocketWriter(host, port)) { Start(); } + StreamingListener(const std::string& host, const std::string& port) + : socket_writer_(new SocketWriter(host, port)) { + Start(); + } explicit StreamingListener(AbstractSocketWriter* socket_writer) : socket_writer_(socket_writer) { Start(); } @@ -1162,13 +1158,13 @@ class GTEST_API_ StreamingListener : public EmptyTestEventListener { private: // Sends the given message and a newline to the socket. - void SendLn(const string& message) { socket_writer_->SendLn(message); } + void SendLn(const std::string& message) { socket_writer_->SendLn(message); } // Called at the start of streaming to notify the receiver what // protocol we are using. void Start() { SendLn("gtest_streaming_protocol_version=1.0"); } - string FormatBool(bool value) { return value ? "1" : "0"; } + std::string FormatBool(bool value) { return value ? "1" : "0"; } const scoped_ptr<AbstractSocketWriter> socket_writer_; diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-port.cc b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-port.cc index e5bf3dd2be4..5a6eb8730a9 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-port.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-port.cc @@ -93,7 +93,7 @@ const int kStdErrFileno = STDERR_FILENO; namespace { template <typename T> -T ReadProcFileField(const string& filename, int field) { +T ReadProcFileField(const std::string& filename, int field) { std::string dummy; std::ifstream file(filename.c_str()); while (field-- > 0) { @@ -107,7 +107,7 @@ T ReadProcFileField(const string& filename, int field) { // Returns the number of active threads, or 0 when there is an error. size_t GetThreadCount() { - const string filename = + const std::string filename = (Message() << "/proc/" << getpid() << "/stat").GetString(); return ReadProcFileField<int>(filename, 19); } @@ -496,7 +496,7 @@ class ThreadLocalRegistryImpl { FALSE, thread_id); GTEST_CHECK_(thread != NULL); - // We need to to pass a valid thread ID pointer into CreateThread for it + // We need to pass a valid thread ID pointer into CreateThread for it // to work correctly under Win98. DWORD watcher_thread_id; HANDLE watcher_thread = ::CreateThread( @@ -1055,24 +1055,6 @@ std::string GetCapturedStderr() { #endif // GTEST_HAS_STREAM_REDIRECTION -std::string TempDir() { -#if GTEST_OS_WINDOWS_MOBILE - return "\\temp\\"; -#elif GTEST_OS_WINDOWS - const char* temp_dir = posix::GetEnv("TEMP"); - if (temp_dir == NULL || temp_dir[0] == '\0') - return "\\temp\\"; - else if (temp_dir[strlen(temp_dir) - 1] == '\\') - return temp_dir; - else - return std::string(temp_dir) + "\\"; -#elif GTEST_OS_LINUX_ANDROID - return "/sdcard/"; -#else - return "/tmp/"; -#endif // GTEST_OS_WINDOWS_MOBILE -} - size_t GetFileSize(FILE* file) { fseek(file, 0, SEEK_END); return static_cast<size_t>(ftell(file)); diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-printers.cc b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-printers.cc index a2df412f8a2..dd67f645827 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-printers.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest-printers.cc @@ -180,7 +180,10 @@ static CharFormat PrintAsCharLiteralTo(Char c, ostream* os) { *os << static_cast<char>(c); return kAsIs; } else { - *os << "\\x" + String::FormatHexInt(static_cast<UnsignedChar>(c)); + ostream::fmtflags flags = os->flags(); + *os << "\\x" << std::hex << std::uppercase + << static_cast<int>(static_cast<UnsignedChar>(c)); + os->flags(flags); return kHexEscape; } } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest.cc b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest.cc index d882ab2e36a..90eea805ac9 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest.cc +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/gtest/src/gtest.cc @@ -137,7 +137,7 @@ // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in -// his code. +// their code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ @@ -310,7 +310,8 @@ namespace internal { // than kMaxRange. UInt32 Random::Generate(UInt32 range) { // These constants are the same as are used in glibc's rand(3). - state_ = (1103515245U*state_ + 12345U) % kMaxRange; + // Use wider types than necessary to prevent unsigned overflow diagnostics. + state_ = static_cast<UInt32>(1103515245ULL*state_ + 12345U) % kMaxRange; GTEST_CHECK_(range > 0) << "Cannot generate a number in the range [0, 0)."; @@ -633,7 +634,7 @@ AssertionResult HasOneFailure(const char* /* results_expr */, const char* /* substr_expr */, const TestPartResultArray& results, TestPartResult::Type type, - const string& substr) { + const std::string& substr) { const std::string expected(type == TestPartResult::kFatalFailure ? "1 fatal failure" : "1 non-fatal failure"); @@ -667,13 +668,10 @@ AssertionResult HasOneFailure(const char* /* results_expr */, // The constructor of SingleFailureChecker remembers where to look up // test part results, what type of failure we expect, and what // substring the failure message should contain. -SingleFailureChecker:: SingleFailureChecker( - const TestPartResultArray* results, - TestPartResult::Type type, - const string& substr) - : results_(results), - type_(type), - substr_(substr) {} +SingleFailureChecker::SingleFailureChecker(const TestPartResultArray* results, + TestPartResult::Type type, + const std::string& substr) + : results_(results), type_(type), substr_(substr) {} // The destructor of SingleFailureChecker verifies that the given // TestPartResultArray contains exactly one failure that has the given @@ -1171,7 +1169,7 @@ class Hunk { // Print a unified diff header for one hunk. // The format is // "@@ -<left_start>,<left_length> +<right_start>,<right_length> @@" - // where the left/right parts are ommitted if unnecessary. + // where the left/right parts are omitted if unnecessary. void PrintHeader(std::ostream* ss) const { *ss << "@@ "; if (removes_) { @@ -1315,13 +1313,14 @@ AssertionResult EqFailure(const char* lhs_expression, const std::string& rhs_value, bool ignoring_case) { Message msg; - msg << " Expected: " << lhs_expression; + msg << "Expected equality of these values:"; + msg << "\n " << lhs_expression; if (lhs_value != lhs_expression) { - msg << "\n Which is: " << lhs_value; + msg << "\n Which is: " << lhs_value; } - msg << "\nTo be equal to: " << rhs_expression; + msg << "\n " << rhs_expression; if (rhs_value != rhs_expression) { - msg << "\n Which is: " << rhs_value; + msg << "\n Which is: " << rhs_value; } if (ignoring_case) { @@ -1784,7 +1783,7 @@ std::string CodePointToUtf8(UInt32 code_point) { return str; } -// The following two functions only make sense if the the system +// The following two functions only make sense if the system // uses UTF-16 for wide string encoding. All supported systems // with 16 bit wchar_t (Windows, Cygwin, Symbian OS) do use UTF-16. @@ -2557,7 +2556,6 @@ TestInfo* MakeAndRegisterTestInfo( return test_info; } -#if GTEST_HAS_PARAM_TEST void ReportInvalidTestCaseType(const char* test_case_name, CodeLocation code_location) { Message errors; @@ -2571,12 +2569,11 @@ void ReportInvalidTestCaseType(const char* test_case_name, << "probably rename one of the classes to put the tests into different\n" << "test cases."; - fprintf(stderr, "%s %s", - FormatFileLocation(code_location.file.c_str(), - code_location.line).c_str(), - errors.GetString().c_str()); + GTEST_LOG_(ERROR) + << FormatFileLocation(code_location.file.c_str(), + code_location.line) + << " " << errors.GetString(); } -#endif // GTEST_HAS_PARAM_TEST } // namespace internal @@ -2615,12 +2612,10 @@ namespace internal { // and INSTANTIATE_TEST_CASE_P into regular tests and registers those. // This will be done just once during the program runtime. void UnitTestImpl::RegisterParameterizedTests() { -#if GTEST_HAS_PARAM_TEST if (!parameterized_tests_registered_) { parameterized_test_registry_.RegisterTests(); parameterized_tests_registered_ = true; } -#endif } } // namespace internal @@ -2885,7 +2880,7 @@ enum GTestColor { }; #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE && \ - !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT + !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT && !GTEST_OS_WINDOWS_MINGW // Returns the character attribute for the given color. WORD GetColorAttribute(GTestColor color) { @@ -2897,6 +2892,33 @@ WORD GetColorAttribute(GTestColor color) { } } +int GetBitOffset(WORD color_mask) { + if (color_mask == 0) return 0; + + int bitOffset = 0; + while((color_mask & 1) == 0) { + color_mask >>= 1; + ++bitOffset; + } + return bitOffset; +} + +WORD GetNewColor(GTestColor color, WORD old_color_attrs) { + // Let's reuse the BG + static const WORD background_mask = BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY; + static const WORD foreground_mask = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY; + const WORD existing_bg = old_color_attrs & background_mask; + + WORD new_color = GetColorAttribute(color) | existing_bg | FOREGROUND_INTENSITY; + static const int bg_bitOffset = GetBitOffset(background_mask); + static const int fg_bitOffset = GetBitOffset(foreground_mask); + + if (((new_color & background_mask) >> bg_bitOffset) == ((new_color & foreground_mask) >> fg_bitOffset)) { + new_color ^= FOREGROUND_INTENSITY; //invert intensity + } + return new_color; +} + #else // Returns the ANSI color code for the given color. COLOR_DEFAULT is @@ -2917,7 +2939,7 @@ bool ShouldUseColor(bool stdout_is_tty) { const char* const gtest_color = GTEST_FLAG(color).c_str(); if (String::CaseInsensitiveCStringEquals(gtest_color, "auto")) { -#if GTEST_OS_WINDOWS +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW // On Windows the TERM variable is usually not set, but the // console there does support colors. return stdout_is_tty; @@ -2953,6 +2975,7 @@ bool ShouldUseColor(bool stdout_is_tty) { // cannot simply emit special characters and have the terminal change colors. // This routine must actually emit the characters rather than return a string // that would be colored when printed, as can be done on Linux. +GTEST_ATTRIBUTE_PRINTF_(2, 3) void ColoredPrintf(GTestColor color, const char* fmt, ...) { va_list args; va_start(args, fmt); @@ -2974,20 +2997,21 @@ void ColoredPrintf(GTestColor color, const char* fmt, ...) { } #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE && \ - !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT + !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT && !GTEST_OS_WINDOWS_MINGW const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE); // Gets the current text color. CONSOLE_SCREEN_BUFFER_INFO buffer_info; GetConsoleScreenBufferInfo(stdout_handle, &buffer_info); const WORD old_color_attrs = buffer_info.wAttributes; - + const WORD new_color = GetNewColor(color, old_color_attrs); + // We need to flush the stream buffers into the console before each // SetConsoleTextAttribute call lest it affect the text that is already // printed but has not yet reached the console. fflush(stdout); - SetConsoleTextAttribute(stdout_handle, - GetColorAttribute(color) | FOREGROUND_INTENSITY); + SetConsoleTextAttribute(stdout_handle, new_color); + vprintf(fmt, args); fflush(stdout); @@ -3422,9 +3446,7 @@ class XmlUnitTestResultPrinter : public EmptyTestEventListener { XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file) : output_file_(output_file) { if (output_file_.c_str() == NULL || output_file_.empty()) { - fprintf(stderr, "XML output file may not be null\n"); - fflush(stderr); - exit(EXIT_FAILURE); + GTEST_LOG_(FATAL) << "XML output file may not be null"; } } @@ -3449,11 +3471,8 @@ void XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, // 3. To interpret the meaning of errno in a thread-safe way, // we need the strerror_r() function, which is not available on // Windows. - fprintf(stderr, - "Unable to open file \"%s\"\n", - output_file_.c_str()); - fflush(stderr); - exit(EXIT_FAILURE); + GTEST_LOG_(FATAL) << "Unable to open file \"" + << output_file_ << "\""; } std::stringstream stream; PrintXmlUnitTest(&stream, unit_test); @@ -3653,13 +3672,14 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, if (++failures == 1) { *stream << ">\n"; } - const string location = internal::FormatCompilerIndependentFileLocation( - part.file_name(), part.line_number()); - const string summary = location + "\n" + part.summary(); + const std::string location = + internal::FormatCompilerIndependentFileLocation(part.file_name(), + part.line_number()); + const std::string summary = location + "\n" + part.summary(); *stream << " <failure message=\"" << EscapeXmlAttribute(summary.c_str()) << "\" type=\"\">"; - const string detail = location + "\n" + part.message(); + const std::string detail = location + "\n" + part.message(); OutputXmlCDataSection(stream, RemoveInvalidXmlCharacters(detail).c_str()); *stream << "</failure>\n"; } @@ -3758,8 +3778,8 @@ std::string XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes( // example, replaces "=" with "%3D". This algorithm is O(strlen(str)) // in both time and space -- important as the input str may contain an // arbitrarily long test failure message and stack trace. -string StreamingListener::UrlEncode(const char* str) { - string result; +std::string StreamingListener::UrlEncode(const char* str) { + std::string result; result.reserve(strlen(str) + 1); for (char ch = *str; ch != '\0'; ch = *++str) { switch (ch) { @@ -3847,8 +3867,8 @@ ScopedTrace::~ScopedTrace() const char* const OsStackTraceGetterInterface::kElidedFramesMarker = "... " GTEST_NAME_ " internal frames ..."; -string OsStackTraceGetter::CurrentStackTrace(int /*max_depth*/, - int /*skip_count*/) { +std::string OsStackTraceGetter::CurrentStackTrace(int /*max_depth*/, + int /*skip_count*/) { return ""; } @@ -4285,7 +4305,6 @@ const TestInfo* UnitTest::current_test_info() const // Returns the random seed used at the start of the current test run. int UnitTest::random_seed() const { return impl_->random_seed(); } -#if GTEST_HAS_PARAM_TEST // Returns ParameterizedTestCaseRegistry object used to keep track of // value-parameterized tests and instantiate and register them. internal::ParameterizedTestCaseRegistry& @@ -4293,7 +4312,6 @@ internal::ParameterizedTestCaseRegistry& GTEST_LOCK_EXCLUDED_(mutex_) { return impl_->parameterized_test_registry(); } -#endif // GTEST_HAS_PARAM_TEST // Creates an empty UnitTest. UnitTest::UnitTest() { @@ -4332,10 +4350,8 @@ UnitTestImpl::UnitTestImpl(UnitTest* parent) &default_global_test_part_result_reporter_), per_thread_test_part_result_reporter_( &default_per_thread_test_part_result_reporter_), -#if GTEST_HAS_PARAM_TEST parameterized_test_registry_(), parameterized_tests_registered_(false), -#endif // GTEST_HAS_PARAM_TEST last_death_test_case_(-1), current_test_case_(NULL), current_test_info_(NULL), @@ -4403,9 +4419,9 @@ void UnitTestImpl::ConfigureXmlOutput() { listeners()->SetDefaultXmlGenerator(new XmlUnitTestResultPrinter( UnitTestOptions::GetAbsolutePathToOutputFile().c_str())); } else if (output_format != "") { - printf("WARNING: unrecognized output format \"%s\" ignored.\n", - output_format.c_str()); - fflush(stdout); + GTEST_LOG_(WARNING) << "WARNING: unrecognized output format \"" + << output_format + << "\" ignored."; } } @@ -4420,9 +4436,9 @@ void UnitTestImpl::ConfigureStreamingOutput() { listeners()->Append(new StreamingListener(target.substr(0, pos), target.substr(pos+1))); } else { - printf("WARNING: unrecognized streaming target \"%s\" ignored.\n", - target.c_str()); - fflush(stdout); + GTEST_LOG_(WARNING) << "unrecognized streaming target \"" + << target + << "\" ignored."; } } } @@ -4551,9 +4567,9 @@ static void TearDownEnvironment(Environment* env) { env->TearDown(); } bool UnitTestImpl::RunAllTests() { // Makes sure InitGoogleTest() was called. if (!GTestIsInitialized()) { - printf("%s", - "\nThis test program did NOT call ::testing::InitGoogleTest " - "before calling RUN_ALL_TESTS(). Please fix it.\n"); + GTEST_LOG_(ERROR) << + "\nThis test program did NOT call ::testing::InitGoogleTest " + "before calling RUN_ALL_TESTS(). Please fix it."; return false; } @@ -4729,7 +4745,7 @@ bool ShouldShard(const char* total_shards_env, << "Invalid environment variables: you have " << kTestShardIndex << " = " << shard_index << ", but have left " << kTestTotalShards << " unset.\n"; - ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + ColoredPrintf(COLOR_RED, "%s", msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } else if (total_shards != -1 && shard_index == -1) { @@ -4737,7 +4753,7 @@ bool ShouldShard(const char* total_shards_env, << "Invalid environment variables: you have " << kTestTotalShards << " = " << total_shards << ", but have left " << kTestShardIndex << " unset.\n"; - ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + ColoredPrintf(COLOR_RED, "%s", msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } else if (shard_index < 0 || shard_index >= total_shards) { @@ -4746,7 +4762,7 @@ bool ShouldShard(const char* total_shards_env, << kTestShardIndex << " < " << kTestTotalShards << ", but you have " << kTestShardIndex << "=" << shard_index << ", " << kTestTotalShards << "=" << total_shards << ".\n"; - ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + ColoredPrintf(COLOR_RED, "%s", msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } @@ -4784,7 +4800,7 @@ bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { // each TestCase and TestInfo object. // If shard_tests == true, further filters tests based on sharding // variables in the environment - see -// http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide. +// https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md . // Returns the number of tests that should run. int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ? @@ -5184,12 +5200,12 @@ static const char kColorEncodedHelpMessage[] = "Test Output:\n" " @G--" GTEST_FLAG_PREFIX_ "color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D\n" " Enable/disable colored output. The default is @Gauto@D.\n" -" -@G-" GTEST_FLAG_PREFIX_ "print_time=0@D\n" +" @G--" GTEST_FLAG_PREFIX_ "print_time=0@D\n" " Don't print the elapsed time of each test.\n" " @G--" GTEST_FLAG_PREFIX_ "output=xml@Y[@G:@YDIRECTORY_PATH@G" GTEST_PATH_SEP_ "@Y|@G:@YFILE_PATH]@D\n" " Generate an XML report in the given directory or with the given file\n" -" name. @YFILE_PATH@D defaults to @Gtest_details.xml@D.\n" +" name. @YFILE_PATH@D defaults to @Gtest_detail.xml@D.\n" #if GTEST_CAN_STREAM_RESULTS_ " @G--" GTEST_FLAG_PREFIX_ "stream_result_to=@YHOST@G:@YPORT@D\n" " Stream test results to the given server.\n" @@ -5253,11 +5269,9 @@ bool ParseGoogleTestFlag(const char* const arg) { void LoadFlagsFromFile(const std::string& path) { FILE* flagfile = posix::FOpen(path.c_str(), "r"); if (!flagfile) { - fprintf(stderr, - "Unable to open file \"%s\"\n", - GTEST_FLAG(flagfile).c_str()); - fflush(stderr); - exit(EXIT_FAILURE); + GTEST_LOG_(FATAL) << "Unable to open file \"" + << GTEST_FLAG(flagfile) + << "\""; } std::string contents(ReadEntireFile(flagfile)); posix::FClose(flagfile); @@ -5385,4 +5399,25 @@ void InitGoogleTest(int* argc, wchar_t** argv) { #endif // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) } +std::string TempDir() { +#if defined(GTEST_CUSTOM_TEMPDIR_FUNCTION_) + return GTEST_CUSTOM_TEMPDIR_FUNCTION_(); +#endif +#if GTEST_OS_WINDOWS_MOBILE + return "\\temp\\"; +#elif GTEST_OS_WINDOWS + const char* temp_dir = internal::posix::GetEnv("TEMP"); + if (temp_dir == NULL || temp_dir[0] == '\0') + return "\\temp\\"; + else if (temp_dir[strlen(temp_dir) - 1] == '\\') + return temp_dir; + else + return std::string(temp_dir) + "\\"; +#elif GTEST_OS_LINUX_ANDROID + return "/sdcard/"; +#else + return "/tmp/"; +#endif // GTEST_OS_WINDOWS_MOBILE +} + } // namespace testing diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/normalize.xsl b/Build/source/texk/dvisvgm/dvisvgm-src/tests/normalize.xsl index 49f91791364..5336ddcbe96 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/normalize.xsl +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/normalize.xsl @@ -2,7 +2,7 @@ <!-- ********************************************************************* ** Stylesheet to rearrange font-/path-elements in an SVG file. ** ** It's part of the dvisvgm package. ** -** Copyright (C) 2009-2017 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2009-2018 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/testmain.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/testmain.cpp new file mode 100644 index 00000000000..3f0ebc96326 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/testmain.cpp @@ -0,0 +1,44 @@ +/************************************************************************* +** testmain.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2018 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#include <string> +#include <gtest/gtest.h> +#include "FileFinder.hpp" + +#ifndef SRCDIR +#define SRCDIR "." +#endif + +std::string TEST_ARGV0; + +struct TestEnvironment : public testing::Environment { + void SetUp () override { + FileFinder::init(TEST_ARGV0, "dvisvgm-test", false); + FileFinder::instance().addLookupDir(SRCDIR); + FileFinder::instance().addLookupDir(SRCDIR"/data"); + } +}; + +GTEST_API_ int main (int argc, char **argv) { + TEST_ARGV0 = argv[0]; + testing::InitGoogleTest(&argc, argv); + testing::AddGlobalTestEnvironment(new TestEnvironment); + return RUN_ALL_TESTS(); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/testutil.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/testutil.hpp new file mode 100644 index 00000000000..405b7d82396 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-src/tests/testutil.hpp @@ -0,0 +1,20 @@ +#pragma once + +namespace testing { + namespace internal { + enum GTestColor { + COLOR_DEFAULT, + COLOR_RED, + COLOR_GREEN, + COLOR_YELLOW + }; + + void ColoredPrintf(GTestColor color, const char* fmt, ...); + } +} + +#define WARNING(...) \ + ColoredPrintf(testing::internal::COLOR_YELLOW, "[ WARNING ] "), \ + ColoredPrintf(testing::internal::COLOR_YELLOW, __VA_ARGS__), \ + printf("\n") + diff --git a/Build/source/texk/dvisvgm/version.ac b/Build/source/texk/dvisvgm/version.ac index 2b62ebb678a..ef1fb185837 100644 --- a/Build/source/texk/dvisvgm/version.ac +++ b/Build/source/texk/dvisvgm/version.ac @@ -1,4 +1,5 @@ -dnl Copyright 2015-2017 Karl Berry <tex-live@tug.org> +dnl $Id$ +dnl Copyright 2015-2018 Karl Berry <tex-live@tug.org> dnl Copyright 2011-2015 Peter Breitenlohner <tex-live@tug.org> dnl dnl This file is free software; the copyright holder @@ -8,4 +9,4 @@ dnl dnl -------------------------------------------------------- dnl dnl m4-include this file to define the current dvisvgm version -m4_define([dvisvgm_version], [2.1.3]) +m4_define([dvisvgm_version], [2.3.1]) |