summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonty <xiphmont@xiph.org>2002-09-02 22:13:55 +0000
committerMonty <xiphmont@xiph.org>2002-09-02 22:13:55 +0000
commit56fbebdcf71ea7c8e64cb18ac3a78e5834134fa3 (patch)
tree55b767ac2280049dd1d7cc8d36cb7589987d92eb
downloadtremor-56fbebdcf71ea7c8e64cb18ac3a78e5834134fa3.tar.gz
Put root level of Tremor in CVS
git-svn-id: https://svn.xiph.org/trunk/Tremor@3890 0101bb08-14d6-0310-b084-bc0e0c8e3800
-rw-r--r--CHANGELOG19
-rw-r--r--Makefile.am30
-rw-r--r--Makefile.in428
-rw-r--r--README51
-rw-r--r--asm_arm.h178
-rwxr-xr-xautogen.sh61
-rw-r--r--backends.h127
-rw-r--r--bitwise.c144
-rw-r--r--block.c409
-rw-r--r--codebook.c347
-rw-r--r--codebook.h99
-rw-r--r--codec_internal.h87
-rw-r--r--config_types.h22
-rw-r--r--floor0.c427
-rw-r--r--floor1.c437
-rw-r--r--framing.c672
-rw-r--r--info.c351
-rw-r--r--ivorbiscodec.h198
-rw-r--r--ivorbisfile.h128
-rw-r--r--ivorbisfile_example.c83
-rw-r--r--lsp_lookup.h133
-rw-r--r--mapping0.c319
-rw-r--r--mdct.c505
-rw-r--r--mdct.h42
-rw-r--r--mdct_lookup.h6182
-rw-r--r--misc.h145
-rw-r--r--ogg.h167
-rw-r--r--os.h59
-rw-r--r--os_types.h77
-rw-r--r--registry.c47
-rw-r--r--registry.h37
-rw-r--r--res012.c331
-rw-r--r--sharedbook.c439
-rw-r--r--synthesis.c102
-rw-r--r--vorbisfile.c1417
-rw-r--r--window.c2141
-rw-r--r--window.h24
37 files changed, 16465 insertions, 0 deletions
diff --git a/CHANGELOG b/CHANGELOG
new file mode 100644
index 0000000..53f2335
--- /dev/null
+++ b/CHANGELOG
@@ -0,0 +1,19 @@
+*** 20020517: 1.0.2 ***
+
+ Playback bugfix to floor1; mode mistakenly used for sizing instead
+ of blockflag
+
+*** 20020515: 1.0.1 ***
+
+ Added complete API documentation to source tarball. No code
+ changes.
+
+*** 20020412: 1.0.1 ***
+
+ Fixed a clipping bug that affected ARM processors; negative
+ overflows were being properly clipped, but then clobbered to
+ positive by the positive overflow chec (asm_arm.h:CLIP_TO_15)
+
+*** 20020403: 1.0.0 ***
+
+ Initial version \ No newline at end of file
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..e300619
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,30 @@
+AUTOMAKE_OPTIONS = foreign
+
+INCLUDES = -I./
+
+lib_LTLIBRARIES = libvorbisidec.la
+
+libvorbisidec_la_SOURCES = mdct.c block.c window.c \
+ synthesis.c info.c \
+ floor1.c floor0.c vorbisfile.c \
+ res012.c mapping0.c registry.c codebook.c \
+ sharedbook.c framing.c bitwise.c \
+ codebook.h misc.h mdct_lookup.h\
+ os.h mdct.h ivorbisfile.h lsp_lookup.h\
+ registry.h window.h lookup_data.h\
+ codec_internal.h backends.h ogg.h \
+ asm_arm.h ivorbiscodec.h
+libvorbisidec_la_LDFLAGS = -version-info @V_LIB_CURRENT@:@V_LIB_REVISION@:@V_LIB_AGE@
+
+EXTRA_PROGRAMS = ivorbisfile_example
+CLEANFILES = $(EXTRA_PROGRAMS) $(lib_LTLIBRARIES)
+
+ivorbisfile_example_SOURCES = ivorbisfile_example.c
+ivorbisfile_example_LDFLAGS = -static
+ivorbisfile_example_LDADD = libvorbisidec.la
+
+debug:
+ $(MAKE) all CFLAGS="@DEBUG@" LDFLAGS="-lefence"
+
+profile:
+ $(MAKE) all CFLAGS="@PROFILE@"
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..87c4f69
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,428 @@
+# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 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.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = .
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
+AS = @AS@
+CC = @CC@
+CPP = @CPP@
+DEBUG = @DEBUG@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+EXEEXT = @EXEEXT@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PROFILE = @PROFILE@
+RANLIB = @RANLIB@
+STRIP = @STRIP@
+VERSION = @VERSION@
+V_LIB_AGE = @V_LIB_AGE@
+V_LIB_CURRENT = @V_LIB_CURRENT@
+V_LIB_REVISION = @V_LIB_REVISION@
+
+AUTOMAKE_OPTIONS = foreign
+
+INCLUDES = -I./
+
+lib_LTLIBRARIES = libvorbisidec.la
+
+libvorbisidec_la_SOURCES = mdct.c block.c window.c synthesis.c info.c floor1.c floor0.c vorbisfile.c res012.c mapping0.c registry.c codebook.c sharedbook.c framing.c bitwise.c codebook.h misc.h mdct_lookup.h os.h mdct.h ivorbisfile.h lsp_lookup.h registry.h window.h lookup_data.h codec_internal.h backends.h ogg.h asm_arm.h ivorbiscodec.h
+
+libvorbisidec_la_LDFLAGS = -version-info @V_LIB_CURRENT@:@V_LIB_REVISION@:@V_LIB_AGE@
+
+EXTRA_PROGRAMS = ivorbisfile_example
+CLEANFILES = $(EXTRA_PROGRAMS) $(lib_LTLIBRARIES)
+
+ivorbisfile_example_SOURCES = ivorbisfile_example.c
+ivorbisfile_example_LDFLAGS = -static
+ivorbisfile_example_LDADD = libvorbisidec.la
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(lib_LTLIBRARIES)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir)
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+libvorbisidec_la_LIBADD =
+libvorbisidec_la_OBJECTS = mdct.lo block.lo window.lo synthesis.lo \
+info.lo floor1.lo floor0.lo vorbisfile.lo res012.lo mapping0.lo \
+registry.lo codebook.lo sharedbook.lo framing.lo bitwise.lo
+ivorbisfile_example_OBJECTS = ivorbisfile_example.$(OBJEXT)
+ivorbisfile_example_DEPENDENCIES = libvorbisidec.la
+CFLAGS = @CFLAGS@
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+DIST_COMMON = README Makefile.am Makefile.in aclocal.m4 config.guess \
+config.sub configure configure.in install-sh ltmain.sh missing \
+mkinstalldirs
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+DEP_FILES = .deps/bitwise.P .deps/block.P .deps/codebook.P \
+.deps/floor0.P .deps/floor1.P .deps/framing.P .deps/info.P \
+.deps/ivorbisfile_example.P .deps/mapping0.P .deps/mdct.P \
+.deps/registry.P .deps/res012.P .deps/sharedbook.P .deps/synthesis.P \
+.deps/vorbisfile.P .deps/window.P
+SOURCES = $(libvorbisidec_la_SOURCES) $(ivorbisfile_example_SOURCES)
+OBJECTS = $(libvorbisidec_la_OBJECTS) $(ivorbisfile_example_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .lo .o .obj .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(ACLOCAL_M4): configure.in
+ cd $(srcdir) && $(ACLOCAL)
+
+config.status: $(srcdir)/configure.in $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+ cd $(srcdir) && $(AUTOCONF)
+
+mostlyclean-libLTLIBRARIES:
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+
+distclean-libLTLIBRARIES:
+
+maintainer-clean-libLTLIBRARIES:
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(libdir)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \
+ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \
+ else :; fi; \
+ done
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \
+ done
+
+# FIXME: We should only use cygpath when building on Windows,
+# and only if it is available.
+.c.obj:
+ $(COMPILE) -c `cygpath -w $<`
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+ -rm -f *.$(OBJEXT)
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+.s.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.S.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+
+maintainer-clean-libtool:
+
+libvorbisidec.la: $(libvorbisidec_la_OBJECTS) $(libvorbisidec_la_DEPENDENCIES)
+ $(LINK) -rpath $(libdir) $(libvorbisidec_la_LDFLAGS) $(libvorbisidec_la_OBJECTS) $(libvorbisidec_la_LIBADD) $(LIBS)
+
+ivorbisfile_example$(EXEEXT): $(ivorbisfile_example_OBJECTS) $(ivorbisfile_example_DEPENDENCIES)
+ @rm -f ivorbisfile_example$(EXEEXT)
+ $(LINK) $(ivorbisfile_example_LDFLAGS) $(ivorbisfile_example_OBJECTS) $(ivorbisfile_example_LDADD) $(LIBS)
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ -rm -rf $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
+ mkdir $(distdir)/=build
+ mkdir $(distdir)/=inst
+ dc_install_base=`cd $(distdir)/=inst && pwd`; \
+ cd $(distdir)/=build \
+ && ../configure --srcdir=.. --prefix=$$dc_install_base \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) dist
+ -rm -rf $(distdir)
+ @banner="$(distdir).tar.gz is ready for distribution"; \
+ dashes=`echo "$$banner" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ echo "$$dashes"
+dist: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+dist-all: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+distdir: $(DISTFILES)
+ -rm -rf $(distdir)
+ mkdir $(distdir)
+ -chmod 777 $(distdir)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+
+DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
+
+-include $(DEP_FILES)
+
+mostlyclean-depend:
+
+clean-depend:
+
+distclean-depend:
+ -rm -rf .deps
+
+maintainer-clean-depend:
+
+%.o: %.c
+ @echo '$(COMPILE) -c $<'; \
+ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+ @-cp .deps/$(*F).pp .deps/$(*F).P; \
+ tr ' ' '\012' < .deps/$(*F).pp \
+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+ >> .deps/$(*F).P; \
+ rm .deps/$(*F).pp
+
+%.lo: %.c
+ @echo '$(LTCOMPILE) -c $<'; \
+ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+ @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
+ < .deps/$(*F).pp > .deps/$(*F).P; \
+ tr ' ' '\012' < .deps/$(*F).pp \
+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+ >> .deps/$(*F).P; \
+ rm -f .deps/$(*F).pp
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am: install-libLTLIBRARIES
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-libLTLIBRARIES
+uninstall: uninstall-am
+all-am: Makefile $(LTLIBRARIES)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(libdir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \
+ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \
+ mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \
+ clean-depend clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-libLTLIBRARIES distclean-compile \
+ distclean-libtool distclean-tags distclean-depend \
+ distclean-generic clean-am
+ -rm -f libtool
+
+distclean: distclean-am
+ -rm -f config.status
+
+maintainer-clean-am: maintainer-clean-libLTLIBRARIES \
+ maintainer-clean-compile maintainer-clean-libtool \
+ maintainer-clean-tags maintainer-clean-depend \
+ maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+ -rm -f config.status
+
+.PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \
+clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \
+uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \
+distclean-compile clean-compile maintainer-clean-compile \
+mostlyclean-libtool distclean-libtool clean-libtool \
+maintainer-clean-libtool tags mostlyclean-tags distclean-tags \
+clean-tags maintainer-clean-tags distdir mostlyclean-depend \
+distclean-depend clean-depend maintainer-clean-depend info-am info \
+dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
+install-exec install-data-am install-data install-am install \
+uninstall-am uninstall all-redirect all-am all installdirs \
+mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+debug:
+ $(MAKE) all CFLAGS="@DEBUG@" LDFLAGS="-lefence"
+
+profile:
+ $(MAKE) all CFLAGS="@PROFILE@"
+
+# 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/README b/README
new file mode 100644
index 0000000..709aab0
--- /dev/null
+++ b/README
@@ -0,0 +1,51 @@
+This README covers the Ogg Vorbis 'Tremor' integer playback codec
+source as of date 2002 04 03, version 1.0.0.
+
+ ****
+
+IMPORTANT: Unlike most commonly available Xiph.Org source code, this
+package is Commercial software! It is neither BSD licensed nor a
+variant of the GPL. As such, Xiph.Org reserves redistribution
+rights, subject to agreed upon licensing terms.
+
+ ******
+
+The C source in this package will build on any ANSI C compiler and
+function completely and properly on any platform. The included build
+system assumes GNU build system and make tools (m4, automake,
+autoconf, libtool and gmake). GCC is not required, although GCC is
+the most tested compiler. To build using GNU tools, type in the
+source directory:
+
+./autogen.sh
+make
+
+Currently, the source implements playback in pure C on all platforms
+except ARM, where a [currently] small amount of assembly (see
+asm_arm.h) is used to implement 64 bit math operations and fast LSP
+computation. If building on ARM without the benefit of GNU build
+system tools, be sure that '_ARM_ASSEM_' is #defined by the build
+system if this assembly is desired, else the resulting library will
+use whatever 64 bit math builtins the compiler implements.
+
+No math library is required by this source. No floating point
+operations are used at any point in either setup or decode. This
+decoder library will properly decode any past, current or future
+Vorbis I file or stream.
+
+ ********
+
+The build system produces a static and [when supported by the OS]
+dynamic library named 'libvorbisidec'. This library exposes an API
+nearly identical to the BSD reference library's 'libvorbisfile',
+including all the features familiar to users of vorbisfile. This API
+is similar enough that the proper header file to include is named
+'ivorbisfile.h' [included in the source build directory]. Lower level
+libvorbis-style headers and structures are in 'ivorbiscodec.h'
+[included in the source build directory]. A simple example program,
+ivorbisfile_example.c, can be built with 'make ivorbisfile_example'.
+
+[More documentation to come]
+
+Monty
+xiph.org
diff --git a/asm_arm.h b/asm_arm.h
new file mode 100644
index 0000000..3469461
--- /dev/null
+++ b/asm_arm.h
@@ -0,0 +1,178 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: arm7 and later wide math functions
+
+ ********************************************************************/
+
+#ifdef _ARM_ASSEM_
+#ifndef _V_WIDE_MATH
+#define _V_WIDE_MATH
+
+static inline ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) {
+ int lo,hi;
+ asm volatile("smull %0,%1,%2,%3;\n"
+ : "=&r"(lo),"=&r"(hi)
+ : "%r"(x),"r"(y));
+ return(hi);
+}
+
+static inline ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) {
+ return MULT32(x,y)<<1;
+}
+
+static inline ogg_int32_t MULT30(ogg_int32_t x, ogg_int32_t y) {
+ return MULT32(x,y)<<2;
+}
+
+static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) {
+ int lo,hi;
+ asm volatile("smull %0,%1,%2,%3;\n"
+ "mov %0,%0, lsr #15;\n"
+ "orr %1,%0,%1, lsl #17;\n"
+ : "=&r"(lo),"=&r"(hi)
+ : "%r"(x),"r"(y));
+ return(hi);
+}
+
+static inline ogg_int32_t CLIP_TO_15(ogg_int32_t x) {
+ asm volatile("subs r0,%0,#32768;\n"
+ "movpl %0,#0x7f00;\n"
+ "orrpl %0,%0,#0xff;\n"
+ "adds r0,%0,#32768;\n"
+ "movmi %0,#0x8000;\n"
+ : "+r"(x)
+ :
+ : "r0","cc");
+ return(x);
+}
+
+#endif
+
+#ifndef _V_LSP_MATH_ASM
+#define _V_LSP_MATH_ASM
+
+static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip,
+ ogg_int32_t *qexpp,
+ ogg_int32_t *ilsp,ogg_int32_t wi,
+ ogg_int32_t m){
+
+ ogg_uint32_t qi=*qip,pi=*pip;
+ ogg_int32_t qexp=*qexpp;
+
+ asm("mov r0,%3;"
+ "mov r1,%5,asr#1;"
+ "add r0,r0,r1,lsl#3;"
+ "1:"
+
+ "ldmdb r0!,{r1,r3};"
+ "subs r1,r1,%4;" //ilsp[j]-wi
+ "rsbmi r1,r1,#0;" //labs(ilsp[j]-wi)
+ "umull %0,r2,r1,%0;" //qi*=labs(ilsp[j]-wi)
+
+ "subs r1,r3,%4;" //ilsp[j+1]-wi
+ "rsbmi r1,r1,#0;" //labs(ilsp[j+1]-wi)
+ "umull %1,r3,r1,%1;" //pi*=labs(ilsp[j+1]-wi)
+
+ "cmn r2,r3;" // shift down 16?
+ "beq 0f;"
+ "add %2,%2,#16;"
+ "mov %0,%0,lsr #16;"
+ "orr %0,%0,r2,lsl #16;"
+ "mov %1,%1,lsr #16;"
+ "orr %1,%1,r3,lsl #16;"
+ "0:"
+ "cmp r0,%3;\n"
+ "bhi 1b;\n"
+
+ // odd filter assymetry
+ "ands r0,%5,#1;\n"
+ "beq 2f;\n"
+ "add r0,%3,%5,lsl#2;\n"
+
+ "ldr r1,[r0,#-4];\n"
+ "mov r0,#0x4000;\n"
+
+ "subs r1,r1,%4;\n" //ilsp[j]-wi
+ "rsbmi r1,r1,#0;\n" //labs(ilsp[j]-wi)
+ "umull %0,r2,r1,%0;\n" //qi*=labs(ilsp[j]-wi)
+ "umull %1,r3,r0,%1;\n" //pi*=labs(ilsp[j+1]-wi)
+
+ "cmn r2,r3;\n" // shift down 16?
+ "beq 2f;\n"
+ "add %2,%2,#16;\n"
+ "mov %0,%0,lsr #16;\n"
+ "orr %0,%0,r2,lsl #16;\n"
+ "mov %1,%1,lsr #16;\n"
+ "orr %1,%1,r3,lsl #16;\n"
+
+ //qi=(pi>>shift)*labs(ilsp[j]-wi);
+ //pi=(qi>>shift)*labs(ilsp[j+1]-wi);
+ //qexp+=shift;
+
+ //}
+
+ /* normalize to max 16 sig figs */
+ "2:"
+ "mov r2,#0;"
+ "orr r1,%0,%1;"
+ "tst r1,#0xff000000;"
+ "addne r2,r2,#8;"
+ "movne r1,r1,lsr #8;"
+ "tst r1,#0x00f00000;"
+ "addne r2,r2,#4;"
+ "movne r1,r1,lsr #4;"
+ "tst r1,#0x000c0000;"
+ "addne r2,r2,#2;"
+ "movne r1,r1,lsr #2;"
+ "tst r1,#0x00020000;"
+ "addne r2,r2,#1;"
+ "movne r1,r1,lsr #1;"
+ "tst r1,#0x00010000;"
+ "addne r2,r2,#1;"
+ "mov %0,%0,lsr r2;"
+ "mov %1,%1,lsr r2;"
+ "add %2,%2,r2;"
+
+ : "+r"(qi),"+r"(pi),"+r"(qexp)
+ : "r"(ilsp),"r"(wi),"r"(m)
+ : "r0","r1","r2","r3","cc");
+
+ *qip=qi;
+ *pip=pi;
+ *qexpp=qexp;
+}
+
+static inline void lsp_norm_asm(ogg_uint32_t *qip,ogg_int32_t *qexpp){
+
+ ogg_uint32_t qi=*qip;
+ ogg_int32_t qexp=*qexpp;
+
+ asm("tst %0,#0x0000ff00;"
+ "moveq %0,%0,lsl #8;"
+ "subeq %1,%1,#8;"
+ "tst %0,#0x0000f000;"
+ "moveq %0,%0,lsl #4;"
+ "subeq %1,%1,#4;"
+ "tst %0,#0x0000c000;"
+ "moveq %0,%0,lsl #2;"
+ "subeq %1,%1,#2;"
+ "tst %0,#0x00008000;"
+ "moveq %0,%0,lsl #1;"
+ "subeq %1,%1,#1;"
+ : "+r"(qi),"+r"(qexp)
+ :
+ : "cc");
+ *qip=qi;
+ *qexpp=qexp;
+}
+
+#endif
+#endif
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 0000000..9bdbbf3
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+# Run this to set up the build system: configure, makefiles, etc.
+# (based on the version in enlightenment's cvs)
+
+package="vorbisidec"
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+cd "$srcdir"
+DIE=0
+
+(autoconf --version) < /dev/null > /dev/null 2>&1 || {
+ echo
+ echo "You must have autoconf installed to compile $package."
+ echo "Download the appropriate package for your distribution,"
+ echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
+ DIE=1
+}
+
+(automake --version) < /dev/null > /dev/null 2>&1 || {
+ echo
+ echo "You must have automake installed to compile $package."
+ echo "Download the appropriate package for your system,"
+ echo "or get the source from one of the GNU ftp sites"
+ echo "listed in http://www.gnu.org/order/ftp.html"
+ DIE=1
+}
+
+(libtool --version) < /dev/null > /dev/null 2>&1 || {
+ echo
+ echo "You must have libtool installed to compile $package."
+ echo "Download the appropriate package for your system,"
+ echo "or get the source from one of the GNU ftp sites"
+ echo "listed in http://www.gnu.org/order/ftp.html"
+ DIE=1
+}
+
+if test "$DIE" -eq 1; then
+ exit 1
+fi
+
+if test -z "$*"; then
+ echo "I am going to run ./configure with no arguments - if you wish "
+ echo "to pass any to it, please specify them on the $0 command line."
+fi
+
+echo "Generating configuration files for $package, please wait...."
+
+echo " aclocal $ACLOCAL_FLAGS"
+aclocal $ACLOCAL_FLAGS
+#echo " autoheader"
+#autoheader
+echo " libtoolize --automake"
+libtoolize --automake
+echo " automake --add-missing $AUTOMAKE_FLAGS"
+automake --add-missing $AUTOMAKE_FLAGS
+echo " autoconf"
+autoconf
+
+$srcdir/configure "$@" && echo
diff --git a/backends.h b/backends.h
new file mode 100644
index 0000000..046e680
--- /dev/null
+++ b/backends.h
@@ -0,0 +1,127 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: backend and mapping structures
+
+ ********************************************************************/
+
+/* this is exposed up here because we need it for static modes.
+ Lookups for each backend aren't exposed because there's no reason
+ to do so */
+
+#ifndef _vorbis_backend_h_
+#define _vorbis_backend_h_
+
+#include "codec_internal.h"
+
+/* this would all be simpler/shorter with templates, but.... */
+/* Transform backend generic *************************************/
+
+/* only mdct right now. Flesh it out more if we ever transcend mdct
+ in the transform domain */
+
+/* Floor backend generic *****************************************/
+typedef struct{
+ vorbis_info_floor *(*unpack)(vorbis_info *,oggpack_buffer *);
+ vorbis_look_floor *(*look) (vorbis_dsp_state *,vorbis_info_mode *,
+ vorbis_info_floor *);
+ void (*free_info) (vorbis_info_floor *);
+ void (*free_look) (vorbis_look_floor *);
+ void *(*inverse1) (struct vorbis_block *,vorbis_look_floor *);
+ int (*inverse2) (struct vorbis_block *,vorbis_look_floor *,
+ void *buffer,ogg_int32_t *);
+} vorbis_func_floor;
+
+typedef struct{
+ int order;
+ long rate;
+ long barkmap;
+
+ int ampbits;
+ int ampdB;
+
+ int numbooks; /* <= 16 */
+ int books[16];
+
+} vorbis_info_floor0;
+
+#define VIF_POSIT 63
+#define VIF_CLASS 16
+#define VIF_PARTS 31
+typedef struct{
+ int partitions; /* 0 to 31 */
+ int partitionclass[VIF_PARTS]; /* 0 to 15 */
+
+ int class_dim[VIF_CLASS]; /* 1 to 8 */
+ int class_subs[VIF_CLASS]; /* 0,1,2,3 (bits: 1<<n poss) */
+ int class_book[VIF_CLASS]; /* subs ^ dim entries */
+ int class_subbook[VIF_CLASS][8]; /* [VIF_CLASS][subs] */
+
+
+ int mult; /* 1 2 3 or 4 */
+ int postlist[VIF_POSIT+2]; /* first two implicit */
+
+} vorbis_info_floor1;
+
+/* Residue backend generic *****************************************/
+typedef struct{
+ vorbis_info_residue *(*unpack)(vorbis_info *,oggpack_buffer *);
+ vorbis_look_residue *(*look) (vorbis_dsp_state *,vorbis_info_mode *,
+ vorbis_info_residue *);
+ void (*free_info) (vorbis_info_residue *);
+ void (*free_look) (vorbis_look_residue *);
+ int (*inverse) (struct vorbis_block *,vorbis_look_residue *,
+ ogg_int32_t **,int *,int);
+} vorbis_func_residue;
+
+typedef struct vorbis_info_residue0{
+/* block-partitioned VQ coded straight residue */
+ long begin;
+ long end;
+
+ /* first stage (lossless partitioning) */
+ int grouping; /* group n vectors per partition */
+ int partitions; /* possible codebooks for a partition */
+ int groupbook; /* huffbook for partitioning */
+ int secondstages[64]; /* expanded out to pointers in lookup */
+ int booklist[256]; /* list of second stage books */
+} vorbis_info_residue0;
+
+/* Mapping backend generic *****************************************/
+typedef struct{
+ vorbis_info_mapping *(*unpack)(vorbis_info *,oggpack_buffer *);
+ vorbis_look_mapping *(*look) (vorbis_dsp_state *,vorbis_info_mode *,
+ vorbis_info_mapping *);
+ void (*free_info) (vorbis_info_mapping *);
+ void (*free_look) (vorbis_look_mapping *);
+ int (*inverse) (struct vorbis_block *vb,vorbis_look_mapping *);
+} vorbis_func_mapping;
+
+typedef struct vorbis_info_mapping0{
+ int submaps; /* <= 16 */
+ int chmuxlist[256]; /* up to 256 channels in a Vorbis stream */
+
+ int floorsubmap[16]; /* [mux] submap to floors */
+ int residuesubmap[16]; /* [mux] submap to residue */
+
+ int psy[2]; /* by blocktype; impulse/padding for short,
+ transition/normal for long */
+
+ int coupling_steps;
+ int coupling_mag[256];
+ int coupling_ang[256];
+} vorbis_info_mapping0;
+
+#endif
+
+
+
+
+
diff --git a/bitwise.c b/bitwise.c
new file mode 100644
index 0000000..4782ee0
--- /dev/null
+++ b/bitwise.c
@@ -0,0 +1,144 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: packing variable sized words into an octet stream
+
+ ********************************************************************/
+
+/* We're 'LSb' endian; if we write a word but read individual bits,
+ then we'll read the lsb first */
+
+#include <string.h>
+#include <stdlib.h>
+#include "ogg.h"
+
+#define BUFFER_INCREMENT 256
+
+static unsigned long mask[]=
+{0x00000000,0x00000001,0x00000003,0x00000007,0x0000000f,
+ 0x0000001f,0x0000003f,0x0000007f,0x000000ff,0x000001ff,
+ 0x000003ff,0x000007ff,0x00000fff,0x00001fff,0x00003fff,
+ 0x00007fff,0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff,
+ 0x000fffff,0x001fffff,0x003fffff,0x007fffff,0x00ffffff,
+ 0x01ffffff,0x03ffffff,0x07ffffff,0x0fffffff,0x1fffffff,
+ 0x3fffffff,0x7fffffff,0xffffffff };
+
+void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){
+ memset(b,0,sizeof(*b));
+ b->buffer=b->ptr=buf;
+ b->storage=bytes;
+}
+
+/* Read in bits without advancing the bitptr; bits <= 32 */
+long oggpack_look(oggpack_buffer *b,int bits){
+ unsigned long ret;
+ unsigned long m=mask[bits];
+
+ bits+=b->endbit;
+
+ if(b->endbyte+4>=b->storage){
+ /* not the main path */
+ if(b->endbyte*8+bits>b->storage*8)return(-1);
+ }
+
+ ret=b->ptr[0]>>b->endbit;
+ if(bits>8){
+ ret|=b->ptr[1]<<(8-b->endbit);
+ if(bits>16){
+ ret|=b->ptr[2]<<(16-b->endbit);
+ if(bits>24){
+ ret|=b->ptr[3]<<(24-b->endbit);
+ if(bits>32 && b->endbit)
+ ret|=b->ptr[4]<<(32-b->endbit);
+ }
+ }
+ }
+ return(m&ret);
+}
+
+long oggpack_look1(oggpack_buffer *b){
+ if(b->endbyte>=b->storage)return(-1);
+ return((b->ptr[0]>>b->endbit)&1);
+}
+
+void oggpack_adv(oggpack_buffer *b,int bits){
+ bits+=b->endbit;
+ b->ptr+=bits/8;
+ b->endbyte+=bits/8;
+ b->endbit=bits&7;
+}
+
+void oggpack_adv1(oggpack_buffer *b){
+ if(++(b->endbit)>7){
+ b->endbit=0;
+ b->ptr++;
+ b->endbyte++;
+ }
+}
+
+/* bits <= 32 */
+long oggpack_read(oggpack_buffer *b,int bits){
+ unsigned long ret;
+ unsigned long m=mask[bits];
+
+ bits+=b->endbit;
+
+ if(b->endbyte+4>=b->storage){
+ /* not the main path */
+ ret=-1UL;
+ if(b->endbyte*8+bits>b->storage*8)goto overflow;
+ }
+
+ ret=b->ptr[0]>>b->endbit;
+ if(bits>8){
+ ret|=b->ptr[1]<<(8-b->endbit);
+ if(bits>16){
+ ret|=b->ptr[2]<<(16-b->endbit);
+ if(bits>24){
+ ret|=b->ptr[3]<<(24-b->endbit);
+ if(bits>32 && b->endbit){
+ ret|=b->ptr[4]<<(32-b->endbit);
+ }
+ }
+ }
+ }
+ ret&=m;
+
+ overflow:
+
+ b->ptr+=bits/8;
+ b->endbyte+=bits/8;
+ b->endbit=bits&7;
+ return(ret);
+}
+
+long oggpack_read1(oggpack_buffer *b){
+ unsigned long ret;
+
+ if(b->endbyte>=b->storage){
+ /* not the main path */
+ ret=-1UL;
+ goto overflow;
+ }
+
+ ret=(b->ptr[0]>>b->endbit)&1;
+
+ overflow:
+
+ b->endbit++;
+ if(b->endbit>7){
+ b->endbit=0;
+ b->ptr++;
+ b->endbyte++;
+ }
+ return(ret);
+}
+
+#undef BUFFER_INCREMENT
diff --git a/block.c b/block.c
new file mode 100644
index 0000000..546b756
--- /dev/null
+++ b/block.c
@@ -0,0 +1,409 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: PCM data vector blocking, windowing and dis/reassembly
+
+ ********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+
+#include "window.h"
+#include "registry.h"
+#include "misc.h"
+
+static int ilog(unsigned int v){
+ int ret=0;
+ if(v)--v;
+ while(v){
+ ret++;
+ v>>=1;
+ }
+ return(ret);
+}
+
+/* pcm accumulator examples (not exhaustive):
+
+ <-------------- lW ---------------->
+ <--------------- W ---------------->
+: .....|..... _______________ |
+: .''' | '''_--- | |\ |
+:.....''' |_____--- '''......| | \_______|
+:.................|__________________|_______|__|______|
+ |<------ Sl ------>| > Sr < |endW
+ |beginSl |endSl | |endSr
+ |beginW |endlW |beginSr
+
+
+ |< lW >|
+ <--------------- W ---------------->
+ | | .. ______________ |
+ | | ' `/ | ---_ |
+ |___.'___/`. | ---_____|
+ |_______|__|_______|_________________|
+ | >|Sl|< |<------ Sr ----->|endW
+ | | |endSl |beginSr |endSr
+ |beginW | |endlW
+ mult[0] |beginSl mult[n]
+
+ <-------------- lW ----------------->
+ |<--W-->|
+: .............. ___ | |
+: .''' |`/ \ | |
+:.....''' |/`....\|...|
+:.........................|___|___|___|
+ |Sl |Sr |endW
+ | | |endSr
+ | |beginSr
+ | |endSl
+ |beginSl
+ |beginW
+*/
+
+/* block abstraction setup *********************************************/
+
+#ifndef WORD_ALIGN
+#define WORD_ALIGN 8
+#endif
+
+int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb){
+ memset(vb,0,sizeof(*vb));
+ vb->vd=v;
+ vb->localalloc=0;
+ vb->localstore=NULL;
+
+ return(0);
+}
+
+void *_vorbis_block_alloc(vorbis_block *vb,long bytes){
+ bytes=(bytes+(WORD_ALIGN-1)) & ~(WORD_ALIGN-1);
+ if(bytes+vb->localtop>vb->localalloc){
+ /* can't just _ogg_realloc... there are outstanding pointers */
+ if(vb->localstore){
+ struct alloc_chain *link=(struct alloc_chain *)_ogg_malloc(sizeof(*link));
+ vb->totaluse+=vb->localtop;
+ link->next=vb->reap;
+ link->ptr=vb->localstore;
+ vb->reap=link;
+ }
+ /* highly conservative */
+ vb->localalloc=bytes;
+ vb->localstore=_ogg_malloc(vb->localalloc);
+ vb->localtop=0;
+ }
+ {
+ void *ret=(void *)(((char *)vb->localstore)+vb->localtop);
+ vb->localtop+=bytes;
+ return ret;
+ }
+}
+
+/* reap the chain, pull the ripcord */
+void _vorbis_block_ripcord(vorbis_block *vb){
+ /* reap the chain */
+ struct alloc_chain *reap=vb->reap;
+ while(reap){
+ struct alloc_chain *next=reap->next;
+ _ogg_free(reap->ptr);
+ memset(reap,0,sizeof(*reap));
+ _ogg_free(reap);
+ reap=next;
+ }
+ /* consolidate storage */
+ if(vb->totaluse){
+ vb->localstore=_ogg_realloc(vb->localstore,vb->totaluse+vb->localalloc);
+ vb->localalloc+=vb->totaluse;
+ vb->totaluse=0;
+ }
+
+ /* pull the ripcord */
+ vb->localtop=0;
+ vb->reap=NULL;
+}
+
+int vorbis_block_clear(vorbis_block *vb){
+ _vorbis_block_ripcord(vb);
+ if(vb->localstore)_ogg_free(vb->localstore);
+
+ memset(vb,0,sizeof(*vb));
+ return(0);
+}
+
+int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi){
+ int i;
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ backend_lookup_state *b=NULL;
+
+ memset(v,0,sizeof(*v));
+ b=(backend_lookup_state *)(v->backend_state=_ogg_calloc(1,sizeof(*b)));
+
+ v->vi=vi;
+ b->modebits=ilog(ci->modes);
+
+ /* Vorbis I uses only window type 0 */
+ b->window[0]=_vorbis_window(0,ci->blocksizes[0]/2);
+ b->window[1]=_vorbis_window(0,ci->blocksizes[1]/2);
+
+ /* finish the codebooks */
+ if(!ci->fullbooks){
+ ci->fullbooks=(codebook *)_ogg_calloc(ci->books,sizeof(*ci->fullbooks));
+ for(i=0;i<ci->books;i++){
+ vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i]);
+ /* decode codebooks are now standalone after init */
+ vorbis_staticbook_destroy(ci->book_param[i]);
+ ci->book_param[i]=NULL;
+ }
+ }
+
+ v->pcm_storage=ci->blocksizes[1];
+ v->pcm=(ogg_int32_t **)_ogg_malloc(vi->channels*sizeof(*v->pcm));
+ v->pcmret=(ogg_int32_t **)_ogg_malloc(vi->channels*sizeof(*v->pcmret));
+ for(i=0;i<vi->channels;i++)
+ v->pcm[i]=(ogg_int32_t *)_ogg_calloc(v->pcm_storage,sizeof(*v->pcm[i]));
+
+ /* all 1 (large block) or 0 (small block) */
+ /* explicitly set for the sake of clarity */
+ v->lW=0; /* previous window size */
+ v->W=0; /* current window size */
+
+ /* all vector indexes */
+ v->centerW=ci->blocksizes[1]/2;
+
+ v->pcm_current=v->centerW;
+
+ /* initialize all the mapping/backend lookups */
+ b->mode=(vorbis_look_mapping **)_ogg_calloc(ci->modes,sizeof(*b->mode));
+ for(i=0;i<ci->modes;i++){
+ int mapnum=ci->mode_param[i]->mapping;
+ int maptype=ci->map_type[mapnum];
+ b->mode[i]=_mapping_P[maptype]->look(v,ci->mode_param[i],
+ ci->map_param[mapnum]);
+ }
+
+ v->pcm_returned=-1;
+ v->granulepos=-1;
+ v->sequence=-1;
+
+ return(0);
+}
+
+void vorbis_dsp_clear(vorbis_dsp_state *v){
+ int i;
+ if(v){
+ vorbis_info *vi=v->vi;
+ codec_setup_info *ci=(codec_setup_info *)(vi?vi->codec_setup:NULL);
+ backend_lookup_state *b=(backend_lookup_state *)v->backend_state;
+
+ if(v->pcm){
+ for(i=0;i<vi->channels;i++)
+ if(v->pcm[i])_ogg_free(v->pcm[i]);
+ _ogg_free(v->pcm);
+ if(v->pcmret)_ogg_free(v->pcmret);
+ }
+
+ /* free mode lookups; these are actually vorbis_look_mapping structs */
+ if(ci){
+ for(i=0;i<ci->modes;i++){
+ int mapnum=ci->mode_param[i]->mapping;
+ int maptype=ci->map_type[mapnum];
+ if(b && b->mode)_mapping_P[maptype]->free_look(b->mode[i]);
+ }
+ }
+
+ if(b){
+ if(b->mode)_ogg_free(b->mode);
+ _ogg_free(b);
+ }
+
+ memset(v,0,sizeof(*v));
+ }
+}
+
+/* Unlike in analysis, the window is only partially applied for each
+ block. The time domain envelope is not yet handled at the point of
+ calling (as it relies on the previous block). */
+
+int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb){
+ vorbis_info *vi=v->vi;
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ int i,j;
+
+ if(v->pcm_current>v->pcm_returned && v->pcm_returned!=-1)return(OV_EINVAL);
+
+ v->lW=v->W;
+ v->W=vb->W;
+ v->nW=-1;
+
+ if(v->sequence+1 != vb->sequence)v->granulepos=-1; /* out of sequence;
+ lose count */
+
+ v->sequence=vb->sequence;
+
+ {
+ int n=ci->blocksizes[v->W]/2;
+ int n0=ci->blocksizes[0]/2;
+ int n1=ci->blocksizes[1]/2;
+
+ int thisCenter;
+ int prevCenter;
+
+ if(v->centerW){
+ thisCenter=n1;
+ prevCenter=0;
+ }else{
+ thisCenter=0;
+ prevCenter=n1;
+ }
+
+ /* v->pcm is now used like a two-stage double buffer. We don't want
+ to have to constantly shift *or* adjust memory usage. Don't
+ accept a new block until the old is shifted out */
+
+ /* overlap/add PCM */
+
+ for(j=0;j<vi->channels;j++){
+ /* the overlap/add section */
+ if(v->lW){
+ if(v->W){
+ /* large/large */
+ ogg_int32_t *pcm=v->pcm[j]+prevCenter;
+ ogg_int32_t *p=vb->pcm[j];
+ for(i=0;i<n1;i++)
+ pcm[i]+=p[i];
+ }else{
+ /* large/small */
+ ogg_int32_t *pcm=v->pcm[j]+prevCenter+n1/2-n0/2;
+ ogg_int32_t *p=vb->pcm[j];
+ for(i=0;i<n0;i++)
+ pcm[i]+=p[i];
+ }
+ }else{
+ if(v->W){
+ /* small/large */
+ ogg_int32_t *pcm=v->pcm[j]+prevCenter;
+ ogg_int32_t *p=vb->pcm[j]+n1/2-n0/2;
+ for(i=0;i<n0;i++)
+ pcm[i]+=p[i];
+ for(;i<n1/2+n0/2;i++)
+ pcm[i]=p[i];
+ }else{
+ /* small/small */
+ ogg_int32_t *pcm=v->pcm[j]+prevCenter;
+ ogg_int32_t *p=vb->pcm[j];
+ for(i=0;i<n0;i++)
+ pcm[i]+=p[i];
+ }
+ }
+
+ /* the copy section */
+ {
+ ogg_int32_t *pcm=v->pcm[j]+thisCenter;
+ ogg_int32_t *p=vb->pcm[j]+n;
+ for(i=0;i<n;i++)
+ pcm[i]=p[i];
+ }
+ }
+
+ if(v->centerW)
+ v->centerW=0;
+ else
+ v->centerW=n1;
+
+ /* deal with initial packet state; we do this using the explicit
+ pcm_returned==-1 flag otherwise we're sensitive to first block
+ being short or long */
+
+ if(v->pcm_returned==-1){
+ v->pcm_returned=thisCenter;
+ v->pcm_current=thisCenter;
+ }else{
+ v->pcm_returned=prevCenter;
+ v->pcm_current=prevCenter+
+ ci->blocksizes[v->lW]/4+
+ ci->blocksizes[v->W]/4;
+ }
+
+ /* track the frame number... This is for convenience, but also
+ making sure our last packet doesn't end with added padding. If
+ the last packet is partial, the number of samples we'll have to
+ return will be past the vb->granulepos.
+
+ This is not foolproof! It will be confused if we begin
+ decoding at the last page after a seek or hole. In that case,
+ we don't have a starting point to judge where the last frame
+ is. For this reason, vorbisfile will always try to make sure
+ it reads the last two marked pages in proper sequence */
+
+ if(v->granulepos==-1)
+ if(vb->granulepos==-1){
+ v->granulepos=0;
+ }else{
+ v->granulepos=vb->granulepos;
+ }
+ else{
+ v->granulepos+=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4;
+ if(vb->granulepos!=-1 && v->granulepos!=vb->granulepos){
+
+ if(v->granulepos>vb->granulepos){
+ long extra=v->granulepos-vb->granulepos;
+
+ if(vb->eofflag){
+ /* partial last frame. Strip the extra samples off */
+ v->pcm_current-=extra;
+ }else if(vb->sequence == 1){
+ /* ^^^ argh, this can be 1 from seeking! */
+
+
+ /* partial first frame. Discard extra leading samples */
+ v->pcm_returned+=extra;
+ if(v->pcm_returned>v->pcm_current)
+ v->pcm_returned=v->pcm_current;
+
+ }
+
+ }/* else{ Shouldn't happen *unless* the bitstream is out of
+ spec. Either way, believe the bitstream } */
+ v->granulepos=vb->granulepos;
+ }
+ }
+
+ /* Update, cleanup */
+
+ if(vb->eofflag)v->eofflag=1;
+ }
+
+ return(0);
+}
+
+/* pcm==NULL indicates we just want the pending samples, no more */
+int vorbis_synthesis_pcmout(vorbis_dsp_state *v,ogg_int32_t ***pcm){
+ vorbis_info *vi=v->vi;
+ if(v->pcm_returned>-1 && v->pcm_returned<v->pcm_current){
+ if(pcm){
+ int i;
+ for(i=0;i<vi->channels;i++)
+ v->pcmret[i]=v->pcm[i]+v->pcm_returned;
+ *pcm=v->pcmret;
+ }
+ return(v->pcm_current-v->pcm_returned);
+ }
+ return(0);
+}
+
+int vorbis_synthesis_read(vorbis_dsp_state *v,int bytes){
+ if(bytes && v->pcm_returned+bytes>v->pcm_current)return(OV_EINVAL);
+ v->pcm_returned+=bytes;
+ return(0);
+}
+
diff --git a/codebook.c b/codebook.c
new file mode 100644
index 0000000..02834c8
--- /dev/null
+++ b/codebook.c
@@ -0,0 +1,347 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: basic codebook pack/unpack/code/decode operations
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codebook.h"
+#include "misc.h"
+#include "os.h"
+
+/* unpacks a codebook from the packet buffer into the codebook struct,
+ readies the codebook auxiliary structures for decode *************/
+int vorbis_staticbook_unpack(oggpack_buffer *opb,static_codebook *s){
+ long i,j;
+ memset(s,0,sizeof(*s));
+
+ /* make sure alignment is correct */
+ if(oggpack_read(opb,24)!=0x564342)goto _eofout;
+
+ /* first the basic parameters */
+ s->dim=oggpack_read(opb,16);
+ s->entries=oggpack_read(opb,24);
+ if(s->entries==-1)goto _eofout;
+
+ /* codeword ordering.... length ordered or unordered? */
+ switch((int)oggpack_read(opb,1)){
+ case 0:
+ /* unordered */
+ s->lengthlist=(long *)_ogg_malloc(sizeof(*s->lengthlist)*s->entries);
+
+ /* allocated but unused entries? */
+ if(oggpack_read(opb,1)){
+ /* yes, unused entries */
+
+ for(i=0;i<s->entries;i++){
+ if(oggpack_read(opb,1)){
+ long num=oggpack_read(opb,5);
+ if(num==-1)goto _eofout;
+ s->lengthlist[i]=num+1;
+ }else
+ s->lengthlist[i]=0;
+ }
+ }else{
+ /* all entries used; no tagging */
+ for(i=0;i<s->entries;i++){
+ long num=oggpack_read(opb,5);
+ if(num==-1)goto _eofout;
+ s->lengthlist[i]=num+1;
+ }
+ }
+
+ break;
+ case 1:
+ /* ordered */
+ {
+ long length=oggpack_read(opb,5)+1;
+ s->lengthlist=(long *)_ogg_malloc(sizeof(*s->lengthlist)*s->entries);
+
+ for(i=0;i<s->entries;){
+ long num=oggpack_read(opb,_ilog(s->entries-i));
+ if(num==-1)goto _eofout;
+ for(j=0;j<num && i<s->entries;j++,i++)
+ s->lengthlist[i]=length;
+ length++;
+ }
+ }
+ break;
+ default:
+ /* EOF */
+ return(-1);
+ }
+
+ /* Do we have a mapping to unpack? */
+ switch((s->maptype=oggpack_read(opb,4))){
+ case 0:
+ /* no mapping */
+ break;
+ case 1: case 2:
+ /* implicitly populated value mapping */
+ /* explicitly populated value mapping */
+
+ s->q_min=oggpack_read(opb,32);
+ s->q_delta=oggpack_read(opb,32);
+ s->q_quant=oggpack_read(opb,4)+1;
+ s->q_sequencep=oggpack_read(opb,1);
+
+ {
+ int quantvals=0;
+ switch(s->maptype){
+ case 1:
+ quantvals=_book_maptype1_quantvals(s);
+ break;
+ case 2:
+ quantvals=s->entries*s->dim;
+ break;
+ }
+
+ /* quantized values */
+ s->quantlist=(long *)_ogg_malloc(sizeof(*s->quantlist)*quantvals);
+ for(i=0;i<quantvals;i++)
+ s->quantlist[i]=oggpack_read(opb,s->q_quant);
+
+ if(quantvals&&s->quantlist[quantvals-1]==-1)goto _eofout;
+ }
+ break;
+ default:
+ goto _errout;
+ }
+
+ /* all set */
+ return(0);
+
+ _errout:
+ _eofout:
+ vorbis_staticbook_clear(s);
+ return(-1);
+}
+
+/* the 'eliminate the decode tree' optimization actually requires the
+ codewords to be MSb first, not LSb. This is an annoying inelegancy
+ (and one of the first places where carefully thought out design
+ turned out to be wrong; Vorbis II and future Ogg codecs should go
+ to an MSb bitpacker), but not actually the huge hit it appears to
+ be. The first-stage decode table catches most words so that
+ bitreverse is not in the main execution path. */
+
+static ogg_uint32_t bitreverse(ogg_uint32_t x){
+ x= ((x>>16)&0x0000ffff) | ((x<<16)&0xffff0000);
+ x= ((x>> 8)&0x00ff00ff) | ((x<< 8)&0xff00ff00);
+ x= ((x>> 4)&0x0f0f0f0f) | ((x<< 4)&0xf0f0f0f0);
+ x= ((x>> 2)&0x33333333) | ((x<< 2)&0xcccccccc);
+ return((x>> 1)&0x55555555) | ((x<< 1)&0xaaaaaaaa);
+}
+
+static inline long decode_packed_entry_number(codebook *book,
+ oggpack_buffer *b){
+ int read=book->dec_maxlength;
+ long lo,hi;
+ long lok = oggpack_look(b,book->dec_firsttablen);
+
+ if (lok >= 0) {
+ long entry = book->dec_firsttable[lok];
+ if(entry&0x80000000UL){
+ lo=(entry>>15)&0x7fff;
+ hi=book->used_entries-(entry&0x7fff);
+ }else{
+ oggpack_adv(b, book->dec_codelengths[entry-1]);
+ return(entry-1);
+ }
+ }else{
+ lo=0;
+ hi=book->used_entries;
+ }
+
+ lok = oggpack_look(b, read);
+
+ while(lok<0 && read>1)
+ lok = oggpack_look(b, --read);
+ if(lok<0)return -1;
+
+ /* bisect search for the codeword in the ordered list */
+ {
+ ogg_uint32_t testword=bitreverse((ogg_uint32_t)lok);
+
+ while(hi-lo>1){
+ long p=(hi-lo)>>1;
+ long test=book->codelist[lo+p]>testword;
+ lo+=p&(test-1);
+ hi-=p&(-test);
+ }
+
+ if(book->dec_codelengths[lo]<=read){
+ oggpack_adv(b, book->dec_codelengths[lo]);
+ return(lo);
+ }
+ }
+
+ oggpack_adv(b, read);
+ return(-1);
+}
+
+/* Decode side is specced and easier, because we don't need to find
+ matches using different criteria; we simply read and map. There are
+ two things we need to do 'depending':
+
+ We may need to support interleave. We don't really, but it's
+ convenient to do it here rather than rebuild the vector later.
+
+ Cascades may be additive or multiplicitive; this is not inherent in
+ the codebook, but set in the code using the codebook. Like
+ interleaving, it's easiest to do it here.
+ addmul==0 -> declarative (set the value)
+ addmul==1 -> additive
+ addmul==2 -> multiplicitive */
+
+/* returns the [original, not compacted] entry number or -1 on eof *********/
+long vorbis_book_decode(codebook *book, oggpack_buffer *b){
+ long packed_entry=decode_packed_entry_number(book,b);
+ if(packed_entry>=0)
+ return(book->dec_index[packed_entry]);
+
+ /* if there's no dec_index, the codebook unpacking isn't collapsed */
+ return(packed_entry);
+}
+
+/* returns 0 on OK or -1 on eof *************************************/
+long vorbis_book_decodevs_add(codebook *book,ogg_int32_t *a,
+ oggpack_buffer *b,int n,int point){
+ int step=n/book->dim;
+ long *entry = (long *)alloca(sizeof(*entry)*step);
+ ogg_int32_t **t = (ogg_int32_t **)alloca(sizeof(*t)*step);
+ int i,j,o;
+ int shift=point-book->binarypoint;
+
+ if(shift>=0){
+ for (i = 0; i < step; i++) {
+ entry[i]=decode_packed_entry_number(book,b);
+ if(entry[i]==-1)return(-1);
+ t[i] = book->valuelist+entry[i]*book->dim;
+ }
+ for(i=0,o=0;i<book->dim;i++,o+=step)
+ for (j=0;j<step;j++)
+ a[o+j]+=t[j][i]>>shift;
+ }else{
+ for (i = 0; i < step; i++) {
+ entry[i]=decode_packed_entry_number(book,b);
+ if(entry[i]==-1)return(-1);
+ t[i] = book->valuelist+entry[i]*book->dim;
+ }
+ for(i=0,o=0;i<book->dim;i++,o+=step)
+ for (j=0;j<step;j++)
+ a[o+j]+=t[j][i]<<-shift;
+ }
+ return(0);
+}
+
+long vorbis_book_decodev_add(codebook *book,ogg_int32_t *a,
+ oggpack_buffer *b,int n,int point){
+ int i,j,entry;
+ ogg_int32_t *t;
+ int shift=point-book->binarypoint;
+
+ if(shift>=0){
+ for(i=0;i<n;){
+ entry = decode_packed_entry_number(book,b);
+ if(entry==-1)return(-1);
+ t = book->valuelist+entry*book->dim;
+ for (j=0;j<book->dim;)
+ a[i++]+=t[j++]>>shift;
+ }
+ }else{
+ for(i=0;i<n;){
+ entry = decode_packed_entry_number(book,b);
+ if(entry==-1)return(-1);
+ t = book->valuelist+entry*book->dim;
+ for (j=0;j<book->dim;)
+ a[i++]+=t[j++]<<-shift;
+ }
+ }
+ return(0);
+}
+
+long vorbis_book_decodev_set(codebook *book,ogg_int32_t *a,
+ oggpack_buffer *b,int n,int point){
+ int i,j,entry;
+ ogg_int32_t *t;
+ int shift=point-book->binarypoint;
+
+ if(shift>=0){
+
+ for(i=0;i<n;){
+ entry = decode_packed_entry_number(book,b);
+ if(entry==-1)return(-1);
+ t = book->valuelist+entry*book->dim;
+ for (j=0;j<book->dim;){
+ a[i++]=t[j++]>>shift;
+ }
+ }
+ }else{
+
+ for(i=0;i<n;){
+ entry = decode_packed_entry_number(book,b);
+ if(entry==-1)return(-1);
+ t = book->valuelist+entry*book->dim;
+ for (j=0;j<book->dim;){
+ a[i++]=t[j++]<<-shift;
+ }
+ }
+ }
+ return(0);
+}
+
+long vorbis_book_decodevv_add(codebook *book,ogg_int32_t **a,\
+ long offset,int ch,
+ oggpack_buffer *b,int n,int point){
+ long i,j,entry;
+ int chptr=0;
+ int shift=point-book->binarypoint;
+
+ if(shift>=0){
+
+ for(i=offset;i<offset+n;){
+ entry = decode_packed_entry_number(book,b);
+ if(entry==-1)return(-1);
+ {
+ const ogg_int32_t *t = book->valuelist+entry*book->dim;
+ for (j=0;j<book->dim;j++){
+ a[chptr++][i]+=t[j]>>shift;
+ if(chptr==ch){
+ chptr=0;
+ i++;
+ }
+ }
+ }
+ }
+ }else{
+
+ for(i=offset;i<offset+n;){
+ entry = decode_packed_entry_number(book,b);
+ if(entry==-1)return(-1);
+ {
+ const ogg_int32_t *t = book->valuelist+entry*book->dim;
+ for (j=0;j<book->dim;j++){
+ a[chptr++][i]+=t[j]<<-shift;
+ if(chptr==ch){
+ chptr=0;
+ i++;
+ }
+ }
+ }
+ }
+ }
+ return(0);
+}
diff --git a/codebook.h b/codebook.h
new file mode 100644
index 0000000..13e5a14
--- /dev/null
+++ b/codebook.h
@@ -0,0 +1,99 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: basic shared codebook operations
+
+ ********************************************************************/
+
+#ifndef _V_CODEBOOK_H_
+#define _V_CODEBOOK_H_
+
+#include "ogg.h"
+
+/* This structure encapsulates huffman and VQ style encoding books; it
+ doesn't do anything specific to either.
+
+ valuelist/quantlist are nonNULL (and q_* significant) only if
+ there's entry->value mapping to be done.
+
+ If encode-side mapping must be done (and thus the entry needs to be
+ hunted), the auxiliary encode pointer will point to a decision
+ tree. This is true of both VQ and huffman, but is mostly useful
+ with VQ.
+
+*/
+
+typedef struct static_codebook{
+ long dim; /* codebook dimensions (elements per vector) */
+ long entries; /* codebook entries */
+ long *lengthlist; /* codeword lengths in bits */
+
+ /* mapping ***************************************************************/
+ int maptype; /* 0=none
+ 1=implicitly populated values from map column
+ 2=listed arbitrary values */
+
+ /* The below does a linear, single monotonic sequence mapping. */
+ long q_min; /* packed 32 bit float; quant value 0 maps to minval */
+ long q_delta; /* packed 32 bit float; val 1 - val 0 == delta */
+ int q_quant; /* bits: 0 < quant <= 16 */
+ int q_sequencep; /* bitflag */
+
+ long *quantlist; /* map == 1: (int)(entries^(1/dim)) element column map
+ map == 2: list of dim*entries quantized entry vals
+ */
+} static_codebook;
+
+typedef struct codebook{
+ long dim; /* codebook dimensions (elements per vector) */
+ long entries; /* codebook entries */
+ long used_entries; /* populated codebook entries */
+
+ /* the below are ordered by bitreversed codeword and only used
+ entries are populated */
+ int binarypoint;
+ ogg_int32_t *valuelist; /* list of dim*entries actual entry values */
+ ogg_uint32_t *codelist; /* list of bitstream codewords for each entry */
+
+ int *dec_index;
+ char *dec_codelengths;
+ ogg_uint32_t *dec_firsttable;
+ int dec_firsttablen;
+ int dec_maxlength;
+
+ long q_min; /* packed 32 bit float; quant value 0 maps to minval */
+ long q_delta; /* packed 32 bit float; val 1 - val 0 == delta */
+
+} codebook;
+
+extern void vorbis_staticbook_clear(static_codebook *b);
+extern void vorbis_staticbook_destroy(static_codebook *b);
+extern int vorbis_book_init_decode(codebook *dest,const static_codebook *source);
+
+extern void vorbis_book_clear(codebook *b);
+extern long _book_maptype1_quantvals(const static_codebook *b);
+
+extern int vorbis_staticbook_unpack(oggpack_buffer *b,static_codebook *c);
+
+extern long vorbis_book_decode(codebook *book, oggpack_buffer *b);
+extern long vorbis_book_decodevs_add(codebook *book, ogg_int32_t *a,
+ oggpack_buffer *b,int n,int point);
+extern long vorbis_book_decodev_set(codebook *book, ogg_int32_t *a,
+ oggpack_buffer *b,int n,int point);
+extern long vorbis_book_decodev_add(codebook *book, ogg_int32_t *a,
+ oggpack_buffer *b,int n,int point);
+extern long vorbis_book_decodevv_add(codebook *book, ogg_int32_t **a,
+ long off,int ch,
+ oggpack_buffer *b,int n,int point);
+
+extern int _ilog(unsigned int v);
+
+
+#endif
diff --git a/codec_internal.h b/codec_internal.h
new file mode 100644
index 0000000..5580164
--- /dev/null
+++ b/codec_internal.h
@@ -0,0 +1,87 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: libvorbis codec headers
+
+ ********************************************************************/
+
+#ifndef _V_CODECI_H_
+#define _V_CODECI_H_
+
+#include "codebook.h"
+
+typedef void vorbis_look_mapping;
+typedef void vorbis_look_floor;
+typedef void vorbis_look_residue;
+typedef void vorbis_look_transform;
+
+/* mode ************************************************************/
+typedef struct {
+ int blockflag;
+ int windowtype;
+ int transformtype;
+ int mapping;
+} vorbis_info_mode;
+
+typedef void vorbis_info_floor;
+typedef void vorbis_info_residue;
+typedef void vorbis_info_mapping;
+
+typedef struct backend_lookup_state {
+ /* local lookup storage */
+ ogg_int32_t *window[2];
+
+ /* backend lookups are tied to the mode, not the backend or naked mapping */
+ int modebits;
+ vorbis_look_mapping **mode;
+
+} backend_lookup_state;
+
+/* codec_setup_info contains all the setup information specific to the
+ specific compression/decompression mode in progress (eg,
+ psychoacoustic settings, channel setup, options, codebook
+ etc).
+*********************************************************************/
+
+typedef struct codec_setup_info {
+
+ /* Vorbis supports only short and long blocks, but allows the
+ encoder to choose the sizes */
+
+ long blocksizes[2];
+
+ /* modes are the primary means of supporting on-the-fly different
+ blocksizes, different channel mappings (LR or M/A),
+ different residue backends, etc. Each mode consists of a
+ blocksize flag and a mapping (along with the mapping setup */
+
+ int modes;
+ int maps;
+ int times;
+ int floors;
+ int residues;
+ int books;
+
+ vorbis_info_mode *mode_param[64];
+ int map_type[64];
+ vorbis_info_mapping *map_param[64];
+ int time_type[64];
+ int floor_type[64];
+ vorbis_info_floor *floor_param[64];
+ int residue_type[64];
+ vorbis_info_residue *residue_param[64];
+ static_codebook *book_param[256];
+ codebook *fullbooks;
+
+ int passlimit[32]; /* iteration limit per couple/quant pass */
+ int coupling_passes;
+} codec_setup_info;
+
+#endif
diff --git a/config_types.h b/config_types.h
new file mode 100644
index 0000000..1171ecd
--- /dev/null
+++ b/config_types.h
@@ -0,0 +1,22 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: #ifdef jail to whip a few platforms into the UNIX ideal.
+
+ ********************************************************************/
+#ifndef _OS_CVTYPES_H
+#define _OS_CVTYPES_H
+
+typedef long long ogg_int64_t;
+typedef int ogg_int32_t;
+typedef unsigned int ogg_uint32_t;
+typedef short ogg_int16_t;
+
+#endif
diff --git a/floor0.c b/floor0.c
new file mode 100644
index 0000000..350e111
--- /dev/null
+++ b/floor0.c
@@ -0,0 +1,427 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: floor backend 0 implementation
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+#include "registry.h"
+#include "codebook.h"
+#include "misc.h"
+#include "os.h"
+
+#define LSP_FRACBITS 14
+
+typedef struct {
+ long n;
+ int ln;
+ int m;
+ int *linearmap;
+
+ vorbis_info_floor0 *vi;
+ ogg_int32_t *lsp_look;
+
+} vorbis_look_floor0;
+
+/*************** LSP decode ********************/
+
+#include "lsp_lookup.h"
+
+/* interpolated 1./sqrt(p) where .5 <= a < 1. (.100000... to .111111...) in
+ 16.16 format
+ returns in m.8 format */
+
+static long ADJUST_SQRT2[2]={8192,5792};
+static inline ogg_int32_t vorbis_invsqlook_i(long a,long e){
+ long i=(a&0x7fff)>>(INVSQ_LOOKUP_I_SHIFT-1);
+ long d=a&INVSQ_LOOKUP_I_MASK; /* 0.10 */
+ long val=INVSQ_LOOKUP_I[i]- /* 1.16 */
+ ((INVSQ_LOOKUP_IDel[i]*d)>>INVSQ_LOOKUP_I_SHIFT); /* result 1.16 */
+ val*=ADJUST_SQRT2[e&1];
+ e=(e>>1)+21;
+ return(val>>e);
+}
+
+/* interpolated lookup based fromdB function, domain -140dB to 0dB only */
+/* a is in n.12 format */
+static inline ogg_int32_t vorbis_fromdBlook_i(long a){
+ int i=(-a)>>(12-FROMdB2_SHIFT);
+ if(i<0) return 0x7fffffff;
+ if(i>=(FROMdB_LOOKUP_SZ<<FROMdB_SHIFT))return 0;
+
+ return FROMdB_LOOKUP[i>>FROMdB_SHIFT] * FROMdB2_LOOKUP[i&FROMdB2_MASK];
+}
+
+/* interpolated lookup based cos function, domain 0 to PI only */
+/* a is in 0.16 format, where 0==0, 2^^16-1==PI, return 0.14 */
+static inline ogg_int32_t vorbis_coslook_i(long a){
+ int i=a>>COS_LOOKUP_I_SHIFT;
+ int d=a&COS_LOOKUP_I_MASK;
+ return COS_LOOKUP_I[i]- ((d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>>
+ COS_LOOKUP_I_SHIFT);
+}
+
+/* interpolated lookup based cos function */
+/* a is in 0.16 format, where 0==0, 2^^16==PI, return .LSP_FRACBITS */
+static inline ogg_int32_t vorbis_coslook2_i(long a){
+ a=a&0x1ffff;
+
+ if(a>0x10000)a=0x20000-a;
+ {
+ int i=a>>COS_LOOKUP_I_SHIFT;
+ int d=a&COS_LOOKUP_I_MASK;
+ a=((COS_LOOKUP_I[i]<<COS_LOOKUP_I_SHIFT)-
+ d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>>
+ (COS_LOOKUP_I_SHIFT-LSP_FRACBITS+14);
+ }
+
+ return(a);
+}
+
+static int barklook[28]={
+ 0,100,200,301, 405,516,635,766,
+ 912,1077,1263,1476, 1720,2003,2333,2721,
+ 3184,3742,4428,5285, 6376,7791,9662,12181,
+ 15624,20397,27087,36554
+};
+
+/* used in init only; interpolate the long way */
+static inline ogg_int32_t toBARK(int n){
+ int i;
+ for(i=0;i<27;i++)
+ if(n>=barklook[i] && n<barklook[i+1])break;
+
+ if(i==27){
+ return 27<<15;
+ }else{
+ int gap=barklook[i+1]-barklook[i];
+ int del=n-barklook[i];
+
+ return((i<<15)+((del<<15)/gap));
+ }
+}
+
+static int MLOOP_1[64]={
+ 0,10,11,11, 12,12,12,12, 13,13,13,13, 13,13,13,13,
+ 14,14,14,14, 14,14,14,14, 14,14,14,14, 14,14,14,14,
+ 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+ 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+};
+
+static int MLOOP_2[64]={
+ 0,4,5,5, 6,6,6,6, 7,7,7,7, 7,7,7,7,
+ 8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8,
+ 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,
+};
+
+static int MLOOP_3[8]={0,1,2,2,3,3,3,3};
+
+void vorbis_lsp_to_curve(ogg_int32_t *curve,int *map,int n,int ln,
+ ogg_int32_t *lsp,int m,
+ ogg_int32_t amp,
+ ogg_int32_t ampoffset,
+ ogg_int32_t *icos){
+
+ /* 0 <= m < 256 */
+
+ /* set up for using all int later */
+ int i;
+ int ampoffseti=ampoffset*4096;
+ int ampi=amp;
+ ogg_int32_t *ilsp=(ogg_int32_t *)alloca(m*sizeof(*ilsp));
+ ogg_int32_t invsq=0x517cc2;
+ /* lsp is in 8.24, range 0 to PI; coslook wants it in .16 0 to 1*/
+ for(i=0;i<m;i++){
+ ogg_int32_t val=MULT32(lsp[i],invsq);
+
+ /* safeguard against a malicious stream */
+ if(val<0 || (val>>COS_LOOKUP_I_SHIFT)>=COS_LOOKUP_I_SZ){
+ memset(curve,0,sizeof(*curve)*n);
+ return;
+ }
+
+ ilsp[i]=vorbis_coslook_i(val);
+ }
+
+ i=0;
+ while(i<n){
+ int j,k=map[i];
+ ogg_uint32_t pi=46341; /* 2**-.5 in 0.16 */
+ ogg_uint32_t qi=46341;
+ ogg_int32_t qexp=0,shift;
+ ogg_int32_t wi=icos[k];
+
+#ifdef _V_LSP_MATH_ASM
+ lsp_loop_asm(&qi,&pi,&qexp,ilsp,wi,m);
+
+ pi=((pi*pi)>>16);
+ qi=((qi*qi)>>16);
+
+ if(m&1){
+ qexp= qexp*2-28*((m+1)>>1)+m;
+ pi*=(1<<14)-((wi*wi)>>14);
+ qi+=pi>>14;
+ }else{
+ qexp= qexp*2-13*m;
+
+ pi*=(1<<14)-wi;
+ qi*=(1<<14)+wi;
+
+ qi=(qi+pi)>>14;
+ }
+
+ if(qi&0xffff0000){ /* checks for 1.xxxxxxxxxxxxxxxx */
+ qi>>=1; qexp++;
+ }else
+ lsp_norm_asm(&qi,&qexp);
+
+#else
+
+ qi*=labs(ilsp[0]-wi);
+ pi*=labs(ilsp[1]-wi);
+
+ for(j=3;j<m;j+=2){
+ if(!(shift=MLOOP_1[(pi|qi)>>25]))
+ if(!(shift=MLOOP_2[(pi|qi)>>19]))
+ shift=MLOOP_3[(pi|qi)>>16];
+ qi=(qi>>shift)*labs(ilsp[j-1]-wi);
+ pi=(pi>>shift)*labs(ilsp[j]-wi);
+ qexp+=shift;
+ }
+ if(!(shift=MLOOP_1[(pi|qi)>>25]))
+ if(!(shift=MLOOP_2[(pi|qi)>>19]))
+ shift=MLOOP_3[(pi|qi)>>16];
+
+ /* pi,qi normalized collectively, both tracked using qexp */
+
+ if(m&1){
+ /* odd order filter; slightly assymetric */
+ /* the last coefficient */
+ qi=(qi>>shift)*labs(ilsp[j-1]-wi);
+ pi=(pi>>shift)<<14;
+ qexp+=shift;
+
+ if(!(shift=MLOOP_1[(pi|qi)>>25]))
+ if(!(shift=MLOOP_2[(pi|qi)>>19]))
+ shift=MLOOP_3[(pi|qi)>>16];
+
+ pi>>=shift;
+ qi>>=shift;
+ qexp+=shift-14*((m+1)>>1);
+
+ pi=((pi*pi)>>16);
+ qi=((qi*qi)>>16);
+ qexp=qexp*2+m;
+
+ pi*=(1<<14)-((wi*wi)>>14);
+ qi+=pi>>14;
+
+ }else{
+ /* even order filter; still symmetric */
+
+ /* p*=p(1-w), q*=q(1+w), let normalization drift because it isn't
+ worth tracking step by step */
+
+ pi>>=shift;
+ qi>>=shift;
+ qexp+=shift-7*m;
+
+ pi=((pi*pi)>>16);
+ qi=((qi*qi)>>16);
+ qexp=qexp*2+m;
+
+ pi*=(1<<14)-wi;
+ qi*=(1<<14)+wi;
+ qi=(qi+pi)>>14;
+
+ }
+
+
+ /* we've let the normalization drift because it wasn't important;
+ however, for the lookup, things must be normalized again. We
+ need at most one right shift or a number of left shifts */
+
+ if(qi&0xffff0000){ /* checks for 1.xxxxxxxxxxxxxxxx */
+ qi>>=1; qexp++;
+ }else
+ while(qi && !(qi&0x8000)){ /* checks for 0.0xxxxxxxxxxxxxxx or less*/
+ qi<<=1; qexp--;
+ }
+
+#endif
+
+ amp=vorbis_fromdBlook_i(ampi* /* n.4 */
+ vorbis_invsqlook_i(qi,qexp)-
+ /* m.8, m+n<=8 */
+ ampoffseti); /* 8.12[0] */
+
+ curve[i]= MULT31_SHIFT15(curve[i],amp);
+ while(map[++i]==k) curve[i]= MULT31_SHIFT15(curve[i],amp);
+ }
+}
+
+/*************** vorbis decode glue ************/
+
+static void floor0_free_info(vorbis_info_floor *i){
+ vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
+ if(info){
+ memset(info,0,sizeof(*info));
+ _ogg_free(info);
+ }
+}
+
+static void floor0_free_look(vorbis_look_floor *i){
+ vorbis_look_floor0 *look=(vorbis_look_floor0 *)i;
+ if(look){
+
+ if(look->linearmap)_ogg_free(look->linearmap);
+ if(look->lsp_look)_ogg_free(look->lsp_look);
+ memset(look,0,sizeof(*look));
+ _ogg_free(look);
+ }
+}
+
+static vorbis_info_floor *floor0_unpack (vorbis_info *vi,oggpack_buffer *opb){
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ int j;
+
+ vorbis_info_floor0 *info=(vorbis_info_floor0 *)_ogg_malloc(sizeof(*info));
+ info->order=oggpack_read(opb,8);
+ info->rate=oggpack_read(opb,16);
+ info->barkmap=oggpack_read(opb,16);
+ info->ampbits=oggpack_read(opb,6);
+ info->ampdB=oggpack_read(opb,8);
+ info->numbooks=oggpack_read(opb,4)+1;
+
+ if(info->order<1)goto err_out;
+ if(info->rate<1)goto err_out;
+ if(info->barkmap<1)goto err_out;
+ if(info->numbooks<1)goto err_out;
+
+ for(j=0;j<info->numbooks;j++){
+ info->books[j]=oggpack_read(opb,8);
+ if(info->books[j]<0 || info->books[j]>=ci->books)goto err_out;
+ }
+ return(info);
+
+ err_out:
+ floor0_free_info(info);
+ return(NULL);
+}
+
+/* initialize Bark scale and normalization lookups. We could do this
+ with static tables, but Vorbis allows a number of possible
+ combinations, so it's best to do it computationally.
+
+ The below is authoritative in terms of defining scale mapping.
+ Note that the scale depends on the sampling rate as well as the
+ linear block and mapping sizes */
+
+static vorbis_look_floor *floor0_look (vorbis_dsp_state *vd,vorbis_info_mode *mi,
+ vorbis_info_floor *i){
+ int j;
+ ogg_int32_t scale;
+ vorbis_info *vi=vd->vi;
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
+ vorbis_look_floor0 *look=(vorbis_look_floor0 *)_ogg_calloc(1,sizeof(*look));
+ look->m=info->order;
+ look->n=ci->blocksizes[mi->blockflag]/2;
+ look->ln=info->barkmap;
+ look->vi=info;
+
+ /* the mapping from a linear scale to a smaller bark scale is
+ straightforward. We do *not* make sure that the linear mapping
+ does not skip bark-scale bins; the decoder simply skips them and
+ the encoder may do what it wishes in filling them. They're
+ necessary in some mapping combinations to keep the scale spacing
+ accurate */
+ look->linearmap=(int *)_ogg_malloc((look->n+1)*sizeof(*look->linearmap));
+ for(j=0;j<look->n;j++){
+
+ int val=(look->ln*
+ ((toBARK(info->rate/2*j/look->n)<<11)/toBARK(info->rate/2)))>>11;
+
+ if(val>=look->ln)val=look->ln-1; /* guard against the approximation */
+ look->linearmap[j]=val;
+ }
+ look->linearmap[j]=-1;
+
+ look->lsp_look=(ogg_int32_t *)_ogg_malloc(look->ln*sizeof(*look->lsp_look));
+ for(j=0;j<look->ln;j++)
+ look->lsp_look[j]=vorbis_coslook2_i(0x10000*j/look->ln);
+
+ return look;
+}
+
+static void *floor0_inverse1(vorbis_block *vb,vorbis_look_floor *i){
+ vorbis_look_floor0 *look=(vorbis_look_floor0 *)i;
+ vorbis_info_floor0 *info=look->vi;
+ int j,k;
+
+ int ampraw=oggpack_read(&vb->opb,info->ampbits);
+ if(ampraw>0){ /* also handles the -1 out of data case */
+ long maxval=(1<<info->ampbits)-1;
+ int amp=((ampraw*info->ampdB)<<4)/maxval;
+ int booknum=oggpack_read(&vb->opb,_ilog(info->numbooks));
+
+ if(booknum!=-1 && booknum<info->numbooks){ /* be paranoid */
+ codec_setup_info *ci=(codec_setup_info *)vb->vd->vi->codec_setup;
+ codebook *b=ci->fullbooks+info->books[booknum];
+ ogg_int32_t last=0;
+ ogg_int32_t *lsp=(ogg_int32_t *)_vorbis_block_alloc(vb,sizeof(*lsp)*(look->m+1));
+
+ for(j=0;j<look->m;j+=b->dim)
+ if(vorbis_book_decodev_set(b,lsp+j,&vb->opb,b->dim,-24)==-1)goto eop;
+ for(j=0;j<look->m;){
+ for(k=0;k<b->dim;k++,j++)lsp[j]+=last;
+ last=lsp[j-1];
+ }
+
+ lsp[look->m]=amp;
+ return(lsp);
+ }
+ }
+ eop:
+ return(NULL);
+}
+
+static int floor0_inverse2(vorbis_block *vb,vorbis_look_floor *i,
+ void *memo,ogg_int32_t *out){
+ vorbis_look_floor0 *look=(vorbis_look_floor0 *)i;
+ vorbis_info_floor0 *info=look->vi;
+
+ if(memo){
+ ogg_int32_t *lsp=(ogg_int32_t *)memo;
+ ogg_int32_t amp=lsp[look->m];
+
+ /* take the coefficients back to a spectral envelope curve */
+ vorbis_lsp_to_curve(out,look->linearmap,look->n,look->ln,
+ lsp,look->m,amp,info->ampdB,look->lsp_look);
+ return(1);
+ }
+ memset(out,0,sizeof(*out)*look->n);
+ return(0);
+}
+
+/* export hooks */
+vorbis_func_floor floor0_exportbundle={
+ &floor0_unpack,&floor0_look,&floor0_free_info,
+ &floor0_free_look,&floor0_inverse1,&floor0_inverse2
+};
+
+
diff --git a/floor1.c b/floor1.c
new file mode 100644
index 0000000..088ab4a
--- /dev/null
+++ b/floor1.c
@@ -0,0 +1,437 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: floor backend 1 implementation
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+#include "registry.h"
+#include "codebook.h"
+#include "misc.h"
+
+#include <stdio.h>
+
+#define floor1_rangedB 140 /* floor 1 fixed at -140dB to 0dB range */
+
+typedef struct {
+ int sorted_index[VIF_POSIT+2];
+ int forward_index[VIF_POSIT+2];
+ int reverse_index[VIF_POSIT+2];
+
+ int hineighbor[VIF_POSIT];
+ int loneighbor[VIF_POSIT];
+ int posts;
+
+ int n;
+ int quant_q;
+ vorbis_info_floor1 *vi;
+
+} vorbis_look_floor1;
+
+/***********************************************/
+
+static void floor1_free_info(vorbis_info_floor *i){
+ vorbis_info_floor1 *info=(vorbis_info_floor1 *)i;
+ if(info){
+ memset(info,0,sizeof(*info));
+ _ogg_free(info);
+ }
+}
+
+static void floor1_free_look(vorbis_look_floor *i){
+ vorbis_look_floor1 *look=(vorbis_look_floor1 *)i;
+ if(look){
+ memset(look,0,sizeof(*look));
+ _ogg_free(look);
+ }
+}
+
+static int ilog(unsigned int v){
+ int ret=0;
+ while(v){
+ ret++;
+ v>>=1;
+ }
+ return(ret);
+}
+
+static vorbis_info_floor *floor1_unpack (vorbis_info *vi,oggpack_buffer *opb){
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ int j,k,count=0,maxclass=-1,rangebits;
+
+ vorbis_info_floor1 *info=(vorbis_info_floor1 *)_ogg_calloc(1,sizeof(*info));
+ /* read partitions */
+ info->partitions=oggpack_read(opb,5); /* only 0 to 31 legal */
+ for(j=0;j<info->partitions;j++){
+ info->partitionclass[j]=oggpack_read(opb,4); /* only 0 to 15 legal */
+ if(maxclass<info->partitionclass[j])maxclass=info->partitionclass[j];
+ }
+
+ /* read partition classes */
+ for(j=0;j<maxclass+1;j++){
+ info->class_dim[j]=oggpack_read(opb,3)+1; /* 1 to 8 */
+ info->class_subs[j]=oggpack_read(opb,2); /* 0,1,2,3 bits */
+ if(info->class_subs[j]<0)
+ goto err_out;
+ if(info->class_subs[j])info->class_book[j]=oggpack_read(opb,8);
+ if(info->class_book[j]<0 || info->class_book[j]>=ci->books)
+ goto err_out;
+ for(k=0;k<(1<<info->class_subs[j]);k++){
+ info->class_subbook[j][k]=oggpack_read(opb,8)-1;
+ if(info->class_subbook[j][k]<-1 || info->class_subbook[j][k]>=ci->books)
+ goto err_out;
+ }
+ }
+
+ /* read the post list */
+ info->mult=oggpack_read(opb,2)+1; /* only 1,2,3,4 legal now */
+ rangebits=oggpack_read(opb,4);
+
+ for(j=0,k=0;j<info->partitions;j++){
+ count+=info->class_dim[info->partitionclass[j]];
+ for(;k<count;k++){
+ int t=info->postlist[k+2]=oggpack_read(opb,rangebits);
+ if(t<0 || t>=(1<<rangebits))
+ goto err_out;
+ }
+ }
+ info->postlist[0]=0;
+ info->postlist[1]=1<<rangebits;
+
+ return(info);
+
+ err_out:
+ floor1_free_info(info);
+ return(NULL);
+}
+
+static int icomp(const void *a,const void *b){
+ return(**(int **)a-**(int **)b);
+}
+
+static vorbis_look_floor *floor1_look(vorbis_dsp_state *vd,vorbis_info_mode *mi,
+ vorbis_info_floor *in){
+
+ int *sortpointer[VIF_POSIT+2];
+ vorbis_info_floor1 *info=(vorbis_info_floor1 *)in;
+ vorbis_look_floor1 *look=(vorbis_look_floor1 *)_ogg_calloc(1,sizeof(*look));
+ int i,j,n=0;
+
+ look->vi=info;
+ look->n=info->postlist[1];
+
+ /* we drop each position value in-between already decoded values,
+ and use linear interpolation to predict each new value past the
+ edges. The positions are read in the order of the position
+ list... we precompute the bounding positions in the lookup. Of
+ course, the neighbors can change (if a position is declined), but
+ this is an initial mapping */
+
+ for(i=0;i<info->partitions;i++)n+=info->class_dim[info->partitionclass[i]];
+ n+=2;
+ look->posts=n;
+
+ /* also store a sorted position index */
+ for(i=0;i<n;i++)sortpointer[i]=info->postlist+i;
+ qsort(sortpointer,n,sizeof(*sortpointer),icomp);
+
+ /* points from sort order back to range number */
+ for(i=0;i<n;i++)look->forward_index[i]=sortpointer[i]-info->postlist;
+ /* points from range order to sorted position */
+ for(i=0;i<n;i++)look->reverse_index[look->forward_index[i]]=i;
+ /* we actually need the post values too */
+ for(i=0;i<n;i++)look->sorted_index[i]=info->postlist[look->forward_index[i]];
+
+ /* quantize values to multiplier spec */
+ switch(info->mult){
+ case 1: /* 1024 -> 256 */
+ look->quant_q=256;
+ break;
+ case 2: /* 1024 -> 128 */
+ look->quant_q=128;
+ break;
+ case 3: /* 1024 -> 86 */
+ look->quant_q=86;
+ break;
+ case 4: /* 1024 -> 64 */
+ look->quant_q=64;
+ break;
+ }
+
+ /* discover our neighbors for decode where we don't use fit flags
+ (that would push the neighbors outward) */
+ for(i=0;i<n-2;i++){
+ int lo=0;
+ int hi=1;
+ int lx=0;
+ int hx=look->n;
+ int currentx=info->postlist[i+2];
+ for(j=0;j<i+2;j++){
+ int x=info->postlist[j];
+ if(x>lx && x<currentx){
+ lo=j;
+ lx=x;
+ }
+ if(x<hx && x>currentx){
+ hi=j;
+ hx=x;
+ }
+ }
+ look->loneighbor[i]=lo;
+ look->hineighbor[i]=hi;
+ }
+
+ return(look);
+}
+
+static int render_point(int x0,int x1,int y0,int y1,int x){
+ y0&=0x7fff; /* mask off flag */
+ y1&=0x7fff;
+
+ {
+ int dy=y1-y0;
+ int adx=x1-x0;
+ int ady=abs(dy);
+ int err=ady*(x-x0);
+
+ int off=err/adx;
+ if(dy<0)return(y0-off);
+ return(y0+off);
+ }
+}
+
+static ogg_int32_t FLOOR_fromdB_LOOKUP[256]={
+ 0x000000e5, 0x000000f4, 0x00000103, 0x00000114,
+ 0x00000126, 0x00000139, 0x0000014e, 0x00000163,
+ 0x0000017a, 0x00000193, 0x000001ad, 0x000001c9,
+ 0x000001e7, 0x00000206, 0x00000228, 0x0000024c,
+ 0x00000272, 0x0000029b, 0x000002c6, 0x000002f4,
+ 0x00000326, 0x0000035a, 0x00000392, 0x000003cd,
+ 0x0000040c, 0x00000450, 0x00000497, 0x000004e4,
+ 0x00000535, 0x0000058c, 0x000005e8, 0x0000064a,
+ 0x000006b3, 0x00000722, 0x00000799, 0x00000818,
+ 0x0000089e, 0x0000092e, 0x000009c6, 0x00000a69,
+ 0x00000b16, 0x00000bcf, 0x00000c93, 0x00000d64,
+ 0x00000e43, 0x00000f30, 0x0000102d, 0x0000113a,
+ 0x00001258, 0x0000138a, 0x000014cf, 0x00001629,
+ 0x0000179a, 0x00001922, 0x00001ac4, 0x00001c82,
+ 0x00001e5c, 0x00002055, 0x0000226f, 0x000024ac,
+ 0x0000270e, 0x00002997, 0x00002c4b, 0x00002f2c,
+ 0x0000323d, 0x00003581, 0x000038fb, 0x00003caf,
+ 0x000040a0, 0x000044d3, 0x0000494c, 0x00004e10,
+ 0x00005323, 0x0000588a, 0x00005e4b, 0x0000646b,
+ 0x00006af2, 0x000071e5, 0x0000794c, 0x0000812e,
+ 0x00008993, 0x00009283, 0x00009c09, 0x0000a62d,
+ 0x0000b0f9, 0x0000bc79, 0x0000c8b9, 0x0000d5c4,
+ 0x0000e3a9, 0x0000f274, 0x00010235, 0x000112fd,
+ 0x000124dc, 0x000137e4, 0x00014c29, 0x000161bf,
+ 0x000178bc, 0x00019137, 0x0001ab4a, 0x0001c70e,
+ 0x0001e4a1, 0x0002041f, 0x000225aa, 0x00024962,
+ 0x00026f6d, 0x000297f0, 0x0002c316, 0x0002f109,
+ 0x000321f9, 0x00035616, 0x00038d97, 0x0003c8b4,
+ 0x000407a7, 0x00044ab2, 0x00049218, 0x0004de23,
+ 0x00052f1e, 0x0005855c, 0x0005e135, 0x00064306,
+ 0x0006ab33, 0x00071a24, 0x0007904b, 0x00080e20,
+ 0x00089422, 0x000922da, 0x0009bad8, 0x000a5cb6,
+ 0x000b091a, 0x000bc0b1, 0x000c8436, 0x000d5471,
+ 0x000e3233, 0x000f1e5f, 0x001019e4, 0x001125c1,
+ 0x00124306, 0x001372d5, 0x0014b663, 0x00160ef7,
+ 0x00177df0, 0x001904c1, 0x001aa4f9, 0x001c603d,
+ 0x001e384f, 0x00202f0f, 0x0022467a, 0x002480b1,
+ 0x0026dff7, 0x002966b3, 0x002c1776, 0x002ef4fc,
+ 0x0032022d, 0x00354222, 0x0038b828, 0x003c67c2,
+ 0x004054ae, 0x004482e8, 0x0048f6af, 0x004db488,
+ 0x0052c142, 0x005821ff, 0x005ddc33, 0x0063f5b0,
+ 0x006a74a7, 0x00715faf, 0x0078bdce, 0x0080967f,
+ 0x0088f1ba, 0x0091d7f9, 0x009b5247, 0x00a56a41,
+ 0x00b02a27, 0x00bb9ce2, 0x00c7ce12, 0x00d4ca17,
+ 0x00e29e20, 0x00f15835, 0x0101074b, 0x0111bb4e,
+ 0x01238531, 0x01367704, 0x014aa402, 0x016020a7,
+ 0x017702c3, 0x018f6190, 0x01a955cb, 0x01c4f9cf,
+ 0x01e269a8, 0x0201c33b, 0x0223265a, 0x0246b4ea,
+ 0x026c9302, 0x0294e716, 0x02bfda13, 0x02ed9793,
+ 0x031e4e09, 0x03522ee4, 0x03896ed0, 0x03c445e2,
+ 0x0402efd6, 0x0445ac4b, 0x048cbefc, 0x04d87013,
+ 0x05290c67, 0x057ee5ca, 0x05da5364, 0x063bb204,
+ 0x06a36485, 0x0711d42b, 0x0787710e, 0x0804b299,
+ 0x088a17ef, 0x0918287e, 0x09af747c, 0x0a50957e,
+ 0x0afc2f19, 0x0bb2ef7f, 0x0c759034, 0x0d44d6ca,
+ 0x0e2195bc, 0x0f0cad0d, 0x10070b62, 0x1111aeea,
+ 0x122da66c, 0x135c120f, 0x149e24d9, 0x15f525b1,
+ 0x176270e3, 0x18e7794b, 0x1a85c9ae, 0x1c3f06d1,
+ 0x1e14f07d, 0x200963d7, 0x221e5ccd, 0x2455f870,
+ 0x26b2770b, 0x29363e2b, 0x2be3db5c, 0x2ebe06b6,
+ 0x31c7a55b, 0x3503ccd4, 0x3875c5aa, 0x3c210f44,
+ 0x4009632b, 0x4432b8cf, 0x48a149bc, 0x4d59959e,
+ 0x52606733, 0x57bad899, 0x5d6e593a, 0x6380b298,
+ 0x69f80e9a, 0x70dafda8, 0x78307d76, 0x7fffffff,
+};
+
+static void render_line(int x0,int x1,int y0,int y1,ogg_int32_t *d){
+ int dy=y1-y0;
+ int adx=x1-x0;
+ int ady=abs(dy);
+ int base=dy/adx;
+ int sy=(dy<0?base-1:base+1);
+ int x=x0;
+ int y=y0;
+ int err=0;
+
+ ady-=abs(base*adx);
+
+ d[x]= MULT31_SHIFT15(d[x],FLOOR_fromdB_LOOKUP[y]);
+
+ while(++x<x1){
+ err=err+ady;
+ if(err>=adx){
+ err-=adx;
+ y+=sy;
+ }else{
+ y+=base;
+ }
+ d[x]= MULT31_SHIFT15(d[x],FLOOR_fromdB_LOOKUP[y]);
+ }
+}
+
+static void *floor1_inverse1(vorbis_block *vb,vorbis_look_floor *in){
+ vorbis_look_floor1 *look=(vorbis_look_floor1 *)in;
+ vorbis_info_floor1 *info=look->vi;
+ codec_setup_info *ci=(codec_setup_info *)vb->vd->vi->codec_setup;
+
+ int i,j,k;
+ codebook *books=ci->fullbooks;
+
+ /* unpack wrapped/predicted values from stream */
+ if(oggpack_read(&vb->opb,1)==1){
+ int *fit_value=(int *)_vorbis_block_alloc(vb,(look->posts)*sizeof(*fit_value));
+
+ fit_value[0]=oggpack_read(&vb->opb,ilog(look->quant_q-1));
+ fit_value[1]=oggpack_read(&vb->opb,ilog(look->quant_q-1));
+
+ /* partition by partition */
+ /* partition by partition */
+ for(i=0,j=2;i<info->partitions;i++){
+ int classv=info->partitionclass[i];
+ int cdim=info->class_dim[classv];
+ int csubbits=info->class_subs[classv];
+ int csub=1<<csubbits;
+ int cval=0;
+
+ /* decode the partition's first stage cascade value */
+ if(csubbits){
+ cval=vorbis_book_decode(books+info->class_book[classv],&vb->opb);
+
+ if(cval==-1)goto eop;
+ }
+
+ for(k=0;k<cdim;k++){
+ int book=info->class_subbook[classv][cval&(csub-1)];
+ cval>>=csubbits;
+ if(book>=0){
+ if((fit_value[j+k]=vorbis_book_decode(books+book,&vb->opb))==-1)
+ goto eop;
+ }else{
+ fit_value[j+k]=0;
+ }
+ }
+ j+=cdim;
+ }
+
+ /* unwrap positive values and reconsitute via linear interpolation */
+ for(i=2;i<look->posts;i++){
+ int predicted=render_point(info->postlist[look->loneighbor[i-2]],
+ info->postlist[look->hineighbor[i-2]],
+ fit_value[look->loneighbor[i-2]],
+ fit_value[look->hineighbor[i-2]],
+ info->postlist[i]);
+ int hiroom=look->quant_q-predicted;
+ int loroom=predicted;
+ int room=(hiroom<loroom?hiroom:loroom)<<1;
+ int val=fit_value[i];
+
+ if(val){
+ if(val>=room){
+ if(hiroom>loroom){
+ val = val-loroom;
+ }else{
+ val = -1-(val-hiroom);
+ }
+ }else{
+ if(val&1){
+ val= -((val+1)>>1);
+ }else{
+ val>>=1;
+ }
+ }
+
+ fit_value[i]=val+predicted;
+ fit_value[look->loneighbor[i-2]]&=0x7fff;
+ fit_value[look->hineighbor[i-2]]&=0x7fff;
+
+ }else{
+ fit_value[i]=predicted|0x8000;
+ }
+
+ }
+
+ return(fit_value);
+ }
+ eop:
+ return(NULL);
+}
+
+static int floor1_inverse2(vorbis_block *vb,vorbis_look_floor *in,void *memo,
+ ogg_int32_t *out){
+ vorbis_look_floor1 *look=(vorbis_look_floor1 *)in;
+ vorbis_info_floor1 *info=look->vi;
+
+ codec_setup_info *ci=(codec_setup_info *)vb->vd->vi->codec_setup;
+ int n=ci->blocksizes[vb->W]/2;
+ int j;
+
+ if(memo){
+ /* render the lines */
+ int *fit_value=(int *)memo;
+ int hx=0;
+ int lx=0;
+ int ly=fit_value[0]*info->mult;
+ for(j=1;j<look->posts;j++){
+ int current=look->forward_index[j];
+ int hy=fit_value[current]&0x7fff;
+ if(hy==fit_value[current]){
+
+ hy*=info->mult;
+ hx=info->postlist[current];
+
+ render_line(lx,hx,ly,hy,out);
+
+ lx=hx;
+ ly=hy;
+ }
+ }
+ for(j=hx;j<n;j++)out[j]*=ly; /* be certain */
+ return(1);
+ }
+ memset(out,0,sizeof(*out)*n);
+ return(0);
+}
+
+/* export hooks */
+vorbis_func_floor floor1_exportbundle={
+ &floor1_unpack,&floor1_look,&floor1_free_info,
+ &floor1_free_look,&floor1_inverse1,&floor1_inverse2
+};
+
diff --git a/framing.c b/framing.c
new file mode 100644
index 0000000..6b96501
--- /dev/null
+++ b/framing.c
@@ -0,0 +1,672 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: code raw [Vorbis] packets into framed OggSquish stream and
+ decode Ogg streams back into raw packets
+
+ note: The CRC code is directly derived from public domain code by
+ Ross Williams (ross@guest.adelaide.edu.au). See docs/framing.html
+ for details.
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include "ogg.h"
+
+/* A complete description of Ogg framing exists in docs/framing.html */
+
+int ogg_page_version(ogg_page *og){
+ return((int)(og->header[4]));
+}
+
+int ogg_page_continued(ogg_page *og){
+ return((int)(og->header[5]&0x01));
+}
+
+int ogg_page_bos(ogg_page *og){
+ return((int)(og->header[5]&0x02));
+}
+
+int ogg_page_eos(ogg_page *og){
+ return((int)(og->header[5]&0x04));
+}
+
+ogg_int64_t ogg_page_granulepos(ogg_page *og){
+ unsigned char *page=og->header;
+ ogg_int64_t granulepos=page[13]&(0xff);
+ granulepos= (granulepos<<8)|(page[12]&0xff);
+ granulepos= (granulepos<<8)|(page[11]&0xff);
+ granulepos= (granulepos<<8)|(page[10]&0xff);
+ granulepos= (granulepos<<8)|(page[9]&0xff);
+ granulepos= (granulepos<<8)|(page[8]&0xff);
+ granulepos= (granulepos<<8)|(page[7]&0xff);
+ granulepos= (granulepos<<8)|(page[6]&0xff);
+ return(granulepos);
+}
+
+int ogg_page_serialno(ogg_page *og){
+ return(og->header[14] |
+ (og->header[15]<<8) |
+ (og->header[16]<<16) |
+ (og->header[17]<<24));
+}
+
+long ogg_page_pageno(ogg_page *og){
+ return(og->header[18] |
+ (og->header[19]<<8) |
+ (og->header[20]<<16) |
+ (og->header[21]<<24));
+}
+
+
+
+/* returns the number of packets that are completed on this page (if
+ the leading packet is begun on a previous page, but ends on this
+ page, it's counted */
+
+/* NOTE:
+If a page consists of a packet begun on a previous page, and a new
+packet begun (but not completed) on this page, the return will be:
+ ogg_page_packets(page) ==1,
+ ogg_page_continued(page) !=0
+
+If a page happens to be a single packet that was begun on a
+previous page, and spans to the next page (in the case of a three or
+more page packet), the return will be:
+ ogg_page_packets(page) ==0,
+ ogg_page_continued(page) !=0
+*/
+
+int ogg_page_packets(ogg_page *og){
+ int i,n=og->header[26],count=0;
+ for(i=0;i<n;i++)
+ if(og->header[27+i]<255)count++;
+ return(count);
+}
+
+static ogg_uint32_t crc_lookup[256]={
+ 0x00000000,0x04c11db7,0x09823b6e,0x0d4326d9,
+ 0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005,
+ 0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61,
+ 0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd,
+ 0x4c11db70,0x48d0c6c7,0x4593e01e,0x4152fda9,
+ 0x5f15adac,0x5bd4b01b,0x569796c2,0x52568b75,
+ 0x6a1936c8,0x6ed82b7f,0x639b0da6,0x675a1011,
+ 0x791d4014,0x7ddc5da3,0x709f7b7a,0x745e66cd,
+ 0x9823b6e0,0x9ce2ab57,0x91a18d8e,0x95609039,
+ 0x8b27c03c,0x8fe6dd8b,0x82a5fb52,0x8664e6e5,
+ 0xbe2b5b58,0xbaea46ef,0xb7a96036,0xb3687d81,
+ 0xad2f2d84,0xa9ee3033,0xa4ad16ea,0xa06c0b5d,
+ 0xd4326d90,0xd0f37027,0xddb056fe,0xd9714b49,
+ 0xc7361b4c,0xc3f706fb,0xceb42022,0xca753d95,
+ 0xf23a8028,0xf6fb9d9f,0xfbb8bb46,0xff79a6f1,
+ 0xe13ef6f4,0xe5ffeb43,0xe8bccd9a,0xec7dd02d,
+ 0x34867077,0x30476dc0,0x3d044b19,0x39c556ae,
+ 0x278206ab,0x23431b1c,0x2e003dc5,0x2ac12072,
+ 0x128e9dcf,0x164f8078,0x1b0ca6a1,0x1fcdbb16,
+ 0x018aeb13,0x054bf6a4,0x0808d07d,0x0cc9cdca,
+ 0x7897ab07,0x7c56b6b0,0x71159069,0x75d48dde,
+ 0x6b93dddb,0x6f52c06c,0x6211e6b5,0x66d0fb02,
+ 0x5e9f46bf,0x5a5e5b08,0x571d7dd1,0x53dc6066,
+ 0x4d9b3063,0x495a2dd4,0x44190b0d,0x40d816ba,
+ 0xaca5c697,0xa864db20,0xa527fdf9,0xa1e6e04e,
+ 0xbfa1b04b,0xbb60adfc,0xb6238b25,0xb2e29692,
+ 0x8aad2b2f,0x8e6c3698,0x832f1041,0x87ee0df6,
+ 0x99a95df3,0x9d684044,0x902b669d,0x94ea7b2a,
+ 0xe0b41de7,0xe4750050,0xe9362689,0xedf73b3e,
+ 0xf3b06b3b,0xf771768c,0xfa325055,0xfef34de2,
+ 0xc6bcf05f,0xc27dede8,0xcf3ecb31,0xcbffd686,
+ 0xd5b88683,0xd1799b34,0xdc3abded,0xd8fba05a,
+ 0x690ce0ee,0x6dcdfd59,0x608edb80,0x644fc637,
+ 0x7a089632,0x7ec98b85,0x738aad5c,0x774bb0eb,
+ 0x4f040d56,0x4bc510e1,0x46863638,0x42472b8f,
+ 0x5c007b8a,0x58c1663d,0x558240e4,0x51435d53,
+ 0x251d3b9e,0x21dc2629,0x2c9f00f0,0x285e1d47,
+ 0x36194d42,0x32d850f5,0x3f9b762c,0x3b5a6b9b,
+ 0x0315d626,0x07d4cb91,0x0a97ed48,0x0e56f0ff,
+ 0x1011a0fa,0x14d0bd4d,0x19939b94,0x1d528623,
+ 0xf12f560e,0xf5ee4bb9,0xf8ad6d60,0xfc6c70d7,
+ 0xe22b20d2,0xe6ea3d65,0xeba91bbc,0xef68060b,
+ 0xd727bbb6,0xd3e6a601,0xdea580d8,0xda649d6f,
+ 0xc423cd6a,0xc0e2d0dd,0xcda1f604,0xc960ebb3,
+ 0xbd3e8d7e,0xb9ff90c9,0xb4bcb610,0xb07daba7,
+ 0xae3afba2,0xaafbe615,0xa7b8c0cc,0xa379dd7b,
+ 0x9b3660c6,0x9ff77d71,0x92b45ba8,0x9675461f,
+ 0x8832161a,0x8cf30bad,0x81b02d74,0x857130c3,
+ 0x5d8a9099,0x594b8d2e,0x5408abf7,0x50c9b640,
+ 0x4e8ee645,0x4a4ffbf2,0x470cdd2b,0x43cdc09c,
+ 0x7b827d21,0x7f436096,0x7200464f,0x76c15bf8,
+ 0x68860bfd,0x6c47164a,0x61043093,0x65c52d24,
+ 0x119b4be9,0x155a565e,0x18197087,0x1cd86d30,
+ 0x029f3d35,0x065e2082,0x0b1d065b,0x0fdc1bec,
+ 0x3793a651,0x3352bbe6,0x3e119d3f,0x3ad08088,
+ 0x2497d08d,0x2056cd3a,0x2d15ebe3,0x29d4f654,
+ 0xc5a92679,0xc1683bce,0xcc2b1d17,0xc8ea00a0,
+ 0xd6ad50a5,0xd26c4d12,0xdf2f6bcb,0xdbee767c,
+ 0xe3a1cbc1,0xe760d676,0xea23f0af,0xeee2ed18,
+ 0xf0a5bd1d,0xf464a0aa,0xf9278673,0xfde69bc4,
+ 0x89b8fd09,0x8d79e0be,0x803ac667,0x84fbdbd0,
+ 0x9abc8bd5,0x9e7d9662,0x933eb0bb,0x97ffad0c,
+ 0xafb010b1,0xab710d06,0xa6322bdf,0xa2f33668,
+ 0xbcb4666d,0xb8757bda,0xb5365d03,0xb1f740b4};
+
+/* init the encode/decode logical stream state */
+
+int ogg_stream_init(ogg_stream_state *os,int serialno){
+ if(os){
+ memset(os,0,sizeof(*os));
+ os->body_storage=16*1024;
+ os->body_data=(unsigned char *)_ogg_malloc(os->body_storage*sizeof(*os->body_data));
+
+ os->lacing_storage=1024;
+ os->lacing_vals=(int *)_ogg_malloc(os->lacing_storage*sizeof(*os->lacing_vals));
+ os->granule_vals=(ogg_int64_t *)_ogg_malloc(os->lacing_storage*sizeof(*os->granule_vals));
+
+ os->serialno=serialno;
+
+ return(0);
+ }
+ return(-1);
+}
+
+/* _clear does not free os, only the non-flat storage within */
+int ogg_stream_clear(ogg_stream_state *os){
+ if(os){
+ if(os->body_data)_ogg_free(os->body_data);
+ if(os->lacing_vals)_ogg_free(os->lacing_vals);
+ if(os->granule_vals)_ogg_free(os->granule_vals);
+
+ memset(os,0,sizeof(*os));
+ }
+ return(0);
+}
+
+int ogg_stream_destroy(ogg_stream_state *os){
+ if(os){
+ ogg_stream_clear(os);
+ _ogg_free(os);
+ }
+ return(0);
+}
+
+/* Helpers for ogg_stream_encode; this keeps the structure and
+ what's happening fairly clear */
+
+static void _os_body_expand(ogg_stream_state *os,int needed){
+ if(os->body_storage<=os->body_fill+needed){
+ os->body_storage+=(needed+1024);
+ os->body_data=(unsigned char *)_ogg_realloc(os->body_data,os->body_storage*sizeof(*os->body_data));
+ }
+}
+
+static void _os_lacing_expand(ogg_stream_state *os,int needed){
+ if(os->lacing_storage<=os->lacing_fill+needed){
+ os->lacing_storage+=(needed+32);
+ os->lacing_vals=(int *)_ogg_realloc(os->lacing_vals,os->lacing_storage*sizeof(*os->lacing_vals));
+ os->granule_vals=(ogg_int64_t *)_ogg_realloc(os->granule_vals,os->lacing_storage*sizeof(*os->granule_vals));
+ }
+}
+
+/* checksum the page */
+/* Direct table CRC; note that this will be faster in the future if we
+ perform the checksum silmultaneously with other copies */
+
+void ogg_page_checksum_set(ogg_page *og){
+ if(og){
+ ogg_uint32_t crc_reg=0;
+ int i;
+
+ /* safety; needed for API behavior, but not framing code */
+ og->header[22]=0;
+ og->header[23]=0;
+ og->header[24]=0;
+ og->header[25]=0;
+
+ for(i=0;i<og->header_len;i++)
+ crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->header[i]];
+ for(i=0;i<og->body_len;i++)
+ crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->body[i]];
+
+ og->header[22]=crc_reg&0xff;
+ og->header[23]=(crc_reg>>8)&0xff;
+ og->header[24]=(crc_reg>>16)&0xff;
+ og->header[25]=(crc_reg>>24)&0xff;
+ }
+}
+
+/* DECODING PRIMITIVES: packet streaming layer **********************/
+
+/* This has two layers to place more of the multi-serialno and paging
+ control in the application's hands. First, we expose a data buffer
+ using ogg_sync_buffer(). The app either copies into the
+ buffer, or passes it directly to read(), etc. We then call
+ ogg_sync_wrote() to tell how many bytes we just added.
+
+ Pages are returned (pointers into the buffer in ogg_sync_state)
+ by ogg_sync_pageout(). The page is then submitted to
+ ogg_stream_pagein() along with the appropriate
+ ogg_stream_state* (ie, matching serialno). We then get raw
+ packets out calling ogg_stream_packetout() with a
+ ogg_stream_state. See the 'frame-prog.txt' docs for details and
+ example code. */
+
+/* initialize the struct to a known state */
+int ogg_sync_init(ogg_sync_state *oy){
+ if(oy){
+ memset(oy,0,sizeof(*oy));
+ }
+ return(0);
+}
+
+/* clear non-flat storage within */
+int ogg_sync_clear(ogg_sync_state *oy){
+ if(oy){
+ if(oy->data)_ogg_free(oy->data);
+ ogg_sync_init(oy);
+ }
+ return(0);
+}
+
+int ogg_sync_destroy(ogg_sync_state *oy){
+ if(oy){
+ ogg_sync_clear(oy);
+ _ogg_free(oy);
+ }
+ return(0);
+}
+
+char *ogg_sync_buffer(ogg_sync_state *oy, long size){
+
+ /* first, clear out any space that has been previously returned */
+ if(oy->returned>8192){
+ oy->fill-=oy->returned;
+ if(oy->fill>0)
+ memmove(oy->data,oy->data+oy->returned,oy->fill);
+ oy->returned=0;
+ }
+
+ if(size>oy->storage-oy->fill){
+ /* We need to extend the internal buffer */
+ long newsize=size+oy->fill+4096; /* an extra page to be nice */
+
+ if(oy->data)
+ oy->data=(unsigned char *)_ogg_realloc(oy->data,newsize);
+ else
+ oy->data=(unsigned char *)_ogg_malloc(newsize);
+ oy->storage=newsize;
+ }
+
+ /* expose a segment at least as large as requested at the fill mark */
+ return((char *)oy->data+oy->fill);
+}
+
+int ogg_sync_wrote(ogg_sync_state *oy, long bytes){
+ if(oy->fill+bytes>oy->storage)return(-1);
+ oy->fill+=bytes;
+ return(0);
+}
+
+/* sync the stream. This is meant to be useful for finding page
+ boundaries.
+
+ return values for this:
+ -n) skipped n bytes
+ 0) page not ready; more data (no bytes skipped)
+ n) page synced at current location; page length n bytes
+
+*/
+
+long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og){
+ unsigned char *page=oy->data+oy->returned;
+ unsigned char *next;
+ long bytes=oy->fill-oy->returned;
+
+ if(oy->headerbytes==0){
+ int headerbytes,i;
+ if(bytes<27)return(0); /* not enough for a header */
+
+ /* verify capture pattern */
+ if(memcmp(page,"OggS",4))goto sync_fail;
+
+ headerbytes=page[26]+27;
+ if(bytes<headerbytes)return(0); /* not enough for header + seg table */
+
+ /* count up body length in the segment table */
+
+ for(i=0;i<page[26];i++)
+ oy->bodybytes+=page[27+i];
+ oy->headerbytes=headerbytes;
+ }
+
+ if(oy->bodybytes+oy->headerbytes>bytes)return(0);
+
+ /* The whole test page is buffered. Verify the checksum */
+ {
+ /* Grab the checksum bytes, set the header field to zero */
+ char chksum[4];
+ ogg_page log;
+
+ memcpy(chksum,page+22,4);
+ memset(page+22,0,4);
+
+ /* set up a temp page struct and recompute the checksum */
+ log.header=page;
+ log.header_len=oy->headerbytes;
+ log.body=page+oy->headerbytes;
+ log.body_len=oy->bodybytes;
+ ogg_page_checksum_set(&log);
+
+ /* Compare */
+ if(memcmp(chksum,page+22,4)){
+ /* D'oh. Mismatch! Corrupt page (or miscapture and not a page
+ at all) */
+ /* replace the computed checksum with the one actually read in */
+ memcpy(page+22,chksum,4);
+
+ /* Bad checksum. Lose sync */
+ goto sync_fail;
+ }
+ }
+
+ /* yes, have a whole page all ready to go */
+ {
+ unsigned char *page=oy->data+oy->returned;
+ long bytes;
+
+ if(og){
+ og->header=page;
+ og->header_len=oy->headerbytes;
+ og->body=page+oy->headerbytes;
+ og->body_len=oy->bodybytes;
+ }
+
+ oy->unsynced=0;
+ oy->returned+=(bytes=oy->headerbytes+oy->bodybytes);
+ oy->headerbytes=0;
+ oy->bodybytes=0;
+ return(bytes);
+ }
+
+ sync_fail:
+
+ oy->headerbytes=0;
+ oy->bodybytes=0;
+
+ /* search for possible capture */
+ next=(unsigned char *)memchr(page+1,'O',bytes-1);
+ if(!next)
+ next=oy->data+oy->fill;
+
+ oy->returned=next-oy->data;
+ return(-(next-page));
+}
+
+/* sync the stream and get a page. Keep trying until we find a page.
+ Supress 'sync errors' after reporting the first.
+
+ return values:
+ -1) recapture (hole in data)
+ 0) need more data
+ 1) page returned
+
+ Returns pointers into buffered data; invalidated by next call to
+ _stream, _clear, _init, or _buffer */
+
+int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og){
+
+ /* all we need to do is verify a page at the head of the stream
+ buffer. If it doesn't verify, we look for the next potential
+ frame */
+
+ while(1){
+ long ret=ogg_sync_pageseek(oy,og);
+ if(ret>0){
+ /* have a page */
+ return(1);
+ }
+ if(ret==0){
+ /* need more data */
+ return(0);
+ }
+
+ /* head did not start a synced page... skipped some bytes */
+ if(!oy->unsynced){
+ oy->unsynced=1;
+ return(-1);
+ }
+
+ /* loop. keep looking */
+
+ }
+}
+
+/* add the incoming page to the stream state; we decompose the page
+ into packet segments here as well. */
+
+int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og){
+ unsigned char *header=og->header;
+ unsigned char *body=og->body;
+ long bodysize=og->body_len;
+ int segptr=0;
+
+ int version=ogg_page_version(og);
+ int continued=ogg_page_continued(og);
+ int bos=ogg_page_bos(og);
+ int eos=ogg_page_eos(og);
+ ogg_int64_t granulepos=ogg_page_granulepos(og);
+ int serialno=ogg_page_serialno(og);
+ long pageno=ogg_page_pageno(og);
+ int segments=header[26];
+
+ /* clean up 'returned data' */
+ {
+ long lr=os->lacing_returned;
+ long br=os->body_returned;
+
+ /* body data */
+ if(br>8192){
+ os->body_fill-=br;
+ if(os->body_fill)
+ memmove(os->body_data,os->body_data+br,os->body_fill);
+ os->body_returned=0;
+ }
+
+ if(lr>8192){
+ /* segment table */
+ if(os->lacing_fill-lr){
+ memmove(os->lacing_vals,os->lacing_vals+lr,
+ (os->lacing_fill-lr)*sizeof(*os->lacing_vals));
+ memmove(os->granule_vals,os->granule_vals+lr,
+ (os->lacing_fill-lr)*sizeof(*os->granule_vals));
+ }
+ os->lacing_fill-=lr;
+ os->lacing_packet-=lr;
+ os->lacing_returned=0;
+ }
+ }
+
+ /* check the serial number */
+ if(serialno!=os->serialno)return(-1);
+ if(version>0)return(-1);
+
+ _os_lacing_expand(os,segments+1);
+
+ /* are we in sequence? */
+ if(pageno!=os->pageno){
+ int i;
+
+ /* unroll previous partial packet (if any) */
+ for(i=os->lacing_packet;i<os->lacing_fill;i++)
+ os->body_fill-=os->lacing_vals[i]&0xff;
+ os->lacing_fill=os->lacing_packet;
+
+ /* make a note of dropped data in segment table */
+ if(os->pageno!=-1){
+ os->lacing_vals[os->lacing_fill++]=0x400;
+ os->lacing_packet++;
+ }
+
+ /* are we a 'continued packet' page? If so, we'll need to skip
+ some segments */
+ if(continued){
+ bos=0;
+ for(;segptr<segments;segptr++){
+ int val=header[27+segptr];
+ body+=val;
+ bodysize-=val;
+ if(val<255){
+ segptr++;
+ break;
+ }
+ }
+ }
+ }
+
+ if(bodysize){
+ _os_body_expand(os,bodysize);
+ memcpy(os->body_data+os->body_fill,body,bodysize);
+ os->body_fill+=bodysize;
+ }
+
+ {
+ int saved=-1;
+ while(segptr<segments){
+ int val=header[27+segptr];
+ os->lacing_vals[os->lacing_fill]=val;
+ os->granule_vals[os->lacing_fill]=-1;
+
+ if(bos){
+ os->lacing_vals[os->lacing_fill]|=0x100;
+ bos=0;
+ }
+
+ if(val<255)saved=os->lacing_fill;
+
+ os->lacing_fill++;
+ segptr++;
+
+ if(val<255)os->lacing_packet=os->lacing_fill;
+ }
+
+ /* set the granulepos on the last granuleval of the last full packet */
+ if(saved!=-1){
+ os->granule_vals[saved]=granulepos;
+ }
+
+ }
+
+ if(eos){
+ os->e_o_s=1;
+ if(os->lacing_fill>0)
+ os->lacing_vals[os->lacing_fill-1]|=0x200;
+ }
+
+ os->pageno=pageno+1;
+
+ return(0);
+}
+
+/* clear things to an initial state. Good to call, eg, before seeking */
+int ogg_sync_reset(ogg_sync_state *oy){
+ oy->fill=0;
+ oy->returned=0;
+ oy->unsynced=0;
+ oy->headerbytes=0;
+ oy->bodybytes=0;
+ return(0);
+}
+
+int ogg_stream_reset(ogg_stream_state *os){
+ os->body_fill=0;
+ os->body_returned=0;
+
+ os->lacing_fill=0;
+ os->lacing_packet=0;
+ os->lacing_returned=0;
+
+ os->header_fill=0;
+
+ os->e_o_s=0;
+ os->b_o_s=0;
+ os->pageno=-1;
+ os->packetno=0;
+ os->granulepos=0;
+
+ return(0);
+}
+
+static int _packetout(ogg_stream_state *os,ogg_packet *op,int adv){
+
+ /* The last part of decode. We have the stream broken into packet
+ segments. Now we need to group them into packets (or return the
+ out of sync markers) */
+
+ int ptr=os->lacing_returned;
+
+ if(os->lacing_packet<=ptr)return(0);
+
+ if(os->lacing_vals[ptr]&0x400){
+ /* we need to tell the codec there's a gap; it might need to
+ handle previous packet dependencies. */
+ os->lacing_returned++;
+ os->packetno++;
+ return(-1);
+ }
+
+ if(!op && !adv)return(1); /* just using peek as an inexpensive way
+ to ask if there's a whole packet
+ waiting */
+
+ /* Gather the whole packet. We'll have no holes or a partial packet */
+ {
+ int size=os->lacing_vals[ptr]&0xff;
+ int bytes=size;
+ int eos=os->lacing_vals[ptr]&0x200; /* last packet of the stream? */
+ int bos=os->lacing_vals[ptr]&0x100; /* first packet of the stream? */
+
+ while(size==255){
+ int val=os->lacing_vals[++ptr];
+ size=val&0xff;
+ if(val&0x200)eos=0x200;
+ bytes+=size;
+ }
+
+ if(op){
+ op->e_o_s=eos;
+ op->b_o_s=bos;
+ op->packet=os->body_data+os->body_returned;
+ op->packetno=os->packetno;
+ op->granulepos=os->granule_vals[ptr];
+ op->bytes=bytes;
+ }
+
+ if(adv){
+ os->body_returned+=bytes;
+ os->lacing_returned=ptr+1;
+ os->packetno++;
+ }
+ }
+ return(1);
+}
+
+int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op){
+ return _packetout(os,op,1);
+}
+
+int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op){
+ return _packetout(os,op,0);
+}
+
+void ogg_packet_clear(ogg_packet *op) {
+ _ogg_free(op->packet);
+ memset(op, 0, sizeof(*op));
+}
+
diff --git a/info.c b/info.c
new file mode 100644
index 0000000..51605f4
--- /dev/null
+++ b/info.c
@@ -0,0 +1,351 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: maintain the info structure, info <-> header packets
+
+ ********************************************************************/
+
+/* general handling of the header and the vorbis_info structure (and
+ substructures) */
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+#include "codebook.h"
+#include "registry.h"
+#include "window.h"
+#include "misc.h"
+#include "os.h"
+
+/* helpers */
+static void _v_readstring(oggpack_buffer *o,char *buf,int bytes){
+ while(bytes--){
+ *buf++=oggpack_read(o,8);
+ }
+}
+
+void vorbis_comment_init(vorbis_comment *vc){
+ memset(vc,0,sizeof(*vc));
+}
+
+/* This is more or less the same as strncasecmp - but that doesn't exist
+ * everywhere, and this is a fairly trivial function, so we include it */
+static int tagcompare(const char *s1, const char *s2, int n){
+ int c=0;
+ while(c < n){
+ if(toupper(s1[c]) != toupper(s2[c]))
+ return !0;
+ c++;
+ }
+ return 0;
+}
+
+char *vorbis_comment_query(vorbis_comment *vc, char *tag, int count){
+ long i;
+ int found = 0;
+ int taglen = strlen(tag)+1; /* +1 for the = we append */
+ char *fulltag = (char *)alloca(taglen+ 1);
+
+ strcpy(fulltag, tag);
+ strcat(fulltag, "=");
+
+ for(i=0;i<vc->comments;i++){
+ if(!tagcompare(vc->user_comments[i], fulltag, taglen)){
+ if(count == found)
+ /* We return a pointer to the data, not a copy */
+ return vc->user_comments[i] + taglen;
+ else
+ found++;
+ }
+ }
+ return NULL; /* didn't find anything */
+}
+
+int vorbis_comment_query_count(vorbis_comment *vc, char *tag){
+ int i,count=0;
+ int taglen = strlen(tag)+1; /* +1 for the = we append */
+ char *fulltag = (char *)alloca(taglen+1);
+ strcpy(fulltag,tag);
+ strcat(fulltag, "=");
+
+ for(i=0;i<vc->comments;i++){
+ if(!tagcompare(vc->user_comments[i], fulltag, taglen))
+ count++;
+ }
+
+ return count;
+}
+
+void vorbis_comment_clear(vorbis_comment *vc){
+ if(vc){
+ long i;
+ for(i=0;i<vc->comments;i++)
+ if(vc->user_comments[i])_ogg_free(vc->user_comments[i]);
+ if(vc->user_comments)_ogg_free(vc->user_comments);
+ if(vc->comment_lengths)_ogg_free(vc->comment_lengths);
+ if(vc->vendor)_ogg_free(vc->vendor);
+ }
+ memset(vc,0,sizeof(*vc));
+}
+
+/* blocksize 0 is guaranteed to be short, 1 is guarantted to be long.
+ They may be equal, but short will never ge greater than long */
+int vorbis_info_blocksize(vorbis_info *vi,int zo){
+ codec_setup_info *ci = (codec_setup_info *)vi->codec_setup;
+ return ci ? ci->blocksizes[zo] : -1;
+}
+
+/* used by synthesis, which has a full, alloced vi */
+void vorbis_info_init(vorbis_info *vi){
+ memset(vi,0,sizeof(*vi));
+ vi->codec_setup=(codec_setup_info *)_ogg_calloc(1,sizeof(codec_setup_info));
+}
+
+void vorbis_info_clear(vorbis_info *vi){
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ int i;
+
+ if(ci){
+
+ for(i=0;i<ci->modes;i++)
+ if(ci->mode_param[i])_ogg_free(ci->mode_param[i]);
+
+ for(i=0;i<ci->maps;i++) /* unpack does the range checking */
+ _mapping_P[ci->map_type[i]]->free_info(ci->map_param[i]);
+
+ for(i=0;i<ci->floors;i++) /* unpack does the range checking */
+ _floor_P[ci->floor_type[i]]->free_info(ci->floor_param[i]);
+
+ for(i=0;i<ci->residues;i++) /* unpack does the range checking */
+ _residue_P[ci->residue_type[i]]->free_info(ci->residue_param[i]);
+
+ for(i=0;i<ci->books;i++){
+ if(ci->book_param[i]){
+ /* knows if the book was not alloced */
+ vorbis_staticbook_destroy(ci->book_param[i]);
+ }
+ if(ci->fullbooks)
+ vorbis_book_clear(ci->fullbooks+i);
+ }
+ if(ci->fullbooks)
+ _ogg_free(ci->fullbooks);
+
+ _ogg_free(ci);
+ }
+
+ memset(vi,0,sizeof(*vi));
+}
+
+/* Header packing/unpacking ********************************************/
+
+static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ if(!ci)return(OV_EFAULT);
+
+ vi->version=oggpack_read(opb,32);
+ if(vi->version!=0)return(OV_EVERSION);
+
+ vi->channels=oggpack_read(opb,8);
+ vi->rate=oggpack_read(opb,32);
+
+ vi->bitrate_upper=oggpack_read(opb,32);
+ vi->bitrate_nominal=oggpack_read(opb,32);
+ vi->bitrate_lower=oggpack_read(opb,32);
+
+ ci->blocksizes[0]=1<<oggpack_read(opb,4);
+ ci->blocksizes[1]=1<<oggpack_read(opb,4);
+
+ if(vi->rate<1)goto err_out;
+ if(vi->channels<1)goto err_out;
+ if(ci->blocksizes[0]<64)goto err_out;
+ if(ci->blocksizes[1]<ci->blocksizes[0])goto err_out;
+ if(ci->blocksizes[1]>8192)goto err_out;
+
+ if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */
+
+ return(0);
+ err_out:
+ vorbis_info_clear(vi);
+ return(OV_EBADHEADER);
+}
+
+static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){
+ int i;
+ int vendorlen=oggpack_read(opb,32);
+ if(vendorlen<0)goto err_out;
+ vc->vendor=(char *)_ogg_calloc(vendorlen+1,1);
+ _v_readstring(opb,vc->vendor,vendorlen);
+ vc->comments=oggpack_read(opb,32);
+ if(vc->comments<0)goto err_out;
+ vc->user_comments=(char **)_ogg_calloc(vc->comments+1,sizeof(*vc->user_comments));
+ vc->comment_lengths=(int *)_ogg_calloc(vc->comments+1, sizeof(*vc->comment_lengths));
+
+ for(i=0;i<vc->comments;i++){
+ int len=oggpack_read(opb,32);
+ if(len<0)goto err_out;
+ vc->comment_lengths[i]=len;
+ vc->user_comments[i]=(char *)_ogg_calloc(len+1,1);
+ _v_readstring(opb,vc->user_comments[i],len);
+ }
+ if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */
+
+ return(0);
+ err_out:
+ vorbis_comment_clear(vc);
+ return(OV_EBADHEADER);
+}
+
+/* all of the real encoding details are here. The modes, books,
+ everything */
+static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ int i;
+ if(!ci)return(OV_EFAULT);
+
+ /* codebooks */
+ ci->books=oggpack_read(opb,8)+1;
+ /*ci->book_param=_ogg_calloc(ci->books,sizeof(*ci->book_param));*/
+ for(i=0;i<ci->books;i++){
+ ci->book_param[i]=(static_codebook *)_ogg_calloc(1,sizeof(*ci->book_param[i]));
+ if(vorbis_staticbook_unpack(opb,ci->book_param[i]))goto err_out;
+ }
+
+ /* time backend settings */
+ ci->times=oggpack_read(opb,6)+1;
+ /*ci->time_type=_ogg_malloc(ci->times*sizeof(*ci->time_type));*/
+ /*ci->time_param=_ogg_calloc(ci->times,sizeof(void *));*/
+ for(i=0;i<ci->times;i++){
+ ci->time_type[i]=oggpack_read(opb,16);
+ if(ci->time_type[i]<0 || ci->time_type[i]>=VI_TIMEB)goto err_out;
+ /* ci->time_param[i]=_time_P[ci->time_type[i]]->unpack(vi,opb);
+ Vorbis I has no time backend */
+ /*if(!ci->time_param[i])goto err_out;*/
+ }
+
+ /* floor backend settings */
+ ci->floors=oggpack_read(opb,6)+1;
+ /*ci->floor_type=_ogg_malloc(ci->floors*sizeof(*ci->floor_type));*/
+ /*ci->floor_param=_ogg_calloc(ci->floors,sizeof(void *));*/
+ for(i=0;i<ci->floors;i++){
+ ci->floor_type[i]=oggpack_read(opb,16);
+ if(ci->floor_type[i]<0 || ci->floor_type[i]>=VI_FLOORB)goto err_out;
+ ci->floor_param[i]=_floor_P[ci->floor_type[i]]->unpack(vi,opb);
+ if(!ci->floor_param[i])goto err_out;
+ }
+
+ /* residue backend settings */
+ ci->residues=oggpack_read(opb,6)+1;
+ /*ci->residue_type=_ogg_malloc(ci->residues*sizeof(*ci->residue_type));*/
+ /*ci->residue_param=_ogg_calloc(ci->residues,sizeof(void *));*/
+ for(i=0;i<ci->residues;i++){
+ ci->residue_type[i]=oggpack_read(opb,16);
+ if(ci->residue_type[i]<0 || ci->residue_type[i]>=VI_RESB)goto err_out;
+ ci->residue_param[i]=_residue_P[ci->residue_type[i]]->unpack(vi,opb);
+ if(!ci->residue_param[i])goto err_out;
+ }
+
+ /* map backend settings */
+ ci->maps=oggpack_read(opb,6)+1;
+ /*ci->map_type=_ogg_malloc(ci->maps*sizeof(*ci->map_type));*/
+ /*ci->map_param=_ogg_calloc(ci->maps,sizeof(void *));*/
+ for(i=0;i<ci->maps;i++){
+ ci->map_type[i]=oggpack_read(opb,16);
+ if(ci->map_type[i]<0 || ci->map_type[i]>=VI_MAPB)goto err_out;
+ ci->map_param[i]=_mapping_P[ci->map_type[i]]->unpack(vi,opb);
+ if(!ci->map_param[i])goto err_out;
+ }
+
+ /* mode settings */
+ ci->modes=oggpack_read(opb,6)+1;
+ /*vi->mode_param=_ogg_calloc(vi->modes,sizeof(void *));*/
+ for(i=0;i<ci->modes;i++){
+ ci->mode_param[i]=(vorbis_info_mode *)_ogg_calloc(1,sizeof(*ci->mode_param[i]));
+ ci->mode_param[i]->blockflag=oggpack_read(opb,1);
+ ci->mode_param[i]->windowtype=oggpack_read(opb,16);
+ ci->mode_param[i]->transformtype=oggpack_read(opb,16);
+ ci->mode_param[i]->mapping=oggpack_read(opb,8);
+
+ if(ci->mode_param[i]->windowtype>=VI_WINDOWB)goto err_out;
+ if(ci->mode_param[i]->transformtype>=VI_WINDOWB)goto err_out;
+ if(ci->mode_param[i]->mapping>=ci->maps)goto err_out;
+ }
+
+ if(oggpack_read(opb,1)!=1)goto err_out; /* top level EOP check */
+
+ return(0);
+ err_out:
+ vorbis_info_clear(vi);
+ return(OV_EBADHEADER);
+}
+
+/* The Vorbis header is in three packets; the initial small packet in
+ the first page that identifies basic parameters, a second packet
+ with bitstream comments and a third packet that holds the
+ codebook. */
+
+int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op){
+ oggpack_buffer opb;
+
+ if(op){
+ oggpack_readinit(&opb,op->packet,op->bytes);
+
+ /* Which of the three types of header is this? */
+ /* Also verify header-ness, vorbis */
+ {
+ char buffer[6];
+ int packtype=oggpack_read(&opb,8);
+ memset(buffer,0,6);
+ _v_readstring(&opb,buffer,6);
+ if(memcmp(buffer,"vorbis",6)){
+ /* not a vorbis header */
+ return(OV_ENOTVORBIS);
+ }
+ switch(packtype){
+ case 0x01: /* least significant *bit* is read first */
+ if(!op->b_o_s){
+ /* Not the initial packet */
+ return(OV_EBADHEADER);
+ }
+ if(vi->rate!=0){
+ /* previously initialized info header */
+ return(OV_EBADHEADER);
+ }
+
+ return(_vorbis_unpack_info(vi,&opb));
+
+ case 0x03: /* least significant *bit* is read first */
+ if(vi->rate==0){
+ /* um... we didn't get the initial header */
+ return(OV_EBADHEADER);
+ }
+
+ return(_vorbis_unpack_comment(vc,&opb));
+
+ case 0x05: /* least significant *bit* is read first */
+ if(vi->rate==0 || vc->vendor==NULL){
+ /* um... we didn;t get the initial header or comments yet */
+ return(OV_EBADHEADER);
+ }
+
+ return(_vorbis_unpack_books(vi,&opb));
+
+ default:
+ /* Not a valid vorbis header type */
+ return(OV_EBADHEADER);
+ break;
+ }
+ }
+ }
+ return(OV_EBADHEADER);
+}
+
diff --git a/ivorbiscodec.h b/ivorbiscodec.h
new file mode 100644
index 0000000..51fb0b0
--- /dev/null
+++ b/ivorbiscodec.h
@@ -0,0 +1,198 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: libvorbis codec headers
+
+ ********************************************************************/
+
+#ifndef _vorbis_codec_h_
+#define _vorbis_codec_h_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+#include "ogg.h"
+
+typedef struct vorbis_info{
+ int version;
+ int channels;
+ long rate;
+
+ /* The below bitrate declarations are *hints*.
+ Combinations of the three values carry the following implications:
+
+ all three set to the same value:
+ implies a fixed rate bitstream
+ only nominal set:
+ implies a VBR stream that averages the nominal bitrate. No hard
+ upper/lower limit
+ upper and or lower set:
+ implies a VBR bitstream that obeys the bitrate limits. nominal
+ may also be set to give a nominal rate.
+ none set:
+ the coder does not care to speculate.
+ */
+
+ long bitrate_upper;
+ long bitrate_nominal;
+ long bitrate_lower;
+ long bitrate_window;
+
+ void *codec_setup;
+} vorbis_info;
+
+/* vorbis_dsp_state buffers the current vorbis audio
+ analysis/synthesis state. The DSP state belongs to a specific
+ logical bitstream ****************************************************/
+typedef struct vorbis_dsp_state{
+ int analysisp;
+ vorbis_info *vi;
+
+ ogg_int32_t **pcm;
+ ogg_int32_t **pcmret;
+ int pcm_storage;
+ int pcm_current;
+ int pcm_returned;
+
+ int preextrapolate;
+ int eofflag;
+
+ long lW;
+ long W;
+ long nW;
+ long centerW;
+
+ ogg_int64_t granulepos;
+ ogg_int64_t sequence;
+
+ void *backend_state;
+} vorbis_dsp_state;
+
+typedef struct vorbis_block{
+ /* necessary stream state for linking to the framing abstraction */
+ ogg_int32_t **pcm; /* this is a pointer into local storage */
+ oggpack_buffer opb;
+
+ long lW;
+ long W;
+ long nW;
+ int pcmend;
+ int mode;
+
+ int eofflag;
+ ogg_int64_t granulepos;
+ ogg_int64_t sequence;
+ vorbis_dsp_state *vd; /* For read-only access of configuration */
+
+ /* local storage to avoid remallocing; it's up to the mapping to
+ structure it */
+ void *localstore;
+ long localtop;
+ long localalloc;
+ long totaluse;
+ struct alloc_chain *reap;
+
+} vorbis_block;
+
+/* vorbis_block is a single block of data to be processed as part of
+the analysis/synthesis stream; it belongs to a specific logical
+bitstream, but is independant from other vorbis_blocks belonging to
+that logical bitstream. *************************************************/
+
+struct alloc_chain{
+ void *ptr;
+ struct alloc_chain *next;
+};
+
+/* vorbis_info contains all the setup information specific to the
+ specific compression/decompression mode in progress (eg,
+ psychoacoustic settings, channel setup, options, codebook
+ etc). vorbis_info and substructures are in backends.h.
+*********************************************************************/
+
+/* the comments are not part of vorbis_info so that vorbis_info can be
+ static storage */
+typedef struct vorbis_comment{
+ /* unlimited user comment fields. libvorbis writes 'libvorbis'
+ whatever vendor is set to in encode */
+ char **user_comments;
+ int *comment_lengths;
+ int comments;
+ char *vendor;
+
+} vorbis_comment;
+
+
+/* libvorbis encodes in two abstraction layers; first we perform DSP
+ and produce a packet (see docs/analysis.txt). The packet is then
+ coded into a framed OggSquish bitstream by the second layer (see
+ docs/framing.txt). Decode is the reverse process; we sync/frame
+ the bitstream and extract individual packets, then decode the
+ packet back into PCM audio.
+
+ The extra framing/packetizing is used in streaming formats, such as
+ files. Over the net (such as with UDP), the framing and
+ packetization aren't necessary as they're provided by the transport
+ and the streaming layer is not used */
+
+/* Vorbis PRIMITIVES: general ***************************************/
+
+extern void vorbis_info_init(vorbis_info *vi);
+extern void vorbis_info_clear(vorbis_info *vi);
+extern int vorbis_info_blocksize(vorbis_info *vi,int zo);
+extern void vorbis_comment_init(vorbis_comment *vc);
+extern void vorbis_comment_add(vorbis_comment *vc, char *comment);
+extern void vorbis_comment_add_tag(vorbis_comment *vc,
+ char *tag, char *contents);
+extern char *vorbis_comment_query(vorbis_comment *vc, char *tag, int count);
+extern int vorbis_comment_query_count(vorbis_comment *vc, char *tag);
+extern void vorbis_comment_clear(vorbis_comment *vc);
+
+extern int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb);
+extern int vorbis_block_clear(vorbis_block *vb);
+extern void vorbis_dsp_clear(vorbis_dsp_state *v);
+
+/* Vorbis PRIMITIVES: synthesis layer *******************************/
+extern int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,
+ ogg_packet *op);
+
+extern int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi);
+extern int vorbis_synthesis(vorbis_block *vb,ogg_packet *op);
+extern int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb);
+extern int vorbis_synthesis_pcmout(vorbis_dsp_state *v,ogg_int32_t ***pcm);
+extern int vorbis_synthesis_read(vorbis_dsp_state *v,int samples);
+extern long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op);
+
+/* Vorbis ERRORS and return codes ***********************************/
+
+#define OV_FALSE -1
+#define OV_EOF -2
+#define OV_HOLE -3
+
+#define OV_EREAD -128
+#define OV_EFAULT -129
+#define OV_EIMPL -130
+#define OV_EINVAL -131
+#define OV_ENOTVORBIS -132
+#define OV_EBADHEADER -133
+#define OV_EVERSION -134
+#define OV_ENOTAUDIO -135
+#define OV_EBADPACKET -136
+#define OV_EBADLINK -137
+#define OV_ENOSEEK -138
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+
diff --git a/ivorbisfile.h b/ivorbisfile.h
new file mode 100644
index 0000000..124b5ea
--- /dev/null
+++ b/ivorbisfile.h
@@ -0,0 +1,128 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: stdio-based convenience library for opening/seeking/decoding
+
+ ********************************************************************/
+
+#ifndef _OV_FILE_H_
+#define _OV_FILE_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+#include <stdio.h>
+#include "ivorbiscodec.h"
+
+#define CHUNKSIZE 8192
+
+/* The function prototypes for the callbacks are basically the same as for
+ * the stdio functions fread, fseek, fclose, ftell.
+ * The one difference is that the FILE * arguments have been replaced with
+ * a void * - this is to be used as a pointer to whatever internal data these
+ * functions might need. In the stdio case, it's just a FILE * cast to a void *
+ *
+ * If you use other functions, check the docs for these functions and return
+ * the right values. For seek_func(), you *MUST* return -1 if the stream is
+ * unseekable
+ */
+typedef struct {
+ size_t (*read_func) (void *ptr, size_t size, size_t nmemb, void *datasource);
+ int (*seek_func) (void *datasource, ogg_int64_t offset, int whence);
+ int (*close_func) (void *datasource);
+ long (*tell_func) (void *datasource);
+} ov_callbacks;
+
+#define NOTOPEN 0
+#define PARTOPEN 1
+#define OPENED 2
+#define STREAMSET 3
+#define INITSET 4
+
+typedef struct OggVorbis_File {
+ void *datasource; /* Pointer to a FILE *, etc. */
+ int seekable;
+ ogg_int64_t offset;
+ ogg_int64_t end;
+ ogg_sync_state oy;
+
+ /* If the FILE handle isn't seekable (eg, a pipe), only the current
+ stream appears */
+ int links;
+ ogg_int64_t *offsets;
+ ogg_int64_t *dataoffsets;
+ long *serialnos;
+ ogg_int64_t *pcmlengths;
+ vorbis_info *vi;
+ vorbis_comment *vc;
+
+ /* Decoding working state local storage */
+ ogg_int64_t pcm_offset;
+ int ready_state;
+ long current_serialno;
+ int current_link;
+
+ ogg_int64_t bittrack;
+ ogg_int64_t samptrack;
+
+ ogg_stream_state os; /* take physical pages, weld into a logical
+ stream of packets */
+ vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
+ vorbis_block vb; /* local working space for packet->PCM decode */
+
+ ov_callbacks callbacks;
+
+} OggVorbis_File;
+
+extern int ov_clear(OggVorbis_File *vf);
+extern int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes);
+extern int ov_open_callbacks(void *datasource, OggVorbis_File *vf,
+ char *initial, long ibytes, ov_callbacks callbacks);
+
+extern int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes);
+extern int ov_test_callbacks(void *datasource, OggVorbis_File *vf,
+ char *initial, long ibytes, ov_callbacks callbacks);
+extern int ov_test_open(OggVorbis_File *vf);
+
+extern long ov_bitrate(OggVorbis_File *vf,int i);
+extern long ov_bitrate_instant(OggVorbis_File *vf);
+extern long ov_streams(OggVorbis_File *vf);
+extern long ov_seekable(OggVorbis_File *vf);
+extern long ov_serialnumber(OggVorbis_File *vf,int i);
+
+extern ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i);
+extern ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i);
+extern ogg_int64_t ov_time_total(OggVorbis_File *vf,int i);
+
+extern int ov_raw_seek(OggVorbis_File *vf,long pos);
+extern int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos);
+extern int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos);
+extern int ov_time_seek(OggVorbis_File *vf,ogg_int64_t pos);
+extern int ov_time_seek_page(OggVorbis_File *vf,ogg_int64_t pos);
+
+extern ogg_int64_t ov_raw_tell(OggVorbis_File *vf);
+extern ogg_int64_t ov_pcm_tell(OggVorbis_File *vf);
+extern ogg_int64_t ov_time_tell(OggVorbis_File *vf);
+
+extern vorbis_info *ov_info(OggVorbis_File *vf,int link);
+extern vorbis_comment *ov_comment(OggVorbis_File *vf,int link);
+
+extern long ov_read(OggVorbis_File *vf,char *buffer,int length,
+ int *bitstream);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+
+
diff --git a/ivorbisfile_example.c b/ivorbisfile_example.c
new file mode 100644
index 0000000..55362f6
--- /dev/null
+++ b/ivorbisfile_example.c
@@ -0,0 +1,83 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: simple example decoder using vorbisidec
+
+ ********************************************************************/
+
+/* Takes a vorbis bitstream from stdin and writes raw stereo PCM to
+ stdout using vorbisfile. Using vorbisfile is much simpler than
+ dealing with libvorbis. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <vorbis/ivorbiscodec.h>
+#include <vorbis/ivorbisfile.h>
+
+#ifdef _WIN32 /* We need the following two to set stdin/stdout to binary */
+#include <io.h>
+#include <fcntl.h>
+#endif
+
+char pcmout[4096]; /* take 4k out of the data segment, not the stack */
+
+int main(){
+ OggVorbis_File vf;
+ int eof=0;
+ int current_section;
+
+#ifdef _WIN32 /* We need to set stdin/stdout to binary mode. Damn windows. */
+ /* Beware the evil ifdef. We avoid these where we can, but this one we
+ cannot. Don't add any more, you'll probably go to hell if you do. */
+ _setmode( _fileno( stdin ), _O_BINARY );
+ _setmode( _fileno( stdout ), _O_BINARY );
+#endif
+
+ if(ov_open(stdin, &vf, NULL, 0) < 0) {
+ fprintf(stderr,"Input does not appear to be an Ogg bitstream.\n");
+ exit(1);
+ }
+
+ /* Throw the comments plus a few lines about the bitstream we're
+ decoding */
+ {
+ char **ptr=ov_comment(&vf,-1)->user_comments;
+ vorbis_info *vi=ov_info(&vf,-1);
+ while(*ptr){
+ fprintf(stderr,"%s\n",*ptr);
+ ++ptr;
+ }
+ fprintf(stderr,"\nBitstream is %d channel, %ldHz\n",vi->channels,vi->rate);
+ fprintf(stderr,"\nDecoded length: %ld samples\n",
+ (long)ov_pcm_total(&vf,-1));
+ fprintf(stderr,"Encoded by: %s\n\n",ov_comment(&vf,-1)->vendor);
+ }
+
+ while(!eof){
+ long ret=ov_read(&vf,pcmout,sizeof(pcmout),&current_section);
+ if (ret == 0) {
+ /* EOF */
+ eof=1;
+ } else if (ret < 0) {
+ /* error in the stream. Not a problem, just reporting it in
+ case we (the app) cares. In this case, we don't. */
+ } else {
+ /* we don't bother dealing with sample rate changes, etc, but
+ you'll have to*/
+ fwrite(pcmout,1,ret,stdout);
+ }
+ }
+
+ /* cleanup */
+ ov_clear(&vf);
+
+ fprintf(stderr,"Done.\n");
+ return(0);
+}
diff --git a/lsp_lookup.h b/lsp_lookup.h
new file mode 100644
index 0000000..9cfee30
--- /dev/null
+++ b/lsp_lookup.h
@@ -0,0 +1,133 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: lookup data
+
+ ********************************************************************/
+
+#ifndef _V_LOOKUP_DATA_H_
+#define _V_LOOKUP_DATA_H_
+
+#include "os_types.h"
+
+#define FROMdB_LOOKUP_SZ 35
+#define FROMdB2_LOOKUP_SZ 32
+#define FROMdB_SHIFT 5
+#define FROMdB2_SHIFT 3
+#define FROMdB2_MASK 31
+
+static ogg_int32_t FROMdB_LOOKUP[FROMdB_LOOKUP_SZ]={
+ 0x003fffff, 0x0028619b, 0x00197a96, 0x0010137a,
+ 0x000a24b0, 0x00066666, 0x000409c3, 0x00028c42,
+ 0x00019b8c, 0x000103ab, 0x0000a3d7, 0x00006760,
+ 0x0000413a, 0x00002928, 0x000019f8, 0x00001062,
+ 0x00000a56, 0x00000686, 0x0000041e, 0x00000299,
+ 0x000001a3, 0x00000109, 0x000000a7, 0x00000069,
+ 0x00000042, 0x0000002a, 0x0000001a, 0x00000011,
+ 0x0000000b, 0x00000007, 0x00000004, 0x00000003,
+ 0x00000002, 0x00000001, 0x00000001};
+
+static ogg_int32_t FROMdB2_LOOKUP[FROMdB2_LOOKUP_SZ]={
+ 0x000001fc, 0x000001f5, 0x000001ee, 0x000001e7,
+ 0x000001e0, 0x000001d9, 0x000001d2, 0x000001cc,
+ 0x000001c5, 0x000001bf, 0x000001b8, 0x000001b2,
+ 0x000001ac, 0x000001a6, 0x000001a0, 0x0000019a,
+ 0x00000194, 0x0000018e, 0x00000188, 0x00000183,
+ 0x0000017d, 0x00000178, 0x00000172, 0x0000016d,
+ 0x00000168, 0x00000163, 0x0000015e, 0x00000159,
+ 0x00000154, 0x0000014f, 0x0000014a, 0x00000145,
+};
+
+#define INVSQ_LOOKUP_I_SHIFT 10
+#define INVSQ_LOOKUP_I_MASK 1023
+static long INVSQ_LOOKUP_I[64+1]={
+ 92682, 91966, 91267, 90583,
+ 89915, 89261, 88621, 87995,
+ 87381, 86781, 86192, 85616,
+ 85051, 84497, 83953, 83420,
+ 82897, 82384, 81880, 81385,
+ 80899, 80422, 79953, 79492,
+ 79039, 78594, 78156, 77726,
+ 77302, 76885, 76475, 76072,
+ 75674, 75283, 74898, 74519,
+ 74146, 73778, 73415, 73058,
+ 72706, 72359, 72016, 71679,
+ 71347, 71019, 70695, 70376,
+ 70061, 69750, 69444, 69141,
+ 68842, 68548, 68256, 67969,
+ 67685, 67405, 67128, 66855,
+ 66585, 66318, 66054, 65794,
+ 65536,
+};
+
+static long INVSQ_LOOKUP_IDel[64]={
+ 716, 699, 684, 668,
+ 654, 640, 626, 614,
+ 600, 589, 576, 565,
+ 554, 544, 533, 523,
+ 513, 504, 495, 486,
+ 477, 469, 461, 453,
+ 445, 438, 430, 424,
+ 417, 410, 403, 398,
+ 391, 385, 379, 373,
+ 368, 363, 357, 352,
+ 347, 343, 337, 332,
+ 328, 324, 319, 315,
+ 311, 306, 303, 299,
+ 294, 292, 287, 284,
+ 280, 277, 273, 270,
+ 267, 264, 260, 258,
+};
+
+#define COS_LOOKUP_I_SHIFT 9
+#define COS_LOOKUP_I_MASK 511
+#define COS_LOOKUP_I_SZ 128
+static ogg_int32_t COS_LOOKUP_I[COS_LOOKUP_I_SZ+1]={
+ 16384, 16379, 16364, 16340,
+ 16305, 16261, 16207, 16143,
+ 16069, 15986, 15893, 15791,
+ 15679, 15557, 15426, 15286,
+ 15137, 14978, 14811, 14635,
+ 14449, 14256, 14053, 13842,
+ 13623, 13395, 13160, 12916,
+ 12665, 12406, 12140, 11866,
+ 11585, 11297, 11003, 10702,
+ 10394, 10080, 9760, 9434,
+ 9102, 8765, 8423, 8076,
+ 7723, 7366, 7005, 6639,
+ 6270, 5897, 5520, 5139,
+ 4756, 4370, 3981, 3590,
+ 3196, 2801, 2404, 2006,
+ 1606, 1205, 804, 402,
+ 0, -401, -803, -1204,
+ -1605, -2005, -2403, -2800,
+ -3195, -3589, -3980, -4369,
+ -4755, -5138, -5519, -5896,
+ -6269, -6638, -7004, -7365,
+ -7722, -8075, -8422, -8764,
+ -9101, -9433, -9759, -10079,
+ -10393, -10701, -11002, -11296,
+ -11584, -11865, -12139, -12405,
+ -12664, -12915, -13159, -13394,
+ -13622, -13841, -14052, -14255,
+ -14448, -14634, -14810, -14977,
+ -15136, -15285, -15425, -15556,
+ -15678, -15790, -15892, -15985,
+ -16068, -16142, -16206, -16260,
+ -16304, -16339, -16363, -16378,
+ -16383,
+};
+
+#endif
+
+
+
+
+
diff --git a/mapping0.c b/mapping0.c
new file mode 100644
index 0000000..173410c
--- /dev/null
+++ b/mapping0.c
@@ -0,0 +1,319 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: channel mapping 0 implementation
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "mdct.h"
+#include "codec_internal.h"
+#include "codebook.h"
+#include "window.h"
+#include "registry.h"
+#include "misc.h"
+
+/* simplistic, wasteful way of doing this (unique lookup for each
+ mode/submapping); there should be a central repository for
+ identical lookups. That will require minor work, so I'm putting it
+ off as low priority.
+
+ Why a lookup for each backend in a given mode? Because the
+ blocksize is set by the mode, and low backend lookups may require
+ parameters from other areas of the mode/mapping */
+
+typedef struct {
+ vorbis_info_mode *mode;
+ vorbis_info_mapping0 *map;
+
+ vorbis_look_floor **floor_look;
+
+ vorbis_look_residue **residue_look;
+
+ vorbis_func_floor **floor_func;
+ vorbis_func_residue **residue_func;
+
+ int ch;
+ long lastframe; /* if a different mode is called, we need to
+ invalidate decay */
+} vorbis_look_mapping0;
+
+static void mapping0_free_info(vorbis_info_mapping *i){
+ vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)i;
+ if(info){
+ memset(info,0,sizeof(*info));
+ _ogg_free(info);
+ }
+}
+
+static void mapping0_free_look(vorbis_look_mapping *look){
+ int i;
+ vorbis_look_mapping0 *l=(vorbis_look_mapping0 *)look;
+ if(l){
+
+ for(i=0;i<l->map->submaps;i++){
+ l->floor_func[i]->free_look(l->floor_look[i]);
+ l->residue_func[i]->free_look(l->residue_look[i]);
+ }
+
+ _ogg_free(l->floor_func);
+ _ogg_free(l->residue_func);
+ _ogg_free(l->floor_look);
+ _ogg_free(l->residue_look);
+ memset(l,0,sizeof(*l));
+ _ogg_free(l);
+ }
+}
+
+static vorbis_look_mapping *mapping0_look(vorbis_dsp_state *vd,vorbis_info_mode *vm,
+ vorbis_info_mapping *m){
+ int i;
+ vorbis_info *vi=vd->vi;
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ vorbis_look_mapping0 *look=(vorbis_look_mapping0 *)_ogg_calloc(1,sizeof(*look));
+ vorbis_info_mapping0 *info=look->map=(vorbis_info_mapping0 *)m;
+ look->mode=vm;
+
+ look->floor_look=(vorbis_look_floor **)_ogg_calloc(info->submaps,sizeof(*look->floor_look));
+
+ look->residue_look=(vorbis_look_residue **)_ogg_calloc(info->submaps,sizeof(*look->residue_look));
+
+ look->floor_func=(vorbis_func_floor **)_ogg_calloc(info->submaps,sizeof(*look->floor_func));
+ look->residue_func=(vorbis_func_residue **)_ogg_calloc(info->submaps,sizeof(*look->residue_func));
+
+ for(i=0;i<info->submaps;i++){
+ int floornum=info->floorsubmap[i];
+ int resnum=info->residuesubmap[i];
+
+ look->floor_func[i]=_floor_P[ci->floor_type[floornum]];
+ look->floor_look[i]=look->floor_func[i]->
+ look(vd,vm,ci->floor_param[floornum]);
+ look->residue_func[i]=_residue_P[ci->residue_type[resnum]];
+ look->residue_look[i]=look->residue_func[i]->
+ look(vd,vm,ci->residue_param[resnum]);
+
+ }
+
+ look->ch=vi->channels;
+
+ return(look);
+}
+
+static int ilog(unsigned int v){
+ int ret=0;
+ if(v)--v;
+ while(v){
+ ret++;
+ v>>=1;
+ }
+ return(ret);
+}
+
+/* also responsible for range checking */
+static vorbis_info_mapping *mapping0_unpack(vorbis_info *vi,oggpack_buffer *opb){
+ int i;
+ vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)_ogg_calloc(1,sizeof(*info));
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ memset(info,0,sizeof(*info));
+
+ if(oggpack_read(opb,1))
+ info->submaps=oggpack_read(opb,4)+1;
+ else
+ info->submaps=1;
+
+ if(oggpack_read(opb,1)){
+ info->coupling_steps=oggpack_read(opb,8)+1;
+
+ for(i=0;i<info->coupling_steps;i++){
+ int testM=info->coupling_mag[i]=oggpack_read(opb,ilog(vi->channels));
+ int testA=info->coupling_ang[i]=oggpack_read(opb,ilog(vi->channels));
+
+ if(testM<0 ||
+ testA<0 ||
+ testM==testA ||
+ testM>=vi->channels ||
+ testA>=vi->channels) goto err_out;
+ }
+
+ }
+
+ if(oggpack_read(opb,2)>0)goto err_out; /* 2,3:reserved */
+
+ if(info->submaps>1){
+ for(i=0;i<vi->channels;i++){
+ info->chmuxlist[i]=oggpack_read(opb,4);
+ if(info->chmuxlist[i]>=info->submaps)goto err_out;
+ }
+ }
+ for(i=0;i<info->submaps;i++){
+ int temp=oggpack_read(opb,8);
+ if(temp>=ci->times)goto err_out;
+ info->floorsubmap[i]=oggpack_read(opb,8);
+ if(info->floorsubmap[i]>=ci->floors)goto err_out;
+ info->residuesubmap[i]=oggpack_read(opb,8);
+ if(info->residuesubmap[i]>=ci->residues)goto err_out;
+ }
+
+ return info;
+
+ err_out:
+ mapping0_free_info(info);
+ return(NULL);
+}
+
+static int seq=0;
+static int mapping0_inverse(vorbis_block *vb,vorbis_look_mapping *l){
+ vorbis_dsp_state *vd=vb->vd;
+ vorbis_info *vi=vd->vi;
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ backend_lookup_state *b=(backend_lookup_state *)vd->backend_state;
+ vorbis_look_mapping0 *look=(vorbis_look_mapping0 *)l;
+ vorbis_info_mapping0 *info=look->map;
+
+ int i,j;
+ long n=vb->pcmend=ci->blocksizes[vb->W];
+
+ ogg_int32_t **pcmbundle=(ogg_int32_t **)alloca(sizeof(*pcmbundle)*vi->channels);
+ int *zerobundle=(int *)alloca(sizeof(*zerobundle)*vi->channels);
+
+ int *nonzero =(int *)alloca(sizeof(*nonzero)*vi->channels);
+ void **floormemo=(void **)alloca(sizeof(*floormemo)*vi->channels);
+
+ /* time domain information decode (note that applying the
+ information would have to happen later; we'll probably add a
+ function entry to the harness for that later */
+ /* NOT IMPLEMENTED */
+
+ /* recover the spectral envelope; store it in the PCM vector for now */
+ for(i=0;i<vi->channels;i++){
+ int submap=info->chmuxlist[i];
+ floormemo[i]=look->floor_func[submap]->
+ inverse1(vb,look->floor_look[submap]);
+ if(floormemo[i])
+ nonzero[i]=1;
+ else
+ nonzero[i]=0;
+ memset(vb->pcm[i],0,sizeof(*vb->pcm[i])*n/2);
+ }
+
+ /* channel coupling can 'dirty' the nonzero listing */
+ for(i=0;i<info->coupling_steps;i++){
+ if(nonzero[info->coupling_mag[i]] ||
+ nonzero[info->coupling_ang[i]]){
+ nonzero[info->coupling_mag[i]]=1;
+ nonzero[info->coupling_ang[i]]=1;
+ }
+ }
+
+ /* recover the residue into our working vectors */
+ for(i=0;i<info->submaps;i++){
+ int ch_in_bundle=0;
+ for(j=0;j<vi->channels;j++){
+ if(info->chmuxlist[j]==i){
+ if(nonzero[j])
+ zerobundle[ch_in_bundle]=1;
+ else
+ zerobundle[ch_in_bundle]=0;
+ pcmbundle[ch_in_bundle++]=vb->pcm[j];
+ }
+ }
+
+ look->residue_func[i]->inverse(vb,look->residue_look[i],
+ pcmbundle,zerobundle,ch_in_bundle);
+ }
+
+ //for(j=0;j<vi->channels;j++)
+ //_analysis_output("coupled",seq+j,vb->pcm[j],-8,n/2,0,0);
+
+
+ /* channel coupling */
+ for(i=info->coupling_steps-1;i>=0;i--){
+ ogg_int32_t *pcmM=vb->pcm[info->coupling_mag[i]];
+ ogg_int32_t *pcmA=vb->pcm[info->coupling_ang[i]];
+
+ for(j=0;j<n/2;j++){
+ ogg_int32_t mag=pcmM[j];
+ ogg_int32_t ang=pcmA[j];
+
+ if(mag>0)
+ if(ang>0){
+ pcmM[j]=mag;
+ pcmA[j]=mag-ang;
+ }else{
+ pcmA[j]=mag;
+ pcmM[j]=mag+ang;
+ }
+ else
+ if(ang>0){
+ pcmM[j]=mag;
+ pcmA[j]=mag+ang;
+ }else{
+ pcmA[j]=mag;
+ pcmM[j]=mag-ang;
+ }
+ }
+ }
+
+ //for(j=0;j<vi->channels;j++)
+ //_analysis_output("residue",seq+j,vb->pcm[j],-8,n/2,0,0);
+
+ /* compute and apply spectral envelope */
+ for(i=0;i<vi->channels;i++){
+ ogg_int32_t *pcm=vb->pcm[i];
+ int submap=info->chmuxlist[i];
+ look->floor_func[submap]->
+ inverse2(vb,look->floor_look[submap],floormemo[i],pcm);
+ }
+
+ //for(j=0;j<vi->channels;j++)
+ //_analysis_output("mdct",seq+j,vb->pcm[j],-24,n/2,0,1);
+
+ /* transform the PCM data; takes PCM vector, vb; modifies PCM vector */
+ /* only MDCT right now.... */
+ for(i=0;i<vi->channels;i++){
+ ogg_int32_t *pcm=vb->pcm[i];
+ mdct_backward(n,pcm,pcm);
+ }
+
+ //for(j=0;j<vi->channels;j++)
+ //_analysis_output("imdct",seq+j,vb->pcm[j],-24,n,0,0);
+
+ /* window the data */
+ for(i=0;i<vi->channels;i++){
+ ogg_int32_t *pcm=vb->pcm[i];
+ if(nonzero[i])
+ _vorbis_apply_window(pcm,b->window,ci->blocksizes,vb->lW,vb->W,vb->nW);
+ else
+ for(j=0;j<n;j++)
+ pcm[j]=0;
+
+ }
+
+ //for(j=0;j<vi->channels;j++)
+ //_analysis_output("window",seq+j,vb->pcm[j],-24,n,0,0);
+
+ seq+=vi->channels;
+ /* all done! */
+ return(0);
+}
+
+/* export hooks */
+vorbis_func_mapping mapping0_exportbundle={
+ &mapping0_unpack,
+ &mapping0_look,
+ &mapping0_free_info,
+ &mapping0_free_look,
+ &mapping0_inverse
+};
diff --git a/mdct.c b/mdct.c
new file mode 100644
index 0000000..9ed591c
--- /dev/null
+++ b/mdct.c
@@ -0,0 +1,505 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: normalized modified discrete cosine transform
+ power of two length transform only [64 <= n ]
+ last mod: $Id: mdct.c,v 1.1 2002/09/02 22:13:55 xiphmont Exp $
+
+ Original algorithm adapted long ago from _The use of multirate filter
+ banks for coding of high quality digital audio_, by T. Sporer,
+ K. Brandenburg and B. Edler, collection of the European Signal
+ Processing Conference (EUSIPCO), Amsterdam, June 1992, Vol.1, pp
+ 211-214
+
+ The below code implements an algorithm that no longer looks much like
+ that presented in the paper, but the basic structure remains if you
+ dig deep enough to see it.
+
+ This module DOES NOT INCLUDE code to generate/apply the window
+ function. Everybody has their own weird favorite including me... I
+ happen to like the properties of y=sin(2PI*sin^2(x)), but others may
+ vehemently disagree.
+
+ ********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "ivorbiscodec.h"
+#include "os.h"
+#include "mdct.h"
+#include "mdct_lookup.h"
+#include "misc.h"
+
+typedef struct {
+ int n;
+ int log2n;
+
+ DATA_TYPE *trig;
+ ogg_int16_t *bitrev;
+
+ DATA_TYPE scale;
+} mdct_lookup;
+
+
+static void mdct_init(mdct_lookup *lookup,int n){
+ lookup->n=n;
+ switch(n){
+ case 64:
+ lookup->log2n=6;
+ lookup->trig=triglook_64;
+ lookup->bitrev=bitrevlook_64;
+ lookup->scale=0x04000000;
+ break;
+ case 128:
+ lookup->log2n=7;
+ lookup->trig=triglook_128;
+ lookup->bitrev=bitrevlook_128;
+ lookup->scale=0x02000000;
+ break;
+ case 256:
+ lookup->log2n=8;
+ lookup->trig=triglook_256;
+ lookup->bitrev=bitrevlook_256;
+ lookup->scale=0x01000000;
+ break;
+ case 512:
+ lookup->log2n=9;
+ lookup->trig=triglook_512;
+ lookup->bitrev=bitrevlook_512;
+ lookup->scale=0x00800000;
+ break;
+ case 1024:
+ lookup->log2n=10;
+ lookup->trig=triglook_1024;
+ lookup->bitrev=bitrevlook_1024;
+ lookup->scale=0x00400000;
+ break;
+ case 2048:
+ lookup->log2n=11;
+ lookup->trig=triglook_2048;
+ lookup->bitrev=bitrevlook_2048;
+ lookup->scale=0x00200000;
+ break;
+ case 4096:
+ lookup->log2n=12;
+ lookup->trig=triglook_4096;
+ lookup->bitrev=bitrevlook_4096;
+ lookup->scale=0x00100000;
+ break;
+ case 8192:
+ lookup->log2n=13;
+ lookup->trig=triglook_8192;
+ lookup->bitrev=bitrevlook_8192;
+ lookup->scale=0x00080000;
+ break;
+ default:
+ /* die horribly */
+ memset(lookup,0,sizeof(*lookup));
+ }
+}
+
+/* 8 point butterfly (in place, 4 register) */
+STIN void mdct_butterfly_8(DATA_TYPE *x){
+ REG_TYPE r0 = x[6] + x[2];
+ REG_TYPE r1 = x[6] - x[2];
+ REG_TYPE r2 = x[4] + x[0];
+ REG_TYPE r3 = x[4] - x[0];
+
+ x[6] = r0 + r2;
+ x[4] = r0 - r2;
+
+ r0 = x[5] - x[1];
+ r2 = x[7] - x[3];
+ x[0] = r1 + r0;
+ x[2] = r1 - r0;
+
+ r0 = x[5] + x[1];
+ r1 = x[7] + x[3];
+ x[3] = r2 + r3;
+ x[1] = r2 - r3;
+ x[7] = r1 + r0;
+ x[5] = r1 - r0;
+
+}
+
+/* 16 point butterfly (in place, 4 register) */
+STIN void mdct_butterfly_16(DATA_TYPE *x){
+ REG_TYPE r0 = x[1] - x[9];
+ REG_TYPE r1 = x[0] - x[8];
+
+ x[8] += x[0];
+ x[9] += x[1];
+ x[0] = MULT31((r0 + r1) , cPI2_8);
+ x[1] = MULT31((r0 - r1) , cPI2_8);
+
+ r0 = x[3] - x[11];
+ r1 = x[10] - x[2];
+ x[10] += x[2];
+ x[11] += x[3];
+ x[2] = r0;
+ x[3] = r1;
+
+ r0 = x[12] - x[4];
+ r1 = x[13] - x[5];
+ x[12] += x[4];
+ x[13] += x[5];
+ x[4] = MULT31((r0 - r1) , cPI2_8);
+ x[5] = MULT31((r0 + r1) , cPI2_8);
+
+ r0 = x[14] - x[6];
+ r1 = x[15] - x[7];
+ x[14] += x[6];
+ x[15] += x[7];
+ x[6] = r0;
+ x[7] = r1;
+
+ mdct_butterfly_8(x);
+ mdct_butterfly_8(x+8);
+}
+
+/* 32 point butterfly (in place, 4 register) */
+STIN void mdct_butterfly_32(DATA_TYPE *x){
+ REG_TYPE r0 = x[30] - x[14];
+ REG_TYPE r1 = x[31] - x[15];
+
+ x[30] += x[14];
+ x[31] += x[15];
+ x[14] = r0;
+ x[15] = r1;
+
+ r0 = x[28] - x[12];
+ r1 = x[29] - x[13];
+ x[28] += x[12];
+ x[29] += x[13];
+ x[12] = MULT31( r0 , cPI1_8 ) - MULT31( r1 , cPI3_8 );
+ x[13] = MULT31( r0 , cPI3_8 ) + MULT31( r1 , cPI1_8 );
+
+ r0 = x[26] - x[10];
+ r1 = x[27] - x[11];
+ x[26] += x[10];
+ x[27] += x[11];
+ x[10] = MULT31(( r0 - r1 ) , cPI2_8);
+ x[11] = MULT31(( r0 + r1 ) , cPI2_8);
+
+ r0 = x[24] - x[8];
+ r1 = x[25] - x[9];
+ x[24] += x[8];
+ x[25] += x[9];
+ x[8] = MULT31( r0 , cPI3_8 ) - MULT31( r1 , cPI1_8 );
+ x[9] = MULT31( r1 , cPI3_8 ) + MULT31( r0 , cPI1_8 );
+
+ r0 = x[22] - x[6];
+ r1 = x[7] - x[23];
+ x[22] += x[6];
+ x[23] += x[7];
+ x[6] = r1;
+ x[7] = r0;
+
+ r0 = x[4] - x[20];
+ r1 = x[5] - x[21];
+ x[20] += x[4];
+ x[21] += x[5];
+ x[4] = MULT31( r1 , cPI1_8 ) + MULT31( r0 , cPI3_8 );
+ x[5] = MULT31( r1 , cPI3_8 ) - MULT31( r0 , cPI1_8 );
+
+ r0 = x[2] - x[18];
+ r1 = x[3] - x[19];
+ x[18] += x[2];
+ x[19] += x[3];
+ x[2] = MULT31(( r1 + r0 ) , cPI2_8);
+ x[3] = MULT31(( r1 - r0 ) , cPI2_8);
+
+ r0 = x[0] - x[16];
+ r1 = x[1] - x[17];
+ x[16] += x[0];
+ x[17] += x[1];
+ x[0] = MULT31( r1 , cPI3_8 ) + MULT31( r0 , cPI1_8 );
+ x[1] = MULT31( r1 , cPI1_8 ) - MULT31( r0 , cPI3_8 );
+
+ mdct_butterfly_16(x);
+ mdct_butterfly_16(x+16);
+
+}
+
+/* N point first stage butterfly (in place, 2 register) */
+STIN void mdct_butterfly_first(DATA_TYPE *T,
+ DATA_TYPE *x,
+ int points){
+
+ DATA_TYPE *x1 = x + points - 8;
+ DATA_TYPE *x2 = x + (points>>1) - 8;
+ REG_TYPE r0;
+ REG_TYPE r1;
+
+ do{
+
+ r0 = x1[6] - x2[6];
+ r1 = x1[7] - x2[7];
+ x1[6] += x2[6];
+ x1[7] += x2[7];
+ x2[6] = MULT30(r1 , T[1] ) + MULT30( r0 , T[0]);
+ x2[7] = MULT30(r1 , T[0] ) - MULT30( r0 , T[1]);
+
+ r0 = x1[4] - x2[4];
+ r1 = x1[5] - x2[5];
+ x1[4] += x2[4];
+ x1[5] += x2[5];
+ x2[4] = MULT30(r1 , T[5] ) + MULT30( r0 , T[4]);
+ x2[5] = MULT30(r1 , T[4] ) - MULT30( r0 , T[5]);
+
+ r0 = x1[2] - x2[2];
+ r1 = x1[3] - x2[3];
+ x1[2] += x2[2];
+ x1[3] += x2[3];
+ x2[2] = MULT30(r1 , T[9] ) + MULT30( r0 , T[8]);
+ x2[3] = MULT30(r1 , T[8] ) - MULT30( r0 , T[9]);
+
+ r0 = x1[0] - x2[0];
+ r1 = x1[1] - x2[1];
+ x1[0] += x2[0];
+ x1[1] += x2[1];
+ x2[0] = MULT30(r1 , T[13] ) + MULT30( r0 , T[12]);
+ x2[1] = MULT30(r1 , T[12] ) - MULT30( r0 , T[13]);
+
+ x1-=8;
+ x2-=8;
+ T+=16;
+
+ }while(x2>=x);
+}
+
+/* N/stage point generic N stage butterfly (in place, 2 register) */
+STIN void mdct_butterfly_generic(DATA_TYPE *T,
+ DATA_TYPE *x,
+ int points,
+ int trigint){
+
+ DATA_TYPE *x1 = x + points - 8;
+ DATA_TYPE *x2 = x + (points>>1) - 8;
+ REG_TYPE r0;
+ REG_TYPE r1;
+
+ do{
+
+ r0 = x1[6] - x2[6];
+ r1 = x1[7] - x2[7];
+ x1[6] += x2[6];
+ x1[7] += x2[7];
+ x2[6] = MULT30(r1 , T[1] ) + MULT30 (r0 , T[0]);
+ x2[7] = MULT30(r1 , T[0] ) - MULT30( r0 , T[1]);
+
+ T+=trigint;
+
+ r0 = x1[4] - x2[4];
+ r1 = x1[5] - x2[5];
+ x1[4] += x2[4];
+ x1[5] += x2[5];
+ x2[4] = MULT30(r1 , T[1] ) + MULT30( r0 , T[0]);
+ x2[5] = MULT30(r1 , T[0] ) - MULT30( r0 , T[1]);
+
+ T+=trigint;
+
+ r0 = x1[2] - x2[2];
+ r1 = x1[3] - x2[3];
+ x1[2] += x2[2];
+ x1[3] += x2[3];
+ x2[2] = MULT30(r1 , T[1] ) + MULT30( r0 , T[0]);
+ x2[3] = MULT30(r1 , T[0] ) - MULT30( r0 , T[1]);
+
+ T+=trigint;
+
+ r0 = x1[0] - x2[0];
+ r1 = x1[1] - x2[1];
+ x1[0] += x2[0];
+ x1[1] += x2[1];
+ x2[0] = MULT30(r1 , T[1] ) + MULT30( r0 , T[0]);
+ x2[1] = MULT30(r1 , T[0] ) - MULT30( r0 , T[1]);
+
+ T+=trigint;
+ x1-=8;
+ x2-=8;
+
+ }while(x2>=x);
+}
+
+STIN void mdct_butterflies(mdct_lookup *init,
+ DATA_TYPE *x,
+ int points){
+
+ DATA_TYPE *T=init->trig;
+ int stages=init->log2n-5;
+ int i,j;
+
+ if(--stages>0){
+ mdct_butterfly_first(T,x,points);
+ }
+
+ for(i=1;--stages>0;i++){
+ for(j=0;j<(1<<i);j++)
+ mdct_butterfly_generic(T,x+(points>>i)*j,points>>i,4<<i);
+ }
+
+ for(j=0;j<points;j+=32)
+ mdct_butterfly_32(x+j);
+
+}
+
+STIN void mdct_bitreverse(mdct_lookup *init,
+ DATA_TYPE *x){
+ int n = init->n;
+ ogg_int16_t *bit = init->bitrev;
+ DATA_TYPE *w0 = x;
+ DATA_TYPE *w1 = x = w0+(n>>1);
+ DATA_TYPE *T = init->trig+n;
+
+ do{
+ DATA_TYPE *x0 = x+bit[0];
+ DATA_TYPE *x1 = x+bit[1];
+
+ REG_TYPE r0 = x0[1] - x1[1];
+ REG_TYPE r1 = x0[0] + x1[0];
+ REG_TYPE r2 = MULT30(r1 , T[0] ) + MULT30(r0 , T[1]);
+ REG_TYPE r3 = MULT30(r1 , T[1] ) - MULT30(r0 , T[0]);
+
+ w1 -= 4;
+
+ r0 = (x0[1] + x1[1])/2;
+ r1 = (x0[0] - x1[0])/2;
+
+ w0[0] = r0 + r2;
+ w1[2] = r0 - r2;
+ w0[1] = r1 + r3;
+ w1[3] = r3 - r1;
+
+ x0 = x+bit[2];
+ x1 = x+bit[3];
+
+ r0 = x0[1] - x1[1];
+ r1 = x0[0] + x1[0];
+ r2 = MULT30(r1 , T[2] ) + MULT30(r0 , T[3]);
+ r3 = MULT30(r1 , T[3] ) - MULT30(r0 , T[2]);
+
+ r0 = (x0[1] + x1[1])/2;
+ r1 = (x0[0] - x1[0])/2;
+
+ w0[2] = r0 + r2;
+ w1[0] = r0 - r2;
+ w0[3] = r1 + r3;
+ w1[1] = r3 - r1;
+
+ T += 4;
+ bit += 4;
+ w0 += 4;
+
+ }while(w0<w1);
+}
+
+void mdct_backward(int n, DATA_TYPE *in, DATA_TYPE *out){
+ int n2=n>>1;
+ int n4=n>>2;
+ mdct_lookup init;
+ DATA_TYPE *iX;
+ DATA_TYPE *oX;
+ DATA_TYPE *T;
+
+ mdct_init(&init,n);
+
+ /* rotate */
+
+ iX = in+n2-7;
+ oX = out+n2+n4;
+ T = init.trig+n4;
+
+ do{
+ oX -= 4;
+ oX[0] = MULT30(-iX[2] , T[3]) - MULT30(iX[0] , T[2]);
+ oX[1] = MULT30 (iX[0] , T[3]) - MULT30(iX[2] , T[2]);
+ oX[2] = MULT30(-iX[6] , T[1]) - MULT30(iX[4] , T[0]);
+ oX[3] = MULT30 (iX[4] , T[1]) - MULT30(iX[6] , T[0]);
+ iX -= 8;
+ T += 4;
+ }while(iX>=in);
+
+ iX = in+n2-8;
+ oX = out+n2+n4;
+ T = init.trig+n4;
+
+ do{
+ T -= 4;
+ oX[0] = MULT30 (iX[4] , T[3]) + MULT30(iX[6] , T[2]);
+ oX[1] = MULT30 (iX[4] , T[2]) - MULT30(iX[6] , T[3]);
+ oX[2] = MULT30 (iX[0] , T[1]) + MULT30(iX[2] , T[0]);
+ oX[3] = MULT30 (iX[0] , T[0]) - MULT30(iX[2] , T[1]);
+ iX -= 8;
+ oX += 4;
+ }while(iX>=in);
+
+ mdct_butterflies(&init,out+n2,n2);
+ mdct_bitreverse(&init,out);
+
+ /* roatate + window */
+
+ {
+ DATA_TYPE *oX1=out+n2+n4;
+ DATA_TYPE *oX2=out+n2+n4;
+ DATA_TYPE *iX =out;
+ T =init.trig+n2;
+
+ do{
+ oX1-=4;
+
+ oX1[3] = MULT30 (iX[0] , T[1]) - MULT30(iX[1] , T[0]);
+ oX2[0] =-(MULT30 (iX[0] , T[0]) + MULT30(iX[1] , T[1]));
+
+ oX1[2] = MULT30 (iX[2] , T[3]) - MULT30(iX[3] , T[2]);
+ oX2[1] =-(MULT30 (iX[2] , T[2]) + MULT30(iX[3] , T[3]));
+
+ oX1[1] = MULT30 (iX[4] , T[5]) - MULT30(iX[5] , T[4]);
+ oX2[2] =-(MULT30 (iX[4] , T[4]) + MULT30(iX[5] , T[5]));
+
+ oX1[0] = MULT30 (iX[6] , T[7]) - MULT30(iX[7] , T[6]);
+ oX2[3] =-(MULT30 (iX[6] , T[6]) + MULT30(iX[7] , T[7]));
+
+ oX2+=4;
+ iX += 8;
+ T += 8;
+ }while(iX<oX1);
+
+ iX=out+n2+n4;
+ oX1=out+n4;
+ oX2=oX1;
+
+ do{
+ oX1-=4;
+ iX-=4;
+
+ oX2[0] = -(oX1[3] = iX[3]);
+ oX2[1] = -(oX1[2] = iX[2]);
+ oX2[2] = -(oX1[1] = iX[1]);
+ oX2[3] = -(oX1[0] = iX[0]);
+
+ oX2+=4;
+ }while(oX2<iX);
+
+ iX=out+n2+n4;
+ oX1=out+n2+n4;
+ oX2=out+n2;
+ do{
+ oX1-=4;
+ oX1[0]= iX[3];
+ oX1[1]= iX[2];
+ oX1[2]= iX[1];
+ oX1[3]= iX[0];
+ iX+=4;
+ }while(oX1>oX2);
+ }
+}
diff --git a/mdct.h b/mdct.h
new file mode 100644
index 0000000..3ad5ced
--- /dev/null
+++ b/mdct.h
@@ -0,0 +1,42 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: modified discrete cosine transform prototypes
+
+ ********************************************************************/
+
+#ifndef _OGG_mdct_H_
+#define _OGG_mdct_H_
+
+#include "ivorbiscodec.h"
+#include "misc.h"
+
+#define DATA_TYPE ogg_int32_t
+#define REG_TYPE register ogg_int32_t
+#define cPI3_8 (0x61f78a9bUL>>1)
+#define cPI2_8 (0xb504f334UL>>1)
+#define cPI1_8 (0xec835e7aUL>>1)
+
+extern void mdct_forward(int n, DATA_TYPE *in, DATA_TYPE *out);
+extern void mdct_backward(int n, DATA_TYPE *in, DATA_TYPE *out);
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mdct_lookup.h b/mdct_lookup.h
new file mode 100644
index 0000000..8d8095c
--- /dev/null
+++ b/mdct_lookup.h
@@ -0,0 +1,6182 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: mdct trig lookups for n=64 through 8192
+
+ ********************************************************************/
+
+static ogg_int32_t triglook_64[80]={
+ 0x40000000, 0x00000000, 0x3ec52fa0, 0xf383a3e2,
+ 0x3b20d79e, 0xe7821d59, 0x3536cc52, 0xdc71898d,
+ 0x2d413ccd, 0xd2bec333, 0x238e7673, 0xcac933ae,
+ 0x187de2a7, 0xc4df2862, 0x0c7c5c1e, 0xc13ad060,
+ 0x00000000, 0xc0000000, 0xf383a3e2, 0xc13ad060,
+ 0xe7821d59, 0xc4df2862, 0xdc71898d, 0xcac933ae,
+ 0xd2bec333, 0xd2bec333, 0xcac933ae, 0xdc71898d,
+ 0xc4df2862, 0xe7821d59, 0xc13ad060, 0xf383a3e2,
+ 0x3ffb10c1, 0x0192155f, 0x3fd39b5a, 0x04b54825,
+ 0x3f84c8e2, 0x07d59396, 0x3f0ec9f5, 0x0af10a22,
+ 0x3e71e759, 0x0e05c135, 0x3dae81cf, 0x1111d263,
+ 0x3cc511d9, 0x14135c94, 0x3bb6276e, 0x17088531,
+ 0x3a8269a3, 0x19ef7944, 0x392a9642, 0x1cc66e99,
+ 0x37af8159, 0x1f8ba4dc, 0x361214b0, 0x223d66a8,
+ 0x34534f41, 0x24da0a9a, 0x32744493, 0x275ff452,
+ 0x30761c18, 0x29cd9578, 0x2e5a1070, 0x2c216eaa,
+ 0x1fd88da4, 0xfcdd0b28, 0x1e9f4157, 0xf6b5fce9,
+ 0x1c38b2f2, 0xf0ea5164, 0x18bc806b, 0xebb30cdb,
+ 0x144cf325, 0xe7437f95, 0x0f15ae9c, 0xe3c74d0e,
+ 0x094a0317, 0xe160bea9, 0x0322f4d8, 0xe027725c,
+};
+
+static ogg_int16_t bitrevlook_64[16]={
+ 0x001e, 0x0000, 0x000e, 0x0010,
+ 0x0016, 0x0008, 0x0006, 0x0018,
+ 0x001a, 0x0004, 0x000a, 0x0014,
+ 0x0012, 0x000c, 0x0002, 0x001c,
+};
+
+static ogg_int32_t triglook_128[160]={
+ 0x40000000, 0x00000000, 0x3fb11b48, 0xf9ba1651,
+ 0x3ec52fa0, 0xf383a3e2, 0x3d3e82ae, 0xed6bf9d1,
+ 0x3b20d79e, 0xe7821d59, 0x387165e3, 0xe1d4a2c8,
+ 0x3536cc52, 0xdc71898d, 0x317900d6, 0xd76619b6,
+ 0x2d413ccd, 0xd2bec333, 0x2899e64a, 0xce86ff2a,
+ 0x238e7673, 0xcac933ae, 0x1e2b5d38, 0xc78e9a1d,
+ 0x187de2a7, 0xc4df2862, 0x1294062f, 0xc2c17d52,
+ 0x0c7c5c1e, 0xc13ad060, 0x0645e9af, 0xc04ee4b8,
+ 0x00000000, 0xc0000000, 0xf9ba1651, 0xc04ee4b8,
+ 0xf383a3e2, 0xc13ad060, 0xed6bf9d1, 0xc2c17d52,
+ 0xe7821d59, 0xc4df2862, 0xe1d4a2c8, 0xc78e9a1d,
+ 0xdc71898d, 0xcac933ae, 0xd76619b6, 0xce86ff2a,
+ 0xd2bec333, 0xd2bec333, 0xce86ff2a, 0xd76619b6,
+ 0xcac933ae, 0xdc71898d, 0xc78e9a1d, 0xe1d4a2c8,
+ 0xc4df2862, 0xe7821d59, 0xc2c17d52, 0xed6bf9d1,
+ 0xc13ad060, 0xf383a3e2, 0xc04ee4b8, 0xf9ba1651,
+ 0x3ffec42d, 0x00c90e90, 0x3ff4e5e0, 0x025b0caf,
+ 0x3fe12acb, 0x03ecadcf, 0x3fc395f9, 0x057db403,
+ 0x3f9c2bfb, 0x070de172, 0x3f6af2e3, 0x089cf867,
+ 0x3f2ff24a, 0x0a2abb59, 0x3eeb3347, 0x0bb6ecef,
+ 0x3e9cc076, 0x0d415013, 0x3e44a5ef, 0x0ec9a7f3,
+ 0x3de2f148, 0x104fb80e, 0x3d77b192, 0x11d3443f,
+ 0x3d02f757, 0x135410c3, 0x3c84d496, 0x14d1e242,
+ 0x3bfd5cc4, 0x164c7ddd, 0x3b6ca4c4, 0x17c3a931,
+ 0x3ad2c2e8, 0x19372a64, 0x3a2fcee8, 0x1aa6c82b,
+ 0x3983e1e8, 0x1c1249d8, 0x38cf1669, 0x1d79775c,
+ 0x3811884d, 0x1edc1953, 0x374b54ce, 0x2039f90f,
+ 0x367c9a7e, 0x2192e09b, 0x35a5793c, 0x22e69ac8,
+ 0x34c61236, 0x2434f332, 0x33de87de, 0x257db64c,
+ 0x32eefdea, 0x26c0b162, 0x31f79948, 0x27fdb2a7,
+ 0x30f8801f, 0x29348937, 0x2ff1d9c7, 0x2a650525,
+ 0x2ee3cebe, 0x2b8ef77d, 0x2dce88aa, 0x2cb2324c,
+ 0x1ff621e3, 0xfe6e09a1, 0x1fa7557f, 0xfb4dfbe4,
+ 0x1f0a7efc, 0xf83981a1, 0x1e212105, 0xf53832c5,
+ 0x1ced7af4, 0xf25177fb, 0x1b728345, 0xef8c7867,
+ 0x19b3e048, 0xecf00803, 0x17b5df22, 0xea8296cb,
+ 0x157d6935, 0xe84a20de, 0x130ff7fd, 0xe64c1fb8,
+ 0x10738799, 0xe48d7cbb, 0x0dae8805, 0xe312850c,
+ 0x0ac7cd3b, 0xe1dedefb, 0x07c67e5f, 0xe0f58104,
+ 0x04b2041c, 0xe058aa81, 0x0191f65f, 0xe009de1d,
+};
+
+static ogg_int16_t bitrevlook_128[32]={
+ 0x003e, 0x0000, 0x001e, 0x0020,
+ 0x002e, 0x0010, 0x000e, 0x0030,
+ 0x0036, 0x0008, 0x0016, 0x0028,
+ 0x0026, 0x0018, 0x0006, 0x0038,
+ 0x003a, 0x0004, 0x001a, 0x0024,
+ 0x002a, 0x0014, 0x000a, 0x0034,
+ 0x0032, 0x000c, 0x0012, 0x002c,
+ 0x0022, 0x001c, 0x0002, 0x003c,
+};
+
+static ogg_int32_t triglook_256[320]={
+ 0x40000000, 0x00000000, 0x3fec43c7, 0xfcdc1342,
+ 0x3fb11b48, 0xf9ba1651, 0x3f4eaafe, 0xf69bf7c9,
+ 0x3ec52fa0, 0xf383a3e2, 0x3e14fdf7, 0xf0730342,
+ 0x3d3e82ae, 0xed6bf9d1, 0x3c42420a, 0xea70658a,
+ 0x3b20d79e, 0xe7821d59, 0x39daf5e8, 0xe4a2eff6,
+ 0x387165e3, 0xe1d4a2c8, 0x36e5068a, 0xdf18f0ce,
+ 0x3536cc52, 0xdc71898d, 0x3367c090, 0xd9e01006,
+ 0x317900d6, 0xd76619b6, 0x2f6bbe45, 0xd5052d97,
+ 0x2d413ccd, 0xd2bec333, 0x2afad269, 0xd09441bb,
+ 0x2899e64a, 0xce86ff2a, 0x261feffa, 0xcc983f70,
+ 0x238e7673, 0xcac933ae, 0x20e70f32, 0xc91af976,
+ 0x1e2b5d38, 0xc78e9a1d, 0x1b5d100a, 0xc6250a18,
+ 0x187de2a7, 0xc4df2862, 0x158f9a76, 0xc3bdbdf6,
+ 0x1294062f, 0xc2c17d52, 0x0f8cfcbe, 0xc1eb0209,
+ 0x0c7c5c1e, 0xc13ad060, 0x09640837, 0xc0b15502,
+ 0x0645e9af, 0xc04ee4b8, 0x0323ecbe, 0xc013bc39,
+ 0x00000000, 0xc0000000, 0xfcdc1342, 0xc013bc39,
+ 0xf9ba1651, 0xc04ee4b8, 0xf69bf7c9, 0xc0b15502,
+ 0xf383a3e2, 0xc13ad060, 0xf0730342, 0xc1eb0209,
+ 0xed6bf9d1, 0xc2c17d52, 0xea70658a, 0xc3bdbdf6,
+ 0xe7821d59, 0xc4df2862, 0xe4a2eff6, 0xc6250a18,
+ 0xe1d4a2c8, 0xc78e9a1d, 0xdf18f0ce, 0xc91af976,
+ 0xdc71898d, 0xcac933ae, 0xd9e01006, 0xcc983f70,
+ 0xd76619b6, 0xce86ff2a, 0xd5052d97, 0xd09441bb,
+ 0xd2bec333, 0xd2bec333, 0xd09441bb, 0xd5052d97,
+ 0xce86ff2a, 0xd76619b6, 0xcc983f70, 0xd9e01006,
+ 0xcac933ae, 0xdc71898d, 0xc91af976, 0xdf18f0ce,
+ 0xc78e9a1d, 0xe1d4a2c8, 0xc6250a18, 0xe4a2eff6,
+ 0xc4df2862, 0xe7821d59, 0xc3bdbdf6, 0xea70658a,
+ 0xc2c17d52, 0xed6bf9d1, 0xc1eb0209, 0xf0730342,
+ 0xc13ad060, 0xf383a3e2, 0xc0b15502, 0xf69bf7c9,
+ 0xc04ee4b8, 0xf9ba1651, 0xc013bc39, 0xfcdc1342,
+ 0x3fffb10b, 0x006487c4, 0x3ffd3969, 0x012d936c,
+ 0x3ff84a3c, 0x01f69373, 0x3ff0e3b6, 0x02bf801a,
+ 0x3fe7061f, 0x038851a2, 0x3fdab1d9, 0x0451004d,
+ 0x3fcbe75e, 0x0519845e, 0x3fbaa740, 0x05e1d61b,
+ 0x3fa6f228, 0x06a9edc9, 0x3f90c8da, 0x0771c3b3,
+ 0x3f782c30, 0x08395024, 0x3f5d1d1d, 0x09008b6a,
+ 0x3f3f9cab, 0x09c76dd8, 0x3f1fabff, 0x0a8defc3,
+ 0x3efd4c54, 0x0b540982, 0x3ed87efc, 0x0c19b374,
+ 0x3eb14563, 0x0cdee5f9, 0x3e87a10c, 0x0da39978,
+ 0x3e5b9392, 0x0e67c65a, 0x3e2d1ea8, 0x0f2b650f,
+ 0x3dfc4418, 0x0fee6e0d, 0x3dc905c5, 0x10b0d9d0,
+ 0x3d9365a8, 0x1172a0d7, 0x3d5b65d2, 0x1233bbac,
+ 0x3d21086c, 0x12f422db, 0x3ce44fb7, 0x13b3cefa,
+ 0x3ca53e09, 0x1472b8a5, 0x3c63d5d1, 0x1530d881,
+ 0x3c201994, 0x15ee2738, 0x3bda0bf0, 0x16aa9d7e,
+ 0x3b91af97, 0x1766340f, 0x3b470753, 0x1820e3b0,
+ 0x3afa1605, 0x18daa52f, 0x3aaadea6, 0x19937161,
+ 0x3a596442, 0x1a4b4128, 0x3a05a9fd, 0x1b020d6c,
+ 0x39afb313, 0x1bb7cf23, 0x395782d3, 0x1c6c7f4a,
+ 0x38fd1ca4, 0x1d2016e9, 0x38a08402, 0x1dd28f15,
+ 0x3841bc7f, 0x1e83e0eb, 0x37e0c9c3, 0x1f340596,
+ 0x377daf89, 0x1fe2f64c, 0x371871a5, 0x2090ac4d,
+ 0x36b113fd, 0x213d20e8, 0x36479a8e, 0x21e84d76,
+ 0x35dc0968, 0x22922b5e, 0x356e64b2, 0x233ab414,
+ 0x34feb0a5, 0x23e1e117, 0x348cf190, 0x2487abf7,
+ 0x34192bd5, 0x252c0e4f, 0x33a363ec, 0x25cf01c8,
+ 0x332b9e5e, 0x2670801a, 0x32b1dfc9, 0x2710830c,
+ 0x32362ce0, 0x27af0472, 0x31b88a66, 0x284bfe2f,
+ 0x3138fd35, 0x28e76a37, 0x30b78a36, 0x2981428c,
+ 0x30343667, 0x2a19813f, 0x2faf06da, 0x2ab02071,
+ 0x2f2800af, 0x2b451a55, 0x2e9f291b, 0x2bd8692b,
+ 0x2e148566, 0x2c6a0746, 0x2d881ae8, 0x2cf9ef09,
+ 0x1ffd8861, 0xff36f550, 0x1fe9cdad, 0xfda55bee,
+ 0x1fc26471, 0xfc153635, 0x1f8764fa, 0xfa877aef,
+ 0x1f38f3ac, 0xf8fd1f65, 0x1ed740e7, 0xf77716cf,
+ 0x1e6288ec, 0xf5f651b6, 0x1ddb13b7, 0xf47bbd68,
+ 0x1d4134d1, 0xf308435e, 0x1c954b21, 0xf19cc8b3,
+ 0x1bd7c0ac, 0xf03a2d92, 0x1b090a58, 0xeee14cac,
+ 0x1a29a7a0, 0xed92fab3, 0x193a224a, 0xec5005d7,
+ 0x183b0e0c, 0xeb193544, 0x172d0838, 0xe9ef48ab,
+ 0x1610b755, 0xe8d2f7c8, 0x14e6cabc, 0xe7c4f1f4,
+ 0x13affa29, 0xe6c5ddb6, 0x126d054d, 0xe5d65860,
+ 0x111eb354, 0xe4f6f5a8, 0x0fc5d26e, 0xe4283f54,
+ 0x0e63374d, 0xe36ab4df, 0x0cf7bca2, 0xe2becb2f,
+ 0x0b844298, 0xe224ec49, 0x0a09ae4a, 0xe19d7714,
+ 0x0888e931, 0xe128bf19, 0x0702e09b, 0xe0c70c54,
+ 0x05788511, 0xe0789b06, 0x03eac9cb, 0xe03d9b8f,
+ 0x025aa412, 0xe0163253, 0x00c90ab0, 0xe002779f,
+};
+
+static ogg_int16_t bitrevlook_256[64]={
+ 0x007e, 0x0000, 0x003e, 0x0040,
+ 0x005e, 0x0020, 0x001e, 0x0060,
+ 0x006e, 0x0010, 0x002e, 0x0050,
+ 0x004e, 0x0030, 0x000e, 0x0070,
+ 0x0076, 0x0008, 0x0036, 0x0048,
+ 0x0056, 0x0028, 0x0016, 0x0068,
+ 0x0066, 0x0018, 0x0026, 0x0058,
+ 0x0046, 0x0038, 0x0006, 0x0078,
+ 0x007a, 0x0004, 0x003a, 0x0044,
+ 0x005a, 0x0024, 0x001a, 0x0064,
+ 0x006a, 0x0014, 0x002a, 0x0054,
+ 0x004a, 0x0034, 0x000a, 0x0074,
+ 0x0072, 0x000c, 0x0032, 0x004c,
+ 0x0052, 0x002c, 0x0012, 0x006c,
+ 0x0062, 0x001c, 0x0022, 0x005c,
+ 0x0042, 0x003c, 0x0002, 0x007c,
+};
+
+static ogg_int32_t triglook_512[640]={
+ 0x40000000, 0x00000000, 0x3ffb10c1, 0xfe6deaa1,
+ 0x3fec43c7, 0xfcdc1342, 0x3fd39b5a, 0xfb4ab7db,
+ 0x3fb11b48, 0xf9ba1651, 0x3f84c8e2, 0xf82a6c6a,
+ 0x3f4eaafe, 0xf69bf7c9, 0x3f0ec9f5, 0xf50ef5de,
+ 0x3ec52fa0, 0xf383a3e2, 0x3e71e759, 0xf1fa3ecb,
+ 0x3e14fdf7, 0xf0730342, 0x3dae81cf, 0xeeee2d9d,
+ 0x3d3e82ae, 0xed6bf9d1, 0x3cc511d9, 0xebeca36c,
+ 0x3c42420a, 0xea70658a, 0x3bb6276e, 0xe8f77acf,
+ 0x3b20d79e, 0xe7821d59, 0x3a8269a3, 0xe61086bc,
+ 0x39daf5e8, 0xe4a2eff6, 0x392a9642, 0xe3399167,
+ 0x387165e3, 0xe1d4a2c8, 0x37af8159, 0xe0745b24,
+ 0x36e5068a, 0xdf18f0ce, 0x361214b0, 0xddc29958,
+ 0x3536cc52, 0xdc71898d, 0x34534f41, 0xdb25f566,
+ 0x3367c090, 0xd9e01006, 0x32744493, 0xd8a00bae,
+ 0x317900d6, 0xd76619b6, 0x30761c18, 0xd6326a88,
+ 0x2f6bbe45, 0xd5052d97, 0x2e5a1070, 0xd3de9156,
+ 0x2d413ccd, 0xd2bec333, 0x2c216eaa, 0xd1a5ef90,
+ 0x2afad269, 0xd09441bb, 0x29cd9578, 0xcf89e3e8,
+ 0x2899e64a, 0xce86ff2a, 0x275ff452, 0xcd8bbb6d,
+ 0x261feffa, 0xcc983f70, 0x24da0a9a, 0xcbacb0bf,
+ 0x238e7673, 0xcac933ae, 0x223d66a8, 0xc9edeb50,
+ 0x20e70f32, 0xc91af976, 0x1f8ba4dc, 0xc8507ea7,
+ 0x1e2b5d38, 0xc78e9a1d, 0x1cc66e99, 0xc6d569be,
+ 0x1b5d100a, 0xc6250a18, 0x19ef7944, 0xc57d965d,
+ 0x187de2a7, 0xc4df2862, 0x17088531, 0xc449d892,
+ 0x158f9a76, 0xc3bdbdf6, 0x14135c94, 0xc33aee27,
+ 0x1294062f, 0xc2c17d52, 0x1111d263, 0xc2517e31,
+ 0x0f8cfcbe, 0xc1eb0209, 0x0e05c135, 0xc18e18a7,
+ 0x0c7c5c1e, 0xc13ad060, 0x0af10a22, 0xc0f1360b,
+ 0x09640837, 0xc0b15502, 0x07d59396, 0xc07b371e,
+ 0x0645e9af, 0xc04ee4b8, 0x04b54825, 0xc02c64a6,
+ 0x0323ecbe, 0xc013bc39, 0x0192155f, 0xc004ef3f,
+ 0x00000000, 0xc0000000, 0xfe6deaa1, 0xc004ef3f,
+ 0xfcdc1342, 0xc013bc39, 0xfb4ab7db, 0xc02c64a6,
+ 0xf9ba1651, 0xc04ee4b8, 0xf82a6c6a, 0xc07b371e,
+ 0xf69bf7c9, 0xc0b15502, 0xf50ef5de, 0xc0f1360b,
+ 0xf383a3e2, 0xc13ad060, 0xf1fa3ecb, 0xc18e18a7,
+ 0xf0730342, 0xc1eb0209, 0xeeee2d9d, 0xc2517e31,
+ 0xed6bf9d1, 0xc2c17d52, 0xebeca36c, 0xc33aee27,
+ 0xea70658a, 0xc3bdbdf6, 0xe8f77acf, 0xc449d892,
+ 0xe7821d59, 0xc4df2862, 0xe61086bc, 0xc57d965d,
+ 0xe4a2eff6, 0xc6250a18, 0xe3399167, 0xc6d569be,
+ 0xe1d4a2c8, 0xc78e9a1d, 0xe0745b24, 0xc8507ea7,
+ 0xdf18f0ce, 0xc91af976, 0xddc29958, 0xc9edeb50,
+ 0xdc71898d, 0xcac933ae, 0xdb25f566, 0xcbacb0bf,
+ 0xd9e01006, 0xcc983f70, 0xd8a00bae, 0xcd8bbb6d,
+ 0xd76619b6, 0xce86ff2a, 0xd6326a88, 0xcf89e3e8,
+ 0xd5052d97, 0xd09441bb, 0xd3de9156, 0xd1a5ef90,
+ 0xd2bec333, 0xd2bec333, 0xd1a5ef90, 0xd3de9156,
+ 0xd09441bb, 0xd5052d97, 0xcf89e3e8, 0xd6326a88,
+ 0xce86ff2a, 0xd76619b6, 0xcd8bbb6d, 0xd8a00bae,
+ 0xcc983f70, 0xd9e01006, 0xcbacb0bf, 0xdb25f566,
+ 0xcac933ae, 0xdc71898d, 0xc9edeb50, 0xddc29958,
+ 0xc91af976, 0xdf18f0ce, 0xc8507ea7, 0xe0745b24,
+ 0xc78e9a1d, 0xe1d4a2c8, 0xc6d569be, 0xe3399167,
+ 0xc6250a18, 0xe4a2eff6, 0xc57d965d, 0xe61086bc,
+ 0xc4df2862, 0xe7821d59, 0xc449d892, 0xe8f77acf,
+ 0xc3bdbdf6, 0xea70658a, 0xc33aee27, 0xebeca36c,
+ 0xc2c17d52, 0xed6bf9d1, 0xc2517e31, 0xeeee2d9d,
+ 0xc1eb0209, 0xf0730342, 0xc18e18a7, 0xf1fa3ecb,
+ 0xc13ad060, 0xf383a3e2, 0xc0f1360b, 0xf50ef5de,
+ 0xc0b15502, 0xf69bf7c9, 0xc07b371e, 0xf82a6c6a,
+ 0xc04ee4b8, 0xf9ba1651, 0xc02c64a6, 0xfb4ab7db,
+ 0xc013bc39, 0xfcdc1342, 0xc004ef3f, 0xfe6deaa1,
+ 0x3fffec43, 0x003243f1, 0x3fff4e59, 0x0096cb58,
+ 0x3ffe1288, 0x00fb514b, 0x3ffc38d1, 0x015fd4d2,
+ 0x3ff9c13a, 0x01c454f5, 0x3ff6abc8, 0x0228d0bb,
+ 0x3ff2f884, 0x028d472e, 0x3feea776, 0x02f1b755,
+ 0x3fe9b8a9, 0x03562038, 0x3fe42c2a, 0x03ba80df,
+ 0x3fde0205, 0x041ed854, 0x3fd73a4a, 0x0483259d,
+ 0x3fcfd50b, 0x04e767c5, 0x3fc7d258, 0x054b9dd3,
+ 0x3fbf3246, 0x05afc6d0, 0x3fb5f4ea, 0x0613e1c5,
+ 0x3fac1a5b, 0x0677edbb, 0x3fa1a2b2, 0x06dbe9bb,
+ 0x3f968e07, 0x073fd4cf, 0x3f8adc77, 0x07a3adff,
+ 0x3f7e8e1e, 0x08077457, 0x3f71a31b, 0x086b26de,
+ 0x3f641b8d, 0x08cec4a0, 0x3f55f796, 0x09324ca7,
+ 0x3f473759, 0x0995bdfd, 0x3f37dafa, 0x09f917ac,
+ 0x3f27e29f, 0x0a5c58c0, 0x3f174e70, 0x0abf8043,
+ 0x3f061e95, 0x0b228d42, 0x3ef45338, 0x0b857ec7,
+ 0x3ee1ec87, 0x0be853de, 0x3eceeaad, 0x0c4b0b94,
+ 0x3ebb4ddb, 0x0cada4f5, 0x3ea7163f, 0x0d101f0e,
+ 0x3e92440d, 0x0d7278eb, 0x3e7cd778, 0x0dd4b19a,
+ 0x3e66d0b4, 0x0e36c82a, 0x3e502ff9, 0x0e98bba7,
+ 0x3e38f57c, 0x0efa8b20, 0x3e212179, 0x0f5c35a3,
+ 0x3e08b42a, 0x0fbdba40, 0x3defadca, 0x101f1807,
+ 0x3dd60e99, 0x10804e06, 0x3dbbd6d4, 0x10e15b4e,
+ 0x3da106bd, 0x11423ef0, 0x3d859e96, 0x11a2f7fc,
+ 0x3d699ea3, 0x12038584, 0x3d4d0728, 0x1263e699,
+ 0x3d2fd86c, 0x12c41a4f, 0x3d1212b7, 0x13241fb6,
+ 0x3cf3b653, 0x1383f5e3, 0x3cd4c38b, 0x13e39be9,
+ 0x3cb53aaa, 0x144310dd, 0x3c951bff, 0x14a253d1,
+ 0x3c7467d9, 0x150163dc, 0x3c531e88, 0x15604013,
+ 0x3c314060, 0x15bee78c, 0x3c0ecdb2, 0x161d595d,
+ 0x3bebc6d5, 0x167b949d, 0x3bc82c1f, 0x16d99864,
+ 0x3ba3fde7, 0x173763c9, 0x3b7f3c87, 0x1794f5e6,
+ 0x3b59e85a, 0x17f24dd3, 0x3b3401bb, 0x184f6aab,
+ 0x3b0d8909, 0x18ac4b87, 0x3ae67ea1, 0x1908ef82,
+ 0x3abee2e5, 0x196555b8, 0x3a96b636, 0x19c17d44,
+ 0x3a6df8f8, 0x1a1d6544, 0x3a44ab8e, 0x1a790cd4,
+ 0x3a1ace5f, 0x1ad47312, 0x39f061d2, 0x1b2f971e,
+ 0x39c5664f, 0x1b8a7815, 0x3999dc42, 0x1be51518,
+ 0x396dc414, 0x1c3f6d47, 0x39411e33, 0x1c997fc4,
+ 0x3913eb0e, 0x1cf34baf, 0x38e62b13, 0x1d4cd02c,
+ 0x38b7deb4, 0x1da60c5d, 0x38890663, 0x1dfeff67,
+ 0x3859a292, 0x1e57a86d, 0x3829b3b9, 0x1eb00696,
+ 0x37f93a4b, 0x1f081907, 0x37c836c2, 0x1f5fdee6,
+ 0x3796a996, 0x1fb7575c, 0x37649341, 0x200e8190,
+ 0x3731f440, 0x20655cac, 0x36fecd0e, 0x20bbe7d8,
+ 0x36cb1e2a, 0x21122240, 0x3696e814, 0x21680b0f,
+ 0x36622b4c, 0x21bda171, 0x362ce855, 0x2212e492,
+ 0x35f71fb1, 0x2267d3a0, 0x35c0d1e7, 0x22bc6dca,
+ 0x3589ff7a, 0x2310b23e, 0x3552a8f4, 0x2364a02e,
+ 0x351acedd, 0x23b836ca, 0x34e271bd, 0x240b7543,
+ 0x34a99221, 0x245e5acc, 0x34703095, 0x24b0e699,
+ 0x34364da6, 0x250317df, 0x33fbe9e2, 0x2554edd1,
+ 0x33c105db, 0x25a667a7, 0x3385a222, 0x25f78497,
+ 0x3349bf48, 0x264843d9, 0x330d5de3, 0x2698a4a6,
+ 0x32d07e85, 0x26e8a637, 0x329321c7, 0x273847c8,
+ 0x32554840, 0x27878893, 0x3216f287, 0x27d667d5,
+ 0x31d82137, 0x2824e4cc, 0x3198d4ea, 0x2872feb6,
+ 0x31590e3e, 0x28c0b4d2, 0x3118cdcf, 0x290e0661,
+ 0x30d8143b, 0x295af2a3, 0x3096e223, 0x29a778db,
+ 0x30553828, 0x29f3984c, 0x301316eb, 0x2a3f503a,
+ 0x2fd07f0f, 0x2a8a9fea, 0x2f8d713a, 0x2ad586a3,
+ 0x2f49ee0f, 0x2b2003ac, 0x2f05f637, 0x2b6a164d,
+ 0x2ec18a58, 0x2bb3bdce, 0x2e7cab1c, 0x2bfcf97c,
+ 0x2e37592c, 0x2c45c8a0, 0x2df19534, 0x2c8e2a87,
+ 0x2dab5fdf, 0x2cd61e7f, 0x2d64b9da, 0x2d1da3d5,
+ 0x1fff6217, 0xff9b78b8, 0x1ffa72f0, 0xfed279a9,
+ 0x1ff09566, 0xfe09a918, 0x1fe1cafd, 0xfd4125ff,
+ 0x1fce15fd, 0xfc790f47, 0x1fb57972, 0xfbb183cc,
+ 0x1f97f925, 0xfaeaa254, 0x1f7599a4, 0xfa248988,
+ 0x1f4e603b, 0xf95f57f7, 0x1f2252f7, 0xf89b2c07,
+ 0x1ef178a4, 0xf7d823f9, 0x1ebbd8c9, 0xf7165de0,
+ 0x1e817bab, 0xf655f79f, 0x1e426a4b, 0xf5970edf,
+ 0x1dfeae62, 0xf4d9c111, 0x1db65262, 0xf41e2b67,
+ 0x1d696174, 0xf3646ace, 0x1d17e774, 0xf2ac9bea,
+ 0x1cc1f0f4, 0xf1f6db14, 0x1c678b35, 0xf1434452,
+ 0x1c08c426, 0xf091f357, 0x1ba5aa67, 0xefe30379,
+ 0x1b3e4d3f, 0xef368fb3, 0x1ad2bc9e, 0xee8cb29c,
+ 0x1a63091b, 0xede58667, 0x19ef43ef, 0xed4124da,
+ 0x19777ef5, 0xec9fa74f, 0x18fbcca4, 0xec0126ad,
+ 0x187c4010, 0xeb65bb64, 0x17f8ece3, 0xeacd7d6d,
+ 0x1771e75f, 0xea388442, 0x16e74455, 0xe9a6e6da,
+ 0x16591926, 0xe918bbab, 0x15c77bbe, 0xe88e18a1,
+ 0x15328293, 0xe807131d, 0x149a449c, 0xe783bff0,
+ 0x13fed953, 0xe704335c, 0x136058b1, 0xe688810b,
+ 0x12bedb26, 0xe610bc11, 0x121a7999, 0xe59cf6e5,
+ 0x11734d64, 0xe52d4362, 0x10c9704d, 0xe4c1b2c1,
+ 0x101cfc87, 0xe45a5599, 0x0f6e0ca9, 0xe3f73bda,
+ 0x0ebcbbae, 0xe39874cb, 0x0e0924ec, 0xe33e0f0c,
+ 0x0d536416, 0xe2e8188c, 0x0c9b9532, 0xe2969e8c,
+ 0x0be1d499, 0xe249ad9e, 0x0b263eef, 0xe201519e,
+ 0x0a68f121, 0xe1bd95b5, 0x09aa0861, 0xe17e8455,
+ 0x08e9a220, 0xe1442737, 0x0827dc07, 0xe10e875c,
+ 0x0764d3f9, 0xe0ddad09, 0x06a0a809, 0xe0b19fc5,
+ 0x05db7678, 0xe08a665c, 0x05155dac, 0xe06806db,
+ 0x044e7c34, 0xe04a868e, 0x0386f0b9, 0xe031ea03,
+ 0x02beda01, 0xe01e3503, 0x01f656e8, 0xe00f6a9a,
+ 0x012d8657, 0xe0058d10, 0x00648748, 0xe0009de9,
+};
+
+static ogg_int16_t bitrevlook_512[128]={
+ 0x00fe, 0x0000, 0x007e, 0x0080,
+ 0x00be, 0x0040, 0x003e, 0x00c0,
+ 0x00de, 0x0020, 0x005e, 0x00a0,
+ 0x009e, 0x0060, 0x001e, 0x00e0,
+ 0x00ee, 0x0010, 0x006e, 0x0090,
+ 0x00ae, 0x0050, 0x002e, 0x00d0,
+ 0x00ce, 0x0030, 0x004e, 0x00b0,
+ 0x008e, 0x0070, 0x000e, 0x00f0,
+ 0x00f6, 0x0008, 0x0076, 0x0088,
+ 0x00b6, 0x0048, 0x0036, 0x00c8,
+ 0x00d6, 0x0028, 0x0056, 0x00a8,
+ 0x0096, 0x0068, 0x0016, 0x00e8,
+ 0x00e6, 0x0018, 0x0066, 0x0098,
+ 0x00a6, 0x0058, 0x0026, 0x00d8,
+ 0x00c6, 0x0038, 0x0046, 0x00b8,
+ 0x0086, 0x0078, 0x0006, 0x00f8,
+ 0x00fa, 0x0004, 0x007a, 0x0084,
+ 0x00ba, 0x0044, 0x003a, 0x00c4,
+ 0x00da, 0x0024, 0x005a, 0x00a4,
+ 0x009a, 0x0064, 0x001a, 0x00e4,
+ 0x00ea, 0x0014, 0x006a, 0x0094,
+ 0x00aa, 0x0054, 0x002a, 0x00d4,
+ 0x00ca, 0x0034, 0x004a, 0x00b4,
+ 0x008a, 0x0074, 0x000a, 0x00f4,
+ 0x00f2, 0x000c, 0x0072, 0x008c,
+ 0x00b2, 0x004c, 0x0032, 0x00cc,
+ 0x00d2, 0x002c, 0x0052, 0x00ac,
+ 0x0092, 0x006c, 0x0012, 0x00ec,
+ 0x00e2, 0x001c, 0x0062, 0x009c,
+ 0x00a2, 0x005c, 0x0022, 0x00dc,
+ 0x00c2, 0x003c, 0x0042, 0x00bc,
+ 0x0082, 0x007c, 0x0002, 0x00fc,
+};
+
+static ogg_int32_t triglook_1024[1280]={
+ 0x40000000, 0x00000000, 0x3ffec42d, 0xff36f170,
+ 0x3ffb10c1, 0xfe6deaa1, 0x3ff4e5e0, 0xfda4f351,
+ 0x3fec43c7, 0xfcdc1342, 0x3fe12acb, 0xfc135231,
+ 0x3fd39b5a, 0xfb4ab7db, 0x3fc395f9, 0xfa824bfd,
+ 0x3fb11b48, 0xf9ba1651, 0x3f9c2bfb, 0xf8f21e8e,
+ 0x3f84c8e2, 0xf82a6c6a, 0x3f6af2e3, 0xf7630799,
+ 0x3f4eaafe, 0xf69bf7c9, 0x3f2ff24a, 0xf5d544a7,
+ 0x3f0ec9f5, 0xf50ef5de, 0x3eeb3347, 0xf4491311,
+ 0x3ec52fa0, 0xf383a3e2, 0x3e9cc076, 0xf2beafed,
+ 0x3e71e759, 0xf1fa3ecb, 0x3e44a5ef, 0xf136580d,
+ 0x3e14fdf7, 0xf0730342, 0x3de2f148, 0xefb047f2,
+ 0x3dae81cf, 0xeeee2d9d, 0x3d77b192, 0xee2cbbc1,
+ 0x3d3e82ae, 0xed6bf9d1, 0x3d02f757, 0xecabef3d,
+ 0x3cc511d9, 0xebeca36c, 0x3c84d496, 0xeb2e1dbe,
+ 0x3c42420a, 0xea70658a, 0x3bfd5cc4, 0xe9b38223,
+ 0x3bb6276e, 0xe8f77acf, 0x3b6ca4c4, 0xe83c56cf,
+ 0x3b20d79e, 0xe7821d59, 0x3ad2c2e8, 0xe6c8d59c,
+ 0x3a8269a3, 0xe61086bc, 0x3a2fcee8, 0xe55937d5,
+ 0x39daf5e8, 0xe4a2eff6, 0x3983e1e8, 0xe3edb628,
+ 0x392a9642, 0xe3399167, 0x38cf1669, 0xe28688a4,
+ 0x387165e3, 0xe1d4a2c8, 0x3811884d, 0xe123e6ad,
+ 0x37af8159, 0xe0745b24, 0x374b54ce, 0xdfc606f1,
+ 0x36e5068a, 0xdf18f0ce, 0x367c9a7e, 0xde6d1f65,
+ 0x361214b0, 0xddc29958, 0x35a5793c, 0xdd196538,
+ 0x3536cc52, 0xdc71898d, 0x34c61236, 0xdbcb0cce,
+ 0x34534f41, 0xdb25f566, 0x33de87de, 0xda8249b4,
+ 0x3367c090, 0xd9e01006, 0x32eefdea, 0xd93f4e9e,
+ 0x32744493, 0xd8a00bae, 0x31f79948, 0xd8024d59,
+ 0x317900d6, 0xd76619b6, 0x30f8801f, 0xd6cb76c9,
+ 0x30761c18, 0xd6326a88, 0x2ff1d9c7, 0xd59afadb,
+ 0x2f6bbe45, 0xd5052d97, 0x2ee3cebe, 0xd4710883,
+ 0x2e5a1070, 0xd3de9156, 0x2dce88aa, 0xd34dcdb4,
+ 0x2d413ccd, 0xd2bec333, 0x2cb2324c, 0xd2317756,
+ 0x2c216eaa, 0xd1a5ef90, 0x2b8ef77d, 0xd11c3142,
+ 0x2afad269, 0xd09441bb, 0x2a650525, 0xd00e2639,
+ 0x29cd9578, 0xcf89e3e8, 0x29348937, 0xcf077fe1,
+ 0x2899e64a, 0xce86ff2a, 0x27fdb2a7, 0xce0866b8,
+ 0x275ff452, 0xcd8bbb6d, 0x26c0b162, 0xcd110216,
+ 0x261feffa, 0xcc983f70, 0x257db64c, 0xcc217822,
+ 0x24da0a9a, 0xcbacb0bf, 0x2434f332, 0xcb39edca,
+ 0x238e7673, 0xcac933ae, 0x22e69ac8, 0xca5a86c4,
+ 0x223d66a8, 0xc9edeb50, 0x2192e09b, 0xc9836582,
+ 0x20e70f32, 0xc91af976, 0x2039f90f, 0xc8b4ab32,
+ 0x1f8ba4dc, 0xc8507ea7, 0x1edc1953, 0xc7ee77b3,
+ 0x1e2b5d38, 0xc78e9a1d, 0x1d79775c, 0xc730e997,
+ 0x1cc66e99, 0xc6d569be, 0x1c1249d8, 0xc67c1e18,
+ 0x1b5d100a, 0xc6250a18, 0x1aa6c82b, 0xc5d03118,
+ 0x19ef7944, 0xc57d965d, 0x19372a64, 0xc52d3d18,
+ 0x187de2a7, 0xc4df2862, 0x17c3a931, 0xc4935b3c,
+ 0x17088531, 0xc449d892, 0x164c7ddd, 0xc402a33c,
+ 0x158f9a76, 0xc3bdbdf6, 0x14d1e242, 0xc37b2b6a,
+ 0x14135c94, 0xc33aee27, 0x135410c3, 0xc2fd08a9,
+ 0x1294062f, 0xc2c17d52, 0x11d3443f, 0xc2884e6e,
+ 0x1111d263, 0xc2517e31, 0x104fb80e, 0xc21d0eb8,
+ 0x0f8cfcbe, 0xc1eb0209, 0x0ec9a7f3, 0xc1bb5a11,
+ 0x0e05c135, 0xc18e18a7, 0x0d415013, 0xc1633f8a,
+ 0x0c7c5c1e, 0xc13ad060, 0x0bb6ecef, 0xc114ccb9,
+ 0x0af10a22, 0xc0f1360b, 0x0a2abb59, 0xc0d00db6,
+ 0x09640837, 0xc0b15502, 0x089cf867, 0xc0950d1d,
+ 0x07d59396, 0xc07b371e, 0x070de172, 0xc063d405,
+ 0x0645e9af, 0xc04ee4b8, 0x057db403, 0xc03c6a07,
+ 0x04b54825, 0xc02c64a6, 0x03ecadcf, 0xc01ed535,
+ 0x0323ecbe, 0xc013bc39, 0x025b0caf, 0xc00b1a20,
+ 0x0192155f, 0xc004ef3f, 0x00c90e90, 0xc0013bd3,
+ 0x00000000, 0xc0000000, 0xff36f170, 0xc0013bd3,
+ 0xfe6deaa1, 0xc004ef3f, 0xfda4f351, 0xc00b1a20,
+ 0xfcdc1342, 0xc013bc39, 0xfc135231, 0xc01ed535,
+ 0xfb4ab7db, 0xc02c64a6, 0xfa824bfd, 0xc03c6a07,
+ 0xf9ba1651, 0xc04ee4b8, 0xf8f21e8e, 0xc063d405,
+ 0xf82a6c6a, 0xc07b371e, 0xf7630799, 0xc0950d1d,
+ 0xf69bf7c9, 0xc0b15502, 0xf5d544a7, 0xc0d00db6,
+ 0xf50ef5de, 0xc0f1360b, 0xf4491311, 0xc114ccb9,
+ 0xf383a3e2, 0xc13ad060, 0xf2beafed, 0xc1633f8a,
+ 0xf1fa3ecb, 0xc18e18a7, 0xf136580d, 0xc1bb5a11,
+ 0xf0730342, 0xc1eb0209, 0xefb047f2, 0xc21d0eb8,
+ 0xeeee2d9d, 0xc2517e31, 0xee2cbbc1, 0xc2884e6e,
+ 0xed6bf9d1, 0xc2c17d52, 0xecabef3d, 0xc2fd08a9,
+ 0xebeca36c, 0xc33aee27, 0xeb2e1dbe, 0xc37b2b6a,
+ 0xea70658a, 0xc3bdbdf6, 0xe9b38223, 0xc402a33c,
+ 0xe8f77acf, 0xc449d892, 0xe83c56cf, 0xc4935b3c,
+ 0xe7821d59, 0xc4df2862, 0xe6c8d59c, 0xc52d3d18,
+ 0xe61086bc, 0xc57d965d, 0xe55937d5, 0xc5d03118,
+ 0xe4a2eff6, 0xc6250a18, 0xe3edb628, 0xc67c1e18,
+ 0xe3399167, 0xc6d569be, 0xe28688a4, 0xc730e997,
+ 0xe1d4a2c8, 0xc78e9a1d, 0xe123e6ad, 0xc7ee77b3,
+ 0xe0745b24, 0xc8507ea7, 0xdfc606f1, 0xc8b4ab32,
+ 0xdf18f0ce, 0xc91af976, 0xde6d1f65, 0xc9836582,
+ 0xddc29958, 0xc9edeb50, 0xdd196538, 0xca5a86c4,
+ 0xdc71898d, 0xcac933ae, 0xdbcb0cce, 0xcb39edca,
+ 0xdb25f566, 0xcbacb0bf, 0xda8249b4, 0xcc217822,
+ 0xd9e01006, 0xcc983f70, 0xd93f4e9e, 0xcd110216,
+ 0xd8a00bae, 0xcd8bbb6d, 0xd8024d59, 0xce0866b8,
+ 0xd76619b6, 0xce86ff2a, 0xd6cb76c9, 0xcf077fe1,
+ 0xd6326a88, 0xcf89e3e8, 0xd59afadb, 0xd00e2639,
+ 0xd5052d97, 0xd09441bb, 0xd4710883, 0xd11c3142,
+ 0xd3de9156, 0xd1a5ef90, 0xd34dcdb4, 0xd2317756,
+ 0xd2bec333, 0xd2bec333, 0xd2317756, 0xd34dcdb4,
+ 0xd1a5ef90, 0xd3de9156, 0xd11c3142, 0xd4710883,
+ 0xd09441bb, 0xd5052d97, 0xd00e2639, 0xd59afadb,
+ 0xcf89e3e8, 0xd6326a88, 0xcf077fe1, 0xd6cb76c9,
+ 0xce86ff2a, 0xd76619b6, 0xce0866b8, 0xd8024d59,
+ 0xcd8bbb6d, 0xd8a00bae, 0xcd110216, 0xd93f4e9e,
+ 0xcc983f70, 0xd9e01006, 0xcc217822, 0xda8249b4,
+ 0xcbacb0bf, 0xdb25f566, 0xcb39edca, 0xdbcb0cce,
+ 0xcac933ae, 0xdc71898d, 0xca5a86c4, 0xdd196538,
+ 0xc9edeb50, 0xddc29958, 0xc9836582, 0xde6d1f65,
+ 0xc91af976, 0xdf18f0ce, 0xc8b4ab32, 0xdfc606f1,
+ 0xc8507ea7, 0xe0745b24, 0xc7ee77b3, 0xe123e6ad,
+ 0xc78e9a1d, 0xe1d4a2c8, 0xc730e997, 0xe28688a4,
+ 0xc6d569be, 0xe3399167, 0xc67c1e18, 0xe3edb628,
+ 0xc6250a18, 0xe4a2eff6, 0xc5d03118, 0xe55937d5,
+ 0xc57d965d, 0xe61086bc, 0xc52d3d18, 0xe6c8d59c,
+ 0xc4df2862, 0xe7821d59, 0xc4935b3c, 0xe83c56cf,
+ 0xc449d892, 0xe8f77acf, 0xc402a33c, 0xe9b38223,
+ 0xc3bdbdf6, 0xea70658a, 0xc37b2b6a, 0xeb2e1dbe,
+ 0xc33aee27, 0xebeca36c, 0xc2fd08a9, 0xecabef3d,
+ 0xc2c17d52, 0xed6bf9d1, 0xc2884e6e, 0xee2cbbc1,
+ 0xc2517e31, 0xeeee2d9d, 0xc21d0eb8, 0xefb047f2,
+ 0xc1eb0209, 0xf0730342, 0xc1bb5a11, 0xf136580d,
+ 0xc18e18a7, 0xf1fa3ecb, 0xc1633f8a, 0xf2beafed,
+ 0xc13ad060, 0xf383a3e2, 0xc114ccb9, 0xf4491311,
+ 0xc0f1360b, 0xf50ef5de, 0xc0d00db6, 0xf5d544a7,
+ 0xc0b15502, 0xf69bf7c9, 0xc0950d1d, 0xf7630799,
+ 0xc07b371e, 0xf82a6c6a, 0xc063d405, 0xf8f21e8e,
+ 0xc04ee4b8, 0xf9ba1651, 0xc03c6a07, 0xfa824bfd,
+ 0xc02c64a6, 0xfb4ab7db, 0xc01ed535, 0xfc135231,
+ 0xc013bc39, 0xfcdc1342, 0xc00b1a20, 0xfda4f351,
+ 0xc004ef3f, 0xfe6deaa1, 0xc0013bd3, 0xff36f170,
+ 0x3ffffb11, 0x001921fb, 0x3fffd396, 0x004b65e1,
+ 0x3fff84a1, 0x007da998, 0x3fff0e32, 0x00afed02,
+ 0x3ffe704a, 0x00e22fff, 0x3ffdaae7, 0x01147271,
+ 0x3ffcbe0c, 0x0146b438, 0x3ffba9b8, 0x0178f536,
+ 0x3ffa6dec, 0x01ab354b, 0x3ff90aaa, 0x01dd7459,
+ 0x3ff77ff1, 0x020fb240, 0x3ff5cdc3, 0x0241eee2,
+ 0x3ff3f420, 0x02742a1f, 0x3ff1f30b, 0x02a663d8,
+ 0x3fefca84, 0x02d89bf0, 0x3fed7a8c, 0x030ad245,
+ 0x3feb0326, 0x033d06bb, 0x3fe86452, 0x036f3931,
+ 0x3fe59e12, 0x03a16988, 0x3fe2b067, 0x03d397a3,
+ 0x3fdf9b55, 0x0405c361, 0x3fdc5edc, 0x0437eca4,
+ 0x3fd8fafe, 0x046a134c, 0x3fd56fbe, 0x049c373c,
+ 0x3fd1bd1e, 0x04ce5854, 0x3fcde320, 0x05007674,
+ 0x3fc9e1c6, 0x0532917f, 0x3fc5b913, 0x0564a955,
+ 0x3fc1690a, 0x0596bdd7, 0x3fbcf1ad, 0x05c8cee7,
+ 0x3fb852ff, 0x05fadc66, 0x3fb38d02, 0x062ce634,
+ 0x3fae9fbb, 0x065eec33, 0x3fa98b2a, 0x0690ee44,
+ 0x3fa44f55, 0x06c2ec48, 0x3f9eec3e, 0x06f4e620,
+ 0x3f9961e8, 0x0726dbae, 0x3f93b058, 0x0758ccd2,
+ 0x3f8dd78f, 0x078ab96e, 0x3f87d792, 0x07bca163,
+ 0x3f81b065, 0x07ee8493, 0x3f7b620c, 0x082062de,
+ 0x3f74ec8a, 0x08523c25, 0x3f6e4fe3, 0x0884104b,
+ 0x3f678c1c, 0x08b5df30, 0x3f60a138, 0x08e7a8b5,
+ 0x3f598f3c, 0x09196cbc, 0x3f52562c, 0x094b2b27,
+ 0x3f4af60d, 0x097ce3d5, 0x3f436ee3, 0x09ae96aa,
+ 0x3f3bc0b3, 0x09e04385, 0x3f33eb81, 0x0a11ea49,
+ 0x3f2bef53, 0x0a438ad7, 0x3f23cc2e, 0x0a752510,
+ 0x3f1b8215, 0x0aa6b8d5, 0x3f13110f, 0x0ad84609,
+ 0x3f0a7921, 0x0b09cc8c, 0x3f01ba50, 0x0b3b4c40,
+ 0x3ef8d4a1, 0x0b6cc506, 0x3eefc81a, 0x0b9e36c0,
+ 0x3ee694c1, 0x0bcfa150, 0x3edd3a9a, 0x0c010496,
+ 0x3ed3b9ad, 0x0c326075, 0x3eca11fe, 0x0c63b4ce,
+ 0x3ec04394, 0x0c950182, 0x3eb64e75, 0x0cc64673,
+ 0x3eac32a6, 0x0cf78383, 0x3ea1f02f, 0x0d28b894,
+ 0x3e978715, 0x0d59e586, 0x3e8cf75f, 0x0d8b0a3d,
+ 0x3e824114, 0x0dbc2698, 0x3e77643a, 0x0ded3a7b,
+ 0x3e6c60d7, 0x0e1e45c6, 0x3e6136f3, 0x0e4f485c,
+ 0x3e55e694, 0x0e80421e, 0x3e4a6fc1, 0x0eb132ef,
+ 0x3e3ed282, 0x0ee21aaf, 0x3e330ede, 0x0f12f941,
+ 0x3e2724db, 0x0f43ce86, 0x3e1b1482, 0x0f749a61,
+ 0x3e0eddd9, 0x0fa55cb4, 0x3e0280e9, 0x0fd6155f,
+ 0x3df5fdb8, 0x1006c446, 0x3de9544f, 0x1037694b,
+ 0x3ddc84b5, 0x1068044e, 0x3dcf8ef3, 0x10989532,
+ 0x3dc2730f, 0x10c91bda, 0x3db53113, 0x10f99827,
+ 0x3da7c907, 0x112a09fc, 0x3d9a3af2, 0x115a713a,
+ 0x3d8c86de, 0x118acdc4, 0x3d7eacd2, 0x11bb1f7c,
+ 0x3d70acd7, 0x11eb6643, 0x3d6286f6, 0x121ba1fd,
+ 0x3d543b37, 0x124bd28c, 0x3d45c9a4, 0x127bf7d1,
+ 0x3d373245, 0x12ac11af, 0x3d287523, 0x12dc2009,
+ 0x3d199248, 0x130c22c1, 0x3d0a89bc, 0x133c19b8,
+ 0x3cfb5b89, 0x136c04d2, 0x3cec07b8, 0x139be3f2,
+ 0x3cdc8e52, 0x13cbb6f8, 0x3cccef62, 0x13fb7dc9,
+ 0x3cbd2af0, 0x142b3846, 0x3cad4107, 0x145ae653,
+ 0x3c9d31b0, 0x148a87d1, 0x3c8cfcf6, 0x14ba1ca3,
+ 0x3c7ca2e2, 0x14e9a4ac, 0x3c6c237e, 0x15191fcf,
+ 0x3c5b7ed4, 0x15488dee, 0x3c4ab4ef, 0x1577eeec,
+ 0x3c39c5da, 0x15a742ac, 0x3c28b19e, 0x15d68911,
+ 0x3c177845, 0x1605c1fd, 0x3c0619dc, 0x1634ed53,
+ 0x3bf4966c, 0x16640af7, 0x3be2ee01, 0x16931acb,
+ 0x3bd120a4, 0x16c21cb2, 0x3bbf2e62, 0x16f1108f,
+ 0x3bad1744, 0x171ff646, 0x3b9adb57, 0x174ecdb8,
+ 0x3b887aa6, 0x177d96ca, 0x3b75f53c, 0x17ac515f,
+ 0x3b634b23, 0x17dafd59, 0x3b507c69, 0x18099a9c,
+ 0x3b3d8918, 0x1838290c, 0x3b2a713d, 0x1866a88a,
+ 0x3b1734e2, 0x189518fc, 0x3b03d414, 0x18c37a44,
+ 0x3af04edf, 0x18f1cc45, 0x3adca54e, 0x19200ee3,
+ 0x3ac8d76f, 0x194e4201, 0x3ab4e54c, 0x197c6584,
+ 0x3aa0cef3, 0x19aa794d, 0x3a8c9470, 0x19d87d42,
+ 0x3a7835cf, 0x1a067145, 0x3a63b31d, 0x1a34553b,
+ 0x3a4f0c67, 0x1a622907, 0x3a3a41b9, 0x1a8fec8c,
+ 0x3a25531f, 0x1abd9faf, 0x3a1040a8, 0x1aeb4253,
+ 0x39fb0a60, 0x1b18d45c, 0x39e5b054, 0x1b4655ae,
+ 0x39d03291, 0x1b73c62d, 0x39ba9125, 0x1ba125bd,
+ 0x39a4cc1c, 0x1bce7442, 0x398ee385, 0x1bfbb1a0,
+ 0x3978d76c, 0x1c28ddbb, 0x3962a7e0, 0x1c55f878,
+ 0x394c54ee, 0x1c8301b9, 0x3935dea4, 0x1caff965,
+ 0x391f4510, 0x1cdcdf5e, 0x3908883f, 0x1d09b389,
+ 0x38f1a840, 0x1d3675cb, 0x38daa520, 0x1d632608,
+ 0x38c37eef, 0x1d8fc424, 0x38ac35ba, 0x1dbc5004,
+ 0x3894c98f, 0x1de8c98c, 0x387d3a7e, 0x1e1530a1,
+ 0x38658894, 0x1e418528, 0x384db3e0, 0x1e6dc705,
+ 0x3835bc71, 0x1e99f61d, 0x381da256, 0x1ec61254,
+ 0x3805659e, 0x1ef21b90, 0x37ed0657, 0x1f1e11b5,
+ 0x37d48490, 0x1f49f4a8, 0x37bbe05a, 0x1f75c44e,
+ 0x37a319c2, 0x1fa1808c, 0x378a30d8, 0x1fcd2948,
+ 0x377125ac, 0x1ff8be65, 0x3757f84c, 0x20243fca,
+ 0x373ea8ca, 0x204fad5b, 0x37253733, 0x207b06fe,
+ 0x370ba398, 0x20a64c97, 0x36f1ee09, 0x20d17e0d,
+ 0x36d81695, 0x20fc9b44, 0x36be1d4c, 0x2127a423,
+ 0x36a4023f, 0x2152988d, 0x3689c57d, 0x217d786a,
+ 0x366f6717, 0x21a8439e, 0x3654e71d, 0x21d2fa0f,
+ 0x363a45a0, 0x21fd9ba3, 0x361f82af, 0x2228283f,
+ 0x36049e5b, 0x22529fca, 0x35e998b5, 0x227d0228,
+ 0x35ce71ce, 0x22a74f40, 0x35b329b5, 0x22d186f8,
+ 0x3597c07d, 0x22fba936, 0x357c3636, 0x2325b5df,
+ 0x35608af1, 0x234facda, 0x3544bebf, 0x23798e0d,
+ 0x3528d1b1, 0x23a3595e, 0x350cc3d8, 0x23cd0eb3,
+ 0x34f09546, 0x23f6adf3, 0x34d4460c, 0x24203704,
+ 0x34b7d63c, 0x2449a9cc, 0x349b45e7, 0x24730631,
+ 0x347e951f, 0x249c4c1b, 0x3461c3f5, 0x24c57b6f,
+ 0x3444d27b, 0x24ee9415, 0x3427c0c3, 0x251795f3,
+ 0x340a8edf, 0x254080ef, 0x33ed3ce1, 0x256954f1,
+ 0x33cfcadc, 0x259211df, 0x33b238e0, 0x25bab7a0,
+ 0x33948701, 0x25e3461b, 0x3376b551, 0x260bbd37,
+ 0x3358c3e2, 0x26341cdb, 0x333ab2c6, 0x265c64ef,
+ 0x331c8211, 0x26849558, 0x32fe31d5, 0x26acadff,
+ 0x32dfc224, 0x26d4aecb, 0x32c13311, 0x26fc97a3,
+ 0x32a284b0, 0x2724686e, 0x3283b712, 0x274c2115,
+ 0x3264ca4c, 0x2773c17d, 0x3245be70, 0x279b4990,
+ 0x32269391, 0x27c2b934, 0x320749c3, 0x27ea1052,
+ 0x31e7e118, 0x28114ed0, 0x31c859a5, 0x28387498,
+ 0x31a8b37c, 0x285f8190, 0x3188eeb2, 0x288675a0,
+ 0x31690b59, 0x28ad50b1, 0x31490986, 0x28d412ab,
+ 0x3128e94c, 0x28fabb75, 0x3108aabf, 0x29214af8,
+ 0x30e84df3, 0x2947c11c, 0x30c7d2fb, 0x296e1dc9,
+ 0x30a739ed, 0x299460e8, 0x308682dc, 0x29ba8a61,
+ 0x3065addb, 0x29e09a1c, 0x3044bb00, 0x2a069003,
+ 0x3023aa5f, 0x2a2c6bfd, 0x30027c0c, 0x2a522df3,
+ 0x2fe1301c, 0x2a77d5ce, 0x2fbfc6a3, 0x2a9d6377,
+ 0x2f9e3fb6, 0x2ac2d6d6, 0x2f7c9b69, 0x2ae82fd5,
+ 0x2f5ad9d1, 0x2b0d6e5c, 0x2f38fb03, 0x2b329255,
+ 0x2f16ff14, 0x2b579ba8, 0x2ef4e619, 0x2b7c8a3f,
+ 0x2ed2b027, 0x2ba15e03, 0x2eb05d53, 0x2bc616dd,
+ 0x2e8dedb3, 0x2beab4b6, 0x2e6b615a, 0x2c0f3779,
+ 0x2e48b860, 0x2c339f0e, 0x2e25f2d8, 0x2c57eb5e,
+ 0x2e0310d9, 0x2c7c1c55, 0x2de01278, 0x2ca031da,
+ 0x2dbcf7cb, 0x2cc42bd9, 0x2d99c0e7, 0x2ce80a3a,
+ 0x2d766de2, 0x2d0bcce8, 0x2d52fed2, 0x2d2f73cd,
+ 0x1fffd886, 0xffcdbc1e, 0x1ffe9cb4, 0xff69364a,
+ 0x1ffc251e, 0xff04b646, 0x1ff871db, 0xfea03ff3,
+ 0x1ff38310, 0xfe3bd72f, 0x1fed58ed, 0xfdd77fd9,
+ 0x1fe5f3af, 0xfd733dd1, 0x1fdd53a0, 0xfd0f14f3,
+ 0x1fd37914, 0xfcab091b, 0x1fc8646d, 0xfc471e27,
+ 0x1fbc1618, 0xfbe357ee, 0x1fae8e8e, 0xfb7fba4b,
+ 0x1f9fce56, 0xfb1c4914, 0x1f8fd600, 0xfab9081f,
+ 0x1f7ea62a, 0xfa55fb3f, 0x1f6c3f7e, 0xf9f32646,
+ 0x1f58a2b1, 0xf9908d03, 0x1f43d086, 0xf92e3344,
+ 0x1f2dc9c9, 0xf8cc1cd3, 0x1f168f54, 0xf86a4d78,
+ 0x1efe220c, 0xf808c8f9, 0x1ee482e2, 0xf7a79318,
+ 0x1ec9b2d4, 0xf746af94, 0x1eadb2e9, 0xf6e6222a,
+ 0x1e908436, 0xf685ee93, 0x1e7227db, 0xf6261883,
+ 0x1e529f04, 0xf5c6a3ad, 0x1e31eae8, 0xf56793c0,
+ 0x1e100cca, 0xf508ec64, 0x1ded05f8, 0xf4aab141,
+ 0x1dc8d7cb, 0xf44ce5f8, 0x1da383a9, 0xf3ef8e28,
+ 0x1d7d0b03, 0xf392ad69, 0x1d556f53, 0xf336474f,
+ 0x1d2cb221, 0xf2da5f6c, 0x1d02d4ff, 0xf27ef94a,
+ 0x1cd7d98a, 0xf224186e, 0x1cabc16a, 0xf1c9c05b,
+ 0x1c7e8e52, 0xf16ff48c, 0x1c504201, 0xf116b876,
+ 0x1c20de40, 0xf0be0f8b, 0x1bf064e1, 0xf065fd35,
+ 0x1bbed7c5, 0xf00e84da, 0x1b8c38d2, 0xefb7a9d9,
+ 0x1b5889ff, 0xef616f8c, 0x1b23cd47, 0xef0bd945,
+ 0x1aee04b4, 0xeeb6ea51, 0x1ab73259, 0xee62a5f6,
+ 0x1a7f5853, 0xee0f0f74, 0x1a4678c8, 0xedbc2a04,
+ 0x1a0c95eb, 0xed69f8d9, 0x19d1b1f6, 0xed187f1c,
+ 0x1995cf2f, 0xecc7bff3, 0x1958efe5, 0xec77be7a,
+ 0x191b1670, 0xec287dc7, 0x18dc4533, 0xebda00e8,
+ 0x189c7e9a, 0xeb8c4ae4, 0x185bc51b, 0xeb3f5eba,
+ 0x181a1b34, 0xeaf33f61, 0x17d7836d, 0xeaa7efc7,
+ 0x17940057, 0xea5d72d6, 0x174f948e, 0xea13cb6a,
+ 0x170a42b3, 0xe9cafc5d, 0x16c40d74, 0xe983087b,
+ 0x167cf785, 0xe93bf28c, 0x163503a3, 0xe8f5bd4d,
+ 0x15ec3496, 0xe8b06b72, 0x15a28d2a, 0xe86bffa9,
+ 0x15581039, 0xe8287c93, 0x150cc09f, 0xe7e5e4cc,
+ 0x14c0a146, 0xe7a43ae5, 0x1473b51c, 0xe7638166,
+ 0x1425ff18, 0xe723bacd, 0x13d78239, 0xe6e4e990,
+ 0x13884186, 0xe6a7101b, 0x1338400d, 0xe66a30d1,
+ 0x12e780e4, 0xe62e4e0a, 0x12960727, 0xe5f36a15,
+ 0x1243d5fc, 0xe5b98738, 0x11f0f08c, 0xe580a7ad,
+ 0x119d5a0a, 0xe548cda7, 0x114915af, 0xe511fb4c,
+ 0x10f426bb, 0xe4dc32b9, 0x109e9074, 0xe4a77601,
+ 0x10485627, 0xe473c72e, 0x0ff17b26, 0xe441283b,
+ 0x0f9a02cb, 0xe40f9b1f, 0x0f41f075, 0xe3df21c0,
+ 0x0ee9478a, 0xe3afbdff, 0x0e900b74, 0xe38171ae,
+ 0x0e363fa5, 0xe3543e96, 0x0ddbe792, 0xe3282676,
+ 0x0d8106b6, 0xe2fd2b01, 0x0d25a094, 0xe2d34ddf,
+ 0x0cc9b8b1, 0xe2aa90ad, 0x0c6d5297, 0xe282f4fd,
+ 0x0c1071d8, 0xe25c7c57, 0x0bb31a08, 0xe2372835,
+ 0x0b554ebf, 0xe212fa08, 0x0af7139c, 0xe1eff336,
+ 0x0a986c40, 0xe1ce1518, 0x0a395c53, 0xe1ad60fc,
+ 0x09d9e77d, 0xe18dd825, 0x097a116d, 0xe16f7bca,
+ 0x0919ddd6, 0xe1524d17, 0x08b9506c, 0xe1364d2c,
+ 0x08586ce8, 0xe11b7d1e, 0x07f73707, 0xe101ddf4,
+ 0x0795b288, 0xe0e970ac, 0x0733e32d, 0xe0d23637,
+ 0x06d1ccbc, 0xe0bc2f7a, 0x066f72fd, 0xe0a75d4f,
+ 0x060cd9ba, 0xe093c082, 0x05aa04c1, 0xe08159d6,
+ 0x0546f7e1, 0xe0702a00, 0x04e3b6ec, 0xe06031aa,
+ 0x048045b5, 0xe0517172, 0x041ca812, 0xe043e9e8,
+ 0x03b8e1d9, 0xe0379b93, 0x0354f6e5, 0xe02c86ec,
+ 0x02f0eb0d, 0xe022ac60, 0x028cc22f, 0xe01a0c51,
+ 0x02288027, 0xe012a713, 0x01c428d1, 0xe00c7cf0,
+ 0x015fc00d, 0xe0078e25, 0x00fb49ba, 0xe003dae2,
+ 0x0096c9b6, 0xe001634c, 0x003243e2, 0xe000277a,
+};
+
+static ogg_int16_t bitrevlook_1024[256]={
+ 0x01fe, 0x0000, 0x00fe, 0x0100,
+ 0x017e, 0x0080, 0x007e, 0x0180,
+ 0x01be, 0x0040, 0x00be, 0x0140,
+ 0x013e, 0x00c0, 0x003e, 0x01c0,
+ 0x01de, 0x0020, 0x00de, 0x0120,
+ 0x015e, 0x00a0, 0x005e, 0x01a0,
+ 0x019e, 0x0060, 0x009e, 0x0160,
+ 0x011e, 0x00e0, 0x001e, 0x01e0,
+ 0x01ee, 0x0010, 0x00ee, 0x0110,
+ 0x016e, 0x0090, 0x006e, 0x0190,
+ 0x01ae, 0x0050, 0x00ae, 0x0150,
+ 0x012e, 0x00d0, 0x002e, 0x01d0,
+ 0x01ce, 0x0030, 0x00ce, 0x0130,
+ 0x014e, 0x00b0, 0x004e, 0x01b0,
+ 0x018e, 0x0070, 0x008e, 0x0170,
+ 0x010e, 0x00f0, 0x000e, 0x01f0,
+ 0x01f6, 0x0008, 0x00f6, 0x0108,
+ 0x0176, 0x0088, 0x0076, 0x0188,
+ 0x01b6, 0x0048, 0x00b6, 0x0148,
+ 0x0136, 0x00c8, 0x0036, 0x01c8,
+ 0x01d6, 0x0028, 0x00d6, 0x0128,
+ 0x0156, 0x00a8, 0x0056, 0x01a8,
+ 0x0196, 0x0068, 0x0096, 0x0168,
+ 0x0116, 0x00e8, 0x0016, 0x01e8,
+ 0x01e6, 0x0018, 0x00e6, 0x0118,
+ 0x0166, 0x0098, 0x0066, 0x0198,
+ 0x01a6, 0x0058, 0x00a6, 0x0158,
+ 0x0126, 0x00d8, 0x0026, 0x01d8,
+ 0x01c6, 0x0038, 0x00c6, 0x0138,
+ 0x0146, 0x00b8, 0x0046, 0x01b8,
+ 0x0186, 0x0078, 0x0086, 0x0178,
+ 0x0106, 0x00f8, 0x0006, 0x01f8,
+ 0x01fa, 0x0004, 0x00fa, 0x0104,
+ 0x017a, 0x0084, 0x007a, 0x0184,
+ 0x01ba, 0x0044, 0x00ba, 0x0144,
+ 0x013a, 0x00c4, 0x003a, 0x01c4,
+ 0x01da, 0x0024, 0x00da, 0x0124,
+ 0x015a, 0x00a4, 0x005a, 0x01a4,
+ 0x019a, 0x0064, 0x009a, 0x0164,
+ 0x011a, 0x00e4, 0x001a, 0x01e4,
+ 0x01ea, 0x0014, 0x00ea, 0x0114,
+ 0x016a, 0x0094, 0x006a, 0x0194,
+ 0x01aa, 0x0054, 0x00aa, 0x0154,
+ 0x012a, 0x00d4, 0x002a, 0x01d4,
+ 0x01ca, 0x0034, 0x00ca, 0x0134,
+ 0x014a, 0x00b4, 0x004a, 0x01b4,
+ 0x018a, 0x0074, 0x008a, 0x0174,
+ 0x010a, 0x00f4, 0x000a, 0x01f4,
+ 0x01f2, 0x000c, 0x00f2, 0x010c,
+ 0x0172, 0x008c, 0x0072, 0x018c,
+ 0x01b2, 0x004c, 0x00b2, 0x014c,
+ 0x0132, 0x00cc, 0x0032, 0x01cc,
+ 0x01d2, 0x002c, 0x00d2, 0x012c,
+ 0x0152, 0x00ac, 0x0052, 0x01ac,
+ 0x0192, 0x006c, 0x0092, 0x016c,
+ 0x0112, 0x00ec, 0x0012, 0x01ec,
+ 0x01e2, 0x001c, 0x00e2, 0x011c,
+ 0x0162, 0x009c, 0x0062, 0x019c,
+ 0x01a2, 0x005c, 0x00a2, 0x015c,
+ 0x0122, 0x00dc, 0x0022, 0x01dc,
+ 0x01c2, 0x003c, 0x00c2, 0x013c,
+ 0x0142, 0x00bc, 0x0042, 0x01bc,
+ 0x0182, 0x007c, 0x0082, 0x017c,
+ 0x0102, 0x00fc, 0x0002, 0x01fc,
+};
+
+static ogg_int32_t triglook_2048[2560]={
+ 0x40000000, 0x00000000, 0x3fffb10b, 0xff9b783c,
+ 0x3ffec42d, 0xff36f170, 0x3ffd3969, 0xfed26c94,
+ 0x3ffb10c1, 0xfe6deaa1, 0x3ff84a3c, 0xfe096c8d,
+ 0x3ff4e5e0, 0xfda4f351, 0x3ff0e3b6, 0xfd407fe6,
+ 0x3fec43c7, 0xfcdc1342, 0x3fe7061f, 0xfc77ae5e,
+ 0x3fe12acb, 0xfc135231, 0x3fdab1d9, 0xfbaeffb3,
+ 0x3fd39b5a, 0xfb4ab7db, 0x3fcbe75e, 0xfae67ba2,
+ 0x3fc395f9, 0xfa824bfd, 0x3fbaa740, 0xfa1e29e5,
+ 0x3fb11b48, 0xf9ba1651, 0x3fa6f228, 0xf9561237,
+ 0x3f9c2bfb, 0xf8f21e8e, 0x3f90c8da, 0xf88e3c4d,
+ 0x3f84c8e2, 0xf82a6c6a, 0x3f782c30, 0xf7c6afdc,
+ 0x3f6af2e3, 0xf7630799, 0x3f5d1d1d, 0xf6ff7496,
+ 0x3f4eaafe, 0xf69bf7c9, 0x3f3f9cab, 0xf6389228,
+ 0x3f2ff24a, 0xf5d544a7, 0x3f1fabff, 0xf572103d,
+ 0x3f0ec9f5, 0xf50ef5de, 0x3efd4c54, 0xf4abf67e,
+ 0x3eeb3347, 0xf4491311, 0x3ed87efc, 0xf3e64c8c,
+ 0x3ec52fa0, 0xf383a3e2, 0x3eb14563, 0xf3211a07,
+ 0x3e9cc076, 0xf2beafed, 0x3e87a10c, 0xf25c6688,
+ 0x3e71e759, 0xf1fa3ecb, 0x3e5b9392, 0xf19839a6,
+ 0x3e44a5ef, 0xf136580d, 0x3e2d1ea8, 0xf0d49af1,
+ 0x3e14fdf7, 0xf0730342, 0x3dfc4418, 0xf01191f3,
+ 0x3de2f148, 0xefb047f2, 0x3dc905c5, 0xef4f2630,
+ 0x3dae81cf, 0xeeee2d9d, 0x3d9365a8, 0xee8d5f29,
+ 0x3d77b192, 0xee2cbbc1, 0x3d5b65d2, 0xedcc4454,
+ 0x3d3e82ae, 0xed6bf9d1, 0x3d21086c, 0xed0bdd25,
+ 0x3d02f757, 0xecabef3d, 0x3ce44fb7, 0xec4c3106,
+ 0x3cc511d9, 0xebeca36c, 0x3ca53e09, 0xeb8d475b,
+ 0x3c84d496, 0xeb2e1dbe, 0x3c63d5d1, 0xeacf277f,
+ 0x3c42420a, 0xea70658a, 0x3c201994, 0xea11d8c8,
+ 0x3bfd5cc4, 0xe9b38223, 0x3bda0bf0, 0xe9556282,
+ 0x3bb6276e, 0xe8f77acf, 0x3b91af97, 0xe899cbf1,
+ 0x3b6ca4c4, 0xe83c56cf, 0x3b470753, 0xe7df1c50,
+ 0x3b20d79e, 0xe7821d59, 0x3afa1605, 0xe7255ad1,
+ 0x3ad2c2e8, 0xe6c8d59c, 0x3aaadea6, 0xe66c8e9f,
+ 0x3a8269a3, 0xe61086bc, 0x3a596442, 0xe5b4bed8,
+ 0x3a2fcee8, 0xe55937d5, 0x3a05a9fd, 0xe4fdf294,
+ 0x39daf5e8, 0xe4a2eff6, 0x39afb313, 0xe44830dd,
+ 0x3983e1e8, 0xe3edb628, 0x395782d3, 0xe39380b6,
+ 0x392a9642, 0xe3399167, 0x38fd1ca4, 0xe2dfe917,
+ 0x38cf1669, 0xe28688a4, 0x38a08402, 0xe22d70eb,
+ 0x387165e3, 0xe1d4a2c8, 0x3841bc7f, 0xe17c1f15,
+ 0x3811884d, 0xe123e6ad, 0x37e0c9c3, 0xe0cbfa6a,
+ 0x37af8159, 0xe0745b24, 0x377daf89, 0xe01d09b4,
+ 0x374b54ce, 0xdfc606f1, 0x371871a5, 0xdf6f53b3,
+ 0x36e5068a, 0xdf18f0ce, 0x36b113fd, 0xdec2df18,
+ 0x367c9a7e, 0xde6d1f65, 0x36479a8e, 0xde17b28a,
+ 0x361214b0, 0xddc29958, 0x35dc0968, 0xdd6dd4a2,
+ 0x35a5793c, 0xdd196538, 0x356e64b2, 0xdcc54bec,
+ 0x3536cc52, 0xdc71898d, 0x34feb0a5, 0xdc1e1ee9,
+ 0x34c61236, 0xdbcb0cce, 0x348cf190, 0xdb785409,
+ 0x34534f41, 0xdb25f566, 0x34192bd5, 0xdad3f1b1,
+ 0x33de87de, 0xda8249b4, 0x33a363ec, 0xda30fe38,
+ 0x3367c090, 0xd9e01006, 0x332b9e5e, 0xd98f7fe6,
+ 0x32eefdea, 0xd93f4e9e, 0x32b1dfc9, 0xd8ef7cf4,
+ 0x32744493, 0xd8a00bae, 0x32362ce0, 0xd850fb8e,
+ 0x31f79948, 0xd8024d59, 0x31b88a66, 0xd7b401d1,
+ 0x317900d6, 0xd76619b6, 0x3138fd35, 0xd71895c9,
+ 0x30f8801f, 0xd6cb76c9, 0x30b78a36, 0xd67ebd74,
+ 0x30761c18, 0xd6326a88, 0x30343667, 0xd5e67ec1,
+ 0x2ff1d9c7, 0xd59afadb, 0x2faf06da, 0xd54fdf8f,
+ 0x2f6bbe45, 0xd5052d97, 0x2f2800af, 0xd4bae5ab,
+ 0x2ee3cebe, 0xd4710883, 0x2e9f291b, 0xd42796d5,
+ 0x2e5a1070, 0xd3de9156, 0x2e148566, 0xd395f8ba,
+ 0x2dce88aa, 0xd34dcdb4, 0x2d881ae8, 0xd30610f7,
+ 0x2d413ccd, 0xd2bec333, 0x2cf9ef09, 0xd277e518,
+ 0x2cb2324c, 0xd2317756, 0x2c6a0746, 0xd1eb7a9a,
+ 0x2c216eaa, 0xd1a5ef90, 0x2bd8692b, 0xd160d6e5,
+ 0x2b8ef77d, 0xd11c3142, 0x2b451a55, 0xd0d7ff51,
+ 0x2afad269, 0xd09441bb, 0x2ab02071, 0xd050f926,
+ 0x2a650525, 0xd00e2639, 0x2a19813f, 0xcfcbc999,
+ 0x29cd9578, 0xcf89e3e8, 0x2981428c, 0xcf4875ca,
+ 0x29348937, 0xcf077fe1, 0x28e76a37, 0xcec702cb,
+ 0x2899e64a, 0xce86ff2a, 0x284bfe2f, 0xce47759a,
+ 0x27fdb2a7, 0xce0866b8, 0x27af0472, 0xcdc9d320,
+ 0x275ff452, 0xcd8bbb6d, 0x2710830c, 0xcd4e2037,
+ 0x26c0b162, 0xcd110216, 0x2670801a, 0xccd461a2,
+ 0x261feffa, 0xcc983f70, 0x25cf01c8, 0xcc5c9c14,
+ 0x257db64c, 0xcc217822, 0x252c0e4f, 0xcbe6d42b,
+ 0x24da0a9a, 0xcbacb0bf, 0x2487abf7, 0xcb730e70,
+ 0x2434f332, 0xcb39edca, 0x23e1e117, 0xcb014f5b,
+ 0x238e7673, 0xcac933ae, 0x233ab414, 0xca919b4e,
+ 0x22e69ac8, 0xca5a86c4, 0x22922b5e, 0xca23f698,
+ 0x223d66a8, 0xc9edeb50, 0x21e84d76, 0xc9b86572,
+ 0x2192e09b, 0xc9836582, 0x213d20e8, 0xc94eec03,
+ 0x20e70f32, 0xc91af976, 0x2090ac4d, 0xc8e78e5b,
+ 0x2039f90f, 0xc8b4ab32, 0x1fe2f64c, 0xc8825077,
+ 0x1f8ba4dc, 0xc8507ea7, 0x1f340596, 0xc81f363d,
+ 0x1edc1953, 0xc7ee77b3, 0x1e83e0eb, 0xc7be4381,
+ 0x1e2b5d38, 0xc78e9a1d, 0x1dd28f15, 0xc75f7bfe,
+ 0x1d79775c, 0xc730e997, 0x1d2016e9, 0xc702e35c,
+ 0x1cc66e99, 0xc6d569be, 0x1c6c7f4a, 0xc6a87d2d,
+ 0x1c1249d8, 0xc67c1e18, 0x1bb7cf23, 0xc6504ced,
+ 0x1b5d100a, 0xc6250a18, 0x1b020d6c, 0xc5fa5603,
+ 0x1aa6c82b, 0xc5d03118, 0x1a4b4128, 0xc5a69bbe,
+ 0x19ef7944, 0xc57d965d, 0x19937161, 0xc555215a,
+ 0x19372a64, 0xc52d3d18, 0x18daa52f, 0xc505e9fb,
+ 0x187de2a7, 0xc4df2862, 0x1820e3b0, 0xc4b8f8ad,
+ 0x17c3a931, 0xc4935b3c, 0x1766340f, 0xc46e5069,
+ 0x17088531, 0xc449d892, 0x16aa9d7e, 0xc425f410,
+ 0x164c7ddd, 0xc402a33c, 0x15ee2738, 0xc3dfe66c,
+ 0x158f9a76, 0xc3bdbdf6, 0x1530d881, 0xc39c2a2f,
+ 0x14d1e242, 0xc37b2b6a, 0x1472b8a5, 0xc35ac1f7,
+ 0x14135c94, 0xc33aee27, 0x13b3cefa, 0xc31bb049,
+ 0x135410c3, 0xc2fd08a9, 0x12f422db, 0xc2def794,
+ 0x1294062f, 0xc2c17d52, 0x1233bbac, 0xc2a49a2e,
+ 0x11d3443f, 0xc2884e6e, 0x1172a0d7, 0xc26c9a58,
+ 0x1111d263, 0xc2517e31, 0x10b0d9d0, 0xc236fa3b,
+ 0x104fb80e, 0xc21d0eb8, 0x0fee6e0d, 0xc203bbe8,
+ 0x0f8cfcbe, 0xc1eb0209, 0x0f2b650f, 0xc1d2e158,
+ 0x0ec9a7f3, 0xc1bb5a11, 0x0e67c65a, 0xc1a46c6e,
+ 0x0e05c135, 0xc18e18a7, 0x0da39978, 0xc1785ef4,
+ 0x0d415013, 0xc1633f8a, 0x0cdee5f9, 0xc14eba9d,
+ 0x0c7c5c1e, 0xc13ad060, 0x0c19b374, 0xc1278104,
+ 0x0bb6ecef, 0xc114ccb9, 0x0b540982, 0xc102b3ac,
+ 0x0af10a22, 0xc0f1360b, 0x0a8defc3, 0xc0e05401,
+ 0x0a2abb59, 0xc0d00db6, 0x09c76dd8, 0xc0c06355,
+ 0x09640837, 0xc0b15502, 0x09008b6a, 0xc0a2e2e3,
+ 0x089cf867, 0xc0950d1d, 0x08395024, 0xc087d3d0,
+ 0x07d59396, 0xc07b371e, 0x0771c3b3, 0xc06f3726,
+ 0x070de172, 0xc063d405, 0x06a9edc9, 0xc0590dd8,
+ 0x0645e9af, 0xc04ee4b8, 0x05e1d61b, 0xc04558c0,
+ 0x057db403, 0xc03c6a07, 0x0519845e, 0xc03418a2,
+ 0x04b54825, 0xc02c64a6, 0x0451004d, 0xc0254e27,
+ 0x03ecadcf, 0xc01ed535, 0x038851a2, 0xc018f9e1,
+ 0x0323ecbe, 0xc013bc39, 0x02bf801a, 0xc00f1c4a,
+ 0x025b0caf, 0xc00b1a20, 0x01f69373, 0xc007b5c4,
+ 0x0192155f, 0xc004ef3f, 0x012d936c, 0xc002c697,
+ 0x00c90e90, 0xc0013bd3, 0x006487c4, 0xc0004ef5,
+ 0x00000000, 0xc0000000, 0xff9b783c, 0xc0004ef5,
+ 0xff36f170, 0xc0013bd3, 0xfed26c94, 0xc002c697,
+ 0xfe6deaa1, 0xc004ef3f, 0xfe096c8d, 0xc007b5c4,
+ 0xfda4f351, 0xc00b1a20, 0xfd407fe6, 0xc00f1c4a,
+ 0xfcdc1342, 0xc013bc39, 0xfc77ae5e, 0xc018f9e1,
+ 0xfc135231, 0xc01ed535, 0xfbaeffb3, 0xc0254e27,
+ 0xfb4ab7db, 0xc02c64a6, 0xfae67ba2, 0xc03418a2,
+ 0xfa824bfd, 0xc03c6a07, 0xfa1e29e5, 0xc04558c0,
+ 0xf9ba1651, 0xc04ee4b8, 0xf9561237, 0xc0590dd8,
+ 0xf8f21e8e, 0xc063d405, 0xf88e3c4d, 0xc06f3726,
+ 0xf82a6c6a, 0xc07b371e, 0xf7c6afdc, 0xc087d3d0,
+ 0xf7630799, 0xc0950d1d, 0xf6ff7496, 0xc0a2e2e3,
+ 0xf69bf7c9, 0xc0b15502, 0xf6389228, 0xc0c06355,
+ 0xf5d544a7, 0xc0d00db6, 0xf572103d, 0xc0e05401,
+ 0xf50ef5de, 0xc0f1360b, 0xf4abf67e, 0xc102b3ac,
+ 0xf4491311, 0xc114ccb9, 0xf3e64c8c, 0xc1278104,
+ 0xf383a3e2, 0xc13ad060, 0xf3211a07, 0xc14eba9d,
+ 0xf2beafed, 0xc1633f8a, 0xf25c6688, 0xc1785ef4,
+ 0xf1fa3ecb, 0xc18e18a7, 0xf19839a6, 0xc1a46c6e,
+ 0xf136580d, 0xc1bb5a11, 0xf0d49af1, 0xc1d2e158,
+ 0xf0730342, 0xc1eb0209, 0xf01191f3, 0xc203bbe8,
+ 0xefb047f2, 0xc21d0eb8, 0xef4f2630, 0xc236fa3b,
+ 0xeeee2d9d, 0xc2517e31, 0xee8d5f29, 0xc26c9a58,
+ 0xee2cbbc1, 0xc2884e6e, 0xedcc4454, 0xc2a49a2e,
+ 0xed6bf9d1, 0xc2c17d52, 0xed0bdd25, 0xc2def794,
+ 0xecabef3d, 0xc2fd08a9, 0xec4c3106, 0xc31bb049,
+ 0xebeca36c, 0xc33aee27, 0xeb8d475b, 0xc35ac1f7,
+ 0xeb2e1dbe, 0xc37b2b6a, 0xeacf277f, 0xc39c2a2f,
+ 0xea70658a, 0xc3bdbdf6, 0xea11d8c8, 0xc3dfe66c,
+ 0xe9b38223, 0xc402a33c, 0xe9556282, 0xc425f410,
+ 0xe8f77acf, 0xc449d892, 0xe899cbf1, 0xc46e5069,
+ 0xe83c56cf, 0xc4935b3c, 0xe7df1c50, 0xc4b8f8ad,
+ 0xe7821d59, 0xc4df2862, 0xe7255ad1, 0xc505e9fb,
+ 0xe6c8d59c, 0xc52d3d18, 0xe66c8e9f, 0xc555215a,
+ 0xe61086bc, 0xc57d965d, 0xe5b4bed8, 0xc5a69bbe,
+ 0xe55937d5, 0xc5d03118, 0xe4fdf294, 0xc5fa5603,
+ 0xe4a2eff6, 0xc6250a18, 0xe44830dd, 0xc6504ced,
+ 0xe3edb628, 0xc67c1e18, 0xe39380b6, 0xc6a87d2d,
+ 0xe3399167, 0xc6d569be, 0xe2dfe917, 0xc702e35c,
+ 0xe28688a4, 0xc730e997, 0xe22d70eb, 0xc75f7bfe,
+ 0xe1d4a2c8, 0xc78e9a1d, 0xe17c1f15, 0xc7be4381,
+ 0xe123e6ad, 0xc7ee77b3, 0xe0cbfa6a, 0xc81f363d,
+ 0xe0745b24, 0xc8507ea7, 0xe01d09b4, 0xc8825077,
+ 0xdfc606f1, 0xc8b4ab32, 0xdf6f53b3, 0xc8e78e5b,
+ 0xdf18f0ce, 0xc91af976, 0xdec2df18, 0xc94eec03,
+ 0xde6d1f65, 0xc9836582, 0xde17b28a, 0xc9b86572,
+ 0xddc29958, 0xc9edeb50, 0xdd6dd4a2, 0xca23f698,
+ 0xdd196538, 0xca5a86c4, 0xdcc54bec, 0xca919b4e,
+ 0xdc71898d, 0xcac933ae, 0xdc1e1ee9, 0xcb014f5b,
+ 0xdbcb0cce, 0xcb39edca, 0xdb785409, 0xcb730e70,
+ 0xdb25f566, 0xcbacb0bf, 0xdad3f1b1, 0xcbe6d42b,
+ 0xda8249b4, 0xcc217822, 0xda30fe38, 0xcc5c9c14,
+ 0xd9e01006, 0xcc983f70, 0xd98f7fe6, 0xccd461a2,
+ 0xd93f4e9e, 0xcd110216, 0xd8ef7cf4, 0xcd4e2037,
+ 0xd8a00bae, 0xcd8bbb6d, 0xd850fb8e, 0xcdc9d320,
+ 0xd8024d59, 0xce0866b8, 0xd7b401d1, 0xce47759a,
+ 0xd76619b6, 0xce86ff2a, 0xd71895c9, 0xcec702cb,
+ 0xd6cb76c9, 0xcf077fe1, 0xd67ebd74, 0xcf4875ca,
+ 0xd6326a88, 0xcf89e3e8, 0xd5e67ec1, 0xcfcbc999,
+ 0xd59afadb, 0xd00e2639, 0xd54fdf8f, 0xd050f926,
+ 0xd5052d97, 0xd09441bb, 0xd4bae5ab, 0xd0d7ff51,
+ 0xd4710883, 0xd11c3142, 0xd42796d5, 0xd160d6e5,
+ 0xd3de9156, 0xd1a5ef90, 0xd395f8ba, 0xd1eb7a9a,
+ 0xd34dcdb4, 0xd2317756, 0xd30610f7, 0xd277e518,
+ 0xd2bec333, 0xd2bec333, 0xd277e518, 0xd30610f7,
+ 0xd2317756, 0xd34dcdb4, 0xd1eb7a9a, 0xd395f8ba,
+ 0xd1a5ef90, 0xd3de9156, 0xd160d6e5, 0xd42796d5,
+ 0xd11c3142, 0xd4710883, 0xd0d7ff51, 0xd4bae5ab,
+ 0xd09441bb, 0xd5052d97, 0xd050f926, 0xd54fdf8f,
+ 0xd00e2639, 0xd59afadb, 0xcfcbc999, 0xd5e67ec1,
+ 0xcf89e3e8, 0xd6326a88, 0xcf4875ca, 0xd67ebd74,
+ 0xcf077fe1, 0xd6cb76c9, 0xcec702cb, 0xd71895c9,
+ 0xce86ff2a, 0xd76619b6, 0xce47759a, 0xd7b401d1,
+ 0xce0866b8, 0xd8024d59, 0xcdc9d320, 0xd850fb8e,
+ 0xcd8bbb6d, 0xd8a00bae, 0xcd4e2037, 0xd8ef7cf4,
+ 0xcd110216, 0xd93f4e9e, 0xccd461a2, 0xd98f7fe6,
+ 0xcc983f70, 0xd9e01006, 0xcc5c9c14, 0xda30fe38,
+ 0xcc217822, 0xda8249b4, 0xcbe6d42b, 0xdad3f1b1,
+ 0xcbacb0bf, 0xdb25f566, 0xcb730e70, 0xdb785409,
+ 0xcb39edca, 0xdbcb0cce, 0xcb014f5b, 0xdc1e1ee9,
+ 0xcac933ae, 0xdc71898d, 0xca919b4e, 0xdcc54bec,
+ 0xca5a86c4, 0xdd196538, 0xca23f698, 0xdd6dd4a2,
+ 0xc9edeb50, 0xddc29958, 0xc9b86572, 0xde17b28a,
+ 0xc9836582, 0xde6d1f65, 0xc94eec03, 0xdec2df18,
+ 0xc91af976, 0xdf18f0ce, 0xc8e78e5b, 0xdf6f53b3,
+ 0xc8b4ab32, 0xdfc606f1, 0xc8825077, 0xe01d09b4,
+ 0xc8507ea7, 0xe0745b24, 0xc81f363d, 0xe0cbfa6a,
+ 0xc7ee77b3, 0xe123e6ad, 0xc7be4381, 0xe17c1f15,
+ 0xc78e9a1d, 0xe1d4a2c8, 0xc75f7bfe, 0xe22d70eb,
+ 0xc730e997, 0xe28688a4, 0xc702e35c, 0xe2dfe917,
+ 0xc6d569be, 0xe3399167, 0xc6a87d2d, 0xe39380b6,
+ 0xc67c1e18, 0xe3edb628, 0xc6504ced, 0xe44830dd,
+ 0xc6250a18, 0xe4a2eff6, 0xc5fa5603, 0xe4fdf294,
+ 0xc5d03118, 0xe55937d5, 0xc5a69bbe, 0xe5b4bed8,
+ 0xc57d965d, 0xe61086bc, 0xc555215a, 0xe66c8e9f,
+ 0xc52d3d18, 0xe6c8d59c, 0xc505e9fb, 0xe7255ad1,
+ 0xc4df2862, 0xe7821d59, 0xc4b8f8ad, 0xe7df1c50,
+ 0xc4935b3c, 0xe83c56cf, 0xc46e5069, 0xe899cbf1,
+ 0xc449d892, 0xe8f77acf, 0xc425f410, 0xe9556282,
+ 0xc402a33c, 0xe9b38223, 0xc3dfe66c, 0xea11d8c8,
+ 0xc3bdbdf6, 0xea70658a, 0xc39c2a2f, 0xeacf277f,
+ 0xc37b2b6a, 0xeb2e1dbe, 0xc35ac1f7, 0xeb8d475b,
+ 0xc33aee27, 0xebeca36c, 0xc31bb049, 0xec4c3106,
+ 0xc2fd08a9, 0xecabef3d, 0xc2def794, 0xed0bdd25,
+ 0xc2c17d52, 0xed6bf9d1, 0xc2a49a2e, 0xedcc4454,
+ 0xc2884e6e, 0xee2cbbc1, 0xc26c9a58, 0xee8d5f29,
+ 0xc2517e31, 0xeeee2d9d, 0xc236fa3b, 0xef4f2630,
+ 0xc21d0eb8, 0xefb047f2, 0xc203bbe8, 0xf01191f3,
+ 0xc1eb0209, 0xf0730342, 0xc1d2e158, 0xf0d49af1,
+ 0xc1bb5a11, 0xf136580d, 0xc1a46c6e, 0xf19839a6,
+ 0xc18e18a7, 0xf1fa3ecb, 0xc1785ef4, 0xf25c6688,
+ 0xc1633f8a, 0xf2beafed, 0xc14eba9d, 0xf3211a07,
+ 0xc13ad060, 0xf383a3e2, 0xc1278104, 0xf3e64c8c,
+ 0xc114ccb9, 0xf4491311, 0xc102b3ac, 0xf4abf67e,
+ 0xc0f1360b, 0xf50ef5de, 0xc0e05401, 0xf572103d,
+ 0xc0d00db6, 0xf5d544a7, 0xc0c06355, 0xf6389228,
+ 0xc0b15502, 0xf69bf7c9, 0xc0a2e2e3, 0xf6ff7496,
+ 0xc0950d1d, 0xf7630799, 0xc087d3d0, 0xf7c6afdc,
+ 0xc07b371e, 0xf82a6c6a, 0xc06f3726, 0xf88e3c4d,
+ 0xc063d405, 0xf8f21e8e, 0xc0590dd8, 0xf9561237,
+ 0xc04ee4b8, 0xf9ba1651, 0xc04558c0, 0xfa1e29e5,
+ 0xc03c6a07, 0xfa824bfd, 0xc03418a2, 0xfae67ba2,
+ 0xc02c64a6, 0xfb4ab7db, 0xc0254e27, 0xfbaeffb3,
+ 0xc01ed535, 0xfc135231, 0xc018f9e1, 0xfc77ae5e,
+ 0xc013bc39, 0xfcdc1342, 0xc00f1c4a, 0xfd407fe6,
+ 0xc00b1a20, 0xfda4f351, 0xc007b5c4, 0xfe096c8d,
+ 0xc004ef3f, 0xfe6deaa1, 0xc002c697, 0xfed26c94,
+ 0xc0013bd3, 0xff36f170, 0xc0004ef5, 0xff9b783c,
+ 0x3ffffec4, 0x000c90fe, 0x3ffff4e6, 0x0025b2f7,
+ 0x3fffe128, 0x003ed4ea, 0x3fffc38c, 0x0057f6d4,
+ 0x3fff9c12, 0x007118b0, 0x3fff6ab9, 0x008a3a7b,
+ 0x3fff2f82, 0x00a35c30, 0x3ffeea6c, 0x00bc7dcc,
+ 0x3ffe9b77, 0x00d59f4c, 0x3ffe42a4, 0x00eec0aa,
+ 0x3ffddff3, 0x0107e1e3, 0x3ffd7364, 0x012102f4,
+ 0x3ffcfcf6, 0x013a23d8, 0x3ffc7caa, 0x0153448c,
+ 0x3ffbf280, 0x016c650b, 0x3ffb5e78, 0x01858552,
+ 0x3ffac092, 0x019ea55d, 0x3ffa18cf, 0x01b7c528,
+ 0x3ff9672d, 0x01d0e4b0, 0x3ff8abae, 0x01ea03ef,
+ 0x3ff7e652, 0x020322e3, 0x3ff71718, 0x021c4188,
+ 0x3ff63e01, 0x02355fd9, 0x3ff55b0d, 0x024e7dd4,
+ 0x3ff46e3c, 0x02679b73, 0x3ff3778e, 0x0280b8b3,
+ 0x3ff27703, 0x0299d590, 0x3ff16c9c, 0x02b2f207,
+ 0x3ff05858, 0x02cc0e13, 0x3fef3a39, 0x02e529b0,
+ 0x3fee123d, 0x02fe44dc, 0x3fece065, 0x03175f91,
+ 0x3feba4b2, 0x033079cc, 0x3fea5f23, 0x03499389,
+ 0x3fe90fb9, 0x0362acc5, 0x3fe7b674, 0x037bc57b,
+ 0x3fe65354, 0x0394dda7, 0x3fe4e659, 0x03adf546,
+ 0x3fe36f84, 0x03c70c54, 0x3fe1eed5, 0x03e022cc,
+ 0x3fe0644b, 0x03f938ac, 0x3fdecfe8, 0x04124dee,
+ 0x3fdd31ac, 0x042b6290, 0x3fdb8996, 0x0444768d,
+ 0x3fd9d7a7, 0x045d89e2, 0x3fd81bdf, 0x04769c8b,
+ 0x3fd6563f, 0x048fae83, 0x3fd486c7, 0x04a8bfc7,
+ 0x3fd2ad77, 0x04c1d054, 0x3fd0ca4f, 0x04dae024,
+ 0x3fcedd50, 0x04f3ef35, 0x3fcce67a, 0x050cfd82,
+ 0x3fcae5cd, 0x05260b08, 0x3fc8db4a, 0x053f17c3,
+ 0x3fc6c6f0, 0x055823ae, 0x3fc4a8c1, 0x05712ec7,
+ 0x3fc280bc, 0x058a3908, 0x3fc04ee3, 0x05a3426f,
+ 0x3fbe1334, 0x05bc4af8, 0x3fbbcdb1, 0x05d5529e,
+ 0x3fb97e5a, 0x05ee595d, 0x3fb7252f, 0x06075f33,
+ 0x3fb4c231, 0x0620641a, 0x3fb2555f, 0x06396810,
+ 0x3fafdebb, 0x06526b10, 0x3fad5e45, 0x066b6d16,
+ 0x3faad3fd, 0x06846e1f, 0x3fa83fe3, 0x069d6e27,
+ 0x3fa5a1f9, 0x06b66d29, 0x3fa2fa3d, 0x06cf6b23,
+ 0x3fa048b2, 0x06e86810, 0x3f9d8d56, 0x070163eb,
+ 0x3f9ac82c, 0x071a5eb3, 0x3f97f932, 0x07335862,
+ 0x3f952069, 0x074c50f4, 0x3f923dd2, 0x07654867,
+ 0x3f8f516e, 0x077e3eb5, 0x3f8c5b3d, 0x079733dc,
+ 0x3f895b3e, 0x07b027d7, 0x3f865174, 0x07c91aa3,
+ 0x3f833ddd, 0x07e20c3b, 0x3f80207b, 0x07fafc9c,
+ 0x3f7cf94e, 0x0813ebc2, 0x3f79c857, 0x082cd9a9,
+ 0x3f768d96, 0x0845c64d, 0x3f73490b, 0x085eb1ab,
+ 0x3f6ffab8, 0x08779bbe, 0x3f6ca29c, 0x08908483,
+ 0x3f6940b8, 0x08a96bf6, 0x3f65d50d, 0x08c25213,
+ 0x3f625f9b, 0x08db36d6, 0x3f5ee063, 0x08f41a3c,
+ 0x3f5b5765, 0x090cfc40, 0x3f57c4a2, 0x0925dcdf,
+ 0x3f54281a, 0x093ebc14, 0x3f5081cd, 0x095799dd,
+ 0x3f4cd1be, 0x09707635, 0x3f4917eb, 0x09895118,
+ 0x3f455456, 0x09a22a83, 0x3f4186ff, 0x09bb0271,
+ 0x3f3dafe7, 0x09d3d8df, 0x3f39cf0e, 0x09ecadc9,
+ 0x3f35e476, 0x0a05812c, 0x3f31f01d, 0x0a1e5303,
+ 0x3f2df206, 0x0a37234a, 0x3f29ea31, 0x0a4ff1fe,
+ 0x3f25d89e, 0x0a68bf1b, 0x3f21bd4e, 0x0a818a9d,
+ 0x3f1d9842, 0x0a9a5480, 0x3f19697a, 0x0ab31cc1,
+ 0x3f1530f7, 0x0acbe35b, 0x3f10eeb9, 0x0ae4a84b,
+ 0x3f0ca2c2, 0x0afd6b8d, 0x3f084d12, 0x0b162d1d,
+ 0x3f03eda9, 0x0b2eecf8, 0x3eff8489, 0x0b47ab19,
+ 0x3efb11b1, 0x0b60677c, 0x3ef69523, 0x0b79221f,
+ 0x3ef20ee0, 0x0b91dafc, 0x3eed7ee7, 0x0baa9211,
+ 0x3ee8e53a, 0x0bc34759, 0x3ee441da, 0x0bdbfad1,
+ 0x3edf94c7, 0x0bf4ac75, 0x3edade01, 0x0c0d5c41,
+ 0x3ed61d8a, 0x0c260a31, 0x3ed15363, 0x0c3eb641,
+ 0x3ecc7f8b, 0x0c57606e, 0x3ec7a205, 0x0c7008b3,
+ 0x3ec2bad0, 0x0c88af0e, 0x3ebdc9ed, 0x0ca1537a,
+ 0x3eb8cf5d, 0x0cb9f5f3, 0x3eb3cb21, 0x0cd29676,
+ 0x3eaebd3a, 0x0ceb34fe, 0x3ea9a5a8, 0x0d03d189,
+ 0x3ea4846c, 0x0d1c6c11, 0x3e9f5988, 0x0d350495,
+ 0x3e9a24fb, 0x0d4d9b0e, 0x3e94e6c6, 0x0d662f7b,
+ 0x3e8f9eeb, 0x0d7ec1d6, 0x3e8a4d6a, 0x0d97521d,
+ 0x3e84f245, 0x0dafe04b, 0x3e7f8d7b, 0x0dc86c5d,
+ 0x3e7a1f0d, 0x0de0f64f, 0x3e74a6fd, 0x0df97e1d,
+ 0x3e6f254c, 0x0e1203c3, 0x3e6999fa, 0x0e2a873e,
+ 0x3e640507, 0x0e430889, 0x3e5e6676, 0x0e5b87a2,
+ 0x3e58be47, 0x0e740483, 0x3e530c7a, 0x0e8c7f2a,
+ 0x3e4d5110, 0x0ea4f793, 0x3e478c0b, 0x0ebd6db9,
+ 0x3e41bd6c, 0x0ed5e19a, 0x3e3be532, 0x0eee5331,
+ 0x3e360360, 0x0f06c27a, 0x3e3017f6, 0x0f1f2f73,
+ 0x3e2a22f4, 0x0f379a16, 0x3e24245d, 0x0f500260,
+ 0x3e1e1c30, 0x0f68684e, 0x3e180a6f, 0x0f80cbdc,
+ 0x3e11ef1b, 0x0f992d06, 0x3e0bca34, 0x0fb18bc8,
+ 0x3e059bbb, 0x0fc9e81e, 0x3dff63b2, 0x0fe24205,
+ 0x3df9221a, 0x0ffa9979, 0x3df2d6f3, 0x1012ee76,
+ 0x3dec823e, 0x102b40f8, 0x3de623fd, 0x104390fd,
+ 0x3ddfbc30, 0x105bde7f, 0x3dd94ad8, 0x1074297b,
+ 0x3dd2cff7, 0x108c71ee, 0x3dcc4b8d, 0x10a4b7d3,
+ 0x3dc5bd9b, 0x10bcfb28, 0x3dbf2622, 0x10d53be7,
+ 0x3db88524, 0x10ed7a0e, 0x3db1daa2, 0x1105b599,
+ 0x3dab269b, 0x111dee84, 0x3da46912, 0x113624cb,
+ 0x3d9da208, 0x114e586a, 0x3d96d17d, 0x1166895f,
+ 0x3d8ff772, 0x117eb7a4, 0x3d8913ea, 0x1196e337,
+ 0x3d8226e4, 0x11af0c13, 0x3d7b3061, 0x11c73235,
+ 0x3d743064, 0x11df5599, 0x3d6d26ec, 0x11f7763c,
+ 0x3d6613fb, 0x120f941a, 0x3d5ef793, 0x1227af2e,
+ 0x3d57d1b3, 0x123fc776, 0x3d50a25e, 0x1257dced,
+ 0x3d496994, 0x126fef90, 0x3d422757, 0x1287ff5b,
+ 0x3d3adba7, 0x12a00c4b, 0x3d338687, 0x12b8165b,
+ 0x3d2c27f6, 0x12d01d89, 0x3d24bff6, 0x12e821cf,
+ 0x3d1d4e88, 0x1300232c, 0x3d15d3ad, 0x1318219a,
+ 0x3d0e4f67, 0x13301d16, 0x3d06c1b6, 0x1348159d,
+ 0x3cff2a9d, 0x13600b2a, 0x3cf78a1b, 0x1377fdbb,
+ 0x3cefe032, 0x138fed4b, 0x3ce82ce4, 0x13a7d9d7,
+ 0x3ce07031, 0x13bfc35b, 0x3cd8aa1b, 0x13d7a9d3,
+ 0x3cd0daa2, 0x13ef8d3c, 0x3cc901c9, 0x14076d91,
+ 0x3cc11f90, 0x141f4ad1, 0x3cb933f9, 0x143724f5,
+ 0x3cb13f04, 0x144efbfc, 0x3ca940b3, 0x1466cfe1,
+ 0x3ca13908, 0x147ea0a0, 0x3c992803, 0x14966e36,
+ 0x3c910da5, 0x14ae38a0, 0x3c88e9f1, 0x14c5ffd9,
+ 0x3c80bce7, 0x14ddc3de, 0x3c788688, 0x14f584ac,
+ 0x3c7046d6, 0x150d423d, 0x3c67fdd1, 0x1524fc90,
+ 0x3c5fab7c, 0x153cb3a0, 0x3c574fd8, 0x1554676a,
+ 0x3c4eeae5, 0x156c17e9, 0x3c467ca6, 0x1583c51b,
+ 0x3c3e051b, 0x159b6efb, 0x3c358446, 0x15b31587,
+ 0x3c2cfa28, 0x15cab8ba, 0x3c2466c2, 0x15e25890,
+ 0x3c1bca16, 0x15f9f507, 0x3c132424, 0x16118e1a,
+ 0x3c0a74f0, 0x162923c5, 0x3c01bc78, 0x1640b606,
+ 0x3bf8fac0, 0x165844d8, 0x3bf02fc9, 0x166fd039,
+ 0x3be75b93, 0x16875823, 0x3bde7e20, 0x169edc94,
+ 0x3bd59771, 0x16b65d88, 0x3bcca789, 0x16cddafb,
+ 0x3bc3ae67, 0x16e554ea, 0x3bbaac0e, 0x16fccb51,
+ 0x3bb1a080, 0x17143e2d, 0x3ba88bbc, 0x172bad7a,
+ 0x3b9f6dc5, 0x17431933, 0x3b96469d, 0x175a8157,
+ 0x3b8d1644, 0x1771e5e0, 0x3b83dcbc, 0x178946cc,
+ 0x3b7a9a07, 0x17a0a417, 0x3b714e25, 0x17b7fdbd,
+ 0x3b67f919, 0x17cf53bb, 0x3b5e9ae4, 0x17e6a60c,
+ 0x3b553386, 0x17fdf4ae, 0x3b4bc303, 0x18153f9d,
+ 0x3b42495a, 0x182c86d5, 0x3b38c68e, 0x1843ca53,
+ 0x3b2f3aa0, 0x185b0a13, 0x3b25a591, 0x18724611,
+ 0x3b1c0764, 0x18897e4a, 0x3b126019, 0x18a0b2bb,
+ 0x3b08afb2, 0x18b7e35f, 0x3afef630, 0x18cf1034,
+ 0x3af53395, 0x18e63935, 0x3aeb67e3, 0x18fd5e5f,
+ 0x3ae1931a, 0x19147fae, 0x3ad7b53d, 0x192b9d1f,
+ 0x3acdce4d, 0x1942b6af, 0x3ac3de4c, 0x1959cc5a,
+ 0x3ab9e53a, 0x1970de1b, 0x3aafe31b, 0x1987ebf0,
+ 0x3aa5d7ee, 0x199ef5d6, 0x3a9bc3b6, 0x19b5fbc8,
+ 0x3a91a674, 0x19ccfdc2, 0x3a87802a, 0x19e3fbc3,
+ 0x3a7d50da, 0x19faf5c5, 0x3a731884, 0x1a11ebc5,
+ 0x3a68d72b, 0x1a28ddc0, 0x3a5e8cd0, 0x1a3fcbb3,
+ 0x3a543974, 0x1a56b599, 0x3a49dd1a, 0x1a6d9b70,
+ 0x3a3f77c3, 0x1a847d33, 0x3a350970, 0x1a9b5adf,
+ 0x3a2a9223, 0x1ab23471, 0x3a2011de, 0x1ac909e5,
+ 0x3a1588a2, 0x1adfdb37, 0x3a0af671, 0x1af6a865,
+ 0x3a005b4d, 0x1b0d716a, 0x39f5b737, 0x1b243643,
+ 0x39eb0a31, 0x1b3af6ec, 0x39e0543c, 0x1b51b363,
+ 0x39d5955a, 0x1b686ba3, 0x39cacd8d, 0x1b7f1fa9,
+ 0x39bffcd7, 0x1b95cf71, 0x39b52339, 0x1bac7af9,
+ 0x39aa40b4, 0x1bc3223c, 0x399f554b, 0x1bd9c537,
+ 0x399460ff, 0x1bf063e6, 0x398963d2, 0x1c06fe46,
+ 0x397e5dc6, 0x1c1d9454, 0x39734edc, 0x1c34260c,
+ 0x39683715, 0x1c4ab36b, 0x395d1675, 0x1c613c6d,
+ 0x3951ecfc, 0x1c77c10e, 0x3946baac, 0x1c8e414b,
+ 0x393b7f86, 0x1ca4bd21, 0x39303b8e, 0x1cbb348d,
+ 0x3924eec3, 0x1cd1a78a, 0x39199929, 0x1ce81615,
+ 0x390e3ac0, 0x1cfe802b, 0x3902d38b, 0x1d14e5c9,
+ 0x38f7638b, 0x1d2b46ea, 0x38ebeac2, 0x1d41a38c,
+ 0x38e06932, 0x1d57fbaa, 0x38d4dedd, 0x1d6e4f43,
+ 0x38c94bc4, 0x1d849e51, 0x38bdafea, 0x1d9ae8d2,
+ 0x38b20b4f, 0x1db12ec3, 0x38a65df6, 0x1dc7701f,
+ 0x389aa7e0, 0x1dddace4, 0x388ee910, 0x1df3e50d,
+ 0x38832187, 0x1e0a1898, 0x38775147, 0x1e204781,
+ 0x386b7852, 0x1e3671c5, 0x385f96a9, 0x1e4c9760,
+ 0x3853ac4f, 0x1e62b84f, 0x3847b946, 0x1e78d48e,
+ 0x383bbd8e, 0x1e8eec1b, 0x382fb92a, 0x1ea4fef0,
+ 0x3823ac1d, 0x1ebb0d0d, 0x38179666, 0x1ed1166b,
+ 0x380b780a, 0x1ee71b0a, 0x37ff5109, 0x1efd1ae4,
+ 0x37f32165, 0x1f1315f7, 0x37e6e921, 0x1f290c3f,
+ 0x37daa83d, 0x1f3efdb9, 0x37ce5ebd, 0x1f54ea62,
+ 0x37c20ca1, 0x1f6ad235, 0x37b5b1ec, 0x1f80b531,
+ 0x37a94ea0, 0x1f969350, 0x379ce2be, 0x1fac6c91,
+ 0x37906e49, 0x1fc240ef, 0x3783f143, 0x1fd81067,
+ 0x37776bac, 0x1feddaf6, 0x376add88, 0x2003a099,
+ 0x375e46d8, 0x2019614c, 0x3751a79e, 0x202f1d0b,
+ 0x3744ffdd, 0x2044d3d4, 0x37384f95, 0x205a85a3,
+ 0x372b96ca, 0x20703275, 0x371ed57c, 0x2085da46,
+ 0x37120bae, 0x209b7d13, 0x37053962, 0x20b11ad9,
+ 0x36f85e9a, 0x20c6b395, 0x36eb7b58, 0x20dc4742,
+ 0x36de8f9e, 0x20f1d5de, 0x36d19b6e, 0x21075f65,
+ 0x36c49ec9, 0x211ce3d5, 0x36b799b3, 0x21326329,
+ 0x36aa8c2c, 0x2147dd5f, 0x369d7637, 0x215d5273,
+ 0x369057d6, 0x2172c262, 0x3683310b, 0x21882d28,
+ 0x367601d7, 0x219d92c2, 0x3668ca3e, 0x21b2f32e,
+ 0x365b8a41, 0x21c84e67, 0x364e41e2, 0x21dda46a,
+ 0x3640f123, 0x21f2f534, 0x36339806, 0x220840c2,
+ 0x3626368d, 0x221d8711, 0x3618ccba, 0x2232c81c,
+ 0x360b5a90, 0x224803e2, 0x35fde011, 0x225d3a5e,
+ 0x35f05d3d, 0x22726b8e, 0x35e2d219, 0x2287976e,
+ 0x35d53ea5, 0x229cbdfa, 0x35c7a2e3, 0x22b1df30,
+ 0x35b9fed7, 0x22c6fb0c, 0x35ac5282, 0x22dc118c,
+ 0x359e9de5, 0x22f122ab, 0x3590e104, 0x23062e67,
+ 0x35831be0, 0x231b34bc, 0x35754e7c, 0x233035a7,
+ 0x356778d9, 0x23453125, 0x35599afa, 0x235a2733,
+ 0x354bb4e1, 0x236f17cc, 0x353dc68f, 0x238402ef,
+ 0x352fd008, 0x2398e898, 0x3521d14d, 0x23adc8c4,
+ 0x3513ca60, 0x23c2a36f, 0x3505bb44, 0x23d77896,
+ 0x34f7a3fb, 0x23ec4837, 0x34e98487, 0x2401124d,
+ 0x34db5cea, 0x2415d6d5, 0x34cd2d26, 0x242a95ce,
+ 0x34bef53d, 0x243f4f32, 0x34b0b533, 0x245402ff,
+ 0x34a26d08, 0x2468b132, 0x34941cbf, 0x247d59c8,
+ 0x3485c45b, 0x2491fcbe, 0x347763dd, 0x24a69a0f,
+ 0x3468fb47, 0x24bb31ba, 0x345a8a9d, 0x24cfc3ba,
+ 0x344c11e0, 0x24e4500e, 0x343d9112, 0x24f8d6b0,
+ 0x342f0836, 0x250d57a0, 0x3420774d, 0x2521d2d8,
+ 0x3411de5b, 0x25364857, 0x34033d61, 0x254ab818,
+ 0x33f49462, 0x255f2219, 0x33e5e360, 0x25738657,
+ 0x33d72a5d, 0x2587e4cf, 0x33c8695b, 0x259c3d7c,
+ 0x33b9a05d, 0x25b0905d, 0x33aacf65, 0x25c4dd6e,
+ 0x339bf675, 0x25d924ac, 0x338d1590, 0x25ed6614,
+ 0x337e2cb7, 0x2601a1a2, 0x336f3bee, 0x2615d754,
+ 0x33604336, 0x262a0727, 0x33514292, 0x263e3117,
+ 0x33423a04, 0x26525521, 0x3333298f, 0x26667342,
+ 0x33241134, 0x267a8b77, 0x3314f0f6, 0x268e9dbd,
+ 0x3305c8d7, 0x26a2aa11, 0x32f698db, 0x26b6b070,
+ 0x32e76102, 0x26cab0d6, 0x32d82150, 0x26deab41,
+ 0x32c8d9c6, 0x26f29fad, 0x32b98a67, 0x27068e18,
+ 0x32aa3336, 0x271a767e, 0x329ad435, 0x272e58dc,
+ 0x328b6d66, 0x27423530, 0x327bfecc, 0x27560b76,
+ 0x326c8868, 0x2769dbaa, 0x325d0a3e, 0x277da5cb,
+ 0x324d8450, 0x279169d5, 0x323df6a0, 0x27a527c4,
+ 0x322e6130, 0x27b8df97, 0x321ec403, 0x27cc9149,
+ 0x320f1f1c, 0x27e03cd8, 0x31ff727c, 0x27f3e241,
+ 0x31efbe27, 0x28078181, 0x31e0021e, 0x281b1a94,
+ 0x31d03e64, 0x282ead78, 0x31c072fb, 0x28423a2a,
+ 0x31b09fe7, 0x2855c0a6, 0x31a0c528, 0x286940ea,
+ 0x3190e2c3, 0x287cbaf3, 0x3180f8b8, 0x28902ebd,
+ 0x3171070c, 0x28a39c46, 0x31610dbf, 0x28b7038b,
+ 0x31510cd5, 0x28ca6488, 0x31410450, 0x28ddbf3b,
+ 0x3130f433, 0x28f113a0, 0x3120dc80, 0x290461b5,
+ 0x3110bd39, 0x2917a977, 0x31009661, 0x292aeae3,
+ 0x30f067fb, 0x293e25f5, 0x30e03208, 0x29515aab,
+ 0x30cff48c, 0x29648902, 0x30bfaf89, 0x2977b0f7,
+ 0x30af6302, 0x298ad287, 0x309f0ef8, 0x299dedaf,
+ 0x308eb36f, 0x29b1026c, 0x307e5069, 0x29c410ba,
+ 0x306de5e9, 0x29d71899, 0x305d73f0, 0x29ea1a03,
+ 0x304cfa83, 0x29fd14f6, 0x303c79a2, 0x2a100970,
+ 0x302bf151, 0x2a22f76e, 0x301b6193, 0x2a35deeb,
+ 0x300aca69, 0x2a48bfe7, 0x2ffa2bd6, 0x2a5b9a5d,
+ 0x2fe985de, 0x2a6e6e4b, 0x2fd8d882, 0x2a813bae,
+ 0x2fc823c5, 0x2a940283, 0x2fb767aa, 0x2aa6c2c6,
+ 0x2fa6a433, 0x2ab97c77, 0x2f95d963, 0x2acc2f90,
+ 0x2f85073c, 0x2adedc10, 0x2f742dc1, 0x2af181f3,
+ 0x2f634cf5, 0x2b042137, 0x2f5264da, 0x2b16b9d9,
+ 0x2f417573, 0x2b294bd5, 0x2f307ec2, 0x2b3bd72a,
+ 0x2f1f80ca, 0x2b4e5bd4, 0x2f0e7b8e, 0x2b60d9d0,
+ 0x2efd6f10, 0x2b73511c, 0x2eec5b53, 0x2b85c1b5,
+ 0x2edb405a, 0x2b982b97, 0x2eca1e27, 0x2baa8ec0,
+ 0x2eb8f4bc, 0x2bbceb2d, 0x2ea7c41e, 0x2bcf40dc,
+ 0x2e968c4d, 0x2be18fc9, 0x2e854d4d, 0x2bf3d7f2,
+ 0x2e740720, 0x2c061953, 0x2e62b9ca, 0x2c1853eb,
+ 0x2e51654c, 0x2c2a87b6, 0x2e4009aa, 0x2c3cb4b1,
+ 0x2e2ea6e6, 0x2c4edada, 0x2e1d3d03, 0x2c60fa2d,
+ 0x2e0bcc03, 0x2c7312a9, 0x2dfa53e9, 0x2c85244a,
+ 0x2de8d4b8, 0x2c972f0d, 0x2dd74e73, 0x2ca932ef,
+ 0x2dc5c11c, 0x2cbb2fef, 0x2db42cb6, 0x2ccd2609,
+ 0x2da29144, 0x2cdf153a, 0x2d90eec8, 0x2cf0fd80,
+ 0x2d7f4545, 0x2d02ded7, 0x2d6d94bf, 0x2d14b93d,
+ 0x2d5bdd36, 0x2d268cb0, 0x2d4a1eaf, 0x2d38592c,
+ 0x1ffff621, 0xffe6de07, 0x1fffa72d, 0xffb49a54,
+ 0x1fff0944, 0xff82575a, 0x1ffe1c68, 0xff501597,
+ 0x1ffce09d, 0xff1dd586, 0x1ffb55e4, 0xfeeb97a2,
+ 0x1ff97c42, 0xfeb95c69, 0x1ff753bb, 0xfe872456,
+ 0x1ff4dc55, 0xfe54efe4, 0x1ff21615, 0xfe22bf90,
+ 0x1fef0103, 0xfdf093d6, 0x1feb9d25, 0xfdbe6d31,
+ 0x1fe7ea85, 0xfd8c4c1e, 0x1fe3e92c, 0xfd5a3117,
+ 0x1fdf9923, 0xfd281c98, 0x1fdafa75, 0xfcf60f1e,
+ 0x1fd60d2e, 0xfcc40923, 0x1fd0d159, 0xfc920b22,
+ 0x1fcb4704, 0xfc601599, 0x1fc56e3b, 0xfc2e2900,
+ 0x1fbf470f, 0xfbfc45d5, 0x1fb8d18d, 0xfbca6c91,
+ 0x1fb20dc7, 0xfb989db0, 0x1faafbcb, 0xfb66d9ad,
+ 0x1fa39bac, 0xfb352102, 0x1f9bed7d, 0xfb03742a,
+ 0x1f93f150, 0xfad1d3a0, 0x1f8ba738, 0xfaa03fde,
+ 0x1f830f4a, 0xfa6eb95f, 0x1f7a299c, 0xfa3d409d,
+ 0x1f70f643, 0xfa0bd611, 0x1f677557, 0xf9da7a36,
+ 0x1f5da6ed, 0xf9a92d86, 0x1f538b20, 0xf977f079,
+ 0x1f492207, 0xf946c38b, 0x1f3e6bbc, 0xf915a733,
+ 0x1f33685a, 0xf8e49beb, 0x1f2817fc, 0xf8b3a22d,
+ 0x1f1c7abe, 0xf882ba70, 0x1f1090bd, 0xf851e52e,
+ 0x1f045a15, 0xf82122e0, 0x1ef7d6e5, 0xf7f073fd,
+ 0x1eeb074c, 0xf7bfd8fd, 0x1eddeb6a, 0xf78f5259,
+ 0x1ed0835f, 0xf75ee088, 0x1ec2cf4b, 0xf72e8402,
+ 0x1eb4cf51, 0xf6fe3d3e, 0x1ea68394, 0xf6ce0cb3,
+ 0x1e97ec36, 0xf69df2d9, 0x1e89095c, 0xf66df025,
+ 0x1e79db2a, 0xf63e050e, 0x1e6a61c5, 0xf60e320b,
+ 0x1e5a9d55, 0xf5de7792, 0x1e4a8e00, 0xf5aed617,
+ 0x1e3a33ec, 0xf57f4e12, 0x1e298f44, 0xf54fdff7,
+ 0x1e18a030, 0xf5208c3a, 0x1e0766d9, 0xf4f15352,
+ 0x1df5e36b, 0xf4c235b2, 0x1de4160f, 0xf49333ce,
+ 0x1dd1fef4, 0xf4644e1b, 0x1dbf9e44, 0xf435850d,
+ 0x1dacf42d, 0xf406d916, 0x1d9a00de, 0xf3d84aab,
+ 0x1d86c484, 0xf3a9da3d, 0x1d733f51, 0xf37b883f,
+ 0x1d5f7173, 0xf34d5524, 0x1d4b5b1b, 0xf31f415e,
+ 0x1d36fc7c, 0xf2f14d5e, 0x1d2255c7, 0xf2c37996,
+ 0x1d0d672f, 0xf295c677, 0x1cf830e9, 0xf2683471,
+ 0x1ce2b328, 0xf23ac3f6, 0x1cccee21, 0xf20d7574,
+ 0x1cb6e20a, 0xf1e0495c, 0x1ca08f1a, 0xf1b3401e,
+ 0x1c89f587, 0xf1865a29, 0x1c73158a, 0xf15997ea,
+ 0x1c5bef5a, 0xf12cf9d2, 0x1c448331, 0xf100804d,
+ 0x1c2cd149, 0xf0d42bc9, 0x1c14d9dc, 0xf0a7fcb5,
+ 0x1bfc9d26, 0xf07bf37d, 0x1be41b61, 0xf050108d,
+ 0x1bcb54cb, 0xf0245452, 0x1bb249a1, 0xeff8bf38,
+ 0x1b98fa20, 0xefcd51aa, 0x1b7f6687, 0xefa20c14,
+ 0x1b658f15, 0xef76eee0, 0x1b4b740a, 0xef4bfa78,
+ 0x1b3115a6, 0xef212f48, 0x1b16742a, 0xeef68db7,
+ 0x1afb8fd9, 0xeecc1630, 0x1ae068f3, 0xeea1c91b,
+ 0x1ac4ffbd, 0xee77a6e1, 0x1aa9547a, 0xee4dafe9,
+ 0x1a8d676e, 0xee23e49b, 0x1a7138df, 0xedfa455f,
+ 0x1a54c911, 0xedd0d29a, 0x1a38184a, 0xeda78cb3,
+ 0x1a1b26d3, 0xed7e7411, 0x19fdf4f1, 0xed558918,
+ 0x19e082ee, 0xed2ccc2d, 0x19c2d111, 0xed043db5,
+ 0x19a4dfa4, 0xecdbde14, 0x1986aef1, 0xecb3adad,
+ 0x19683f43, 0xec8bace4, 0x194990e4, 0xec63dc1c,
+ 0x192aa420, 0xec3c3bb6, 0x190b7943, 0xec14cc15,
+ 0x18ec109b, 0xebed8d9a, 0x18cc6a75, 0xebc680a5,
+ 0x18ac871f, 0xeb9fa597, 0x188c66e7, 0xeb78fcd0,
+ 0x186c0a1e, 0xeb5286af, 0x184b7112, 0xeb2c4393,
+ 0x182a9c14, 0xeb0633da, 0x18098b75, 0xeae057e3,
+ 0x17e83f88, 0xeabab00b, 0x17c6b89d, 0xea953cae,
+ 0x17a4f708, 0xea6ffe2a, 0x1782fb1c, 0xea4af4da,
+ 0x1760c52c, 0xea262119, 0x173e558e, 0xea018342,
+ 0x171bac96, 0xe9dd1bb0, 0x16f8ca9a, 0xe9b8eabd,
+ 0x16d5afef, 0xe994f0c1, 0x16b25ced, 0xe9712e15,
+ 0x168ed1eb, 0xe94da313, 0x166b0f3f, 0xe92a5011,
+ 0x16471543, 0xe9073566, 0x1622e450, 0xe8e4536a,
+ 0x15fe7cbe, 0xe8c1aa72, 0x15d9dee7, 0xe89f3ad4,
+ 0x15b50b26, 0xe87d04e4, 0x159001d6, 0xe85b08f8,
+ 0x156ac352, 0xe8394763, 0x15454ff5, 0xe817c078,
+ 0x151fa81d, 0xe7f6748b, 0x14f9cc26, 0xe7d563ec,
+ 0x14d3bc6d, 0xe7b48eee, 0x14ad7951, 0xe793f5e2,
+ 0x14870330, 0xe7739919, 0x14605a69, 0xe75378e1,
+ 0x14397f5b, 0xe733958b, 0x14127266, 0xe713ef65,
+ 0x13eb33eb, 0xe6f486bd, 0x13c3c44a, 0xe6d55be0,
+ 0x139c23e4, 0xe6b66f1c, 0x1374531c, 0xe697c0bd,
+ 0x134c5253, 0xe679510f, 0x132421ec, 0xe65b205c,
+ 0x12fbc24b, 0xe63d2eef, 0x12d333d3, 0xe61f7d12,
+ 0x12aa76e8, 0xe6020b0f, 0x12818bef, 0xe5e4d92d,
+ 0x1258734d, 0xe5c7e7b6, 0x122f2d66, 0xe5ab36ef,
+ 0x1205baa1, 0xe58ec721, 0x11dc1b65, 0xe5729892,
+ 0x11b25017, 0xe556ab86, 0x1188591f, 0xe53b0043,
+ 0x115e36e5, 0xe51f970d, 0x1133e9d0, 0xe5047027,
+ 0x11097249, 0xe4e98bd6, 0x10ded0b8, 0xe4ceea5a,
+ 0x10b40588, 0xe4b48bf6, 0x10891120, 0xe49a70eb,
+ 0x105df3ec, 0xe4809979, 0x1032ae56, 0xe46705e0,
+ 0x100740c8, 0xe44db65f, 0x0fdbabae, 0xe434ab35,
+ 0x0fafef73, 0xe41be49f, 0x0f840c83, 0xe40362da,
+ 0x0f58034b, 0xe3eb2624, 0x0f2bd437, 0xe3d32eb7,
+ 0x0eff7fb3, 0xe3bb7ccf, 0x0ed3062e, 0xe3a410a6,
+ 0x0ea66816, 0xe38cea76, 0x0e79a5d7, 0xe3760a79,
+ 0x0e4cbfe2, 0xe35f70e6, 0x0e1fb6a4, 0xe3491df6,
+ 0x0df28a8c, 0xe33311df, 0x0dc53c0a, 0xe31d4cd8,
+ 0x0d97cb8f, 0xe307cf17, 0x0d6a3989, 0xe2f298d1,
+ 0x0d3c866a, 0xe2ddaa39, 0x0d0eb2a2, 0xe2c90384,
+ 0x0ce0bea2, 0xe2b4a4e5, 0x0cb2aadc, 0xe2a08e8d,
+ 0x0c8477c1, 0xe28cc0af, 0x0c5625c3, 0xe2793b7c,
+ 0x0c27b555, 0xe265ff22, 0x0bf926ea, 0xe2530bd3,
+ 0x0bca7af3, 0xe24061bc, 0x0b9bb1e5, 0xe22e010c,
+ 0x0b6ccc32, 0xe21be9f1, 0x0b3dca4e, 0xe20a1c95,
+ 0x0b0eacae, 0xe1f89927, 0x0adf73c6, 0xe1e75fd0,
+ 0x0ab02009, 0xe1d670bc, 0x0a80b1ee, 0xe1c5cc14,
+ 0x0a5129e9, 0xe1b57200, 0x0a21886e, 0xe1a562ab,
+ 0x09f1cdf5, 0xe1959e3b, 0x09c1faf2, 0xe18624d6,
+ 0x09920fdb, 0xe176f6a4, 0x09620d27, 0xe16813ca,
+ 0x0931f34d, 0xe1597c6c, 0x0901c2c2, 0xe14b30af,
+ 0x08d17bfe, 0xe13d30b5, 0x08a11f78, 0xe12f7ca1,
+ 0x0870ada7, 0xe1221496, 0x08402703, 0xe114f8b4,
+ 0x080f8c03, 0xe108291b, 0x07dedd20, 0xe0fba5eb,
+ 0x07ae1ad2, 0xe0ef6f43, 0x077d4590, 0xe0e38542,
+ 0x074c5dd3, 0xe0d7e804, 0x071b6415, 0xe0cc97a6,
+ 0x06ea58cd, 0xe0c19444, 0x06b93c75, 0xe0b6ddf9,
+ 0x06880f87, 0xe0ac74e0, 0x0656d27a, 0xe0a25913,
+ 0x062585ca, 0xe0988aa9, 0x05f429ef, 0xe08f09bd,
+ 0x05c2bf63, 0xe085d664, 0x059146a1, 0xe07cf0b6,
+ 0x055fc022, 0xe07458c8, 0x052e2c60, 0xe06c0eb0,
+ 0x04fc8bd6, 0xe0641283, 0x04cadefe, 0xe05c6454,
+ 0x04992653, 0xe0550435, 0x04676250, 0xe04df239,
+ 0x0435936f, 0xe0472e73, 0x0403ba2b, 0xe040b8f1,
+ 0x03d1d700, 0xe03a91c5, 0x039fea67, 0xe034b8fc,
+ 0x036df4de, 0xe02f2ea7, 0x033bf6dd, 0xe029f2d2,
+ 0x0309f0e2, 0xe025058b, 0x02d7e368, 0xe02066dd,
+ 0x02a5cee9, 0xe01c16d4, 0x0273b3e2, 0xe018157b,
+ 0x024192cf, 0xe01462db, 0x020f6c2a, 0xe010fefd,
+ 0x01dd4070, 0xe00de9eb, 0x01ab101c, 0xe00b23ab,
+ 0x0178dbaa, 0xe008ac45, 0x0146a397, 0xe00683be,
+ 0x0114685e, 0xe004aa1c, 0x00e22a7a, 0xe0031f63,
+ 0x00afea69, 0xe001e398, 0x007da8a6, 0xe000f6bc,
+ 0x004b65ac, 0xe00058d3, 0x001921f9, 0xe00009df,
+};
+
+static ogg_int16_t bitrevlook_2048[512]={
+ 0x03fe, 0x0000, 0x01fe, 0x0200,
+ 0x02fe, 0x0100, 0x00fe, 0x0300,
+ 0x037e, 0x0080, 0x017e, 0x0280,
+ 0x027e, 0x0180, 0x007e, 0x0380,
+ 0x03be, 0x0040, 0x01be, 0x0240,
+ 0x02be, 0x0140, 0x00be, 0x0340,
+ 0x033e, 0x00c0, 0x013e, 0x02c0,
+ 0x023e, 0x01c0, 0x003e, 0x03c0,
+ 0x03de, 0x0020, 0x01de, 0x0220,
+ 0x02de, 0x0120, 0x00de, 0x0320,
+ 0x035e, 0x00a0, 0x015e, 0x02a0,
+ 0x025e, 0x01a0, 0x005e, 0x03a0,
+ 0x039e, 0x0060, 0x019e, 0x0260,
+ 0x029e, 0x0160, 0x009e, 0x0360,
+ 0x031e, 0x00e0, 0x011e, 0x02e0,
+ 0x021e, 0x01e0, 0x001e, 0x03e0,
+ 0x03ee, 0x0010, 0x01ee, 0x0210,
+ 0x02ee, 0x0110, 0x00ee, 0x0310,
+ 0x036e, 0x0090, 0x016e, 0x0290,
+ 0x026e, 0x0190, 0x006e, 0x0390,
+ 0x03ae, 0x0050, 0x01ae, 0x0250,
+ 0x02ae, 0x0150, 0x00ae, 0x0350,
+ 0x032e, 0x00d0, 0x012e, 0x02d0,
+ 0x022e, 0x01d0, 0x002e, 0x03d0,
+ 0x03ce, 0x0030, 0x01ce, 0x0230,
+ 0x02ce, 0x0130, 0x00ce, 0x0330,
+ 0x034e, 0x00b0, 0x014e, 0x02b0,
+ 0x024e, 0x01b0, 0x004e, 0x03b0,
+ 0x038e, 0x0070, 0x018e, 0x0270,
+ 0x028e, 0x0170, 0x008e, 0x0370,
+ 0x030e, 0x00f0, 0x010e, 0x02f0,
+ 0x020e, 0x01f0, 0x000e, 0x03f0,
+ 0x03f6, 0x0008, 0x01f6, 0x0208,
+ 0x02f6, 0x0108, 0x00f6, 0x0308,
+ 0x0376, 0x0088, 0x0176, 0x0288,
+ 0x0276, 0x0188, 0x0076, 0x0388,
+ 0x03b6, 0x0048, 0x01b6, 0x0248,
+ 0x02b6, 0x0148, 0x00b6, 0x0348,
+ 0x0336, 0x00c8, 0x0136, 0x02c8,
+ 0x0236, 0x01c8, 0x0036, 0x03c8,
+ 0x03d6, 0x0028, 0x01d6, 0x0228,
+ 0x02d6, 0x0128, 0x00d6, 0x0328,
+ 0x0356, 0x00a8, 0x0156, 0x02a8,
+ 0x0256, 0x01a8, 0x0056, 0x03a8,
+ 0x0396, 0x0068, 0x0196, 0x0268,
+ 0x0296, 0x0168, 0x0096, 0x0368,
+ 0x0316, 0x00e8, 0x0116, 0x02e8,
+ 0x0216, 0x01e8, 0x0016, 0x03e8,
+ 0x03e6, 0x0018, 0x01e6, 0x0218,
+ 0x02e6, 0x0118, 0x00e6, 0x0318,
+ 0x0366, 0x0098, 0x0166, 0x0298,
+ 0x0266, 0x0198, 0x0066, 0x0398,
+ 0x03a6, 0x0058, 0x01a6, 0x0258,
+ 0x02a6, 0x0158, 0x00a6, 0x0358,
+ 0x0326, 0x00d8, 0x0126, 0x02d8,
+ 0x0226, 0x01d8, 0x0026, 0x03d8,
+ 0x03c6, 0x0038, 0x01c6, 0x0238,
+ 0x02c6, 0x0138, 0x00c6, 0x0338,
+ 0x0346, 0x00b8, 0x0146, 0x02b8,
+ 0x0246, 0x01b8, 0x0046, 0x03b8,
+ 0x0386, 0x0078, 0x0186, 0x0278,
+ 0x0286, 0x0178, 0x0086, 0x0378,
+ 0x0306, 0x00f8, 0x0106, 0x02f8,
+ 0x0206, 0x01f8, 0x0006, 0x03f8,
+ 0x03fa, 0x0004, 0x01fa, 0x0204,
+ 0x02fa, 0x0104, 0x00fa, 0x0304,
+ 0x037a, 0x0084, 0x017a, 0x0284,
+ 0x027a, 0x0184, 0x007a, 0x0384,
+ 0x03ba, 0x0044, 0x01ba, 0x0244,
+ 0x02ba, 0x0144, 0x00ba, 0x0344,
+ 0x033a, 0x00c4, 0x013a, 0x02c4,
+ 0x023a, 0x01c4, 0x003a, 0x03c4,
+ 0x03da, 0x0024, 0x01da, 0x0224,
+ 0x02da, 0x0124, 0x00da, 0x0324,
+ 0x035a, 0x00a4, 0x015a, 0x02a4,
+ 0x025a, 0x01a4, 0x005a, 0x03a4,
+ 0x039a, 0x0064, 0x019a, 0x0264,
+ 0x029a, 0x0164, 0x009a, 0x0364,
+ 0x031a, 0x00e4, 0x011a, 0x02e4,
+ 0x021a, 0x01e4, 0x001a, 0x03e4,
+ 0x03ea, 0x0014, 0x01ea, 0x0214,
+ 0x02ea, 0x0114, 0x00ea, 0x0314,
+ 0x036a, 0x0094, 0x016a, 0x0294,
+ 0x026a, 0x0194, 0x006a, 0x0394,
+ 0x03aa, 0x0054, 0x01aa, 0x0254,
+ 0x02aa, 0x0154, 0x00aa, 0x0354,
+ 0x032a, 0x00d4, 0x012a, 0x02d4,
+ 0x022a, 0x01d4, 0x002a, 0x03d4,
+ 0x03ca, 0x0034, 0x01ca, 0x0234,
+ 0x02ca, 0x0134, 0x00ca, 0x0334,
+ 0x034a, 0x00b4, 0x014a, 0x02b4,
+ 0x024a, 0x01b4, 0x004a, 0x03b4,
+ 0x038a, 0x0074, 0x018a, 0x0274,
+ 0x028a, 0x0174, 0x008a, 0x0374,
+ 0x030a, 0x00f4, 0x010a, 0x02f4,
+ 0x020a, 0x01f4, 0x000a, 0x03f4,
+ 0x03f2, 0x000c, 0x01f2, 0x020c,
+ 0x02f2, 0x010c, 0x00f2, 0x030c,
+ 0x0372, 0x008c, 0x0172, 0x028c,
+ 0x0272, 0x018c, 0x0072, 0x038c,
+ 0x03b2, 0x004c, 0x01b2, 0x024c,
+ 0x02b2, 0x014c, 0x00b2, 0x034c,
+ 0x0332, 0x00cc, 0x0132, 0x02cc,
+ 0x0232, 0x01cc, 0x0032, 0x03cc,
+ 0x03d2, 0x002c, 0x01d2, 0x022c,
+ 0x02d2, 0x012c, 0x00d2, 0x032c,
+ 0x0352, 0x00ac, 0x0152, 0x02ac,
+ 0x0252, 0x01ac, 0x0052, 0x03ac,
+ 0x0392, 0x006c, 0x0192, 0x026c,
+ 0x0292, 0x016c, 0x0092, 0x036c,
+ 0x0312, 0x00ec, 0x0112, 0x02ec,
+ 0x0212, 0x01ec, 0x0012, 0x03ec,
+ 0x03e2, 0x001c, 0x01e2, 0x021c,
+ 0x02e2, 0x011c, 0x00e2, 0x031c,
+ 0x0362, 0x009c, 0x0162, 0x029c,
+ 0x0262, 0x019c, 0x0062, 0x039c,
+ 0x03a2, 0x005c, 0x01a2, 0x025c,
+ 0x02a2, 0x015c, 0x00a2, 0x035c,
+ 0x0322, 0x00dc, 0x0122, 0x02dc,
+ 0x0222, 0x01dc, 0x0022, 0x03dc,
+ 0x03c2, 0x003c, 0x01c2, 0x023c,
+ 0x02c2, 0x013c, 0x00c2, 0x033c,
+ 0x0342, 0x00bc, 0x0142, 0x02bc,
+ 0x0242, 0x01bc, 0x0042, 0x03bc,
+ 0x0382, 0x007c, 0x0182, 0x027c,
+ 0x0282, 0x017c, 0x0082, 0x037c,
+ 0x0302, 0x00fc, 0x0102, 0x02fc,
+ 0x0202, 0x01fc, 0x0002, 0x03fc,
+};
+
+static ogg_int32_t triglook_4096[5120]={
+ 0x40000000, 0x00000000, 0x3fffec43, 0xffcdbc0f,
+ 0x3fffb10b, 0xff9b783c, 0x3fff4e59, 0xff6934a8,
+ 0x3ffec42d, 0xff36f170, 0x3ffe1288, 0xff04aeb5,
+ 0x3ffd3969, 0xfed26c94, 0x3ffc38d1, 0xfea02b2e,
+ 0x3ffb10c1, 0xfe6deaa1, 0x3ff9c13a, 0xfe3bab0b,
+ 0x3ff84a3c, 0xfe096c8d, 0x3ff6abc8, 0xfdd72f45,
+ 0x3ff4e5e0, 0xfda4f351, 0x3ff2f884, 0xfd72b8d2,
+ 0x3ff0e3b6, 0xfd407fe6, 0x3feea776, 0xfd0e48ab,
+ 0x3fec43c7, 0xfcdc1342, 0x3fe9b8a9, 0xfca9dfc8,
+ 0x3fe7061f, 0xfc77ae5e, 0x3fe42c2a, 0xfc457f21,
+ 0x3fe12acb, 0xfc135231, 0x3fde0205, 0xfbe127ac,
+ 0x3fdab1d9, 0xfbaeffb3, 0x3fd73a4a, 0xfb7cda63,
+ 0x3fd39b5a, 0xfb4ab7db, 0x3fcfd50b, 0xfb18983b,
+ 0x3fcbe75e, 0xfae67ba2, 0x3fc7d258, 0xfab4622d,
+ 0x3fc395f9, 0xfa824bfd, 0x3fbf3246, 0xfa503930,
+ 0x3fbaa740, 0xfa1e29e5, 0x3fb5f4ea, 0xf9ec1e3b,
+ 0x3fb11b48, 0xf9ba1651, 0x3fac1a5b, 0xf9881245,
+ 0x3fa6f228, 0xf9561237, 0x3fa1a2b2, 0xf9241645,
+ 0x3f9c2bfb, 0xf8f21e8e, 0x3f968e07, 0xf8c02b31,
+ 0x3f90c8da, 0xf88e3c4d, 0x3f8adc77, 0xf85c5201,
+ 0x3f84c8e2, 0xf82a6c6a, 0x3f7e8e1e, 0xf7f88ba9,
+ 0x3f782c30, 0xf7c6afdc, 0x3f71a31b, 0xf794d922,
+ 0x3f6af2e3, 0xf7630799, 0x3f641b8d, 0xf7313b60,
+ 0x3f5d1d1d, 0xf6ff7496, 0x3f55f796, 0xf6cdb359,
+ 0x3f4eaafe, 0xf69bf7c9, 0x3f473759, 0xf66a4203,
+ 0x3f3f9cab, 0xf6389228, 0x3f37dafa, 0xf606e854,
+ 0x3f2ff24a, 0xf5d544a7, 0x3f27e29f, 0xf5a3a740,
+ 0x3f1fabff, 0xf572103d, 0x3f174e70, 0xf5407fbd,
+ 0x3f0ec9f5, 0xf50ef5de, 0x3f061e95, 0xf4dd72be,
+ 0x3efd4c54, 0xf4abf67e, 0x3ef45338, 0xf47a8139,
+ 0x3eeb3347, 0xf4491311, 0x3ee1ec87, 0xf417ac22,
+ 0x3ed87efc, 0xf3e64c8c, 0x3eceeaad, 0xf3b4f46c,
+ 0x3ec52fa0, 0xf383a3e2, 0x3ebb4ddb, 0xf3525b0b,
+ 0x3eb14563, 0xf3211a07, 0x3ea7163f, 0xf2efe0f2,
+ 0x3e9cc076, 0xf2beafed, 0x3e92440d, 0xf28d8715,
+ 0x3e87a10c, 0xf25c6688, 0x3e7cd778, 0xf22b4e66,
+ 0x3e71e759, 0xf1fa3ecb, 0x3e66d0b4, 0xf1c937d6,
+ 0x3e5b9392, 0xf19839a6, 0x3e502ff9, 0xf1674459,
+ 0x3e44a5ef, 0xf136580d, 0x3e38f57c, 0xf10574e0,
+ 0x3e2d1ea8, 0xf0d49af1, 0x3e212179, 0xf0a3ca5d,
+ 0x3e14fdf7, 0xf0730342, 0x3e08b42a, 0xf04245c0,
+ 0x3dfc4418, 0xf01191f3, 0x3defadca, 0xefe0e7f9,
+ 0x3de2f148, 0xefb047f2, 0x3dd60e99, 0xef7fb1fa,
+ 0x3dc905c5, 0xef4f2630, 0x3dbbd6d4, 0xef1ea4b2,
+ 0x3dae81cf, 0xeeee2d9d, 0x3da106bd, 0xeebdc110,
+ 0x3d9365a8, 0xee8d5f29, 0x3d859e96, 0xee5d0804,
+ 0x3d77b192, 0xee2cbbc1, 0x3d699ea3, 0xedfc7a7c,
+ 0x3d5b65d2, 0xedcc4454, 0x3d4d0728, 0xed9c1967,
+ 0x3d3e82ae, 0xed6bf9d1, 0x3d2fd86c, 0xed3be5b1,
+ 0x3d21086c, 0xed0bdd25, 0x3d1212b7, 0xecdbe04a,
+ 0x3d02f757, 0xecabef3d, 0x3cf3b653, 0xec7c0a1d,
+ 0x3ce44fb7, 0xec4c3106, 0x3cd4c38b, 0xec1c6417,
+ 0x3cc511d9, 0xebeca36c, 0x3cb53aaa, 0xebbcef23,
+ 0x3ca53e09, 0xeb8d475b, 0x3c951bff, 0xeb5dac2f,
+ 0x3c84d496, 0xeb2e1dbe, 0x3c7467d9, 0xeafe9c24,
+ 0x3c63d5d1, 0xeacf277f, 0x3c531e88, 0xea9fbfed,
+ 0x3c42420a, 0xea70658a, 0x3c314060, 0xea411874,
+ 0x3c201994, 0xea11d8c8, 0x3c0ecdb2, 0xe9e2a6a3,
+ 0x3bfd5cc4, 0xe9b38223, 0x3bebc6d5, 0xe9846b63,
+ 0x3bda0bf0, 0xe9556282, 0x3bc82c1f, 0xe926679c,
+ 0x3bb6276e, 0xe8f77acf, 0x3ba3fde7, 0xe8c89c37,
+ 0x3b91af97, 0xe899cbf1, 0x3b7f3c87, 0xe86b0a1a,
+ 0x3b6ca4c4, 0xe83c56cf, 0x3b59e85a, 0xe80db22d,
+ 0x3b470753, 0xe7df1c50, 0x3b3401bb, 0xe7b09555,
+ 0x3b20d79e, 0xe7821d59, 0x3b0d8909, 0xe753b479,
+ 0x3afa1605, 0xe7255ad1, 0x3ae67ea1, 0xe6f7107e,
+ 0x3ad2c2e8, 0xe6c8d59c, 0x3abee2e5, 0xe69aaa48,
+ 0x3aaadea6, 0xe66c8e9f, 0x3a96b636, 0xe63e82bc,
+ 0x3a8269a3, 0xe61086bc, 0x3a6df8f8, 0xe5e29abc,
+ 0x3a596442, 0xe5b4bed8, 0x3a44ab8e, 0xe586f32c,
+ 0x3a2fcee8, 0xe55937d5, 0x3a1ace5f, 0xe52b8cee,
+ 0x3a05a9fd, 0xe4fdf294, 0x39f061d2, 0xe4d068e2,
+ 0x39daf5e8, 0xe4a2eff6, 0x39c5664f, 0xe47587eb,
+ 0x39afb313, 0xe44830dd, 0x3999dc42, 0xe41aeae8,
+ 0x3983e1e8, 0xe3edb628, 0x396dc414, 0xe3c092b9,
+ 0x395782d3, 0xe39380b6, 0x39411e33, 0xe366803c,
+ 0x392a9642, 0xe3399167, 0x3913eb0e, 0xe30cb451,
+ 0x38fd1ca4, 0xe2dfe917, 0x38e62b13, 0xe2b32fd4,
+ 0x38cf1669, 0xe28688a4, 0x38b7deb4, 0xe259f3a3,
+ 0x38a08402, 0xe22d70eb, 0x38890663, 0xe2010099,
+ 0x387165e3, 0xe1d4a2c8, 0x3859a292, 0xe1a85793,
+ 0x3841bc7f, 0xe17c1f15, 0x3829b3b9, 0xe14ff96a,
+ 0x3811884d, 0xe123e6ad, 0x37f93a4b, 0xe0f7e6f9,
+ 0x37e0c9c3, 0xe0cbfa6a, 0x37c836c2, 0xe0a0211a,
+ 0x37af8159, 0xe0745b24, 0x3796a996, 0xe048a8a4,
+ 0x377daf89, 0xe01d09b4, 0x37649341, 0xdff17e70,
+ 0x374b54ce, 0xdfc606f1, 0x3731f440, 0xdf9aa354,
+ 0x371871a5, 0xdf6f53b3, 0x36fecd0e, 0xdf441828,
+ 0x36e5068a, 0xdf18f0ce, 0x36cb1e2a, 0xdeedddc0,
+ 0x36b113fd, 0xdec2df18, 0x3696e814, 0xde97f4f1,
+ 0x367c9a7e, 0xde6d1f65, 0x36622b4c, 0xde425e8f,
+ 0x36479a8e, 0xde17b28a, 0x362ce855, 0xdded1b6e,
+ 0x361214b0, 0xddc29958, 0x35f71fb1, 0xdd982c60,
+ 0x35dc0968, 0xdd6dd4a2, 0x35c0d1e7, 0xdd439236,
+ 0x35a5793c, 0xdd196538, 0x3589ff7a, 0xdcef4dc2,
+ 0x356e64b2, 0xdcc54bec, 0x3552a8f4, 0xdc9b5fd2,
+ 0x3536cc52, 0xdc71898d, 0x351acedd, 0xdc47c936,
+ 0x34feb0a5, 0xdc1e1ee9, 0x34e271bd, 0xdbf48abd,
+ 0x34c61236, 0xdbcb0cce, 0x34a99221, 0xdba1a534,
+ 0x348cf190, 0xdb785409, 0x34703095, 0xdb4f1967,
+ 0x34534f41, 0xdb25f566, 0x34364da6, 0xdafce821,
+ 0x34192bd5, 0xdad3f1b1, 0x33fbe9e2, 0xdaab122f,
+ 0x33de87de, 0xda8249b4, 0x33c105db, 0xda599859,
+ 0x33a363ec, 0xda30fe38, 0x3385a222, 0xda087b69,
+ 0x3367c090, 0xd9e01006, 0x3349bf48, 0xd9b7bc27,
+ 0x332b9e5e, 0xd98f7fe6, 0x330d5de3, 0xd9675b5a,
+ 0x32eefdea, 0xd93f4e9e, 0x32d07e85, 0xd91759c9,
+ 0x32b1dfc9, 0xd8ef7cf4, 0x329321c7, 0xd8c7b838,
+ 0x32744493, 0xd8a00bae, 0x32554840, 0xd878776d,
+ 0x32362ce0, 0xd850fb8e, 0x3216f287, 0xd829982b,
+ 0x31f79948, 0xd8024d59, 0x31d82137, 0xd7db1b34,
+ 0x31b88a66, 0xd7b401d1, 0x3198d4ea, 0xd78d014a,
+ 0x317900d6, 0xd76619b6, 0x31590e3e, 0xd73f4b2e,
+ 0x3138fd35, 0xd71895c9, 0x3118cdcf, 0xd6f1f99f,
+ 0x30f8801f, 0xd6cb76c9, 0x30d8143b, 0xd6a50d5d,
+ 0x30b78a36, 0xd67ebd74, 0x3096e223, 0xd6588725,
+ 0x30761c18, 0xd6326a88, 0x30553828, 0xd60c67b4,
+ 0x30343667, 0xd5e67ec1, 0x301316eb, 0xd5c0afc6,
+ 0x2ff1d9c7, 0xd59afadb, 0x2fd07f0f, 0xd5756016,
+ 0x2faf06da, 0xd54fdf8f, 0x2f8d713a, 0xd52a795d,
+ 0x2f6bbe45, 0xd5052d97, 0x2f49ee0f, 0xd4dffc54,
+ 0x2f2800af, 0xd4bae5ab, 0x2f05f637, 0xd495e9b3,
+ 0x2ee3cebe, 0xd4710883, 0x2ec18a58, 0xd44c4232,
+ 0x2e9f291b, 0xd42796d5, 0x2e7cab1c, 0xd4030684,
+ 0x2e5a1070, 0xd3de9156, 0x2e37592c, 0xd3ba3760,
+ 0x2e148566, 0xd395f8ba, 0x2df19534, 0xd371d579,
+ 0x2dce88aa, 0xd34dcdb4, 0x2dab5fdf, 0xd329e181,
+ 0x2d881ae8, 0xd30610f7, 0x2d64b9da, 0xd2e25c2b,
+ 0x2d413ccd, 0xd2bec333, 0x2d1da3d5, 0xd29b4626,
+ 0x2cf9ef09, 0xd277e518, 0x2cd61e7f, 0xd254a021,
+ 0x2cb2324c, 0xd2317756, 0x2c8e2a87, 0xd20e6acc,
+ 0x2c6a0746, 0xd1eb7a9a, 0x2c45c8a0, 0xd1c8a6d4,
+ 0x2c216eaa, 0xd1a5ef90, 0x2bfcf97c, 0xd18354e4,
+ 0x2bd8692b, 0xd160d6e5, 0x2bb3bdce, 0xd13e75a8,
+ 0x2b8ef77d, 0xd11c3142, 0x2b6a164d, 0xd0fa09c9,
+ 0x2b451a55, 0xd0d7ff51, 0x2b2003ac, 0xd0b611f1,
+ 0x2afad269, 0xd09441bb, 0x2ad586a3, 0xd0728ec6,
+ 0x2ab02071, 0xd050f926, 0x2a8a9fea, 0xd02f80f1,
+ 0x2a650525, 0xd00e2639, 0x2a3f503a, 0xcfece915,
+ 0x2a19813f, 0xcfcbc999, 0x29f3984c, 0xcfaac7d8,
+ 0x29cd9578, 0xcf89e3e8, 0x29a778db, 0xcf691ddd,
+ 0x2981428c, 0xcf4875ca, 0x295af2a3, 0xcf27ebc5,
+ 0x29348937, 0xcf077fe1, 0x290e0661, 0xcee73231,
+ 0x28e76a37, 0xcec702cb, 0x28c0b4d2, 0xcea6f1c2,
+ 0x2899e64a, 0xce86ff2a, 0x2872feb6, 0xce672b16,
+ 0x284bfe2f, 0xce47759a, 0x2824e4cc, 0xce27dec9,
+ 0x27fdb2a7, 0xce0866b8, 0x27d667d5, 0xcde90d79,
+ 0x27af0472, 0xcdc9d320, 0x27878893, 0xcdaab7c0,
+ 0x275ff452, 0xcd8bbb6d, 0x273847c8, 0xcd6cde39,
+ 0x2710830c, 0xcd4e2037, 0x26e8a637, 0xcd2f817b,
+ 0x26c0b162, 0xcd110216, 0x2698a4a6, 0xccf2a21d,
+ 0x2670801a, 0xccd461a2, 0x264843d9, 0xccb640b8,
+ 0x261feffa, 0xcc983f70, 0x25f78497, 0xcc7a5dde,
+ 0x25cf01c8, 0xcc5c9c14, 0x25a667a7, 0xcc3efa25,
+ 0x257db64c, 0xcc217822, 0x2554edd1, 0xcc04161e,
+ 0x252c0e4f, 0xcbe6d42b, 0x250317df, 0xcbc9b25a,
+ 0x24da0a9a, 0xcbacb0bf, 0x24b0e699, 0xcb8fcf6b,
+ 0x2487abf7, 0xcb730e70, 0x245e5acc, 0xcb566ddf,
+ 0x2434f332, 0xcb39edca, 0x240b7543, 0xcb1d8e43,
+ 0x23e1e117, 0xcb014f5b, 0x23b836ca, 0xcae53123,
+ 0x238e7673, 0xcac933ae, 0x2364a02e, 0xcaad570c,
+ 0x233ab414, 0xca919b4e, 0x2310b23e, 0xca760086,
+ 0x22e69ac8, 0xca5a86c4, 0x22bc6dca, 0xca3f2e19,
+ 0x22922b5e, 0xca23f698, 0x2267d3a0, 0xca08e04f,
+ 0x223d66a8, 0xc9edeb50, 0x2212e492, 0xc9d317ab,
+ 0x21e84d76, 0xc9b86572, 0x21bda171, 0xc99dd4b4,
+ 0x2192e09b, 0xc9836582, 0x21680b0f, 0xc96917ec,
+ 0x213d20e8, 0xc94eec03, 0x21122240, 0xc934e1d6,
+ 0x20e70f32, 0xc91af976, 0x20bbe7d8, 0xc90132f2,
+ 0x2090ac4d, 0xc8e78e5b, 0x20655cac, 0xc8ce0bc0,
+ 0x2039f90f, 0xc8b4ab32, 0x200e8190, 0xc89b6cbf,
+ 0x1fe2f64c, 0xc8825077, 0x1fb7575c, 0xc869566a,
+ 0x1f8ba4dc, 0xc8507ea7, 0x1f5fdee6, 0xc837c93e,
+ 0x1f340596, 0xc81f363d, 0x1f081907, 0xc806c5b5,
+ 0x1edc1953, 0xc7ee77b3, 0x1eb00696, 0xc7d64c47,
+ 0x1e83e0eb, 0xc7be4381, 0x1e57a86d, 0xc7a65d6e,
+ 0x1e2b5d38, 0xc78e9a1d, 0x1dfeff67, 0xc776f99d,
+ 0x1dd28f15, 0xc75f7bfe, 0x1da60c5d, 0xc748214c,
+ 0x1d79775c, 0xc730e997, 0x1d4cd02c, 0xc719d4ed,
+ 0x1d2016e9, 0xc702e35c, 0x1cf34baf, 0xc6ec14f2,
+ 0x1cc66e99, 0xc6d569be, 0x1c997fc4, 0xc6bee1cd,
+ 0x1c6c7f4a, 0xc6a87d2d, 0x1c3f6d47, 0xc6923bec,
+ 0x1c1249d8, 0xc67c1e18, 0x1be51518, 0xc66623be,
+ 0x1bb7cf23, 0xc6504ced, 0x1b8a7815, 0xc63a99b1,
+ 0x1b5d100a, 0xc6250a18, 0x1b2f971e, 0xc60f9e2e,
+ 0x1b020d6c, 0xc5fa5603, 0x1ad47312, 0xc5e531a1,
+ 0x1aa6c82b, 0xc5d03118, 0x1a790cd4, 0xc5bb5472,
+ 0x1a4b4128, 0xc5a69bbe, 0x1a1d6544, 0xc5920708,
+ 0x19ef7944, 0xc57d965d, 0x19c17d44, 0xc56949ca,
+ 0x19937161, 0xc555215a, 0x196555b8, 0xc5411d1b,
+ 0x19372a64, 0xc52d3d18, 0x1908ef82, 0xc519815f,
+ 0x18daa52f, 0xc505e9fb, 0x18ac4b87, 0xc4f276f7,
+ 0x187de2a7, 0xc4df2862, 0x184f6aab, 0xc4cbfe45,
+ 0x1820e3b0, 0xc4b8f8ad, 0x17f24dd3, 0xc4a617a6,
+ 0x17c3a931, 0xc4935b3c, 0x1794f5e6, 0xc480c379,
+ 0x1766340f, 0xc46e5069, 0x173763c9, 0xc45c0219,
+ 0x17088531, 0xc449d892, 0x16d99864, 0xc437d3e1,
+ 0x16aa9d7e, 0xc425f410, 0x167b949d, 0xc414392b,
+ 0x164c7ddd, 0xc402a33c, 0x161d595d, 0xc3f1324e,
+ 0x15ee2738, 0xc3dfe66c, 0x15bee78c, 0xc3cebfa0,
+ 0x158f9a76, 0xc3bdbdf6, 0x15604013, 0xc3ace178,
+ 0x1530d881, 0xc39c2a2f, 0x150163dc, 0xc38b9827,
+ 0x14d1e242, 0xc37b2b6a, 0x14a253d1, 0xc36ae401,
+ 0x1472b8a5, 0xc35ac1f7, 0x144310dd, 0xc34ac556,
+ 0x14135c94, 0xc33aee27, 0x13e39be9, 0xc32b3c75,
+ 0x13b3cefa, 0xc31bb049, 0x1383f5e3, 0xc30c49ad,
+ 0x135410c3, 0xc2fd08a9, 0x13241fb6, 0xc2eded49,
+ 0x12f422db, 0xc2def794, 0x12c41a4f, 0xc2d02794,
+ 0x1294062f, 0xc2c17d52, 0x1263e699, 0xc2b2f8d8,
+ 0x1233bbac, 0xc2a49a2e, 0x12038584, 0xc296615d,
+ 0x11d3443f, 0xc2884e6e, 0x11a2f7fc, 0xc27a616a,
+ 0x1172a0d7, 0xc26c9a58, 0x11423ef0, 0xc25ef943,
+ 0x1111d263, 0xc2517e31, 0x10e15b4e, 0xc244292c,
+ 0x10b0d9d0, 0xc236fa3b, 0x10804e06, 0xc229f167,
+ 0x104fb80e, 0xc21d0eb8, 0x101f1807, 0xc2105236,
+ 0x0fee6e0d, 0xc203bbe8, 0x0fbdba40, 0xc1f74bd6,
+ 0x0f8cfcbe, 0xc1eb0209, 0x0f5c35a3, 0xc1dede87,
+ 0x0f2b650f, 0xc1d2e158, 0x0efa8b20, 0xc1c70a84,
+ 0x0ec9a7f3, 0xc1bb5a11, 0x0e98bba7, 0xc1afd007,
+ 0x0e67c65a, 0xc1a46c6e, 0x0e36c82a, 0xc1992f4c,
+ 0x0e05c135, 0xc18e18a7, 0x0dd4b19a, 0xc1832888,
+ 0x0da39978, 0xc1785ef4, 0x0d7278eb, 0xc16dbbf3,
+ 0x0d415013, 0xc1633f8a, 0x0d101f0e, 0xc158e9c1,
+ 0x0cdee5f9, 0xc14eba9d, 0x0cada4f5, 0xc144b225,
+ 0x0c7c5c1e, 0xc13ad060, 0x0c4b0b94, 0xc1311553,
+ 0x0c19b374, 0xc1278104, 0x0be853de, 0xc11e1379,
+ 0x0bb6ecef, 0xc114ccb9, 0x0b857ec7, 0xc10bacc8,
+ 0x0b540982, 0xc102b3ac, 0x0b228d42, 0xc0f9e16b,
+ 0x0af10a22, 0xc0f1360b, 0x0abf8043, 0xc0e8b190,
+ 0x0a8defc3, 0xc0e05401, 0x0a5c58c0, 0xc0d81d61,
+ 0x0a2abb59, 0xc0d00db6, 0x09f917ac, 0xc0c82506,
+ 0x09c76dd8, 0xc0c06355, 0x0995bdfd, 0xc0b8c8a7,
+ 0x09640837, 0xc0b15502, 0x09324ca7, 0xc0aa086a,
+ 0x09008b6a, 0xc0a2e2e3, 0x08cec4a0, 0xc09be473,
+ 0x089cf867, 0xc0950d1d, 0x086b26de, 0xc08e5ce5,
+ 0x08395024, 0xc087d3d0, 0x08077457, 0xc08171e2,
+ 0x07d59396, 0xc07b371e, 0x07a3adff, 0xc0752389,
+ 0x0771c3b3, 0xc06f3726, 0x073fd4cf, 0xc06971f9,
+ 0x070de172, 0xc063d405, 0x06dbe9bb, 0xc05e5d4e,
+ 0x06a9edc9, 0xc0590dd8, 0x0677edbb, 0xc053e5a5,
+ 0x0645e9af, 0xc04ee4b8, 0x0613e1c5, 0xc04a0b16,
+ 0x05e1d61b, 0xc04558c0, 0x05afc6d0, 0xc040cdba,
+ 0x057db403, 0xc03c6a07, 0x054b9dd3, 0xc0382da8,
+ 0x0519845e, 0xc03418a2, 0x04e767c5, 0xc0302af5,
+ 0x04b54825, 0xc02c64a6, 0x0483259d, 0xc028c5b6,
+ 0x0451004d, 0xc0254e27, 0x041ed854, 0xc021fdfb,
+ 0x03ecadcf, 0xc01ed535, 0x03ba80df, 0xc01bd3d6,
+ 0x038851a2, 0xc018f9e1, 0x03562038, 0xc0164757,
+ 0x0323ecbe, 0xc013bc39, 0x02f1b755, 0xc011588a,
+ 0x02bf801a, 0xc00f1c4a, 0x028d472e, 0xc00d077c,
+ 0x025b0caf, 0xc00b1a20, 0x0228d0bb, 0xc0095438,
+ 0x01f69373, 0xc007b5c4, 0x01c454f5, 0xc0063ec6,
+ 0x0192155f, 0xc004ef3f, 0x015fd4d2, 0xc003c72f,
+ 0x012d936c, 0xc002c697, 0x00fb514b, 0xc001ed78,
+ 0x00c90e90, 0xc0013bd3, 0x0096cb58, 0xc000b1a7,
+ 0x006487c4, 0xc0004ef5, 0x003243f1, 0xc00013bd,
+ 0x00000000, 0xc0000000, 0xffcdbc0f, 0xc00013bd,
+ 0xff9b783c, 0xc0004ef5, 0xff6934a8, 0xc000b1a7,
+ 0xff36f170, 0xc0013bd3, 0xff04aeb5, 0xc001ed78,
+ 0xfed26c94, 0xc002c697, 0xfea02b2e, 0xc003c72f,
+ 0xfe6deaa1, 0xc004ef3f, 0xfe3bab0b, 0xc0063ec6,
+ 0xfe096c8d, 0xc007b5c4, 0xfdd72f45, 0xc0095438,
+ 0xfda4f351, 0xc00b1a20, 0xfd72b8d2, 0xc00d077c,
+ 0xfd407fe6, 0xc00f1c4a, 0xfd0e48ab, 0xc011588a,
+ 0xfcdc1342, 0xc013bc39, 0xfca9dfc8, 0xc0164757,
+ 0xfc77ae5e, 0xc018f9e1, 0xfc457f21, 0xc01bd3d6,
+ 0xfc135231, 0xc01ed535, 0xfbe127ac, 0xc021fdfb,
+ 0xfbaeffb3, 0xc0254e27, 0xfb7cda63, 0xc028c5b6,
+ 0xfb4ab7db, 0xc02c64a6, 0xfb18983b, 0xc0302af5,
+ 0xfae67ba2, 0xc03418a2, 0xfab4622d, 0xc0382da8,
+ 0xfa824bfd, 0xc03c6a07, 0xfa503930, 0xc040cdba,
+ 0xfa1e29e5, 0xc04558c0, 0xf9ec1e3b, 0xc04a0b16,
+ 0xf9ba1651, 0xc04ee4b8, 0xf9881245, 0xc053e5a5,
+ 0xf9561237, 0xc0590dd8, 0xf9241645, 0xc05e5d4e,
+ 0xf8f21e8e, 0xc063d405, 0xf8c02b31, 0xc06971f9,
+ 0xf88e3c4d, 0xc06f3726, 0xf85c5201, 0xc0752389,
+ 0xf82a6c6a, 0xc07b371e, 0xf7f88ba9, 0xc08171e2,
+ 0xf7c6afdc, 0xc087d3d0, 0xf794d922, 0xc08e5ce5,
+ 0xf7630799, 0xc0950d1d, 0xf7313b60, 0xc09be473,
+ 0xf6ff7496, 0xc0a2e2e3, 0xf6cdb359, 0xc0aa086a,
+ 0xf69bf7c9, 0xc0b15502, 0xf66a4203, 0xc0b8c8a7,
+ 0xf6389228, 0xc0c06355, 0xf606e854, 0xc0c82506,
+ 0xf5d544a7, 0xc0d00db6, 0xf5a3a740, 0xc0d81d61,
+ 0xf572103d, 0xc0e05401, 0xf5407fbd, 0xc0e8b190,
+ 0xf50ef5de, 0xc0f1360b, 0xf4dd72be, 0xc0f9e16b,
+ 0xf4abf67e, 0xc102b3ac, 0xf47a8139, 0xc10bacc8,
+ 0xf4491311, 0xc114ccb9, 0xf417ac22, 0xc11e1379,
+ 0xf3e64c8c, 0xc1278104, 0xf3b4f46c, 0xc1311553,
+ 0xf383a3e2, 0xc13ad060, 0xf3525b0b, 0xc144b225,
+ 0xf3211a07, 0xc14eba9d, 0xf2efe0f2, 0xc158e9c1,
+ 0xf2beafed, 0xc1633f8a, 0xf28d8715, 0xc16dbbf3,
+ 0xf25c6688, 0xc1785ef4, 0xf22b4e66, 0xc1832888,
+ 0xf1fa3ecb, 0xc18e18a7, 0xf1c937d6, 0xc1992f4c,
+ 0xf19839a6, 0xc1a46c6e, 0xf1674459, 0xc1afd007,
+ 0xf136580d, 0xc1bb5a11, 0xf10574e0, 0xc1c70a84,
+ 0xf0d49af1, 0xc1d2e158, 0xf0a3ca5d, 0xc1dede87,
+ 0xf0730342, 0xc1eb0209, 0xf04245c0, 0xc1f74bd6,
+ 0xf01191f3, 0xc203bbe8, 0xefe0e7f9, 0xc2105236,
+ 0xefb047f2, 0xc21d0eb8, 0xef7fb1fa, 0xc229f167,
+ 0xef4f2630, 0xc236fa3b, 0xef1ea4b2, 0xc244292c,
+ 0xeeee2d9d, 0xc2517e31, 0xeebdc110, 0xc25ef943,
+ 0xee8d5f29, 0xc26c9a58, 0xee5d0804, 0xc27a616a,
+ 0xee2cbbc1, 0xc2884e6e, 0xedfc7a7c, 0xc296615d,
+ 0xedcc4454, 0xc2a49a2e, 0xed9c1967, 0xc2b2f8d8,
+ 0xed6bf9d1, 0xc2c17d52, 0xed3be5b1, 0xc2d02794,
+ 0xed0bdd25, 0xc2def794, 0xecdbe04a, 0xc2eded49,
+ 0xecabef3d, 0xc2fd08a9, 0xec7c0a1d, 0xc30c49ad,
+ 0xec4c3106, 0xc31bb049, 0xec1c6417, 0xc32b3c75,
+ 0xebeca36c, 0xc33aee27, 0xebbcef23, 0xc34ac556,
+ 0xeb8d475b, 0xc35ac1f7, 0xeb5dac2f, 0xc36ae401,
+ 0xeb2e1dbe, 0xc37b2b6a, 0xeafe9c24, 0xc38b9827,
+ 0xeacf277f, 0xc39c2a2f, 0xea9fbfed, 0xc3ace178,
+ 0xea70658a, 0xc3bdbdf6, 0xea411874, 0xc3cebfa0,
+ 0xea11d8c8, 0xc3dfe66c, 0xe9e2a6a3, 0xc3f1324e,
+ 0xe9b38223, 0xc402a33c, 0xe9846b63, 0xc414392b,
+ 0xe9556282, 0xc425f410, 0xe926679c, 0xc437d3e1,
+ 0xe8f77acf, 0xc449d892, 0xe8c89c37, 0xc45c0219,
+ 0xe899cbf1, 0xc46e5069, 0xe86b0a1a, 0xc480c379,
+ 0xe83c56cf, 0xc4935b3c, 0xe80db22d, 0xc4a617a6,
+ 0xe7df1c50, 0xc4b8f8ad, 0xe7b09555, 0xc4cbfe45,
+ 0xe7821d59, 0xc4df2862, 0xe753b479, 0xc4f276f7,
+ 0xe7255ad1, 0xc505e9fb, 0xe6f7107e, 0xc519815f,
+ 0xe6c8d59c, 0xc52d3d18, 0xe69aaa48, 0xc5411d1b,
+ 0xe66c8e9f, 0xc555215a, 0xe63e82bc, 0xc56949ca,
+ 0xe61086bc, 0xc57d965d, 0xe5e29abc, 0xc5920708,
+ 0xe5b4bed8, 0xc5a69bbe, 0xe586f32c, 0xc5bb5472,
+ 0xe55937d5, 0xc5d03118, 0xe52b8cee, 0xc5e531a1,
+ 0xe4fdf294, 0xc5fa5603, 0xe4d068e2, 0xc60f9e2e,
+ 0xe4a2eff6, 0xc6250a18, 0xe47587eb, 0xc63a99b1,
+ 0xe44830dd, 0xc6504ced, 0xe41aeae8, 0xc66623be,
+ 0xe3edb628, 0xc67c1e18, 0xe3c092b9, 0xc6923bec,
+ 0xe39380b6, 0xc6a87d2d, 0xe366803c, 0xc6bee1cd,
+ 0xe3399167, 0xc6d569be, 0xe30cb451, 0xc6ec14f2,
+ 0xe2dfe917, 0xc702e35c, 0xe2b32fd4, 0xc719d4ed,
+ 0xe28688a4, 0xc730e997, 0xe259f3a3, 0xc748214c,
+ 0xe22d70eb, 0xc75f7bfe, 0xe2010099, 0xc776f99d,
+ 0xe1d4a2c8, 0xc78e9a1d, 0xe1a85793, 0xc7a65d6e,
+ 0xe17c1f15, 0xc7be4381, 0xe14ff96a, 0xc7d64c47,
+ 0xe123e6ad, 0xc7ee77b3, 0xe0f7e6f9, 0xc806c5b5,
+ 0xe0cbfa6a, 0xc81f363d, 0xe0a0211a, 0xc837c93e,
+ 0xe0745b24, 0xc8507ea7, 0xe048a8a4, 0xc869566a,
+ 0xe01d09b4, 0xc8825077, 0xdff17e70, 0xc89b6cbf,
+ 0xdfc606f1, 0xc8b4ab32, 0xdf9aa354, 0xc8ce0bc0,
+ 0xdf6f53b3, 0xc8e78e5b, 0xdf441828, 0xc90132f2,
+ 0xdf18f0ce, 0xc91af976, 0xdeedddc0, 0xc934e1d6,
+ 0xdec2df18, 0xc94eec03, 0xde97f4f1, 0xc96917ec,
+ 0xde6d1f65, 0xc9836582, 0xde425e8f, 0xc99dd4b4,
+ 0xde17b28a, 0xc9b86572, 0xdded1b6e, 0xc9d317ab,
+ 0xddc29958, 0xc9edeb50, 0xdd982c60, 0xca08e04f,
+ 0xdd6dd4a2, 0xca23f698, 0xdd439236, 0xca3f2e19,
+ 0xdd196538, 0xca5a86c4, 0xdcef4dc2, 0xca760086,
+ 0xdcc54bec, 0xca919b4e, 0xdc9b5fd2, 0xcaad570c,
+ 0xdc71898d, 0xcac933ae, 0xdc47c936, 0xcae53123,
+ 0xdc1e1ee9, 0xcb014f5b, 0xdbf48abd, 0xcb1d8e43,
+ 0xdbcb0cce, 0xcb39edca, 0xdba1a534, 0xcb566ddf,
+ 0xdb785409, 0xcb730e70, 0xdb4f1967, 0xcb8fcf6b,
+ 0xdb25f566, 0xcbacb0bf, 0xdafce821, 0xcbc9b25a,
+ 0xdad3f1b1, 0xcbe6d42b, 0xdaab122f, 0xcc04161e,
+ 0xda8249b4, 0xcc217822, 0xda599859, 0xcc3efa25,
+ 0xda30fe38, 0xcc5c9c14, 0xda087b69, 0xcc7a5dde,
+ 0xd9e01006, 0xcc983f70, 0xd9b7bc27, 0xccb640b8,
+ 0xd98f7fe6, 0xccd461a2, 0xd9675b5a, 0xccf2a21d,
+ 0xd93f4e9e, 0xcd110216, 0xd91759c9, 0xcd2f817b,
+ 0xd8ef7cf4, 0xcd4e2037, 0xd8c7b838, 0xcd6cde39,
+ 0xd8a00bae, 0xcd8bbb6d, 0xd878776d, 0xcdaab7c0,
+ 0xd850fb8e, 0xcdc9d320, 0xd829982b, 0xcde90d79,
+ 0xd8024d59, 0xce0866b8, 0xd7db1b34, 0xce27dec9,
+ 0xd7b401d1, 0xce47759a, 0xd78d014a, 0xce672b16,
+ 0xd76619b6, 0xce86ff2a, 0xd73f4b2e, 0xcea6f1c2,
+ 0xd71895c9, 0xcec702cb, 0xd6f1f99f, 0xcee73231,
+ 0xd6cb76c9, 0xcf077fe1, 0xd6a50d5d, 0xcf27ebc5,
+ 0xd67ebd74, 0xcf4875ca, 0xd6588725, 0xcf691ddd,
+ 0xd6326a88, 0xcf89e3e8, 0xd60c67b4, 0xcfaac7d8,
+ 0xd5e67ec1, 0xcfcbc999, 0xd5c0afc6, 0xcfece915,
+ 0xd59afadb, 0xd00e2639, 0xd5756016, 0xd02f80f1,
+ 0xd54fdf8f, 0xd050f926, 0xd52a795d, 0xd0728ec6,
+ 0xd5052d97, 0xd09441bb, 0xd4dffc54, 0xd0b611f1,
+ 0xd4bae5ab, 0xd0d7ff51, 0xd495e9b3, 0xd0fa09c9,
+ 0xd4710883, 0xd11c3142, 0xd44c4232, 0xd13e75a8,
+ 0xd42796d5, 0xd160d6e5, 0xd4030684, 0xd18354e4,
+ 0xd3de9156, 0xd1a5ef90, 0xd3ba3760, 0xd1c8a6d4,
+ 0xd395f8ba, 0xd1eb7a9a, 0xd371d579, 0xd20e6acc,
+ 0xd34dcdb4, 0xd2317756, 0xd329e181, 0xd254a021,
+ 0xd30610f7, 0xd277e518, 0xd2e25c2b, 0xd29b4626,
+ 0xd2bec333, 0xd2bec333, 0xd29b4626, 0xd2e25c2b,
+ 0xd277e518, 0xd30610f7, 0xd254a021, 0xd329e181,
+ 0xd2317756, 0xd34dcdb4, 0xd20e6acc, 0xd371d579,
+ 0xd1eb7a9a, 0xd395f8ba, 0xd1c8a6d4, 0xd3ba3760,
+ 0xd1a5ef90, 0xd3de9156, 0xd18354e4, 0xd4030684,
+ 0xd160d6e5, 0xd42796d5, 0xd13e75a8, 0xd44c4232,
+ 0xd11c3142, 0xd4710883, 0xd0fa09c9, 0xd495e9b3,
+ 0xd0d7ff51, 0xd4bae5ab, 0xd0b611f1, 0xd4dffc54,
+ 0xd09441bb, 0xd5052d97, 0xd0728ec6, 0xd52a795d,
+ 0xd050f926, 0xd54fdf8f, 0xd02f80f1, 0xd5756016,
+ 0xd00e2639, 0xd59afadb, 0xcfece915, 0xd5c0afc6,
+ 0xcfcbc999, 0xd5e67ec1, 0xcfaac7d8, 0xd60c67b4,
+ 0xcf89e3e8, 0xd6326a88, 0xcf691ddd, 0xd6588725,
+ 0xcf4875ca, 0xd67ebd74, 0xcf27ebc5, 0xd6a50d5d,
+ 0xcf077fe1, 0xd6cb76c9, 0xcee73231, 0xd6f1f99f,
+ 0xcec702cb, 0xd71895c9, 0xcea6f1c2, 0xd73f4b2e,
+ 0xce86ff2a, 0xd76619b6, 0xce672b16, 0xd78d014a,
+ 0xce47759a, 0xd7b401d1, 0xce27dec9, 0xd7db1b34,
+ 0xce0866b8, 0xd8024d59, 0xcde90d79, 0xd829982b,
+ 0xcdc9d320, 0xd850fb8e, 0xcdaab7c0, 0xd878776d,
+ 0xcd8bbb6d, 0xd8a00bae, 0xcd6cde39, 0xd8c7b838,
+ 0xcd4e2037, 0xd8ef7cf4, 0xcd2f817b, 0xd91759c9,
+ 0xcd110216, 0xd93f4e9e, 0xccf2a21d, 0xd9675b5a,
+ 0xccd461a2, 0xd98f7fe6, 0xccb640b8, 0xd9b7bc27,
+ 0xcc983f70, 0xd9e01006, 0xcc7a5dde, 0xda087b69,
+ 0xcc5c9c14, 0xda30fe38, 0xcc3efa25, 0xda599859,
+ 0xcc217822, 0xda8249b4, 0xcc04161e, 0xdaab122f,
+ 0xcbe6d42b, 0xdad3f1b1, 0xcbc9b25a, 0xdafce821,
+ 0xcbacb0bf, 0xdb25f566, 0xcb8fcf6b, 0xdb4f1967,
+ 0xcb730e70, 0xdb785409, 0xcb566ddf, 0xdba1a534,
+ 0xcb39edca, 0xdbcb0cce, 0xcb1d8e43, 0xdbf48abd,
+ 0xcb014f5b, 0xdc1e1ee9, 0xcae53123, 0xdc47c936,
+ 0xcac933ae, 0xdc71898d, 0xcaad570c, 0xdc9b5fd2,
+ 0xca919b4e, 0xdcc54bec, 0xca760086, 0xdcef4dc2,
+ 0xca5a86c4, 0xdd196538, 0xca3f2e19, 0xdd439236,
+ 0xca23f698, 0xdd6dd4a2, 0xca08e04f, 0xdd982c60,
+ 0xc9edeb50, 0xddc29958, 0xc9d317ab, 0xdded1b6e,
+ 0xc9b86572, 0xde17b28a, 0xc99dd4b4, 0xde425e8f,
+ 0xc9836582, 0xde6d1f65, 0xc96917ec, 0xde97f4f1,
+ 0xc94eec03, 0xdec2df18, 0xc934e1d6, 0xdeedddc0,
+ 0xc91af976, 0xdf18f0ce, 0xc90132f2, 0xdf441828,
+ 0xc8e78e5b, 0xdf6f53b3, 0xc8ce0bc0, 0xdf9aa354,
+ 0xc8b4ab32, 0xdfc606f1, 0xc89b6cbf, 0xdff17e70,
+ 0xc8825077, 0xe01d09b4, 0xc869566a, 0xe048a8a4,
+ 0xc8507ea7, 0xe0745b24, 0xc837c93e, 0xe0a0211a,
+ 0xc81f363d, 0xe0cbfa6a, 0xc806c5b5, 0xe0f7e6f9,
+ 0xc7ee77b3, 0xe123e6ad, 0xc7d64c47, 0xe14ff96a,
+ 0xc7be4381, 0xe17c1f15, 0xc7a65d6e, 0xe1a85793,
+ 0xc78e9a1d, 0xe1d4a2c8, 0xc776f99d, 0xe2010099,
+ 0xc75f7bfe, 0xe22d70eb, 0xc748214c, 0xe259f3a3,
+ 0xc730e997, 0xe28688a4, 0xc719d4ed, 0xe2b32fd4,
+ 0xc702e35c, 0xe2dfe917, 0xc6ec14f2, 0xe30cb451,
+ 0xc6d569be, 0xe3399167, 0xc6bee1cd, 0xe366803c,
+ 0xc6a87d2d, 0xe39380b6, 0xc6923bec, 0xe3c092b9,
+ 0xc67c1e18, 0xe3edb628, 0xc66623be, 0xe41aeae8,
+ 0xc6504ced, 0xe44830dd, 0xc63a99b1, 0xe47587eb,
+ 0xc6250a18, 0xe4a2eff6, 0xc60f9e2e, 0xe4d068e2,
+ 0xc5fa5603, 0xe4fdf294, 0xc5e531a1, 0xe52b8cee,
+ 0xc5d03118, 0xe55937d5, 0xc5bb5472, 0xe586f32c,
+ 0xc5a69bbe, 0xe5b4bed8, 0xc5920708, 0xe5e29abc,
+ 0xc57d965d, 0xe61086bc, 0xc56949ca, 0xe63e82bc,
+ 0xc555215a, 0xe66c8e9f, 0xc5411d1b, 0xe69aaa48,
+ 0xc52d3d18, 0xe6c8d59c, 0xc519815f, 0xe6f7107e,
+ 0xc505e9fb, 0xe7255ad1, 0xc4f276f7, 0xe753b479,
+ 0xc4df2862, 0xe7821d59, 0xc4cbfe45, 0xe7b09555,
+ 0xc4b8f8ad, 0xe7df1c50, 0xc4a617a6, 0xe80db22d,
+ 0xc4935b3c, 0xe83c56cf, 0xc480c379, 0xe86b0a1a,
+ 0xc46e5069, 0xe899cbf1, 0xc45c0219, 0xe8c89c37,
+ 0xc449d892, 0xe8f77acf, 0xc437d3e1, 0xe926679c,
+ 0xc425f410, 0xe9556282, 0xc414392b, 0xe9846b63,
+ 0xc402a33c, 0xe9b38223, 0xc3f1324e, 0xe9e2a6a3,
+ 0xc3dfe66c, 0xea11d8c8, 0xc3cebfa0, 0xea411874,
+ 0xc3bdbdf6, 0xea70658a, 0xc3ace178, 0xea9fbfed,
+ 0xc39c2a2f, 0xeacf277f, 0xc38b9827, 0xeafe9c24,
+ 0xc37b2b6a, 0xeb2e1dbe, 0xc36ae401, 0xeb5dac2f,
+ 0xc35ac1f7, 0xeb8d475b, 0xc34ac556, 0xebbcef23,
+ 0xc33aee27, 0xebeca36c, 0xc32b3c75, 0xec1c6417,
+ 0xc31bb049, 0xec4c3106, 0xc30c49ad, 0xec7c0a1d,
+ 0xc2fd08a9, 0xecabef3d, 0xc2eded49, 0xecdbe04a,
+ 0xc2def794, 0xed0bdd25, 0xc2d02794, 0xed3be5b1,
+ 0xc2c17d52, 0xed6bf9d1, 0xc2b2f8d8, 0xed9c1967,
+ 0xc2a49a2e, 0xedcc4454, 0xc296615d, 0xedfc7a7c,
+ 0xc2884e6e, 0xee2cbbc1, 0xc27a616a, 0xee5d0804,
+ 0xc26c9a58, 0xee8d5f29, 0xc25ef943, 0xeebdc110,
+ 0xc2517e31, 0xeeee2d9d, 0xc244292c, 0xef1ea4b2,
+ 0xc236fa3b, 0xef4f2630, 0xc229f167, 0xef7fb1fa,
+ 0xc21d0eb8, 0xefb047f2, 0xc2105236, 0xefe0e7f9,
+ 0xc203bbe8, 0xf01191f3, 0xc1f74bd6, 0xf04245c0,
+ 0xc1eb0209, 0xf0730342, 0xc1dede87, 0xf0a3ca5d,
+ 0xc1d2e158, 0xf0d49af1, 0xc1c70a84, 0xf10574e0,
+ 0xc1bb5a11, 0xf136580d, 0xc1afd007, 0xf1674459,
+ 0xc1a46c6e, 0xf19839a6, 0xc1992f4c, 0xf1c937d6,
+ 0xc18e18a7, 0xf1fa3ecb, 0xc1832888, 0xf22b4e66,
+ 0xc1785ef4, 0xf25c6688, 0xc16dbbf3, 0xf28d8715,
+ 0xc1633f8a, 0xf2beafed, 0xc158e9c1, 0xf2efe0f2,
+ 0xc14eba9d, 0xf3211a07, 0xc144b225, 0xf3525b0b,
+ 0xc13ad060, 0xf383a3e2, 0xc1311553, 0xf3b4f46c,
+ 0xc1278104, 0xf3e64c8c, 0xc11e1379, 0xf417ac22,
+ 0xc114ccb9, 0xf4491311, 0xc10bacc8, 0xf47a8139,
+ 0xc102b3ac, 0xf4abf67e, 0xc0f9e16b, 0xf4dd72be,
+ 0xc0f1360b, 0xf50ef5de, 0xc0e8b190, 0xf5407fbd,
+ 0xc0e05401, 0xf572103d, 0xc0d81d61, 0xf5a3a740,
+ 0xc0d00db6, 0xf5d544a7, 0xc0c82506, 0xf606e854,
+ 0xc0c06355, 0xf6389228, 0xc0b8c8a7, 0xf66a4203,
+ 0xc0b15502, 0xf69bf7c9, 0xc0aa086a, 0xf6cdb359,
+ 0xc0a2e2e3, 0xf6ff7496, 0xc09be473, 0xf7313b60,
+ 0xc0950d1d, 0xf7630799, 0xc08e5ce5, 0xf794d922,
+ 0xc087d3d0, 0xf7c6afdc, 0xc08171e2, 0xf7f88ba9,
+ 0xc07b371e, 0xf82a6c6a, 0xc0752389, 0xf85c5201,
+ 0xc06f3726, 0xf88e3c4d, 0xc06971f9, 0xf8c02b31,
+ 0xc063d405, 0xf8f21e8e, 0xc05e5d4e, 0xf9241645,
+ 0xc0590dd8, 0xf9561237, 0xc053e5a5, 0xf9881245,
+ 0xc04ee4b8, 0xf9ba1651, 0xc04a0b16, 0xf9ec1e3b,
+ 0xc04558c0, 0xfa1e29e5, 0xc040cdba, 0xfa503930,
+ 0xc03c6a07, 0xfa824bfd, 0xc0382da8, 0xfab4622d,
+ 0xc03418a2, 0xfae67ba2, 0xc0302af5, 0xfb18983b,
+ 0xc02c64a6, 0xfb4ab7db, 0xc028c5b6, 0xfb7cda63,
+ 0xc0254e27, 0xfbaeffb3, 0xc021fdfb, 0xfbe127ac,
+ 0xc01ed535, 0xfc135231, 0xc01bd3d6, 0xfc457f21,
+ 0xc018f9e1, 0xfc77ae5e, 0xc0164757, 0xfca9dfc8,
+ 0xc013bc39, 0xfcdc1342, 0xc011588a, 0xfd0e48ab,
+ 0xc00f1c4a, 0xfd407fe6, 0xc00d077c, 0xfd72b8d2,
+ 0xc00b1a20, 0xfda4f351, 0xc0095438, 0xfdd72f45,
+ 0xc007b5c4, 0xfe096c8d, 0xc0063ec6, 0xfe3bab0b,
+ 0xc004ef3f, 0xfe6deaa1, 0xc003c72f, 0xfea02b2e,
+ 0xc002c697, 0xfed26c94, 0xc001ed78, 0xff04aeb5,
+ 0xc0013bd3, 0xff36f170, 0xc000b1a7, 0xff6934a8,
+ 0xc0004ef5, 0xff9b783c, 0xc00013bd, 0xffcdbc0f,
+ 0x3fffffb1, 0x0006487f, 0x3ffffd39, 0x0012d97c,
+ 0x3ffff84a, 0x001f6a79, 0x3ffff0e3, 0x002bfb74,
+ 0x3fffe705, 0x00388c6e, 0x3fffdaae, 0x00451d66,
+ 0x3fffcbe0, 0x0051ae5b, 0x3fffba9b, 0x005e3f4c,
+ 0x3fffa6de, 0x006ad03b, 0x3fff90a9, 0x00776125,
+ 0x3fff77fc, 0x0083f20a, 0x3fff5cd8, 0x009082ea,
+ 0x3fff3f3c, 0x009d13c5, 0x3fff1f29, 0x00a9a49a,
+ 0x3ffefc9e, 0x00b63568, 0x3ffed79b, 0x00c2c62f,
+ 0x3ffeb021, 0x00cf56ef, 0x3ffe862f, 0x00dbe7a6,
+ 0x3ffe59c6, 0x00e87856, 0x3ffe2ae5, 0x00f508fc,
+ 0x3ffdf98c, 0x01019998, 0x3ffdc5bc, 0x010e2a2b,
+ 0x3ffd8f74, 0x011abab4, 0x3ffd56b5, 0x01274b31,
+ 0x3ffd1b7e, 0x0133dba3, 0x3ffcddd0, 0x01406c0a,
+ 0x3ffc9daa, 0x014cfc63, 0x3ffc5b0c, 0x01598cb1,
+ 0x3ffc15f7, 0x01661cf0, 0x3ffbce6b, 0x0172ad22,
+ 0x3ffb8467, 0x017f3d46, 0x3ffb37ec, 0x018bcd5b,
+ 0x3ffae8f9, 0x01985d60, 0x3ffa978e, 0x01a4ed56,
+ 0x3ffa43ac, 0x01b17d3c, 0x3ff9ed53, 0x01be0d11,
+ 0x3ff99483, 0x01ca9cd4, 0x3ff9393a, 0x01d72c87,
+ 0x3ff8db7b, 0x01e3bc26, 0x3ff87b44, 0x01f04bb4,
+ 0x3ff81896, 0x01fcdb2e, 0x3ff7b370, 0x02096a94,
+ 0x3ff74bd3, 0x0215f9e7, 0x3ff6e1bf, 0x02228924,
+ 0x3ff67534, 0x022f184d, 0x3ff60631, 0x023ba760,
+ 0x3ff594b7, 0x0248365d, 0x3ff520c5, 0x0254c544,
+ 0x3ff4aa5d, 0x02615414, 0x3ff4317d, 0x026de2cc,
+ 0x3ff3b626, 0x027a716c, 0x3ff33858, 0x0286fff3,
+ 0x3ff2b813, 0x02938e62, 0x3ff23556, 0x02a01cb8,
+ 0x3ff1b022, 0x02acaaf3, 0x3ff12878, 0x02b93914,
+ 0x3ff09e56, 0x02c5c71a, 0x3ff011bd, 0x02d25505,
+ 0x3fef82ad, 0x02dee2d4, 0x3feef126, 0x02eb7086,
+ 0x3fee5d28, 0x02f7fe1c, 0x3fedc6b4, 0x03048b94,
+ 0x3fed2dc8, 0x031118ef, 0x3fec9265, 0x031da62b,
+ 0x3febf48b, 0x032a3349, 0x3feb543b, 0x0336c047,
+ 0x3feab173, 0x03434d26, 0x3fea0c35, 0x034fd9e5,
+ 0x3fe96480, 0x035c6682, 0x3fe8ba54, 0x0368f2ff,
+ 0x3fe80db2, 0x03757f5a, 0x3fe75e98, 0x03820b93,
+ 0x3fe6ad08, 0x038e97a9, 0x3fe5f902, 0x039b239c,
+ 0x3fe54284, 0x03a7af6c, 0x3fe48990, 0x03b43b17,
+ 0x3fe3ce26, 0x03c0c69e, 0x3fe31045, 0x03cd5200,
+ 0x3fe24fed, 0x03d9dd3c, 0x3fe18d1f, 0x03e66852,
+ 0x3fe0c7da, 0x03f2f342, 0x3fe0001f, 0x03ff7e0b,
+ 0x3fdf35ed, 0x040c08ad, 0x3fde6945, 0x04189326,
+ 0x3fdd9a27, 0x04251d77, 0x3fdcc892, 0x0431a79f,
+ 0x3fdbf488, 0x043e319e, 0x3fdb1e06, 0x044abb73,
+ 0x3fda450f, 0x0457451d, 0x3fd969a1, 0x0463ce9d,
+ 0x3fd88bbe, 0x047057f1, 0x3fd7ab64, 0x047ce11a,
+ 0x3fd6c894, 0x04896a16, 0x3fd5e34e, 0x0495f2e5,
+ 0x3fd4fb91, 0x04a27b87, 0x3fd4115f, 0x04af03fc,
+ 0x3fd324b7, 0x04bb8c42, 0x3fd23599, 0x04c81459,
+ 0x3fd14405, 0x04d49c42, 0x3fd04ffc, 0x04e123fa,
+ 0x3fcf597c, 0x04edab83, 0x3fce6087, 0x04fa32db,
+ 0x3fcd651c, 0x0506ba01, 0x3fcc673b, 0x051340f6,
+ 0x3fcb66e4, 0x051fc7b9, 0x3fca6418, 0x052c4e4a,
+ 0x3fc95ed7, 0x0538d4a7, 0x3fc8571f, 0x05455ad1,
+ 0x3fc74cf3, 0x0551e0c7, 0x3fc64051, 0x055e6688,
+ 0x3fc53139, 0x056aec15, 0x3fc41fac, 0x0577716b,
+ 0x3fc30baa, 0x0583f68c, 0x3fc1f532, 0x05907b77,
+ 0x3fc0dc45, 0x059d002a, 0x3fbfc0e3, 0x05a984a6,
+ 0x3fbea30c, 0x05b608eb, 0x3fbd82bf, 0x05c28cf7,
+ 0x3fbc5ffe, 0x05cf10ca, 0x3fbb3ac7, 0x05db9463,
+ 0x3fba131b, 0x05e817c3, 0x3fb8e8fb, 0x05f49ae9,
+ 0x3fb7bc65, 0x06011dd4, 0x3fb68d5b, 0x060da083,
+ 0x3fb55bdc, 0x061a22f7, 0x3fb427e8, 0x0626a52f,
+ 0x3fb2f17f, 0x0633272a, 0x3fb1b8a2, 0x063fa8e7,
+ 0x3fb07d50, 0x064c2a67, 0x3faf3f89, 0x0658aba9,
+ 0x3fadff4e, 0x06652cac, 0x3facbc9f, 0x0671ad71,
+ 0x3fab777b, 0x067e2df5, 0x3faa2fe2, 0x068aae3a,
+ 0x3fa8e5d5, 0x06972e3d, 0x3fa79954, 0x06a3ae00,
+ 0x3fa64a5f, 0x06b02d81, 0x3fa4f8f6, 0x06bcacc1,
+ 0x3fa3a518, 0x06c92bbe, 0x3fa24ec6, 0x06d5aa77,
+ 0x3fa0f600, 0x06e228ee, 0x3f9f9ac6, 0x06eea720,
+ 0x3f9e3d19, 0x06fb250e, 0x3f9cdcf7, 0x0707a2b7,
+ 0x3f9b7a62, 0x0714201b, 0x3f9a1558, 0x07209d39,
+ 0x3f98addb, 0x072d1a10, 0x3f9743eb, 0x073996a1,
+ 0x3f95d787, 0x074612eb, 0x3f9468af, 0x07528eec,
+ 0x3f92f763, 0x075f0aa5, 0x3f9183a5, 0x076b8616,
+ 0x3f900d72, 0x0778013d, 0x3f8e94cd, 0x07847c1b,
+ 0x3f8d19b4, 0x0790f6ae, 0x3f8b9c28, 0x079d70f7,
+ 0x3f8a1c29, 0x07a9eaf5, 0x3f8899b7, 0x07b664a7,
+ 0x3f8714d1, 0x07c2de0d, 0x3f858d79, 0x07cf5726,
+ 0x3f8403ae, 0x07dbcff2, 0x3f827770, 0x07e84871,
+ 0x3f80e8bf, 0x07f4c0a1, 0x3f7f579b, 0x08013883,
+ 0x3f7dc405, 0x080db016, 0x3f7c2dfc, 0x081a275a,
+ 0x3f7a9580, 0x08269e4d, 0x3f78fa92, 0x083314f1,
+ 0x3f775d31, 0x083f8b43, 0x3f75bd5e, 0x084c0144,
+ 0x3f741b19, 0x085876f3, 0x3f727661, 0x0864ec4f,
+ 0x3f70cf38, 0x08716159, 0x3f6f259c, 0x087dd60f,
+ 0x3f6d798e, 0x088a4a72, 0x3f6bcb0e, 0x0896be80,
+ 0x3f6a1a1c, 0x08a3323a, 0x3f6866b8, 0x08afa59e,
+ 0x3f66b0e3, 0x08bc18ac, 0x3f64f89b, 0x08c88b65,
+ 0x3f633de2, 0x08d4fdc6, 0x3f6180b8, 0x08e16fd1,
+ 0x3f5fc11c, 0x08ede184, 0x3f5dff0e, 0x08fa52de,
+ 0x3f5c3a8f, 0x0906c3e0, 0x3f5a739e, 0x09133489,
+ 0x3f58aa3d, 0x091fa4d9, 0x3f56de6a, 0x092c14ce,
+ 0x3f551026, 0x09388469, 0x3f533f71, 0x0944f3a9,
+ 0x3f516c4b, 0x0951628d, 0x3f4f96b4, 0x095dd116,
+ 0x3f4dbeac, 0x096a3f42, 0x3f4be433, 0x0976ad11,
+ 0x3f4a074a, 0x09831a82, 0x3f4827f0, 0x098f8796,
+ 0x3f464626, 0x099bf44c, 0x3f4461eb, 0x09a860a2,
+ 0x3f427b3f, 0x09b4cc99, 0x3f409223, 0x09c13831,
+ 0x3f3ea697, 0x09cda368, 0x3f3cb89b, 0x09da0e3e,
+ 0x3f3ac82f, 0x09e678b4, 0x3f38d552, 0x09f2e2c7,
+ 0x3f36e006, 0x09ff4c78, 0x3f34e849, 0x0a0bb5c7,
+ 0x3f32ee1d, 0x0a181eb2, 0x3f30f181, 0x0a24873a,
+ 0x3f2ef276, 0x0a30ef5e, 0x3f2cf0fb, 0x0a3d571d,
+ 0x3f2aed10, 0x0a49be77, 0x3f28e6b6, 0x0a56256c,
+ 0x3f26ddec, 0x0a628bfa, 0x3f24d2b4, 0x0a6ef222,
+ 0x3f22c50c, 0x0a7b57e3, 0x3f20b4f5, 0x0a87bd3d,
+ 0x3f1ea26e, 0x0a94222f, 0x3f1c8d79, 0x0aa086b8,
+ 0x3f1a7615, 0x0aacead8, 0x3f185c43, 0x0ab94e8f,
+ 0x3f164001, 0x0ac5b1dc, 0x3f142151, 0x0ad214bf,
+ 0x3f120032, 0x0ade7737, 0x3f0fdca5, 0x0aead944,
+ 0x3f0db6a9, 0x0af73ae5, 0x3f0b8e3f, 0x0b039c1a,
+ 0x3f096367, 0x0b0ffce2, 0x3f073621, 0x0b1c5d3d,
+ 0x3f05066d, 0x0b28bd2a, 0x3f02d44a, 0x0b351caa,
+ 0x3f009fba, 0x0b417bba, 0x3efe68bc, 0x0b4dda5c,
+ 0x3efc2f50, 0x0b5a388d, 0x3ef9f377, 0x0b66964f,
+ 0x3ef7b530, 0x0b72f3a1, 0x3ef5747b, 0x0b7f5081,
+ 0x3ef3315a, 0x0b8bacf0, 0x3ef0ebcb, 0x0b9808ed,
+ 0x3eeea3ce, 0x0ba46477, 0x3eec5965, 0x0bb0bf8f,
+ 0x3eea0c8e, 0x0bbd1a33, 0x3ee7bd4b, 0x0bc97463,
+ 0x3ee56b9b, 0x0bd5ce1f, 0x3ee3177e, 0x0be22766,
+ 0x3ee0c0f4, 0x0bee8038, 0x3ede67fe, 0x0bfad894,
+ 0x3edc0c9b, 0x0c07307a, 0x3ed9aecc, 0x0c1387e9,
+ 0x3ed74e91, 0x0c1fdee1, 0x3ed4ebe9, 0x0c2c3562,
+ 0x3ed286d5, 0x0c388b6a, 0x3ed01f55, 0x0c44e0f9,
+ 0x3ecdb56a, 0x0c513610, 0x3ecb4912, 0x0c5d8aad,
+ 0x3ec8da4f, 0x0c69ded0, 0x3ec66920, 0x0c763278,
+ 0x3ec3f585, 0x0c8285a5, 0x3ec17f7f, 0x0c8ed857,
+ 0x3ebf070e, 0x0c9b2a8d, 0x3ebc8c31, 0x0ca77c47,
+ 0x3eba0ee9, 0x0cb3cd84, 0x3eb78f36, 0x0cc01e43,
+ 0x3eb50d18, 0x0ccc6e84, 0x3eb2888f, 0x0cd8be47,
+ 0x3eb0019c, 0x0ce50d8c, 0x3ead783d, 0x0cf15c51,
+ 0x3eaaec74, 0x0cfdaa96, 0x3ea85e41, 0x0d09f85b,
+ 0x3ea5cda3, 0x0d1645a0, 0x3ea33a9b, 0x0d229263,
+ 0x3ea0a529, 0x0d2edea5, 0x3e9e0d4c, 0x0d3b2a64,
+ 0x3e9b7306, 0x0d4775a1, 0x3e98d655, 0x0d53c05b,
+ 0x3e96373b, 0x0d600a91, 0x3e9395b7, 0x0d6c5443,
+ 0x3e90f1ca, 0x0d789d71, 0x3e8e4b72, 0x0d84e61a,
+ 0x3e8ba2b2, 0x0d912e3e, 0x3e88f788, 0x0d9d75db,
+ 0x3e8649f5, 0x0da9bcf2, 0x3e8399f9, 0x0db60383,
+ 0x3e80e794, 0x0dc2498c, 0x3e7e32c6, 0x0dce8f0d,
+ 0x3e7b7b90, 0x0ddad406, 0x3e78c1f0, 0x0de71876,
+ 0x3e7605e9, 0x0df35c5d, 0x3e734778, 0x0dff9fba,
+ 0x3e70869f, 0x0e0be28e, 0x3e6dc35e, 0x0e1824d6,
+ 0x3e6afdb5, 0x0e246693, 0x3e6835a4, 0x0e30a7c5,
+ 0x3e656b2b, 0x0e3ce86b, 0x3e629e4a, 0x0e492884,
+ 0x3e5fcf01, 0x0e556811, 0x3e5cfd51, 0x0e61a70f,
+ 0x3e5a2939, 0x0e6de580, 0x3e5752ba, 0x0e7a2363,
+ 0x3e5479d4, 0x0e8660b6, 0x3e519e86, 0x0e929d7a,
+ 0x3e4ec0d1, 0x0e9ed9af, 0x3e4be0b6, 0x0eab1553,
+ 0x3e48fe33, 0x0eb75066, 0x3e46194a, 0x0ec38ae8,
+ 0x3e4331fa, 0x0ecfc4d9, 0x3e404844, 0x0edbfe37,
+ 0x3e3d5c27, 0x0ee83702, 0x3e3a6da4, 0x0ef46f3b,
+ 0x3e377cbb, 0x0f00a6df, 0x3e34896c, 0x0f0cddf0,
+ 0x3e3193b7, 0x0f19146c, 0x3e2e9b9c, 0x0f254a53,
+ 0x3e2ba11b, 0x0f317fa5, 0x3e28a435, 0x0f3db461,
+ 0x3e25a4e9, 0x0f49e886, 0x3e22a338, 0x0f561c15,
+ 0x3e1f9f21, 0x0f624f0c, 0x3e1c98a6, 0x0f6e816b,
+ 0x3e198fc5, 0x0f7ab332, 0x3e168480, 0x0f86e460,
+ 0x3e1376d5, 0x0f9314f5, 0x3e1066c7, 0x0f9f44f0,
+ 0x3e0d5453, 0x0fab7451, 0x3e0a3f7b, 0x0fb7a317,
+ 0x3e07283f, 0x0fc3d143, 0x3e040e9f, 0x0fcffed2,
+ 0x3e00f29a, 0x0fdc2bc6, 0x3dfdd432, 0x0fe8581d,
+ 0x3dfab365, 0x0ff483d7, 0x3df79036, 0x1000aef3,
+ 0x3df46aa2, 0x100cd972, 0x3df142ab, 0x10190352,
+ 0x3dee1851, 0x10252c94, 0x3deaeb93, 0x10315535,
+ 0x3de7bc72, 0x103d7d38, 0x3de48aef, 0x1049a49a,
+ 0x3de15708, 0x1055cb5b, 0x3dde20bf, 0x1061f17b,
+ 0x3ddae813, 0x106e16f9, 0x3dd7ad05, 0x107a3bd5,
+ 0x3dd46f94, 0x1086600e, 0x3dd12fc1, 0x109283a5,
+ 0x3dcded8c, 0x109ea697, 0x3dcaa8f5, 0x10aac8e6,
+ 0x3dc761fc, 0x10b6ea90, 0x3dc418a1, 0x10c30b96,
+ 0x3dc0cce5, 0x10cf2bf6, 0x3dbd7ec7, 0x10db4baf,
+ 0x3dba2e48, 0x10e76ac3, 0x3db6db68, 0x10f38930,
+ 0x3db38627, 0x10ffa6f5, 0x3db02e84, 0x110bc413,
+ 0x3dacd481, 0x1117e088, 0x3da9781d, 0x1123fc55,
+ 0x3da61959, 0x11301779, 0x3da2b834, 0x113c31f3,
+ 0x3d9f54af, 0x11484bc2, 0x3d9beec9, 0x115464e8,
+ 0x3d988684, 0x11607d62, 0x3d951bde, 0x116c9531,
+ 0x3d91aed9, 0x1178ac53, 0x3d8e3f74, 0x1184c2ca,
+ 0x3d8acdb0, 0x1190d893, 0x3d87598c, 0x119cedaf,
+ 0x3d83e309, 0x11a9021d, 0x3d806a27, 0x11b515dd,
+ 0x3d7ceee5, 0x11c128ee, 0x3d797145, 0x11cd3b50,
+ 0x3d75f147, 0x11d94d02, 0x3d726ee9, 0x11e55e04,
+ 0x3d6eea2d, 0x11f16e56, 0x3d6b6313, 0x11fd7df6,
+ 0x3d67d99b, 0x12098ce5, 0x3d644dc4, 0x12159b22,
+ 0x3d60bf90, 0x1221a8ac, 0x3d5d2efe, 0x122db583,
+ 0x3d599c0e, 0x1239c1a7, 0x3d5606c1, 0x1245cd17,
+ 0x3d526f16, 0x1251d7d3, 0x3d4ed50f, 0x125de1da,
+ 0x3d4b38aa, 0x1269eb2b, 0x3d4799e8, 0x1275f3c7,
+ 0x3d43f8c9, 0x1281fbad, 0x3d40554e, 0x128e02dc,
+ 0x3d3caf76, 0x129a0954, 0x3d390742, 0x12a60f14,
+ 0x3d355cb1, 0x12b2141c, 0x3d31afc5, 0x12be186c,
+ 0x3d2e007c, 0x12ca1c03, 0x3d2a4ed8, 0x12d61ee0,
+ 0x3d269ad8, 0x12e22103, 0x3d22e47c, 0x12ee226c,
+ 0x3d1f2bc5, 0x12fa231b, 0x3d1b70b3, 0x1306230d,
+ 0x3d17b346, 0x13122245, 0x3d13f37e, 0x131e20c0,
+ 0x3d10315a, 0x132a1e7e, 0x3d0c6cdd, 0x13361b7f,
+ 0x3d08a604, 0x134217c2, 0x3d04dcd2, 0x134e1348,
+ 0x3d011145, 0x135a0e0e, 0x3cfd435e, 0x13660816,
+ 0x3cf9731d, 0x1372015f, 0x3cf5a082, 0x137df9e7,
+ 0x3cf1cb8e, 0x1389f1af, 0x3cedf440, 0x1395e8b7,
+ 0x3cea1a99, 0x13a1defd, 0x3ce63e98, 0x13add481,
+ 0x3ce2603f, 0x13b9c943, 0x3cde7f8d, 0x13c5bd42,
+ 0x3cda9c81, 0x13d1b07e, 0x3cd6b71e, 0x13dda2f7,
+ 0x3cd2cf62, 0x13e994ab, 0x3ccee54d, 0x13f5859b,
+ 0x3ccaf8e0, 0x140175c6, 0x3cc70a1c, 0x140d652c,
+ 0x3cc318ff, 0x141953cb, 0x3cbf258b, 0x142541a4,
+ 0x3cbb2fbf, 0x14312eb7, 0x3cb7379c, 0x143d1b02,
+ 0x3cb33d22, 0x14490685, 0x3caf4051, 0x1454f140,
+ 0x3cab4128, 0x1460db33, 0x3ca73fa9, 0x146cc45c,
+ 0x3ca33bd3, 0x1478acbc, 0x3c9f35a7, 0x14849452,
+ 0x3c9b2d24, 0x14907b1d, 0x3c97224c, 0x149c611d,
+ 0x3c93151d, 0x14a84652, 0x3c8f0598, 0x14b42abb,
+ 0x3c8af3be, 0x14c00e58, 0x3c86df8e, 0x14cbf127,
+ 0x3c82c909, 0x14d7d32a, 0x3c7eb02f, 0x14e3b45f,
+ 0x3c7a94ff, 0x14ef94c6, 0x3c76777b, 0x14fb745e,
+ 0x3c7257a2, 0x15075327, 0x3c6e3574, 0x15133120,
+ 0x3c6a10f2, 0x151f0e4a, 0x3c65ea1c, 0x152aeaa3,
+ 0x3c61c0f1, 0x1536c62b, 0x3c5d9573, 0x1542a0e1,
+ 0x3c5967a1, 0x154e7ac6, 0x3c55377b, 0x155a53d9,
+ 0x3c510501, 0x15662c18, 0x3c4cd035, 0x15720385,
+ 0x3c489915, 0x157dda1e, 0x3c445fa2, 0x1589afe3,
+ 0x3c4023dd, 0x159584d3, 0x3c3be5c5, 0x15a158ee,
+ 0x3c37a55a, 0x15ad2c34, 0x3c33629d, 0x15b8fea4,
+ 0x3c2f1d8e, 0x15c4d03e, 0x3c2ad62d, 0x15d0a100,
+ 0x3c268c7a, 0x15dc70eb, 0x3c224075, 0x15e83fff,
+ 0x3c1df21f, 0x15f40e3a, 0x3c19a178, 0x15ffdb9d,
+ 0x3c154e7f, 0x160ba826, 0x3c10f935, 0x161773d6,
+ 0x3c0ca19b, 0x16233eac, 0x3c0847b0, 0x162f08a8,
+ 0x3c03eb74, 0x163ad1c8, 0x3bff8ce8, 0x16469a0d,
+ 0x3bfb2c0c, 0x16526176, 0x3bf6c8e0, 0x165e2803,
+ 0x3bf26364, 0x1669edb3, 0x3bedfb99, 0x1675b286,
+ 0x3be9917e, 0x1681767c, 0x3be52513, 0x168d3993,
+ 0x3be0b65a, 0x1698fbcb, 0x3bdc4552, 0x16a4bd25,
+ 0x3bd7d1fa, 0x16b07d9f, 0x3bd35c54, 0x16bc3d39,
+ 0x3bcee460, 0x16c7fbf3, 0x3bca6a1d, 0x16d3b9cc,
+ 0x3bc5ed8d, 0x16df76c3, 0x3bc16eae, 0x16eb32d9,
+ 0x3bbced82, 0x16f6ee0d, 0x3bb86a08, 0x1702a85e,
+ 0x3bb3e440, 0x170e61cc, 0x3baf5c2c, 0x171a1a56,
+ 0x3baad1ca, 0x1725d1fc, 0x3ba6451b, 0x173188be,
+ 0x3ba1b620, 0x173d3e9b, 0x3b9d24d8, 0x1748f393,
+ 0x3b989144, 0x1754a7a4, 0x3b93fb63, 0x17605ad0,
+ 0x3b8f6337, 0x176c0d15, 0x3b8ac8bf, 0x1777be72,
+ 0x3b862bfb, 0x17836ee8, 0x3b818ceb, 0x178f1e76,
+ 0x3b7ceb90, 0x179acd1c, 0x3b7847eb, 0x17a67ad8,
+ 0x3b73a1fa, 0x17b227ab, 0x3b6ef9be, 0x17bdd394,
+ 0x3b6a4f38, 0x17c97e93, 0x3b65a268, 0x17d528a7,
+ 0x3b60f34d, 0x17e0d1d0, 0x3b5c41e8, 0x17ec7a0d,
+ 0x3b578e39, 0x17f8215e, 0x3b52d841, 0x1803c7c3,
+ 0x3b4e1fff, 0x180f6d3a, 0x3b496574, 0x181b11c4,
+ 0x3b44a8a0, 0x1826b561, 0x3b3fe982, 0x1832580e,
+ 0x3b3b281c, 0x183df9cd, 0x3b36646e, 0x18499a9d,
+ 0x3b319e77, 0x18553a7d, 0x3b2cd637, 0x1860d96d,
+ 0x3b280bb0, 0x186c776c, 0x3b233ee1, 0x1878147a,
+ 0x3b1e6fca, 0x1883b097, 0x3b199e6c, 0x188f4bc2,
+ 0x3b14cac6, 0x189ae5fa, 0x3b0ff4d9, 0x18a67f3f,
+ 0x3b0b1ca6, 0x18b21791, 0x3b06422c, 0x18bdaef0,
+ 0x3b01656b, 0x18c9455a, 0x3afc8663, 0x18d4dad0,
+ 0x3af7a516, 0x18e06f50, 0x3af2c183, 0x18ec02db,
+ 0x3aeddba9, 0x18f79571, 0x3ae8f38b, 0x1903270f,
+ 0x3ae40926, 0x190eb7b7, 0x3adf1c7d, 0x191a4767,
+ 0x3ada2d8e, 0x1925d620, 0x3ad53c5b, 0x193163e1,
+ 0x3ad048e3, 0x193cf0a9, 0x3acb5327, 0x19487c77,
+ 0x3ac65b26, 0x1954074d, 0x3ac160e1, 0x195f9128,
+ 0x3abc6458, 0x196b1a09, 0x3ab7658c, 0x1976a1ef,
+ 0x3ab2647c, 0x198228d9, 0x3aad6129, 0x198daec8,
+ 0x3aa85b92, 0x199933bb, 0x3aa353b9, 0x19a4b7b1,
+ 0x3a9e499d, 0x19b03aaa, 0x3a993d3e, 0x19bbbca6,
+ 0x3a942e9d, 0x19c73da3, 0x3a8f1dba, 0x19d2bda2,
+ 0x3a8a0a95, 0x19de3ca2, 0x3a84f52f, 0x19e9baa3,
+ 0x3a7fdd86, 0x19f537a4, 0x3a7ac39d, 0x1a00b3a5,
+ 0x3a75a772, 0x1a0c2ea5, 0x3a708906, 0x1a17a8a5,
+ 0x3a6b6859, 0x1a2321a2, 0x3a66456c, 0x1a2e999e,
+ 0x3a61203e, 0x1a3a1097, 0x3a5bf8d1, 0x1a45868e,
+ 0x3a56cf23, 0x1a50fb81, 0x3a51a335, 0x1a5c6f70,
+ 0x3a4c7508, 0x1a67e25c, 0x3a47449c, 0x1a735442,
+ 0x3a4211f0, 0x1a7ec524, 0x3a3cdd05, 0x1a8a3500,
+ 0x3a37a5dc, 0x1a95a3d6, 0x3a326c74, 0x1aa111a6,
+ 0x3a2d30cd, 0x1aac7e6f, 0x3a27f2e9, 0x1ab7ea31,
+ 0x3a22b2c6, 0x1ac354eb, 0x3a1d7066, 0x1acebe9d,
+ 0x3a182bc8, 0x1ada2746, 0x3a12e4ed, 0x1ae58ee6,
+ 0x3a0d9bd4, 0x1af0f57d, 0x3a08507f, 0x1afc5b0a,
+ 0x3a0302ed, 0x1b07bf8c, 0x39fdb31e, 0x1b132304,
+ 0x39f86113, 0x1b1e8571, 0x39f30ccc, 0x1b29e6d2,
+ 0x39edb649, 0x1b354727, 0x39e85d8a, 0x1b40a66f,
+ 0x39e3028f, 0x1b4c04aa, 0x39dda55a, 0x1b5761d8,
+ 0x39d845e9, 0x1b62bdf8, 0x39d2e43d, 0x1b6e190a,
+ 0x39cd8056, 0x1b79730d, 0x39c81a36, 0x1b84cc01,
+ 0x39c2b1da, 0x1b9023e5, 0x39bd4745, 0x1b9b7ab9,
+ 0x39b7da76, 0x1ba6d07d, 0x39b26b6d, 0x1bb22530,
+ 0x39acfa2b, 0x1bbd78d2, 0x39a786af, 0x1bc8cb61,
+ 0x39a210fb, 0x1bd41cdf, 0x399c990d, 0x1bdf6d4a,
+ 0x39971ee7, 0x1beabca1, 0x3991a289, 0x1bf60ae6,
+ 0x398c23f3, 0x1c015816, 0x3986a324, 0x1c0ca432,
+ 0x3981201e, 0x1c17ef39, 0x397b9ae0, 0x1c23392b,
+ 0x3976136b, 0x1c2e8207, 0x397089bf, 0x1c39c9cd,
+ 0x396afddc, 0x1c45107c, 0x39656fc2, 0x1c505614,
+ 0x395fdf71, 0x1c5b9a95, 0x395a4ceb, 0x1c66ddfe,
+ 0x3954b82e, 0x1c72204f, 0x394f213c, 0x1c7d6187,
+ 0x39498814, 0x1c88a1a6, 0x3943ecb6, 0x1c93e0ab,
+ 0x393e4f23, 0x1c9f1e96, 0x3938af5c, 0x1caa5b66,
+ 0x39330d5f, 0x1cb5971c, 0x392d692f, 0x1cc0d1b6,
+ 0x3927c2c9, 0x1ccc0b35, 0x39221a30, 0x1cd74397,
+ 0x391c6f63, 0x1ce27add, 0x3916c262, 0x1cedb106,
+ 0x3911132d, 0x1cf8e611, 0x390b61c6, 0x1d0419fe,
+ 0x3905ae2b, 0x1d0f4ccd, 0x38fff85e, 0x1d1a7e7d,
+ 0x38fa405e, 0x1d25af0d, 0x38f4862c, 0x1d30de7e,
+ 0x38eec9c7, 0x1d3c0ccf, 0x38e90b31, 0x1d473a00,
+ 0x38e34a69, 0x1d52660f, 0x38dd8770, 0x1d5d90fd,
+ 0x38d7c245, 0x1d68baca, 0x38d1fae9, 0x1d73e374,
+ 0x38cc315d, 0x1d7f0afb, 0x38c665a0, 0x1d8a315f,
+ 0x38c097b2, 0x1d9556a0, 0x38bac795, 0x1da07abc,
+ 0x38b4f547, 0x1dab9db5, 0x38af20ca, 0x1db6bf88,
+ 0x38a94a1e, 0x1dc1e036, 0x38a37142, 0x1dccffbf,
+ 0x389d9637, 0x1dd81e21, 0x3897b8fe, 0x1de33b5d,
+ 0x3891d995, 0x1dee5771, 0x388bf7ff, 0x1df9725f,
+ 0x3886143b, 0x1e048c24, 0x38802e48, 0x1e0fa4c2,
+ 0x387a4628, 0x1e1abc36, 0x38745bdb, 0x1e25d282,
+ 0x386e6f60, 0x1e30e7a4, 0x386880b8, 0x1e3bfb9c,
+ 0x38628fe4, 0x1e470e69, 0x385c9ce3, 0x1e52200c,
+ 0x3856a7b6, 0x1e5d3084, 0x3850b05d, 0x1e683fcf,
+ 0x384ab6d8, 0x1e734def, 0x3844bb28, 0x1e7e5ae2,
+ 0x383ebd4c, 0x1e8966a8, 0x3838bd45, 0x1e947141,
+ 0x3832bb13, 0x1e9f7aac, 0x382cb6b7, 0x1eaa82e9,
+ 0x3826b030, 0x1eb589f7, 0x3820a77f, 0x1ec08fd6,
+ 0x381a9ca4, 0x1ecb9486, 0x38148f9f, 0x1ed69805,
+ 0x380e8071, 0x1ee19a54, 0x38086f19, 0x1eec9b73,
+ 0x38025b98, 0x1ef79b60, 0x37fc45ef, 0x1f029a1c,
+ 0x37f62e1d, 0x1f0d97a5, 0x37f01423, 0x1f1893fc,
+ 0x37e9f801, 0x1f238f20, 0x37e3d9b7, 0x1f2e8911,
+ 0x37ddb945, 0x1f3981ce, 0x37d796ac, 0x1f447957,
+ 0x37d171eb, 0x1f4f6fab, 0x37cb4b04, 0x1f5a64cb,
+ 0x37c521f6, 0x1f6558b5, 0x37bef6c2, 0x1f704b69,
+ 0x37b8c968, 0x1f7b3ce6, 0x37b299e7, 0x1f862d2d,
+ 0x37ac6841, 0x1f911c3d, 0x37a63476, 0x1f9c0a15,
+ 0x379ffe85, 0x1fa6f6b6, 0x3799c66f, 0x1fb1e21d,
+ 0x37938c34, 0x1fbccc4d, 0x378d4fd5, 0x1fc7b542,
+ 0x37871152, 0x1fd29cff, 0x3780d0aa, 0x1fdd8381,
+ 0x377a8ddf, 0x1fe868c8, 0x377448f0, 0x1ff34cd5,
+ 0x376e01de, 0x1ffe2fa6, 0x3767b8a9, 0x2009113c,
+ 0x37616d51, 0x2013f196, 0x375b1fd7, 0x201ed0b2,
+ 0x3754d03a, 0x2029ae92, 0x374e7e7b, 0x20348b35,
+ 0x37482a9a, 0x203f6699, 0x3741d497, 0x204a40bf,
+ 0x373b7c73, 0x205519a7, 0x3735222f, 0x205ff14f,
+ 0x372ec5c9, 0x206ac7b8, 0x37286742, 0x20759ce1,
+ 0x3722069b, 0x208070ca, 0x371ba3d4, 0x208b4372,
+ 0x37153eee, 0x209614d9, 0x370ed7e7, 0x20a0e4fe,
+ 0x37086ec1, 0x20abb3e1, 0x3702037c, 0x20b68181,
+ 0x36fb9618, 0x20c14ddf, 0x36f52695, 0x20cc18f9,
+ 0x36eeb4f4, 0x20d6e2d0, 0x36e84135, 0x20e1ab63,
+ 0x36e1cb58, 0x20ec72b1, 0x36db535d, 0x20f738ba,
+ 0x36d4d945, 0x2101fd7e, 0x36ce5d10, 0x210cc0fc,
+ 0x36c7debd, 0x21178334, 0x36c15e4e, 0x21224425,
+ 0x36badbc3, 0x212d03cf, 0x36b4571b, 0x2137c232,
+ 0x36add058, 0x21427f4d, 0x36a74779, 0x214d3b1f,
+ 0x36a0bc7e, 0x2157f5a9, 0x369a2f69, 0x2162aeea,
+ 0x3693a038, 0x216d66e2, 0x368d0eed, 0x21781d8f,
+ 0x36867b87, 0x2182d2f2, 0x367fe608, 0x218d870b,
+ 0x36794e6e, 0x219839d8, 0x3672b4bb, 0x21a2eb5a,
+ 0x366c18ee, 0x21ad9b8f, 0x36657b08, 0x21b84a79,
+ 0x365edb09, 0x21c2f815, 0x365838f2, 0x21cda465,
+ 0x365194c3, 0x21d84f66, 0x364aee7b, 0x21e2f91a,
+ 0x3644461b, 0x21eda17f, 0x363d9ba4, 0x21f84895,
+ 0x3636ef16, 0x2202ee5d, 0x36304070, 0x220d92d4,
+ 0x36298fb4, 0x221835fb, 0x3622dce1, 0x2222d7d2,
+ 0x361c27f7, 0x222d7858, 0x361570f8, 0x2238178d,
+ 0x360eb7e3, 0x2242b56f, 0x3607fcb8, 0x224d5200,
+ 0x36013f78, 0x2257ed3e, 0x35fa8023, 0x22628729,
+ 0x35f3beba, 0x226d1fc1, 0x35ecfb3c, 0x2277b705,
+ 0x35e635a9, 0x22824cf5, 0x35df6e03, 0x228ce191,
+ 0x35d8a449, 0x229774d7, 0x35d1d87c, 0x22a206c8,
+ 0x35cb0a9b, 0x22ac9763, 0x35c43aa7, 0x22b726a8,
+ 0x35bd68a1, 0x22c1b496, 0x35b69489, 0x22cc412d,
+ 0x35afbe5e, 0x22d6cc6d, 0x35a8e621, 0x22e15655,
+ 0x35a20bd3, 0x22ebdee5, 0x359b2f73, 0x22f6661c,
+ 0x35945103, 0x2300ebf9, 0x358d7081, 0x230b707e,
+ 0x35868def, 0x2315f3a8, 0x357fa94d, 0x23207579,
+ 0x3578c29b, 0x232af5ee, 0x3571d9d9, 0x23357509,
+ 0x356aef08, 0x233ff2c8, 0x35640227, 0x234a6f2b,
+ 0x355d1337, 0x2354ea32, 0x35562239, 0x235f63dc,
+ 0x354f2f2c, 0x2369dc29, 0x35483a11, 0x23745318,
+ 0x354142e9, 0x237ec8aa, 0x353a49b2, 0x23893cdd,
+ 0x35334e6f, 0x2393afb2, 0x352c511e, 0x239e2127,
+ 0x352551c0, 0x23a8913d, 0x351e5056, 0x23b2fff3,
+ 0x35174ce0, 0x23bd6d48, 0x3510475e, 0x23c7d93d,
+ 0x35093fd0, 0x23d243d1, 0x35023636, 0x23dcad03,
+ 0x34fb2a92, 0x23e714d3, 0x34f41ce2, 0x23f17b41,
+ 0x34ed0d28, 0x23fbe04c, 0x34e5fb63, 0x240643f4,
+ 0x34dee795, 0x2410a639, 0x34d7d1bc, 0x241b0719,
+ 0x34d0b9da, 0x24256695, 0x34c99fef, 0x242fc4ad,
+ 0x34c283fb, 0x243a215f, 0x34bb65fe, 0x24447cac,
+ 0x34b445f8, 0x244ed692, 0x34ad23eb, 0x24592f13,
+ 0x34a5ffd5, 0x2463862c, 0x349ed9b8, 0x246ddbdf,
+ 0x3497b194, 0x2478302a, 0x34908768, 0x2482830d,
+ 0x34895b36, 0x248cd487, 0x34822cfd, 0x24972499,
+ 0x347afcbe, 0x24a17342, 0x3473ca79, 0x24abc082,
+ 0x346c962f, 0x24b60c57, 0x34655fdf, 0x24c056c2,
+ 0x345e2789, 0x24ca9fc2, 0x3456ed2f, 0x24d4e757,
+ 0x344fb0d1, 0x24df2d81, 0x3448726e, 0x24e9723f,
+ 0x34413207, 0x24f3b590, 0x3439ef9c, 0x24fdf775,
+ 0x3432ab2e, 0x250837ed, 0x342b64bd, 0x251276f7,
+ 0x34241c49, 0x251cb493, 0x341cd1d2, 0x2526f0c1,
+ 0x34158559, 0x25312b81, 0x340e36dd, 0x253b64d1,
+ 0x3406e660, 0x25459cb2, 0x33ff93e2, 0x254fd323,
+ 0x33f83f62, 0x255a0823, 0x33f0e8e2, 0x25643bb3,
+ 0x33e99061, 0x256e6dd2, 0x33e235df, 0x25789e80,
+ 0x33dad95e, 0x2582cdbc, 0x33d37adc, 0x258cfb85,
+ 0x33cc1a5b, 0x259727dc, 0x33c4b7db, 0x25a152c0,
+ 0x33bd535c, 0x25ab7c30, 0x33b5ecde, 0x25b5a42d,
+ 0x33ae8462, 0x25bfcab6, 0x33a719e8, 0x25c9efca,
+ 0x339fad70, 0x25d41369, 0x33983efb, 0x25de3592,
+ 0x3390ce88, 0x25e85646, 0x33895c18, 0x25f27584,
+ 0x3381e7ac, 0x25fc934b, 0x337a7144, 0x2606af9c,
+ 0x3372f8df, 0x2610ca75, 0x336b7e7e, 0x261ae3d6,
+ 0x33640223, 0x2624fbbf, 0x335c83cb, 0x262f1230,
+ 0x33550379, 0x26392728, 0x334d812d, 0x26433aa7,
+ 0x3345fce6, 0x264d4cac, 0x333e76a4, 0x26575d37,
+ 0x3336ee6a, 0x26616c48, 0x332f6435, 0x266b79dd,
+ 0x3327d808, 0x267585f8, 0x332049e1, 0x267f9097,
+ 0x3318b9c2, 0x268999ba, 0x331127ab, 0x2693a161,
+ 0x3309939c, 0x269da78b, 0x3301fd95, 0x26a7ac38,
+ 0x32fa6596, 0x26b1af67, 0x32f2cba1, 0x26bbb119,
+ 0x32eb2fb5, 0x26c5b14c, 0x32e391d2, 0x26cfb000,
+ 0x32dbf1f8, 0x26d9ad36, 0x32d45029, 0x26e3a8ec,
+ 0x32ccac64, 0x26eda322, 0x32c506aa, 0x26f79bd8,
+ 0x32bd5efb, 0x2701930e, 0x32b5b557, 0x270b88c2,
+ 0x32ae09be, 0x27157cf5, 0x32a65c32, 0x271f6fa6,
+ 0x329eacb1, 0x272960d6, 0x3296fb3d, 0x27335082,
+ 0x328f47d5, 0x273d3eac, 0x3287927b, 0x27472b53,
+ 0x327fdb2d, 0x27511676, 0x327821ee, 0x275b0014,
+ 0x327066bc, 0x2764e82f, 0x3268a998, 0x276ecec5,
+ 0x3260ea83, 0x2778b3d5, 0x3259297d, 0x27829760,
+ 0x32516686, 0x278c7965, 0x3249a19e, 0x279659e3,
+ 0x3241dac6, 0x27a038db, 0x323a11fe, 0x27aa164c,
+ 0x32324746, 0x27b3f235, 0x322a7a9e, 0x27bdcc97,
+ 0x3222ac08, 0x27c7a570, 0x321adb83, 0x27d17cc1,
+ 0x3213090f, 0x27db5288, 0x320b34ad, 0x27e526c6,
+ 0x32035e5d, 0x27eef97b, 0x31fb8620, 0x27f8caa5,
+ 0x31f3abf5, 0x28029a45, 0x31ebcfdd, 0x280c685a,
+ 0x31e3f1d8, 0x281634e4, 0x31dc11e8, 0x281fffe2,
+ 0x31d4300b, 0x2829c954, 0x31cc4c42, 0x2833913a,
+ 0x31c4668d, 0x283d5793, 0x31bc7eee, 0x28471c5e,
+ 0x31b49564, 0x2850df9d, 0x31aca9ef, 0x285aa14d,
+ 0x31a4bc90, 0x2864616f, 0x319ccd46, 0x286e2002,
+ 0x3194dc14, 0x2877dd07, 0x318ce8f7, 0x2881987c,
+ 0x3184f3f2, 0x288b5261, 0x317cfd04, 0x28950ab6,
+ 0x3175042e, 0x289ec17a, 0x316d096f, 0x28a876ae,
+ 0x31650cc9, 0x28b22a50, 0x315d0e3b, 0x28bbdc61,
+ 0x31550dc6, 0x28c58cdf, 0x314d0b6a, 0x28cf3bcc,
+ 0x31450728, 0x28d8e925, 0x313d00ff, 0x28e294eb,
+ 0x3134f8f1, 0x28ec3f1e, 0x312ceefc, 0x28f5e7bd,
+ 0x3124e322, 0x28ff8ec8, 0x311cd564, 0x2909343e,
+ 0x3114c5c0, 0x2912d81f, 0x310cb438, 0x291c7a6a,
+ 0x3104a0cc, 0x29261b20, 0x30fc8b7d, 0x292fba40,
+ 0x30f47449, 0x293957c9, 0x30ec5b33, 0x2942f3bb,
+ 0x30e4403a, 0x294c8e16, 0x30dc235e, 0x295626da,
+ 0x30d404a0, 0x295fbe06, 0x30cbe400, 0x29695399,
+ 0x30c3c17e, 0x2972e793, 0x30bb9d1c, 0x297c79f5,
+ 0x30b376d8, 0x29860abd, 0x30ab4eb3, 0x298f99eb,
+ 0x30a324af, 0x2999277f, 0x309af8ca, 0x29a2b378,
+ 0x3092cb05, 0x29ac3dd7, 0x308a9b61, 0x29b5c69a,
+ 0x308269de, 0x29bf4dc1, 0x307a367c, 0x29c8d34d,
+ 0x3072013c, 0x29d2573c, 0x3069ca1e, 0x29dbd98e,
+ 0x30619121, 0x29e55a43, 0x30595648, 0x29eed95b,
+ 0x30511991, 0x29f856d5, 0x3048dafd, 0x2a01d2b0,
+ 0x30409a8d, 0x2a0b4ced, 0x30385840, 0x2a14c58b,
+ 0x30301418, 0x2a1e3c8a, 0x3027ce14, 0x2a27b1e9,
+ 0x301f8634, 0x2a3125a8, 0x30173c7a, 0x2a3a97c7,
+ 0x300ef0e5, 0x2a440844, 0x3006a376, 0x2a4d7721,
+ 0x2ffe542d, 0x2a56e45c, 0x2ff6030a, 0x2a604ff5,
+ 0x2fedb00d, 0x2a69b9ec, 0x2fe55b38, 0x2a732241,
+ 0x2fdd048a, 0x2a7c88f2, 0x2fd4ac04, 0x2a85ee00,
+ 0x2fcc51a5, 0x2a8f516b, 0x2fc3f56f, 0x2a98b331,
+ 0x2fbb9761, 0x2aa21353, 0x2fb3377c, 0x2aab71d0,
+ 0x2faad5c1, 0x2ab4cea9, 0x2fa2722f, 0x2abe29db,
+ 0x2f9a0cc7, 0x2ac78368, 0x2f91a589, 0x2ad0db4e,
+ 0x2f893c75, 0x2ada318e, 0x2f80d18d, 0x2ae38627,
+ 0x2f7864cf, 0x2aecd919, 0x2f6ff63d, 0x2af62a63,
+ 0x2f6785d7, 0x2aff7a05, 0x2f5f139d, 0x2b08c7ff,
+ 0x2f569f90, 0x2b121450, 0x2f4e29af, 0x2b1b5ef8,
+ 0x2f45b1fb, 0x2b24a7f6, 0x2f3d3875, 0x2b2def4b,
+ 0x2f34bd1d, 0x2b3734f5, 0x2f2c3ff2, 0x2b4078f5,
+ 0x2f23c0f6, 0x2b49bb4a, 0x2f1b4029, 0x2b52fbf4,
+ 0x2f12bd8b, 0x2b5c3af2, 0x2f0a391d, 0x2b657844,
+ 0x2f01b2de, 0x2b6eb3ea, 0x2ef92acf, 0x2b77ede3,
+ 0x2ef0a0f0, 0x2b812630, 0x2ee81543, 0x2b8a5cce,
+ 0x2edf87c6, 0x2b9391c0, 0x2ed6f87a, 0x2b9cc503,
+ 0x2ece6761, 0x2ba5f697, 0x2ec5d479, 0x2baf267d,
+ 0x2ebd3fc4, 0x2bb854b4, 0x2eb4a942, 0x2bc1813b,
+ 0x2eac10f2, 0x2bcaac12, 0x2ea376d6, 0x2bd3d53a,
+ 0x2e9adaee, 0x2bdcfcb0, 0x2e923d39, 0x2be62276,
+ 0x2e899db9, 0x2bef468a, 0x2e80fc6e, 0x2bf868ed,
+ 0x2e785958, 0x2c01899e, 0x2e6fb477, 0x2c0aa89c,
+ 0x2e670dcb, 0x2c13c5e8, 0x2e5e6556, 0x2c1ce181,
+ 0x2e55bb17, 0x2c25fb66, 0x2e4d0f0f, 0x2c2f1398,
+ 0x2e44613e, 0x2c382a16, 0x2e3bb1a4, 0x2c413edf,
+ 0x2e330042, 0x2c4a51f3, 0x2e2a4d18, 0x2c536353,
+ 0x2e219826, 0x2c5c72fd, 0x2e18e16d, 0x2c6580f1,
+ 0x2e1028ed, 0x2c6e8d2e, 0x2e076ea7, 0x2c7797b6,
+ 0x2dfeb29a, 0x2c80a086, 0x2df5f4c7, 0x2c89a79f,
+ 0x2ded352f, 0x2c92ad01, 0x2de473d1, 0x2c9bb0ab,
+ 0x2ddbb0ae, 0x2ca4b29c, 0x2dd2ebc7, 0x2cadb2d5,
+ 0x2dca251c, 0x2cb6b155, 0x2dc15cac, 0x2cbfae1b,
+ 0x2db89279, 0x2cc8a928, 0x2dafc683, 0x2cd1a27b,
+ 0x2da6f8ca, 0x2cda9a14, 0x2d9e294e, 0x2ce38ff1,
+ 0x2d955810, 0x2cec8414, 0x2d8c8510, 0x2cf5767c,
+ 0x2d83b04f, 0x2cfe6728, 0x2d7ad9cc, 0x2d075617,
+ 0x2d720189, 0x2d10434a, 0x2d692784, 0x2d192ec1,
+ 0x2d604bc0, 0x2d22187a, 0x2d576e3c, 0x2d2b0076,
+ 0x2d4e8ef9, 0x2d33e6b4, 0x2d45adf6, 0x2d3ccb34,
+ 0x1ffffd88, 0xfff36f03, 0x1fffe9cb, 0xffda4d10,
+ 0x1fffc251, 0xffc12b34, 0x1fff8719, 0xffa8097f,
+ 0x1fff3825, 0xff8ee800, 0x1ffed574, 0xff75c6c8,
+ 0x1ffe5f06, 0xff5ca5e4, 0x1ffdd4dc, 0xff438565,
+ 0x1ffd36f6, 0xff2a655a, 0x1ffc8555, 0xff1145d4,
+ 0x1ffbbff8, 0xfef826e0, 0x1ffae6e1, 0xfedf088f,
+ 0x1ff9fa10, 0xfec5eaf1, 0x1ff8f986, 0xfeacce14,
+ 0x1ff7e542, 0xfe93b208, 0x1ff6bd46, 0xfe7a96dd,
+ 0x1ff58193, 0xfe617ca3, 0x1ff43229, 0xfe486368,
+ 0x1ff2cf09, 0xfe2f4b3c, 0x1ff15834, 0xfe16342f,
+ 0x1fefcdaa, 0xfdfd1e50, 0x1fee2f6e, 0xfde409ae,
+ 0x1fec7d7f, 0xfdcaf65a, 0x1feab7df, 0xfdb1e462,
+ 0x1fe8de8f, 0xfd98d3d6, 0x1fe6f190, 0xfd7fc4c6,
+ 0x1fe4f0e3, 0xfd66b740, 0x1fe2dc8a, 0xfd4dab55,
+ 0x1fe0b485, 0xfd34a114, 0x1fde78d7, 0xfd1b988c,
+ 0x1fdc297f, 0xfd0291cd, 0x1fd9c681, 0xfce98ce6,
+ 0x1fd74fdd, 0xfcd089e7, 0x1fd4c595, 0xfcb788de,
+ 0x1fd227ab, 0xfc9e89dc, 0x1fcf761f, 0xfc858cf0,
+ 0x1fccb0f4, 0xfc6c9229, 0x1fc9d82c, 0xfc539997,
+ 0x1fc6ebc7, 0xfc3aa349, 0x1fc3ebc9, 0xfc21af4e,
+ 0x1fc0d833, 0xfc08bdb7, 0x1fbdb106, 0xfbefce91,
+ 0x1fba7645, 0xfbd6e1ed, 0x1fb727f2, 0xfbbdf7db,
+ 0x1fb3c60e, 0xfba51068, 0x1fb0509c, 0xfb8c2ba5,
+ 0x1facc79e, 0xfb7349a2, 0x1fa92b16, 0xfb5a6a6d,
+ 0x1fa57b06, 0xfb418e15, 0x1fa1b771, 0xfb28b4ab,
+ 0x1f9de059, 0xfb0fde3d, 0x1f99f5c1, 0xfaf70adb,
+ 0x1f95f7aa, 0xfade3a95, 0x1f91e617, 0xfac56d78,
+ 0x1f8dc10b, 0xfaaca395, 0x1f898888, 0xfa93dcfc,
+ 0x1f853c91, 0xfa7b19ba, 0x1f80dd28, 0xfa6259e0,
+ 0x1f7c6a51, 0xfa499d7d, 0x1f77e40d, 0xfa30e4a0,
+ 0x1f734a60, 0xfa182f58, 0x1f6e9d4d, 0xf9ff7db5,
+ 0x1f69dcd6, 0xf9e6cfc6, 0x1f6508ff, 0xf9ce2599,
+ 0x1f6021ca, 0xf9b57f3f, 0x1f5b273a, 0xf99cdcc6,
+ 0x1f561953, 0xf9843e3e, 0x1f50f818, 0xf96ba3b6,
+ 0x1f4bc38b, 0xf9530d3d, 0x1f467bb0, 0xf93a7ae2,
+ 0x1f41208a, 0xf921ecb4, 0x1f3bb21d, 0xf90962c3,
+ 0x1f36306b, 0xf8f0dd1d, 0x1f309b79, 0xf8d85bd2,
+ 0x1f2af34a, 0xf8bfdef1, 0x1f2537e1, 0xf8a76689,
+ 0x1f1f6941, 0xf88ef2a9, 0x1f19876f, 0xf8768360,
+ 0x1f13926e, 0xf85e18bd, 0x1f0d8a41, 0xf845b2cf,
+ 0x1f076eed, 0xf82d51a6, 0x1f014074, 0xf814f550,
+ 0x1efafedc, 0xf7fc9ddd, 0x1ef4aa28, 0xf7e44b5b,
+ 0x1eee425b, 0xf7cbfdd9, 0x1ee7c779, 0xf7b3b567,
+ 0x1ee13988, 0xf79b7213, 0x1eda988a, 0xf78333ec,
+ 0x1ed3e484, 0xf76afb02, 0x1ecd1d79, 0xf752c763,
+ 0x1ec6436f, 0xf73a991e, 0x1ebf5669, 0xf7227042,
+ 0x1eb8566c, 0xf70a4cde, 0x1eb1437b, 0xf6f22f01,
+ 0x1eaa1d9c, 0xf6da16ba, 0x1ea2e4d2, 0xf6c20418,
+ 0x1e9b9923, 0xf6a9f728, 0x1e943a92, 0xf691effb,
+ 0x1e8cc924, 0xf679eea0, 0x1e8544de, 0xf661f324,
+ 0x1e7dadc4, 0xf649fd97, 0x1e7603dc, 0xf6320e07,
+ 0x1e6e4729, 0xf61a2484, 0x1e6677b1, 0xf602411b,
+ 0x1e5e9578, 0xf5ea63dd, 0x1e56a084, 0xf5d28cd7,
+ 0x1e4e98d8, 0xf5babc18, 0x1e467e7b, 0xf5a2f1af,
+ 0x1e3e5171, 0xf58b2daa, 0x1e3611bf, 0xf5737019,
+ 0x1e2dbf6a, 0xf55bb909, 0x1e255a78, 0xf544088a,
+ 0x1e1ce2ed, 0xf52c5eaa, 0x1e1458cf, 0xf514bb78,
+ 0x1e0bbc23, 0xf4fd1f02, 0x1e030cee, 0xf4e58956,
+ 0x1dfa4b36, 0xf4cdfa85, 0x1df17700, 0xf4b6729b,
+ 0x1de89052, 0xf49ef1a7, 0x1ddf9731, 0xf48777b8,
+ 0x1dd68ba2, 0xf47004dd, 0x1dcd6dac, 0xf4589924,
+ 0x1dc43d53, 0xf441349b, 0x1dbafa9e, 0xf429d751,
+ 0x1db1a592, 0xf4128153, 0x1da83e35, 0xf3fb32b2,
+ 0x1d9ec48c, 0xf3e3eb7a, 0x1d95389e, 0xf3ccabbb,
+ 0x1d8b9a71, 0xf3b57382, 0x1d81ea0a, 0xf39e42de,
+ 0x1d78276f, 0xf38719de, 0x1d6e52a7, 0xf36ff88f,
+ 0x1d646bb7, 0xf358deff, 0x1d5a72a6, 0xf341cd3e,
+ 0x1d50677a, 0xf32ac359, 0x1d464a38, 0xf313c15f,
+ 0x1d3c1ae8, 0xf2fcc75d, 0x1d31d98f, 0xf2e5d562,
+ 0x1d278633, 0xf2ceeb7d, 0x1d1d20dc, 0xf2b809ba,
+ 0x1d12a990, 0xf2a13029, 0x1d082054, 0xf28a5ed7,
+ 0x1cfd8530, 0xf27395d2, 0x1cf2d82a, 0xf25cd529,
+ 0x1ce81949, 0xf2461ce9, 0x1cdd4892, 0xf22f6d21,
+ 0x1cd2660e, 0xf218c5df, 0x1cc771c2, 0xf2022730,
+ 0x1cbc6bb6, 0xf1eb9122, 0x1cb153f0, 0xf1d503c4,
+ 0x1ca62a77, 0xf1be7f23, 0x1c9aef52, 0xf1a8034e,
+ 0x1c8fa288, 0xf1919051, 0x1c84441f, 0xf17b263b,
+ 0x1c78d420, 0xf164c51b, 0x1c6d5290, 0xf14e6cfc,
+ 0x1c61bf77, 0xf1381dee, 0x1c561add, 0xf121d7fe,
+ 0x1c4a64c8, 0xf10b9b3a, 0x1c3e9d3f, 0xf0f567af,
+ 0x1c32c44a, 0xf0df3d6c, 0x1c26d9f0, 0xf0c91c7e,
+ 0x1c1ade39, 0xf0b304f2, 0x1c0ed12b, 0xf09cf6d6,
+ 0x1c02b2cf, 0xf086f238, 0x1bf6832b, 0xf070f726,
+ 0x1bea4248, 0xf05b05ac, 0x1bddf02d, 0xf0451dd9,
+ 0x1bd18ce1, 0xf02f3fba, 0x1bc5186c, 0xf0196b5c,
+ 0x1bb892d6, 0xf003a0cd, 0x1babfc26, 0xefede01b,
+ 0x1b9f5465, 0xefd82952, 0x1b929b99, 0xefc27c81,
+ 0x1b85d1cc, 0xefacd9b4, 0x1b78f704, 0xef9740f9,
+ 0x1b6c0b4a, 0xef81b25e, 0x1b5f0ea6, 0xef6c2def,
+ 0x1b520120, 0xef56b3b9, 0x1b44e2bf, 0xef4143cb,
+ 0x1b37b38c, 0xef2bde31, 0x1b2a738f, 0xef1682f8,
+ 0x1b1d22d0, 0xef01322f, 0x1b0fc157, 0xeeebebe0,
+ 0x1b024f2d, 0xeed6b01b, 0x1af4cc5b, 0xeec17eec,
+ 0x1ae738e7, 0xeeac5860, 0x1ad994db, 0xee973c84,
+ 0x1acbe03f, 0xee822b65, 0x1abe1b1b, 0xee6d2511,
+ 0x1ab04578, 0xee582993, 0x1aa25f5f, 0xee4338f9,
+ 0x1a9468d8, 0xee2e5351, 0x1a8661ec, 0xee1978a6,
+ 0x1a784aa3, 0xee04a906, 0x1a6a2306, 0xedefe47e,
+ 0x1a5beb1e, 0xeddb2b1a, 0x1a4da2f4, 0xedc67ce7,
+ 0x1a3f4a8f, 0xedb1d9f3, 0x1a30e1fa, 0xed9d4248,
+ 0x1a22693d, 0xed88b5f5, 0x1a13e061, 0xed743507,
+ 0x1a054770, 0xed5fbf88, 0x19f69e71, 0xed4b5588,
+ 0x19e7e56e, 0xed36f711, 0x19d91c70, 0xed22a430,
+ 0x19ca4381, 0xed0e5cf2, 0x19bb5aa8, 0xecfa2164,
+ 0x19ac61f1, 0xece5f192, 0x199d5963, 0xecd1cd89,
+ 0x198e4109, 0xecbdb554, 0x197f18ea, 0xeca9a900,
+ 0x196fe112, 0xec95a89a, 0x19609989, 0xec81b42f,
+ 0x19514258, 0xec6dcbc9, 0x1941db89, 0xec59ef76,
+ 0x19326526, 0xec461f41, 0x1922df38, 0xec325b38,
+ 0x191349c9, 0xec1ea366, 0x1903a4e1, 0xec0af7d7,
+ 0x18f3f08c, 0xebf75898, 0x18e42cd3, 0xebe3c5b4,
+ 0x18d459be, 0xebd03f38, 0x18c47759, 0xebbcc530,
+ 0x18b485ad, 0xeba957a7, 0x18a484c3, 0xeb95f6ab,
+ 0x189474a6, 0xeb82a246, 0x1884555f, 0xeb6f5a84,
+ 0x187426f9, 0xeb5c1f72, 0x1863e97e, 0xeb48f11b,
+ 0x18539cf6, 0xeb35cf8c, 0x1843416e, 0xeb22bad0,
+ 0x1832d6ee, 0xeb0fb2f2, 0x18225d80, 0xeafcb7ff,
+ 0x1811d530, 0xeae9ca02, 0x18013e06, 0xead6e907,
+ 0x17f0980e, 0xeac41519, 0x17dfe351, 0xeab14e45,
+ 0x17cf1fdb, 0xea9e9495, 0x17be4db4, 0xea8be815,
+ 0x17ad6ce8, 0xea7948d2, 0x179c7d82, 0xea66b6d5,
+ 0x178b7f8a, 0xea54322c, 0x177a730d, 0xea41bae0,
+ 0x17695814, 0xea2f50ff, 0x17582eaa, 0xea1cf492,
+ 0x1746f6d9, 0xea0aa5a5, 0x1735b0ad, 0xe9f86444,
+ 0x17245c30, 0xe9e63079, 0x1712f96c, 0xe9d40a51,
+ 0x1701886d, 0xe9c1f1d6, 0x16f0093c, 0xe9afe713,
+ 0x16de7be6, 0xe99dea14, 0x16cce074, 0xe98bfae3,
+ 0x16bb36f1, 0xe97a198c, 0x16a97f69, 0xe9684619,
+ 0x1697b9e7, 0xe9568097, 0x1685e674, 0xe944c90f,
+ 0x1674051d, 0xe9331f8c, 0x166215ec, 0xe921841a,
+ 0x165018ed, 0xe90ff6c4, 0x163e0e2a, 0xe8fe7793,
+ 0x162bf5af, 0xe8ed0694, 0x1619cf87, 0xe8dba3d0,
+ 0x16079bbc, 0xe8ca4f53, 0x15f55a5b, 0xe8b90927,
+ 0x15e30b6e, 0xe8a7d156, 0x15d0af01, 0xe896a7ec,
+ 0x15be4520, 0xe8858cf3, 0x15abcdd4, 0xe8748076,
+ 0x1599492b, 0xe863827e, 0x1586b72e, 0xe8529318,
+ 0x157417eb, 0xe841b24c, 0x15616b6b, 0xe830e025,
+ 0x154eb1bb, 0xe8201caf, 0x153beae7, 0xe80f67f2,
+ 0x152916f9, 0xe7fec1fa, 0x151635fe, 0xe7ee2ad0,
+ 0x15034801, 0xe7dda280, 0x14f04d0e, 0xe7cd2912,
+ 0x14dd4530, 0xe7bcbe92, 0x14ca3074, 0xe7ac630a,
+ 0x14b70ee5, 0xe79c1682, 0x14a3e08e, 0xe78bd907,
+ 0x1490a57c, 0xe77baaa1, 0x147d5dba, 0xe76b8b5a,
+ 0x146a0955, 0xe75b7b3d, 0x1456a859, 0xe74b7a53,
+ 0x14433ad0, 0xe73b88a7, 0x142fc0c8, 0xe72ba642,
+ 0x141c3a4c, 0xe71bd32d, 0x1408a768, 0xe70c0f74,
+ 0x13f50829, 0xe6fc5b1f, 0x13e15c9a, 0xe6ecb637,
+ 0x13cda4c8, 0xe6dd20c8, 0x13b9e0bf, 0xe6cd9ada,
+ 0x13a6108a, 0xe6be2477, 0x13923437, 0xe6aebda8,
+ 0x137e4bd1, 0xe69f6677, 0x136a5766, 0xe6901eee,
+ 0x13565700, 0xe680e716, 0x13424aac, 0xe671bef7,
+ 0x132e3277, 0xe662a69d, 0x131a0e6e, 0xe6539e0f,
+ 0x1305de9c, 0xe644a558, 0x12f1a30e, 0xe635bc7f,
+ 0x12dd5bd0, 0xe626e390, 0x12c908ef, 0xe6181a92,
+ 0x12b4aa78, 0xe609618f, 0x12a04078, 0xe5fab890,
+ 0x128bcaf9, 0xe5ec1f9f, 0x12774a0b, 0xe5dd96c3,
+ 0x1262bdb8, 0xe5cf1e06, 0x124e260d, 0xe5c0b571,
+ 0x12398319, 0xe5b25d0c, 0x1224d4e6, 0xe5a414e2,
+ 0x12101b82, 0xe595dcfa, 0x11fb56fa, 0xe587b55d,
+ 0x11e6875a, 0xe5799e14, 0x11d1acaf, 0xe56b9728,
+ 0x11bcc707, 0xe55da0a1, 0x11a7d66d, 0xe54fba88,
+ 0x1192daef, 0xe541e4e5, 0x117dd49b, 0xe5341fc1,
+ 0x1168c37c, 0xe5266b25, 0x1153a7a0, 0xe518c719,
+ 0x113e8114, 0xe50b33a5, 0x11294fe5, 0xe4fdb0d3,
+ 0x11141420, 0xe4f03ea9, 0x10fecdd1, 0xe4e2dd30,
+ 0x10e97d08, 0xe4d58c71, 0x10d421cf, 0xe4c84c74,
+ 0x10bebc35, 0xe4bb1d41, 0x10a94c47, 0xe4adfee0,
+ 0x1093d211, 0xe4a0f15a, 0x107e4da2, 0xe493f4b6,
+ 0x1068bf07, 0xe48708fc, 0x1053264c, 0xe47a2e34,
+ 0x103d837f, 0xe46d6467, 0x1027d6ae, 0xe460ab9b,
+ 0x10121fe5, 0xe45403da, 0x0ffc5f33, 0xe4476d2a,
+ 0x0fe694a4, 0xe43ae794, 0x0fd0c046, 0xe42e731f,
+ 0x0fbae227, 0xe4220fd3, 0x0fa4fa54, 0xe415bdb8,
+ 0x0f8f08da, 0xe4097cd5, 0x0f790dc8, 0xe3fd4d31,
+ 0x0f63092a, 0xe3f12ed5, 0x0f4cfb0e, 0xe3e521c7,
+ 0x0f36e382, 0xe3d92610, 0x0f20c294, 0xe3cd3bb6,
+ 0x0f0a9851, 0xe3c162c1, 0x0ef464c6, 0xe3b59b38,
+ 0x0ede2802, 0xe3a9e523, 0x0ec7e212, 0xe39e4089,
+ 0x0eb19304, 0xe392ad70, 0x0e9b3ae5, 0xe3872be0,
+ 0x0e84d9c5, 0xe37bbbe1, 0x0e6e6faf, 0xe3705d78,
+ 0x0e57fcb2, 0xe36510ae, 0x0e4180dd, 0xe359d589,
+ 0x0e2afc3c, 0xe34eac10, 0x0e146ede, 0xe343944a,
+ 0x0dfdd8d0, 0xe3388e3e, 0x0de73a21, 0xe32d99f2,
+ 0x0dd092df, 0xe322b76e, 0x0db9e317, 0xe317e6b7,
+ 0x0da32ad7, 0xe30d27d6, 0x0d8c6a2e, 0xe3027ad0,
+ 0x0d75a129, 0xe2f7dfac, 0x0d5ecfd7, 0xe2ed5670,
+ 0x0d47f646, 0xe2e2df24, 0x0d311483, 0xe2d879cd,
+ 0x0d1a2a9e, 0xe2ce2671, 0x0d0338a3, 0xe2c3e518,
+ 0x0cec3ea1, 0xe2b9b5c8, 0x0cd53ca7, 0xe2af9886,
+ 0x0cbe32c2, 0xe2a58d5a, 0x0ca72101, 0xe29b9449,
+ 0x0c900771, 0xe291ad59, 0x0c78e622, 0xe287d891,
+ 0x0c61bd22, 0xe27e15f6, 0x0c4a8c7e, 0xe274658f,
+ 0x0c335445, 0xe26ac762, 0x0c1c1486, 0xe2613b74,
+ 0x0c04cd4e, 0xe257c1cb, 0x0bed7ead, 0xe24e5a6e,
+ 0x0bd628af, 0xe2450562, 0x0bbecb65, 0xe23bc2ad,
+ 0x0ba766dc, 0xe2329254, 0x0b8ffb23, 0xe229745e,
+ 0x0b788848, 0xe22068cf, 0x0b610e59, 0xe2176fae,
+ 0x0b498d65, 0xe20e8900, 0x0b32057b, 0xe205b4ca,
+ 0x0b1a76aa, 0xe1fcf312, 0x0b02e0fe, 0xe1f443dd,
+ 0x0aeb4488, 0xe1eba731, 0x0ad3a156, 0xe1e31d13,
+ 0x0abbf776, 0xe1daa588, 0x0aa446f7, 0xe1d24096,
+ 0x0a8c8fe7, 0xe1c9ee41, 0x0a74d256, 0xe1c1ae8f,
+ 0x0a5d0e51, 0xe1b98185, 0x0a4543e8, 0xe1b16728,
+ 0x0a2d7329, 0xe1a95f7c, 0x0a159c23, 0xe1a16a88,
+ 0x09fdbee5, 0xe199884f, 0x09e5db7c, 0xe191b8d7,
+ 0x09cdf1f9, 0xe189fc24, 0x09b60269, 0xe182523c,
+ 0x099e0cdc, 0xe17abb22, 0x09861160, 0xe17336dc,
+ 0x096e1005, 0xe16bc56e, 0x095608d8, 0xe16466dd,
+ 0x093dfbe8, 0xe15d1b2e, 0x0925e946, 0xe155e264,
+ 0x090dd0ff, 0xe14ebc85, 0x08f5b322, 0xe147a994,
+ 0x08dd8fbe, 0xe140a997, 0x08c566e2, 0xe139bc91,
+ 0x08ad389d, 0xe132e287, 0x089504fe, 0xe12c1b7c,
+ 0x087ccc14, 0xe1256776, 0x08648ded, 0xe11ec678,
+ 0x084c4a99, 0xe1183887, 0x08340227, 0xe111bda5,
+ 0x081bb4a5, 0xe10b55d8, 0x08036223, 0xe1050124,
+ 0x07eb0ab0, 0xe0febf8c, 0x07d2ae5a, 0xe0f89113,
+ 0x07ba4d31, 0xe0f275bf, 0x07a1e743, 0xe0ec6d92,
+ 0x07897ca0, 0xe0e67891, 0x07710d57, 0xe0e096bf,
+ 0x07589977, 0xe0dac81f, 0x0740210f, 0xe0d50cb6,
+ 0x0727a42e, 0xe0cf6487, 0x070f22e3, 0xe0c9cf95,
+ 0x06f69d3d, 0xe0c44de3, 0x06de134c, 0xe0bedf76,
+ 0x06c5851e, 0xe0b98450, 0x06acf2c3, 0xe0b43c75,
+ 0x06945c4a, 0xe0af07e8, 0x067bc1c2, 0xe0a9e6ad,
+ 0x0663233a, 0xe0a4d8c6, 0x064a80c1, 0xe09fde36,
+ 0x0631da67, 0xe09af701, 0x0619303a, 0xe096232a,
+ 0x0600824b, 0xe09162b3, 0x05e7d0a8, 0xe08cb5a0,
+ 0x05cf1b60, 0xe0881bf3, 0x05b66283, 0xe08395af,
+ 0x059da620, 0xe07f22d8, 0x0584e646, 0xe07ac36f,
+ 0x056c2304, 0xe0767778, 0x05535c6b, 0xe0723ef5,
+ 0x053a9288, 0xe06e19e9, 0x0521c56b, 0xe06a0856,
+ 0x0508f525, 0xe0660a3f, 0x04f021c3, 0xe0621fa7,
+ 0x04d74b55, 0xe05e488f, 0x04be71eb, 0xe05a84fa,
+ 0x04a59593, 0xe056d4ea, 0x048cb65e, 0xe0533862,
+ 0x0473d45b, 0xe04faf64, 0x045aef98, 0xe04c39f2,
+ 0x04420825, 0xe048d80e, 0x04291e13, 0xe04589bb,
+ 0x0410316f, 0xe0424efa, 0x03f74249, 0xe03f27cd,
+ 0x03de50b2, 0xe03c1437, 0x03c55cb7, 0xe0391439,
+ 0x03ac6669, 0xe03627d4, 0x03936dd7, 0xe0334f0c,
+ 0x037a7310, 0xe03089e1, 0x03617624, 0xe02dd855,
+ 0x03487722, 0xe02b3a6b, 0x032f7619, 0xe028b023,
+ 0x0316731a, 0xe026397f, 0x02fd6e33, 0xe023d681,
+ 0x02e46774, 0xe0218729, 0x02cb5eec, 0xe01f4b7b,
+ 0x02b254ab, 0xe01d2376, 0x029948c0, 0xe01b0f1d,
+ 0x02803b3a, 0xe0190e70, 0x02672c2a, 0xe0172171,
+ 0x024e1b9e, 0xe0154821, 0x023509a6, 0xe0138281,
+ 0x021bf652, 0xe011d092, 0x0202e1b0, 0xe0103256,
+ 0x01e9cbd1, 0xe00ea7cc, 0x01d0b4c4, 0xe00d30f7,
+ 0x01b79c98, 0xe00bcdd7, 0x019e835d, 0xe00a7e6d,
+ 0x01856923, 0xe00942ba, 0x016c4df8, 0xe0081abe,
+ 0x015331ec, 0xe007067a, 0x013a150f, 0xe00605f0,
+ 0x0120f771, 0xe005191f, 0x0107d920, 0xe0044008,
+ 0x00eeba2c, 0xe0037aab, 0x00d59aa6, 0xe002c90a,
+ 0x00bc7a9b, 0xe0022b24, 0x00a35a1c, 0xe001a0fa,
+ 0x008a3938, 0xe0012a8c, 0x00711800, 0xe000c7db,
+ 0x0057f681, 0xe00078e7, 0x003ed4cc, 0xe0003daf,
+ 0x0025b2f0, 0xe0001635, 0x000c90fd, 0xe0000278,
+};
+
+static ogg_int16_t bitrevlook_4096[1024]={
+ 0x07fe, 0x0000, 0x03fe, 0x0400,
+ 0x05fe, 0x0200, 0x01fe, 0x0600,
+ 0x06fe, 0x0100, 0x02fe, 0x0500,
+ 0x04fe, 0x0300, 0x00fe, 0x0700,
+ 0x077e, 0x0080, 0x037e, 0x0480,
+ 0x057e, 0x0280, 0x017e, 0x0680,
+ 0x067e, 0x0180, 0x027e, 0x0580,
+ 0x047e, 0x0380, 0x007e, 0x0780,
+ 0x07be, 0x0040, 0x03be, 0x0440,
+ 0x05be, 0x0240, 0x01be, 0x0640,
+ 0x06be, 0x0140, 0x02be, 0x0540,
+ 0x04be, 0x0340, 0x00be, 0x0740,
+ 0x073e, 0x00c0, 0x033e, 0x04c0,
+ 0x053e, 0x02c0, 0x013e, 0x06c0,
+ 0x063e, 0x01c0, 0x023e, 0x05c0,
+ 0x043e, 0x03c0, 0x003e, 0x07c0,
+ 0x07de, 0x0020, 0x03de, 0x0420,
+ 0x05de, 0x0220, 0x01de, 0x0620,
+ 0x06de, 0x0120, 0x02de, 0x0520,
+ 0x04de, 0x0320, 0x00de, 0x0720,
+ 0x075e, 0x00a0, 0x035e, 0x04a0,
+ 0x055e, 0x02a0, 0x015e, 0x06a0,
+ 0x065e, 0x01a0, 0x025e, 0x05a0,
+ 0x045e, 0x03a0, 0x005e, 0x07a0,
+ 0x079e, 0x0060, 0x039e, 0x0460,
+ 0x059e, 0x0260, 0x019e, 0x0660,
+ 0x069e, 0x0160, 0x029e, 0x0560,
+ 0x049e, 0x0360, 0x009e, 0x0760,
+ 0x071e, 0x00e0, 0x031e, 0x04e0,
+ 0x051e, 0x02e0, 0x011e, 0x06e0,
+ 0x061e, 0x01e0, 0x021e, 0x05e0,
+ 0x041e, 0x03e0, 0x001e, 0x07e0,
+ 0x07ee, 0x0010, 0x03ee, 0x0410,
+ 0x05ee, 0x0210, 0x01ee, 0x0610,
+ 0x06ee, 0x0110, 0x02ee, 0x0510,
+ 0x04ee, 0x0310, 0x00ee, 0x0710,
+ 0x076e, 0x0090, 0x036e, 0x0490,
+ 0x056e, 0x0290, 0x016e, 0x0690,
+ 0x066e, 0x0190, 0x026e, 0x0590,
+ 0x046e, 0x0390, 0x006e, 0x0790,
+ 0x07ae, 0x0050, 0x03ae, 0x0450,
+ 0x05ae, 0x0250, 0x01ae, 0x0650,
+ 0x06ae, 0x0150, 0x02ae, 0x0550,
+ 0x04ae, 0x0350, 0x00ae, 0x0750,
+ 0x072e, 0x00d0, 0x032e, 0x04d0,
+ 0x052e, 0x02d0, 0x012e, 0x06d0,
+ 0x062e, 0x01d0, 0x022e, 0x05d0,
+ 0x042e, 0x03d0, 0x002e, 0x07d0,
+ 0x07ce, 0x0030, 0x03ce, 0x0430,
+ 0x05ce, 0x0230, 0x01ce, 0x0630,
+ 0x06ce, 0x0130, 0x02ce, 0x0530,
+ 0x04ce, 0x0330, 0x00ce, 0x0730,
+ 0x074e, 0x00b0, 0x034e, 0x04b0,
+ 0x054e, 0x02b0, 0x014e, 0x06b0,
+ 0x064e, 0x01b0, 0x024e, 0x05b0,
+ 0x044e, 0x03b0, 0x004e, 0x07b0,
+ 0x078e, 0x0070, 0x038e, 0x0470,
+ 0x058e, 0x0270, 0x018e, 0x0670,
+ 0x068e, 0x0170, 0x028e, 0x0570,
+ 0x048e, 0x0370, 0x008e, 0x0770,
+ 0x070e, 0x00f0, 0x030e, 0x04f0,
+ 0x050e, 0x02f0, 0x010e, 0x06f0,
+ 0x060e, 0x01f0, 0x020e, 0x05f0,
+ 0x040e, 0x03f0, 0x000e, 0x07f0,
+ 0x07f6, 0x0008, 0x03f6, 0x0408,
+ 0x05f6, 0x0208, 0x01f6, 0x0608,
+ 0x06f6, 0x0108, 0x02f6, 0x0508,
+ 0x04f6, 0x0308, 0x00f6, 0x0708,
+ 0x0776, 0x0088, 0x0376, 0x0488,
+ 0x0576, 0x0288, 0x0176, 0x0688,
+ 0x0676, 0x0188, 0x0276, 0x0588,
+ 0x0476, 0x0388, 0x0076, 0x0788,
+ 0x07b6, 0x0048, 0x03b6, 0x0448,
+ 0x05b6, 0x0248, 0x01b6, 0x0648,
+ 0x06b6, 0x0148, 0x02b6, 0x0548,
+ 0x04b6, 0x0348, 0x00b6, 0x0748,
+ 0x0736, 0x00c8, 0x0336, 0x04c8,
+ 0x0536, 0x02c8, 0x0136, 0x06c8,
+ 0x0636, 0x01c8, 0x0236, 0x05c8,
+ 0x0436, 0x03c8, 0x0036, 0x07c8,
+ 0x07d6, 0x0028, 0x03d6, 0x0428,
+ 0x05d6, 0x0228, 0x01d6, 0x0628,
+ 0x06d6, 0x0128, 0x02d6, 0x0528,
+ 0x04d6, 0x0328, 0x00d6, 0x0728,
+ 0x0756, 0x00a8, 0x0356, 0x04a8,
+ 0x0556, 0x02a8, 0x0156, 0x06a8,
+ 0x0656, 0x01a8, 0x0256, 0x05a8,
+ 0x0456, 0x03a8, 0x0056, 0x07a8,
+ 0x0796, 0x0068, 0x0396, 0x0468,
+ 0x0596, 0x0268, 0x0196, 0x0668,
+ 0x0696, 0x0168, 0x0296, 0x0568,
+ 0x0496, 0x0368, 0x0096, 0x0768,
+ 0x0716, 0x00e8, 0x0316, 0x04e8,
+ 0x0516, 0x02e8, 0x0116, 0x06e8,
+ 0x0616, 0x01e8, 0x0216, 0x05e8,
+ 0x0416, 0x03e8, 0x0016, 0x07e8,
+ 0x07e6, 0x0018, 0x03e6, 0x0418,
+ 0x05e6, 0x0218, 0x01e6, 0x0618,
+ 0x06e6, 0x0118, 0x02e6, 0x0518,
+ 0x04e6, 0x0318, 0x00e6, 0x0718,
+ 0x0766, 0x0098, 0x0366, 0x0498,
+ 0x0566, 0x0298, 0x0166, 0x0698,
+ 0x0666, 0x0198, 0x0266, 0x0598,
+ 0x0466, 0x0398, 0x0066, 0x0798,
+ 0x07a6, 0x0058, 0x03a6, 0x0458,
+ 0x05a6, 0x0258, 0x01a6, 0x0658,
+ 0x06a6, 0x0158, 0x02a6, 0x0558,
+ 0x04a6, 0x0358, 0x00a6, 0x0758,
+ 0x0726, 0x00d8, 0x0326, 0x04d8,
+ 0x0526, 0x02d8, 0x0126, 0x06d8,
+ 0x0626, 0x01d8, 0x0226, 0x05d8,
+ 0x0426, 0x03d8, 0x0026, 0x07d8,
+ 0x07c6, 0x0038, 0x03c6, 0x0438,
+ 0x05c6, 0x0238, 0x01c6, 0x0638,
+ 0x06c6, 0x0138, 0x02c6, 0x0538,
+ 0x04c6, 0x0338, 0x00c6, 0x0738,
+ 0x0746, 0x00b8, 0x0346, 0x04b8,
+ 0x0546, 0x02b8, 0x0146, 0x06b8,
+ 0x0646, 0x01b8, 0x0246, 0x05b8,
+ 0x0446, 0x03b8, 0x0046, 0x07b8,
+ 0x0786, 0x0078, 0x0386, 0x0478,
+ 0x0586, 0x0278, 0x0186, 0x0678,
+ 0x0686, 0x0178, 0x0286, 0x0578,
+ 0x0486, 0x0378, 0x0086, 0x0778,
+ 0x0706, 0x00f8, 0x0306, 0x04f8,
+ 0x0506, 0x02f8, 0x0106, 0x06f8,
+ 0x0606, 0x01f8, 0x0206, 0x05f8,
+ 0x0406, 0x03f8, 0x0006, 0x07f8,
+ 0x07fa, 0x0004, 0x03fa, 0x0404,
+ 0x05fa, 0x0204, 0x01fa, 0x0604,
+ 0x06fa, 0x0104, 0x02fa, 0x0504,
+ 0x04fa, 0x0304, 0x00fa, 0x0704,
+ 0x077a, 0x0084, 0x037a, 0x0484,
+ 0x057a, 0x0284, 0x017a, 0x0684,
+ 0x067a, 0x0184, 0x027a, 0x0584,
+ 0x047a, 0x0384, 0x007a, 0x0784,
+ 0x07ba, 0x0044, 0x03ba, 0x0444,
+ 0x05ba, 0x0244, 0x01ba, 0x0644,
+ 0x06ba, 0x0144, 0x02ba, 0x0544,
+ 0x04ba, 0x0344, 0x00ba, 0x0744,
+ 0x073a, 0x00c4, 0x033a, 0x04c4,
+ 0x053a, 0x02c4, 0x013a, 0x06c4,
+ 0x063a, 0x01c4, 0x023a, 0x05c4,
+ 0x043a, 0x03c4, 0x003a, 0x07c4,
+ 0x07da, 0x0024, 0x03da, 0x0424,
+ 0x05da, 0x0224, 0x01da, 0x0624,
+ 0x06da, 0x0124, 0x02da, 0x0524,
+ 0x04da, 0x0324, 0x00da, 0x0724,
+ 0x075a, 0x00a4, 0x035a, 0x04a4,
+ 0x055a, 0x02a4, 0x015a, 0x06a4,
+ 0x065a, 0x01a4, 0x025a, 0x05a4,
+ 0x045a, 0x03a4, 0x005a, 0x07a4,
+ 0x079a, 0x0064, 0x039a, 0x0464,
+ 0x059a, 0x0264, 0x019a, 0x0664,
+ 0x069a, 0x0164, 0x029a, 0x0564,
+ 0x049a, 0x0364, 0x009a, 0x0764,
+ 0x071a, 0x00e4, 0x031a, 0x04e4,
+ 0x051a, 0x02e4, 0x011a, 0x06e4,
+ 0x061a, 0x01e4, 0x021a, 0x05e4,
+ 0x041a, 0x03e4, 0x001a, 0x07e4,
+ 0x07ea, 0x0014, 0x03ea, 0x0414,
+ 0x05ea, 0x0214, 0x01ea, 0x0614,
+ 0x06ea, 0x0114, 0x02ea, 0x0514,
+ 0x04ea, 0x0314, 0x00ea, 0x0714,
+ 0x076a, 0x0094, 0x036a, 0x0494,
+ 0x056a, 0x0294, 0x016a, 0x0694,
+ 0x066a, 0x0194, 0x026a, 0x0594,
+ 0x046a, 0x0394, 0x006a, 0x0794,
+ 0x07aa, 0x0054, 0x03aa, 0x0454,
+ 0x05aa, 0x0254, 0x01aa, 0x0654,
+ 0x06aa, 0x0154, 0x02aa, 0x0554,
+ 0x04aa, 0x0354, 0x00aa, 0x0754,
+ 0x072a, 0x00d4, 0x032a, 0x04d4,
+ 0x052a, 0x02d4, 0x012a, 0x06d4,
+ 0x062a, 0x01d4, 0x022a, 0x05d4,
+ 0x042a, 0x03d4, 0x002a, 0x07d4,
+ 0x07ca, 0x0034, 0x03ca, 0x0434,
+ 0x05ca, 0x0234, 0x01ca, 0x0634,
+ 0x06ca, 0x0134, 0x02ca, 0x0534,
+ 0x04ca, 0x0334, 0x00ca, 0x0734,
+ 0x074a, 0x00b4, 0x034a, 0x04b4,
+ 0x054a, 0x02b4, 0x014a, 0x06b4,
+ 0x064a, 0x01b4, 0x024a, 0x05b4,
+ 0x044a, 0x03b4, 0x004a, 0x07b4,
+ 0x078a, 0x0074, 0x038a, 0x0474,
+ 0x058a, 0x0274, 0x018a, 0x0674,
+ 0x068a, 0x0174, 0x028a, 0x0574,
+ 0x048a, 0x0374, 0x008a, 0x0774,
+ 0x070a, 0x00f4, 0x030a, 0x04f4,
+ 0x050a, 0x02f4, 0x010a, 0x06f4,
+ 0x060a, 0x01f4, 0x020a, 0x05f4,
+ 0x040a, 0x03f4, 0x000a, 0x07f4,
+ 0x07f2, 0x000c, 0x03f2, 0x040c,
+ 0x05f2, 0x020c, 0x01f2, 0x060c,
+ 0x06f2, 0x010c, 0x02f2, 0x050c,
+ 0x04f2, 0x030c, 0x00f2, 0x070c,
+ 0x0772, 0x008c, 0x0372, 0x048c,
+ 0x0572, 0x028c, 0x0172, 0x068c,
+ 0x0672, 0x018c, 0x0272, 0x058c,
+ 0x0472, 0x038c, 0x0072, 0x078c,
+ 0x07b2, 0x004c, 0x03b2, 0x044c,
+ 0x05b2, 0x024c, 0x01b2, 0x064c,
+ 0x06b2, 0x014c, 0x02b2, 0x054c,
+ 0x04b2, 0x034c, 0x00b2, 0x074c,
+ 0x0732, 0x00cc, 0x0332, 0x04cc,
+ 0x0532, 0x02cc, 0x0132, 0x06cc,
+ 0x0632, 0x01cc, 0x0232, 0x05cc,
+ 0x0432, 0x03cc, 0x0032, 0x07cc,
+ 0x07d2, 0x002c, 0x03d2, 0x042c,
+ 0x05d2, 0x022c, 0x01d2, 0x062c,
+ 0x06d2, 0x012c, 0x02d2, 0x052c,
+ 0x04d2, 0x032c, 0x00d2, 0x072c,
+ 0x0752, 0x00ac, 0x0352, 0x04ac,
+ 0x0552, 0x02ac, 0x0152, 0x06ac,
+ 0x0652, 0x01ac, 0x0252, 0x05ac,
+ 0x0452, 0x03ac, 0x0052, 0x07ac,
+ 0x0792, 0x006c, 0x0392, 0x046c,
+ 0x0592, 0x026c, 0x0192, 0x066c,
+ 0x0692, 0x016c, 0x0292, 0x056c,
+ 0x0492, 0x036c, 0x0092, 0x076c,
+ 0x0712, 0x00ec, 0x0312, 0x04ec,
+ 0x0512, 0x02ec, 0x0112, 0x06ec,
+ 0x0612, 0x01ec, 0x0212, 0x05ec,
+ 0x0412, 0x03ec, 0x0012, 0x07ec,
+ 0x07e2, 0x001c, 0x03e2, 0x041c,
+ 0x05e2, 0x021c, 0x01e2, 0x061c,
+ 0x06e2, 0x011c, 0x02e2, 0x051c,
+ 0x04e2, 0x031c, 0x00e2, 0x071c,
+ 0x0762, 0x009c, 0x0362, 0x049c,
+ 0x0562, 0x029c, 0x0162, 0x069c,
+ 0x0662, 0x019c, 0x0262, 0x059c,
+ 0x0462, 0x039c, 0x0062, 0x079c,
+ 0x07a2, 0x005c, 0x03a2, 0x045c,
+ 0x05a2, 0x025c, 0x01a2, 0x065c,
+ 0x06a2, 0x015c, 0x02a2, 0x055c,
+ 0x04a2, 0x035c, 0x00a2, 0x075c,
+ 0x0722, 0x00dc, 0x0322, 0x04dc,
+ 0x0522, 0x02dc, 0x0122, 0x06dc,
+ 0x0622, 0x01dc, 0x0222, 0x05dc,
+ 0x0422, 0x03dc, 0x0022, 0x07dc,
+ 0x07c2, 0x003c, 0x03c2, 0x043c,
+ 0x05c2, 0x023c, 0x01c2, 0x063c,
+ 0x06c2, 0x013c, 0x02c2, 0x053c,
+ 0x04c2, 0x033c, 0x00c2, 0x073c,
+ 0x0742, 0x00bc, 0x0342, 0x04bc,
+ 0x0542, 0x02bc, 0x0142, 0x06bc,
+ 0x0642, 0x01bc, 0x0242, 0x05bc,
+ 0x0442, 0x03bc, 0x0042, 0x07bc,
+ 0x0782, 0x007c, 0x0382, 0x047c,
+ 0x0582, 0x027c, 0x0182, 0x067c,
+ 0x0682, 0x017c, 0x0282, 0x057c,
+ 0x0482, 0x037c, 0x0082, 0x077c,
+ 0x0702, 0x00fc, 0x0302, 0x04fc,
+ 0x0502, 0x02fc, 0x0102, 0x06fc,
+ 0x0602, 0x01fc, 0x0202, 0x05fc,
+ 0x0402, 0x03fc, 0x0002, 0x07fc,
+};
+
+static ogg_int32_t triglook_8192[10240]={
+ 0x40000000, 0x00000000, 0x3ffffb11, 0xffe6de05,
+ 0x3fffec43, 0xffcdbc0f, 0x3fffd396, 0xffb49a1f,
+ 0x3fffb10b, 0xff9b783c, 0x3fff84a1, 0xff825668,
+ 0x3fff4e59, 0xff6934a8, 0x3fff0e32, 0xff5012fe,
+ 0x3ffec42d, 0xff36f170, 0x3ffe704a, 0xff1dd001,
+ 0x3ffe1288, 0xff04aeb5, 0x3ffdaae7, 0xfeeb8d8f,
+ 0x3ffd3969, 0xfed26c94, 0x3ffcbe0c, 0xfeb94bc8,
+ 0x3ffc38d1, 0xfea02b2e, 0x3ffba9b8, 0xfe870aca,
+ 0x3ffb10c1, 0xfe6deaa1, 0x3ffa6dec, 0xfe54cab5,
+ 0x3ff9c13a, 0xfe3bab0b, 0x3ff90aaa, 0xfe228ba7,
+ 0x3ff84a3c, 0xfe096c8d, 0x3ff77ff1, 0xfdf04dc0,
+ 0x3ff6abc8, 0xfdd72f45, 0x3ff5cdc3, 0xfdbe111e,
+ 0x3ff4e5e0, 0xfda4f351, 0x3ff3f420, 0xfd8bd5e1,
+ 0x3ff2f884, 0xfd72b8d2, 0x3ff1f30b, 0xfd599c28,
+ 0x3ff0e3b6, 0xfd407fe6, 0x3fefca84, 0xfd276410,
+ 0x3feea776, 0xfd0e48ab, 0x3fed7a8c, 0xfcf52dbb,
+ 0x3fec43c7, 0xfcdc1342, 0x3feb0326, 0xfcc2f945,
+ 0x3fe9b8a9, 0xfca9dfc8, 0x3fe86452, 0xfc90c6cf,
+ 0x3fe7061f, 0xfc77ae5e, 0x3fe59e12, 0xfc5e9678,
+ 0x3fe42c2a, 0xfc457f21, 0x3fe2b067, 0xfc2c685d,
+ 0x3fe12acb, 0xfc135231, 0x3fdf9b55, 0xfbfa3c9f,
+ 0x3fde0205, 0xfbe127ac, 0x3fdc5edc, 0xfbc8135c,
+ 0x3fdab1d9, 0xfbaeffb3, 0x3fd8fafe, 0xfb95ecb4,
+ 0x3fd73a4a, 0xfb7cda63, 0x3fd56fbe, 0xfb63c8c4,
+ 0x3fd39b5a, 0xfb4ab7db, 0x3fd1bd1e, 0xfb31a7ac,
+ 0x3fcfd50b, 0xfb18983b, 0x3fcde320, 0xfaff898c,
+ 0x3fcbe75e, 0xfae67ba2, 0x3fc9e1c6, 0xfacd6e81,
+ 0x3fc7d258, 0xfab4622d, 0x3fc5b913, 0xfa9b56ab,
+ 0x3fc395f9, 0xfa824bfd, 0x3fc1690a, 0xfa694229,
+ 0x3fbf3246, 0xfa503930, 0x3fbcf1ad, 0xfa373119,
+ 0x3fbaa740, 0xfa1e29e5, 0x3fb852ff, 0xfa05239a,
+ 0x3fb5f4ea, 0xf9ec1e3b, 0x3fb38d02, 0xf9d319cc,
+ 0x3fb11b48, 0xf9ba1651, 0x3fae9fbb, 0xf9a113cd,
+ 0x3fac1a5b, 0xf9881245, 0x3fa98b2a, 0xf96f11bc,
+ 0x3fa6f228, 0xf9561237, 0x3fa44f55, 0xf93d13b8,
+ 0x3fa1a2b2, 0xf9241645, 0x3f9eec3e, 0xf90b19e0,
+ 0x3f9c2bfb, 0xf8f21e8e, 0x3f9961e8, 0xf8d92452,
+ 0x3f968e07, 0xf8c02b31, 0x3f93b058, 0xf8a7332e,
+ 0x3f90c8da, 0xf88e3c4d, 0x3f8dd78f, 0xf8754692,
+ 0x3f8adc77, 0xf85c5201, 0x3f87d792, 0xf8435e9d,
+ 0x3f84c8e2, 0xf82a6c6a, 0x3f81b065, 0xf8117b6d,
+ 0x3f7e8e1e, 0xf7f88ba9, 0x3f7b620c, 0xf7df9d22,
+ 0x3f782c30, 0xf7c6afdc, 0x3f74ec8a, 0xf7adc3db,
+ 0x3f71a31b, 0xf794d922, 0x3f6e4fe3, 0xf77befb5,
+ 0x3f6af2e3, 0xf7630799, 0x3f678c1c, 0xf74a20d0,
+ 0x3f641b8d, 0xf7313b60, 0x3f60a138, 0xf718574b,
+ 0x3f5d1d1d, 0xf6ff7496, 0x3f598f3c, 0xf6e69344,
+ 0x3f55f796, 0xf6cdb359, 0x3f52562c, 0xf6b4d4d9,
+ 0x3f4eaafe, 0xf69bf7c9, 0x3f4af60d, 0xf6831c2b,
+ 0x3f473759, 0xf66a4203, 0x3f436ee3, 0xf6516956,
+ 0x3f3f9cab, 0xf6389228, 0x3f3bc0b3, 0xf61fbc7b,
+ 0x3f37dafa, 0xf606e854, 0x3f33eb81, 0xf5ee15b7,
+ 0x3f2ff24a, 0xf5d544a7, 0x3f2bef53, 0xf5bc7529,
+ 0x3f27e29f, 0xf5a3a740, 0x3f23cc2e, 0xf58adaf0,
+ 0x3f1fabff, 0xf572103d, 0x3f1b8215, 0xf559472b,
+ 0x3f174e70, 0xf5407fbd, 0x3f13110f, 0xf527b9f7,
+ 0x3f0ec9f5, 0xf50ef5de, 0x3f0a7921, 0xf4f63374,
+ 0x3f061e95, 0xf4dd72be, 0x3f01ba50, 0xf4c4b3c0,
+ 0x3efd4c54, 0xf4abf67e, 0x3ef8d4a1, 0xf4933afa,
+ 0x3ef45338, 0xf47a8139, 0x3eefc81a, 0xf461c940,
+ 0x3eeb3347, 0xf4491311, 0x3ee694c1, 0xf4305eb0,
+ 0x3ee1ec87, 0xf417ac22, 0x3edd3a9a, 0xf3fefb6a,
+ 0x3ed87efc, 0xf3e64c8c, 0x3ed3b9ad, 0xf3cd9f8b,
+ 0x3eceeaad, 0xf3b4f46c, 0x3eca11fe, 0xf39c4b32,
+ 0x3ec52fa0, 0xf383a3e2, 0x3ec04394, 0xf36afe7e,
+ 0x3ebb4ddb, 0xf3525b0b, 0x3eb64e75, 0xf339b98d,
+ 0x3eb14563, 0xf3211a07, 0x3eac32a6, 0xf3087c7d,
+ 0x3ea7163f, 0xf2efe0f2, 0x3ea1f02f, 0xf2d7476c,
+ 0x3e9cc076, 0xf2beafed, 0x3e978715, 0xf2a61a7a,
+ 0x3e92440d, 0xf28d8715, 0x3e8cf75f, 0xf274f5c3,
+ 0x3e87a10c, 0xf25c6688, 0x3e824114, 0xf243d968,
+ 0x3e7cd778, 0xf22b4e66, 0x3e77643a, 0xf212c585,
+ 0x3e71e759, 0xf1fa3ecb, 0x3e6c60d7, 0xf1e1ba3a,
+ 0x3e66d0b4, 0xf1c937d6, 0x3e6136f3, 0xf1b0b7a4,
+ 0x3e5b9392, 0xf19839a6, 0x3e55e694, 0xf17fbde2,
+ 0x3e502ff9, 0xf1674459, 0x3e4a6fc1, 0xf14ecd11,
+ 0x3e44a5ef, 0xf136580d, 0x3e3ed282, 0xf11de551,
+ 0x3e38f57c, 0xf10574e0, 0x3e330ede, 0xf0ed06bf,
+ 0x3e2d1ea8, 0xf0d49af1, 0x3e2724db, 0xf0bc317a,
+ 0x3e212179, 0xf0a3ca5d, 0x3e1b1482, 0xf08b659f,
+ 0x3e14fdf7, 0xf0730342, 0x3e0eddd9, 0xf05aa34c,
+ 0x3e08b42a, 0xf04245c0, 0x3e0280e9, 0xf029eaa1,
+ 0x3dfc4418, 0xf01191f3, 0x3df5fdb8, 0xeff93bba,
+ 0x3defadca, 0xefe0e7f9, 0x3de9544f, 0xefc896b5,
+ 0x3de2f148, 0xefb047f2, 0x3ddc84b5, 0xef97fbb2,
+ 0x3dd60e99, 0xef7fb1fa, 0x3dcf8ef3, 0xef676ace,
+ 0x3dc905c5, 0xef4f2630, 0x3dc2730f, 0xef36e426,
+ 0x3dbbd6d4, 0xef1ea4b2, 0x3db53113, 0xef0667d9,
+ 0x3dae81cf, 0xeeee2d9d, 0x3da7c907, 0xeed5f604,
+ 0x3da106bd, 0xeebdc110, 0x3d9a3af2, 0xeea58ec6,
+ 0x3d9365a8, 0xee8d5f29, 0x3d8c86de, 0xee75323c,
+ 0x3d859e96, 0xee5d0804, 0x3d7eacd2, 0xee44e084,
+ 0x3d77b192, 0xee2cbbc1, 0x3d70acd7, 0xee1499bd,
+ 0x3d699ea3, 0xedfc7a7c, 0x3d6286f6, 0xede45e03,
+ 0x3d5b65d2, 0xedcc4454, 0x3d543b37, 0xedb42d74,
+ 0x3d4d0728, 0xed9c1967, 0x3d45c9a4, 0xed84082f,
+ 0x3d3e82ae, 0xed6bf9d1, 0x3d373245, 0xed53ee51,
+ 0x3d2fd86c, 0xed3be5b1, 0x3d287523, 0xed23dff7,
+ 0x3d21086c, 0xed0bdd25, 0x3d199248, 0xecf3dd3f,
+ 0x3d1212b7, 0xecdbe04a, 0x3d0a89bc, 0xecc3e648,
+ 0x3d02f757, 0xecabef3d, 0x3cfb5b89, 0xec93fb2e,
+ 0x3cf3b653, 0xec7c0a1d, 0x3cec07b8, 0xec641c0e,
+ 0x3ce44fb7, 0xec4c3106, 0x3cdc8e52, 0xec344908,
+ 0x3cd4c38b, 0xec1c6417, 0x3cccef62, 0xec048237,
+ 0x3cc511d9, 0xebeca36c, 0x3cbd2af0, 0xebd4c7ba,
+ 0x3cb53aaa, 0xebbcef23, 0x3cad4107, 0xeba519ad,
+ 0x3ca53e09, 0xeb8d475b, 0x3c9d31b0, 0xeb75782f,
+ 0x3c951bff, 0xeb5dac2f, 0x3c8cfcf6, 0xeb45e35d,
+ 0x3c84d496, 0xeb2e1dbe, 0x3c7ca2e2, 0xeb165b54,
+ 0x3c7467d9, 0xeafe9c24, 0x3c6c237e, 0xeae6e031,
+ 0x3c63d5d1, 0xeacf277f, 0x3c5b7ed4, 0xeab77212,
+ 0x3c531e88, 0xea9fbfed, 0x3c4ab4ef, 0xea881114,
+ 0x3c42420a, 0xea70658a, 0x3c39c5da, 0xea58bd54,
+ 0x3c314060, 0xea411874, 0x3c28b19e, 0xea2976ef,
+ 0x3c201994, 0xea11d8c8, 0x3c177845, 0xe9fa3e03,
+ 0x3c0ecdb2, 0xe9e2a6a3, 0x3c0619dc, 0xe9cb12ad,
+ 0x3bfd5cc4, 0xe9b38223, 0x3bf4966c, 0xe99bf509,
+ 0x3bebc6d5, 0xe9846b63, 0x3be2ee01, 0xe96ce535,
+ 0x3bda0bf0, 0xe9556282, 0x3bd120a4, 0xe93de34e,
+ 0x3bc82c1f, 0xe926679c, 0x3bbf2e62, 0xe90eef71,
+ 0x3bb6276e, 0xe8f77acf, 0x3bad1744, 0xe8e009ba,
+ 0x3ba3fde7, 0xe8c89c37, 0x3b9adb57, 0xe8b13248,
+ 0x3b91af97, 0xe899cbf1, 0x3b887aa6, 0xe8826936,
+ 0x3b7f3c87, 0xe86b0a1a, 0x3b75f53c, 0xe853aea1,
+ 0x3b6ca4c4, 0xe83c56cf, 0x3b634b23, 0xe82502a7,
+ 0x3b59e85a, 0xe80db22d, 0x3b507c69, 0xe7f66564,
+ 0x3b470753, 0xe7df1c50, 0x3b3d8918, 0xe7c7d6f4,
+ 0x3b3401bb, 0xe7b09555, 0x3b2a713d, 0xe7995776,
+ 0x3b20d79e, 0xe7821d59, 0x3b1734e2, 0xe76ae704,
+ 0x3b0d8909, 0xe753b479, 0x3b03d414, 0xe73c85bc,
+ 0x3afa1605, 0xe7255ad1, 0x3af04edf, 0xe70e33bb,
+ 0x3ae67ea1, 0xe6f7107e, 0x3adca54e, 0xe6dff11d,
+ 0x3ad2c2e8, 0xe6c8d59c, 0x3ac8d76f, 0xe6b1bdff,
+ 0x3abee2e5, 0xe69aaa48, 0x3ab4e54c, 0xe6839a7c,
+ 0x3aaadea6, 0xe66c8e9f, 0x3aa0cef3, 0xe65586b3,
+ 0x3a96b636, 0xe63e82bc, 0x3a8c9470, 0xe62782be,
+ 0x3a8269a3, 0xe61086bc, 0x3a7835cf, 0xe5f98ebb,
+ 0x3a6df8f8, 0xe5e29abc, 0x3a63b31d, 0xe5cbaac5,
+ 0x3a596442, 0xe5b4bed8, 0x3a4f0c67, 0xe59dd6f9,
+ 0x3a44ab8e, 0xe586f32c, 0x3a3a41b9, 0xe5701374,
+ 0x3a2fcee8, 0xe55937d5, 0x3a25531f, 0xe5426051,
+ 0x3a1ace5f, 0xe52b8cee, 0x3a1040a8, 0xe514bdad,
+ 0x3a05a9fd, 0xe4fdf294, 0x39fb0a60, 0xe4e72ba4,
+ 0x39f061d2, 0xe4d068e2, 0x39e5b054, 0xe4b9aa52,
+ 0x39daf5e8, 0xe4a2eff6, 0x39d03291, 0xe48c39d3,
+ 0x39c5664f, 0xe47587eb, 0x39ba9125, 0xe45eda43,
+ 0x39afb313, 0xe44830dd, 0x39a4cc1c, 0xe4318bbe,
+ 0x3999dc42, 0xe41aeae8, 0x398ee385, 0xe4044e60,
+ 0x3983e1e8, 0xe3edb628, 0x3978d76c, 0xe3d72245,
+ 0x396dc414, 0xe3c092b9, 0x3962a7e0, 0xe3aa0788,
+ 0x395782d3, 0xe39380b6, 0x394c54ee, 0xe37cfe47,
+ 0x39411e33, 0xe366803c, 0x3935dea4, 0xe350069b,
+ 0x392a9642, 0xe3399167, 0x391f4510, 0xe32320a2,
+ 0x3913eb0e, 0xe30cb451, 0x3908883f, 0xe2f64c77,
+ 0x38fd1ca4, 0xe2dfe917, 0x38f1a840, 0xe2c98a35,
+ 0x38e62b13, 0xe2b32fd4, 0x38daa520, 0xe29cd9f8,
+ 0x38cf1669, 0xe28688a4, 0x38c37eef, 0xe2703bdc,
+ 0x38b7deb4, 0xe259f3a3, 0x38ac35ba, 0xe243affc,
+ 0x38a08402, 0xe22d70eb, 0x3894c98f, 0xe2173674,
+ 0x38890663, 0xe2010099, 0x387d3a7e, 0xe1eacf5f,
+ 0x387165e3, 0xe1d4a2c8, 0x38658894, 0xe1be7ad8,
+ 0x3859a292, 0xe1a85793, 0x384db3e0, 0xe19238fb,
+ 0x3841bc7f, 0xe17c1f15, 0x3835bc71, 0xe16609e3,
+ 0x3829b3b9, 0xe14ff96a, 0x381da256, 0xe139edac,
+ 0x3811884d, 0xe123e6ad, 0x3805659e, 0xe10de470,
+ 0x37f93a4b, 0xe0f7e6f9, 0x37ed0657, 0xe0e1ee4b,
+ 0x37e0c9c3, 0xe0cbfa6a, 0x37d48490, 0xe0b60b58,
+ 0x37c836c2, 0xe0a0211a, 0x37bbe05a, 0xe08a3bb2,
+ 0x37af8159, 0xe0745b24, 0x37a319c2, 0xe05e7f74,
+ 0x3796a996, 0xe048a8a4, 0x378a30d8, 0xe032d6b8,
+ 0x377daf89, 0xe01d09b4, 0x377125ac, 0xe007419b,
+ 0x37649341, 0xdff17e70, 0x3757f84c, 0xdfdbc036,
+ 0x374b54ce, 0xdfc606f1, 0x373ea8ca, 0xdfb052a5,
+ 0x3731f440, 0xdf9aa354, 0x37253733, 0xdf84f902,
+ 0x371871a5, 0xdf6f53b3, 0x370ba398, 0xdf59b369,
+ 0x36fecd0e, 0xdf441828, 0x36f1ee09, 0xdf2e81f3,
+ 0x36e5068a, 0xdf18f0ce, 0x36d81695, 0xdf0364bc,
+ 0x36cb1e2a, 0xdeedddc0, 0x36be1d4c, 0xded85bdd,
+ 0x36b113fd, 0xdec2df18, 0x36a4023f, 0xdead6773,
+ 0x3696e814, 0xde97f4f1, 0x3689c57d, 0xde828796,
+ 0x367c9a7e, 0xde6d1f65, 0x366f6717, 0xde57bc62,
+ 0x36622b4c, 0xde425e8f, 0x3654e71d, 0xde2d05f1,
+ 0x36479a8e, 0xde17b28a, 0x363a45a0, 0xde02645d,
+ 0x362ce855, 0xdded1b6e, 0x361f82af, 0xddd7d7c1,
+ 0x361214b0, 0xddc29958, 0x36049e5b, 0xddad6036,
+ 0x35f71fb1, 0xdd982c60, 0x35e998b5, 0xdd82fdd8,
+ 0x35dc0968, 0xdd6dd4a2, 0x35ce71ce, 0xdd58b0c0,
+ 0x35c0d1e7, 0xdd439236, 0x35b329b5, 0xdd2e7908,
+ 0x35a5793c, 0xdd196538, 0x3597c07d, 0xdd0456ca,
+ 0x3589ff7a, 0xdcef4dc2, 0x357c3636, 0xdcda4a21,
+ 0x356e64b2, 0xdcc54bec, 0x35608af1, 0xdcb05326,
+ 0x3552a8f4, 0xdc9b5fd2, 0x3544bebf, 0xdc8671f3,
+ 0x3536cc52, 0xdc71898d, 0x3528d1b1, 0xdc5ca6a2,
+ 0x351acedd, 0xdc47c936, 0x350cc3d8, 0xdc32f14d,
+ 0x34feb0a5, 0xdc1e1ee9, 0x34f09546, 0xdc09520d,
+ 0x34e271bd, 0xdbf48abd, 0x34d4460c, 0xdbdfc8fc,
+ 0x34c61236, 0xdbcb0cce, 0x34b7d63c, 0xdbb65634,
+ 0x34a99221, 0xdba1a534, 0x349b45e7, 0xdb8cf9cf,
+ 0x348cf190, 0xdb785409, 0x347e951f, 0xdb63b3e5,
+ 0x34703095, 0xdb4f1967, 0x3461c3f5, 0xdb3a8491,
+ 0x34534f41, 0xdb25f566, 0x3444d27b, 0xdb116beb,
+ 0x34364da6, 0xdafce821, 0x3427c0c3, 0xdae86a0d,
+ 0x34192bd5, 0xdad3f1b1, 0x340a8edf, 0xdabf7f11,
+ 0x33fbe9e2, 0xdaab122f, 0x33ed3ce1, 0xda96ab0f,
+ 0x33de87de, 0xda8249b4, 0x33cfcadc, 0xda6dee21,
+ 0x33c105db, 0xda599859, 0x33b238e0, 0xda454860,
+ 0x33a363ec, 0xda30fe38, 0x33948701, 0xda1cb9e5,
+ 0x3385a222, 0xda087b69, 0x3376b551, 0xd9f442c9,
+ 0x3367c090, 0xd9e01006, 0x3358c3e2, 0xd9cbe325,
+ 0x3349bf48, 0xd9b7bc27, 0x333ab2c6, 0xd9a39b11,
+ 0x332b9e5e, 0xd98f7fe6, 0x331c8211, 0xd97b6aa8,
+ 0x330d5de3, 0xd9675b5a, 0x32fe31d5, 0xd9535201,
+ 0x32eefdea, 0xd93f4e9e, 0x32dfc224, 0xd92b5135,
+ 0x32d07e85, 0xd91759c9, 0x32c13311, 0xd903685d,
+ 0x32b1dfc9, 0xd8ef7cf4, 0x32a284b0, 0xd8db9792,
+ 0x329321c7, 0xd8c7b838, 0x3283b712, 0xd8b3deeb,
+ 0x32744493, 0xd8a00bae, 0x3264ca4c, 0xd88c3e83,
+ 0x32554840, 0xd878776d, 0x3245be70, 0xd864b670,
+ 0x32362ce0, 0xd850fb8e, 0x32269391, 0xd83d46cc,
+ 0x3216f287, 0xd829982b, 0x320749c3, 0xd815efae,
+ 0x31f79948, 0xd8024d59, 0x31e7e118, 0xd7eeb130,
+ 0x31d82137, 0xd7db1b34, 0x31c859a5, 0xd7c78b68,
+ 0x31b88a66, 0xd7b401d1, 0x31a8b37c, 0xd7a07e70,
+ 0x3198d4ea, 0xd78d014a, 0x3188eeb2, 0xd7798a60,
+ 0x317900d6, 0xd76619b6, 0x31690b59, 0xd752af4f,
+ 0x31590e3e, 0xd73f4b2e, 0x31490986, 0xd72bed55,
+ 0x3138fd35, 0xd71895c9, 0x3128e94c, 0xd705448b,
+ 0x3118cdcf, 0xd6f1f99f, 0x3108aabf, 0xd6deb508,
+ 0x30f8801f, 0xd6cb76c9, 0x30e84df3, 0xd6b83ee4,
+ 0x30d8143b, 0xd6a50d5d, 0x30c7d2fb, 0xd691e237,
+ 0x30b78a36, 0xd67ebd74, 0x30a739ed, 0xd66b9f18,
+ 0x3096e223, 0xd6588725, 0x308682dc, 0xd645759f,
+ 0x30761c18, 0xd6326a88, 0x3065addb, 0xd61f65e4,
+ 0x30553828, 0xd60c67b4, 0x3044bb00, 0xd5f96ffd,
+ 0x30343667, 0xd5e67ec1, 0x3023aa5f, 0xd5d39403,
+ 0x301316eb, 0xd5c0afc6, 0x30027c0c, 0xd5add20d,
+ 0x2ff1d9c7, 0xd59afadb, 0x2fe1301c, 0xd5882a32,
+ 0x2fd07f0f, 0xd5756016, 0x2fbfc6a3, 0xd5629c89,
+ 0x2faf06da, 0xd54fdf8f, 0x2f9e3fb6, 0xd53d292a,
+ 0x2f8d713a, 0xd52a795d, 0x2f7c9b69, 0xd517d02b,
+ 0x2f6bbe45, 0xd5052d97, 0x2f5ad9d1, 0xd4f291a4,
+ 0x2f49ee0f, 0xd4dffc54, 0x2f38fb03, 0xd4cd6dab,
+ 0x2f2800af, 0xd4bae5ab, 0x2f16ff14, 0xd4a86458,
+ 0x2f05f637, 0xd495e9b3, 0x2ef4e619, 0xd48375c1,
+ 0x2ee3cebe, 0xd4710883, 0x2ed2b027, 0xd45ea1fd,
+ 0x2ec18a58, 0xd44c4232, 0x2eb05d53, 0xd439e923,
+ 0x2e9f291b, 0xd42796d5, 0x2e8dedb3, 0xd4154b4a,
+ 0x2e7cab1c, 0xd4030684, 0x2e6b615a, 0xd3f0c887,
+ 0x2e5a1070, 0xd3de9156, 0x2e48b860, 0xd3cc60f2,
+ 0x2e37592c, 0xd3ba3760, 0x2e25f2d8, 0xd3a814a2,
+ 0x2e148566, 0xd395f8ba, 0x2e0310d9, 0xd383e3ab,
+ 0x2df19534, 0xd371d579, 0x2de01278, 0xd35fce26,
+ 0x2dce88aa, 0xd34dcdb4, 0x2dbcf7cb, 0xd33bd427,
+ 0x2dab5fdf, 0xd329e181, 0x2d99c0e7, 0xd317f5c6,
+ 0x2d881ae8, 0xd30610f7, 0x2d766de2, 0xd2f43318,
+ 0x2d64b9da, 0xd2e25c2b, 0x2d52fed2, 0xd2d08c33,
+ 0x2d413ccd, 0xd2bec333, 0x2d2f73cd, 0xd2ad012e,
+ 0x2d1da3d5, 0xd29b4626, 0x2d0bcce8, 0xd289921e,
+ 0x2cf9ef09, 0xd277e518, 0x2ce80a3a, 0xd2663f19,
+ 0x2cd61e7f, 0xd254a021, 0x2cc42bd9, 0xd2430835,
+ 0x2cb2324c, 0xd2317756, 0x2ca031da, 0xd21fed88,
+ 0x2c8e2a87, 0xd20e6acc, 0x2c7c1c55, 0xd1fcef27,
+ 0x2c6a0746, 0xd1eb7a9a, 0x2c57eb5e, 0xd1da0d28,
+ 0x2c45c8a0, 0xd1c8a6d4, 0x2c339f0e, 0xd1b747a0,
+ 0x2c216eaa, 0xd1a5ef90, 0x2c0f3779, 0xd1949ea6,
+ 0x2bfcf97c, 0xd18354e4, 0x2beab4b6, 0xd172124d,
+ 0x2bd8692b, 0xd160d6e5, 0x2bc616dd, 0xd14fa2ad,
+ 0x2bb3bdce, 0xd13e75a8, 0x2ba15e03, 0xd12d4fd9,
+ 0x2b8ef77d, 0xd11c3142, 0x2b7c8a3f, 0xd10b19e7,
+ 0x2b6a164d, 0xd0fa09c9, 0x2b579ba8, 0xd0e900ec,
+ 0x2b451a55, 0xd0d7ff51, 0x2b329255, 0xd0c704fd,
+ 0x2b2003ac, 0xd0b611f1, 0x2b0d6e5c, 0xd0a5262f,
+ 0x2afad269, 0xd09441bb, 0x2ae82fd5, 0xd0836497,
+ 0x2ad586a3, 0xd0728ec6, 0x2ac2d6d6, 0xd061c04a,
+ 0x2ab02071, 0xd050f926, 0x2a9d6377, 0xd040395d,
+ 0x2a8a9fea, 0xd02f80f1, 0x2a77d5ce, 0xd01ecfe4,
+ 0x2a650525, 0xd00e2639, 0x2a522df3, 0xcffd83f4,
+ 0x2a3f503a, 0xcfece915, 0x2a2c6bfd, 0xcfdc55a1,
+ 0x2a19813f, 0xcfcbc999, 0x2a069003, 0xcfbb4500,
+ 0x29f3984c, 0xcfaac7d8, 0x29e09a1c, 0xcf9a5225,
+ 0x29cd9578, 0xcf89e3e8, 0x29ba8a61, 0xcf797d24,
+ 0x29a778db, 0xcf691ddd, 0x299460e8, 0xcf58c613,
+ 0x2981428c, 0xcf4875ca, 0x296e1dc9, 0xcf382d05,
+ 0x295af2a3, 0xcf27ebc5, 0x2947c11c, 0xcf17b20d,
+ 0x29348937, 0xcf077fe1, 0x29214af8, 0xcef75541,
+ 0x290e0661, 0xcee73231, 0x28fabb75, 0xced716b4,
+ 0x28e76a37, 0xcec702cb, 0x28d412ab, 0xceb6f67a,
+ 0x28c0b4d2, 0xcea6f1c2, 0x28ad50b1, 0xce96f4a7,
+ 0x2899e64a, 0xce86ff2a, 0x288675a0, 0xce77114e,
+ 0x2872feb6, 0xce672b16, 0x285f8190, 0xce574c84,
+ 0x284bfe2f, 0xce47759a, 0x28387498, 0xce37a65b,
+ 0x2824e4cc, 0xce27dec9, 0x28114ed0, 0xce181ee8,
+ 0x27fdb2a7, 0xce0866b8, 0x27ea1052, 0xcdf8b63d,
+ 0x27d667d5, 0xcde90d79, 0x27c2b934, 0xcdd96c6f,
+ 0x27af0472, 0xcdc9d320, 0x279b4990, 0xcdba4190,
+ 0x27878893, 0xcdaab7c0, 0x2773c17d, 0xcd9b35b4,
+ 0x275ff452, 0xcd8bbb6d, 0x274c2115, 0xcd7c48ee,
+ 0x273847c8, 0xcd6cde39, 0x2724686e, 0xcd5d7b50,
+ 0x2710830c, 0xcd4e2037, 0x26fc97a3, 0xcd3eccef,
+ 0x26e8a637, 0xcd2f817b, 0x26d4aecb, 0xcd203ddc,
+ 0x26c0b162, 0xcd110216, 0x26acadff, 0xcd01ce2b,
+ 0x2698a4a6, 0xccf2a21d, 0x26849558, 0xcce37def,
+ 0x2670801a, 0xccd461a2, 0x265c64ef, 0xccc54d3a,
+ 0x264843d9, 0xccb640b8, 0x26341cdb, 0xcca73c1e,
+ 0x261feffa, 0xcc983f70, 0x260bbd37, 0xcc894aaf,
+ 0x25f78497, 0xcc7a5dde, 0x25e3461b, 0xcc6b78ff,
+ 0x25cf01c8, 0xcc5c9c14, 0x25bab7a0, 0xcc4dc720,
+ 0x25a667a7, 0xcc3efa25, 0x259211df, 0xcc303524,
+ 0x257db64c, 0xcc217822, 0x256954f1, 0xcc12c31f,
+ 0x2554edd1, 0xcc04161e, 0x254080ef, 0xcbf57121,
+ 0x252c0e4f, 0xcbe6d42b, 0x251795f3, 0xcbd83f3d,
+ 0x250317df, 0xcbc9b25a, 0x24ee9415, 0xcbbb2d85,
+ 0x24da0a9a, 0xcbacb0bf, 0x24c57b6f, 0xcb9e3c0b,
+ 0x24b0e699, 0xcb8fcf6b, 0x249c4c1b, 0xcb816ae1,
+ 0x2487abf7, 0xcb730e70, 0x24730631, 0xcb64ba19,
+ 0x245e5acc, 0xcb566ddf, 0x2449a9cc, 0xcb4829c4,
+ 0x2434f332, 0xcb39edca, 0x24203704, 0xcb2bb9f4,
+ 0x240b7543, 0xcb1d8e43, 0x23f6adf3, 0xcb0f6aba,
+ 0x23e1e117, 0xcb014f5b, 0x23cd0eb3, 0xcaf33c28,
+ 0x23b836ca, 0xcae53123, 0x23a3595e, 0xcad72e4f,
+ 0x238e7673, 0xcac933ae, 0x23798e0d, 0xcabb4141,
+ 0x2364a02e, 0xcaad570c, 0x234facda, 0xca9f750f,
+ 0x233ab414, 0xca919b4e, 0x2325b5df, 0xca83c9ca,
+ 0x2310b23e, 0xca760086, 0x22fba936, 0xca683f83,
+ 0x22e69ac8, 0xca5a86c4, 0x22d186f8, 0xca4cd64b,
+ 0x22bc6dca, 0xca3f2e19, 0x22a74f40, 0xca318e32,
+ 0x22922b5e, 0xca23f698, 0x227d0228, 0xca16674b,
+ 0x2267d3a0, 0xca08e04f, 0x22529fca, 0xc9fb61a5,
+ 0x223d66a8, 0xc9edeb50, 0x2228283f, 0xc9e07d51,
+ 0x2212e492, 0xc9d317ab, 0x21fd9ba3, 0xc9c5ba60,
+ 0x21e84d76, 0xc9b86572, 0x21d2fa0f, 0xc9ab18e3,
+ 0x21bda171, 0xc99dd4b4, 0x21a8439e, 0xc99098e9,
+ 0x2192e09b, 0xc9836582, 0x217d786a, 0xc9763a83,
+ 0x21680b0f, 0xc96917ec, 0x2152988d, 0xc95bfdc1,
+ 0x213d20e8, 0xc94eec03, 0x2127a423, 0xc941e2b4,
+ 0x21122240, 0xc934e1d6, 0x20fc9b44, 0xc927e96b,
+ 0x20e70f32, 0xc91af976, 0x20d17e0d, 0xc90e11f7,
+ 0x20bbe7d8, 0xc90132f2, 0x20a64c97, 0xc8f45c68,
+ 0x2090ac4d, 0xc8e78e5b, 0x207b06fe, 0xc8dac8cd,
+ 0x20655cac, 0xc8ce0bc0, 0x204fad5b, 0xc8c15736,
+ 0x2039f90f, 0xc8b4ab32, 0x20243fca, 0xc8a807b4,
+ 0x200e8190, 0xc89b6cbf, 0x1ff8be65, 0xc88eda54,
+ 0x1fe2f64c, 0xc8825077, 0x1fcd2948, 0xc875cf28,
+ 0x1fb7575c, 0xc869566a, 0x1fa1808c, 0xc85ce63e,
+ 0x1f8ba4dc, 0xc8507ea7, 0x1f75c44e, 0xc8441fa6,
+ 0x1f5fdee6, 0xc837c93e, 0x1f49f4a8, 0xc82b7b70,
+ 0x1f340596, 0xc81f363d, 0x1f1e11b5, 0xc812f9a9,
+ 0x1f081907, 0xc806c5b5, 0x1ef21b90, 0xc7fa9a62,
+ 0x1edc1953, 0xc7ee77b3, 0x1ec61254, 0xc7e25daa,
+ 0x1eb00696, 0xc7d64c47, 0x1e99f61d, 0xc7ca438f,
+ 0x1e83e0eb, 0xc7be4381, 0x1e6dc705, 0xc7b24c20,
+ 0x1e57a86d, 0xc7a65d6e, 0x1e418528, 0xc79a776c,
+ 0x1e2b5d38, 0xc78e9a1d, 0x1e1530a1, 0xc782c582,
+ 0x1dfeff67, 0xc776f99d, 0x1de8c98c, 0xc76b3671,
+ 0x1dd28f15, 0xc75f7bfe, 0x1dbc5004, 0xc753ca46,
+ 0x1da60c5d, 0xc748214c, 0x1d8fc424, 0xc73c8111,
+ 0x1d79775c, 0xc730e997, 0x1d632608, 0xc7255ae0,
+ 0x1d4cd02c, 0xc719d4ed, 0x1d3675cb, 0xc70e57c0,
+ 0x1d2016e9, 0xc702e35c, 0x1d09b389, 0xc6f777c1,
+ 0x1cf34baf, 0xc6ec14f2, 0x1cdcdf5e, 0xc6e0baf0,
+ 0x1cc66e99, 0xc6d569be, 0x1caff965, 0xc6ca215c,
+ 0x1c997fc4, 0xc6bee1cd, 0x1c8301b9, 0xc6b3ab12,
+ 0x1c6c7f4a, 0xc6a87d2d, 0x1c55f878, 0xc69d5820,
+ 0x1c3f6d47, 0xc6923bec, 0x1c28ddbb, 0xc6872894,
+ 0x1c1249d8, 0xc67c1e18, 0x1bfbb1a0, 0xc6711c7b,
+ 0x1be51518, 0xc66623be, 0x1bce7442, 0xc65b33e4,
+ 0x1bb7cf23, 0xc6504ced, 0x1ba125bd, 0xc6456edb,
+ 0x1b8a7815, 0xc63a99b1, 0x1b73c62d, 0xc62fcd6f,
+ 0x1b5d100a, 0xc6250a18, 0x1b4655ae, 0xc61a4fac,
+ 0x1b2f971e, 0xc60f9e2e, 0x1b18d45c, 0xc604f5a0,
+ 0x1b020d6c, 0xc5fa5603, 0x1aeb4253, 0xc5efbf58,
+ 0x1ad47312, 0xc5e531a1, 0x1abd9faf, 0xc5daace1,
+ 0x1aa6c82b, 0xc5d03118, 0x1a8fec8c, 0xc5c5be47,
+ 0x1a790cd4, 0xc5bb5472, 0x1a622907, 0xc5b0f399,
+ 0x1a4b4128, 0xc5a69bbe, 0x1a34553b, 0xc59c4ce3,
+ 0x1a1d6544, 0xc5920708, 0x1a067145, 0xc587ca31,
+ 0x19ef7944, 0xc57d965d, 0x19d87d42, 0xc5736b90,
+ 0x19c17d44, 0xc56949ca, 0x19aa794d, 0xc55f310d,
+ 0x19937161, 0xc555215a, 0x197c6584, 0xc54b1ab4,
+ 0x196555b8, 0xc5411d1b, 0x194e4201, 0xc5372891,
+ 0x19372a64, 0xc52d3d18, 0x19200ee3, 0xc5235ab2,
+ 0x1908ef82, 0xc519815f, 0x18f1cc45, 0xc50fb121,
+ 0x18daa52f, 0xc505e9fb, 0x18c37a44, 0xc4fc2bec,
+ 0x18ac4b87, 0xc4f276f7, 0x189518fc, 0xc4e8cb1e,
+ 0x187de2a7, 0xc4df2862, 0x1866a88a, 0xc4d58ec3,
+ 0x184f6aab, 0xc4cbfe45, 0x1838290c, 0xc4c276e8,
+ 0x1820e3b0, 0xc4b8f8ad, 0x18099a9c, 0xc4af8397,
+ 0x17f24dd3, 0xc4a617a6, 0x17dafd59, 0xc49cb4dd,
+ 0x17c3a931, 0xc4935b3c, 0x17ac515f, 0xc48a0ac4,
+ 0x1794f5e6, 0xc480c379, 0x177d96ca, 0xc477855a,
+ 0x1766340f, 0xc46e5069, 0x174ecdb8, 0xc46524a9,
+ 0x173763c9, 0xc45c0219, 0x171ff646, 0xc452e8bc,
+ 0x17088531, 0xc449d892, 0x16f1108f, 0xc440d19e,
+ 0x16d99864, 0xc437d3e1, 0x16c21cb2, 0xc42edf5c,
+ 0x16aa9d7e, 0xc425f410, 0x16931acb, 0xc41d11ff,
+ 0x167b949d, 0xc414392b, 0x16640af7, 0xc40b6994,
+ 0x164c7ddd, 0xc402a33c, 0x1634ed53, 0xc3f9e624,
+ 0x161d595d, 0xc3f1324e, 0x1605c1fd, 0xc3e887bb,
+ 0x15ee2738, 0xc3dfe66c, 0x15d68911, 0xc3d74e62,
+ 0x15bee78c, 0xc3cebfa0, 0x15a742ac, 0xc3c63a26,
+ 0x158f9a76, 0xc3bdbdf6, 0x1577eeec, 0xc3b54b11,
+ 0x15604013, 0xc3ace178, 0x15488dee, 0xc3a4812c,
+ 0x1530d881, 0xc39c2a2f, 0x15191fcf, 0xc393dc82,
+ 0x150163dc, 0xc38b9827, 0x14e9a4ac, 0xc3835d1e,
+ 0x14d1e242, 0xc37b2b6a, 0x14ba1ca3, 0xc373030a,
+ 0x14a253d1, 0xc36ae401, 0x148a87d1, 0xc362ce50,
+ 0x1472b8a5, 0xc35ac1f7, 0x145ae653, 0xc352bef9,
+ 0x144310dd, 0xc34ac556, 0x142b3846, 0xc342d510,
+ 0x14135c94, 0xc33aee27, 0x13fb7dc9, 0xc333109e,
+ 0x13e39be9, 0xc32b3c75, 0x13cbb6f8, 0xc32371ae,
+ 0x13b3cefa, 0xc31bb049, 0x139be3f2, 0xc313f848,
+ 0x1383f5e3, 0xc30c49ad, 0x136c04d2, 0xc304a477,
+ 0x135410c3, 0xc2fd08a9, 0x133c19b8, 0xc2f57644,
+ 0x13241fb6, 0xc2eded49, 0x130c22c1, 0xc2e66db8,
+ 0x12f422db, 0xc2def794, 0x12dc2009, 0xc2d78add,
+ 0x12c41a4f, 0xc2d02794, 0x12ac11af, 0xc2c8cdbb,
+ 0x1294062f, 0xc2c17d52, 0x127bf7d1, 0xc2ba365c,
+ 0x1263e699, 0xc2b2f8d8, 0x124bd28c, 0xc2abc4c9,
+ 0x1233bbac, 0xc2a49a2e, 0x121ba1fd, 0xc29d790a,
+ 0x12038584, 0xc296615d, 0x11eb6643, 0xc28f5329,
+ 0x11d3443f, 0xc2884e6e, 0x11bb1f7c, 0xc281532e,
+ 0x11a2f7fc, 0xc27a616a, 0x118acdc4, 0xc2737922,
+ 0x1172a0d7, 0xc26c9a58, 0x115a713a, 0xc265c50e,
+ 0x11423ef0, 0xc25ef943, 0x112a09fc, 0xc25836f9,
+ 0x1111d263, 0xc2517e31, 0x10f99827, 0xc24aceed,
+ 0x10e15b4e, 0xc244292c, 0x10c91bda, 0xc23d8cf1,
+ 0x10b0d9d0, 0xc236fa3b, 0x10989532, 0xc230710d,
+ 0x10804e06, 0xc229f167, 0x1068044e, 0xc2237b4b,
+ 0x104fb80e, 0xc21d0eb8, 0x1037694b, 0xc216abb1,
+ 0x101f1807, 0xc2105236, 0x1006c446, 0xc20a0248,
+ 0x0fee6e0d, 0xc203bbe8, 0x0fd6155f, 0xc1fd7f17,
+ 0x0fbdba40, 0xc1f74bd6, 0x0fa55cb4, 0xc1f12227,
+ 0x0f8cfcbe, 0xc1eb0209, 0x0f749a61, 0xc1e4eb7e,
+ 0x0f5c35a3, 0xc1dede87, 0x0f43ce86, 0xc1d8db25,
+ 0x0f2b650f, 0xc1d2e158, 0x0f12f941, 0xc1ccf122,
+ 0x0efa8b20, 0xc1c70a84, 0x0ee21aaf, 0xc1c12d7e,
+ 0x0ec9a7f3, 0xc1bb5a11, 0x0eb132ef, 0xc1b5903f,
+ 0x0e98bba7, 0xc1afd007, 0x0e80421e, 0xc1aa196c,
+ 0x0e67c65a, 0xc1a46c6e, 0x0e4f485c, 0xc19ec90d,
+ 0x0e36c82a, 0xc1992f4c, 0x0e1e45c6, 0xc1939f29,
+ 0x0e05c135, 0xc18e18a7, 0x0ded3a7b, 0xc1889bc6,
+ 0x0dd4b19a, 0xc1832888, 0x0dbc2698, 0xc17dbeec,
+ 0x0da39978, 0xc1785ef4, 0x0d8b0a3d, 0xc17308a1,
+ 0x0d7278eb, 0xc16dbbf3, 0x0d59e586, 0xc16878eb,
+ 0x0d415013, 0xc1633f8a, 0x0d28b894, 0xc15e0fd1,
+ 0x0d101f0e, 0xc158e9c1, 0x0cf78383, 0xc153cd5a,
+ 0x0cdee5f9, 0xc14eba9d, 0x0cc64673, 0xc149b18b,
+ 0x0cada4f5, 0xc144b225, 0x0c950182, 0xc13fbc6c,
+ 0x0c7c5c1e, 0xc13ad060, 0x0c63b4ce, 0xc135ee02,
+ 0x0c4b0b94, 0xc1311553, 0x0c326075, 0xc12c4653,
+ 0x0c19b374, 0xc1278104, 0x0c010496, 0xc122c566,
+ 0x0be853de, 0xc11e1379, 0x0bcfa150, 0xc1196b3f,
+ 0x0bb6ecef, 0xc114ccb9, 0x0b9e36c0, 0xc11037e6,
+ 0x0b857ec7, 0xc10bacc8, 0x0b6cc506, 0xc1072b5f,
+ 0x0b540982, 0xc102b3ac, 0x0b3b4c40, 0xc0fe45b0,
+ 0x0b228d42, 0xc0f9e16b, 0x0b09cc8c, 0xc0f586df,
+ 0x0af10a22, 0xc0f1360b, 0x0ad84609, 0xc0eceef1,
+ 0x0abf8043, 0xc0e8b190, 0x0aa6b8d5, 0xc0e47deb,
+ 0x0a8defc3, 0xc0e05401, 0x0a752510, 0xc0dc33d2,
+ 0x0a5c58c0, 0xc0d81d61, 0x0a438ad7, 0xc0d410ad,
+ 0x0a2abb59, 0xc0d00db6, 0x0a11ea49, 0xc0cc147f,
+ 0x09f917ac, 0xc0c82506, 0x09e04385, 0xc0c43f4d,
+ 0x09c76dd8, 0xc0c06355, 0x09ae96aa, 0xc0bc911d,
+ 0x0995bdfd, 0xc0b8c8a7, 0x097ce3d5, 0xc0b509f3,
+ 0x09640837, 0xc0b15502, 0x094b2b27, 0xc0ada9d4,
+ 0x09324ca7, 0xc0aa086a, 0x09196cbc, 0xc0a670c4,
+ 0x09008b6a, 0xc0a2e2e3, 0x08e7a8b5, 0xc09f5ec8,
+ 0x08cec4a0, 0xc09be473, 0x08b5df30, 0xc09873e4,
+ 0x089cf867, 0xc0950d1d, 0x0884104b, 0xc091b01d,
+ 0x086b26de, 0xc08e5ce5, 0x08523c25, 0xc08b1376,
+ 0x08395024, 0xc087d3d0, 0x082062de, 0xc0849df4,
+ 0x08077457, 0xc08171e2, 0x07ee8493, 0xc07e4f9b,
+ 0x07d59396, 0xc07b371e, 0x07bca163, 0xc078286e,
+ 0x07a3adff, 0xc0752389, 0x078ab96e, 0xc0722871,
+ 0x0771c3b3, 0xc06f3726, 0x0758ccd2, 0xc06c4fa8,
+ 0x073fd4cf, 0xc06971f9, 0x0726dbae, 0xc0669e18,
+ 0x070de172, 0xc063d405, 0x06f4e620, 0xc06113c2,
+ 0x06dbe9bb, 0xc05e5d4e, 0x06c2ec48, 0xc05bb0ab,
+ 0x06a9edc9, 0xc0590dd8, 0x0690ee44, 0xc05674d6,
+ 0x0677edbb, 0xc053e5a5, 0x065eec33, 0xc0516045,
+ 0x0645e9af, 0xc04ee4b8, 0x062ce634, 0xc04c72fe,
+ 0x0613e1c5, 0xc04a0b16, 0x05fadc66, 0xc047ad01,
+ 0x05e1d61b, 0xc04558c0, 0x05c8cee7, 0xc0430e53,
+ 0x05afc6d0, 0xc040cdba, 0x0596bdd7, 0xc03e96f6,
+ 0x057db403, 0xc03c6a07, 0x0564a955, 0xc03a46ed,
+ 0x054b9dd3, 0xc0382da8, 0x0532917f, 0xc0361e3a,
+ 0x0519845e, 0xc03418a2, 0x05007674, 0xc0321ce0,
+ 0x04e767c5, 0xc0302af5, 0x04ce5854, 0xc02e42e2,
+ 0x04b54825, 0xc02c64a6, 0x049c373c, 0xc02a9042,
+ 0x0483259d, 0xc028c5b6, 0x046a134c, 0xc0270502,
+ 0x0451004d, 0xc0254e27, 0x0437eca4, 0xc023a124,
+ 0x041ed854, 0xc021fdfb, 0x0405c361, 0xc02064ab,
+ 0x03ecadcf, 0xc01ed535, 0x03d397a3, 0xc01d4f99,
+ 0x03ba80df, 0xc01bd3d6, 0x03a16988, 0xc01a61ee,
+ 0x038851a2, 0xc018f9e1, 0x036f3931, 0xc0179bae,
+ 0x03562038, 0xc0164757, 0x033d06bb, 0xc014fcda,
+ 0x0323ecbe, 0xc013bc39, 0x030ad245, 0xc0128574,
+ 0x02f1b755, 0xc011588a, 0x02d89bf0, 0xc010357c,
+ 0x02bf801a, 0xc00f1c4a, 0x02a663d8, 0xc00e0cf5,
+ 0x028d472e, 0xc00d077c, 0x02742a1f, 0xc00c0be0,
+ 0x025b0caf, 0xc00b1a20, 0x0241eee2, 0xc00a323d,
+ 0x0228d0bb, 0xc0095438, 0x020fb240, 0xc008800f,
+ 0x01f69373, 0xc007b5c4, 0x01dd7459, 0xc006f556,
+ 0x01c454f5, 0xc0063ec6, 0x01ab354b, 0xc0059214,
+ 0x0192155f, 0xc004ef3f, 0x0178f536, 0xc0045648,
+ 0x015fd4d2, 0xc003c72f, 0x0146b438, 0xc00341f4,
+ 0x012d936c, 0xc002c697, 0x01147271, 0xc0025519,
+ 0x00fb514b, 0xc001ed78, 0x00e22fff, 0xc0018fb6,
+ 0x00c90e90, 0xc0013bd3, 0x00afed02, 0xc000f1ce,
+ 0x0096cb58, 0xc000b1a7, 0x007da998, 0xc0007b5f,
+ 0x006487c4, 0xc0004ef5, 0x004b65e1, 0xc0002c6a,
+ 0x003243f1, 0xc00013bd, 0x001921fb, 0xc00004ef,
+ 0x00000000, 0xc0000000, 0xffe6de05, 0xc00004ef,
+ 0xffcdbc0f, 0xc00013bd, 0xffb49a1f, 0xc0002c6a,
+ 0xff9b783c, 0xc0004ef5, 0xff825668, 0xc0007b5f,
+ 0xff6934a8, 0xc000b1a7, 0xff5012fe, 0xc000f1ce,
+ 0xff36f170, 0xc0013bd3, 0xff1dd001, 0xc0018fb6,
+ 0xff04aeb5, 0xc001ed78, 0xfeeb8d8f, 0xc0025519,
+ 0xfed26c94, 0xc002c697, 0xfeb94bc8, 0xc00341f4,
+ 0xfea02b2e, 0xc003c72f, 0xfe870aca, 0xc0045648,
+ 0xfe6deaa1, 0xc004ef3f, 0xfe54cab5, 0xc0059214,
+ 0xfe3bab0b, 0xc0063ec6, 0xfe228ba7, 0xc006f556,
+ 0xfe096c8d, 0xc007b5c4, 0xfdf04dc0, 0xc008800f,
+ 0xfdd72f45, 0xc0095438, 0xfdbe111e, 0xc00a323d,
+ 0xfda4f351, 0xc00b1a20, 0xfd8bd5e1, 0xc00c0be0,
+ 0xfd72b8d2, 0xc00d077c, 0xfd599c28, 0xc00e0cf5,
+ 0xfd407fe6, 0xc00f1c4a, 0xfd276410, 0xc010357c,
+ 0xfd0e48ab, 0xc011588a, 0xfcf52dbb, 0xc0128574,
+ 0xfcdc1342, 0xc013bc39, 0xfcc2f945, 0xc014fcda,
+ 0xfca9dfc8, 0xc0164757, 0xfc90c6cf, 0xc0179bae,
+ 0xfc77ae5e, 0xc018f9e1, 0xfc5e9678, 0xc01a61ee,
+ 0xfc457f21, 0xc01bd3d6, 0xfc2c685d, 0xc01d4f99,
+ 0xfc135231, 0xc01ed535, 0xfbfa3c9f, 0xc02064ab,
+ 0xfbe127ac, 0xc021fdfb, 0xfbc8135c, 0xc023a124,
+ 0xfbaeffb3, 0xc0254e27, 0xfb95ecb4, 0xc0270502,
+ 0xfb7cda63, 0xc028c5b6, 0xfb63c8c4, 0xc02a9042,
+ 0xfb4ab7db, 0xc02c64a6, 0xfb31a7ac, 0xc02e42e2,
+ 0xfb18983b, 0xc0302af5, 0xfaff898c, 0xc0321ce0,
+ 0xfae67ba2, 0xc03418a2, 0xfacd6e81, 0xc0361e3a,
+ 0xfab4622d, 0xc0382da8, 0xfa9b56ab, 0xc03a46ed,
+ 0xfa824bfd, 0xc03c6a07, 0xfa694229, 0xc03e96f6,
+ 0xfa503930, 0xc040cdba, 0xfa373119, 0xc0430e53,
+ 0xfa1e29e5, 0xc04558c0, 0xfa05239a, 0xc047ad01,
+ 0xf9ec1e3b, 0xc04a0b16, 0xf9d319cc, 0xc04c72fe,
+ 0xf9ba1651, 0xc04ee4b8, 0xf9a113cd, 0xc0516045,
+ 0xf9881245, 0xc053e5a5, 0xf96f11bc, 0xc05674d6,
+ 0xf9561237, 0xc0590dd8, 0xf93d13b8, 0xc05bb0ab,
+ 0xf9241645, 0xc05e5d4e, 0xf90b19e0, 0xc06113c2,
+ 0xf8f21e8e, 0xc063d405, 0xf8d92452, 0xc0669e18,
+ 0xf8c02b31, 0xc06971f9, 0xf8a7332e, 0xc06c4fa8,
+ 0xf88e3c4d, 0xc06f3726, 0xf8754692, 0xc0722871,
+ 0xf85c5201, 0xc0752389, 0xf8435e9d, 0xc078286e,
+ 0xf82a6c6a, 0xc07b371e, 0xf8117b6d, 0xc07e4f9b,
+ 0xf7f88ba9, 0xc08171e2, 0xf7df9d22, 0xc0849df4,
+ 0xf7c6afdc, 0xc087d3d0, 0xf7adc3db, 0xc08b1376,
+ 0xf794d922, 0xc08e5ce5, 0xf77befb5, 0xc091b01d,
+ 0xf7630799, 0xc0950d1d, 0xf74a20d0, 0xc09873e4,
+ 0xf7313b60, 0xc09be473, 0xf718574b, 0xc09f5ec8,
+ 0xf6ff7496, 0xc0a2e2e3, 0xf6e69344, 0xc0a670c4,
+ 0xf6cdb359, 0xc0aa086a, 0xf6b4d4d9, 0xc0ada9d4,
+ 0xf69bf7c9, 0xc0b15502, 0xf6831c2b, 0xc0b509f3,
+ 0xf66a4203, 0xc0b8c8a7, 0xf6516956, 0xc0bc911d,
+ 0xf6389228, 0xc0c06355, 0xf61fbc7b, 0xc0c43f4d,
+ 0xf606e854, 0xc0c82506, 0xf5ee15b7, 0xc0cc147f,
+ 0xf5d544a7, 0xc0d00db6, 0xf5bc7529, 0xc0d410ad,
+ 0xf5a3a740, 0xc0d81d61, 0xf58adaf0, 0xc0dc33d2,
+ 0xf572103d, 0xc0e05401, 0xf559472b, 0xc0e47deb,
+ 0xf5407fbd, 0xc0e8b190, 0xf527b9f7, 0xc0eceef1,
+ 0xf50ef5de, 0xc0f1360b, 0xf4f63374, 0xc0f586df,
+ 0xf4dd72be, 0xc0f9e16b, 0xf4c4b3c0, 0xc0fe45b0,
+ 0xf4abf67e, 0xc102b3ac, 0xf4933afa, 0xc1072b5f,
+ 0xf47a8139, 0xc10bacc8, 0xf461c940, 0xc11037e6,
+ 0xf4491311, 0xc114ccb9, 0xf4305eb0, 0xc1196b3f,
+ 0xf417ac22, 0xc11e1379, 0xf3fefb6a, 0xc122c566,
+ 0xf3e64c8c, 0xc1278104, 0xf3cd9f8b, 0xc12c4653,
+ 0xf3b4f46c, 0xc1311553, 0xf39c4b32, 0xc135ee02,
+ 0xf383a3e2, 0xc13ad060, 0xf36afe7e, 0xc13fbc6c,
+ 0xf3525b0b, 0xc144b225, 0xf339b98d, 0xc149b18b,
+ 0xf3211a07, 0xc14eba9d, 0xf3087c7d, 0xc153cd5a,
+ 0xf2efe0f2, 0xc158e9c1, 0xf2d7476c, 0xc15e0fd1,
+ 0xf2beafed, 0xc1633f8a, 0xf2a61a7a, 0xc16878eb,
+ 0xf28d8715, 0xc16dbbf3, 0xf274f5c3, 0xc17308a1,
+ 0xf25c6688, 0xc1785ef4, 0xf243d968, 0xc17dbeec,
+ 0xf22b4e66, 0xc1832888, 0xf212c585, 0xc1889bc6,
+ 0xf1fa3ecb, 0xc18e18a7, 0xf1e1ba3a, 0xc1939f29,
+ 0xf1c937d6, 0xc1992f4c, 0xf1b0b7a4, 0xc19ec90d,
+ 0xf19839a6, 0xc1a46c6e, 0xf17fbde2, 0xc1aa196c,
+ 0xf1674459, 0xc1afd007, 0xf14ecd11, 0xc1b5903f,
+ 0xf136580d, 0xc1bb5a11, 0xf11de551, 0xc1c12d7e,
+ 0xf10574e0, 0xc1c70a84, 0xf0ed06bf, 0xc1ccf122,
+ 0xf0d49af1, 0xc1d2e158, 0xf0bc317a, 0xc1d8db25,
+ 0xf0a3ca5d, 0xc1dede87, 0xf08b659f, 0xc1e4eb7e,
+ 0xf0730342, 0xc1eb0209, 0xf05aa34c, 0xc1f12227,
+ 0xf04245c0, 0xc1f74bd6, 0xf029eaa1, 0xc1fd7f17,
+ 0xf01191f3, 0xc203bbe8, 0xeff93bba, 0xc20a0248,
+ 0xefe0e7f9, 0xc2105236, 0xefc896b5, 0xc216abb1,
+ 0xefb047f2, 0xc21d0eb8, 0xef97fbb2, 0xc2237b4b,
+ 0xef7fb1fa, 0xc229f167, 0xef676ace, 0xc230710d,
+ 0xef4f2630, 0xc236fa3b, 0xef36e426, 0xc23d8cf1,
+ 0xef1ea4b2, 0xc244292c, 0xef0667d9, 0xc24aceed,
+ 0xeeee2d9d, 0xc2517e31, 0xeed5f604, 0xc25836f9,
+ 0xeebdc110, 0xc25ef943, 0xeea58ec6, 0xc265c50e,
+ 0xee8d5f29, 0xc26c9a58, 0xee75323c, 0xc2737922,
+ 0xee5d0804, 0xc27a616a, 0xee44e084, 0xc281532e,
+ 0xee2cbbc1, 0xc2884e6e, 0xee1499bd, 0xc28f5329,
+ 0xedfc7a7c, 0xc296615d, 0xede45e03, 0xc29d790a,
+ 0xedcc4454, 0xc2a49a2e, 0xedb42d74, 0xc2abc4c9,
+ 0xed9c1967, 0xc2b2f8d8, 0xed84082f, 0xc2ba365c,
+ 0xed6bf9d1, 0xc2c17d52, 0xed53ee51, 0xc2c8cdbb,
+ 0xed3be5b1, 0xc2d02794, 0xed23dff7, 0xc2d78add,
+ 0xed0bdd25, 0xc2def794, 0xecf3dd3f, 0xc2e66db8,
+ 0xecdbe04a, 0xc2eded49, 0xecc3e648, 0xc2f57644,
+ 0xecabef3d, 0xc2fd08a9, 0xec93fb2e, 0xc304a477,
+ 0xec7c0a1d, 0xc30c49ad, 0xec641c0e, 0xc313f848,
+ 0xec4c3106, 0xc31bb049, 0xec344908, 0xc32371ae,
+ 0xec1c6417, 0xc32b3c75, 0xec048237, 0xc333109e,
+ 0xebeca36c, 0xc33aee27, 0xebd4c7ba, 0xc342d510,
+ 0xebbcef23, 0xc34ac556, 0xeba519ad, 0xc352bef9,
+ 0xeb8d475b, 0xc35ac1f7, 0xeb75782f, 0xc362ce50,
+ 0xeb5dac2f, 0xc36ae401, 0xeb45e35d, 0xc373030a,
+ 0xeb2e1dbe, 0xc37b2b6a, 0xeb165b54, 0xc3835d1e,
+ 0xeafe9c24, 0xc38b9827, 0xeae6e031, 0xc393dc82,
+ 0xeacf277f, 0xc39c2a2f, 0xeab77212, 0xc3a4812c,
+ 0xea9fbfed, 0xc3ace178, 0xea881114, 0xc3b54b11,
+ 0xea70658a, 0xc3bdbdf6, 0xea58bd54, 0xc3c63a26,
+ 0xea411874, 0xc3cebfa0, 0xea2976ef, 0xc3d74e62,
+ 0xea11d8c8, 0xc3dfe66c, 0xe9fa3e03, 0xc3e887bb,
+ 0xe9e2a6a3, 0xc3f1324e, 0xe9cb12ad, 0xc3f9e624,
+ 0xe9b38223, 0xc402a33c, 0xe99bf509, 0xc40b6994,
+ 0xe9846b63, 0xc414392b, 0xe96ce535, 0xc41d11ff,
+ 0xe9556282, 0xc425f410, 0xe93de34e, 0xc42edf5c,
+ 0xe926679c, 0xc437d3e1, 0xe90eef71, 0xc440d19e,
+ 0xe8f77acf, 0xc449d892, 0xe8e009ba, 0xc452e8bc,
+ 0xe8c89c37, 0xc45c0219, 0xe8b13248, 0xc46524a9,
+ 0xe899cbf1, 0xc46e5069, 0xe8826936, 0xc477855a,
+ 0xe86b0a1a, 0xc480c379, 0xe853aea1, 0xc48a0ac4,
+ 0xe83c56cf, 0xc4935b3c, 0xe82502a7, 0xc49cb4dd,
+ 0xe80db22d, 0xc4a617a6, 0xe7f66564, 0xc4af8397,
+ 0xe7df1c50, 0xc4b8f8ad, 0xe7c7d6f4, 0xc4c276e8,
+ 0xe7b09555, 0xc4cbfe45, 0xe7995776, 0xc4d58ec3,
+ 0xe7821d59, 0xc4df2862, 0xe76ae704, 0xc4e8cb1e,
+ 0xe753b479, 0xc4f276f7, 0xe73c85bc, 0xc4fc2bec,
+ 0xe7255ad1, 0xc505e9fb, 0xe70e33bb, 0xc50fb121,
+ 0xe6f7107e, 0xc519815f, 0xe6dff11d, 0xc5235ab2,
+ 0xe6c8d59c, 0xc52d3d18, 0xe6b1bdff, 0xc5372891,
+ 0xe69aaa48, 0xc5411d1b, 0xe6839a7c, 0xc54b1ab4,
+ 0xe66c8e9f, 0xc555215a, 0xe65586b3, 0xc55f310d,
+ 0xe63e82bc, 0xc56949ca, 0xe62782be, 0xc5736b90,
+ 0xe61086bc, 0xc57d965d, 0xe5f98ebb, 0xc587ca31,
+ 0xe5e29abc, 0xc5920708, 0xe5cbaac5, 0xc59c4ce3,
+ 0xe5b4bed8, 0xc5a69bbe, 0xe59dd6f9, 0xc5b0f399,
+ 0xe586f32c, 0xc5bb5472, 0xe5701374, 0xc5c5be47,
+ 0xe55937d5, 0xc5d03118, 0xe5426051, 0xc5daace1,
+ 0xe52b8cee, 0xc5e531a1, 0xe514bdad, 0xc5efbf58,
+ 0xe4fdf294, 0xc5fa5603, 0xe4e72ba4, 0xc604f5a0,
+ 0xe4d068e2, 0xc60f9e2e, 0xe4b9aa52, 0xc61a4fac,
+ 0xe4a2eff6, 0xc6250a18, 0xe48c39d3, 0xc62fcd6f,
+ 0xe47587eb, 0xc63a99b1, 0xe45eda43, 0xc6456edb,
+ 0xe44830dd, 0xc6504ced, 0xe4318bbe, 0xc65b33e4,
+ 0xe41aeae8, 0xc66623be, 0xe4044e60, 0xc6711c7b,
+ 0xe3edb628, 0xc67c1e18, 0xe3d72245, 0xc6872894,
+ 0xe3c092b9, 0xc6923bec, 0xe3aa0788, 0xc69d5820,
+ 0xe39380b6, 0xc6a87d2d, 0xe37cfe47, 0xc6b3ab12,
+ 0xe366803c, 0xc6bee1cd, 0xe350069b, 0xc6ca215c,
+ 0xe3399167, 0xc6d569be, 0xe32320a2, 0xc6e0baf0,
+ 0xe30cb451, 0xc6ec14f2, 0xe2f64c77, 0xc6f777c1,
+ 0xe2dfe917, 0xc702e35c, 0xe2c98a35, 0xc70e57c0,
+ 0xe2b32fd4, 0xc719d4ed, 0xe29cd9f8, 0xc7255ae0,
+ 0xe28688a4, 0xc730e997, 0xe2703bdc, 0xc73c8111,
+ 0xe259f3a3, 0xc748214c, 0xe243affc, 0xc753ca46,
+ 0xe22d70eb, 0xc75f7bfe, 0xe2173674, 0xc76b3671,
+ 0xe2010099, 0xc776f99d, 0xe1eacf5f, 0xc782c582,
+ 0xe1d4a2c8, 0xc78e9a1d, 0xe1be7ad8, 0xc79a776c,
+ 0xe1a85793, 0xc7a65d6e, 0xe19238fb, 0xc7b24c20,
+ 0xe17c1f15, 0xc7be4381, 0xe16609e3, 0xc7ca438f,
+ 0xe14ff96a, 0xc7d64c47, 0xe139edac, 0xc7e25daa,
+ 0xe123e6ad, 0xc7ee77b3, 0xe10de470, 0xc7fa9a62,
+ 0xe0f7e6f9, 0xc806c5b5, 0xe0e1ee4b, 0xc812f9a9,
+ 0xe0cbfa6a, 0xc81f363d, 0xe0b60b58, 0xc82b7b70,
+ 0xe0a0211a, 0xc837c93e, 0xe08a3bb2, 0xc8441fa6,
+ 0xe0745b24, 0xc8507ea7, 0xe05e7f74, 0xc85ce63e,
+ 0xe048a8a4, 0xc869566a, 0xe032d6b8, 0xc875cf28,
+ 0xe01d09b4, 0xc8825077, 0xe007419b, 0xc88eda54,
+ 0xdff17e70, 0xc89b6cbf, 0xdfdbc036, 0xc8a807b4,
+ 0xdfc606f1, 0xc8b4ab32, 0xdfb052a5, 0xc8c15736,
+ 0xdf9aa354, 0xc8ce0bc0, 0xdf84f902, 0xc8dac8cd,
+ 0xdf6f53b3, 0xc8e78e5b, 0xdf59b369, 0xc8f45c68,
+ 0xdf441828, 0xc90132f2, 0xdf2e81f3, 0xc90e11f7,
+ 0xdf18f0ce, 0xc91af976, 0xdf0364bc, 0xc927e96b,
+ 0xdeedddc0, 0xc934e1d6, 0xded85bdd, 0xc941e2b4,
+ 0xdec2df18, 0xc94eec03, 0xdead6773, 0xc95bfdc1,
+ 0xde97f4f1, 0xc96917ec, 0xde828796, 0xc9763a83,
+ 0xde6d1f65, 0xc9836582, 0xde57bc62, 0xc99098e9,
+ 0xde425e8f, 0xc99dd4b4, 0xde2d05f1, 0xc9ab18e3,
+ 0xde17b28a, 0xc9b86572, 0xde02645d, 0xc9c5ba60,
+ 0xdded1b6e, 0xc9d317ab, 0xddd7d7c1, 0xc9e07d51,
+ 0xddc29958, 0xc9edeb50, 0xddad6036, 0xc9fb61a5,
+ 0xdd982c60, 0xca08e04f, 0xdd82fdd8, 0xca16674b,
+ 0xdd6dd4a2, 0xca23f698, 0xdd58b0c0, 0xca318e32,
+ 0xdd439236, 0xca3f2e19, 0xdd2e7908, 0xca4cd64b,
+ 0xdd196538, 0xca5a86c4, 0xdd0456ca, 0xca683f83,
+ 0xdcef4dc2, 0xca760086, 0xdcda4a21, 0xca83c9ca,
+ 0xdcc54bec, 0xca919b4e, 0xdcb05326, 0xca9f750f,
+ 0xdc9b5fd2, 0xcaad570c, 0xdc8671f3, 0xcabb4141,
+ 0xdc71898d, 0xcac933ae, 0xdc5ca6a2, 0xcad72e4f,
+ 0xdc47c936, 0xcae53123, 0xdc32f14d, 0xcaf33c28,
+ 0xdc1e1ee9, 0xcb014f5b, 0xdc09520d, 0xcb0f6aba,
+ 0xdbf48abd, 0xcb1d8e43, 0xdbdfc8fc, 0xcb2bb9f4,
+ 0xdbcb0cce, 0xcb39edca, 0xdbb65634, 0xcb4829c4,
+ 0xdba1a534, 0xcb566ddf, 0xdb8cf9cf, 0xcb64ba19,
+ 0xdb785409, 0xcb730e70, 0xdb63b3e5, 0xcb816ae1,
+ 0xdb4f1967, 0xcb8fcf6b, 0xdb3a8491, 0xcb9e3c0b,
+ 0xdb25f566, 0xcbacb0bf, 0xdb116beb, 0xcbbb2d85,
+ 0xdafce821, 0xcbc9b25a, 0xdae86a0d, 0xcbd83f3d,
+ 0xdad3f1b1, 0xcbe6d42b, 0xdabf7f11, 0xcbf57121,
+ 0xdaab122f, 0xcc04161e, 0xda96ab0f, 0xcc12c31f,
+ 0xda8249b4, 0xcc217822, 0xda6dee21, 0xcc303524,
+ 0xda599859, 0xcc3efa25, 0xda454860, 0xcc4dc720,
+ 0xda30fe38, 0xcc5c9c14, 0xda1cb9e5, 0xcc6b78ff,
+ 0xda087b69, 0xcc7a5dde, 0xd9f442c9, 0xcc894aaf,
+ 0xd9e01006, 0xcc983f70, 0xd9cbe325, 0xcca73c1e,
+ 0xd9b7bc27, 0xccb640b8, 0xd9a39b11, 0xccc54d3a,
+ 0xd98f7fe6, 0xccd461a2, 0xd97b6aa8, 0xcce37def,
+ 0xd9675b5a, 0xccf2a21d, 0xd9535201, 0xcd01ce2b,
+ 0xd93f4e9e, 0xcd110216, 0xd92b5135, 0xcd203ddc,
+ 0xd91759c9, 0xcd2f817b, 0xd903685d, 0xcd3eccef,
+ 0xd8ef7cf4, 0xcd4e2037, 0xd8db9792, 0xcd5d7b50,
+ 0xd8c7b838, 0xcd6cde39, 0xd8b3deeb, 0xcd7c48ee,
+ 0xd8a00bae, 0xcd8bbb6d, 0xd88c3e83, 0xcd9b35b4,
+ 0xd878776d, 0xcdaab7c0, 0xd864b670, 0xcdba4190,
+ 0xd850fb8e, 0xcdc9d320, 0xd83d46cc, 0xcdd96c6f,
+ 0xd829982b, 0xcde90d79, 0xd815efae, 0xcdf8b63d,
+ 0xd8024d59, 0xce0866b8, 0xd7eeb130, 0xce181ee8,
+ 0xd7db1b34, 0xce27dec9, 0xd7c78b68, 0xce37a65b,
+ 0xd7b401d1, 0xce47759a, 0xd7a07e70, 0xce574c84,
+ 0xd78d014a, 0xce672b16, 0xd7798a60, 0xce77114e,
+ 0xd76619b6, 0xce86ff2a, 0xd752af4f, 0xce96f4a7,
+ 0xd73f4b2e, 0xcea6f1c2, 0xd72bed55, 0xceb6f67a,
+ 0xd71895c9, 0xcec702cb, 0xd705448b, 0xced716b4,
+ 0xd6f1f99f, 0xcee73231, 0xd6deb508, 0xcef75541,
+ 0xd6cb76c9, 0xcf077fe1, 0xd6b83ee4, 0xcf17b20d,
+ 0xd6a50d5d, 0xcf27ebc5, 0xd691e237, 0xcf382d05,
+ 0xd67ebd74, 0xcf4875ca, 0xd66b9f18, 0xcf58c613,
+ 0xd6588725, 0xcf691ddd, 0xd645759f, 0xcf797d24,
+ 0xd6326a88, 0xcf89e3e8, 0xd61f65e4, 0xcf9a5225,
+ 0xd60c67b4, 0xcfaac7d8, 0xd5f96ffd, 0xcfbb4500,
+ 0xd5e67ec1, 0xcfcbc999, 0xd5d39403, 0xcfdc55a1,
+ 0xd5c0afc6, 0xcfece915, 0xd5add20d, 0xcffd83f4,
+ 0xd59afadb, 0xd00e2639, 0xd5882a32, 0xd01ecfe4,
+ 0xd5756016, 0xd02f80f1, 0xd5629c89, 0xd040395d,
+ 0xd54fdf8f, 0xd050f926, 0xd53d292a, 0xd061c04a,
+ 0xd52a795d, 0xd0728ec6, 0xd517d02b, 0xd0836497,
+ 0xd5052d97, 0xd09441bb, 0xd4f291a4, 0xd0a5262f,
+ 0xd4dffc54, 0xd0b611f1, 0xd4cd6dab, 0xd0c704fd,
+ 0xd4bae5ab, 0xd0d7ff51, 0xd4a86458, 0xd0e900ec,
+ 0xd495e9b3, 0xd0fa09c9, 0xd48375c1, 0xd10b19e7,
+ 0xd4710883, 0xd11c3142, 0xd45ea1fd, 0xd12d4fd9,
+ 0xd44c4232, 0xd13e75a8, 0xd439e923, 0xd14fa2ad,
+ 0xd42796d5, 0xd160d6e5, 0xd4154b4a, 0xd172124d,
+ 0xd4030684, 0xd18354e4, 0xd3f0c887, 0xd1949ea6,
+ 0xd3de9156, 0xd1a5ef90, 0xd3cc60f2, 0xd1b747a0,
+ 0xd3ba3760, 0xd1c8a6d4, 0xd3a814a2, 0xd1da0d28,
+ 0xd395f8ba, 0xd1eb7a9a, 0xd383e3ab, 0xd1fcef27,
+ 0xd371d579, 0xd20e6acc, 0xd35fce26, 0xd21fed88,
+ 0xd34dcdb4, 0xd2317756, 0xd33bd427, 0xd2430835,
+ 0xd329e181, 0xd254a021, 0xd317f5c6, 0xd2663f19,
+ 0xd30610f7, 0xd277e518, 0xd2f43318, 0xd289921e,
+ 0xd2e25c2b, 0xd29b4626, 0xd2d08c33, 0xd2ad012e,
+ 0xd2bec333, 0xd2bec333, 0xd2ad012e, 0xd2d08c33,
+ 0xd29b4626, 0xd2e25c2b, 0xd289921e, 0xd2f43318,
+ 0xd277e518, 0xd30610f7, 0xd2663f19, 0xd317f5c6,
+ 0xd254a021, 0xd329e181, 0xd2430835, 0xd33bd427,
+ 0xd2317756, 0xd34dcdb4, 0xd21fed88, 0xd35fce26,
+ 0xd20e6acc, 0xd371d579, 0xd1fcef27, 0xd383e3ab,
+ 0xd1eb7a9a, 0xd395f8ba, 0xd1da0d28, 0xd3a814a2,
+ 0xd1c8a6d4, 0xd3ba3760, 0xd1b747a0, 0xd3cc60f2,
+ 0xd1a5ef90, 0xd3de9156, 0xd1949ea6, 0xd3f0c887,
+ 0xd18354e4, 0xd4030684, 0xd172124d, 0xd4154b4a,
+ 0xd160d6e5, 0xd42796d5, 0xd14fa2ad, 0xd439e923,
+ 0xd13e75a8, 0xd44c4232, 0xd12d4fd9, 0xd45ea1fd,
+ 0xd11c3142, 0xd4710883, 0xd10b19e7, 0xd48375c1,
+ 0xd0fa09c9, 0xd495e9b3, 0xd0e900ec, 0xd4a86458,
+ 0xd0d7ff51, 0xd4bae5ab, 0xd0c704fd, 0xd4cd6dab,
+ 0xd0b611f1, 0xd4dffc54, 0xd0a5262f, 0xd4f291a4,
+ 0xd09441bb, 0xd5052d97, 0xd0836497, 0xd517d02b,
+ 0xd0728ec6, 0xd52a795d, 0xd061c04a, 0xd53d292a,
+ 0xd050f926, 0xd54fdf8f, 0xd040395d, 0xd5629c89,
+ 0xd02f80f1, 0xd5756016, 0xd01ecfe4, 0xd5882a32,
+ 0xd00e2639, 0xd59afadb, 0xcffd83f4, 0xd5add20d,
+ 0xcfece915, 0xd5c0afc6, 0xcfdc55a1, 0xd5d39403,
+ 0xcfcbc999, 0xd5e67ec1, 0xcfbb4500, 0xd5f96ffd,
+ 0xcfaac7d8, 0xd60c67b4, 0xcf9a5225, 0xd61f65e4,
+ 0xcf89e3e8, 0xd6326a88, 0xcf797d24, 0xd645759f,
+ 0xcf691ddd, 0xd6588725, 0xcf58c613, 0xd66b9f18,
+ 0xcf4875ca, 0xd67ebd74, 0xcf382d05, 0xd691e237,
+ 0xcf27ebc5, 0xd6a50d5d, 0xcf17b20d, 0xd6b83ee4,
+ 0xcf077fe1, 0xd6cb76c9, 0xcef75541, 0xd6deb508,
+ 0xcee73231, 0xd6f1f99f, 0xced716b4, 0xd705448b,
+ 0xcec702cb, 0xd71895c9, 0xceb6f67a, 0xd72bed55,
+ 0xcea6f1c2, 0xd73f4b2e, 0xce96f4a7, 0xd752af4f,
+ 0xce86ff2a, 0xd76619b6, 0xce77114e, 0xd7798a60,
+ 0xce672b16, 0xd78d014a, 0xce574c84, 0xd7a07e70,
+ 0xce47759a, 0xd7b401d1, 0xce37a65b, 0xd7c78b68,
+ 0xce27dec9, 0xd7db1b34, 0xce181ee8, 0xd7eeb130,
+ 0xce0866b8, 0xd8024d59, 0xcdf8b63d, 0xd815efae,
+ 0xcde90d79, 0xd829982b, 0xcdd96c6f, 0xd83d46cc,
+ 0xcdc9d320, 0xd850fb8e, 0xcdba4190, 0xd864b670,
+ 0xcdaab7c0, 0xd878776d, 0xcd9b35b4, 0xd88c3e83,
+ 0xcd8bbb6d, 0xd8a00bae, 0xcd7c48ee, 0xd8b3deeb,
+ 0xcd6cde39, 0xd8c7b838, 0xcd5d7b50, 0xd8db9792,
+ 0xcd4e2037, 0xd8ef7cf4, 0xcd3eccef, 0xd903685d,
+ 0xcd2f817b, 0xd91759c9, 0xcd203ddc, 0xd92b5135,
+ 0xcd110216, 0xd93f4e9e, 0xcd01ce2b, 0xd9535201,
+ 0xccf2a21d, 0xd9675b5a, 0xcce37def, 0xd97b6aa8,
+ 0xccd461a2, 0xd98f7fe6, 0xccc54d3a, 0xd9a39b11,
+ 0xccb640b8, 0xd9b7bc27, 0xcca73c1e, 0xd9cbe325,
+ 0xcc983f70, 0xd9e01006, 0xcc894aaf, 0xd9f442c9,
+ 0xcc7a5dde, 0xda087b69, 0xcc6b78ff, 0xda1cb9e5,
+ 0xcc5c9c14, 0xda30fe38, 0xcc4dc720, 0xda454860,
+ 0xcc3efa25, 0xda599859, 0xcc303524, 0xda6dee21,
+ 0xcc217822, 0xda8249b4, 0xcc12c31f, 0xda96ab0f,
+ 0xcc04161e, 0xdaab122f, 0xcbf57121, 0xdabf7f11,
+ 0xcbe6d42b, 0xdad3f1b1, 0xcbd83f3d, 0xdae86a0d,
+ 0xcbc9b25a, 0xdafce821, 0xcbbb2d85, 0xdb116beb,
+ 0xcbacb0bf, 0xdb25f566, 0xcb9e3c0b, 0xdb3a8491,
+ 0xcb8fcf6b, 0xdb4f1967, 0xcb816ae1, 0xdb63b3e5,
+ 0xcb730e70, 0xdb785409, 0xcb64ba19, 0xdb8cf9cf,
+ 0xcb566ddf, 0xdba1a534, 0xcb4829c4, 0xdbb65634,
+ 0xcb39edca, 0xdbcb0cce, 0xcb2bb9f4, 0xdbdfc8fc,
+ 0xcb1d8e43, 0xdbf48abd, 0xcb0f6aba, 0xdc09520d,
+ 0xcb014f5b, 0xdc1e1ee9, 0xcaf33c28, 0xdc32f14d,
+ 0xcae53123, 0xdc47c936, 0xcad72e4f, 0xdc5ca6a2,
+ 0xcac933ae, 0xdc71898d, 0xcabb4141, 0xdc8671f3,
+ 0xcaad570c, 0xdc9b5fd2, 0xca9f750f, 0xdcb05326,
+ 0xca919b4e, 0xdcc54bec, 0xca83c9ca, 0xdcda4a21,
+ 0xca760086, 0xdcef4dc2, 0xca683f83, 0xdd0456ca,
+ 0xca5a86c4, 0xdd196538, 0xca4cd64b, 0xdd2e7908,
+ 0xca3f2e19, 0xdd439236, 0xca318e32, 0xdd58b0c0,
+ 0xca23f698, 0xdd6dd4a2, 0xca16674b, 0xdd82fdd8,
+ 0xca08e04f, 0xdd982c60, 0xc9fb61a5, 0xddad6036,
+ 0xc9edeb50, 0xddc29958, 0xc9e07d51, 0xddd7d7c1,
+ 0xc9d317ab, 0xdded1b6e, 0xc9c5ba60, 0xde02645d,
+ 0xc9b86572, 0xde17b28a, 0xc9ab18e3, 0xde2d05f1,
+ 0xc99dd4b4, 0xde425e8f, 0xc99098e9, 0xde57bc62,
+ 0xc9836582, 0xde6d1f65, 0xc9763a83, 0xde828796,
+ 0xc96917ec, 0xde97f4f1, 0xc95bfdc1, 0xdead6773,
+ 0xc94eec03, 0xdec2df18, 0xc941e2b4, 0xded85bdd,
+ 0xc934e1d6, 0xdeedddc0, 0xc927e96b, 0xdf0364bc,
+ 0xc91af976, 0xdf18f0ce, 0xc90e11f7, 0xdf2e81f3,
+ 0xc90132f2, 0xdf441828, 0xc8f45c68, 0xdf59b369,
+ 0xc8e78e5b, 0xdf6f53b3, 0xc8dac8cd, 0xdf84f902,
+ 0xc8ce0bc0, 0xdf9aa354, 0xc8c15736, 0xdfb052a5,
+ 0xc8b4ab32, 0xdfc606f1, 0xc8a807b4, 0xdfdbc036,
+ 0xc89b6cbf, 0xdff17e70, 0xc88eda54, 0xe007419b,
+ 0xc8825077, 0xe01d09b4, 0xc875cf28, 0xe032d6b8,
+ 0xc869566a, 0xe048a8a4, 0xc85ce63e, 0xe05e7f74,
+ 0xc8507ea7, 0xe0745b24, 0xc8441fa6, 0xe08a3bb2,
+ 0xc837c93e, 0xe0a0211a, 0xc82b7b70, 0xe0b60b58,
+ 0xc81f363d, 0xe0cbfa6a, 0xc812f9a9, 0xe0e1ee4b,
+ 0xc806c5b5, 0xe0f7e6f9, 0xc7fa9a62, 0xe10de470,
+ 0xc7ee77b3, 0xe123e6ad, 0xc7e25daa, 0xe139edac,
+ 0xc7d64c47, 0xe14ff96a, 0xc7ca438f, 0xe16609e3,
+ 0xc7be4381, 0xe17c1f15, 0xc7b24c20, 0xe19238fb,
+ 0xc7a65d6e, 0xe1a85793, 0xc79a776c, 0xe1be7ad8,
+ 0xc78e9a1d, 0xe1d4a2c8, 0xc782c582, 0xe1eacf5f,
+ 0xc776f99d, 0xe2010099, 0xc76b3671, 0xe2173674,
+ 0xc75f7bfe, 0xe22d70eb, 0xc753ca46, 0xe243affc,
+ 0xc748214c, 0xe259f3a3, 0xc73c8111, 0xe2703bdc,
+ 0xc730e997, 0xe28688a4, 0xc7255ae0, 0xe29cd9f8,
+ 0xc719d4ed, 0xe2b32fd4, 0xc70e57c0, 0xe2c98a35,
+ 0xc702e35c, 0xe2dfe917, 0xc6f777c1, 0xe2f64c77,
+ 0xc6ec14f2, 0xe30cb451, 0xc6e0baf0, 0xe32320a2,
+ 0xc6d569be, 0xe3399167, 0xc6ca215c, 0xe350069b,
+ 0xc6bee1cd, 0xe366803c, 0xc6b3ab12, 0xe37cfe47,
+ 0xc6a87d2d, 0xe39380b6, 0xc69d5820, 0xe3aa0788,
+ 0xc6923bec, 0xe3c092b9, 0xc6872894, 0xe3d72245,
+ 0xc67c1e18, 0xe3edb628, 0xc6711c7b, 0xe4044e60,
+ 0xc66623be, 0xe41aeae8, 0xc65b33e4, 0xe4318bbe,
+ 0xc6504ced, 0xe44830dd, 0xc6456edb, 0xe45eda43,
+ 0xc63a99b1, 0xe47587eb, 0xc62fcd6f, 0xe48c39d3,
+ 0xc6250a18, 0xe4a2eff6, 0xc61a4fac, 0xe4b9aa52,
+ 0xc60f9e2e, 0xe4d068e2, 0xc604f5a0, 0xe4e72ba4,
+ 0xc5fa5603, 0xe4fdf294, 0xc5efbf58, 0xe514bdad,
+ 0xc5e531a1, 0xe52b8cee, 0xc5daace1, 0xe5426051,
+ 0xc5d03118, 0xe55937d5, 0xc5c5be47, 0xe5701374,
+ 0xc5bb5472, 0xe586f32c, 0xc5b0f399, 0xe59dd6f9,
+ 0xc5a69bbe, 0xe5b4bed8, 0xc59c4ce3, 0xe5cbaac5,
+ 0xc5920708, 0xe5e29abc, 0xc587ca31, 0xe5f98ebb,
+ 0xc57d965d, 0xe61086bc, 0xc5736b90, 0xe62782be,
+ 0xc56949ca, 0xe63e82bc, 0xc55f310d, 0xe65586b3,
+ 0xc555215a, 0xe66c8e9f, 0xc54b1ab4, 0xe6839a7c,
+ 0xc5411d1b, 0xe69aaa48, 0xc5372891, 0xe6b1bdff,
+ 0xc52d3d18, 0xe6c8d59c, 0xc5235ab2, 0xe6dff11d,
+ 0xc519815f, 0xe6f7107e, 0xc50fb121, 0xe70e33bb,
+ 0xc505e9fb, 0xe7255ad1, 0xc4fc2bec, 0xe73c85bc,
+ 0xc4f276f7, 0xe753b479, 0xc4e8cb1e, 0xe76ae704,
+ 0xc4df2862, 0xe7821d59, 0xc4d58ec3, 0xe7995776,
+ 0xc4cbfe45, 0xe7b09555, 0xc4c276e8, 0xe7c7d6f4,
+ 0xc4b8f8ad, 0xe7df1c50, 0xc4af8397, 0xe7f66564,
+ 0xc4a617a6, 0xe80db22d, 0xc49cb4dd, 0xe82502a7,
+ 0xc4935b3c, 0xe83c56cf, 0xc48a0ac4, 0xe853aea1,
+ 0xc480c379, 0xe86b0a1a, 0xc477855a, 0xe8826936,
+ 0xc46e5069, 0xe899cbf1, 0xc46524a9, 0xe8b13248,
+ 0xc45c0219, 0xe8c89c37, 0xc452e8bc, 0xe8e009ba,
+ 0xc449d892, 0xe8f77acf, 0xc440d19e, 0xe90eef71,
+ 0xc437d3e1, 0xe926679c, 0xc42edf5c, 0xe93de34e,
+ 0xc425f410, 0xe9556282, 0xc41d11ff, 0xe96ce535,
+ 0xc414392b, 0xe9846b63, 0xc40b6994, 0xe99bf509,
+ 0xc402a33c, 0xe9b38223, 0xc3f9e624, 0xe9cb12ad,
+ 0xc3f1324e, 0xe9e2a6a3, 0xc3e887bb, 0xe9fa3e03,
+ 0xc3dfe66c, 0xea11d8c8, 0xc3d74e62, 0xea2976ef,
+ 0xc3cebfa0, 0xea411874, 0xc3c63a26, 0xea58bd54,
+ 0xc3bdbdf6, 0xea70658a, 0xc3b54b11, 0xea881114,
+ 0xc3ace178, 0xea9fbfed, 0xc3a4812c, 0xeab77212,
+ 0xc39c2a2f, 0xeacf277f, 0xc393dc82, 0xeae6e031,
+ 0xc38b9827, 0xeafe9c24, 0xc3835d1e, 0xeb165b54,
+ 0xc37b2b6a, 0xeb2e1dbe, 0xc373030a, 0xeb45e35d,
+ 0xc36ae401, 0xeb5dac2f, 0xc362ce50, 0xeb75782f,
+ 0xc35ac1f7, 0xeb8d475b, 0xc352bef9, 0xeba519ad,
+ 0xc34ac556, 0xebbcef23, 0xc342d510, 0xebd4c7ba,
+ 0xc33aee27, 0xebeca36c, 0xc333109e, 0xec048237,
+ 0xc32b3c75, 0xec1c6417, 0xc32371ae, 0xec344908,
+ 0xc31bb049, 0xec4c3106, 0xc313f848, 0xec641c0e,
+ 0xc30c49ad, 0xec7c0a1d, 0xc304a477, 0xec93fb2e,
+ 0xc2fd08a9, 0xecabef3d, 0xc2f57644, 0xecc3e648,
+ 0xc2eded49, 0xecdbe04a, 0xc2e66db8, 0xecf3dd3f,
+ 0xc2def794, 0xed0bdd25, 0xc2d78add, 0xed23dff7,
+ 0xc2d02794, 0xed3be5b1, 0xc2c8cdbb, 0xed53ee51,
+ 0xc2c17d52, 0xed6bf9d1, 0xc2ba365c, 0xed84082f,
+ 0xc2b2f8d8, 0xed9c1967, 0xc2abc4c9, 0xedb42d74,
+ 0xc2a49a2e, 0xedcc4454, 0xc29d790a, 0xede45e03,
+ 0xc296615d, 0xedfc7a7c, 0xc28f5329, 0xee1499bd,
+ 0xc2884e6e, 0xee2cbbc1, 0xc281532e, 0xee44e084,
+ 0xc27a616a, 0xee5d0804, 0xc2737922, 0xee75323c,
+ 0xc26c9a58, 0xee8d5f29, 0xc265c50e, 0xeea58ec6,
+ 0xc25ef943, 0xeebdc110, 0xc25836f9, 0xeed5f604,
+ 0xc2517e31, 0xeeee2d9d, 0xc24aceed, 0xef0667d9,
+ 0xc244292c, 0xef1ea4b2, 0xc23d8cf1, 0xef36e426,
+ 0xc236fa3b, 0xef4f2630, 0xc230710d, 0xef676ace,
+ 0xc229f167, 0xef7fb1fa, 0xc2237b4b, 0xef97fbb2,
+ 0xc21d0eb8, 0xefb047f2, 0xc216abb1, 0xefc896b5,
+ 0xc2105236, 0xefe0e7f9, 0xc20a0248, 0xeff93bba,
+ 0xc203bbe8, 0xf01191f3, 0xc1fd7f17, 0xf029eaa1,
+ 0xc1f74bd6, 0xf04245c0, 0xc1f12227, 0xf05aa34c,
+ 0xc1eb0209, 0xf0730342, 0xc1e4eb7e, 0xf08b659f,
+ 0xc1dede87, 0xf0a3ca5d, 0xc1d8db25, 0xf0bc317a,
+ 0xc1d2e158, 0xf0d49af1, 0xc1ccf122, 0xf0ed06bf,
+ 0xc1c70a84, 0xf10574e0, 0xc1c12d7e, 0xf11de551,
+ 0xc1bb5a11, 0xf136580d, 0xc1b5903f, 0xf14ecd11,
+ 0xc1afd007, 0xf1674459, 0xc1aa196c, 0xf17fbde2,
+ 0xc1a46c6e, 0xf19839a6, 0xc19ec90d, 0xf1b0b7a4,
+ 0xc1992f4c, 0xf1c937d6, 0xc1939f29, 0xf1e1ba3a,
+ 0xc18e18a7, 0xf1fa3ecb, 0xc1889bc6, 0xf212c585,
+ 0xc1832888, 0xf22b4e66, 0xc17dbeec, 0xf243d968,
+ 0xc1785ef4, 0xf25c6688, 0xc17308a1, 0xf274f5c3,
+ 0xc16dbbf3, 0xf28d8715, 0xc16878eb, 0xf2a61a7a,
+ 0xc1633f8a, 0xf2beafed, 0xc15e0fd1, 0xf2d7476c,
+ 0xc158e9c1, 0xf2efe0f2, 0xc153cd5a, 0xf3087c7d,
+ 0xc14eba9d, 0xf3211a07, 0xc149b18b, 0xf339b98d,
+ 0xc144b225, 0xf3525b0b, 0xc13fbc6c, 0xf36afe7e,
+ 0xc13ad060, 0xf383a3e2, 0xc135ee02, 0xf39c4b32,
+ 0xc1311553, 0xf3b4f46c, 0xc12c4653, 0xf3cd9f8b,
+ 0xc1278104, 0xf3e64c8c, 0xc122c566, 0xf3fefb6a,
+ 0xc11e1379, 0xf417ac22, 0xc1196b3f, 0xf4305eb0,
+ 0xc114ccb9, 0xf4491311, 0xc11037e6, 0xf461c940,
+ 0xc10bacc8, 0xf47a8139, 0xc1072b5f, 0xf4933afa,
+ 0xc102b3ac, 0xf4abf67e, 0xc0fe45b0, 0xf4c4b3c0,
+ 0xc0f9e16b, 0xf4dd72be, 0xc0f586df, 0xf4f63374,
+ 0xc0f1360b, 0xf50ef5de, 0xc0eceef1, 0xf527b9f7,
+ 0xc0e8b190, 0xf5407fbd, 0xc0e47deb, 0xf559472b,
+ 0xc0e05401, 0xf572103d, 0xc0dc33d2, 0xf58adaf0,
+ 0xc0d81d61, 0xf5a3a740, 0xc0d410ad, 0xf5bc7529,
+ 0xc0d00db6, 0xf5d544a7, 0xc0cc147f, 0xf5ee15b7,
+ 0xc0c82506, 0xf606e854, 0xc0c43f4d, 0xf61fbc7b,
+ 0xc0c06355, 0xf6389228, 0xc0bc911d, 0xf6516956,
+ 0xc0b8c8a7, 0xf66a4203, 0xc0b509f3, 0xf6831c2b,
+ 0xc0b15502, 0xf69bf7c9, 0xc0ada9d4, 0xf6b4d4d9,
+ 0xc0aa086a, 0xf6cdb359, 0xc0a670c4, 0xf6e69344,
+ 0xc0a2e2e3, 0xf6ff7496, 0xc09f5ec8, 0xf718574b,
+ 0xc09be473, 0xf7313b60, 0xc09873e4, 0xf74a20d0,
+ 0xc0950d1d, 0xf7630799, 0xc091b01d, 0xf77befb5,
+ 0xc08e5ce5, 0xf794d922, 0xc08b1376, 0xf7adc3db,
+ 0xc087d3d0, 0xf7c6afdc, 0xc0849df4, 0xf7df9d22,
+ 0xc08171e2, 0xf7f88ba9, 0xc07e4f9b, 0xf8117b6d,
+ 0xc07b371e, 0xf82a6c6a, 0xc078286e, 0xf8435e9d,
+ 0xc0752389, 0xf85c5201, 0xc0722871, 0xf8754692,
+ 0xc06f3726, 0xf88e3c4d, 0xc06c4fa8, 0xf8a7332e,
+ 0xc06971f9, 0xf8c02b31, 0xc0669e18, 0xf8d92452,
+ 0xc063d405, 0xf8f21e8e, 0xc06113c2, 0xf90b19e0,
+ 0xc05e5d4e, 0xf9241645, 0xc05bb0ab, 0xf93d13b8,
+ 0xc0590dd8, 0xf9561237, 0xc05674d6, 0xf96f11bc,
+ 0xc053e5a5, 0xf9881245, 0xc0516045, 0xf9a113cd,
+ 0xc04ee4b8, 0xf9ba1651, 0xc04c72fe, 0xf9d319cc,
+ 0xc04a0b16, 0xf9ec1e3b, 0xc047ad01, 0xfa05239a,
+ 0xc04558c0, 0xfa1e29e5, 0xc0430e53, 0xfa373119,
+ 0xc040cdba, 0xfa503930, 0xc03e96f6, 0xfa694229,
+ 0xc03c6a07, 0xfa824bfd, 0xc03a46ed, 0xfa9b56ab,
+ 0xc0382da8, 0xfab4622d, 0xc0361e3a, 0xfacd6e81,
+ 0xc03418a2, 0xfae67ba2, 0xc0321ce0, 0xfaff898c,
+ 0xc0302af5, 0xfb18983b, 0xc02e42e2, 0xfb31a7ac,
+ 0xc02c64a6, 0xfb4ab7db, 0xc02a9042, 0xfb63c8c4,
+ 0xc028c5b6, 0xfb7cda63, 0xc0270502, 0xfb95ecb4,
+ 0xc0254e27, 0xfbaeffb3, 0xc023a124, 0xfbc8135c,
+ 0xc021fdfb, 0xfbe127ac, 0xc02064ab, 0xfbfa3c9f,
+ 0xc01ed535, 0xfc135231, 0xc01d4f99, 0xfc2c685d,
+ 0xc01bd3d6, 0xfc457f21, 0xc01a61ee, 0xfc5e9678,
+ 0xc018f9e1, 0xfc77ae5e, 0xc0179bae, 0xfc90c6cf,
+ 0xc0164757, 0xfca9dfc8, 0xc014fcda, 0xfcc2f945,
+ 0xc013bc39, 0xfcdc1342, 0xc0128574, 0xfcf52dbb,
+ 0xc011588a, 0xfd0e48ab, 0xc010357c, 0xfd276410,
+ 0xc00f1c4a, 0xfd407fe6, 0xc00e0cf5, 0xfd599c28,
+ 0xc00d077c, 0xfd72b8d2, 0xc00c0be0, 0xfd8bd5e1,
+ 0xc00b1a20, 0xfda4f351, 0xc00a323d, 0xfdbe111e,
+ 0xc0095438, 0xfdd72f45, 0xc008800f, 0xfdf04dc0,
+ 0xc007b5c4, 0xfe096c8d, 0xc006f556, 0xfe228ba7,
+ 0xc0063ec6, 0xfe3bab0b, 0xc0059214, 0xfe54cab5,
+ 0xc004ef3f, 0xfe6deaa1, 0xc0045648, 0xfe870aca,
+ 0xc003c72f, 0xfea02b2e, 0xc00341f4, 0xfeb94bc8,
+ 0xc002c697, 0xfed26c94, 0xc0025519, 0xfeeb8d8f,
+ 0xc001ed78, 0xff04aeb5, 0xc0018fb6, 0xff1dd001,
+ 0xc0013bd3, 0xff36f170, 0xc000f1ce, 0xff5012fe,
+ 0xc000b1a7, 0xff6934a8, 0xc0007b5f, 0xff825668,
+ 0xc0004ef5, 0xff9b783c, 0xc0002c6a, 0xffb49a1f,
+ 0xc00013bd, 0xffcdbc0f, 0xc00004ef, 0xffe6de05,
+ 0x3fffffec, 0x0003243f, 0x3fffff4e, 0x00096cbe,
+ 0x3ffffe13, 0x000fb53d, 0x3ffffc39, 0x0015fdbb,
+ 0x3ffff9c1, 0x001c463a, 0x3ffff6ac, 0x00228eb8,
+ 0x3ffff2f8, 0x0028d736, 0x3fffeea7, 0x002f1fb3,
+ 0x3fffe9b7, 0x00356830, 0x3fffe42a, 0x003bb0ac,
+ 0x3fffddff, 0x0041f928, 0x3fffd736, 0x004841a3,
+ 0x3fffcfcf, 0x004e8a1e, 0x3fffc7ca, 0x0054d297,
+ 0x3fffbf27, 0x005b1b10, 0x3fffb5e7, 0x00616388,
+ 0x3fffac08, 0x0067abff, 0x3fffa18c, 0x006df475,
+ 0x3fff9671, 0x00743cea, 0x3fff8ab9, 0x007a855e,
+ 0x3fff7e63, 0x0080cdd1, 0x3fff716e, 0x00871643,
+ 0x3fff63dc, 0x008d5eb3, 0x3fff55ac, 0x0093a722,
+ 0x3fff46df, 0x0099ef8f, 0x3fff3773, 0x00a037fb,
+ 0x3fff2769, 0x00a68065, 0x3fff16c1, 0x00acc8ce,
+ 0x3fff057c, 0x00b31135, 0x3ffef399, 0x00b9599a,
+ 0x3ffee117, 0x00bfa1fe, 0x3ffecdf8, 0x00c5ea60,
+ 0x3ffeba3b, 0x00cc32c0, 0x3ffea5e0, 0x00d27b1d,
+ 0x3ffe90e7, 0x00d8c379, 0x3ffe7b50, 0x00df0bd3,
+ 0x3ffe651b, 0x00e5542b, 0x3ffe4e49, 0x00eb9c80,
+ 0x3ffe36d8, 0x00f1e4d3, 0x3ffe1eca, 0x00f82d24,
+ 0x3ffe061e, 0x00fe7572, 0x3ffdecd3, 0x0104bdbe,
+ 0x3ffdd2eb, 0x010b0608, 0x3ffdb865, 0x01114e4e,
+ 0x3ffd9d42, 0x01179693, 0x3ffd8180, 0x011dded4,
+ 0x3ffd6520, 0x01242713, 0x3ffd4823, 0x012a6f4f,
+ 0x3ffd2a87, 0x0130b788, 0x3ffd0c4e, 0x0136ffbe,
+ 0x3ffced77, 0x013d47f1, 0x3ffcce02, 0x01439021,
+ 0x3ffcadef, 0x0149d84e, 0x3ffc8d3e, 0x01502078,
+ 0x3ffc6bef, 0x0156689f, 0x3ffc4a02, 0x015cb0c2,
+ 0x3ffc2778, 0x0162f8e2, 0x3ffc0450, 0x016940fe,
+ 0x3ffbe089, 0x016f8917, 0x3ffbbc25, 0x0175d12c,
+ 0x3ffb9723, 0x017c193e, 0x3ffb7183, 0x0182614c,
+ 0x3ffb4b46, 0x0188a957, 0x3ffb246a, 0x018ef15e,
+ 0x3ffafcf1, 0x01953960, 0x3ffad4d9, 0x019b815f,
+ 0x3ffaac24, 0x01a1c95a, 0x3ffa82d1, 0x01a81151,
+ 0x3ffa58e0, 0x01ae5944, 0x3ffa2e51, 0x01b4a133,
+ 0x3ffa0325, 0x01bae91d, 0x3ff9d75a, 0x01c13103,
+ 0x3ff9aaf2, 0x01c778e5, 0x3ff97dec, 0x01cdc0c3,
+ 0x3ff95048, 0x01d4089c, 0x3ff92206, 0x01da5070,
+ 0x3ff8f326, 0x01e09840, 0x3ff8c3a8, 0x01e6e00b,
+ 0x3ff8938d, 0x01ed27d2, 0x3ff862d4, 0x01f36f94,
+ 0x3ff8317d, 0x01f9b751, 0x3ff7ff88, 0x01ffff09,
+ 0x3ff7ccf5, 0x020646bc, 0x3ff799c4, 0x020c8e6b,
+ 0x3ff765f6, 0x0212d614, 0x3ff7318a, 0x02191db8,
+ 0x3ff6fc7f, 0x021f6557, 0x3ff6c6d7, 0x0225acf1,
+ 0x3ff69092, 0x022bf485, 0x3ff659ae, 0x02323c14,
+ 0x3ff6222d, 0x0238839e, 0x3ff5ea0d, 0x023ecb22,
+ 0x3ff5b150, 0x024512a0, 0x3ff577f6, 0x024b5a19,
+ 0x3ff53dfd, 0x0251a18c, 0x3ff50366, 0x0257e8fa,
+ 0x3ff4c832, 0x025e3062, 0x3ff48c60, 0x026477c4,
+ 0x3ff44ff0, 0x026abf20, 0x3ff412e2, 0x02710676,
+ 0x3ff3d537, 0x02774dc6, 0x3ff396ee, 0x027d9510,
+ 0x3ff35807, 0x0283dc54, 0x3ff31882, 0x028a2392,
+ 0x3ff2d85f, 0x02906ac9, 0x3ff2979f, 0x0296b1fa,
+ 0x3ff25640, 0x029cf925, 0x3ff21444, 0x02a34049,
+ 0x3ff1d1aa, 0x02a98766, 0x3ff18e73, 0x02afce7e,
+ 0x3ff14a9e, 0x02b6158e, 0x3ff1062a, 0x02bc5c98,
+ 0x3ff0c11a, 0x02c2a39b, 0x3ff07b6b, 0x02c8ea97,
+ 0x3ff0351e, 0x02cf318d, 0x3fefee34, 0x02d5787b,
+ 0x3fefa6ac, 0x02dbbf63, 0x3fef5e87, 0x02e20643,
+ 0x3fef15c3, 0x02e84d1c, 0x3feecc62, 0x02ee93ee,
+ 0x3fee8263, 0x02f4dab9, 0x3fee37c6, 0x02fb217d,
+ 0x3fedec8c, 0x03016839, 0x3feda0b4, 0x0307aeee,
+ 0x3fed543e, 0x030df59b, 0x3fed072a, 0x03143c41,
+ 0x3fecb979, 0x031a82df, 0x3fec6b2a, 0x0320c976,
+ 0x3fec1c3d, 0x03271005, 0x3febccb2, 0x032d568c,
+ 0x3feb7c8a, 0x03339d0b, 0x3feb2bc4, 0x0339e382,
+ 0x3feada60, 0x034029f2, 0x3fea885f, 0x03467059,
+ 0x3fea35c0, 0x034cb6b8, 0x3fe9e283, 0x0352fd0f,
+ 0x3fe98ea8, 0x0359435e, 0x3fe93a30, 0x035f89a5,
+ 0x3fe8e51a, 0x0365cfe3, 0x3fe88f67, 0x036c1619,
+ 0x3fe83915, 0x03725c46, 0x3fe7e226, 0x0378a26b,
+ 0x3fe78a9a, 0x037ee888, 0x3fe7326f, 0x03852e9c,
+ 0x3fe6d9a7, 0x038b74a7, 0x3fe68042, 0x0391baa9,
+ 0x3fe6263e, 0x039800a3, 0x3fe5cb9d, 0x039e4693,
+ 0x3fe5705f, 0x03a48c7b, 0x3fe51482, 0x03aad25a,
+ 0x3fe4b808, 0x03b11830, 0x3fe45af1, 0x03b75dfc,
+ 0x3fe3fd3b, 0x03bda3c0, 0x3fe39ee8, 0x03c3e97a,
+ 0x3fe33ff8, 0x03ca2f2b, 0x3fe2e06a, 0x03d074d2,
+ 0x3fe2803e, 0x03d6ba71, 0x3fe21f74, 0x03dd0005,
+ 0x3fe1be0d, 0x03e34591, 0x3fe15c09, 0x03e98b12,
+ 0x3fe0f966, 0x03efd08a, 0x3fe09626, 0x03f615f8,
+ 0x3fe03249, 0x03fc5b5d, 0x3fdfcdce, 0x0402a0b7,
+ 0x3fdf68b5, 0x0408e608, 0x3fdf02fe, 0x040f2b4f,
+ 0x3fde9caa, 0x0415708b, 0x3fde35b9, 0x041bb5be,
+ 0x3fddce2a, 0x0421fae7, 0x3fdd65fd, 0x04284005,
+ 0x3fdcfd33, 0x042e8519, 0x3fdc93cb, 0x0434ca23,
+ 0x3fdc29c5, 0x043b0f22, 0x3fdbbf22, 0x04415417,
+ 0x3fdb53e2, 0x04479901, 0x3fdae804, 0x044ddde1,
+ 0x3fda7b88, 0x045422b7, 0x3fda0e6f, 0x045a6781,
+ 0x3fd9a0b8, 0x0460ac41, 0x3fd93263, 0x0466f0f6,
+ 0x3fd8c372, 0x046d35a0, 0x3fd853e2, 0x04737a3f,
+ 0x3fd7e3b5, 0x0479bed4, 0x3fd772eb, 0x0480035d,
+ 0x3fd70183, 0x048647db, 0x3fd68f7d, 0x048c8c4e,
+ 0x3fd61cda, 0x0492d0b6, 0x3fd5a99a, 0x04991512,
+ 0x3fd535bc, 0x049f5963, 0x3fd4c140, 0x04a59da9,
+ 0x3fd44c27, 0x04abe1e3, 0x3fd3d670, 0x04b22612,
+ 0x3fd3601c, 0x04b86a35, 0x3fd2e92b, 0x04beae4c,
+ 0x3fd2719c, 0x04c4f258, 0x3fd1f96f, 0x04cb3658,
+ 0x3fd180a5, 0x04d17a4c, 0x3fd1073e, 0x04d7be34,
+ 0x3fd08d39, 0x04de0211, 0x3fd01297, 0x04e445e1,
+ 0x3fcf9757, 0x04ea89a5, 0x3fcf1b7a, 0x04f0cd5d,
+ 0x3fce9eff, 0x04f71109, 0x3fce21e7, 0x04fd54a9,
+ 0x3fcda431, 0x0503983c, 0x3fcd25de, 0x0509dbc3,
+ 0x3fcca6ee, 0x05101f3e, 0x3fcc2760, 0x051662ac,
+ 0x3fcba735, 0x051ca60d, 0x3fcb266c, 0x0522e962,
+ 0x3fcaa506, 0x05292cab, 0x3fca2303, 0x052f6fe6,
+ 0x3fc9a062, 0x0535b315, 0x3fc91d24, 0x053bf637,
+ 0x3fc89948, 0x0542394c, 0x3fc814cf, 0x05487c53,
+ 0x3fc78fb9, 0x054ebf4e, 0x3fc70a05, 0x0555023c,
+ 0x3fc683b4, 0x055b451d, 0x3fc5fcc6, 0x056187f0,
+ 0x3fc5753a, 0x0567cab6, 0x3fc4ed11, 0x056e0d6f,
+ 0x3fc4644a, 0x0574501b, 0x3fc3dae6, 0x057a92b9,
+ 0x3fc350e5, 0x0580d549, 0x3fc2c647, 0x058717cc,
+ 0x3fc23b0b, 0x058d5a41, 0x3fc1af32, 0x05939ca9,
+ 0x3fc122bb, 0x0599df03, 0x3fc095a8, 0x05a0214f,
+ 0x3fc007f6, 0x05a6638d, 0x3fbf79a8, 0x05aca5bd,
+ 0x3fbeeabc, 0x05b2e7df, 0x3fbe5b33, 0x05b929f3,
+ 0x3fbdcb0d, 0x05bf6bf9, 0x3fbd3a4a, 0x05c5adf1,
+ 0x3fbca8e9, 0x05cbefda, 0x3fbc16eb, 0x05d231b5,
+ 0x3fbb8450, 0x05d87382, 0x3fbaf117, 0x05deb541,
+ 0x3fba5d41, 0x05e4f6f1, 0x3fb9c8ce, 0x05eb3892,
+ 0x3fb933be, 0x05f17a25, 0x3fb89e11, 0x05f7bba9,
+ 0x3fb807c6, 0x05fdfd1f, 0x3fb770de, 0x06043e85,
+ 0x3fb6d959, 0x060a7fdd, 0x3fb64136, 0x0610c126,
+ 0x3fb5a877, 0x06170260, 0x3fb50f1a, 0x061d438b,
+ 0x3fb47520, 0x062384a6, 0x3fb3da89, 0x0629c5b3,
+ 0x3fb33f54, 0x063006b1, 0x3fb2a383, 0x0636479f,
+ 0x3fb20714, 0x063c887e, 0x3fb16a08, 0x0642c94d,
+ 0x3fb0cc5f, 0x06490a0d, 0x3fb02e19, 0x064f4abe,
+ 0x3faf8f36, 0x06558b5f, 0x3faeefb6, 0x065bcbf0,
+ 0x3fae4f98, 0x06620c72, 0x3fadaedd, 0x06684ce3,
+ 0x3fad0d86, 0x066e8d45, 0x3fac6b91, 0x0674cd98,
+ 0x3fabc8ff, 0x067b0dda, 0x3fab25d0, 0x06814e0c,
+ 0x3faa8203, 0x06878e2e, 0x3fa9dd9a, 0x068dce41,
+ 0x3fa93894, 0x06940e42, 0x3fa892f0, 0x069a4e34,
+ 0x3fa7ecb0, 0x06a08e16, 0x3fa745d2, 0x06a6cde7,
+ 0x3fa69e57, 0x06ad0da7, 0x3fa5f640, 0x06b34d58,
+ 0x3fa54d8b, 0x06b98cf7, 0x3fa4a439, 0x06bfcc86,
+ 0x3fa3fa4a, 0x06c60c05, 0x3fa34fbe, 0x06cc4b72,
+ 0x3fa2a495, 0x06d28acf, 0x3fa1f8d0, 0x06d8ca1b,
+ 0x3fa14c6d, 0x06df0957, 0x3fa09f6d, 0x06e54881,
+ 0x3f9ff1d0, 0x06eb879a, 0x3f9f4396, 0x06f1c6a2,
+ 0x3f9e94bf, 0x06f80599, 0x3f9de54b, 0x06fe447f,
+ 0x3f9d353a, 0x07048354, 0x3f9c848d, 0x070ac217,
+ 0x3f9bd342, 0x071100c9, 0x3f9b215a, 0x07173f69,
+ 0x3f9a6ed6, 0x071d7df8, 0x3f99bbb4, 0x0723bc75,
+ 0x3f9907f6, 0x0729fae1, 0x3f98539a, 0x0730393b,
+ 0x3f979ea2, 0x07367784, 0x3f96e90d, 0x073cb5ba,
+ 0x3f9632da, 0x0742f3df, 0x3f957c0b, 0x074931f2,
+ 0x3f94c4a0, 0x074f6ff3, 0x3f940c97, 0x0755ade1,
+ 0x3f9353f1, 0x075bebbe, 0x3f929aaf, 0x07622988,
+ 0x3f91e0cf, 0x07686741, 0x3f912653, 0x076ea4e7,
+ 0x3f906b3a, 0x0774e27a, 0x3f8faf84, 0x077b1ffc,
+ 0x3f8ef331, 0x07815d6b, 0x3f8e3642, 0x07879ac7,
+ 0x3f8d78b5, 0x078dd811, 0x3f8cba8c, 0x07941548,
+ 0x3f8bfbc6, 0x079a526c, 0x3f8b3c63, 0x07a08f7e,
+ 0x3f8a7c64, 0x07a6cc7d, 0x3f89bbc7, 0x07ad0968,
+ 0x3f88fa8e, 0x07b34641, 0x3f8838b8, 0x07b98307,
+ 0x3f877645, 0x07bfbfba, 0x3f86b336, 0x07c5fc5a,
+ 0x3f85ef8a, 0x07cc38e7, 0x3f852b41, 0x07d27560,
+ 0x3f84665b, 0x07d8b1c6, 0x3f83a0d9, 0x07deee19,
+ 0x3f82daba, 0x07e52a58, 0x3f8213fe, 0x07eb6684,
+ 0x3f814ca6, 0x07f1a29c, 0x3f8084b0, 0x07f7dea1,
+ 0x3f7fbc1f, 0x07fe1a92, 0x3f7ef2f0, 0x0804566f,
+ 0x3f7e2925, 0x080a9239, 0x3f7d5ebd, 0x0810cdef,
+ 0x3f7c93b9, 0x08170990, 0x3f7bc817, 0x081d451e,
+ 0x3f7afbda, 0x08238098, 0x3f7a2eff, 0x0829bbfe,
+ 0x3f796188, 0x082ff74f, 0x3f789374, 0x0836328d,
+ 0x3f77c4c4, 0x083c6db6, 0x3f76f577, 0x0842a8cb,
+ 0x3f76258e, 0x0848e3cb, 0x3f755508, 0x084f1eb7,
+ 0x3f7483e5, 0x0855598f, 0x3f73b226, 0x085b9451,
+ 0x3f72dfca, 0x0861cf00, 0x3f720cd2, 0x08680999,
+ 0x3f71393d, 0x086e441e, 0x3f70650b, 0x08747e8e,
+ 0x3f6f903d, 0x087ab8e9, 0x3f6ebad3, 0x0880f330,
+ 0x3f6de4cc, 0x08872d61, 0x3f6d0e29, 0x088d677d,
+ 0x3f6c36e9, 0x0893a184, 0x3f6b5f0c, 0x0899db76,
+ 0x3f6a8693, 0x08a01553, 0x3f69ad7e, 0x08a64f1b,
+ 0x3f68d3cc, 0x08ac88cd, 0x3f67f97d, 0x08b2c26a,
+ 0x3f671e93, 0x08b8fbf1, 0x3f66430b, 0x08bf3563,
+ 0x3f6566e8, 0x08c56ebf, 0x3f648a28, 0x08cba805,
+ 0x3f63accb, 0x08d1e136, 0x3f62ced2, 0x08d81a51,
+ 0x3f61f03d, 0x08de5356, 0x3f61110b, 0x08e48c46,
+ 0x3f60313d, 0x08eac51f, 0x3f5f50d3, 0x08f0fde3,
+ 0x3f5e6fcc, 0x08f73690, 0x3f5d8e29, 0x08fd6f27,
+ 0x3f5cabe9, 0x0903a7a8, 0x3f5bc90d, 0x0909e013,
+ 0x3f5ae595, 0x09101868, 0x3f5a0181, 0x091650a6,
+ 0x3f591cd0, 0x091c88cd, 0x3f583783, 0x0922c0df,
+ 0x3f575199, 0x0928f8d9, 0x3f566b14, 0x092f30bd,
+ 0x3f5583f2, 0x0935688b, 0x3f549c33, 0x093ba042,
+ 0x3f53b3d9, 0x0941d7e2, 0x3f52cae2, 0x09480f6b,
+ 0x3f51e14f, 0x094e46dd, 0x3f50f720, 0x09547e38,
+ 0x3f500c54, 0x095ab57c, 0x3f4f20ed, 0x0960eca9,
+ 0x3f4e34e9, 0x096723bf, 0x3f4d4848, 0x096d5abe,
+ 0x3f4c5b0c, 0x097391a6, 0x3f4b6d34, 0x0979c876,
+ 0x3f4a7ebf, 0x097fff2f, 0x3f498fae, 0x098635d0,
+ 0x3f48a001, 0x098c6c5a, 0x3f47afb8, 0x0992a2cc,
+ 0x3f46bed3, 0x0998d927, 0x3f45cd51, 0x099f0f6a,
+ 0x3f44db34, 0x09a54595, 0x3f43e87a, 0x09ab7ba9,
+ 0x3f42f525, 0x09b1b1a4, 0x3f420133, 0x09b7e788,
+ 0x3f410ca5, 0x09be1d54, 0x3f40177b, 0x09c45308,
+ 0x3f3f21b5, 0x09ca88a3, 0x3f3e2b53, 0x09d0be27,
+ 0x3f3d3455, 0x09d6f392, 0x3f3c3cba, 0x09dd28e5,
+ 0x3f3b4484, 0x09e35e1f, 0x3f3a4bb2, 0x09e99342,
+ 0x3f395244, 0x09efc84b, 0x3f38583a, 0x09f5fd3d,
+ 0x3f375d93, 0x09fc3215, 0x3f366251, 0x0a0266d5,
+ 0x3f356673, 0x0a089b7c, 0x3f3469f9, 0x0a0ed00b,
+ 0x3f336ce3, 0x0a150481, 0x3f326f31, 0x0a1b38de,
+ 0x3f3170e3, 0x0a216d22, 0x3f3071f9, 0x0a27a14d,
+ 0x3f2f7273, 0x0a2dd55e, 0x3f2e7252, 0x0a340957,
+ 0x3f2d7194, 0x0a3a3d37, 0x3f2c703a, 0x0a4070fd,
+ 0x3f2b6e45, 0x0a46a4aa, 0x3f2a6bb4, 0x0a4cd83e,
+ 0x3f296887, 0x0a530bb8, 0x3f2864be, 0x0a593f19,
+ 0x3f276059, 0x0a5f7260, 0x3f265b59, 0x0a65a58e,
+ 0x3f2555bc, 0x0a6bd8a2, 0x3f244f84, 0x0a720b9c,
+ 0x3f2348b0, 0x0a783e7d, 0x3f224140, 0x0a7e7143,
+ 0x3f213935, 0x0a84a3f0, 0x3f20308d, 0x0a8ad683,
+ 0x3f1f274a, 0x0a9108fc, 0x3f1e1d6c, 0x0a973b5b,
+ 0x3f1d12f1, 0x0a9d6d9f, 0x3f1c07db, 0x0aa39fca,
+ 0x3f1afc29, 0x0aa9d1da, 0x3f19efdb, 0x0ab003d0,
+ 0x3f18e2f2, 0x0ab635ab, 0x3f17d56d, 0x0abc676d,
+ 0x3f16c74c, 0x0ac29913, 0x3f15b88f, 0x0ac8ca9f,
+ 0x3f14a937, 0x0acefc11, 0x3f139944, 0x0ad52d67,
+ 0x3f1288b4, 0x0adb5ea3, 0x3f117789, 0x0ae18fc5,
+ 0x3f1065c3, 0x0ae7c0cb, 0x3f0f5360, 0x0aedf1b7,
+ 0x3f0e4063, 0x0af42287, 0x3f0d2cc9, 0x0afa533d,
+ 0x3f0c1894, 0x0b0083d7, 0x3f0b03c4, 0x0b06b456,
+ 0x3f09ee58, 0x0b0ce4ba, 0x3f08d850, 0x0b131503,
+ 0x3f07c1ad, 0x0b194531, 0x3f06aa6e, 0x0b1f7543,
+ 0x3f059294, 0x0b25a539, 0x3f047a1e, 0x0b2bd515,
+ 0x3f03610d, 0x0b3204d4, 0x3f024760, 0x0b383478,
+ 0x3f012d18, 0x0b3e6400, 0x3f001235, 0x0b44936d,
+ 0x3efef6b6, 0x0b4ac2be, 0x3efdda9b, 0x0b50f1f3,
+ 0x3efcbde5, 0x0b57210b, 0x3efba094, 0x0b5d5008,
+ 0x3efa82a7, 0x0b637ee9, 0x3ef9641f, 0x0b69adae,
+ 0x3ef844fc, 0x0b6fdc57, 0x3ef7253d, 0x0b760ae3,
+ 0x3ef604e3, 0x0b7c3953, 0x3ef4e3ed, 0x0b8267a7,
+ 0x3ef3c25c, 0x0b8895df, 0x3ef2a030, 0x0b8ec3fa,
+ 0x3ef17d69, 0x0b94f1f8, 0x3ef05a06, 0x0b9b1fda,
+ 0x3eef3608, 0x0ba14d9f, 0x3eee116e, 0x0ba77b48,
+ 0x3eecec39, 0x0bada8d4, 0x3eebc669, 0x0bb3d642,
+ 0x3eea9ffe, 0x0bba0395, 0x3ee978f8, 0x0bc030ca,
+ 0x3ee85156, 0x0bc65de2, 0x3ee72919, 0x0bcc8add,
+ 0x3ee60041, 0x0bd2b7bb, 0x3ee4d6ce, 0x0bd8e47c,
+ 0x3ee3acbf, 0x0bdf111f, 0x3ee28216, 0x0be53da6,
+ 0x3ee156d1, 0x0beb6a0f, 0x3ee02af1, 0x0bf1965a,
+ 0x3edefe76, 0x0bf7c288, 0x3eddd15f, 0x0bfdee99,
+ 0x3edca3ae, 0x0c041a8c, 0x3edb7562, 0x0c0a4661,
+ 0x3eda467a, 0x0c107219, 0x3ed916f7, 0x0c169db3,
+ 0x3ed7e6da, 0x0c1cc92f, 0x3ed6b621, 0x0c22f48d,
+ 0x3ed584cd, 0x0c291fcd, 0x3ed452de, 0x0c2f4aef,
+ 0x3ed32054, 0x0c3575f3, 0x3ed1ed2f, 0x0c3ba0d9,
+ 0x3ed0b970, 0x0c41cba1, 0x3ecf8515, 0x0c47f64a,
+ 0x3ece501f, 0x0c4e20d6, 0x3ecd1a8e, 0x0c544b43,
+ 0x3ecbe462, 0x0c5a7591, 0x3ecaad9b, 0x0c609fc1,
+ 0x3ec9763a, 0x0c66c9d3, 0x3ec83e3d, 0x0c6cf3c5,
+ 0x3ec705a6, 0x0c731d9a, 0x3ec5cc73, 0x0c79474f,
+ 0x3ec492a6, 0x0c7f70e6, 0x3ec3583e, 0x0c859a5e,
+ 0x3ec21d3b, 0x0c8bc3b7, 0x3ec0e19d, 0x0c91ecf1,
+ 0x3ebfa564, 0x0c98160c, 0x3ebe6891, 0x0c9e3f07,
+ 0x3ebd2b22, 0x0ca467e4, 0x3ebbed19, 0x0caa90a2,
+ 0x3ebaae75, 0x0cb0b940, 0x3eb96f36, 0x0cb6e1bf,
+ 0x3eb82f5d, 0x0cbd0a1f, 0x3eb6eee9, 0x0cc3325f,
+ 0x3eb5adda, 0x0cc95a80, 0x3eb46c30, 0x0ccf8281,
+ 0x3eb329ec, 0x0cd5aa62, 0x3eb1e70d, 0x0cdbd224,
+ 0x3eb0a393, 0x0ce1f9c7, 0x3eaf5f7e, 0x0ce82149,
+ 0x3eae1acf, 0x0cee48ab, 0x3eacd585, 0x0cf46fee,
+ 0x3eab8fa1, 0x0cfa9711, 0x3eaa4922, 0x0d00be13,
+ 0x3ea90208, 0x0d06e4f6, 0x3ea7ba54, 0x0d0d0bb8,
+ 0x3ea67205, 0x0d13325b, 0x3ea5291b, 0x0d1958dd,
+ 0x3ea3df97, 0x0d1f7f3e, 0x3ea29578, 0x0d25a57f,
+ 0x3ea14abf, 0x0d2bcba0, 0x3e9fff6b, 0x0d31f1a1,
+ 0x3e9eb37d, 0x0d381780, 0x3e9d66f4, 0x0d3e3d40,
+ 0x3e9c19d1, 0x0d4462de, 0x3e9acc13, 0x0d4a885c,
+ 0x3e997dbb, 0x0d50adb9, 0x3e982ec9, 0x0d56d2f5,
+ 0x3e96df3b, 0x0d5cf810, 0x3e958f14, 0x0d631d0a,
+ 0x3e943e52, 0x0d6941e3, 0x3e92ecf6, 0x0d6f669b,
+ 0x3e919aff, 0x0d758b32, 0x3e90486e, 0x0d7bafa8,
+ 0x3e8ef542, 0x0d81d3fc, 0x3e8da17c, 0x0d87f830,
+ 0x3e8c4d1c, 0x0d8e1c41, 0x3e8af821, 0x0d944032,
+ 0x3e89a28d, 0x0d9a6400, 0x3e884c5d, 0x0da087ae,
+ 0x3e86f594, 0x0da6ab39, 0x3e859e30, 0x0daccea3,
+ 0x3e844632, 0x0db2f1eb, 0x3e82ed9a, 0x0db91512,
+ 0x3e819467, 0x0dbf3816, 0x3e803a9b, 0x0dc55af9,
+ 0x3e7ee034, 0x0dcb7db9, 0x3e7d8533, 0x0dd1a058,
+ 0x3e7c2997, 0x0dd7c2d4, 0x3e7acd62, 0x0ddde52f,
+ 0x3e797092, 0x0de40767, 0x3e781328, 0x0dea297d,
+ 0x3e76b524, 0x0df04b70, 0x3e755686, 0x0df66d41,
+ 0x3e73f74e, 0x0dfc8ef0, 0x3e72977c, 0x0e02b07c,
+ 0x3e71370f, 0x0e08d1e6, 0x3e6fd609, 0x0e0ef32d,
+ 0x3e6e7468, 0x0e151451, 0x3e6d122e, 0x0e1b3552,
+ 0x3e6baf59, 0x0e215631, 0x3e6a4beb, 0x0e2776ed,
+ 0x3e68e7e2, 0x0e2d9786, 0x3e67833f, 0x0e33b7fc,
+ 0x3e661e03, 0x0e39d84f, 0x3e64b82c, 0x0e3ff87f,
+ 0x3e6351bc, 0x0e46188b, 0x3e61eab2, 0x0e4c3875,
+ 0x3e60830d, 0x0e52583b, 0x3e5f1acf, 0x0e5877de,
+ 0x3e5db1f7, 0x0e5e975d, 0x3e5c4885, 0x0e64b6b9,
+ 0x3e5ade79, 0x0e6ad5f1, 0x3e5973d3, 0x0e70f506,
+ 0x3e580894, 0x0e7713f7, 0x3e569cba, 0x0e7d32c5,
+ 0x3e553047, 0x0e83516f, 0x3e53c33a, 0x0e896ff5,
+ 0x3e525593, 0x0e8f8e57, 0x3e50e752, 0x0e95ac95,
+ 0x3e4f7878, 0x0e9bcaaf, 0x3e4e0904, 0x0ea1e8a5,
+ 0x3e4c98f6, 0x0ea80677, 0x3e4b284f, 0x0eae2425,
+ 0x3e49b70d, 0x0eb441af, 0x3e484533, 0x0eba5f14,
+ 0x3e46d2be, 0x0ec07c55, 0x3e455fb0, 0x0ec69972,
+ 0x3e43ec08, 0x0eccb66a, 0x3e4277c6, 0x0ed2d33e,
+ 0x3e4102eb, 0x0ed8efed, 0x3e3f8d76, 0x0edf0c77,
+ 0x3e3e1768, 0x0ee528dd, 0x3e3ca0c0, 0x0eeb451e,
+ 0x3e3b297e, 0x0ef1613a, 0x3e39b1a3, 0x0ef77d32,
+ 0x3e38392f, 0x0efd9904, 0x3e36c021, 0x0f03b4b1,
+ 0x3e354679, 0x0f09d03a, 0x3e33cc38, 0x0f0feb9d,
+ 0x3e32515d, 0x0f1606db, 0x3e30d5e9, 0x0f1c21f4,
+ 0x3e2f59dc, 0x0f223ce8, 0x3e2ddd35, 0x0f2857b6,
+ 0x3e2c5ff5, 0x0f2e725f, 0x3e2ae21b, 0x0f348ce2,
+ 0x3e2963a8, 0x0f3aa740, 0x3e27e49b, 0x0f40c178,
+ 0x3e2664f5, 0x0f46db8b, 0x3e24e4b6, 0x0f4cf578,
+ 0x3e2363dd, 0x0f530f3f, 0x3e21e26c, 0x0f5928e1,
+ 0x3e206060, 0x0f5f425c, 0x3e1eddbc, 0x0f655bb2,
+ 0x3e1d5a7e, 0x0f6b74e1, 0x3e1bd6a7, 0x0f718deb,
+ 0x3e1a5237, 0x0f77a6ce, 0x3e18cd2d, 0x0f7dbf8c,
+ 0x3e17478a, 0x0f83d823, 0x3e15c14f, 0x0f89f094,
+ 0x3e143a79, 0x0f9008de, 0x3e12b30b, 0x0f962102,
+ 0x3e112b04, 0x0f9c3900, 0x3e0fa263, 0x0fa250d7,
+ 0x3e0e1929, 0x0fa86887, 0x3e0c8f57, 0x0fae8011,
+ 0x3e0b04eb, 0x0fb49774, 0x3e0979e6, 0x0fbaaeb1,
+ 0x3e07ee47, 0x0fc0c5c6, 0x3e066210, 0x0fc6dcb5,
+ 0x3e04d540, 0x0fccf37d, 0x3e0347d7, 0x0fd30a1e,
+ 0x3e01b9d5, 0x0fd92098, 0x3e002b39, 0x0fdf36ea,
+ 0x3dfe9c05, 0x0fe54d16, 0x3dfd0c38, 0x0feb631a,
+ 0x3dfb7bd2, 0x0ff178f7, 0x3df9ead3, 0x0ff78ead,
+ 0x3df8593b, 0x0ffda43b, 0x3df6c70a, 0x1003b9a2,
+ 0x3df53440, 0x1009cee1, 0x3df3a0de, 0x100fe3f9,
+ 0x3df20ce2, 0x1015f8e9, 0x3df0784e, 0x101c0db1,
+ 0x3deee321, 0x10222252, 0x3ded4d5b, 0x102836cb,
+ 0x3debb6fc, 0x102e4b1c, 0x3dea2004, 0x10345f45,
+ 0x3de88874, 0x103a7346, 0x3de6f04b, 0x1040871f,
+ 0x3de55789, 0x10469ad0, 0x3de3be2e, 0x104cae59,
+ 0x3de2243b, 0x1052c1b9, 0x3de089af, 0x1058d4f2,
+ 0x3ddeee8a, 0x105ee802, 0x3ddd52cd, 0x1064fae9,
+ 0x3ddbb677, 0x106b0da8, 0x3dda1989, 0x1071203f,
+ 0x3dd87c02, 0x107732ad, 0x3dd6dde2, 0x107d44f2,
+ 0x3dd53f29, 0x1083570f, 0x3dd39fd8, 0x10896903,
+ 0x3dd1ffef, 0x108f7ace, 0x3dd05f6d, 0x10958c71,
+ 0x3dcebe52, 0x109b9dea, 0x3dcd1c9f, 0x10a1af3a,
+ 0x3dcb7a54, 0x10a7c062, 0x3dc9d770, 0x10add160,
+ 0x3dc833f3, 0x10b3e235, 0x3dc68fdf, 0x10b9f2e1,
+ 0x3dc4eb31, 0x10c00364, 0x3dc345eb, 0x10c613bd,
+ 0x3dc1a00d, 0x10cc23ed, 0x3dbff997, 0x10d233f4,
+ 0x3dbe5288, 0x10d843d1, 0x3dbcaae1, 0x10de5384,
+ 0x3dbb02a1, 0x10e4630e, 0x3db959c9, 0x10ea726e,
+ 0x3db7b059, 0x10f081a4, 0x3db60651, 0x10f690b1,
+ 0x3db45bb0, 0x10fc9f94, 0x3db2b077, 0x1102ae4c,
+ 0x3db104a6, 0x1108bcdb, 0x3daf583d, 0x110ecb40,
+ 0x3dadab3b, 0x1114d97b, 0x3dabfda1, 0x111ae78b,
+ 0x3daa4f6f, 0x1120f572, 0x3da8a0a5, 0x1127032e,
+ 0x3da6f143, 0x112d10c0, 0x3da54149, 0x11331e27,
+ 0x3da390b6, 0x11392b64, 0x3da1df8c, 0x113f3876,
+ 0x3da02dc9, 0x1145455e, 0x3d9e7b6e, 0x114b521c,
+ 0x3d9cc87b, 0x11515eae, 0x3d9b14f1, 0x11576b16,
+ 0x3d9960ce, 0x115d7753, 0x3d97ac13, 0x11638366,
+ 0x3d95f6c1, 0x11698f4d, 0x3d9440d6, 0x116f9b09,
+ 0x3d928a53, 0x1175a69b, 0x3d90d339, 0x117bb201,
+ 0x3d8f1b86, 0x1181bd3c, 0x3d8d633c, 0x1187c84c,
+ 0x3d8baa5a, 0x118dd331, 0x3d89f0e0, 0x1193ddea,
+ 0x3d8836ce, 0x1199e878, 0x3d867c24, 0x119ff2db,
+ 0x3d84c0e2, 0x11a5fd12, 0x3d830509, 0x11ac071e,
+ 0x3d814898, 0x11b210fe, 0x3d7f8b8f, 0x11b81ab2,
+ 0x3d7dcdef, 0x11be243a, 0x3d7c0fb6, 0x11c42d97,
+ 0x3d7a50e6, 0x11ca36c8, 0x3d78917e, 0x11d03fcd,
+ 0x3d76d17f, 0x11d648a6, 0x3d7510e8, 0x11dc5153,
+ 0x3d734fb9, 0x11e259d4, 0x3d718df3, 0x11e86229,
+ 0x3d6fcb95, 0x11ee6a52, 0x3d6e08a0, 0x11f4724f,
+ 0x3d6c4513, 0x11fa7a1f, 0x3d6a80ee, 0x120081c3,
+ 0x3d68bc32, 0x1206893a, 0x3d66f6de, 0x120c9085,
+ 0x3d6530f3, 0x121297a3, 0x3d636a70, 0x12189e95,
+ 0x3d61a356, 0x121ea55a, 0x3d5fdba4, 0x1224abf3,
+ 0x3d5e135b, 0x122ab25e, 0x3d5c4a7b, 0x1230b89d,
+ 0x3d5a8103, 0x1236beaf, 0x3d58b6f4, 0x123cc494,
+ 0x3d56ec4d, 0x1242ca4c, 0x3d55210f, 0x1248cfd7,
+ 0x3d53553a, 0x124ed535, 0x3d5188cd, 0x1254da66,
+ 0x3d4fbbc9, 0x125adf69, 0x3d4dee2e, 0x1260e43f,
+ 0x3d4c1ffc, 0x1266e8e8, 0x3d4a5132, 0x126ced63,
+ 0x3d4881d1, 0x1272f1b1, 0x3d46b1d9, 0x1278f5d2,
+ 0x3d44e14a, 0x127ef9c5, 0x3d431023, 0x1284fd8a,
+ 0x3d413e65, 0x128b0121, 0x3d3f6c11, 0x1291048b,
+ 0x3d3d9925, 0x129707c7, 0x3d3bc5a2, 0x129d0ad5,
+ 0x3d39f188, 0x12a30db5, 0x3d381cd6, 0x12a91067,
+ 0x3d36478e, 0x12af12ec, 0x3d3471af, 0x12b51542,
+ 0x3d329b39, 0x12bb1769, 0x3d30c42b, 0x12c11963,
+ 0x3d2eec87, 0x12c71b2e, 0x3d2d144c, 0x12cd1ccc,
+ 0x3d2b3b7a, 0x12d31e3a, 0x3d296210, 0x12d91f7a,
+ 0x3d278810, 0x12df208c, 0x3d25ad7a, 0x12e5216f,
+ 0x3d23d24c, 0x12eb2224, 0x3d21f687, 0x12f122aa,
+ 0x3d201a2c, 0x12f72301, 0x3d1e3d39, 0x12fd2329,
+ 0x3d1c5fb0, 0x13032322, 0x3d1a8190, 0x130922ed,
+ 0x3d18a2da, 0x130f2288, 0x3d16c38c, 0x131521f5,
+ 0x3d14e3a8, 0x131b2132, 0x3d13032d, 0x13212041,
+ 0x3d11221c, 0x13271f20, 0x3d0f4074, 0x132d1dd0,
+ 0x3d0d5e35, 0x13331c50, 0x3d0b7b5f, 0x13391aa1,
+ 0x3d0997f3, 0x133f18c3, 0x3d07b3f0, 0x134516b5,
+ 0x3d05cf57, 0x134b1478, 0x3d03ea27, 0x1351120b,
+ 0x3d020461, 0x13570f6f, 0x3d001e04, 0x135d0ca2,
+ 0x3cfe3710, 0x136309a6, 0x3cfc4f86, 0x1369067a,
+ 0x3cfa6766, 0x136f031f, 0x3cf87eaf, 0x1374ff93,
+ 0x3cf69561, 0x137afbd7, 0x3cf4ab7e, 0x1380f7eb,
+ 0x3cf2c103, 0x1386f3cf, 0x3cf0d5f3, 0x138cef83,
+ 0x3ceeea4c, 0x1392eb07, 0x3cecfe0f, 0x1398e65a,
+ 0x3ceb113b, 0x139ee17d, 0x3ce923d1, 0x13a4dc70,
+ 0x3ce735d1, 0x13aad732, 0x3ce5473a, 0x13b0d1c3,
+ 0x3ce3580e, 0x13b6cc24, 0x3ce1684b, 0x13bcc655,
+ 0x3cdf77f2, 0x13c2c054, 0x3cdd8702, 0x13c8ba23,
+ 0x3cdb957d, 0x13ceb3c1, 0x3cd9a361, 0x13d4ad2f,
+ 0x3cd7b0af, 0x13daa66b, 0x3cd5bd67, 0x13e09f76,
+ 0x3cd3c989, 0x13e69850, 0x3cd1d515, 0x13ec90fa,
+ 0x3ccfe00b, 0x13f28972, 0x3ccdea6a, 0x13f881b8,
+ 0x3ccbf434, 0x13fe79ce, 0x3cc9fd68, 0x140471b2,
+ 0x3cc80605, 0x140a6965, 0x3cc60e0d, 0x141060e6,
+ 0x3cc4157f, 0x14165836, 0x3cc21c5b, 0x141c4f54,
+ 0x3cc022a0, 0x14224641, 0x3cbe2850, 0x14283cfc,
+ 0x3cbc2d6b, 0x142e3385, 0x3cba31ef, 0x143429dc,
+ 0x3cb835dd, 0x143a2002, 0x3cb63936, 0x144015f5,
+ 0x3cb43bf9, 0x14460bb7, 0x3cb23e26, 0x144c0147,
+ 0x3cb03fbd, 0x1451f6a4, 0x3cae40bf, 0x1457ebd0,
+ 0x3cac412a, 0x145de0c9, 0x3caa4100, 0x1463d590,
+ 0x3ca84041, 0x1469ca25, 0x3ca63eec, 0x146fbe87,
+ 0x3ca43d01, 0x1475b2b7, 0x3ca23a80, 0x147ba6b4,
+ 0x3ca0376a, 0x14819a7f, 0x3c9e33be, 0x14878e18,
+ 0x3c9c2f7d, 0x148d817d, 0x3c9a2aa6, 0x149374b0,
+ 0x3c98253a, 0x149967b0, 0x3c961f38, 0x149f5a7e,
+ 0x3c9418a1, 0x14a54d18, 0x3c921174, 0x14ab3f7f,
+ 0x3c9009b2, 0x14b131b4, 0x3c8e015a, 0x14b723b5,
+ 0x3c8bf86d, 0x14bd1584, 0x3c89eeea, 0x14c3071f,
+ 0x3c87e4d2, 0x14c8f887, 0x3c85da25, 0x14cee9bb,
+ 0x3c83cee2, 0x14d4dabd, 0x3c81c30a, 0x14dacb8b,
+ 0x3c7fb69d, 0x14e0bc25, 0x3c7da99b, 0x14e6ac8c,
+ 0x3c7b9c03, 0x14ec9cbf, 0x3c798dd6, 0x14f28cbf,
+ 0x3c777f14, 0x14f87c8b, 0x3c756fbd, 0x14fe6c23,
+ 0x3c735fd0, 0x15045b88, 0x3c714f4e, 0x150a4ab9,
+ 0x3c6f3e37, 0x151039b5, 0x3c6d2c8b, 0x1516287e,
+ 0x3c6b1a4a, 0x151c1713, 0x3c690774, 0x15220573,
+ 0x3c66f409, 0x1527f3a0, 0x3c64e009, 0x152de198,
+ 0x3c62cb74, 0x1533cf5c, 0x3c60b649, 0x1539bcec,
+ 0x3c5ea08a, 0x153faa47, 0x3c5c8a36, 0x1545976e,
+ 0x3c5a734d, 0x154b8461, 0x3c585bcf, 0x1551711e,
+ 0x3c5643bc, 0x15575da8, 0x3c542b14, 0x155d49fc,
+ 0x3c5211d8, 0x1563361c, 0x3c4ff806, 0x15692207,
+ 0x3c4ddda0, 0x156f0dbe, 0x3c4bc2a5, 0x1574f93f,
+ 0x3c49a715, 0x157ae48c, 0x3c478af0, 0x1580cfa3,
+ 0x3c456e37, 0x1586ba86, 0x3c4350e9, 0x158ca533,
+ 0x3c413306, 0x15928fab, 0x3c3f148f, 0x159879ee,
+ 0x3c3cf582, 0x159e63fc, 0x3c3ad5e2, 0x15a44dd4,
+ 0x3c38b5ac, 0x15aa3777, 0x3c3694e2, 0x15b020e4,
+ 0x3c347384, 0x15b60a1c, 0x3c325191, 0x15bbf31f,
+ 0x3c302f09, 0x15c1dbeb, 0x3c2e0bed, 0x15c7c482,
+ 0x3c2be83d, 0x15cdace4, 0x3c29c3f8, 0x15d3950f,
+ 0x3c279f1e, 0x15d97d05, 0x3c2579b0, 0x15df64c5,
+ 0x3c2353ae, 0x15e54c4e, 0x3c212d17, 0x15eb33a2,
+ 0x3c1f05ec, 0x15f11ac0, 0x3c1cde2d, 0x15f701a7,
+ 0x3c1ab5d9, 0x15fce859, 0x3c188cf1, 0x1602ced4,
+ 0x3c166375, 0x1608b518, 0x3c143964, 0x160e9b27,
+ 0x3c120ebf, 0x161480ff, 0x3c0fe386, 0x161a66a0,
+ 0x3c0db7b9, 0x16204c0b, 0x3c0b8b58, 0x16263140,
+ 0x3c095e62, 0x162c163d, 0x3c0730d9, 0x1631fb04,
+ 0x3c0502bb, 0x1637df95, 0x3c02d409, 0x163dc3ee,
+ 0x3c00a4c3, 0x1643a810, 0x3bfe74e9, 0x16498bfc,
+ 0x3bfc447b, 0x164f6fb1, 0x3bfa1379, 0x1655532e,
+ 0x3bf7e1e3, 0x165b3675, 0x3bf5afb9, 0x16611984,
+ 0x3bf37cfb, 0x1666fc5c, 0x3bf149a9, 0x166cdefd,
+ 0x3bef15c3, 0x1672c166, 0x3bece149, 0x1678a398,
+ 0x3beaac3c, 0x167e8593, 0x3be8769b, 0x16846756,
+ 0x3be64065, 0x168a48e2, 0x3be4099c, 0x16902a36,
+ 0x3be1d240, 0x16960b52, 0x3bdf9a4f, 0x169bec37,
+ 0x3bdd61cb, 0x16a1cce3, 0x3bdb28b3, 0x16a7ad58,
+ 0x3bd8ef07, 0x16ad8d95, 0x3bd6b4c8, 0x16b36d9a,
+ 0x3bd479f5, 0x16b94d67, 0x3bd23e8f, 0x16bf2cfc,
+ 0x3bd00295, 0x16c50c59, 0x3bcdc607, 0x16caeb7e,
+ 0x3bcb88e5, 0x16d0ca6a, 0x3bc94b31, 0x16d6a91f,
+ 0x3bc70ce8, 0x16dc879a, 0x3bc4ce0c, 0x16e265de,
+ 0x3bc28e9d, 0x16e843e9, 0x3bc04e9a, 0x16ee21bb,
+ 0x3bbe0e04, 0x16f3ff55, 0x3bbbccda, 0x16f9dcb6,
+ 0x3bb98b1d, 0x16ffb9df, 0x3bb748cd, 0x170596ce,
+ 0x3bb505e9, 0x170b7385, 0x3bb2c272, 0x17115003,
+ 0x3bb07e68, 0x17172c49, 0x3bae39ca, 0x171d0855,
+ 0x3babf499, 0x1722e428, 0x3ba9aed5, 0x1728bfc2,
+ 0x3ba7687e, 0x172e9b23, 0x3ba52194, 0x1734764b,
+ 0x3ba2da16, 0x173a5139, 0x3ba09205, 0x17402bee,
+ 0x3b9e4961, 0x1746066a, 0x3b9c002a, 0x174be0ad,
+ 0x3b99b660, 0x1751bab5, 0x3b976c03, 0x17579485,
+ 0x3b952112, 0x175d6e1b, 0x3b92d58f, 0x17634777,
+ 0x3b908979, 0x17692099, 0x3b8e3cd0, 0x176ef982,
+ 0x3b8bef94, 0x1774d231, 0x3b89a1c5, 0x177aaaa6,
+ 0x3b875363, 0x178082e1, 0x3b85046e, 0x17865ae2,
+ 0x3b82b4e6, 0x178c32a9, 0x3b8064cc, 0x17920a35,
+ 0x3b7e141e, 0x1797e188, 0x3b7bc2de, 0x179db8a1,
+ 0x3b79710b, 0x17a38f7f, 0x3b771ea5, 0x17a96623,
+ 0x3b74cbad, 0x17af3c8c, 0x3b727822, 0x17b512bb,
+ 0x3b702404, 0x17bae8b0, 0x3b6dcf54, 0x17c0be6a,
+ 0x3b6b7a11, 0x17c693ea, 0x3b69243b, 0x17cc692e,
+ 0x3b66cdd3, 0x17d23e38, 0x3b6476d8, 0x17d81308,
+ 0x3b621f4a, 0x17dde79c, 0x3b5fc72a, 0x17e3bbf6,
+ 0x3b5d6e78, 0x17e99014, 0x3b5b1533, 0x17ef63f8,
+ 0x3b58bb5c, 0x17f537a0, 0x3b5660f2, 0x17fb0b0e,
+ 0x3b5405f6, 0x1800de40, 0x3b51aa67, 0x1806b137,
+ 0x3b4f4e46, 0x180c83f3, 0x3b4cf193, 0x18125673,
+ 0x3b4a944d, 0x181828b8, 0x3b483676, 0x181dfac2,
+ 0x3b45d80b, 0x1823cc90, 0x3b43790f, 0x18299e22,
+ 0x3b411980, 0x182f6f79, 0x3b3eb960, 0x18354094,
+ 0x3b3c58ad, 0x183b1174, 0x3b39f767, 0x1840e218,
+ 0x3b379590, 0x1846b280, 0x3b353327, 0x184c82ab,
+ 0x3b32d02b, 0x1852529b, 0x3b306c9d, 0x1858224f,
+ 0x3b2e087e, 0x185df1c7, 0x3b2ba3cc, 0x1863c103,
+ 0x3b293e89, 0x18699003, 0x3b26d8b3, 0x186f5ec6,
+ 0x3b24724b, 0x18752d4d, 0x3b220b52, 0x187afb98,
+ 0x3b1fa3c6, 0x1880c9a6, 0x3b1d3ba9, 0x18869778,
+ 0x3b1ad2fa, 0x188c650e, 0x3b1869b9, 0x18923266,
+ 0x3b15ffe6, 0x1897ff82, 0x3b139582, 0x189dcc62,
+ 0x3b112a8b, 0x18a39905, 0x3b0ebf03, 0x18a9656b,
+ 0x3b0c52e9, 0x18af3194, 0x3b09e63e, 0x18b4fd80,
+ 0x3b077901, 0x18bac92f, 0x3b050b32, 0x18c094a1,
+ 0x3b029cd1, 0x18c65fd7, 0x3b002ddf, 0x18cc2acf,
+ 0x3afdbe5c, 0x18d1f589, 0x3afb4e47, 0x18d7c007,
+ 0x3af8dda0, 0x18dd8a47, 0x3af66c68, 0x18e3544a,
+ 0x3af3fa9e, 0x18e91e10, 0x3af18843, 0x18eee798,
+ 0x3aef1556, 0x18f4b0e2, 0x3aeca1d8, 0x18fa79ef,
+ 0x3aea2dc9, 0x190042bf, 0x3ae7b928, 0x19060b50,
+ 0x3ae543f6, 0x190bd3a4, 0x3ae2ce32, 0x19119bba,
+ 0x3ae057de, 0x19176393, 0x3adde0f8, 0x191d2b2d,
+ 0x3adb6980, 0x1922f289, 0x3ad8f178, 0x1928b9a8,
+ 0x3ad678de, 0x192e8088, 0x3ad3ffb3, 0x1934472a,
+ 0x3ad185f7, 0x193a0d8e, 0x3acf0baa, 0x193fd3b4,
+ 0x3acc90cc, 0x1945999b, 0x3aca155d, 0x194b5f44,
+ 0x3ac7995c, 0x195124af, 0x3ac51ccb, 0x1956e9db,
+ 0x3ac29fa9, 0x195caec9, 0x3ac021f5, 0x19627378,
+ 0x3abda3b1, 0x196837e8, 0x3abb24db, 0x196dfc1a,
+ 0x3ab8a575, 0x1973c00d, 0x3ab6257e, 0x197983c1,
+ 0x3ab3a4f6, 0x197f4736, 0x3ab123dd, 0x19850a6d,
+ 0x3aaea234, 0x198acd64, 0x3aac1ff9, 0x1990901d,
+ 0x3aa99d2e, 0x19965296, 0x3aa719d2, 0x199c14d0,
+ 0x3aa495e6, 0x19a1d6cb, 0x3aa21168, 0x19a79887,
+ 0x3a9f8c5a, 0x19ad5a04, 0x3a9d06bc, 0x19b31b41,
+ 0x3a9a808c, 0x19b8dc3e, 0x3a97f9cc, 0x19be9cfd,
+ 0x3a95727c, 0x19c45d7b, 0x3a92ea9b, 0x19ca1dbb,
+ 0x3a906229, 0x19cfddba, 0x3a8dd927, 0x19d59d7a,
+ 0x3a8b4f95, 0x19db5cfa, 0x3a88c572, 0x19e11c3a,
+ 0x3a863abe, 0x19e6db3b, 0x3a83af7b, 0x19ec99fb,
+ 0x3a8123a6, 0x19f2587c, 0x3a7e9742, 0x19f816bc,
+ 0x3a7c0a4d, 0x19fdd4bd, 0x3a797cc8, 0x1a03927d,
+ 0x3a76eeb2, 0x1a094ffd, 0x3a74600d, 0x1a0f0d3d,
+ 0x3a71d0d7, 0x1a14ca3d, 0x3a6f4111, 0x1a1a86fc,
+ 0x3a6cb0ba, 0x1a20437b, 0x3a6a1fd4, 0x1a25ffb9,
+ 0x3a678e5d, 0x1a2bbbb7, 0x3a64fc57, 0x1a317775,
+ 0x3a6269c0, 0x1a3732f1, 0x3a5fd699, 0x1a3cee2d,
+ 0x3a5d42e2, 0x1a42a929, 0x3a5aae9b, 0x1a4863e3,
+ 0x3a5819c4, 0x1a4e1e5d, 0x3a55845d, 0x1a53d895,
+ 0x3a52ee67, 0x1a59928d, 0x3a5057e0, 0x1a5f4c44,
+ 0x3a4dc0c9, 0x1a6505b9, 0x3a4b2923, 0x1a6abeee,
+ 0x3a4890ed, 0x1a7077e1, 0x3a45f827, 0x1a763093,
+ 0x3a435ed1, 0x1a7be904, 0x3a40c4eb, 0x1a81a134,
+ 0x3a3e2a76, 0x1a875922, 0x3a3b8f71, 0x1a8d10ce,
+ 0x3a38f3dc, 0x1a92c839, 0x3a3657b8, 0x1a987f63,
+ 0x3a33bb04, 0x1a9e364b, 0x3a311dc0, 0x1aa3ecf1,
+ 0x3a2e7fed, 0x1aa9a355, 0x3a2be18a, 0x1aaf5978,
+ 0x3a294298, 0x1ab50f59, 0x3a26a316, 0x1abac4f8,
+ 0x3a240305, 0x1ac07a55, 0x3a216264, 0x1ac62f70,
+ 0x3a1ec134, 0x1acbe449, 0x3a1c1f74, 0x1ad198e0,
+ 0x3a197d25, 0x1ad74d34, 0x3a16da47, 0x1add0147,
+ 0x3a1436d9, 0x1ae2b517, 0x3a1192dc, 0x1ae868a5,
+ 0x3a0eee50, 0x1aee1bf0, 0x3a0c4935, 0x1af3cef9,
+ 0x3a09a38a, 0x1af981c0, 0x3a06fd50, 0x1aff3444,
+ 0x3a045687, 0x1b04e685, 0x3a01af2f, 0x1b0a9883,
+ 0x39ff0747, 0x1b104a3f, 0x39fc5ed1, 0x1b15fbb8,
+ 0x39f9b5cb, 0x1b1bacef, 0x39f70c37, 0x1b215de2,
+ 0x39f46213, 0x1b270e93, 0x39f1b761, 0x1b2cbf00,
+ 0x39ef0c1f, 0x1b326f2b, 0x39ec604e, 0x1b381f12,
+ 0x39e9b3ef, 0x1b3dceb6, 0x39e70701, 0x1b437e17,
+ 0x39e45983, 0x1b492d35, 0x39e1ab77, 0x1b4edc0f,
+ 0x39defcdd, 0x1b548aa6, 0x39dc4db3, 0x1b5a38f9,
+ 0x39d99dfa, 0x1b5fe709, 0x39d6edb3, 0x1b6594d6,
+ 0x39d43cdd, 0x1b6b425f, 0x39d18b79, 0x1b70efa4,
+ 0x39ced986, 0x1b769ca6, 0x39cc2704, 0x1b7c4963,
+ 0x39c973f3, 0x1b81f5dd, 0x39c6c054, 0x1b87a213,
+ 0x39c40c27, 0x1b8d4e06, 0x39c1576a, 0x1b92f9b4,
+ 0x39bea220, 0x1b98a51e, 0x39bbec47, 0x1b9e5044,
+ 0x39b935df, 0x1ba3fb26, 0x39b67ee9, 0x1ba9a5c4,
+ 0x39b3c765, 0x1baf501d, 0x39b10f52, 0x1bb4fa32,
+ 0x39ae56b1, 0x1bbaa403, 0x39ab9d81, 0x1bc04d8f,
+ 0x39a8e3c4, 0x1bc5f6d7, 0x39a62978, 0x1bcb9fda,
+ 0x39a36e9d, 0x1bd14899, 0x39a0b335, 0x1bd6f113,
+ 0x399df73e, 0x1bdc9949, 0x399b3ab9, 0x1be24139,
+ 0x39987da6, 0x1be7e8e5, 0x3995c005, 0x1bed904c,
+ 0x399301d6, 0x1bf3376f, 0x39904319, 0x1bf8de4c,
+ 0x398d83ce, 0x1bfe84e4, 0x398ac3f4, 0x1c042b37,
+ 0x3988038d, 0x1c09d145, 0x39854298, 0x1c0f770e,
+ 0x39828115, 0x1c151c91, 0x397fbf04, 0x1c1ac1cf,
+ 0x397cfc65, 0x1c2066c8, 0x397a3938, 0x1c260b7c,
+ 0x3977757d, 0x1c2bafea, 0x3974b135, 0x1c315412,
+ 0x3971ec5f, 0x1c36f7f5, 0x396f26fb, 0x1c3c9b93,
+ 0x396c610a, 0x1c423eea, 0x39699a8a, 0x1c47e1fc,
+ 0x3966d37d, 0x1c4d84c8, 0x39640be3, 0x1c53274f,
+ 0x396143bb, 0x1c58c98f, 0x395e7b05, 0x1c5e6b8a,
+ 0x395bb1c2, 0x1c640d3e, 0x3958e7f1, 0x1c69aead,
+ 0x39561d92, 0x1c6f4fd5, 0x395352a7, 0x1c74f0b7,
+ 0x3950872d, 0x1c7a9153, 0x394dbb27, 0x1c8031a9,
+ 0x394aee93, 0x1c85d1b8, 0x39482171, 0x1c8b7181,
+ 0x394553c3, 0x1c911104, 0x39428586, 0x1c96b040,
+ 0x393fb6bd, 0x1c9c4f35, 0x393ce767, 0x1ca1ede4,
+ 0x393a1783, 0x1ca78c4d, 0x39374712, 0x1cad2a6e,
+ 0x39347613, 0x1cb2c849, 0x3931a488, 0x1cb865dd,
+ 0x392ed270, 0x1cbe032a, 0x392bffca, 0x1cc3a031,
+ 0x39292c97, 0x1cc93cf0, 0x392658d8, 0x1cced968,
+ 0x3923848b, 0x1cd47599, 0x3920afb1, 0x1cda1183,
+ 0x391dda4b, 0x1cdfad26, 0x391b0457, 0x1ce54882,
+ 0x39182dd7, 0x1ceae396, 0x391556ca, 0x1cf07e63,
+ 0x39127f2f, 0x1cf618e9, 0x390fa708, 0x1cfbb327,
+ 0x390cce55, 0x1d014d1d, 0x3909f514, 0x1d06e6cc,
+ 0x39071b47, 0x1d0c8034, 0x390440ed, 0x1d121954,
+ 0x39016606, 0x1d17b22c, 0x38fe8a93, 0x1d1d4abc,
+ 0x38fbae93, 0x1d22e304, 0x38f8d206, 0x1d287b05,
+ 0x38f5f4ed, 0x1d2e12bd, 0x38f31747, 0x1d33aa2e,
+ 0x38f03915, 0x1d394156, 0x38ed5a56, 0x1d3ed837,
+ 0x38ea7b0b, 0x1d446ecf, 0x38e79b34, 0x1d4a051f,
+ 0x38e4bad0, 0x1d4f9b26, 0x38e1d9df, 0x1d5530e6,
+ 0x38def863, 0x1d5ac65d, 0x38dc165a, 0x1d605b8c,
+ 0x38d933c4, 0x1d65f072, 0x38d650a3, 0x1d6b850f,
+ 0x38d36cf5, 0x1d711964, 0x38d088bb, 0x1d76ad71,
+ 0x38cda3f4, 0x1d7c4134, 0x38cabea2, 0x1d81d4af,
+ 0x38c7d8c3, 0x1d8767e1, 0x38c4f259, 0x1d8cfaca,
+ 0x38c20b62, 0x1d928d6b, 0x38bf23df, 0x1d981fc2,
+ 0x38bc3bd1, 0x1d9db1d1, 0x38b95336, 0x1da34396,
+ 0x38b66a0f, 0x1da8d512, 0x38b3805c, 0x1dae6645,
+ 0x38b0961e, 0x1db3f72f, 0x38adab54, 0x1db987cf,
+ 0x38aabffd, 0x1dbf1826, 0x38a7d41b, 0x1dc4a834,
+ 0x38a4e7ad, 0x1dca37f8, 0x38a1fab4, 0x1dcfc773,
+ 0x389f0d2e, 0x1dd556a4, 0x389c1f1d, 0x1ddae58b,
+ 0x38993080, 0x1de07429, 0x38964158, 0x1de6027e,
+ 0x389351a4, 0x1deb9088, 0x38906164, 0x1df11e49,
+ 0x388d7099, 0x1df6abbf, 0x388a7f42, 0x1dfc38ec,
+ 0x38878d60, 0x1e01c5cf, 0x38849af2, 0x1e075268,
+ 0x3881a7f9, 0x1e0cdeb6, 0x387eb474, 0x1e126abb,
+ 0x387bc064, 0x1e17f675, 0x3878cbc9, 0x1e1d81e5,
+ 0x3875d6a2, 0x1e230d0b, 0x3872e0f0, 0x1e2897e6,
+ 0x386feab3, 0x1e2e2277, 0x386cf3ea, 0x1e33acbe,
+ 0x3869fc97, 0x1e3936ba, 0x386704b8, 0x1e3ec06b,
+ 0x38640c4d, 0x1e4449d2, 0x38611358, 0x1e49d2ee,
+ 0x385e19d8, 0x1e4f5bbf, 0x385b1fcc, 0x1e54e446,
+ 0x38582536, 0x1e5a6c82, 0x38552a14, 0x1e5ff473,
+ 0x38522e68, 0x1e657c19, 0x384f3230, 0x1e6b0373,
+ 0x384c356e, 0x1e708a83, 0x38493820, 0x1e761148,
+ 0x38463a48, 0x1e7b97c2, 0x38433be5, 0x1e811df0,
+ 0x38403cf7, 0x1e86a3d3, 0x383d3d7e, 0x1e8c296b,
+ 0x383a3d7b, 0x1e91aeb7, 0x38373ced, 0x1e9733b8,
+ 0x38343bd4, 0x1e9cb86e, 0x38313a30, 0x1ea23cd8,
+ 0x382e3802, 0x1ea7c0f6, 0x382b3549, 0x1ead44c9,
+ 0x38283205, 0x1eb2c850, 0x38252e37, 0x1eb84b8b,
+ 0x382229df, 0x1ebdce7b, 0x381f24fc, 0x1ec3511f,
+ 0x381c1f8e, 0x1ec8d376, 0x38191996, 0x1ece5582,
+ 0x38161314, 0x1ed3d742, 0x38130c07, 0x1ed958b6,
+ 0x38100470, 0x1eded9dd, 0x380cfc4f, 0x1ee45ab9,
+ 0x3809f3a3, 0x1ee9db48, 0x3806ea6d, 0x1eef5b8b,
+ 0x3803e0ac, 0x1ef4db81, 0x3800d662, 0x1efa5b2c,
+ 0x37fdcb8d, 0x1effda89, 0x37fac02e, 0x1f05599b,
+ 0x37f7b446, 0x1f0ad860, 0x37f4a7d2, 0x1f1056d8,
+ 0x37f19ad5, 0x1f15d503, 0x37ee8d4e, 0x1f1b52e2,
+ 0x37eb7f3d, 0x1f20d074, 0x37e870a2, 0x1f264db9,
+ 0x37e5617d, 0x1f2bcab2, 0x37e251ce, 0x1f31475d,
+ 0x37df4195, 0x1f36c3bc, 0x37dc30d2, 0x1f3c3fcd,
+ 0x37d91f86, 0x1f41bb92, 0x37d60daf, 0x1f473709,
+ 0x37d2fb4f, 0x1f4cb233, 0x37cfe865, 0x1f522d10,
+ 0x37ccd4f2, 0x1f57a7a0, 0x37c9c0f4, 0x1f5d21e2,
+ 0x37c6ac6d, 0x1f629bd7, 0x37c3975d, 0x1f68157f,
+ 0x37c081c3, 0x1f6d8ed9, 0x37bd6b9f, 0x1f7307e5,
+ 0x37ba54f2, 0x1f7880a4, 0x37b73dbb, 0x1f7df915,
+ 0x37b425fb, 0x1f837139, 0x37b10db1, 0x1f88e90e,
+ 0x37adf4de, 0x1f8e6096, 0x37aadb82, 0x1f93d7d0,
+ 0x37a7c19c, 0x1f994ebc, 0x37a4a72d, 0x1f9ec55b,
+ 0x37a18c34, 0x1fa43bab, 0x379e70b3, 0x1fa9b1ad,
+ 0x379b54a8, 0x1faf2761, 0x37983814, 0x1fb49cc7,
+ 0x37951af6, 0x1fba11de, 0x3791fd50, 0x1fbf86a7,
+ 0x378edf20, 0x1fc4fb22, 0x378bc068, 0x1fca6f4f,
+ 0x3788a126, 0x1fcfe32d, 0x3785815b, 0x1fd556bd,
+ 0x37826108, 0x1fdac9fe, 0x377f402b, 0x1fe03cf0,
+ 0x377c1ec5, 0x1fe5af94, 0x3778fcd7, 0x1feb21e9,
+ 0x3775da5f, 0x1ff093ef, 0x3772b75f, 0x1ff605a7,
+ 0x376f93d6, 0x1ffb7710, 0x376c6fc4, 0x2000e829,
+ 0x37694b2a, 0x200658f4, 0x37662606, 0x200bc970,
+ 0x3763005a, 0x2011399d, 0x375fda26, 0x2016a97a,
+ 0x375cb368, 0x201c1909, 0x37598c23, 0x20218848,
+ 0x37566454, 0x2026f738, 0x37533bfd, 0x202c65d9,
+ 0x3750131e, 0x2031d42a, 0x374ce9b6, 0x2037422c,
+ 0x3749bfc5, 0x203cafde, 0x3746954c, 0x20421d41,
+ 0x37436a4b, 0x20478a54, 0x37403ec1, 0x204cf717,
+ 0x373d12b0, 0x2052638b, 0x3739e615, 0x2057cfaf,
+ 0x3736b8f3, 0x205d3b83, 0x37338b48, 0x2062a708,
+ 0x37305d15, 0x2068123c, 0x372d2e5a, 0x206d7d21,
+ 0x3729ff17, 0x2072e7b5, 0x3726cf4c, 0x207851fa,
+ 0x37239ef8, 0x207dbbee, 0x37206e1d, 0x20832592,
+ 0x371d3cb9, 0x20888ee6, 0x371a0ace, 0x208df7ea,
+ 0x3716d85a, 0x2093609d, 0x3713a55f, 0x2098c900,
+ 0x371071dc, 0x209e3112, 0x370d3dd0, 0x20a398d5,
+ 0x370a093d, 0x20a90046, 0x3706d423, 0x20ae6767,
+ 0x37039e80, 0x20b3ce37, 0x37006856, 0x20b934b7,
+ 0x36fd31a4, 0x20be9ae6, 0x36f9fa6a, 0x20c400c4,
+ 0x36f6c2a9, 0x20c96651, 0x36f38a60, 0x20cecb8d,
+ 0x36f0518f, 0x20d43079, 0x36ed1837, 0x20d99513,
+ 0x36e9de58, 0x20def95c, 0x36e6a3f1, 0x20e45d55,
+ 0x36e36902, 0x20e9c0fc, 0x36e02d8c, 0x20ef2451,
+ 0x36dcf18f, 0x20f48756, 0x36d9b50a, 0x20f9ea09,
+ 0x36d677fe, 0x20ff4c6b, 0x36d33a6a, 0x2104ae7c,
+ 0x36cffc50, 0x210a103b, 0x36ccbdae, 0x210f71a8,
+ 0x36c97e85, 0x2114d2c4, 0x36c63ed4, 0x211a338e,
+ 0x36c2fe9d, 0x211f9407, 0x36bfbdde, 0x2124f42e,
+ 0x36bc7c98, 0x212a5403, 0x36b93acc, 0x212fb386,
+ 0x36b5f878, 0x213512b8, 0x36b2b59d, 0x213a7197,
+ 0x36af723b, 0x213fd025, 0x36ac2e53, 0x21452e60,
+ 0x36a8e9e3, 0x214a8c49, 0x36a5a4ed, 0x214fe9e1,
+ 0x36a25f70, 0x21554726, 0x369f196b, 0x215aa418,
+ 0x369bd2e1, 0x216000b9, 0x36988bcf, 0x21655d07,
+ 0x36954437, 0x216ab903, 0x3691fc18, 0x217014ac,
+ 0x368eb372, 0x21757003, 0x368b6a46, 0x217acb07,
+ 0x36882093, 0x218025b8, 0x3684d65a, 0x21858017,
+ 0x36818b9a, 0x218ada24, 0x367e4054, 0x219033dd,
+ 0x367af487, 0x21958d44, 0x3677a833, 0x219ae657,
+ 0x36745b5a, 0x21a03f18, 0x36710dfa, 0x21a59786,
+ 0x366dc013, 0x21aaefa1, 0x366a71a7, 0x21b04769,
+ 0x366722b4, 0x21b59ede, 0x3663d33b, 0x21baf5ff,
+ 0x3660833b, 0x21c04ccd, 0x365d32b6, 0x21c5a348,
+ 0x3659e1aa, 0x21caf970, 0x36569019, 0x21d04f44,
+ 0x36533e01, 0x21d5a4c5, 0x364feb63, 0x21daf9f2,
+ 0x364c983f, 0x21e04ecc, 0x36494495, 0x21e5a353,
+ 0x3645f065, 0x21eaf785, 0x36429bb0, 0x21f04b64,
+ 0x363f4674, 0x21f59eef, 0x363bf0b3, 0x21faf227,
+ 0x36389a6b, 0x2200450a, 0x3635439e, 0x2205979a,
+ 0x3631ec4c, 0x220ae9d6, 0x362e9473, 0x22103bbd,
+ 0x362b3c15, 0x22158d51, 0x3627e331, 0x221ade91,
+ 0x362489c7, 0x22202f7c, 0x36212fd8, 0x22258013,
+ 0x361dd564, 0x222ad056, 0x361a7a6a, 0x22302045,
+ 0x36171eea, 0x22356fdf, 0x3613c2e5, 0x223abf25,
+ 0x3610665a, 0x22400e16, 0x360d094a, 0x22455cb3,
+ 0x3609abb5, 0x224aaafc, 0x36064d9a, 0x224ff8ef,
+ 0x3602eefa, 0x2255468e, 0x35ff8fd5, 0x225a93d9,
+ 0x35fc302b, 0x225fe0ce, 0x35f8cffb, 0x22652d6f,
+ 0x35f56f46, 0x226a79bb, 0x35f20e0c, 0x226fc5b2,
+ 0x35eeac4d, 0x22751154, 0x35eb4a09, 0x227a5ca1,
+ 0x35e7e740, 0x227fa799, 0x35e483f2, 0x2284f23c,
+ 0x35e1201e, 0x228a3c8a, 0x35ddbbc6, 0x228f8682,
+ 0x35da56e9, 0x2294d025, 0x35d6f187, 0x229a1973,
+ 0x35d38ba1, 0x229f626c, 0x35d02535, 0x22a4ab0f,
+ 0x35ccbe45, 0x22a9f35c, 0x35c956d0, 0x22af3b54,
+ 0x35c5eed6, 0x22b482f7, 0x35c28658, 0x22b9ca43,
+ 0x35bf1d54, 0x22bf113b, 0x35bbb3cd, 0x22c457dc,
+ 0x35b849c0, 0x22c99e28, 0x35b4df30, 0x22cee41d,
+ 0x35b1741a, 0x22d429bd, 0x35ae0880, 0x22d96f07,
+ 0x35aa9c62, 0x22deb3fb, 0x35a72fbf, 0x22e3f899,
+ 0x35a3c298, 0x22e93ce1, 0x35a054ed, 0x22ee80d3,
+ 0x359ce6bd, 0x22f3c46e, 0x35997809, 0x22f907b3,
+ 0x359608d1, 0x22fe4aa2, 0x35929914, 0x23038d3b,
+ 0x358f28d3, 0x2308cf7d, 0x358bb80e, 0x230e1169,
+ 0x358846c5, 0x231352fe, 0x3584d4f8, 0x2318943d,
+ 0x358162a7, 0x231dd525, 0x357defd2, 0x232315b7,
+ 0x357a7c79, 0x232855f2, 0x3577089c, 0x232d95d6,
+ 0x3573943b, 0x2332d563, 0x35701f56, 0x23381499,
+ 0x356ca9ed, 0x233d5379, 0x35693401, 0x23429201,
+ 0x3565bd90, 0x2347d033, 0x3562469c, 0x234d0e0d,
+ 0x355ecf25, 0x23524b91, 0x355b5729, 0x235788bd,
+ 0x3557deaa, 0x235cc592, 0x355465a7, 0x23620210,
+ 0x3550ec21, 0x23673e36, 0x354d7217, 0x236c7a06,
+ 0x3549f789, 0x2371b57d, 0x35467c78, 0x2376f09e,
+ 0x354300e4, 0x237c2b66, 0x353f84cc, 0x238165d8,
+ 0x353c0831, 0x23869ff1, 0x35388b13, 0x238bd9b3,
+ 0x35350d71, 0x2391131e, 0x35318f4c, 0x23964c30,
+ 0x352e10a3, 0x239b84eb, 0x352a9178, 0x23a0bd4e,
+ 0x352711c9, 0x23a5f558, 0x35239197, 0x23ab2d0b,
+ 0x352010e2, 0x23b06466, 0x351c8faa, 0x23b59b69,
+ 0x35190def, 0x23bad214, 0x35158bb1, 0x23c00867,
+ 0x351208ef, 0x23c53e61, 0x350e85ab, 0x23ca7403,
+ 0x350b01e4, 0x23cfa94d, 0x35077d9a, 0x23d4de3f,
+ 0x3503f8ce, 0x23da12d8, 0x3500737e, 0x23df4718,
+ 0x34fcedac, 0x23e47b00, 0x34f96757, 0x23e9ae90,
+ 0x34f5e07f, 0x23eee1c7, 0x34f25924, 0x23f414a5,
+ 0x34eed147, 0x23f9472b, 0x34eb48e8, 0x23fe7958,
+ 0x34e7c005, 0x2403ab2c, 0x34e436a1, 0x2408dca7,
+ 0x34e0acb9, 0x240e0dc9, 0x34dd224f, 0x24133e92,
+ 0x34d99763, 0x24186f02, 0x34d60bf5, 0x241d9f1a,
+ 0x34d28004, 0x2422ced8, 0x34cef390, 0x2427fe3d,
+ 0x34cb669b, 0x242d2d48, 0x34c7d923, 0x24325bfb,
+ 0x34c44b29, 0x24378a54, 0x34c0bcac, 0x243cb854,
+ 0x34bd2dae, 0x2441e5fa, 0x34b99e2d, 0x24471347,
+ 0x34b60e2b, 0x244c403a, 0x34b27da6, 0x24516cd4,
+ 0x34aeec9f, 0x24569914, 0x34ab5b16, 0x245bc4fb,
+ 0x34a7c90c, 0x2460f088, 0x34a4367f, 0x24661bbb,
+ 0x34a0a370, 0x246b4694, 0x349d0fe0, 0x24707113,
+ 0x34997bce, 0x24759b39, 0x3495e73a, 0x247ac504,
+ 0x34925224, 0x247fee76, 0x348ebc8d, 0x2485178d,
+ 0x348b2673, 0x248a404b, 0x34878fd9, 0x248f68ae,
+ 0x3483f8bc, 0x249490b7, 0x3480611e, 0x2499b865,
+ 0x347cc8ff, 0x249edfba, 0x3479305e, 0x24a406b4,
+ 0x3475973b, 0x24a92d54, 0x3471fd97, 0x24ae5399,
+ 0x346e6372, 0x24b37983, 0x346ac8cb, 0x24b89f14,
+ 0x34672da3, 0x24bdc449, 0x346391fa, 0x24c2e924,
+ 0x345ff5cf, 0x24c80da4, 0x345c5923, 0x24cd31ca,
+ 0x3458bbf6, 0x24d25594, 0x34551e48, 0x24d77904,
+ 0x34518019, 0x24dc9c19, 0x344de168, 0x24e1bed3,
+ 0x344a4237, 0x24e6e132, 0x3446a284, 0x24ec0335,
+ 0x34430251, 0x24f124de, 0x343f619c, 0x24f6462c,
+ 0x343bc067, 0x24fb671e, 0x34381eb1, 0x250087b5,
+ 0x34347c7a, 0x2505a7f1, 0x3430d9c2, 0x250ac7d2,
+ 0x342d3689, 0x250fe757, 0x342992d0, 0x25150680,
+ 0x3425ee96, 0x251a254e, 0x342249db, 0x251f43c1,
+ 0x341ea4a0, 0x252461d8, 0x341afee4, 0x25297f93,
+ 0x341758a7, 0x252e9cf3, 0x3413b1ea, 0x2533b9f7,
+ 0x34100aac, 0x2538d69f, 0x340c62ee, 0x253df2eb,
+ 0x3408bab0, 0x25430edc, 0x340511f1, 0x25482a70,
+ 0x340168b2, 0x254d45a9, 0x33fdbef2, 0x25526085,
+ 0x33fa14b2, 0x25577b06, 0x33f669f2, 0x255c952a,
+ 0x33f2beb2, 0x2561aef2, 0x33ef12f2, 0x2566c85e,
+ 0x33eb66b1, 0x256be16d, 0x33e7b9f0, 0x2570fa20,
+ 0x33e40cb0, 0x25761277, 0x33e05eef, 0x257b2a71,
+ 0x33dcb0ae, 0x2580420f, 0x33d901ed, 0x25855951,
+ 0x33d552ac, 0x258a7035, 0x33d1a2ec, 0x258f86be,
+ 0x33cdf2ab, 0x25949ce9, 0x33ca41eb, 0x2599b2b8,
+ 0x33c690ab, 0x259ec82a, 0x33c2deeb, 0x25a3dd3f,
+ 0x33bf2cac, 0x25a8f1f7, 0x33bb79ec, 0x25ae0652,
+ 0x33b7c6ae, 0x25b31a51, 0x33b412ef, 0x25b82df2,
+ 0x33b05eb1, 0x25bd4136, 0x33aca9f4, 0x25c2541e,
+ 0x33a8f4b6, 0x25c766a8, 0x33a53efa, 0x25cc78d4,
+ 0x33a188be, 0x25d18aa4, 0x339dd203, 0x25d69c16,
+ 0x339a1ac8, 0x25dbad2b, 0x3396630e, 0x25e0bde2,
+ 0x3392aad4, 0x25e5ce3c, 0x338ef21c, 0x25eade39,
+ 0x338b38e4, 0x25efedd8, 0x33877f2d, 0x25f4fd19,
+ 0x3383c4f7, 0x25fa0bfd, 0x33800a42, 0x25ff1a83,
+ 0x337c4f0d, 0x260428ab, 0x3378935a, 0x26093675,
+ 0x3374d728, 0x260e43e2, 0x33711a76, 0x261350f0,
+ 0x336d5d46, 0x26185da1, 0x33699f97, 0x261d69f4,
+ 0x3365e169, 0x262275e8, 0x336222bc, 0x2627817f,
+ 0x335e6391, 0x262c8cb7, 0x335aa3e6, 0x26319792,
+ 0x3356e3bd, 0x2636a20d, 0x33532316, 0x263bac2b,
+ 0x334f61ef, 0x2640b5eb, 0x334ba04a, 0x2645bf4b,
+ 0x3347de27, 0x264ac84e, 0x33441b85, 0x264fd0f2,
+ 0x33405864, 0x2654d938, 0x333c94c5, 0x2659e11f,
+ 0x3338d0a8, 0x265ee8a7, 0x33350c0c, 0x2663efd1,
+ 0x333146f2, 0x2668f69b, 0x332d8159, 0x266dfd08,
+ 0x3329bb43, 0x26730315, 0x3325f4ae, 0x267808c3,
+ 0x33222d9a, 0x267d0e13, 0x331e6609, 0x26821303,
+ 0x331a9dfa, 0x26871795, 0x3316d56c, 0x268c1bc8,
+ 0x33130c60, 0x26911f9b, 0x330f42d7, 0x2696230f,
+ 0x330b78cf, 0x269b2624, 0x3307ae49, 0x26a028da,
+ 0x3303e346, 0x26a52b30, 0x330017c4, 0x26aa2d27,
+ 0x32fc4bc5, 0x26af2ebf, 0x32f87f48, 0x26b42ff7,
+ 0x32f4b24d, 0x26b930d0, 0x32f0e4d5, 0x26be3149,
+ 0x32ed16df, 0x26c33163, 0x32e9486b, 0x26c8311d,
+ 0x32e57979, 0x26cd3077, 0x32e1aa0a, 0x26d22f72,
+ 0x32ddda1e, 0x26d72e0c, 0x32da09b4, 0x26dc2c47,
+ 0x32d638cc, 0x26e12a22, 0x32d26767, 0x26e6279d,
+ 0x32ce9585, 0x26eb24b9, 0x32cac325, 0x26f02174,
+ 0x32c6f048, 0x26f51dcf, 0x32c31ced, 0x26fa19ca,
+ 0x32bf4916, 0x26ff1564, 0x32bb74c1, 0x2704109f,
+ 0x32b79fef, 0x27090b79, 0x32b3caa0, 0x270e05f3,
+ 0x32aff4d3, 0x2713000c, 0x32ac1e8a, 0x2717f9c6,
+ 0x32a847c4, 0x271cf31e, 0x32a47080, 0x2721ec16,
+ 0x32a098c0, 0x2726e4ae, 0x329cc083, 0x272bdce5,
+ 0x3298e7c9, 0x2730d4bb, 0x32950e92, 0x2735cc31,
+ 0x329134de, 0x273ac346, 0x328d5aad, 0x273fb9fa,
+ 0x32898000, 0x2744b04d, 0x3285a4d6, 0x2749a640,
+ 0x3281c92f, 0x274e9bd1, 0x327ded0c, 0x27539102,
+ 0x327a106c, 0x275885d1, 0x32763350, 0x275d7a40,
+ 0x327255b7, 0x27626e4d, 0x326e77a2, 0x276761f9,
+ 0x326a9910, 0x276c5544, 0x3266ba02, 0x2771482d,
+ 0x3262da77, 0x27763ab5, 0x325efa70, 0x277b2cdc,
+ 0x325b19ed, 0x27801ea2, 0x325738ee, 0x27851006,
+ 0x32535772, 0x278a0108, 0x324f757a, 0x278ef1a9,
+ 0x324b9306, 0x2793e1e8, 0x3247b016, 0x2798d1c6,
+ 0x3243ccaa, 0x279dc142, 0x323fe8c2, 0x27a2b05c,
+ 0x323c045e, 0x27a79f14, 0x32381f7e, 0x27ac8d6b,
+ 0x32343a22, 0x27b17b60, 0x3230544a, 0x27b668f2,
+ 0x322c6df7, 0x27bb5623, 0x32288727, 0x27c042f2,
+ 0x32249fdc, 0x27c52f5e, 0x3220b815, 0x27ca1b69,
+ 0x321ccfd2, 0x27cf0711, 0x3218e714, 0x27d3f257,
+ 0x3214fdda, 0x27d8dd3b, 0x32111425, 0x27ddc7bd,
+ 0x320d29f4, 0x27e2b1dc, 0x32093f47, 0x27e79b98,
+ 0x3205541f, 0x27ec84f3, 0x3201687c, 0x27f16dea,
+ 0x31fd7c5d, 0x27f65680, 0x31f98fc3, 0x27fb3eb2,
+ 0x31f5a2ae, 0x28002682, 0x31f1b51d, 0x28050def,
+ 0x31edc711, 0x2809f4fa, 0x31e9d88a, 0x280edba2,
+ 0x31e5e988, 0x2813c1e6, 0x31e1fa0a, 0x2818a7c8,
+ 0x31de0a12, 0x281d8d48, 0x31da199e, 0x28227264,
+ 0x31d628b0, 0x2827571d, 0x31d23746, 0x282c3b73,
+ 0x31ce4562, 0x28311f65, 0x31ca5303, 0x283602f5,
+ 0x31c66029, 0x283ae622, 0x31c26cd4, 0x283fc8eb,
+ 0x31be7904, 0x2844ab51, 0x31ba84b9, 0x28498d53,
+ 0x31b68ff4, 0x284e6ef2, 0x31b29ab4, 0x2853502e,
+ 0x31aea4fa, 0x28583106, 0x31aaaec5, 0x285d117b,
+ 0x31a6b815, 0x2861f18c, 0x31a2c0eb, 0x2866d139,
+ 0x319ec947, 0x286bb083, 0x319ad128, 0x28708f69,
+ 0x3196d88e, 0x28756deb, 0x3192df7a, 0x287a4c09,
+ 0x318ee5ec, 0x287f29c4, 0x318aebe4, 0x2884071a,
+ 0x3186f161, 0x2888e40d, 0x3182f665, 0x288dc09c,
+ 0x317efaee, 0x28929cc6, 0x317afefc, 0x2897788c,
+ 0x31770291, 0x289c53ef, 0x317305ac, 0x28a12eed,
+ 0x316f084d, 0x28a60987, 0x316b0a74, 0x28aae3bc,
+ 0x31670c20, 0x28afbd8d, 0x31630d53, 0x28b496fa,
+ 0x315f0e0c, 0x28b97002, 0x315b0e4c, 0x28be48a6,
+ 0x31570e11, 0x28c320e5, 0x31530d5d, 0x28c7f8c0,
+ 0x314f0c2f, 0x28ccd036, 0x314b0a87, 0x28d1a748,
+ 0x31470866, 0x28d67df4, 0x314305cb, 0x28db543c,
+ 0x313f02b7, 0x28e02a20, 0x313aff29, 0x28e4ff9e,
+ 0x3136fb22, 0x28e9d4b7, 0x3132f6a1, 0x28eea96c,
+ 0x312ef1a7, 0x28f37dbb, 0x312aec33, 0x28f851a6,
+ 0x3126e646, 0x28fd252b, 0x3122dfe0, 0x2901f84b,
+ 0x311ed901, 0x2906cb06, 0x311ad1a8, 0x290b9d5c,
+ 0x3116c9d7, 0x29106f4c, 0x3112c18c, 0x291540d8,
+ 0x310eb8c8, 0x291a11fd, 0x310aaf8b, 0x291ee2be,
+ 0x3106a5d5, 0x2923b319, 0x31029ba6, 0x2928830e,
+ 0x30fe90fe, 0x292d529e, 0x30fa85dd, 0x293221c8,
+ 0x30f67a44, 0x2936f08d, 0x30f26e31, 0x293bbeec,
+ 0x30ee61a6, 0x29408ce5, 0x30ea54a2, 0x29455a78,
+ 0x30e64725, 0x294a27a6, 0x30e23930, 0x294ef46e,
+ 0x30de2ac2, 0x2953c0cf, 0x30da1bdc, 0x29588ccb,
+ 0x30d60c7d, 0x295d5861, 0x30d1fca5, 0x29622391,
+ 0x30cdec55, 0x2966ee5a, 0x30c9db8d, 0x296bb8be,
+ 0x30c5ca4c, 0x297082bb, 0x30c1b893, 0x29754c52,
+ 0x30bda661, 0x297a1583, 0x30b993b8, 0x297ede4d,
+ 0x30b58096, 0x2983a6b1, 0x30b16cfc, 0x29886eaf,
+ 0x30ad58ea, 0x298d3646, 0x30a9445f, 0x2991fd76,
+ 0x30a52f5d, 0x2996c440, 0x30a119e2, 0x299b8aa4,
+ 0x309d03f0, 0x29a050a0, 0x3098ed86, 0x29a51636,
+ 0x3094d6a3, 0x29a9db65, 0x3090bf49, 0x29aea02e,
+ 0x308ca777, 0x29b3648f, 0x30888f2d, 0x29b8288a,
+ 0x3084766c, 0x29bcec1e, 0x30805d33, 0x29c1af4b,
+ 0x307c4382, 0x29c67210, 0x30782959, 0x29cb346f,
+ 0x30740eb9, 0x29cff667, 0x306ff3a1, 0x29d4b7f7,
+ 0x306bd812, 0x29d97920, 0x3067bc0b, 0x29de39e2,
+ 0x30639f8d, 0x29e2fa3d, 0x305f8298, 0x29e7ba30,
+ 0x305b652b, 0x29ec79bc, 0x30574747, 0x29f138e0,
+ 0x305328eb, 0x29f5f79d, 0x304f0a19, 0x29fab5f3,
+ 0x304aeacf, 0x29ff73e0, 0x3046cb0e, 0x2a043166,
+ 0x3042aad5, 0x2a08ee85, 0x303e8a26, 0x2a0dab3c,
+ 0x303a6900, 0x2a12678b, 0x30364763, 0x2a172372,
+ 0x3032254e, 0x2a1bdef1, 0x302e02c3, 0x2a209a09,
+ 0x3029dfc1, 0x2a2554b8, 0x3025bc48, 0x2a2a0f00,
+ 0x30219859, 0x2a2ec8df, 0x301d73f2, 0x2a338257,
+ 0x30194f15, 0x2a383b66, 0x301529c1, 0x2a3cf40d,
+ 0x301103f7, 0x2a41ac4c, 0x300cddb6, 0x2a466423,
+ 0x3008b6fe, 0x2a4b1b91, 0x30048fd0, 0x2a4fd297,
+ 0x3000682b, 0x2a548935, 0x2ffc4010, 0x2a593f6a,
+ 0x2ff8177f, 0x2a5df536, 0x2ff3ee77, 0x2a62aa9a,
+ 0x2fefc4f9, 0x2a675f96, 0x2feb9b04, 0x2a6c1429,
+ 0x2fe7709a, 0x2a70c853, 0x2fe345b9, 0x2a757c15,
+ 0x2fdf1a62, 0x2a7a2f6d, 0x2fdaee95, 0x2a7ee25d,
+ 0x2fd6c252, 0x2a8394e4, 0x2fd29598, 0x2a884702,
+ 0x2fce6869, 0x2a8cf8b8, 0x2fca3ac4, 0x2a91aa04,
+ 0x2fc60ca9, 0x2a965ae7, 0x2fc1de18, 0x2a9b0b61,
+ 0x2fbdaf11, 0x2a9fbb72, 0x2fb97f94, 0x2aa46b1a,
+ 0x2fb54fa2, 0x2aa91a59, 0x2fb11f3a, 0x2aadc92e,
+ 0x2facee5c, 0x2ab2779a, 0x2fa8bd09, 0x2ab7259d,
+ 0x2fa48b40, 0x2abbd336, 0x2fa05901, 0x2ac08066,
+ 0x2f9c264d, 0x2ac52d2c, 0x2f97f323, 0x2ac9d989,
+ 0x2f93bf84, 0x2ace857c, 0x2f8f8b70, 0x2ad33106,
+ 0x2f8b56e6, 0x2ad7dc26, 0x2f8721e7, 0x2adc86dc,
+ 0x2f82ec73, 0x2ae13129, 0x2f7eb689, 0x2ae5db0b,
+ 0x2f7a802b, 0x2aea8484, 0x2f764957, 0x2aef2d93,
+ 0x2f72120e, 0x2af3d638, 0x2f6dda50, 0x2af87e73,
+ 0x2f69a21d, 0x2afd2644, 0x2f656975, 0x2b01cdab,
+ 0x2f613058, 0x2b0674a8, 0x2f5cf6c6, 0x2b0b1b3b,
+ 0x2f58bcbf, 0x2b0fc163, 0x2f548243, 0x2b146722,
+ 0x2f504753, 0x2b190c75, 0x2f4c0bee, 0x2b1db15f,
+ 0x2f47d014, 0x2b2255de, 0x2f4393c6, 0x2b26f9f3,
+ 0x2f3f5702, 0x2b2b9d9d, 0x2f3b19cb, 0x2b3040dd,
+ 0x2f36dc1f, 0x2b34e3b2, 0x2f329dfe, 0x2b39861d,
+ 0x2f2e5f69, 0x2b3e281d, 0x2f2a205f, 0x2b42c9b2,
+ 0x2f25e0e1, 0x2b476add, 0x2f21a0ef, 0x2b4c0b9c,
+ 0x2f1d6088, 0x2b50abf1, 0x2f191fad, 0x2b554bdb,
+ 0x2f14de5e, 0x2b59eb5a, 0x2f109c9b, 0x2b5e8a6f,
+ 0x2f0c5a64, 0x2b632918, 0x2f0817b8, 0x2b67c756,
+ 0x2f03d499, 0x2b6c6529, 0x2eff9105, 0x2b710291,
+ 0x2efb4cfe, 0x2b759f8d, 0x2ef70883, 0x2b7a3c1f,
+ 0x2ef2c393, 0x2b7ed845, 0x2eee7e30, 0x2b837400,
+ 0x2eea3859, 0x2b880f4f, 0x2ee5f20f, 0x2b8caa33,
+ 0x2ee1ab50, 0x2b9144ac, 0x2edd641e, 0x2b95deb9,
+ 0x2ed91c79, 0x2b9a785a, 0x2ed4d45f, 0x2b9f1190,
+ 0x2ed08bd3, 0x2ba3aa5b, 0x2ecc42d2, 0x2ba842b9,
+ 0x2ec7f95e, 0x2bacdaac, 0x2ec3af77, 0x2bb17233,
+ 0x2ebf651d, 0x2bb6094f, 0x2ebb1a4f, 0x2bba9ffe,
+ 0x2eb6cf0d, 0x2bbf3642, 0x2eb28359, 0x2bc3cc19,
+ 0x2eae3731, 0x2bc86185, 0x2ea9ea96, 0x2bccf685,
+ 0x2ea59d88, 0x2bd18b18, 0x2ea15007, 0x2bd61f40,
+ 0x2e9d0213, 0x2bdab2fb, 0x2e98b3ac, 0x2bdf464a,
+ 0x2e9464d1, 0x2be3d92d, 0x2e901584, 0x2be86ba4,
+ 0x2e8bc5c4, 0x2becfdae, 0x2e877591, 0x2bf18f4c,
+ 0x2e8324ec, 0x2bf6207d, 0x2e7ed3d3, 0x2bfab142,
+ 0x2e7a8248, 0x2bff419a, 0x2e76304a, 0x2c03d186,
+ 0x2e71ddda, 0x2c086106, 0x2e6d8af7, 0x2c0cf018,
+ 0x2e6937a1, 0x2c117ebe, 0x2e64e3d9, 0x2c160cf7,
+ 0x2e608f9e, 0x2c1a9ac4, 0x2e5c3af1, 0x2c1f2823,
+ 0x2e57e5d2, 0x2c23b516, 0x2e539040, 0x2c28419c,
+ 0x2e4f3a3c, 0x2c2ccdb5, 0x2e4ae3c6, 0x2c315961,
+ 0x2e468cdd, 0x2c35e49f, 0x2e423582, 0x2c3a6f71,
+ 0x2e3dddb5, 0x2c3ef9d6, 0x2e398576, 0x2c4383cd,
+ 0x2e352cc5, 0x2c480d57, 0x2e30d3a2, 0x2c4c9674,
+ 0x2e2c7a0d, 0x2c511f24, 0x2e282006, 0x2c55a766,
+ 0x2e23c58d, 0x2c5a2f3b, 0x2e1f6aa3, 0x2c5eb6a3,
+ 0x2e1b0f46, 0x2c633d9d, 0x2e16b378, 0x2c67c429,
+ 0x2e125738, 0x2c6c4a48, 0x2e0dfa86, 0x2c70cff9,
+ 0x2e099d63, 0x2c75553d, 0x2e053fce, 0x2c79da13,
+ 0x2e00e1c8, 0x2c7e5e7b, 0x2dfc8350, 0x2c82e276,
+ 0x2df82466, 0x2c876602, 0x2df3c50c, 0x2c8be921,
+ 0x2def653f, 0x2c906bd2, 0x2deb0502, 0x2c94ee15,
+ 0x2de6a453, 0x2c996fe9, 0x2de24333, 0x2c9df150,
+ 0x2ddde1a1, 0x2ca27249, 0x2dd97f9f, 0x2ca6f2d4,
+ 0x2dd51d2b, 0x2cab72f0, 0x2dd0ba47, 0x2caff29e,
+ 0x2dcc56f1, 0x2cb471de, 0x2dc7f32a, 0x2cb8f0b0,
+ 0x2dc38ef2, 0x2cbd6f13, 0x2dbf2a4a, 0x2cc1ed08,
+ 0x2dbac530, 0x2cc66a8e, 0x2db65fa6, 0x2ccae7a6,
+ 0x2db1f9ab, 0x2ccf6450, 0x2dad933f, 0x2cd3e08b,
+ 0x2da92c62, 0x2cd85c57, 0x2da4c515, 0x2cdcd7b5,
+ 0x2da05d57, 0x2ce152a4, 0x2d9bf529, 0x2ce5cd24,
+ 0x2d978c8a, 0x2cea4735, 0x2d93237a, 0x2ceec0d8,
+ 0x2d8eb9fa, 0x2cf33a0c, 0x2d8a500a, 0x2cf7b2d0,
+ 0x2d85e5a9, 0x2cfc2b26, 0x2d817ad8, 0x2d00a30d,
+ 0x2d7d0f97, 0x2d051a85, 0x2d78a3e5, 0x2d09918e,
+ 0x2d7437c3, 0x2d0e0827, 0x2d6fcb32, 0x2d127e52,
+ 0x2d6b5e30, 0x2d16f40d, 0x2d66f0bd, 0x2d1b6959,
+ 0x2d6282db, 0x2d1fde36, 0x2d5e1489, 0x2d2452a3,
+ 0x2d59a5c7, 0x2d28c6a1, 0x2d553695, 0x2d2d3a30,
+ 0x2d50c6f3, 0x2d31ad4f, 0x2d4c56e2, 0x2d361ffe,
+ 0x2d47e661, 0x2d3a923e, 0x2d43756f, 0x2d3f040f,
+ 0x1fffff62, 0xfff9b781, 0x1ffffa73, 0xffed2685,
+ 0x1ffff094, 0xffe0958b, 0x1fffe1c6, 0xffd40496,
+ 0x1fffce09, 0xffc773a8, 0x1fffb55d, 0xffbae2c3,
+ 0x1fff97c1, 0xffae51e8, 0x1fff7536, 0xffa1c11a,
+ 0x1fff4dbc, 0xff95305a, 0x1fff2152, 0xff889fab,
+ 0x1ffeeffa, 0xff7c0f0e, 0x1ffeb9b2, 0xff6f7e86,
+ 0x1ffe7e7b, 0xff62ee14, 0x1ffe3e55, 0xff565dba,
+ 0x1ffdf940, 0xff49cd7a, 0x1ffdaf3c, 0xff3d3d57,
+ 0x1ffd6049, 0xff30ad51, 0x1ffd0c67, 0xff241d6c,
+ 0x1ffcb397, 0xff178da8, 0x1ffc55d7, 0xff0afe08,
+ 0x1ffbf329, 0xfefe6e8e, 0x1ffb8b8c, 0xfef1df3c,
+ 0x1ffb1f01, 0xfee55013, 0x1ffaad86, 0xfed8c116,
+ 0x1ffa371e, 0xfecc3247, 0x1ff9bbc7, 0xfebfa3a7,
+ 0x1ff93b82, 0xfeb31538, 0x1ff8b64e, 0xfea686fd,
+ 0x1ff82c2c, 0xfe99f8f7, 0x1ff79d1c, 0xfe8d6b28,
+ 0x1ff7091e, 0xfe80dd92, 0x1ff67033, 0xfe745037,
+ 0x1ff5d259, 0xfe67c31a, 0x1ff52f92, 0xfe5b363b,
+ 0x1ff487dc, 0xfe4ea99e, 0x1ff3db3a, 0xfe421d43,
+ 0x1ff329aa, 0xfe35912c, 0x1ff2732d, 0xfe29055d,
+ 0x1ff1b7c2, 0xfe1c79d6, 0x1ff0f76a, 0xfe0fee9a,
+ 0x1ff03226, 0xfe0363aa, 0x1fef67f4, 0xfdf6d909,
+ 0x1fee98d6, 0xfdea4eb8, 0x1fedc4cb, 0xfdddc4b9,
+ 0x1fecebd3, 0xfdd13b0f, 0x1fec0df0, 0xfdc4b1bb,
+ 0x1feb2b20, 0xfdb828be, 0x1fea4364, 0xfdaba01c,
+ 0x1fe956bb, 0xfd9f17d6, 0x1fe86528, 0xfd928fee,
+ 0x1fe76ea8, 0xfd860866, 0x1fe6733d, 0xfd79813f,
+ 0x1fe572e7, 0xfd6cfa7c, 0x1fe46da5, 0xfd60741f,
+ 0x1fe36378, 0xfd53ee29, 0x1fe25461, 0xfd47689d,
+ 0x1fe1405e, 0xfd3ae37c, 0x1fe02771, 0xfd2e5ec8,
+ 0x1fdf099a, 0xfd21da84, 0x1fdde6d8, 0xfd1556b1,
+ 0x1fdcbf2d, 0xfd08d351, 0x1fdb9297, 0xfcfc5067,
+ 0x1fda6118, 0xfcefcdf3, 0x1fd92ab0, 0xfce34bf8,
+ 0x1fd7ef5e, 0xfcd6ca78, 0x1fd6af23, 0xfcca4975,
+ 0x1fd569ff, 0xfcbdc8f0, 0x1fd41ff2, 0xfcb148ed,
+ 0x1fd2d0fc, 0xfca4c96b, 0x1fd17d1f, 0xfc984a6f,
+ 0x1fd02459, 0xfc8bcbf8, 0x1fcec6ab, 0xfc7f4e0a,
+ 0x1fcd6416, 0xfc72d0a7, 0x1fcbfc99, 0xfc6653cf,
+ 0x1fca9035, 0xfc59d786, 0x1fc91ee9, 0xfc4d5bcd,
+ 0x1fc7a8b7, 0xfc40e0a5, 0x1fc62d9e, 0xfc346612,
+ 0x1fc4ad9f, 0xfc27ec14, 0x1fc328ba, 0xfc1b72af,
+ 0x1fc19eef, 0xfc0ef9e2, 0x1fc0103e, 0xfc0281b2,
+ 0x1fbe7ca7, 0xfbf60a1f, 0x1fbce42c, 0xfbe9932b,
+ 0x1fbb46cb, 0xfbdd1cd9, 0x1fb9a486, 0xfbd0a72a,
+ 0x1fb7fd5c, 0xfbc43221, 0x1fb6514e, 0xfbb7bdbe,
+ 0x1fb4a05c, 0xfbab4a05, 0x1fb2ea87, 0xfb9ed6f6,
+ 0x1fb12fce, 0xfb926495, 0x1faf7031, 0xfb85f2e2,
+ 0x1fadabb2, 0xfb7981e0, 0x1fabe251, 0xfb6d1191,
+ 0x1faa140d, 0xfb60a1f6, 0x1fa840e7, 0xfb543311,
+ 0x1fa668df, 0xfb47c4e6, 0x1fa48bf6, 0xfb3b5774,
+ 0x1fa2aa2b, 0xfb2eeabf, 0x1fa0c380, 0xfb227ec7,
+ 0x1f9ed7f4, 0xfb161390, 0x1f9ce787, 0xfb09a91b,
+ 0x1f9af23b, 0xfafd3f6a, 0x1f98f80f, 0xfaf0d67f,
+ 0x1f96f903, 0xfae46e5b, 0x1f94f518, 0xfad80701,
+ 0x1f92ec4f, 0xfacba072, 0x1f90dea7, 0xfabf3ab1,
+ 0x1f8ecc21, 0xfab2d5c0, 0x1f8cb4bd, 0xfaa671a0,
+ 0x1f8a987b, 0xfa9a0e52, 0x1f88775d, 0xfa8dabda,
+ 0x1f865161, 0xfa814a39, 0x1f842689, 0xfa74e971,
+ 0x1f81f6d5, 0xfa688984, 0x1f7fc244, 0xfa5c2a74,
+ 0x1f7d88d9, 0xfa4fcc42, 0x1f7b4a92, 0xfa436ef1,
+ 0x1f790770, 0xfa371282, 0x1f76bf74, 0xfa2ab6f7,
+ 0x1f74729d, 0xfa1e5c53, 0x1f7220ed, 0xfa120297,
+ 0x1f6fca63, 0xfa05a9c6, 0x1f6d6f01, 0xf9f951e0,
+ 0x1f6b0ec5, 0xf9ecfae8, 0x1f68a9b1, 0xf9e0a4e0,
+ 0x1f663fc6, 0xf9d44fc9, 0x1f63d102, 0xf9c7fba6,
+ 0x1f615d68, 0xf9bba879, 0x1f5ee4f6, 0xf9af5643,
+ 0x1f5c67af, 0xf9a30507, 0x1f59e591, 0xf996b4c5,
+ 0x1f575e9d, 0xf98a6581, 0x1f54d2d4, 0xf97e173c,
+ 0x1f524236, 0xf971c9f7, 0x1f4facc4, 0xf9657db6,
+ 0x1f4d127d, 0xf9593279, 0x1f4a7363, 0xf94ce843,
+ 0x1f47cf76, 0xf9409f15, 0x1f4526b5, 0xf93456f1,
+ 0x1f427922, 0xf9280fda, 0x1f3fc6bd, 0xf91bc9d1,
+ 0x1f3d0f87, 0xf90f84d8, 0x1f3a537f, 0xf90340f2,
+ 0x1f3792a6, 0xf8f6fe1e, 0x1f34ccfd, 0xf8eabc61,
+ 0x1f320284, 0xf8de7bbb, 0x1f2f333b, 0xf8d23c2f,
+ 0x1f2c5f23, 0xf8c5fdbe, 0x1f29863d, 0xf8b9c06b,
+ 0x1f26a888, 0xf8ad8437, 0x1f23c606, 0xf8a14923,
+ 0x1f20deb6, 0xf8950f33, 0x1f1df299, 0xf888d668,
+ 0x1f1b01b0, 0xf87c9ec3, 0x1f180bfb, 0xf8706847,
+ 0x1f15117a, 0xf86432f5, 0x1f12122e, 0xf857fed0,
+ 0x1f0f0e18, 0xf84bcbd9, 0x1f0c0538, 0xf83f9a12,
+ 0x1f08f78d, 0xf833697d, 0x1f05e51a, 0xf8273a1c,
+ 0x1f02cdde, 0xf81b0bf1, 0x1effb1d9, 0xf80edefe,
+ 0x1efc910d, 0xf802b344, 0x1ef96b79, 0xf7f688c5,
+ 0x1ef6411f, 0xf7ea5f84, 0x1ef311fe, 0xf7de3782,
+ 0x1eefde18, 0xf7d210c1, 0x1eeca56c, 0xf7c5eb42,
+ 0x1ee967fb, 0xf7b9c709, 0x1ee625c6, 0xf7ada416,
+ 0x1ee2decd, 0xf7a1826c, 0x1edf9311, 0xf795620c,
+ 0x1edc4292, 0xf78942f9, 0x1ed8ed51, 0xf77d2533,
+ 0x1ed5934e, 0xf77108be, 0x1ed23489, 0xf764ed9b,
+ 0x1eced104, 0xf758d3cb, 0x1ecb68be, 0xf74cbb51,
+ 0x1ec7fbb9, 0xf740a42e, 0x1ec489f5, 0xf7348e65,
+ 0x1ec11372, 0xf72879f6, 0x1ebd9831, 0xf71c66e5,
+ 0x1eba1832, 0xf7105533, 0x1eb69376, 0xf70444e2,
+ 0x1eb309fe, 0xf6f835f3, 0x1eaf7bc9, 0xf6ec2869,
+ 0x1eabe8da, 0xf6e01c45, 0x1ea8512f, 0xf6d41189,
+ 0x1ea4b4ca, 0xf6c80838, 0x1ea113ac, 0xf6bc0052,
+ 0x1e9d6dd4, 0xf6aff9db, 0x1e99c343, 0xf6a3f4d2,
+ 0x1e9613fb, 0xf697f13c, 0x1e925ffb, 0xf68bef18,
+ 0x1e8ea744, 0xf67fee6a, 0x1e8ae9d7, 0xf673ef33,
+ 0x1e8727b3, 0xf667f175, 0x1e8360db, 0xf65bf532,
+ 0x1e7f954e, 0xf64ffa6b, 0x1e7bc50d, 0xf6440123,
+ 0x1e77f019, 0xf638095a, 0x1e741672, 0xf62c1315,
+ 0x1e703818, 0xf6201e53, 0x1e6c550d, 0xf6142b17,
+ 0x1e686d51, 0xf6083962, 0x1e6480e5, 0xf5fc4937,
+ 0x1e608fc8, 0xf5f05a98, 0x1e5c99fc, 0xf5e46d85,
+ 0x1e589f82, 0xf5d88202, 0x1e54a05a, 0xf5cc9810,
+ 0x1e509c84, 0xf5c0afb0, 0x1e4c9401, 0xf5b4c8e5,
+ 0x1e4886d3, 0xf5a8e3b0, 0x1e4474f8, 0xf59d0013,
+ 0x1e405e73, 0xf5911e11, 0x1e3c4344, 0xf5853daa,
+ 0x1e38236b, 0xf5795ee1, 0x1e33fee9, 0xf56d81b8,
+ 0x1e2fd5be, 0xf561a630, 0x1e2ba7ec, 0xf555cc4b,
+ 0x1e277573, 0xf549f40b, 0x1e233e53, 0xf53e1d72,
+ 0x1e1f028e, 0xf5324882, 0x1e1ac223, 0xf526753d,
+ 0x1e167d14, 0xf51aa3a3, 0x1e123361, 0xf50ed3b8,
+ 0x1e0de50b, 0xf503057d, 0x1e099212, 0xf4f738f3,
+ 0x1e053a78, 0xf4eb6e1d, 0x1e00de3c, 0xf4dfa4fd,
+ 0x1dfc7d60, 0xf4d3dd94, 0x1df817e4, 0xf4c817e4,
+ 0x1df3adc9, 0xf4bc53ef, 0x1def3f10, 0xf4b091b6,
+ 0x1deacbb9, 0xf4a4d13c, 0x1de653c4, 0xf4991282,
+ 0x1de1d734, 0xf48d558b, 0x1ddd5607, 0xf4819a57,
+ 0x1dd8d040, 0xf475e0e9, 0x1dd445de, 0xf46a2943,
+ 0x1dcfb6e3, 0xf45e7366, 0x1dcb234e, 0xf452bf55,
+ 0x1dc68b22, 0xf4470d10, 0x1dc1ee5e, 0xf43b5c9a,
+ 0x1dbd4d03, 0xf42fadf4, 0x1db8a713, 0xf4240121,
+ 0x1db3fc8d, 0xf4185623, 0x1daf4d72, 0xf40cacfa,
+ 0x1daa99c3, 0xf40105a9, 0x1da5e181, 0xf3f56031,
+ 0x1da124ad, 0xf3e9bc95, 0x1d9c6347, 0xf3de1ad6,
+ 0x1d979d50, 0xf3d27af7, 0x1d92d2c9, 0xf3c6dcf7,
+ 0x1d8e03b2, 0xf3bb40db, 0x1d89300c, 0xf3afa6a3,
+ 0x1d8457d9, 0xf3a40e50, 0x1d7f7b18, 0xf39877e6,
+ 0x1d7a99cb, 0xf38ce366, 0x1d75b3f1, 0xf38150d1,
+ 0x1d70c98d, 0xf375c029, 0x1d6bda9f, 0xf36a3170,
+ 0x1d66e727, 0xf35ea4a8, 0x1d61ef26, 0xf35319d3,
+ 0x1d5cf29d, 0xf34790f2, 0x1d57f18d, 0xf33c0a08,
+ 0x1d52ebf7, 0xf3308515, 0x1d4de1db, 0xf325021c,
+ 0x1d48d33a, 0xf319811f, 0x1d43c015, 0xf30e021f,
+ 0x1d3ea86d, 0xf302851e, 0x1d398c42, 0xf2f70a1d,
+ 0x1d346b95, 0xf2eb9120, 0x1d2f4668, 0xf2e01a27,
+ 0x1d2a1cba, 0xf2d4a533, 0x1d24ee8d, 0xf2c93248,
+ 0x1d1fbbe1, 0xf2bdc167, 0x1d1a84b8, 0xf2b25291,
+ 0x1d154911, 0xf2a6e5c8, 0x1d1008ef, 0xf29b7b0e,
+ 0x1d0ac451, 0xf2901264, 0x1d057b39, 0xf284abce,
+ 0x1d002da6, 0xf279474b, 0x1cfadb9b, 0xf26de4df,
+ 0x1cf58518, 0xf262848a, 0x1cf02a1e, 0xf257264f,
+ 0x1ceacaad, 0xf24bca2f, 0x1ce566c7, 0xf240702c,
+ 0x1cdffe6b, 0xf2351847, 0x1cda919c, 0xf229c284,
+ 0x1cd5205a, 0xf21e6ee2, 0x1ccfaaa6, 0xf2131d65,
+ 0x1cca3080, 0xf207ce0d, 0x1cc4b1e9, 0xf1fc80dd,
+ 0x1cbf2ee3, 0xf1f135d6, 0x1cb9a76e, 0xf1e5ecfa,
+ 0x1cb41b8b, 0xf1daa64a, 0x1cae8b3a, 0xf1cf61ca,
+ 0x1ca8f67e, 0xf1c41f79, 0x1ca35d56, 0xf1b8df5a,
+ 0x1c9dbfc3, 0xf1ada16f, 0x1c981dc7, 0xf1a265ba,
+ 0x1c927762, 0xf1972c3b, 0x1c8ccc94, 0xf18bf4f6,
+ 0x1c871d60, 0xf180bfea, 0x1c8169c5, 0xf1758d1c,
+ 0x1c7bb1c6, 0xf16a5c8b, 0x1c75f561, 0xf15f2e3a,
+ 0x1c703499, 0xf154022b, 0x1c6a6f6f, 0xf148d85f,
+ 0x1c64a5e2, 0xf13db0d7, 0x1c5ed7f5, 0xf1328b97,
+ 0x1c5905a7, 0xf127689f, 0x1c532efb, 0xf11c47f0,
+ 0x1c4d53f0, 0xf111298e, 0x1c477488, 0xf1060d79,
+ 0x1c4190c4, 0xf0faf3b4, 0x1c3ba8a4, 0xf0efdc3f,
+ 0x1c35bc29, 0xf0e4c71d, 0x1c2fcb55, 0xf0d9b450,
+ 0x1c29d628, 0xf0cea3d9, 0x1c23dca3, 0xf0c395b9,
+ 0x1c1ddec7, 0xf0b889f3, 0x1c17dc95, 0xf0ad8088,
+ 0x1c11d60e, 0xf0a2797a, 0x1c0bcb33, 0xf09774ca,
+ 0x1c05bc05, 0xf08c727b, 0x1bffa884, 0xf081728e,
+ 0x1bf990b3, 0xf0767504, 0x1bf37490, 0xf06b79e0,
+ 0x1bed541f, 0xf0608123, 0x1be72f5e, 0xf0558acf,
+ 0x1be10651, 0xf04a96e5, 0x1bdad8f6, 0xf03fa568,
+ 0x1bd4a750, 0xf034b658, 0x1bce715f, 0xf029c9b8,
+ 0x1bc83725, 0xf01edf89, 0x1bc1f8a1, 0xf013f7cd,
+ 0x1bbbb5d6, 0xf0091285, 0x1bb56ec4, 0xeffe2fb4,
+ 0x1baf236c, 0xeff34f5a, 0x1ba8d3cf, 0xefe8717a,
+ 0x1ba27fee, 0xefdd9616, 0x1b9c27cb, 0xefd2bd2e,
+ 0x1b95cb65, 0xefc7e6c6, 0x1b8f6abe, 0xefbd12dd,
+ 0x1b8905d7, 0xefb24176, 0x1b829cb1, 0xefa77293,
+ 0x1b7c2f4d, 0xef9ca636, 0x1b75bdac, 0xef91dc5f,
+ 0x1b6f47cf, 0xef871511, 0x1b68cdb7, 0xef7c504d,
+ 0x1b624f65, 0xef718e16, 0x1b5bccd9, 0xef66ce6b,
+ 0x1b554616, 0xef5c1150, 0x1b4ebb1b, 0xef5156c7,
+ 0x1b482beb, 0xef469ecf, 0x1b419885, 0xef3be96c,
+ 0x1b3b00ec, 0xef31369f, 0x1b34651f, 0xef268669,
+ 0x1b2dc520, 0xef1bd8cd, 0x1b2720f1, 0xef112dcb,
+ 0x1b207891, 0xef068566, 0x1b19cc03, 0xeefbdf9f,
+ 0x1b131b46, 0xeef13c78, 0x1b0c665d, 0xeee69bf2,
+ 0x1b05ad48, 0xeedbfe0f, 0x1afef008, 0xeed162d1,
+ 0x1af82e9f, 0xeec6ca39, 0x1af1690c, 0xeebc3449,
+ 0x1aea9f52, 0xeeb1a103, 0x1ae3d172, 0xeea71068,
+ 0x1adcff6c, 0xee9c827a, 0x1ad62941, 0xee91f73a,
+ 0x1acf4ef3, 0xee876eaa, 0x1ac87082, 0xee7ce8cd,
+ 0x1ac18df0, 0xee7265a2, 0x1abaa73e, 0xee67e52c,
+ 0x1ab3bc6d, 0xee5d676d, 0x1aaccd7d, 0xee52ec67,
+ 0x1aa5da70, 0xee48741a, 0x1a9ee348, 0xee3dfe88,
+ 0x1a97e804, 0xee338bb4, 0x1a90e8a6, 0xee291b9e,
+ 0x1a89e530, 0xee1eae49, 0x1a82dda2, 0xee1443b5,
+ 0x1a7bd1fe, 0xee09dbe5, 0x1a74c243, 0xedff76da,
+ 0x1a6dae75, 0xedf51495, 0x1a669693, 0xedeab519,
+ 0x1a5f7a9f, 0xede05867, 0x1a585a99, 0xedd5fe80,
+ 0x1a513684, 0xedcba767, 0x1a4a0e60, 0xedc1531c,
+ 0x1a42e22d, 0xedb701a1, 0x1a3bb1ee, 0xedacb2f8,
+ 0x1a347da4, 0xeda26723, 0x1a2d454e, 0xed981e23,
+ 0x1a2608f0, 0xed8dd7f9, 0x1a1ec889, 0xed8394a8,
+ 0x1a17841b, 0xed795430, 0x1a103ba7, 0xed6f1694,
+ 0x1a08ef2e, 0xed64dbd5, 0x1a019eb1, 0xed5aa3f4,
+ 0x19fa4a31, 0xed506ef3, 0x19f2f1b0, 0xed463cd4,
+ 0x19eb952e, 0xed3c0d99, 0x19e434ae, 0xed31e142,
+ 0x19dcd02e, 0xed27b7d1, 0x19d567b2, 0xed1d9149,
+ 0x19cdfb3b, 0xed136daa, 0x19c68ac8, 0xed094cf6,
+ 0x19bf165c, 0xecff2f2f, 0x19b79df7, 0xecf51456,
+ 0x19b0219b, 0xeceafc6d, 0x19a8a149, 0xece0e775,
+ 0x19a11d02, 0xecd6d570, 0x199994c7, 0xecccc65f,
+ 0x1992089a, 0xecc2ba45, 0x198a787b, 0xecb8b121,
+ 0x1982e46c, 0xecaeaaf7, 0x197b4c6d, 0xeca4a7c8,
+ 0x1973b081, 0xec9aa795, 0x196c10a8, 0xec90aa60,
+ 0x19646ce3, 0xec86b029, 0x195cc534, 0xec7cb8f4,
+ 0x1955199b, 0xec72c4c1, 0x194d6a1b, 0xec68d392,
+ 0x1945b6b3, 0xec5ee568, 0x193dff66, 0xec54fa45,
+ 0x19364434, 0xec4b122b, 0x192e851f, 0xec412d1a,
+ 0x1926c228, 0xec374b16, 0x191efb50, 0xec2d6c1e,
+ 0x19173098, 0xec239035, 0x190f6202, 0xec19b75b,
+ 0x19078f8e, 0xec0fe194, 0x18ffb93e, 0xec060edf,
+ 0x18f7df13, 0xebfc3f3f, 0x18f0010f, 0xebf272b6,
+ 0x18e81f32, 0xebe8a944, 0x18e0397e, 0xebdee2eb,
+ 0x18d84ff3, 0xebd51fad, 0x18d06294, 0xebcb5f8b,
+ 0x18c87161, 0xebc1a286, 0x18c07c5c, 0xebb7e8a1,
+ 0x18b88386, 0xebae31dd, 0x18b086e0, 0xeba47e3b,
+ 0x18a8866b, 0xeb9acdbc, 0x18a08228, 0xeb912063,
+ 0x18987a1a, 0xeb877630, 0x18906e40, 0xeb7dcf25,
+ 0x18885e9c, 0xeb742b44, 0x18804b30, 0xeb6a8a8f,
+ 0x187833fd, 0xeb60ed05, 0x18701904, 0xeb5752aa,
+ 0x1867fa46, 0xeb4dbb7f, 0x185fd7c5, 0xeb442784,
+ 0x1857b181, 0xeb3a96bd, 0x184f877c, 0xeb310929,
+ 0x184759b8, 0xeb277eca, 0x183f2835, 0xeb1df7a3,
+ 0x1836f2f4, 0xeb1473b4, 0x182eb9f8, 0xeb0af2ff,
+ 0x18267d41, 0xeb017585, 0x181e3cd1, 0xeaf7fb48,
+ 0x1815f8a9, 0xeaee8449, 0x180db0c9, 0xeae5108a,
+ 0x18056534, 0xeadba00d, 0x17fd15eb, 0xead232d1,
+ 0x17f4c2ef, 0xeac8c8da, 0x17ec6c41, 0xeabf6229,
+ 0x17e411e2, 0xeab5febf, 0x17dbb3d5, 0xeaac9e9d,
+ 0x17d35219, 0xeaa341c5, 0x17caecb1, 0xea99e838,
+ 0x17c2839e, 0xea9091f8, 0x17ba16e0, 0xea873f06,
+ 0x17b1a67a, 0xea7def65, 0x17a9326d, 0xea74a314,
+ 0x17a0bab9, 0xea6b5a15, 0x17983f61, 0xea62146b,
+ 0x178fc065, 0xea58d216, 0x17873dc7, 0xea4f9318,
+ 0x177eb788, 0xea465772, 0x17762daa, 0xea3d1f26,
+ 0x176da02d, 0xea33ea35, 0x17650f13, 0xea2ab8a0,
+ 0x175c7a5e, 0xea218a69, 0x1753e20f, 0xea185f92,
+ 0x174b4626, 0xea0f381b, 0x1742a6a6, 0xea061407,
+ 0x173a0390, 0xe9fcf356, 0x17315ce5, 0xe9f3d60a,
+ 0x1728b2a6, 0xe9eabc25, 0x172004d5, 0xe9e1a5a8,
+ 0x17175373, 0xe9d89293, 0x170e9e81, 0xe9cf82e9,
+ 0x1705e601, 0xe9c676ac, 0x16fd29f5, 0xe9bd6ddb,
+ 0x16f46a5c, 0xe9b4687a, 0x16eba73a, 0xe9ab6688,
+ 0x16e2e08e, 0xe9a26808, 0x16da165b, 0xe9996cfc,
+ 0x16d148a2, 0xe9907563, 0x16c87764, 0xe9878140,
+ 0x16bfa2a3, 0xe97e9095, 0x16b6ca5f, 0xe975a361,
+ 0x16adee9b, 0xe96cb9a8, 0x16a50f58, 0xe963d36a,
+ 0x169c2c96, 0xe95af0a8, 0x16934658, 0xe9521165,
+ 0x168a5c9f, 0xe94935a1, 0x16816f6b, 0xe9405d5d,
+ 0x16787ec0, 0xe937889c, 0x166f8a9d, 0xe92eb75e,
+ 0x16669304, 0xe925e9a5, 0x165d97f8, 0xe91d1f72,
+ 0x16549978, 0xe91458c6, 0x164b9786, 0xe90b95a4,
+ 0x16429225, 0xe902d60b, 0x16398954, 0xe8fa19ff,
+ 0x16307d17, 0xe8f1617f, 0x16276d6d, 0xe8e8ac8d,
+ 0x161e5a58, 0xe8dffb2b, 0x161543db, 0xe8d74d5a,
+ 0x160c29f6, 0xe8cea31b, 0x16030caa, 0xe8c5fc70,
+ 0x15f9ebf9, 0xe8bd595a, 0x15f0c7e5, 0xe8b4b9da,
+ 0x15e7a06e, 0xe8ac1df1, 0x15de7597, 0xe8a385a2,
+ 0x15d54760, 0xe89af0ed, 0x15cc15cb, 0xe8925fd3,
+ 0x15c2e0da, 0xe889d256, 0x15b9a88e, 0xe8814878,
+ 0x15b06ce8, 0xe878c239, 0x15a72dea, 0xe8703f9b,
+ 0x159deb95, 0xe867c09f, 0x1594a5eb, 0xe85f4547,
+ 0x158b5cec, 0xe856cd93, 0x1582109b, 0xe84e5986,
+ 0x1578c0fa, 0xe845e920, 0x156f6e08, 0xe83d7c62,
+ 0x156617c8, 0xe835134f, 0x155cbe3b, 0xe82cade7,
+ 0x15536163, 0xe8244c2b, 0x154a0141, 0xe81bee1e,
+ 0x15409dd7, 0xe81393bf, 0x15373726, 0xe80b3d11,
+ 0x152dcd2f, 0xe802ea15, 0x15245ff3, 0xe7fa9acc,
+ 0x151aef76, 0xe7f24f37, 0x15117bb7, 0xe7ea0757,
+ 0x150804b8, 0xe7e1c32f, 0x14fe8a7b, 0xe7d982bf,
+ 0x14f50d01, 0xe7d14608, 0x14eb8c4c, 0xe7c90d0c,
+ 0x14e2085d, 0xe7c0d7cb, 0x14d88136, 0xe7b8a648,
+ 0x14cef6d7, 0xe7b07884, 0x14c56943, 0xe7a84e7f,
+ 0x14bbd87c, 0xe7a0283b, 0x14b24481, 0xe79805ba,
+ 0x14a8ad56, 0xe78fe6fc, 0x149f12fb, 0xe787cc03,
+ 0x14957571, 0xe77fb4d0, 0x148bd4bc, 0xe777a164,
+ 0x148230db, 0xe76f91c0, 0x147889d0, 0xe76785e6,
+ 0x146edf9d, 0xe75f7dd8, 0x14653244, 0xe7577995,
+ 0x145b81c5, 0xe74f7920, 0x1451ce23, 0xe7477c7a,
+ 0x1448175f, 0xe73f83a4, 0x143e5d7a, 0xe7378e9f,
+ 0x1434a075, 0xe72f9d6c, 0x142ae053, 0xe727b00d,
+ 0x14211d15, 0xe71fc682, 0x141756bc, 0xe717e0ce,
+ 0x140d8d4a, 0xe70ffef1, 0x1403c0c1, 0xe70820ed,
+ 0x13f9f121, 0xe70046c2, 0x13f01e6c, 0xe6f87072,
+ 0x13e648a5, 0xe6f09dfe, 0x13dc6fcb, 0xe6e8cf68,
+ 0x13d293e2, 0xe6e104b0, 0x13c8b4ea, 0xe6d93dd8,
+ 0x13bed2e6, 0xe6d17ae1, 0x13b4edd5, 0xe6c9bbcc,
+ 0x13ab05bb, 0xe6c2009a, 0x13a11a98, 0xe6ba494d,
+ 0x13972c6e, 0xe6b295e5, 0x138d3b3f, 0xe6aae665,
+ 0x1383470c, 0xe6a33acc, 0x13794fd7, 0xe69b931d,
+ 0x136f55a0, 0xe693ef58, 0x1365586b, 0xe68c4f7f,
+ 0x135b5838, 0xe684b393, 0x13515509, 0xe67d1b94,
+ 0x13474edf, 0xe6758785, 0x133d45bb, 0xe66df766,
+ 0x133339a1, 0xe6666b39, 0x13292a90, 0xe65ee2fe,
+ 0x131f188b, 0xe6575eb7, 0x13150393, 0xe64fde65,
+ 0x130aebaa, 0xe6486209, 0x1300d0d1, 0xe640e9a4,
+ 0x12f6b30a, 0xe6397538, 0x12ec9256, 0xe63204c5,
+ 0x12e26eb7, 0xe62a984e, 0x12d8482f, 0xe6232fd2,
+ 0x12ce1ebe, 0xe61bcb52, 0x12c3f267, 0xe6146ad2,
+ 0x12b9c32c, 0xe60d0e50, 0x12af910d, 0xe605b5cf,
+ 0x12a55c0c, 0xe5fe614f, 0x129b242b, 0xe5f710d2,
+ 0x1290e96c, 0xe5efc459, 0x1286abd0, 0xe5e87be5,
+ 0x127c6b58, 0xe5e13777, 0x12722807, 0xe5d9f710,
+ 0x1267e1dd, 0xe5d2bab2, 0x125d98dd, 0xe5cb825c,
+ 0x12534d08, 0xe5c44e12, 0x1248fe5f, 0xe5bd1dd3,
+ 0x123eace4, 0xe5b5f1a0, 0x12345899, 0xe5aec97c,
+ 0x122a0180, 0xe5a7a567, 0x121fa799, 0xe5a08561,
+ 0x12154ae7, 0xe599696d, 0x120aeb6b, 0xe592518b,
+ 0x12008926, 0xe58b3dbd, 0x11f6241b, 0xe5842e02,
+ 0x11ebbc4b, 0xe57d225e, 0x11e151b7, 0xe5761ad0,
+ 0x11d6e462, 0xe56f175a, 0x11cc744c, 0xe56817fc,
+ 0x11c20178, 0xe5611cb8, 0x11b78be6, 0xe55a2590,
+ 0x11ad1399, 0xe5533283, 0x11a29893, 0xe54c4393,
+ 0x11981ad4, 0xe54558c2, 0x118d9a5e, 0xe53e7210,
+ 0x11831733, 0xe5378f7e, 0x11789156, 0xe530b10d,
+ 0x116e08c6, 0xe529d6bf, 0x11637d86, 0xe5230094,
+ 0x1158ef98, 0xe51c2e8e, 0x114e5efd, 0xe51560ae,
+ 0x1143cbb7, 0xe50e96f4, 0x113935c7, 0xe507d161,
+ 0x112e9d2f, 0xe5010ff8, 0x112401f1, 0xe4fa52b8,
+ 0x1119640e, 0xe4f399a3, 0x110ec388, 0xe4ece4ba,
+ 0x11042061, 0xe4e633fd, 0x10f97a9a, 0xe4df876f,
+ 0x10eed235, 0xe4d8df0f, 0x10e42733, 0xe4d23ae0,
+ 0x10d97997, 0xe4cb9ae1, 0x10cec961, 0xe4c4ff14,
+ 0x10c41694, 0xe4be677b, 0x10b96131, 0xe4b7d415,
+ 0x10aea939, 0xe4b144e5, 0x10a3eeb0, 0xe4aab9ea,
+ 0x10993195, 0xe4a43327, 0x108e71ea, 0xe49db09b,
+ 0x1083afb3, 0xe4973249, 0x1078eaef, 0xe490b831,
+ 0x106e23a1, 0xe48a4254, 0x106359ca, 0xe483d0b3,
+ 0x10588d6d, 0xe47d634f, 0x104dbe8a, 0xe476fa29,
+ 0x1042ed23, 0xe4709542, 0x1038193a, 0xe46a349b,
+ 0x102d42d2, 0xe463d835, 0x102269ea, 0xe45d8012,
+ 0x10178e86, 0xe4572c31, 0x100cb0a6, 0xe450dc94,
+ 0x1001d04c, 0xe44a913c, 0x0ff6ed7b, 0xe4444a2a,
+ 0x0fec0833, 0xe43e075f, 0x0fe12077, 0xe437c8db,
+ 0x0fd63648, 0xe4318ea1, 0x0fcb49a8, 0xe42b58b0,
+ 0x0fc05a98, 0xe425270a, 0x0fb5691b, 0xe41ef9af,
+ 0x0faa7531, 0xe418d0a2, 0x0f9f7edd, 0xe412abe1,
+ 0x0f948620, 0xe40c8b70, 0x0f898afc, 0xe4066f4d,
+ 0x0f7e8d72, 0xe400577c, 0x0f738d85, 0xe3fa43fb,
+ 0x0f688b36, 0xe3f434cd, 0x0f5d8686, 0xe3ee29f2,
+ 0x0f527f78, 0xe3e8236b, 0x0f47760d, 0xe3e22139,
+ 0x0f3c6a47, 0xe3dc235d, 0x0f315c27, 0xe3d629d8,
+ 0x0f264bb0, 0xe3d034ab, 0x0f1b38e3, 0xe3ca43d7,
+ 0x0f1023c1, 0xe3c4575c, 0x0f050c4c, 0xe3be6f3c,
+ 0x0ef9f287, 0xe3b88b78, 0x0eeed672, 0xe3b2ac10,
+ 0x0ee3b810, 0xe3acd105, 0x0ed89761, 0xe3a6fa59,
+ 0x0ecd7469, 0xe3a1280b, 0x0ec24f29, 0xe39b5a1e,
+ 0x0eb727a1, 0xe3959091, 0x0eabfdd5, 0xe38fcb67,
+ 0x0ea0d1c6, 0xe38a0a9f, 0x0e95a375, 0xe3844e3a,
+ 0x0e8a72e4, 0xe37e963b, 0x0e7f4016, 0xe378e2a0,
+ 0x0e740b0a, 0xe373336c, 0x0e68d3c5, 0xe36d889e,
+ 0x0e5d9a46, 0xe367e239, 0x0e525e91, 0xe362403d,
+ 0x0e4720a6, 0xe35ca2aa, 0x0e3be087, 0xe3570982,
+ 0x0e309e36, 0xe35174c6, 0x0e2559b6, 0xe34be475,
+ 0x0e1a1306, 0xe3465892, 0x0e0eca2a, 0xe340d11d,
+ 0x0e037f23, 0xe33b4e17, 0x0df831f3, 0xe335cf80,
+ 0x0dece29b, 0xe330555a, 0x0de1911e, 0xe32adfa6,
+ 0x0dd63d7c, 0xe3256e64, 0x0dcae7b9, 0xe3200195,
+ 0x0dbf8fd4, 0xe31a9939, 0x0db435d1, 0xe3153553,
+ 0x0da8d9b1, 0xe30fd5e2, 0x0d9d7b76, 0xe30a7ae8,
+ 0x0d921b21, 0xe3052465, 0x0d86b8b5, 0xe2ffd25a,
+ 0x0d7b5432, 0xe2fa84c7, 0x0d6fed9c, 0xe2f53baf,
+ 0x0d6484f2, 0xe2eff711, 0x0d591a38, 0xe2eab6ef,
+ 0x0d4dad6f, 0xe2e57b48, 0x0d423e99, 0xe2e0441f,
+ 0x0d36cdb8, 0xe2db1173, 0x0d2b5acd, 0xe2d5e346,
+ 0x0d1fe5d9, 0xe2d0b998, 0x0d146ee0, 0xe2cb946b,
+ 0x0d08f5e3, 0xe2c673be, 0x0cfd7ae2, 0xe2c15793,
+ 0x0cf1fde1, 0xe2bc3feb, 0x0ce67ee1, 0xe2b72cc6,
+ 0x0cdafde4, 0xe2b21e25, 0x0ccf7aeb, 0xe2ad1409,
+ 0x0cc3f5f8, 0xe2a80e73, 0x0cb86f0e, 0xe2a30d63,
+ 0x0cace62d, 0xe29e10da, 0x0ca15b58, 0xe29918d9,
+ 0x0c95ce90, 0xe2942561, 0x0c8a3fd7, 0xe28f3673,
+ 0x0c7eaf2f, 0xe28a4c0f, 0x0c731c9a, 0xe2856635,
+ 0x0c67881a, 0xe28084e8, 0x0c5bf1b0, 0xe27ba827,
+ 0x0c50595d, 0xe276cff4, 0x0c44bf25, 0xe271fc4e,
+ 0x0c392309, 0xe26d2d37, 0x0c2d8509, 0xe26862b0,
+ 0x0c21e52a, 0xe2639cb9, 0x0c16436b, 0xe25edb53,
+ 0x0c0a9fcf, 0xe25a1e7f, 0x0bfefa57, 0xe255663d,
+ 0x0bf35306, 0xe250b28e, 0x0be7a9dd, 0xe24c0373,
+ 0x0bdbfedf, 0xe24758ed, 0x0bd0520c, 0xe242b2fd,
+ 0x0bc4a366, 0xe23e11a2, 0x0bb8f2f0, 0xe23974de,
+ 0x0bad40ab, 0xe234dcb2, 0x0ba18c9a, 0xe230491d,
+ 0x0b95d6bd, 0xe22bba22, 0x0b8a1f17, 0xe2272fc0,
+ 0x0b7e65a9, 0xe222a9f9, 0x0b72aa75, 0xe21e28cc,
+ 0x0b66ed7e, 0xe219ac3c, 0x0b5b2ec4, 0xe2153447,
+ 0x0b4f6e4a, 0xe210c0f0, 0x0b43ac11, 0xe20c5237,
+ 0x0b37e81c, 0xe207e81c, 0x0b2c226c, 0xe20382a0,
+ 0x0b205b03, 0xe1ff21c4, 0x0b1491e3, 0xe1fac588,
+ 0x0b08c70d, 0xe1f66dee, 0x0afcfa83, 0xe1f21af5,
+ 0x0af12c48, 0xe1edcc9f, 0x0ae55c5d, 0xe1e982ec,
+ 0x0ad98ac3, 0xe1e53ddd, 0x0acdb77e, 0xe1e0fd72,
+ 0x0ac1e28e, 0xe1dcc1ad, 0x0ab60bf5, 0xe1d88a8d,
+ 0x0aaa33b5, 0xe1d45814, 0x0a9e59d0, 0xe1d02a42,
+ 0x0a927e48, 0xe1cc0117, 0x0a86a11f, 0xe1c7dc95,
+ 0x0a7ac256, 0xe1c3bcbc, 0x0a6ee1ef, 0xe1bfa18d,
+ 0x0a62ffed, 0xe1bb8b08, 0x0a571c50, 0xe1b7792d,
+ 0x0a4b371b, 0xe1b36bff, 0x0a3f5050, 0xe1af637c,
+ 0x0a3367f0, 0xe1ab5fa6, 0x0a277dfe, 0xe1a7607e,
+ 0x0a1b927b, 0xe1a36604, 0x0a0fa568, 0xe19f7038,
+ 0x0a03b6c9, 0xe19b7f1b, 0x09f7c69e, 0xe19792af,
+ 0x09ebd4e9, 0xe193aaf3, 0x09dfe1ad, 0xe18fc7e8,
+ 0x09d3eceb, 0xe18be98e, 0x09c7f6a6, 0xe1880fe7,
+ 0x09bbfedd, 0xe1843af3, 0x09b00595, 0xe1806ab2,
+ 0x09a40ace, 0xe17c9f25, 0x09980e8b, 0xe178d84d,
+ 0x098c10cd, 0xe1751629, 0x09801196, 0xe17158bc,
+ 0x097410e8, 0xe16da005, 0x09680ec4, 0xe169ec05,
+ 0x095c0b2e, 0xe1663cbd, 0x09500625, 0xe162922c,
+ 0x0943ffae, 0xe15eec54, 0x0937f7c8, 0xe15b4b36,
+ 0x092bee77, 0xe157aed1, 0x091fe3bb, 0xe1541726,
+ 0x0913d797, 0xe1508437, 0x0907ca0d, 0xe14cf602,
+ 0x08fbbb1e, 0xe1496c8a, 0x08efaacd, 0xe145e7ce,
+ 0x08e3991b, 0xe14267cf, 0x08d7860a, 0xe13eec8e,
+ 0x08cb719b, 0xe13b760b, 0x08bf5bd2, 0xe1380447,
+ 0x08b344af, 0xe1349742, 0x08a72c35, 0xe1312efc,
+ 0x089b1265, 0xe12dcb77, 0x088ef742, 0xe12a6cb2,
+ 0x0882dacd, 0xe12712af, 0x0876bd07, 0xe123bd6e,
+ 0x086a9df4, 0xe1206cef, 0x085e7d94, 0xe11d2133,
+ 0x08525bea, 0xe119da3a, 0x084638f7, 0xe1169805,
+ 0x083a14be, 0xe1135a94, 0x082def3f, 0xe11021e8,
+ 0x0821c87e, 0xe10cee02, 0x0815a07c, 0xe109bee1,
+ 0x0809773b, 0xe1069487, 0x07fd4cbc, 0xe1036ef3,
+ 0x07f12102, 0xe1004e27, 0x07e4f40f, 0xe0fd3222,
+ 0x07d8c5e4, 0xe0fa1ae6, 0x07cc9683, 0xe0f70873,
+ 0x07c065ee, 0xe0f3fac8, 0x07b43427, 0xe0f0f1e8,
+ 0x07a80130, 0xe0ededd2, 0x079bcd0b, 0xe0eaee86,
+ 0x078f97b9, 0xe0e7f405, 0x0783613d, 0xe0e4fe50,
+ 0x07772998, 0xe0e20d67, 0x076af0cd, 0xe0df214a,
+ 0x075eb6dd, 0xe0dc39fa, 0x07527bc9, 0xe0d95778,
+ 0x07463f95, 0xe0d679c3, 0x073a0242, 0xe0d3a0dd,
+ 0x072dc3d1, 0xe0d0ccc5, 0x07218445, 0xe0cdfd7c,
+ 0x0715439f, 0xe0cb3303, 0x070901e2, 0xe0c86d5a,
+ 0x06fcbf0e, 0xe0c5ac81, 0x06f07b28, 0xe0c2f079,
+ 0x06e4362f, 0xe0c03943, 0x06d7f026, 0xe0bd86de,
+ 0x06cba90f, 0xe0bad94b, 0x06bf60eb, 0xe0b8308a,
+ 0x06b317bd, 0xe0b58c9d, 0x06a6cd87, 0xe0b2ed83,
+ 0x069a824a, 0xe0b0533c, 0x068e3609, 0xe0adbdca,
+ 0x0681e8c4, 0xe0ab2d2c, 0x06759a7f, 0xe0a8a163,
+ 0x06694b3b, 0xe0a61a6f, 0x065cfaf9, 0xe0a39851,
+ 0x0650a9bd, 0xe0a11b0a, 0x06445787, 0xe09ea298,
+ 0x0638045a, 0xe09c2efe, 0x062bb037, 0xe099c03a,
+ 0x061f5b20, 0xe097564f, 0x06130518, 0xe094f13b,
+ 0x0606ae20, 0xe09290ff, 0x05fa563a, 0xe090359d,
+ 0x05edfd69, 0xe08ddf13, 0x05e1a3ad, 0xe08b8d63,
+ 0x05d54909, 0xe089408c, 0x05c8ed7e, 0xe086f890,
+ 0x05bc910f, 0xe084b56e, 0x05b033be, 0xe0827727,
+ 0x05a3d58c, 0xe0803dbc, 0x0597767c, 0xe07e092b,
+ 0x058b168f, 0xe07bd977, 0x057eb5c7, 0xe079ae9f,
+ 0x05725426, 0xe07788a3, 0x0565f1ae, 0xe0756785,
+ 0x05598e60, 0xe0734b43, 0x054d2a40, 0xe07133df,
+ 0x0540c54f, 0xe06f2159, 0x05345f8e, 0xe06d13b1,
+ 0x0527f8ff, 0xe06b0ae8, 0x051b91a5, 0xe06906fd,
+ 0x050f2981, 0xe06707f1, 0x0502c096, 0xe0650dc5,
+ 0x04f656e5, 0xe0631879, 0x04e9ec70, 0xe061280c,
+ 0x04dd8139, 0xe05f3c80, 0x04d11541, 0xe05d55d5,
+ 0x04c4a88c, 0xe05b740a, 0x04b83b1a, 0xe0599721,
+ 0x04abccef, 0xe057bf19, 0x049f5e0a, 0xe055ebf3,
+ 0x0492ee6f, 0xe0541daf, 0x04867e20, 0xe052544e,
+ 0x047a0d1e, 0xe0508fcf, 0x046d9b6b, 0xe04ed032,
+ 0x0461290a, 0xe04d1579, 0x0454b5fb, 0xe04b5fa4,
+ 0x04484242, 0xe049aeb2, 0x043bcddf, 0xe04802a4,
+ 0x042f58d6, 0xe0465b7a, 0x0422e327, 0xe044b935,
+ 0x04166cd5, 0xe0431bd4, 0x0409f5e1, 0xe0418359,
+ 0x03fd7e4e, 0xe03fefc2, 0x03f1061e, 0xe03e6111,
+ 0x03e48d51, 0xe03cd746, 0x03d813ec, 0xe03b5261,
+ 0x03cb99ee, 0xe039d262, 0x03bf1f5b, 0xe0385749,
+ 0x03b2a433, 0xe036e117, 0x03a6287a, 0xe0356fcb,
+ 0x0399ac31, 0xe0340367, 0x038d2f59, 0xe0329bea,
+ 0x0380b1f6, 0xe0313955, 0x03743408, 0xe02fdba7,
+ 0x0367b591, 0xe02e82e1, 0x035b3695, 0xe02d2f04,
+ 0x034eb713, 0xe02be00e, 0x03423710, 0xe02a9601,
+ 0x0335b68b, 0xe02950dd, 0x03293588, 0xe02810a2,
+ 0x031cb408, 0xe026d550, 0x0310320d, 0xe0259ee8,
+ 0x0303af99, 0xe0246d69, 0x02f72caf, 0xe02340d3,
+ 0x02eaa94f, 0xe0221928, 0x02de257c, 0xe020f666,
+ 0x02d1a138, 0xe01fd88f, 0x02c51c84, 0xe01ebfa2,
+ 0x02b89763, 0xe01dab9f, 0x02ac11d7, 0xe01c9c88,
+ 0x029f8be1, 0xe01b925b, 0x02930584, 0xe01a8d19,
+ 0x02867ec1, 0xe0198cc3, 0x0279f79a, 0xe0189158,
+ 0x026d7012, 0xe0179ad8, 0x0260e82a, 0xe016a945,
+ 0x02545fe4, 0xe015bc9c, 0x0247d742, 0xe014d4e0,
+ 0x023b4e45, 0xe013f210, 0x022ec4f1, 0xe013142d,
+ 0x02223b47, 0xe0123b35, 0x0215b148, 0xe011672a,
+ 0x020926f7, 0xe010980c, 0x01fc9c56, 0xe00fcdda,
+ 0x01f01166, 0xe00f0896, 0x01e3862a, 0xe00e483e,
+ 0x01d6faa3, 0xe00d8cd3, 0x01ca6ed4, 0xe00cd656,
+ 0x01bde2bd, 0xe00c24c6, 0x01b15662, 0xe00b7824,
+ 0x01a4c9c5, 0xe00ad06e, 0x01983ce6, 0xe00a2da7,
+ 0x018bafc9, 0xe0098fcd, 0x017f226e, 0xe008f6e2,
+ 0x017294d8, 0xe00862e4, 0x01660709, 0xe007d3d4,
+ 0x01597903, 0xe00749b2, 0x014ceac8, 0xe006c47e,
+ 0x01405c59, 0xe0064439, 0x0133cdb9, 0xe005c8e2,
+ 0x01273eea, 0xe005527a, 0x011aafed, 0xe004e0ff,
+ 0x010e20c4, 0xe0047474, 0x01019172, 0xe0040cd7,
+ 0x00f501f8, 0xe003aa29, 0x00e87258, 0xe0034c69,
+ 0x00dbe294, 0xe002f399, 0x00cf52af, 0xe0029fb7,
+ 0x00c2c2a9, 0xe00250c4, 0x00b63286, 0xe00206c0,
+ 0x00a9a246, 0xe001c1ab, 0x009d11ec, 0xe0018185,
+ 0x0090817a, 0xe001464e, 0x0083f0f2, 0xe0011006,
+ 0x00776055, 0xe000deae, 0x006acfa6, 0xe000b244,
+ 0x005e3ee6, 0xe0008aca, 0x0051ae18, 0xe000683f,
+ 0x00451d3d, 0xe0004aa3, 0x00388c58, 0xe00031f7,
+ 0x002bfb6a, 0xe0001e3a, 0x001f6a75, 0xe0000f6c,
+ 0x0012d97b, 0xe000058d, 0x0006487f, 0xe000009e,
+};
+
+static ogg_int16_t bitrevlook_8192[2048]={
+ 0x0ffe, 0x0000, 0x07fe, 0x0800,
+ 0x0bfe, 0x0400, 0x03fe, 0x0c00,
+ 0x0dfe, 0x0200, 0x05fe, 0x0a00,
+ 0x09fe, 0x0600, 0x01fe, 0x0e00,
+ 0x0efe, 0x0100, 0x06fe, 0x0900,
+ 0x0afe, 0x0500, 0x02fe, 0x0d00,
+ 0x0cfe, 0x0300, 0x04fe, 0x0b00,
+ 0x08fe, 0x0700, 0x00fe, 0x0f00,
+ 0x0f7e, 0x0080, 0x077e, 0x0880,
+ 0x0b7e, 0x0480, 0x037e, 0x0c80,
+ 0x0d7e, 0x0280, 0x057e, 0x0a80,
+ 0x097e, 0x0680, 0x017e, 0x0e80,
+ 0x0e7e, 0x0180, 0x067e, 0x0980,
+ 0x0a7e, 0x0580, 0x027e, 0x0d80,
+ 0x0c7e, 0x0380, 0x047e, 0x0b80,
+ 0x087e, 0x0780, 0x007e, 0x0f80,
+ 0x0fbe, 0x0040, 0x07be, 0x0840,
+ 0x0bbe, 0x0440, 0x03be, 0x0c40,
+ 0x0dbe, 0x0240, 0x05be, 0x0a40,
+ 0x09be, 0x0640, 0x01be, 0x0e40,
+ 0x0ebe, 0x0140, 0x06be, 0x0940,
+ 0x0abe, 0x0540, 0x02be, 0x0d40,
+ 0x0cbe, 0x0340, 0x04be, 0x0b40,
+ 0x08be, 0x0740, 0x00be, 0x0f40,
+ 0x0f3e, 0x00c0, 0x073e, 0x08c0,
+ 0x0b3e, 0x04c0, 0x033e, 0x0cc0,
+ 0x0d3e, 0x02c0, 0x053e, 0x0ac0,
+ 0x093e, 0x06c0, 0x013e, 0x0ec0,
+ 0x0e3e, 0x01c0, 0x063e, 0x09c0,
+ 0x0a3e, 0x05c0, 0x023e, 0x0dc0,
+ 0x0c3e, 0x03c0, 0x043e, 0x0bc0,
+ 0x083e, 0x07c0, 0x003e, 0x0fc0,
+ 0x0fde, 0x0020, 0x07de, 0x0820,
+ 0x0bde, 0x0420, 0x03de, 0x0c20,
+ 0x0dde, 0x0220, 0x05de, 0x0a20,
+ 0x09de, 0x0620, 0x01de, 0x0e20,
+ 0x0ede, 0x0120, 0x06de, 0x0920,
+ 0x0ade, 0x0520, 0x02de, 0x0d20,
+ 0x0cde, 0x0320, 0x04de, 0x0b20,
+ 0x08de, 0x0720, 0x00de, 0x0f20,
+ 0x0f5e, 0x00a0, 0x075e, 0x08a0,
+ 0x0b5e, 0x04a0, 0x035e, 0x0ca0,
+ 0x0d5e, 0x02a0, 0x055e, 0x0aa0,
+ 0x095e, 0x06a0, 0x015e, 0x0ea0,
+ 0x0e5e, 0x01a0, 0x065e, 0x09a0,
+ 0x0a5e, 0x05a0, 0x025e, 0x0da0,
+ 0x0c5e, 0x03a0, 0x045e, 0x0ba0,
+ 0x085e, 0x07a0, 0x005e, 0x0fa0,
+ 0x0f9e, 0x0060, 0x079e, 0x0860,
+ 0x0b9e, 0x0460, 0x039e, 0x0c60,
+ 0x0d9e, 0x0260, 0x059e, 0x0a60,
+ 0x099e, 0x0660, 0x019e, 0x0e60,
+ 0x0e9e, 0x0160, 0x069e, 0x0960,
+ 0x0a9e, 0x0560, 0x029e, 0x0d60,
+ 0x0c9e, 0x0360, 0x049e, 0x0b60,
+ 0x089e, 0x0760, 0x009e, 0x0f60,
+ 0x0f1e, 0x00e0, 0x071e, 0x08e0,
+ 0x0b1e, 0x04e0, 0x031e, 0x0ce0,
+ 0x0d1e, 0x02e0, 0x051e, 0x0ae0,
+ 0x091e, 0x06e0, 0x011e, 0x0ee0,
+ 0x0e1e, 0x01e0, 0x061e, 0x09e0,
+ 0x0a1e, 0x05e0, 0x021e, 0x0de0,
+ 0x0c1e, 0x03e0, 0x041e, 0x0be0,
+ 0x081e, 0x07e0, 0x001e, 0x0fe0,
+ 0x0fee, 0x0010, 0x07ee, 0x0810,
+ 0x0bee, 0x0410, 0x03ee, 0x0c10,
+ 0x0dee, 0x0210, 0x05ee, 0x0a10,
+ 0x09ee, 0x0610, 0x01ee, 0x0e10,
+ 0x0eee, 0x0110, 0x06ee, 0x0910,
+ 0x0aee, 0x0510, 0x02ee, 0x0d10,
+ 0x0cee, 0x0310, 0x04ee, 0x0b10,
+ 0x08ee, 0x0710, 0x00ee, 0x0f10,
+ 0x0f6e, 0x0090, 0x076e, 0x0890,
+ 0x0b6e, 0x0490, 0x036e, 0x0c90,
+ 0x0d6e, 0x0290, 0x056e, 0x0a90,
+ 0x096e, 0x0690, 0x016e, 0x0e90,
+ 0x0e6e, 0x0190, 0x066e, 0x0990,
+ 0x0a6e, 0x0590, 0x026e, 0x0d90,
+ 0x0c6e, 0x0390, 0x046e, 0x0b90,
+ 0x086e, 0x0790, 0x006e, 0x0f90,
+ 0x0fae, 0x0050, 0x07ae, 0x0850,
+ 0x0bae, 0x0450, 0x03ae, 0x0c50,
+ 0x0dae, 0x0250, 0x05ae, 0x0a50,
+ 0x09ae, 0x0650, 0x01ae, 0x0e50,
+ 0x0eae, 0x0150, 0x06ae, 0x0950,
+ 0x0aae, 0x0550, 0x02ae, 0x0d50,
+ 0x0cae, 0x0350, 0x04ae, 0x0b50,
+ 0x08ae, 0x0750, 0x00ae, 0x0f50,
+ 0x0f2e, 0x00d0, 0x072e, 0x08d0,
+ 0x0b2e, 0x04d0, 0x032e, 0x0cd0,
+ 0x0d2e, 0x02d0, 0x052e, 0x0ad0,
+ 0x092e, 0x06d0, 0x012e, 0x0ed0,
+ 0x0e2e, 0x01d0, 0x062e, 0x09d0,
+ 0x0a2e, 0x05d0, 0x022e, 0x0dd0,
+ 0x0c2e, 0x03d0, 0x042e, 0x0bd0,
+ 0x082e, 0x07d0, 0x002e, 0x0fd0,
+ 0x0fce, 0x0030, 0x07ce, 0x0830,
+ 0x0bce, 0x0430, 0x03ce, 0x0c30,
+ 0x0dce, 0x0230, 0x05ce, 0x0a30,
+ 0x09ce, 0x0630, 0x01ce, 0x0e30,
+ 0x0ece, 0x0130, 0x06ce, 0x0930,
+ 0x0ace, 0x0530, 0x02ce, 0x0d30,
+ 0x0cce, 0x0330, 0x04ce, 0x0b30,
+ 0x08ce, 0x0730, 0x00ce, 0x0f30,
+ 0x0f4e, 0x00b0, 0x074e, 0x08b0,
+ 0x0b4e, 0x04b0, 0x034e, 0x0cb0,
+ 0x0d4e, 0x02b0, 0x054e, 0x0ab0,
+ 0x094e, 0x06b0, 0x014e, 0x0eb0,
+ 0x0e4e, 0x01b0, 0x064e, 0x09b0,
+ 0x0a4e, 0x05b0, 0x024e, 0x0db0,
+ 0x0c4e, 0x03b0, 0x044e, 0x0bb0,
+ 0x084e, 0x07b0, 0x004e, 0x0fb0,
+ 0x0f8e, 0x0070, 0x078e, 0x0870,
+ 0x0b8e, 0x0470, 0x038e, 0x0c70,
+ 0x0d8e, 0x0270, 0x058e, 0x0a70,
+ 0x098e, 0x0670, 0x018e, 0x0e70,
+ 0x0e8e, 0x0170, 0x068e, 0x0970,
+ 0x0a8e, 0x0570, 0x028e, 0x0d70,
+ 0x0c8e, 0x0370, 0x048e, 0x0b70,
+ 0x088e, 0x0770, 0x008e, 0x0f70,
+ 0x0f0e, 0x00f0, 0x070e, 0x08f0,
+ 0x0b0e, 0x04f0, 0x030e, 0x0cf0,
+ 0x0d0e, 0x02f0, 0x050e, 0x0af0,
+ 0x090e, 0x06f0, 0x010e, 0x0ef0,
+ 0x0e0e, 0x01f0, 0x060e, 0x09f0,
+ 0x0a0e, 0x05f0, 0x020e, 0x0df0,
+ 0x0c0e, 0x03f0, 0x040e, 0x0bf0,
+ 0x080e, 0x07f0, 0x000e, 0x0ff0,
+ 0x0ff6, 0x0008, 0x07f6, 0x0808,
+ 0x0bf6, 0x0408, 0x03f6, 0x0c08,
+ 0x0df6, 0x0208, 0x05f6, 0x0a08,
+ 0x09f6, 0x0608, 0x01f6, 0x0e08,
+ 0x0ef6, 0x0108, 0x06f6, 0x0908,
+ 0x0af6, 0x0508, 0x02f6, 0x0d08,
+ 0x0cf6, 0x0308, 0x04f6, 0x0b08,
+ 0x08f6, 0x0708, 0x00f6, 0x0f08,
+ 0x0f76, 0x0088, 0x0776, 0x0888,
+ 0x0b76, 0x0488, 0x0376, 0x0c88,
+ 0x0d76, 0x0288, 0x0576, 0x0a88,
+ 0x0976, 0x0688, 0x0176, 0x0e88,
+ 0x0e76, 0x0188, 0x0676, 0x0988,
+ 0x0a76, 0x0588, 0x0276, 0x0d88,
+ 0x0c76, 0x0388, 0x0476, 0x0b88,
+ 0x0876, 0x0788, 0x0076, 0x0f88,
+ 0x0fb6, 0x0048, 0x07b6, 0x0848,
+ 0x0bb6, 0x0448, 0x03b6, 0x0c48,
+ 0x0db6, 0x0248, 0x05b6, 0x0a48,
+ 0x09b6, 0x0648, 0x01b6, 0x0e48,
+ 0x0eb6, 0x0148, 0x06b6, 0x0948,
+ 0x0ab6, 0x0548, 0x02b6, 0x0d48,
+ 0x0cb6, 0x0348, 0x04b6, 0x0b48,
+ 0x08b6, 0x0748, 0x00b6, 0x0f48,
+ 0x0f36, 0x00c8, 0x0736, 0x08c8,
+ 0x0b36, 0x04c8, 0x0336, 0x0cc8,
+ 0x0d36, 0x02c8, 0x0536, 0x0ac8,
+ 0x0936, 0x06c8, 0x0136, 0x0ec8,
+ 0x0e36, 0x01c8, 0x0636, 0x09c8,
+ 0x0a36, 0x05c8, 0x0236, 0x0dc8,
+ 0x0c36, 0x03c8, 0x0436, 0x0bc8,
+ 0x0836, 0x07c8, 0x0036, 0x0fc8,
+ 0x0fd6, 0x0028, 0x07d6, 0x0828,
+ 0x0bd6, 0x0428, 0x03d6, 0x0c28,
+ 0x0dd6, 0x0228, 0x05d6, 0x0a28,
+ 0x09d6, 0x0628, 0x01d6, 0x0e28,
+ 0x0ed6, 0x0128, 0x06d6, 0x0928,
+ 0x0ad6, 0x0528, 0x02d6, 0x0d28,
+ 0x0cd6, 0x0328, 0x04d6, 0x0b28,
+ 0x08d6, 0x0728, 0x00d6, 0x0f28,
+ 0x0f56, 0x00a8, 0x0756, 0x08a8,
+ 0x0b56, 0x04a8, 0x0356, 0x0ca8,
+ 0x0d56, 0x02a8, 0x0556, 0x0aa8,
+ 0x0956, 0x06a8, 0x0156, 0x0ea8,
+ 0x0e56, 0x01a8, 0x0656, 0x09a8,
+ 0x0a56, 0x05a8, 0x0256, 0x0da8,
+ 0x0c56, 0x03a8, 0x0456, 0x0ba8,
+ 0x0856, 0x07a8, 0x0056, 0x0fa8,
+ 0x0f96, 0x0068, 0x0796, 0x0868,
+ 0x0b96, 0x0468, 0x0396, 0x0c68,
+ 0x0d96, 0x0268, 0x0596, 0x0a68,
+ 0x0996, 0x0668, 0x0196, 0x0e68,
+ 0x0e96, 0x0168, 0x0696, 0x0968,
+ 0x0a96, 0x0568, 0x0296, 0x0d68,
+ 0x0c96, 0x0368, 0x0496, 0x0b68,
+ 0x0896, 0x0768, 0x0096, 0x0f68,
+ 0x0f16, 0x00e8, 0x0716, 0x08e8,
+ 0x0b16, 0x04e8, 0x0316, 0x0ce8,
+ 0x0d16, 0x02e8, 0x0516, 0x0ae8,
+ 0x0916, 0x06e8, 0x0116, 0x0ee8,
+ 0x0e16, 0x01e8, 0x0616, 0x09e8,
+ 0x0a16, 0x05e8, 0x0216, 0x0de8,
+ 0x0c16, 0x03e8, 0x0416, 0x0be8,
+ 0x0816, 0x07e8, 0x0016, 0x0fe8,
+ 0x0fe6, 0x0018, 0x07e6, 0x0818,
+ 0x0be6, 0x0418, 0x03e6, 0x0c18,
+ 0x0de6, 0x0218, 0x05e6, 0x0a18,
+ 0x09e6, 0x0618, 0x01e6, 0x0e18,
+ 0x0ee6, 0x0118, 0x06e6, 0x0918,
+ 0x0ae6, 0x0518, 0x02e6, 0x0d18,
+ 0x0ce6, 0x0318, 0x04e6, 0x0b18,
+ 0x08e6, 0x0718, 0x00e6, 0x0f18,
+ 0x0f66, 0x0098, 0x0766, 0x0898,
+ 0x0b66, 0x0498, 0x0366, 0x0c98,
+ 0x0d66, 0x0298, 0x0566, 0x0a98,
+ 0x0966, 0x0698, 0x0166, 0x0e98,
+ 0x0e66, 0x0198, 0x0666, 0x0998,
+ 0x0a66, 0x0598, 0x0266, 0x0d98,
+ 0x0c66, 0x0398, 0x0466, 0x0b98,
+ 0x0866, 0x0798, 0x0066, 0x0f98,
+ 0x0fa6, 0x0058, 0x07a6, 0x0858,
+ 0x0ba6, 0x0458, 0x03a6, 0x0c58,
+ 0x0da6, 0x0258, 0x05a6, 0x0a58,
+ 0x09a6, 0x0658, 0x01a6, 0x0e58,
+ 0x0ea6, 0x0158, 0x06a6, 0x0958,
+ 0x0aa6, 0x0558, 0x02a6, 0x0d58,
+ 0x0ca6, 0x0358, 0x04a6, 0x0b58,
+ 0x08a6, 0x0758, 0x00a6, 0x0f58,
+ 0x0f26, 0x00d8, 0x0726, 0x08d8,
+ 0x0b26, 0x04d8, 0x0326, 0x0cd8,
+ 0x0d26, 0x02d8, 0x0526, 0x0ad8,
+ 0x0926, 0x06d8, 0x0126, 0x0ed8,
+ 0x0e26, 0x01d8, 0x0626, 0x09d8,
+ 0x0a26, 0x05d8, 0x0226, 0x0dd8,
+ 0x0c26, 0x03d8, 0x0426, 0x0bd8,
+ 0x0826, 0x07d8, 0x0026, 0x0fd8,
+ 0x0fc6, 0x0038, 0x07c6, 0x0838,
+ 0x0bc6, 0x0438, 0x03c6, 0x0c38,
+ 0x0dc6, 0x0238, 0x05c6, 0x0a38,
+ 0x09c6, 0x0638, 0x01c6, 0x0e38,
+ 0x0ec6, 0x0138, 0x06c6, 0x0938,
+ 0x0ac6, 0x0538, 0x02c6, 0x0d38,
+ 0x0cc6, 0x0338, 0x04c6, 0x0b38,
+ 0x08c6, 0x0738, 0x00c6, 0x0f38,
+ 0x0f46, 0x00b8, 0x0746, 0x08b8,
+ 0x0b46, 0x04b8, 0x0346, 0x0cb8,
+ 0x0d46, 0x02b8, 0x0546, 0x0ab8,
+ 0x0946, 0x06b8, 0x0146, 0x0eb8,
+ 0x0e46, 0x01b8, 0x0646, 0x09b8,
+ 0x0a46, 0x05b8, 0x0246, 0x0db8,
+ 0x0c46, 0x03b8, 0x0446, 0x0bb8,
+ 0x0846, 0x07b8, 0x0046, 0x0fb8,
+ 0x0f86, 0x0078, 0x0786, 0x0878,
+ 0x0b86, 0x0478, 0x0386, 0x0c78,
+ 0x0d86, 0x0278, 0x0586, 0x0a78,
+ 0x0986, 0x0678, 0x0186, 0x0e78,
+ 0x0e86, 0x0178, 0x0686, 0x0978,
+ 0x0a86, 0x0578, 0x0286, 0x0d78,
+ 0x0c86, 0x0378, 0x0486, 0x0b78,
+ 0x0886, 0x0778, 0x0086, 0x0f78,
+ 0x0f06, 0x00f8, 0x0706, 0x08f8,
+ 0x0b06, 0x04f8, 0x0306, 0x0cf8,
+ 0x0d06, 0x02f8, 0x0506, 0x0af8,
+ 0x0906, 0x06f8, 0x0106, 0x0ef8,
+ 0x0e06, 0x01f8, 0x0606, 0x09f8,
+ 0x0a06, 0x05f8, 0x0206, 0x0df8,
+ 0x0c06, 0x03f8, 0x0406, 0x0bf8,
+ 0x0806, 0x07f8, 0x0006, 0x0ff8,
+ 0x0ffa, 0x0004, 0x07fa, 0x0804,
+ 0x0bfa, 0x0404, 0x03fa, 0x0c04,
+ 0x0dfa, 0x0204, 0x05fa, 0x0a04,
+ 0x09fa, 0x0604, 0x01fa, 0x0e04,
+ 0x0efa, 0x0104, 0x06fa, 0x0904,
+ 0x0afa, 0x0504, 0x02fa, 0x0d04,
+ 0x0cfa, 0x0304, 0x04fa, 0x0b04,
+ 0x08fa, 0x0704, 0x00fa, 0x0f04,
+ 0x0f7a, 0x0084, 0x077a, 0x0884,
+ 0x0b7a, 0x0484, 0x037a, 0x0c84,
+ 0x0d7a, 0x0284, 0x057a, 0x0a84,
+ 0x097a, 0x0684, 0x017a, 0x0e84,
+ 0x0e7a, 0x0184, 0x067a, 0x0984,
+ 0x0a7a, 0x0584, 0x027a, 0x0d84,
+ 0x0c7a, 0x0384, 0x047a, 0x0b84,
+ 0x087a, 0x0784, 0x007a, 0x0f84,
+ 0x0fba, 0x0044, 0x07ba, 0x0844,
+ 0x0bba, 0x0444, 0x03ba, 0x0c44,
+ 0x0dba, 0x0244, 0x05ba, 0x0a44,
+ 0x09ba, 0x0644, 0x01ba, 0x0e44,
+ 0x0eba, 0x0144, 0x06ba, 0x0944,
+ 0x0aba, 0x0544, 0x02ba, 0x0d44,
+ 0x0cba, 0x0344, 0x04ba, 0x0b44,
+ 0x08ba, 0x0744, 0x00ba, 0x0f44,
+ 0x0f3a, 0x00c4, 0x073a, 0x08c4,
+ 0x0b3a, 0x04c4, 0x033a, 0x0cc4,
+ 0x0d3a, 0x02c4, 0x053a, 0x0ac4,
+ 0x093a, 0x06c4, 0x013a, 0x0ec4,
+ 0x0e3a, 0x01c4, 0x063a, 0x09c4,
+ 0x0a3a, 0x05c4, 0x023a, 0x0dc4,
+ 0x0c3a, 0x03c4, 0x043a, 0x0bc4,
+ 0x083a, 0x07c4, 0x003a, 0x0fc4,
+ 0x0fda, 0x0024, 0x07da, 0x0824,
+ 0x0bda, 0x0424, 0x03da, 0x0c24,
+ 0x0dda, 0x0224, 0x05da, 0x0a24,
+ 0x09da, 0x0624, 0x01da, 0x0e24,
+ 0x0eda, 0x0124, 0x06da, 0x0924,
+ 0x0ada, 0x0524, 0x02da, 0x0d24,
+ 0x0cda, 0x0324, 0x04da, 0x0b24,
+ 0x08da, 0x0724, 0x00da, 0x0f24,
+ 0x0f5a, 0x00a4, 0x075a, 0x08a4,
+ 0x0b5a, 0x04a4, 0x035a, 0x0ca4,
+ 0x0d5a, 0x02a4, 0x055a, 0x0aa4,
+ 0x095a, 0x06a4, 0x015a, 0x0ea4,
+ 0x0e5a, 0x01a4, 0x065a, 0x09a4,
+ 0x0a5a, 0x05a4, 0x025a, 0x0da4,
+ 0x0c5a, 0x03a4, 0x045a, 0x0ba4,
+ 0x085a, 0x07a4, 0x005a, 0x0fa4,
+ 0x0f9a, 0x0064, 0x079a, 0x0864,
+ 0x0b9a, 0x0464, 0x039a, 0x0c64,
+ 0x0d9a, 0x0264, 0x059a, 0x0a64,
+ 0x099a, 0x0664, 0x019a, 0x0e64,
+ 0x0e9a, 0x0164, 0x069a, 0x0964,
+ 0x0a9a, 0x0564, 0x029a, 0x0d64,
+ 0x0c9a, 0x0364, 0x049a, 0x0b64,
+ 0x089a, 0x0764, 0x009a, 0x0f64,
+ 0x0f1a, 0x00e4, 0x071a, 0x08e4,
+ 0x0b1a, 0x04e4, 0x031a, 0x0ce4,
+ 0x0d1a, 0x02e4, 0x051a, 0x0ae4,
+ 0x091a, 0x06e4, 0x011a, 0x0ee4,
+ 0x0e1a, 0x01e4, 0x061a, 0x09e4,
+ 0x0a1a, 0x05e4, 0x021a, 0x0de4,
+ 0x0c1a, 0x03e4, 0x041a, 0x0be4,
+ 0x081a, 0x07e4, 0x001a, 0x0fe4,
+ 0x0fea, 0x0014, 0x07ea, 0x0814,
+ 0x0bea, 0x0414, 0x03ea, 0x0c14,
+ 0x0dea, 0x0214, 0x05ea, 0x0a14,
+ 0x09ea, 0x0614, 0x01ea, 0x0e14,
+ 0x0eea, 0x0114, 0x06ea, 0x0914,
+ 0x0aea, 0x0514, 0x02ea, 0x0d14,
+ 0x0cea, 0x0314, 0x04ea, 0x0b14,
+ 0x08ea, 0x0714, 0x00ea, 0x0f14,
+ 0x0f6a, 0x0094, 0x076a, 0x0894,
+ 0x0b6a, 0x0494, 0x036a, 0x0c94,
+ 0x0d6a, 0x0294, 0x056a, 0x0a94,
+ 0x096a, 0x0694, 0x016a, 0x0e94,
+ 0x0e6a, 0x0194, 0x066a, 0x0994,
+ 0x0a6a, 0x0594, 0x026a, 0x0d94,
+ 0x0c6a, 0x0394, 0x046a, 0x0b94,
+ 0x086a, 0x0794, 0x006a, 0x0f94,
+ 0x0faa, 0x0054, 0x07aa, 0x0854,
+ 0x0baa, 0x0454, 0x03aa, 0x0c54,
+ 0x0daa, 0x0254, 0x05aa, 0x0a54,
+ 0x09aa, 0x0654, 0x01aa, 0x0e54,
+ 0x0eaa, 0x0154, 0x06aa, 0x0954,
+ 0x0aaa, 0x0554, 0x02aa, 0x0d54,
+ 0x0caa, 0x0354, 0x04aa, 0x0b54,
+ 0x08aa, 0x0754, 0x00aa, 0x0f54,
+ 0x0f2a, 0x00d4, 0x072a, 0x08d4,
+ 0x0b2a, 0x04d4, 0x032a, 0x0cd4,
+ 0x0d2a, 0x02d4, 0x052a, 0x0ad4,
+ 0x092a, 0x06d4, 0x012a, 0x0ed4,
+ 0x0e2a, 0x01d4, 0x062a, 0x09d4,
+ 0x0a2a, 0x05d4, 0x022a, 0x0dd4,
+ 0x0c2a, 0x03d4, 0x042a, 0x0bd4,
+ 0x082a, 0x07d4, 0x002a, 0x0fd4,
+ 0x0fca, 0x0034, 0x07ca, 0x0834,
+ 0x0bca, 0x0434, 0x03ca, 0x0c34,
+ 0x0dca, 0x0234, 0x05ca, 0x0a34,
+ 0x09ca, 0x0634, 0x01ca, 0x0e34,
+ 0x0eca, 0x0134, 0x06ca, 0x0934,
+ 0x0aca, 0x0534, 0x02ca, 0x0d34,
+ 0x0cca, 0x0334, 0x04ca, 0x0b34,
+ 0x08ca, 0x0734, 0x00ca, 0x0f34,
+ 0x0f4a, 0x00b4, 0x074a, 0x08b4,
+ 0x0b4a, 0x04b4, 0x034a, 0x0cb4,
+ 0x0d4a, 0x02b4, 0x054a, 0x0ab4,
+ 0x094a, 0x06b4, 0x014a, 0x0eb4,
+ 0x0e4a, 0x01b4, 0x064a, 0x09b4,
+ 0x0a4a, 0x05b4, 0x024a, 0x0db4,
+ 0x0c4a, 0x03b4, 0x044a, 0x0bb4,
+ 0x084a, 0x07b4, 0x004a, 0x0fb4,
+ 0x0f8a, 0x0074, 0x078a, 0x0874,
+ 0x0b8a, 0x0474, 0x038a, 0x0c74,
+ 0x0d8a, 0x0274, 0x058a, 0x0a74,
+ 0x098a, 0x0674, 0x018a, 0x0e74,
+ 0x0e8a, 0x0174, 0x068a, 0x0974,
+ 0x0a8a, 0x0574, 0x028a, 0x0d74,
+ 0x0c8a, 0x0374, 0x048a, 0x0b74,
+ 0x088a, 0x0774, 0x008a, 0x0f74,
+ 0x0f0a, 0x00f4, 0x070a, 0x08f4,
+ 0x0b0a, 0x04f4, 0x030a, 0x0cf4,
+ 0x0d0a, 0x02f4, 0x050a, 0x0af4,
+ 0x090a, 0x06f4, 0x010a, 0x0ef4,
+ 0x0e0a, 0x01f4, 0x060a, 0x09f4,
+ 0x0a0a, 0x05f4, 0x020a, 0x0df4,
+ 0x0c0a, 0x03f4, 0x040a, 0x0bf4,
+ 0x080a, 0x07f4, 0x000a, 0x0ff4,
+ 0x0ff2, 0x000c, 0x07f2, 0x080c,
+ 0x0bf2, 0x040c, 0x03f2, 0x0c0c,
+ 0x0df2, 0x020c, 0x05f2, 0x0a0c,
+ 0x09f2, 0x060c, 0x01f2, 0x0e0c,
+ 0x0ef2, 0x010c, 0x06f2, 0x090c,
+ 0x0af2, 0x050c, 0x02f2, 0x0d0c,
+ 0x0cf2, 0x030c, 0x04f2, 0x0b0c,
+ 0x08f2, 0x070c, 0x00f2, 0x0f0c,
+ 0x0f72, 0x008c, 0x0772, 0x088c,
+ 0x0b72, 0x048c, 0x0372, 0x0c8c,
+ 0x0d72, 0x028c, 0x0572, 0x0a8c,
+ 0x0972, 0x068c, 0x0172, 0x0e8c,
+ 0x0e72, 0x018c, 0x0672, 0x098c,
+ 0x0a72, 0x058c, 0x0272, 0x0d8c,
+ 0x0c72, 0x038c, 0x0472, 0x0b8c,
+ 0x0872, 0x078c, 0x0072, 0x0f8c,
+ 0x0fb2, 0x004c, 0x07b2, 0x084c,
+ 0x0bb2, 0x044c, 0x03b2, 0x0c4c,
+ 0x0db2, 0x024c, 0x05b2, 0x0a4c,
+ 0x09b2, 0x064c, 0x01b2, 0x0e4c,
+ 0x0eb2, 0x014c, 0x06b2, 0x094c,
+ 0x0ab2, 0x054c, 0x02b2, 0x0d4c,
+ 0x0cb2, 0x034c, 0x04b2, 0x0b4c,
+ 0x08b2, 0x074c, 0x00b2, 0x0f4c,
+ 0x0f32, 0x00cc, 0x0732, 0x08cc,
+ 0x0b32, 0x04cc, 0x0332, 0x0ccc,
+ 0x0d32, 0x02cc, 0x0532, 0x0acc,
+ 0x0932, 0x06cc, 0x0132, 0x0ecc,
+ 0x0e32, 0x01cc, 0x0632, 0x09cc,
+ 0x0a32, 0x05cc, 0x0232, 0x0dcc,
+ 0x0c32, 0x03cc, 0x0432, 0x0bcc,
+ 0x0832, 0x07cc, 0x0032, 0x0fcc,
+ 0x0fd2, 0x002c, 0x07d2, 0x082c,
+ 0x0bd2, 0x042c, 0x03d2, 0x0c2c,
+ 0x0dd2, 0x022c, 0x05d2, 0x0a2c,
+ 0x09d2, 0x062c, 0x01d2, 0x0e2c,
+ 0x0ed2, 0x012c, 0x06d2, 0x092c,
+ 0x0ad2, 0x052c, 0x02d2, 0x0d2c,
+ 0x0cd2, 0x032c, 0x04d2, 0x0b2c,
+ 0x08d2, 0x072c, 0x00d2, 0x0f2c,
+ 0x0f52, 0x00ac, 0x0752, 0x08ac,
+ 0x0b52, 0x04ac, 0x0352, 0x0cac,
+ 0x0d52, 0x02ac, 0x0552, 0x0aac,
+ 0x0952, 0x06ac, 0x0152, 0x0eac,
+ 0x0e52, 0x01ac, 0x0652, 0x09ac,
+ 0x0a52, 0x05ac, 0x0252, 0x0dac,
+ 0x0c52, 0x03ac, 0x0452, 0x0bac,
+ 0x0852, 0x07ac, 0x0052, 0x0fac,
+ 0x0f92, 0x006c, 0x0792, 0x086c,
+ 0x0b92, 0x046c, 0x0392, 0x0c6c,
+ 0x0d92, 0x026c, 0x0592, 0x0a6c,
+ 0x0992, 0x066c, 0x0192, 0x0e6c,
+ 0x0e92, 0x016c, 0x0692, 0x096c,
+ 0x0a92, 0x056c, 0x0292, 0x0d6c,
+ 0x0c92, 0x036c, 0x0492, 0x0b6c,
+ 0x0892, 0x076c, 0x0092, 0x0f6c,
+ 0x0f12, 0x00ec, 0x0712, 0x08ec,
+ 0x0b12, 0x04ec, 0x0312, 0x0cec,
+ 0x0d12, 0x02ec, 0x0512, 0x0aec,
+ 0x0912, 0x06ec, 0x0112, 0x0eec,
+ 0x0e12, 0x01ec, 0x0612, 0x09ec,
+ 0x0a12, 0x05ec, 0x0212, 0x0dec,
+ 0x0c12, 0x03ec, 0x0412, 0x0bec,
+ 0x0812, 0x07ec, 0x0012, 0x0fec,
+ 0x0fe2, 0x001c, 0x07e2, 0x081c,
+ 0x0be2, 0x041c, 0x03e2, 0x0c1c,
+ 0x0de2, 0x021c, 0x05e2, 0x0a1c,
+ 0x09e2, 0x061c, 0x01e2, 0x0e1c,
+ 0x0ee2, 0x011c, 0x06e2, 0x091c,
+ 0x0ae2, 0x051c, 0x02e2, 0x0d1c,
+ 0x0ce2, 0x031c, 0x04e2, 0x0b1c,
+ 0x08e2, 0x071c, 0x00e2, 0x0f1c,
+ 0x0f62, 0x009c, 0x0762, 0x089c,
+ 0x0b62, 0x049c, 0x0362, 0x0c9c,
+ 0x0d62, 0x029c, 0x0562, 0x0a9c,
+ 0x0962, 0x069c, 0x0162, 0x0e9c,
+ 0x0e62, 0x019c, 0x0662, 0x099c,
+ 0x0a62, 0x059c, 0x0262, 0x0d9c,
+ 0x0c62, 0x039c, 0x0462, 0x0b9c,
+ 0x0862, 0x079c, 0x0062, 0x0f9c,
+ 0x0fa2, 0x005c, 0x07a2, 0x085c,
+ 0x0ba2, 0x045c, 0x03a2, 0x0c5c,
+ 0x0da2, 0x025c, 0x05a2, 0x0a5c,
+ 0x09a2, 0x065c, 0x01a2, 0x0e5c,
+ 0x0ea2, 0x015c, 0x06a2, 0x095c,
+ 0x0aa2, 0x055c, 0x02a2, 0x0d5c,
+ 0x0ca2, 0x035c, 0x04a2, 0x0b5c,
+ 0x08a2, 0x075c, 0x00a2, 0x0f5c,
+ 0x0f22, 0x00dc, 0x0722, 0x08dc,
+ 0x0b22, 0x04dc, 0x0322, 0x0cdc,
+ 0x0d22, 0x02dc, 0x0522, 0x0adc,
+ 0x0922, 0x06dc, 0x0122, 0x0edc,
+ 0x0e22, 0x01dc, 0x0622, 0x09dc,
+ 0x0a22, 0x05dc, 0x0222, 0x0ddc,
+ 0x0c22, 0x03dc, 0x0422, 0x0bdc,
+ 0x0822, 0x07dc, 0x0022, 0x0fdc,
+ 0x0fc2, 0x003c, 0x07c2, 0x083c,
+ 0x0bc2, 0x043c, 0x03c2, 0x0c3c,
+ 0x0dc2, 0x023c, 0x05c2, 0x0a3c,
+ 0x09c2, 0x063c, 0x01c2, 0x0e3c,
+ 0x0ec2, 0x013c, 0x06c2, 0x093c,
+ 0x0ac2, 0x053c, 0x02c2, 0x0d3c,
+ 0x0cc2, 0x033c, 0x04c2, 0x0b3c,
+ 0x08c2, 0x073c, 0x00c2, 0x0f3c,
+ 0x0f42, 0x00bc, 0x0742, 0x08bc,
+ 0x0b42, 0x04bc, 0x0342, 0x0cbc,
+ 0x0d42, 0x02bc, 0x0542, 0x0abc,
+ 0x0942, 0x06bc, 0x0142, 0x0ebc,
+ 0x0e42, 0x01bc, 0x0642, 0x09bc,
+ 0x0a42, 0x05bc, 0x0242, 0x0dbc,
+ 0x0c42, 0x03bc, 0x0442, 0x0bbc,
+ 0x0842, 0x07bc, 0x0042, 0x0fbc,
+ 0x0f82, 0x007c, 0x0782, 0x087c,
+ 0x0b82, 0x047c, 0x0382, 0x0c7c,
+ 0x0d82, 0x027c, 0x0582, 0x0a7c,
+ 0x0982, 0x067c, 0x0182, 0x0e7c,
+ 0x0e82, 0x017c, 0x0682, 0x097c,
+ 0x0a82, 0x057c, 0x0282, 0x0d7c,
+ 0x0c82, 0x037c, 0x0482, 0x0b7c,
+ 0x0882, 0x077c, 0x0082, 0x0f7c,
+ 0x0f02, 0x00fc, 0x0702, 0x08fc,
+ 0x0b02, 0x04fc, 0x0302, 0x0cfc,
+ 0x0d02, 0x02fc, 0x0502, 0x0afc,
+ 0x0902, 0x06fc, 0x0102, 0x0efc,
+ 0x0e02, 0x01fc, 0x0602, 0x09fc,
+ 0x0a02, 0x05fc, 0x0202, 0x0dfc,
+ 0x0c02, 0x03fc, 0x0402, 0x0bfc,
+ 0x0802, 0x07fc, 0x0002, 0x0ffc,
+};
+
diff --git a/misc.h b/misc.h
new file mode 100644
index 0000000..32b25e0
--- /dev/null
+++ b/misc.h
@@ -0,0 +1,145 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: miscellaneous math and prototypes
+
+ ********************************************************************/
+
+#ifndef _V_RANDOM_H_
+#define _V_RANDOM_H_
+#include "ivorbiscodec.h"
+#include "os_types.h"
+
+extern void *_vorbis_block_alloc(vorbis_block *vb,long bytes);
+extern void _vorbis_block_ripcord(vorbis_block *vb);
+extern void _analysis_output(char *base,int i,ogg_int32_t *v,int point,
+ int n,int bark,int dB);
+
+#include "asm_arm.h"
+
+#ifndef _V_WIDE_MATH
+#define _V_WIDE_MATH
+
+#include <endian.h>
+
+#if BYTE_ORDER==LITTLE_ENDIAN
+union magic {
+ struct {
+ ogg_int32_t lo;
+ ogg_int32_t hi;
+ } halves;
+ ogg_int64_t whole;
+};
+#endif
+
+#if BYTE_ORDER==BIG_ENDIAN
+union magic {
+ struct {
+ ogg_int32_t hi;
+ ogg_int32_t lo;
+ } halves;
+ ogg_int64_t whole;
+};
+#endif
+
+static inline ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) {
+ union magic magic;
+ magic.whole = (ogg_int64_t)x * y;
+ return magic.halves.hi;
+}
+
+static inline ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) {
+ return MULT32(x,y)<<1;
+}
+
+static inline ogg_int32_t MULT30(ogg_int32_t x, ogg_int32_t y) {
+ return MULT32(x,y)<<2;
+}
+
+static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) {
+ union magic magic;
+ magic.whole = (ogg_int64_t)x * y;
+ return ((ogg_uint32_t)(magic.halves.lo)>>15) | ((magic.halves.hi)<<17);
+}
+
+static inline ogg_int32_t CLIP_TO_15(ogg_int32_t x) {
+ int ret=x;
+ ret-= ((x<=32767)-1)&(x-32767);
+ ret-= ((x>=-32768)-1)&(x+32768);
+ return(ret);
+}
+
+#endif
+
+static inline ogg_int32_t VFLOAT_MULT(ogg_int32_t a,ogg_int32_t ap,
+ ogg_int32_t b,ogg_int32_t bp,
+ ogg_int32_t *p){
+ if(a && b){
+ *p=ap+bp+32;
+ return MULT32(a,b);
+ }else
+ return 0;
+}
+
+static inline ogg_int32_t VFLOAT_MULTI(ogg_int32_t a,ogg_int32_t ap,
+ ogg_int32_t i,
+ ogg_int32_t *p){
+
+ int ip=_ilog(abs(i))-31;
+ return VFLOAT_MULT(a,ap,i<<-ip,ip,p);
+}
+
+static inline ogg_int32_t VFLOAT_ADD(ogg_int32_t a,ogg_int32_t ap,
+ ogg_int32_t b,ogg_int32_t bp,
+ ogg_int32_t *p){
+
+ if(!a){
+ *p=bp;
+ return b;
+ }else if(!b){
+ *p=ap;
+ return a;
+ }
+
+ /* yes, this can leak a bit. */
+ if(ap>bp){
+ int shift=ap-bp+1;
+ *p=ap+1;
+ a>>=1;
+ if(shift<32){
+ b=(b+(1<<(shift-1)))>>shift;
+ }else{
+ b=0;
+ }
+ }else{
+ int shift=bp-ap+1;
+ *p=bp+1;
+ b>>=1;
+ if(shift<32){
+ a=(a+(1<<(shift-1)))>>shift;
+ }else{
+ a=0;
+ }
+ }
+
+ a+=b;
+ if((a&0xc0000000)==0xc0000000 ||
+ (a&0xc0000000)==0){
+ a<<=1;
+ (*p)--;
+ }
+ return(a);
+}
+
+#endif
+
+
+
+
diff --git a/ogg.h b/ogg.h
new file mode 100644
index 0000000..dafa572
--- /dev/null
+++ b/ogg.h
@@ -0,0 +1,167 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: subsumed libogg includes
+
+ ********************************************************************/
+#ifndef _OGG_H
+#define _OGG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "os_types.h"
+
+typedef struct {
+ long endbyte;
+ int endbit;
+
+ unsigned char *buffer;
+ unsigned char *ptr;
+ long storage;
+} oggpack_buffer;
+
+/* ogg_page is used to encapsulate the data in one Ogg bitstream page *****/
+
+typedef struct {
+ unsigned char *header;
+ long header_len;
+ unsigned char *body;
+ long body_len;
+} ogg_page;
+
+/* ogg_stream_state contains the current encode/decode state of a logical
+ Ogg bitstream **********************************************************/
+
+typedef struct {
+ unsigned char *body_data; /* bytes from packet bodies */
+ long body_storage; /* storage elements allocated */
+ long body_fill; /* elements stored; fill mark */
+ long body_returned; /* elements of fill returned */
+
+
+ int *lacing_vals; /* The values that will go to the segment table */
+ ogg_int64_t *granule_vals; /* granulepos values for headers. Not compact
+ this way, but it is simple coupled to the
+ lacing fifo */
+ long lacing_storage;
+ long lacing_fill;
+ long lacing_packet;
+ long lacing_returned;
+
+ unsigned char header[282]; /* working space for header encode */
+ int header_fill;
+
+ int e_o_s; /* set when we have buffered the last packet in the
+ logical bitstream */
+ int b_o_s; /* set after we've written the initial page
+ of a logical bitstream */
+ long serialno;
+ long pageno;
+ ogg_int64_t packetno; /* sequence number for decode; the framing
+ knows where there's a hole in the data,
+ but we need coupling so that the codec
+ (which is in a seperate abstraction
+ layer) also knows about the gap */
+ ogg_int64_t granulepos;
+
+} ogg_stream_state;
+
+/* ogg_packet is used to encapsulate the data and metadata belonging
+ to a single raw Ogg/Vorbis packet *************************************/
+
+typedef struct {
+ unsigned char *packet;
+ long bytes;
+ long b_o_s;
+ long e_o_s;
+
+ ogg_int64_t granulepos;
+
+ ogg_int64_t packetno; /* sequence number for decode; the framing
+ knows where there's a hole in the data,
+ but we need coupling so that the codec
+ (which is in a seperate abstraction
+ layer) also knows about the gap */
+} ogg_packet;
+
+typedef struct {
+ unsigned char *data;
+ int storage;
+ int fill;
+ int returned;
+
+ int unsynced;
+ int headerbytes;
+ int bodybytes;
+} ogg_sync_state;
+
+/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/
+
+extern void oggpack_writeinit(oggpack_buffer *b);
+extern void oggpack_reset(oggpack_buffer *b);
+extern void oggpack_writeclear(oggpack_buffer *b);
+extern void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes);
+extern void oggpack_write(oggpack_buffer *b,unsigned long value,int bits);
+extern long oggpack_look(oggpack_buffer *b,int bits);
+extern long oggpack_look_huff(oggpack_buffer *b,int bits);
+extern long oggpack_look1(oggpack_buffer *b);
+extern void oggpack_adv(oggpack_buffer *b,int bits);
+extern int oggpack_adv_huff(oggpack_buffer *b,int bits);
+extern void oggpack_adv1(oggpack_buffer *b);
+extern long oggpack_read(oggpack_buffer *b,int bits);
+extern long oggpack_read1(oggpack_buffer *b);
+extern long oggpack_bytes(oggpack_buffer *b);
+extern long oggpack_bits(oggpack_buffer *b);
+extern unsigned char *oggpack_get_buffer(oggpack_buffer *b);
+
+/* Ogg BITSTREAM PRIMITIVES: decoding **************************/
+
+extern int ogg_sync_init(ogg_sync_state *oy);
+extern int ogg_sync_clear(ogg_sync_state *oy);
+extern int ogg_sync_reset(ogg_sync_state *oy);
+extern int ogg_sync_destroy(ogg_sync_state *oy);
+
+extern char *ogg_sync_buffer(ogg_sync_state *oy, long size);
+extern int ogg_sync_wrote(ogg_sync_state *oy, long bytes);
+extern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og);
+extern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og);
+extern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og);
+extern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op);
+extern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op);
+
+/* Ogg BITSTREAM PRIMITIVES: general ***************************/
+
+extern int ogg_stream_init(ogg_stream_state *os,int serialno);
+extern int ogg_stream_clear(ogg_stream_state *os);
+extern int ogg_stream_reset(ogg_stream_state *os);
+extern int ogg_stream_destroy(ogg_stream_state *os);
+extern int ogg_stream_eos(ogg_stream_state *os);
+
+extern void ogg_page_checksum_set(ogg_page *og);
+
+extern int ogg_page_version(ogg_page *og);
+extern int ogg_page_continued(ogg_page *og);
+extern int ogg_page_bos(ogg_page *og);
+extern int ogg_page_eos(ogg_page *og);
+extern ogg_int64_t ogg_page_granulepos(ogg_page *og);
+extern int ogg_page_serialno(ogg_page *og);
+extern long ogg_page_pageno(ogg_page *og);
+extern int ogg_page_packets(ogg_page *og);
+
+extern void ogg_packet_clear(ogg_packet *op);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _OGG_H */
diff --git a/os.h b/os.h
new file mode 100644
index 0000000..818c4a9
--- /dev/null
+++ b/os.h
@@ -0,0 +1,59 @@
+#ifndef _OS_H
+#define _OS_H
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: #ifdef jail to whip a few platforms into the UNIX ideal.
+
+ ********************************************************************/
+
+#include <math.h>
+#include "os_types.h"
+
+#ifndef _V_IFDEFJAIL_H_
+# define _V_IFDEFJAIL_H_
+
+# ifdef __GNUC__
+# define STIN static __inline__
+# elif _WIN32
+# define STIN static __inline
+# endif
+#else
+# define STIN static
+#endif
+
+#ifndef M_PI
+# define M_PI (3.1415926536f)
+#endif
+
+#ifdef _WIN32
+# include <malloc.h>
+# define rint(x) (floor((x)+0.5f))
+# define NO_FLOAT_MATH_LIB
+# define FAST_HYPOT(a, b) sqrt((a)*(a) + (b)*(b))
+#endif
+
+#ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+#endif
+
+#ifdef USE_MEMORY_H
+# include <memory.h>
+#endif
+
+#ifndef min
+# define min(x,y) ((x)>(y)?(y):(x))
+#endif
+
+#ifndef max
+# define max(x,y) ((x)<(y)?(y):(x))
+#endif
+
+#endif /* _OS_H */
diff --git a/os_types.h b/os_types.h
new file mode 100644
index 0000000..af50155
--- /dev/null
+++ b/os_types.h
@@ -0,0 +1,77 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: #ifdef jail to whip a few platforms into the UNIX ideal.
+
+ ********************************************************************/
+#ifndef _OS_TYPES_H
+#define _OS_TYPES_H
+
+/* make it easy on the folks that want to compile the libs with a
+ different malloc than stdlib */
+#define _ogg_malloc malloc
+#define _ogg_calloc calloc
+#define _ogg_realloc realloc
+#define _ogg_free free
+
+#ifdef _WIN32
+
+# ifndef __GNUC__
+ /* MSVC/Borland */
+ typedef __int64 ogg_int64_t;
+ typedef __int32 ogg_int32_t;
+ typedef unsigned __int32 ogg_uint32_t;
+ typedef __int16 ogg_int16_t;
+# else
+ /* Cygwin */
+ #include <_G_config.h>
+ typedef _G_int64_t ogg_int64_t;
+ typedef _G_int32_t ogg_int32_t;
+ typedef _G_uint32_t ogg_uint32_t;
+ typedef _G_int16_t ogg_int16_t;
+# endif
+
+#elif defined(__MACOS__)
+
+# include <sys/types.h>
+ typedef SInt16 ogg_int16_t;
+ typedef SInt32 ogg_int32_t;
+ typedef UInt32 ogg_uint32_t;
+ typedef SInt64 ogg_int64_t;
+
+#elif defined(__MACOSX__) /* MacOS X Framework build */
+
+# include <sys/types.h>
+ typedef int16_t ogg_int16_t;
+ typedef int32_t ogg_int32_t;
+ typedef u_int32_t ogg_uint32_t;
+ typedef int64_t ogg_int64_t;
+
+#elif defined(__BEOS__)
+
+ /* Be */
+# include <inttypes.h>
+
+#elif defined (__EMX__)
+
+ /* OS/2 GCC */
+ typedef short ogg_int16_t;
+ typedef int ogg_int32_t;
+ typedef unsigned int ogg_uint32_t;
+ typedef long long ogg_int64_t;
+
+#else
+
+# include <sys/types.h>
+# include "config_types.h"
+
+#endif
+
+#endif /* _OS_TYPES_H */
diff --git a/registry.c b/registry.c
new file mode 100644
index 0000000..ea079d3
--- /dev/null
+++ b/registry.c
@@ -0,0 +1,47 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: registry for floor, res backends and channel mappings
+
+ ********************************************************************/
+
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+#include "registry.h"
+#include "misc.h"
+
+
+/* seems like major overkill now; the backend numbers will grow into
+ the infrastructure soon enough */
+
+extern vorbis_func_floor floor0_exportbundle;
+extern vorbis_func_floor floor1_exportbundle;
+extern vorbis_func_residue residue0_exportbundle;
+extern vorbis_func_residue residue1_exportbundle;
+extern vorbis_func_residue residue2_exportbundle;
+extern vorbis_func_mapping mapping0_exportbundle;
+
+vorbis_func_floor *_floor_P[]={
+ &floor0_exportbundle,
+ &floor1_exportbundle,
+};
+
+vorbis_func_residue *_residue_P[]={
+ &residue0_exportbundle,
+ &residue1_exportbundle,
+ &residue2_exportbundle,
+};
+
+vorbis_func_mapping *_mapping_P[]={
+ &mapping0_exportbundle,
+};
+
+
+
diff --git a/registry.h b/registry.h
new file mode 100644
index 0000000..c15385a
--- /dev/null
+++ b/registry.h
@@ -0,0 +1,37 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: registry for time, floor, res backends and channel mappings
+
+ ********************************************************************/
+
+#ifndef _V_REG_H_
+#define _V_REG_H_
+
+#define VI_TRANSFORMB 1
+#define VI_WINDOWB 1
+#define VI_TIMEB 1
+#define VI_FLOORB 2
+#define VI_RESB 3
+#define VI_MAPB 1
+
+#include "backends.h"
+
+#if defined(_WIN32) && defined(VORBISDLL_IMPORT)
+# define EXTERN __declspec(dllimport) extern
+#else
+# define EXTERN extern
+#endif
+
+EXTERN vorbis_func_floor *_floor_P[];
+EXTERN vorbis_func_residue *_residue_P[];
+EXTERN vorbis_func_mapping *_mapping_P[];
+
+#endif
diff --git a/res012.c b/res012.c
new file mode 100644
index 0000000..d6f82d7
--- /dev/null
+++ b/res012.c
@@ -0,0 +1,331 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: residue backend 0, 1 and 2 implementation
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+#include "registry.h"
+#include "codebook.h"
+#include "misc.h"
+#include "os.h"
+
+typedef struct {
+ vorbis_info_residue0 *info;
+ int map;
+
+ int parts;
+ int stages;
+ codebook *fullbooks;
+ codebook *phrasebook;
+ codebook ***partbooks;
+
+ int partvals;
+ int **decodemap;
+
+} vorbis_look_residue0;
+
+void res0_free_info(vorbis_info_residue *i){
+ vorbis_info_residue0 *info=(vorbis_info_residue0 *)i;
+ if(info){
+ memset(info,0,sizeof(*info));
+ _ogg_free(info);
+ }
+}
+
+void res0_free_look(vorbis_look_residue *i){
+ int j;
+ if(i){
+
+ vorbis_look_residue0 *look=(vorbis_look_residue0 *)i;
+
+ for(j=0;j<look->parts;j++)
+ if(look->partbooks[j])_ogg_free(look->partbooks[j]);
+ _ogg_free(look->partbooks);
+ for(j=0;j<look->partvals;j++)
+ _ogg_free(look->decodemap[j]);
+ _ogg_free(look->decodemap);
+
+ memset(look,0,sizeof(*look));
+ _ogg_free(look);
+ }
+}
+
+static int ilog(unsigned int v){
+ int ret=0;
+ while(v){
+ ret++;
+ v>>=1;
+ }
+ return(ret);
+}
+
+static int icount(unsigned int v){
+ int ret=0;
+ while(v){
+ ret+=v&1;
+ v>>=1;
+ }
+ return(ret);
+}
+
+/* vorbis_info is for range checking */
+vorbis_info_residue *res0_unpack(vorbis_info *vi,oggpack_buffer *opb){
+ int j,acc=0;
+ vorbis_info_residue0 *info=(vorbis_info_residue0 *)_ogg_calloc(1,sizeof(*info));
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+
+ info->begin=oggpack_read(opb,24);
+ info->end=oggpack_read(opb,24);
+ info->grouping=oggpack_read(opb,24)+1;
+ info->partitions=oggpack_read(opb,6)+1;
+ info->groupbook=oggpack_read(opb,8);
+
+ for(j=0;j<info->partitions;j++){
+ int cascade=oggpack_read(opb,3);
+ if(oggpack_read(opb,1))
+ cascade|=(oggpack_read(opb,5)<<3);
+ info->secondstages[j]=cascade;
+
+ acc+=icount(cascade);
+ }
+ for(j=0;j<acc;j++)
+ info->booklist[j]=oggpack_read(opb,8);
+
+ if(info->groupbook>=ci->books)goto errout;
+ for(j=0;j<acc;j++)
+ if(info->booklist[j]>=ci->books)goto errout;
+
+ return(info);
+ errout:
+ res0_free_info(info);
+ return(NULL);
+}
+
+vorbis_look_residue *res0_look(vorbis_dsp_state *vd,vorbis_info_mode *vm,
+ vorbis_info_residue *vr){
+ vorbis_info_residue0 *info=(vorbis_info_residue0 *)vr;
+ vorbis_look_residue0 *look=(vorbis_look_residue0 *)_ogg_calloc(1,sizeof(*look));
+ codec_setup_info *ci=(codec_setup_info *)vd->vi->codec_setup;
+
+ int j,k,acc=0;
+ int dim;
+ int maxstage=0;
+ look->info=info;
+ look->map=vm->mapping;
+
+ look->parts=info->partitions;
+ look->fullbooks=ci->fullbooks;
+ look->phrasebook=ci->fullbooks+info->groupbook;
+ dim=look->phrasebook->dim;
+
+ look->partbooks=(codebook ***)_ogg_calloc(look->parts,sizeof(*look->partbooks));
+
+ for(j=0;j<look->parts;j++){
+ int stages=ilog(info->secondstages[j]);
+ if(stages){
+ if(stages>maxstage)maxstage=stages;
+ look->partbooks[j]=(codebook **)_ogg_calloc(stages,sizeof(*look->partbooks[j]));
+ for(k=0;k<stages;k++)
+ if(info->secondstages[j]&(1<<k)){
+ look->partbooks[j][k]=ci->fullbooks+info->booklist[acc++];
+#ifdef TRAIN_RES
+ look->training_data[k][j]=calloc(look->partbooks[j][k]->entries,
+ sizeof(***look->training_data));
+#endif
+ }
+ }
+ }
+
+ look->partvals=look->parts;
+ for(j=1;j<dim;j++)look->partvals*=look->parts;
+ look->stages=maxstage;
+ look->decodemap=(int **)_ogg_malloc(look->partvals*sizeof(*look->decodemap));
+ for(j=0;j<look->partvals;j++){
+ long val=j;
+ long mult=look->partvals/look->parts;
+ look->decodemap[j]=(int *)_ogg_malloc(dim*sizeof(*look->decodemap[j]));
+ for(k=0;k<dim;k++){
+ long deco=val/mult;
+ val-=deco*mult;
+ mult/=look->parts;
+ look->decodemap[j][k]=deco;
+ }
+ }
+
+ return(look);
+}
+
+
+/* a truncated packet here just means 'stop working'; it's not an error */
+static int _01inverse(vorbis_block *vb,vorbis_look_residue *vl,
+ ogg_int32_t **in,int ch,
+ long (*decodepart)(codebook *, ogg_int32_t *,
+ oggpack_buffer *,int,int)){
+
+ long i,j,k,l,s;
+ vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
+ vorbis_info_residue0 *info=look->info;
+
+ /* move all this setup out later */
+ int samples_per_partition=info->grouping;
+ int partitions_per_word=look->phrasebook->dim;
+ int n=info->end-info->begin;
+
+ int partvals=n/samples_per_partition;
+ int partwords=(partvals+partitions_per_word-1)/partitions_per_word;
+ int ***partword=(int ***)alloca(ch*sizeof(*partword));
+
+ for(j=0;j<ch;j++)
+ partword[j]=(int **)_vorbis_block_alloc(vb,partwords*sizeof(*partword[j]));
+
+ for(s=0;s<look->stages;s++){
+
+ /* each loop decodes on partition codeword containing
+ partitions_pre_word partitions */
+ for(i=0,l=0;i<partvals;l++){
+ if(s==0){
+ /* fetch the partition word for each channel */
+ for(j=0;j<ch;j++){
+ int temp=vorbis_book_decode(look->phrasebook,&vb->opb);
+ if(temp==-1)goto eopbreak;
+ partword[j][l]=look->decodemap[temp];
+ if(partword[j][l]==NULL)goto errout;
+ }
+ }
+
+ /* now we decode residual values for the partitions */
+ for(k=0;k<partitions_per_word && i<partvals;k++,i++)
+ for(j=0;j<ch;j++){
+ long offset=info->begin+i*samples_per_partition;
+ if(info->secondstages[partword[j][l][k]]&(1<<s)){
+ codebook *stagebook=look->partbooks[partword[j][l][k]][s];
+ if(stagebook){
+ if(decodepart(stagebook,in[j]+offset,&vb->opb,
+ samples_per_partition,-8)==-1)goto eopbreak;
+ }
+ }
+ }
+ }
+ }
+
+ errout:
+ eopbreak:
+ return(0);
+}
+
+int res0_inverse(vorbis_block *vb,vorbis_look_residue *vl,
+ ogg_int32_t **in,int *nonzero,int ch){
+ int i,used=0;
+ for(i=0;i<ch;i++)
+ if(nonzero[i])
+ in[used++]=in[i];
+ if(used)
+ return(_01inverse(vb,vl,in,used,vorbis_book_decodevs_add));
+ else
+ return(0);
+}
+
+int res1_inverse(vorbis_block *vb,vorbis_look_residue *vl,
+ ogg_int32_t **in,int *nonzero,int ch){
+ int i,used=0;
+ for(i=0;i<ch;i++)
+ if(nonzero[i])
+ in[used++]=in[i];
+ if(used)
+ return(_01inverse(vb,vl,in,used,vorbis_book_decodev_add));
+ else
+ return(0);
+}
+
+/* duplicate code here as speed is somewhat more important */
+int res2_inverse(vorbis_block *vb,vorbis_look_residue *vl,
+ ogg_int32_t **in,int *nonzero,int ch){
+ long i,k,l,s;
+ vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
+ vorbis_info_residue0 *info=look->info;
+
+ /* move all this setup out later */
+ int samples_per_partition=info->grouping;
+ int partitions_per_word=look->phrasebook->dim;
+ int n=info->end-info->begin;
+
+ int partvals=n/samples_per_partition;
+ int partwords=(partvals+partitions_per_word-1)/partitions_per_word;
+ int **partword=(int **)_vorbis_block_alloc(vb,partwords*sizeof(*partword));
+ int beginoff=info->begin/ch;
+
+ for(i=0;i<ch;i++)if(nonzero[i])break;
+ if(i==ch)return(0); /* no nonzero vectors */
+
+ samples_per_partition/=ch;
+
+ for(s=0;s<look->stages;s++){
+ for(i=0,l=0;i<partvals;l++){
+
+ if(s==0){
+ /* fetch the partition word */
+ int temp=vorbis_book_decode(look->phrasebook,&vb->opb);
+ if(temp==-1)goto eopbreak;
+ partword[l]=look->decodemap[temp];
+ if(partword[l]==NULL)goto errout;
+ }
+
+ /* now we decode residual values for the partitions */
+ for(k=0;k<partitions_per_word && i<partvals;k++,i++)
+ if(info->secondstages[partword[l][k]]&(1<<s)){
+ codebook *stagebook=look->partbooks[partword[l][k]][s];
+
+ if(stagebook){
+ if(vorbis_book_decodevv_add(stagebook,in,
+ i*samples_per_partition+beginoff,ch,
+ &vb->opb,
+ samples_per_partition,-8)==-1)
+ goto eopbreak;
+ }
+ }
+ }
+ }
+
+ errout:
+ eopbreak:
+ return(0);
+}
+
+
+vorbis_func_residue residue0_exportbundle={
+ &res0_unpack,
+ &res0_look,
+ &res0_free_info,
+ &res0_free_look,
+ &res0_inverse
+};
+
+vorbis_func_residue residue1_exportbundle={
+ &res0_unpack,
+ &res0_look,
+ &res0_free_info,
+ &res0_free_look,
+ &res1_inverse
+};
+
+vorbis_func_residue residue2_exportbundle={
+ &res0_unpack,
+ &res0_look,
+ &res0_free_info,
+ &res0_free_look,
+ &res2_inverse
+};
diff --git a/sharedbook.c b/sharedbook.c
new file mode 100644
index 0000000..a8d411e
--- /dev/null
+++ b/sharedbook.c
@@ -0,0 +1,439 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: basic shared codebook operations
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#include "ogg.h"
+#include "os.h"
+#include "misc.h"
+#include "ivorbiscodec.h"
+#include "codebook.h"
+
+/**** pack/unpack helpers ******************************************/
+int _ilog(unsigned int v){
+ int ret=0;
+ while(v){
+ ret++;
+ v>>=1;
+ }
+ return(ret);
+}
+
+/* 32 bit float (not IEEE; nonnormalized mantissa +
+ biased exponent) : neeeeeee eeemmmmm mmmmmmmm mmmmmmmm
+ Why not IEEE? It's just not that important here. */
+
+#define VQ_FEXP 10
+#define VQ_FMAN 21
+#define VQ_FEXP_BIAS 768 /* bias toward values smaller than 1. */
+
+static ogg_int32_t _float32_unpack(long val,int *point){
+ long mant=val&0x1fffff;
+ int sign=val&0x80000000;
+ long exp =(val&0x7fe00000L)>>VQ_FMAN;
+
+ exp-=(VQ_FMAN-1)+VQ_FEXP_BIAS;
+
+ if(mant){
+ while(!(mant&0x40000000)){
+ mant<<=1;
+ exp-=1;
+ }
+
+ if(sign)mant= -mant;
+ }else{
+ sign=0;
+ exp=-9999;
+ }
+
+ *point=exp;
+ return mant;
+}
+
+/* given a list of word lengths, generate a list of codewords. Works
+ for length ordered or unordered, always assigns the lowest valued
+ codewords first. Extended to handle unused entries (length 0) */
+ogg_uint32_t *_make_words(long *l,long n,long sparsecount){
+ long i,j,count=0;
+ ogg_uint32_t marker[33];
+ ogg_uint32_t *r=(ogg_uint32_t *)_ogg_malloc((sparsecount?sparsecount:n)*sizeof(*r));
+ memset(marker,0,sizeof(marker));
+
+ for(i=0;i<n;i++){
+ long length=l[i];
+ if(length>0){
+ ogg_uint32_t entry=marker[length];
+
+ /* when we claim a node for an entry, we also claim the nodes
+ below it (pruning off the imagined tree that may have dangled
+ from it) as well as blocking the use of any nodes directly
+ above for leaves */
+
+ /* update ourself */
+ if(length<32 && (entry>>length)){
+ /* error condition; the lengths must specify an overpopulated tree */
+ _ogg_free(r);
+ return(NULL);
+ }
+ r[count++]=entry;
+
+ /* Look to see if the next shorter marker points to the node
+ above. if so, update it and repeat. */
+ {
+ for(j=length;j>0;j--){
+
+ if(marker[j]&1){
+ /* have to jump branches */
+ if(j==1)
+ marker[1]++;
+ else
+ marker[j]=marker[j-1]<<1;
+ break; /* invariant says next upper marker would already
+ have been moved if it was on the same path */
+ }
+ marker[j]++;
+ }
+ }
+
+ /* prune the tree; the implicit invariant says all the longer
+ markers were dangling from our just-taken node. Dangle them
+ from our *new* node. */
+ for(j=length+1;j<33;j++)
+ if((marker[j]>>1) == entry){
+ entry=marker[j];
+ marker[j]=marker[j-1]<<1;
+ }else
+ break;
+ }else
+ if(sparsecount==0)count++;
+ }
+
+ /* bitreverse the words because our bitwise packer/unpacker is LSb
+ endian */
+ for(i=0,count=0;i<n;i++){
+ ogg_uint32_t temp=0;
+ for(j=0;j<l[i];j++){
+ temp<<=1;
+ temp|=(r[count]>>j)&1;
+ }
+
+ if(sparsecount){
+ if(l[i])
+ r[count++]=temp;
+ }else
+ r[count++]=temp;
+ }
+
+ return(r);
+}
+
+/* there might be a straightforward one-line way to do the below
+ that's portable and totally safe against roundoff, but I haven't
+ thought of it. Therefore, we opt on the side of caution */
+long _book_maptype1_quantvals(const static_codebook *b){
+ /* get us a starting hint, we'll polish it below */
+ int bits=_ilog(b->entries);
+ int vals=b->entries>>((bits-1)*(b->dim-1)/b->dim);
+
+ while(1){
+ long acc=1;
+ long acc1=1;
+ int i;
+ for(i=0;i<b->dim;i++){
+ acc*=vals;
+ acc1*=vals+1;
+ }
+ if(acc<=b->entries && acc1>b->entries){
+ return(vals);
+ }else{
+ if(acc>b->entries){
+ vals--;
+ }else{
+ vals++;
+ }
+ }
+ }
+}
+
+/* different than what _book_unquantize does for mainline:
+ we repack the book in a fixed point format that shares the same
+ binary point. Upon first use, we can shift point if needed */
+
+/* we need to deal with two map types: in map type 1, the values are
+ generated algorithmically (each column of the vector counts through
+ the values in the quant vector). in map type 2, all the values came
+ in in an explicit list. Both value lists must be unpacked */
+
+ogg_int32_t *_book_unquantize(const static_codebook *b,int n,int *sparsemap,
+ int *maxpoint){
+ long j,k,count=0;
+ if(b->maptype==1 || b->maptype==2){
+ int quantvals;
+ int minpoint,delpoint;
+ ogg_int32_t mindel=_float32_unpack(b->q_min,&minpoint);
+ ogg_int32_t delta=_float32_unpack(b->q_delta,&delpoint);
+ ogg_int32_t *r=(ogg_int32_t *)_ogg_calloc(n*b->dim,sizeof(*r));
+ int *rp=(int *)_ogg_calloc(n*b->dim,sizeof(*rp));
+
+ *maxpoint=minpoint;
+
+ /* maptype 1 and 2 both use a quantized value vector, but
+ different sizes */
+ switch(b->maptype){
+ case 1:
+ /* most of the time, entries%dimensions == 0, but we need to be
+ well defined. We define that the possible vales at each
+ scalar is values == entries/dim. If entries%dim != 0, we'll
+ have 'too few' values (values*dim<entries), which means that
+ we'll have 'left over' entries; left over entries use zeroed
+ values (and are wasted). So don't generate codebooks like
+ that */
+ quantvals=_book_maptype1_quantvals(b);
+ for(j=0;j<b->entries;j++){
+ if((sparsemap && b->lengthlist[j]) || !sparsemap){
+ ogg_int32_t last=0;
+ int lastpoint=0;
+ int indexdiv=1;
+ for(k=0;k<b->dim;k++){
+ int index= (j/indexdiv)%quantvals;
+ int point;
+ int val=VFLOAT_MULTI(delta,delpoint,
+ abs(b->quantlist[index]),&point);
+
+ val=VFLOAT_ADD(mindel,minpoint,val,point,&point);
+ val=VFLOAT_ADD(last,lastpoint,val,point,&point);
+
+ if(b->q_sequencep){
+ last=val;
+ lastpoint=point;
+ }
+
+ if(sparsemap){
+ r[sparsemap[count]*b->dim+k]=val;
+ rp[sparsemap[count]*b->dim+k]=point;
+ }else{
+ r[count*b->dim+k]=val;
+ rp[count*b->dim+k]=point;
+ }
+ if(*maxpoint<point)*maxpoint=point;
+ indexdiv*=quantvals;
+ }
+ count++;
+ }
+
+ }
+ break;
+ case 2:
+ for(j=0;j<b->entries;j++){
+ if((sparsemap && b->lengthlist[j]) || !sparsemap){
+ ogg_int32_t last=0;
+ int lastpoint=0;
+
+ for(k=0;k<b->dim;k++){
+ int point;
+ int val=VFLOAT_MULTI(delta,delpoint,
+ abs(b->quantlist[j*b->dim+k]),&point);
+
+ val=VFLOAT_ADD(mindel,minpoint,val,point,&point);
+ val=VFLOAT_ADD(last,lastpoint,val,point,&point);
+
+ if(b->q_sequencep){
+ last=val;
+ lastpoint=point;
+ }
+
+ if(sparsemap){
+ r[sparsemap[count]*b->dim+k]=val;
+ rp[sparsemap[count]*b->dim+k]=point;
+ }else{
+ r[count*b->dim+k]=val;
+ rp[count*b->dim+k]=point;
+ }
+ if(*maxpoint<point)*maxpoint=point;
+ }
+ count++;
+ }
+ }
+ break;
+ }
+
+ for(j=0;j<n*b->dim;j++)
+ if(rp[j]<*maxpoint)
+ r[j]>>=*maxpoint-rp[j];
+
+ _ogg_free(rp);
+ return(r);
+ }
+ return(NULL);
+}
+
+void vorbis_staticbook_clear(static_codebook *b){
+ if(b->quantlist)_ogg_free(b->quantlist);
+ if(b->lengthlist)_ogg_free(b->lengthlist);
+ memset(b,0,sizeof(*b));
+
+}
+
+void vorbis_staticbook_destroy(static_codebook *b){
+ vorbis_staticbook_clear(b);
+ _ogg_free(b);
+}
+
+void vorbis_book_clear(codebook *b){
+ /* static book is not cleared; we're likely called on the lookup and
+ the static codebook belongs to the info struct */
+ if(b->valuelist)_ogg_free(b->valuelist);
+ if(b->codelist)_ogg_free(b->codelist);
+
+ if(b->dec_index)_ogg_free(b->dec_index);
+ if(b->dec_codelengths)_ogg_free(b->dec_codelengths);
+ if(b->dec_firsttable)_ogg_free(b->dec_firsttable);
+
+ memset(b,0,sizeof(*b));
+}
+
+static ogg_uint32_t bitreverse(ogg_uint32_t x){
+ x= ((x>>16)&0x0000ffffUL) | ((x<<16)&0xffff0000UL);
+ x= ((x>> 8)&0x00ff00ffUL) | ((x<< 8)&0xff00ff00UL);
+ x= ((x>> 4)&0x0f0f0f0fUL) | ((x<< 4)&0xf0f0f0f0UL);
+ x= ((x>> 2)&0x33333333UL) | ((x<< 2)&0xccccccccUL);
+ return((x>> 1)&0x55555555UL) | ((x<< 1)&0xaaaaaaaaUL);
+}
+
+static int sort32a(const void *a,const void *b){
+ return ( (**(ogg_uint32_t **)a>**(ogg_uint32_t **)b)<<1)-1;
+}
+
+/* decode codebook arrangement is more heavily optimized than encode */
+int vorbis_book_init_decode(codebook *c,const static_codebook *s){
+ int i,j,n=0,tabn;
+ int *sortindex;
+ memset(c,0,sizeof(*c));
+
+ /* count actually used entries */
+ for(i=0;i<s->entries;i++)
+ if(s->lengthlist[i]>0)
+ n++;
+
+ c->entries=s->entries;
+ c->used_entries=n;
+ c->dim=s->dim;
+
+ c->q_min=s->q_min;
+ c->q_delta=s->q_delta;
+
+ /* two different remappings go on here.
+
+ First, we collapse the likely sparse codebook down only to
+ actually represented values/words. This collapsing needs to be
+ indexed as map-valueless books are used to encode original entry
+ positions as integers.
+
+ Second, we reorder all vectors, including the entry index above,
+ by sorted bitreversed codeword to allow treeless decode. */
+
+ {
+ /* perform sort */
+ ogg_uint32_t *codes=_make_words(s->lengthlist,s->entries,c->used_entries);
+ ogg_uint32_t **codep=(ogg_uint32_t **)alloca(sizeof(*codep)*n);
+
+ if(codes==NULL)goto err_out;
+
+ for(i=0;i<n;i++){
+ codes[i]=bitreverse(codes[i]);
+ codep[i]=codes+i;
+ }
+
+ qsort(codep,n,sizeof(*codep),sort32a);
+
+ sortindex=(int *)alloca(n*sizeof(*sortindex));
+ c->codelist=(ogg_uint32_t *)_ogg_malloc(n*sizeof(*c->codelist));
+ /* the index is a reverse index */
+ for(i=0;i<n;i++){
+ int position=codep[i]-codes;
+ sortindex[position]=i;
+ }
+
+ for(i=0;i<n;i++)
+ c->codelist[sortindex[i]]=codes[i];
+ _ogg_free(codes);
+ }
+
+
+ c->valuelist=_book_unquantize(s,n,sortindex,&c->binarypoint);
+ c->dec_index=(int *)_ogg_malloc(n*sizeof(*c->dec_index));
+
+ for(n=0,i=0;i<s->entries;i++)
+ if(s->lengthlist[i]>0)
+ c->dec_index[sortindex[n++]]=i;
+
+ c->dec_codelengths=(char *)_ogg_malloc(n*sizeof(*c->dec_codelengths));
+ for(n=0,i=0;i<s->entries;i++)
+ if(s->lengthlist[i]>0)
+ c->dec_codelengths[sortindex[n++]]=s->lengthlist[i];
+
+ c->dec_firsttablen=_ilog(c->used_entries)-4; /* this is magic */
+ if(c->dec_firsttablen<5)c->dec_firsttablen=5;
+ if(c->dec_firsttablen>8)c->dec_firsttablen=8;
+
+ tabn=1<<c->dec_firsttablen;
+ c->dec_firsttable=(ogg_uint32_t *)_ogg_calloc(tabn,sizeof(*c->dec_firsttable));
+ c->dec_maxlength=0;
+
+ for(i=0;i<n;i++){
+ if(c->dec_maxlength<c->dec_codelengths[i])
+ c->dec_maxlength=c->dec_codelengths[i];
+ if(c->dec_codelengths[i]<=c->dec_firsttablen){
+ ogg_uint32_t orig=bitreverse(c->codelist[i]);
+ for(j=0;j<(1<<(c->dec_firsttablen-c->dec_codelengths[i]));j++)
+ c->dec_firsttable[orig|(j<<c->dec_codelengths[i])]=i+1;
+ }
+ }
+
+ /* now fill in 'unused' entries in the firsttable with hi/lo search
+ hints for the non-direct-hits */
+ {
+ ogg_uint32_t mask=0xfffffffeUL<<(31-c->dec_firsttablen);
+ long lo=0,hi=0;
+
+ for(i=0;i<tabn;i++){
+ ogg_uint32_t word=i<<(32-c->dec_firsttablen);
+ if(c->dec_firsttable[bitreverse(word)]==0){
+ while((lo+1)<n && c->codelist[lo+1]<=word)lo++;
+ while( hi<n && word>=(c->codelist[hi]&mask))hi++;
+
+ /* we only actually have 15 bits per hint to play with here.
+ In order to overflow gracefully (nothing breaks, efficiency
+ just drops), encode as the difference from the extremes. */
+ {
+ unsigned long loval=lo;
+ unsigned long hival=n-hi;
+
+ if(loval>0x7fff)loval=0x7fff;
+ if(hival>0x7fff)hival=0x7fff;
+ c->dec_firsttable[bitreverse(word)]=
+ 0x80000000UL | (loval<<15) | hival;
+ }
+ }
+ }
+ }
+
+
+ return(0);
+ err_out:
+ vorbis_book_clear(c);
+ return(-1);
+}
+
diff --git a/synthesis.c b/synthesis.c
new file mode 100644
index 0000000..1a47b98
--- /dev/null
+++ b/synthesis.c
@@ -0,0 +1,102 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: single-block PCM synthesis
+ last mod: $Id: synthesis.c,v 1.1 2002/09/02 22:13:55 xiphmont Exp $
+
+ ********************************************************************/
+
+#include <stdio.h>
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+#include "registry.h"
+#include "misc.h"
+#include "os.h"
+
+int vorbis_synthesis(vorbis_block *vb,ogg_packet *op){
+ vorbis_dsp_state *vd=vb->vd;
+ backend_lookup_state *b=(backend_lookup_state *)vd->backend_state;
+ vorbis_info *vi=vd->vi;
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ oggpack_buffer *opb=&vb->opb;
+ int type,mode,i;
+
+ /* first things first. Make sure decode is ready */
+ _vorbis_block_ripcord(vb);
+ oggpack_readinit(opb,op->packet,op->bytes);
+
+ /* Check the packet type */
+ if(oggpack_read(opb,1)!=0){
+ /* Oops. This is not an audio data packet */
+ return(OV_ENOTAUDIO);
+ }
+
+ /* read our mode and pre/post windowsize */
+ mode=oggpack_read(opb,b->modebits);
+ if(mode==-1)return(OV_EBADPACKET);
+
+ vb->mode=mode;
+ vb->W=ci->mode_param[mode]->blockflag;
+ if(vb->W){
+ vb->lW=oggpack_read(opb,1);
+ vb->nW=oggpack_read(opb,1);
+ if(vb->nW==-1) return(OV_EBADPACKET);
+ }else{
+ vb->lW=0;
+ vb->nW=0;
+ }
+
+ /* more setup */
+ vb->granulepos=op->granulepos;
+ vb->sequence=op->packetno-3; /* first block is third packet */
+ vb->eofflag=op->e_o_s;
+
+ /* alloc pcm passback storage */
+ vb->pcmend=ci->blocksizes[vb->W];
+ vb->pcm=(ogg_int32_t **)_vorbis_block_alloc(vb,sizeof(*vb->pcm)*vi->channels);
+ for(i=0;i<vi->channels;i++)
+ vb->pcm[i]=(ogg_int32_t *)_vorbis_block_alloc(vb,vb->pcmend*sizeof(*vb->pcm[i]));
+
+ /* unpack_header enforces range checking */
+ type=ci->map_type[ci->mode_param[mode]->mapping];
+
+ return(_mapping_P[type]->inverse(vb,b->mode[mode]));
+}
+
+long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ oggpack_buffer opb;
+ int mode;
+
+ oggpack_readinit(&opb,op->packet,op->bytes);
+
+ /* Check the packet type */
+ if(oggpack_read(&opb,1)!=0){
+ /* Oops. This is not an audio data packet */
+ return(OV_ENOTAUDIO);
+ }
+
+ {
+ int modebits=0;
+ int v=ci->modes;
+ while(v>1){
+ modebits++;
+ v>>=1;
+ }
+
+ /* read our mode and pre/post windowsize */
+ mode=oggpack_read(&opb,modebits);
+ }
+ if(mode==-1)return(OV_EBADPACKET);
+ return(ci->blocksizes[ci->mode_param[mode]->blockflag]);
+}
+
+
diff --git a/vorbisfile.c b/vorbisfile.c
new file mode 100644
index 0000000..296f86c
--- /dev/null
+++ b/vorbisfile.c
@@ -0,0 +1,1417 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: stdio-based convenience library for opening/seeking/decoding
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <math.h>
+
+#include "ivorbiscodec.h"
+#include "ivorbisfile.h"
+
+#include "os.h"
+#include "misc.h"
+
+/* A 'chained bitstream' is a Vorbis bitstream that contains more than
+ one logical bitstream arranged end to end (the only form of Ogg
+ multiplexing allowed in a Vorbis bitstream; grouping [parallel
+ multiplexing] is not allowed in Vorbis) */
+
+/* A Vorbis file can be played beginning to end (streamed) without
+ worrying ahead of time about chaining (see decoder_example.c). If
+ we have the whole file, however, and want random access
+ (seeking/scrubbing) or desire to know the total length/time of a
+ file, we need to account for the possibility of chaining. */
+
+/* We can handle things a number of ways; we can determine the entire
+ bitstream structure right off the bat, or find pieces on demand.
+ This example determines and caches structure for the entire
+ bitstream, but builds a virtual decoder on the fly when moving
+ between links in the chain. */
+
+/* There are also different ways to implement seeking. Enough
+ information exists in an Ogg bitstream to seek to
+ sample-granularity positions in the output. Or, one can seek by
+ picking some portion of the stream roughly in the desired area if
+ we only want coarse navigation through the stream. */
+
+/*************************************************************************
+ * Many, many internal helpers. The intention is not to be confusing;
+ * rampant duplication and monolithic function implementation would be
+ * harder to understand anyway. The high level functions are last. Begin
+ * grokking near the end of the file */
+
+/* read a little more data from the file/pipe into the ogg_sync framer
+*/
+static long _get_data(OggVorbis_File *vf){
+ errno=0;
+ if(vf->datasource){
+ char *buffer=ogg_sync_buffer(&vf->oy,CHUNKSIZE);
+ long bytes=(vf->callbacks.read_func)(buffer,1,CHUNKSIZE,vf->datasource);
+ if(bytes>0)ogg_sync_wrote(&vf->oy,bytes);
+ if(bytes==0 && errno)return(-1);
+ return(bytes);
+ }else
+ return(0);
+}
+
+/* save a tiny smidge of verbosity to make the code more readable */
+static void _seek_helper(OggVorbis_File *vf,long offset){
+ if(vf->datasource){
+ (vf->callbacks.seek_func)(vf->datasource, offset, SEEK_SET);
+ vf->offset=offset;
+ ogg_sync_reset(&vf->oy);
+ }else{
+ /* shouldn't happen unless someone writes a broken callback */
+ return;
+ }
+}
+
+/* The read/seek functions track absolute position within the stream */
+
+/* from the head of the stream, get the next page. boundary specifies
+ if the function is allowed to fetch more data from the stream (and
+ how much) or only use internally buffered data.
+
+ boundary: -1) unbounded search
+ 0) read no additional data; use cached only
+ n) search for a new page beginning for n bytes
+
+ return: <0) did not find a page (OV_FALSE, OV_EOF, OV_EREAD)
+ n) found a page at absolute offset n */
+
+static long _get_next_page(OggVorbis_File *vf,ogg_page *og,int boundary){
+ if(boundary>0)boundary+=vf->offset;
+ while(1){
+ long more;
+
+ if(boundary>0 && vf->offset>=boundary)return(OV_FALSE);
+ more=ogg_sync_pageseek(&vf->oy,og);
+
+ if(more<0){
+ /* skipped n bytes */
+ vf->offset-=more;
+ }else{
+ if(more==0){
+ /* send more paramedics */
+ if(!boundary)return(OV_FALSE);
+ {
+ long ret=_get_data(vf);
+ if(ret==0)return(OV_EOF);
+ if(ret<0)return(OV_EREAD);
+ }
+ }else{
+ /* got a page. Return the offset at the page beginning,
+ advance the internal offset past the page end */
+ long ret=vf->offset;
+ vf->offset+=more;
+ return(ret);
+
+ }
+ }
+ }
+}
+
+/* find the latest page beginning before the current stream cursor
+ position. Much dirtier than the above as Ogg doesn't have any
+ backward search linkage. no 'readp' as it will certainly have to
+ read. */
+/* returns offset or OV_EREAD, OV_FAULT */
+static long _get_prev_page(OggVorbis_File *vf,ogg_page *og){
+ long begin=vf->offset;
+ long ret;
+ int offset=-1;
+
+ while(offset==-1){
+ begin-=CHUNKSIZE;
+ if(begin<0)
+ begin=0;
+ _seek_helper(vf,begin);
+ while(vf->offset<begin+CHUNKSIZE){
+ ret=_get_next_page(vf,og,begin+CHUNKSIZE-vf->offset);
+ if(ret==OV_EREAD)return(OV_EREAD);
+ if(ret<0){
+ break;
+ }else{
+ offset=ret;
+ }
+ }
+ }
+
+ /* we have the offset. Actually snork and hold the page now */
+ _seek_helper(vf,offset);
+ ret=_get_next_page(vf,og,CHUNKSIZE);
+ if(ret<0)
+ /* this shouldn't be possible */
+ return(OV_EFAULT);
+
+ return(offset);
+}
+
+/* finds each bitstream link one at a time using a bisection search
+ (has to begin by knowing the offset of the lb's initial page).
+ Recurses for each link so it can alloc the link storage after
+ finding them all, then unroll and fill the cache at the same time */
+static int _bisect_forward_serialno(OggVorbis_File *vf,
+ long begin,
+ long searched,
+ long end,
+ long currentno,
+ long m){
+ long endsearched=end;
+ long next=end;
+ ogg_page og;
+ long ret;
+
+ /* the below guards against garbage seperating the last and
+ first pages of two links. */
+ while(searched<endsearched){
+ long bisect;
+
+ if(endsearched-searched<CHUNKSIZE){
+ bisect=searched;
+ }else{
+ bisect=(searched+endsearched)/2;
+ }
+
+ _seek_helper(vf,bisect);
+ ret=_get_next_page(vf,&og,-1);
+ if(ret==OV_EREAD)return(OV_EREAD);
+ if(ret<0 || ogg_page_serialno(&og)!=currentno){
+ endsearched=bisect;
+ if(ret>=0)next=ret;
+ }else{
+ searched=ret+og.header_len+og.body_len;
+ }
+ }
+
+ _seek_helper(vf,next);
+ ret=_get_next_page(vf,&og,-1);
+ if(ret==OV_EREAD)return(OV_EREAD);
+
+ if(searched>=end || ret<0){
+ vf->links=m+1;
+ vf->offsets=(ogg_int64_t *)_ogg_malloc((m+2)*sizeof(*vf->offsets));
+ vf->offsets[m+1]=searched;
+ }else{
+ ret=_bisect_forward_serialno(vf,next,vf->offset,
+ end,ogg_page_serialno(&og),m+1);
+ if(ret==OV_EREAD)return(OV_EREAD);
+ }
+
+ vf->offsets[m]=begin;
+ return(0);
+}
+
+/* uses the local ogg_stream storage in vf; this is important for
+ non-streaming input sources */
+static int _fetch_headers(OggVorbis_File *vf,vorbis_info *vi,vorbis_comment *vc,
+ long *serialno,ogg_page *og_ptr){
+ ogg_page og;
+ ogg_packet op;
+ int i,ret=0;
+
+ if(!og_ptr){
+ ret=_get_next_page(vf,&og,CHUNKSIZE);
+ if(ret==OV_EREAD)return(OV_EREAD);
+ if(ret<0)return OV_ENOTVORBIS;
+ og_ptr=&og;
+ }
+
+ if(serialno)*serialno=ogg_page_serialno(og_ptr);
+ ogg_stream_init(&vf->os,ogg_page_serialno(og_ptr));
+ vf->ready_state=STREAMSET;
+
+ /* extract the initial header from the first page and verify that the
+ Ogg bitstream is in fact Vorbis data */
+
+ vorbis_info_init(vi);
+ vorbis_comment_init(vc);
+
+ i=0;
+ while(i<3){
+ ogg_stream_pagein(&vf->os,og_ptr);
+ while(i<3){
+ int result=ogg_stream_packetout(&vf->os,&op);
+ if(result==0)break;
+ if(result==-1){
+ ret=OV_EBADHEADER;
+ goto bail_header;
+ }
+ if((ret=vorbis_synthesis_headerin(vi,vc,&op))){
+ goto bail_header;
+ }
+ i++;
+ }
+ if(i<3)
+ if(_get_next_page(vf,og_ptr,CHUNKSIZE)<0){
+ ret=OV_EBADHEADER;
+ goto bail_header;
+ }
+ }
+ return 0;
+
+ bail_header:
+ vorbis_info_clear(vi);
+ vorbis_comment_clear(vc);
+ ogg_stream_clear(&vf->os);
+ vf->ready_state=OPENED;
+
+ return ret;
+}
+
+/* last step of the OggVorbis_File initialization; get all the
+ vorbis_info structs and PCM positions. Only called by the seekable
+ initialization (local stream storage is hacked slightly; pay
+ attention to how that's done) */
+
+/* this is void and does not propogate errors up because we want to be
+ able to open and use damaged bitstreams as well as we can. Just
+ watch out for missing information for links in the OggVorbis_File
+ struct */
+static void _prefetch_all_headers(OggVorbis_File *vf, long dataoffset){
+ ogg_page og;
+ int i,ret;
+
+ vf->vi=(vorbis_info *)_ogg_realloc(vf->vi,vf->links*sizeof(*vf->vi));
+ vf->vc=(vorbis_comment *)_ogg_realloc(vf->vc,vf->links*sizeof(*vf->vc));
+ vf->dataoffsets=(ogg_int64_t *)_ogg_malloc(vf->links*sizeof(*vf->dataoffsets));
+ vf->pcmlengths=(ogg_int64_t *)_ogg_malloc(vf->links*sizeof(*vf->pcmlengths));
+ vf->serialnos=(long *)_ogg_malloc(vf->links*sizeof(*vf->serialnos));
+
+ for(i=0;i<vf->links;i++){
+ if(i==0){
+ /* we already grabbed the initial header earlier. Just set the offset */
+ vf->dataoffsets[i]=dataoffset;
+ }else{
+
+ /* seek to the location of the initial header */
+
+ _seek_helper(vf,vf->offsets[i]);
+ if(_fetch_headers(vf,vf->vi+i,vf->vc+i,NULL,NULL)<0){
+ vf->dataoffsets[i]=-1;
+ }else{
+ vf->dataoffsets[i]=vf->offset;
+ ogg_stream_clear(&vf->os);
+ }
+ }
+
+ /* get the serial number and PCM length of this link. To do this,
+ get the last page of the stream */
+ {
+ long end=vf->offsets[i+1];
+ _seek_helper(vf,end);
+
+ while(1){
+ ret=_get_prev_page(vf,&og);
+ if(ret<0){
+ /* this should not be possible */
+ vorbis_info_clear(vf->vi+i);
+ vorbis_comment_clear(vf->vc+i);
+ break;
+ }
+ if(ogg_page_granulepos(&og)!=-1){
+ vf->serialnos[i]=ogg_page_serialno(&og);
+ vf->pcmlengths[i]=ogg_page_granulepos(&og);
+ break;
+ }
+ vf->offset=ret;
+ }
+ }
+ }
+}
+
+static void _make_decode_ready(OggVorbis_File *vf){
+ if(vf->ready_state!=STREAMSET)return;
+ if(vf->seekable){
+ vorbis_synthesis_init(&vf->vd,vf->vi+vf->current_link);
+ }else{
+ vorbis_synthesis_init(&vf->vd,vf->vi);
+ }
+ vorbis_block_init(&vf->vd,&vf->vb);
+ vf->ready_state=INITSET;
+ return;
+}
+
+static int _open_seekable2(OggVorbis_File *vf){
+ long serialno=vf->current_serialno,end;
+ long dataoffset=vf->offset;
+ ogg_page og;
+
+ /* we're partially open and have a first link header state in
+ storage in vf */
+ /* we can seek, so set out learning all about this file */
+ (vf->callbacks.seek_func)(vf->datasource,0,SEEK_END);
+ vf->offset=vf->end=(vf->callbacks.tell_func)(vf->datasource);
+
+ /* We get the offset for the last page of the physical bitstream.
+ Most OggVorbis files will contain a single logical bitstream */
+ end=_get_prev_page(vf,&og);
+ if(end<0){
+ ov_clear(vf);
+ return(end);
+ }
+
+ /* more than one logical bitstream? */
+ if(ogg_page_serialno(&og)!=serialno){
+
+ /* Chained bitstream. Bisect-search each logical bitstream
+ section. Do so based on serial number only */
+ if(_bisect_forward_serialno(vf,0,0,end+1,serialno,0)<0){
+ ov_clear(vf);
+ return(OV_EREAD);
+ }
+
+ }else{
+
+ /* Only one logical bitstream */
+ if(_bisect_forward_serialno(vf,0,end,end+1,serialno,0)){
+ ov_clear(vf);
+ return(OV_EREAD);
+ }
+
+ }
+
+ /* the initial header memory is referenced by vf after; don't free it */
+ _prefetch_all_headers(vf,dataoffset);
+ return(ov_raw_seek(vf,0));
+}
+
+/* clear out the current logical bitstream decoder */
+static void _decode_clear(OggVorbis_File *vf){
+ ogg_stream_clear(&vf->os);
+ vorbis_dsp_clear(&vf->vd);
+ vorbis_block_clear(&vf->vb);
+ vf->ready_state=OPENED;
+
+ vf->bittrack=0;
+ vf->samptrack=0;
+}
+
+/* fetch and process a packet. Handles the case where we're at a
+ bitstream boundary and dumps the decoding machine. If the decoding
+ machine is unloaded, it loads it. It also keeps pcm_offset up to
+ date (seek and read both use this. seek uses a special hack with
+ readp).
+
+ return: <0) error, OV_HOLE (lost packet) or OV_EOF
+ 0) need more data (only if readp==0)
+ 1) got a packet
+*/
+
+static int _process_packet(OggVorbis_File *vf,int readp){
+ ogg_page og;
+
+ /* handle one packet. Try to fetch it from current stream state */
+ /* extract packets from page */
+ while(1){
+
+ /* process a packet if we can. If the machine isn't loaded,
+ neither is a page */
+ if(vf->ready_state==INITSET){
+ while(1) {
+ ogg_packet op;
+ int result=ogg_stream_packetout(&vf->os,&op);
+ ogg_int64_t granulepos;
+
+ if(result==-1)return(OV_HOLE); /* hole in the data. */
+ if(result>0){
+ /* got a packet. process it */
+ granulepos=op.granulepos;
+ if(!vorbis_synthesis(&vf->vb,&op)){ /* lazy check for lazy
+ header handling. The
+ header packets aren't
+ audio, so if/when we
+ submit them,
+ vorbis_synthesis will
+ reject them */
+
+ /* suck in the synthesis data and track bitrate */
+ {
+ int oldsamples=vorbis_synthesis_pcmout(&vf->vd,NULL);
+ vorbis_synthesis_blockin(&vf->vd,&vf->vb);
+ vf->samptrack+=vorbis_synthesis_pcmout(&vf->vd,NULL)-oldsamples;
+ vf->bittrack+=op.bytes*8;
+ }
+
+ /* update the pcm offset. */
+ if(granulepos!=-1 && !op.e_o_s){
+ int link=(vf->seekable?vf->current_link:0);
+ int i,samples;
+
+ /* this packet has a pcm_offset on it (the last packet
+ completed on a page carries the offset) After processing
+ (above), we know the pcm position of the *last* sample
+ ready to be returned. Find the offset of the *first*
+
+ As an aside, this trick is inaccurate if we begin
+ reading anew right at the last page; the end-of-stream
+ granulepos declares the last frame in the stream, and the
+ last packet of the last page may be a partial frame.
+ So, we need a previous granulepos from an in-sequence page
+ to have a reference point. Thus the !op.e_o_s clause
+ above */
+
+ samples=vorbis_synthesis_pcmout(&vf->vd,NULL);
+
+ granulepos-=samples;
+ for(i=0;i<link;i++)
+ granulepos+=vf->pcmlengths[i];
+ vf->pcm_offset=granulepos;
+ }
+ return(1);
+ }
+ }
+ else
+ break;
+ }
+ }
+
+ if(vf->ready_state>=OPENED){
+ if(!readp)return(0);
+ if(_get_next_page(vf,&og,-1)<0)return(OV_EOF); /* eof.
+ leave unitialized */
+ /* bitrate tracking; add the header's bytes here, the body bytes
+ are done by packet above */
+ vf->bittrack+=og.header_len*8;
+
+ /* has our decoding just traversed a bitstream boundary? */
+ if(vf->ready_state==INITSET){
+ if(vf->current_serialno!=ogg_page_serialno(&og)){
+ _decode_clear(vf);
+
+ if(!vf->seekable){
+ vorbis_info_clear(vf->vi);
+ vorbis_comment_clear(vf->vc);
+ }
+ }
+ }
+ }
+
+ /* Do we need to load a new machine before submitting the page? */
+ /* This is different in the seekable and non-seekable cases.
+
+ In the seekable case, we already have all the header
+ information loaded and cached; we just initialize the machine
+ with it and continue on our merry way.
+
+ In the non-seekable (streaming) case, we'll only be at a
+ boundary if we just left the previous logical bitstream and
+ we're now nominally at the header of the next bitstream
+ */
+
+ if(vf->ready_state!=INITSET){
+ int link;
+
+ if(vf->ready_state<STREAMSET){
+ if(vf->seekable){
+ vf->current_serialno=ogg_page_serialno(&og);
+
+ /* match the serialno to bitstream section. We use this rather than
+ offset positions to avoid problems near logical bitstream
+ boundaries */
+ for(link=0;link<vf->links;link++)
+ if(vf->serialnos[link]==vf->current_serialno)break;
+ if(link==vf->links)return(OV_EBADLINK); /* sign of a bogus
+ stream. error out,
+ leave machine
+ uninitialized */
+
+ vf->current_link=link;
+
+ ogg_stream_init(&vf->os,vf->current_serialno);
+ ogg_stream_reset(&vf->os);
+ vf->ready_state=STREAMSET;
+
+ }else{
+ /* we're streaming */
+ /* fetch the three header packets, build the info struct */
+
+ int ret=_fetch_headers(vf,vf->vi,vf->vc,&vf->current_serialno,&og);
+ if(ret)return(ret);
+ vf->current_link++;
+ link=0;
+ }
+ }
+
+ _make_decode_ready(vf);
+ }
+ ogg_stream_pagein(&vf->os,&og);
+ }
+}
+
+static int _fseek64_wrap(FILE *f,ogg_int64_t off,int whence){
+ if(f==NULL)return(-1);
+ return fseek(f,(int)off,whence);
+}
+
+static int _ov_open1(void *f,OggVorbis_File *vf,char *initial,
+ long ibytes, ov_callbacks callbacks){
+ long offset=(f?callbacks.seek_func(f,0,SEEK_CUR):-1);
+ int ret;
+
+ memset(vf,0,sizeof(*vf));
+ vf->datasource=f;
+ vf->callbacks = callbacks;
+
+ /* init the framing state */
+ ogg_sync_init(&vf->oy);
+
+ /* perhaps some data was previously read into a buffer for testing
+ against other stream types. Allow initialization from this
+ previously read data (as we may be reading from a non-seekable
+ stream) */
+ if(initial){
+ char *buffer=ogg_sync_buffer(&vf->oy,ibytes);
+ memcpy(buffer,initial,ibytes);
+ ogg_sync_wrote(&vf->oy,ibytes);
+ }
+
+ /* can we seek? Stevens suggests the seek test was portable */
+ if(offset!=-1)vf->seekable=1;
+
+ /* No seeking yet; Set up a 'single' (current) logical bitstream
+ entry for partial open */
+ vf->links=1;
+ vf->vi=(vorbis_info *)_ogg_calloc(vf->links,sizeof(*vf->vi));
+ vf->vc=(vorbis_comment *)_ogg_calloc(vf->links,sizeof(*vf->vc));
+
+ /* Try to fetch the headers, maintaining all the storage */
+ if((ret=_fetch_headers(vf,vf->vi,vf->vc,&vf->current_serialno,NULL))<0){
+ vf->datasource=NULL;
+ ov_clear(vf);
+ }else if(vf->ready_state < PARTOPEN)
+ vf->ready_state=PARTOPEN;
+ return(ret);
+}
+
+static int _ov_open2(OggVorbis_File *vf){
+ if(vf->ready_state < OPENED)
+ vf->ready_state=OPENED;
+ if(vf->seekable){
+ int ret=_open_seekable2(vf);
+ if(ret){
+ vf->datasource=NULL;
+ ov_clear(vf);
+ }
+ return(ret);
+ }
+ return 0;
+}
+
+
+/* clear out the OggVorbis_File struct */
+int ov_clear(OggVorbis_File *vf){
+ if(vf){
+ vorbis_block_clear(&vf->vb);
+ vorbis_dsp_clear(&vf->vd);
+ ogg_stream_clear(&vf->os);
+
+ if(vf->vi && vf->links){
+ int i;
+ for(i=0;i<vf->links;i++){
+ vorbis_info_clear(vf->vi+i);
+ vorbis_comment_clear(vf->vc+i);
+ }
+ _ogg_free(vf->vi);
+ _ogg_free(vf->vc);
+ }
+ if(vf->dataoffsets)_ogg_free(vf->dataoffsets);
+ if(vf->pcmlengths)_ogg_free(vf->pcmlengths);
+ if(vf->serialnos)_ogg_free(vf->serialnos);
+ if(vf->offsets)_ogg_free(vf->offsets);
+ ogg_sync_clear(&vf->oy);
+ if(vf->datasource)(vf->callbacks.close_func)(vf->datasource);
+ memset(vf,0,sizeof(*vf));
+ }
+#ifdef DEBUG_LEAKS
+ _VDBG_dump();
+#endif
+ return(0);
+}
+
+/* inspects the OggVorbis file and finds/documents all the logical
+ bitstreams contained in it. Tries to be tolerant of logical
+ bitstream sections that are truncated/woogie.
+
+ return: -1) error
+ 0) OK
+*/
+
+int ov_open_callbacks(void *f,OggVorbis_File *vf,char *initial,long ibytes,
+ ov_callbacks callbacks){
+ int ret=_ov_open1(f,vf,initial,ibytes,callbacks);
+ if(ret)return ret;
+ return _ov_open2(vf);
+}
+
+int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes){
+ ov_callbacks callbacks = {
+ (size_t (*)(void *, size_t, size_t, void *)) fread,
+ (int (*)(void *, ogg_int64_t, int)) _fseek64_wrap,
+ (int (*)(void *)) fclose,
+ (long (*)(void *)) ftell
+ };
+
+ return ov_open_callbacks((void *)f, vf, initial, ibytes, callbacks);
+}
+
+/* Only partially open the vorbis file; test for Vorbisness, and load
+ the headers for the first chain. Do not seek (although test for
+ seekability). Use ov_test_open to finish opening the file, else
+ ov_clear to close/free it. Same return codes as open. */
+
+int ov_test_callbacks(void *f,OggVorbis_File *vf,char *initial,long ibytes,
+ ov_callbacks callbacks)
+{
+ return _ov_open1(f,vf,initial,ibytes,callbacks);
+}
+
+int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes){
+ ov_callbacks callbacks = {
+ (size_t (*)(void *, size_t, size_t, void *)) fread,
+ (int (*)(void *, ogg_int64_t, int)) _fseek64_wrap,
+ (int (*)(void *)) fclose,
+ (long (*)(void *)) ftell
+ };
+
+ return ov_test_callbacks((void *)f, vf, initial, ibytes, callbacks);
+}
+
+int ov_test_open(OggVorbis_File *vf){
+ if(vf->ready_state!=PARTOPEN)return(OV_EINVAL);
+ return _ov_open2(vf);
+}
+
+/* How many logical bitstreams in this physical bitstream? */
+long ov_streams(OggVorbis_File *vf){
+ return vf->links;
+}
+
+/* Is the FILE * associated with vf seekable? */
+long ov_seekable(OggVorbis_File *vf){
+ return vf->seekable;
+}
+
+/* returns the bitrate for a given logical bitstream or the entire
+ physical bitstream. If the file is open for random access, it will
+ find the *actual* average bitrate. If the file is streaming, it
+ returns the nominal bitrate (if set) else the average of the
+ upper/lower bounds (if set) else -1 (unset).
+
+ If you want the actual bitrate field settings, get them from the
+ vorbis_info structs */
+
+long ov_bitrate(OggVorbis_File *vf,int i){
+ if(vf->ready_state<OPENED)return(OV_EINVAL);
+ if(i>=vf->links)return(OV_EINVAL);
+ if(!vf->seekable && i!=0)return(ov_bitrate(vf,0));
+ if(i<0){
+ ogg_int64_t bits=0;
+ int i;
+ for(i=0;i<vf->links;i++)
+ bits+=(vf->offsets[i+1]-vf->dataoffsets[i])*8;
+ return(bits*1000/ov_time_total(vf,-1));
+ }else{
+ if(vf->seekable){
+ /* return the actual bitrate */
+ return((vf->offsets[i+1]-vf->dataoffsets[i])*8000/ov_time_total(vf,i));
+ }else{
+ /* return nominal if set */
+ if(vf->vi[i].bitrate_nominal>0){
+ return vf->vi[i].bitrate_nominal;
+ }else{
+ if(vf->vi[i].bitrate_upper>0){
+ if(vf->vi[i].bitrate_lower>0){
+ return (vf->vi[i].bitrate_upper+vf->vi[i].bitrate_lower)/2;
+ }else{
+ return vf->vi[i].bitrate_upper;
+ }
+ }
+ return(OV_FALSE);
+ }
+ }
+ }
+}
+
+/* returns the actual bitrate since last call. returns -1 if no
+ additional data to offer since last call (or at beginning of stream),
+ EINVAL if stream is only partially open
+*/
+long ov_bitrate_instant(OggVorbis_File *vf){
+ int link=(vf->seekable?vf->current_link:0);
+ long ret;
+ if(vf->ready_state<OPENED)return(OV_EINVAL);
+ if(vf->samptrack==0)return(OV_FALSE);
+ ret=vf->bittrack/vf->samptrack*vf->vi[link].rate;
+ vf->bittrack=0;
+ vf->samptrack=0;
+ return(ret);
+}
+
+/* Guess */
+long ov_serialnumber(OggVorbis_File *vf,int i){
+ if(i>=vf->links)return(ov_serialnumber(vf,vf->links-1));
+ if(!vf->seekable && i>=0)return(ov_serialnumber(vf,-1));
+ if(i<0){
+ return(vf->current_serialno);
+ }else{
+ return(vf->serialnos[i]);
+ }
+}
+
+/* returns: total raw (compressed) length of content if i==-1
+ raw (compressed) length of that logical bitstream for i==0 to n
+ OV_EINVAL if the stream is not seekable (we can't know the length)
+ or if stream is only partially open
+*/
+ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i){
+ if(vf->ready_state<OPENED)return(OV_EINVAL);
+ if(!vf->seekable || i>=vf->links)return(OV_EINVAL);
+ if(i<0){
+ long acc=0;
+ int i;
+ for(i=0;i<vf->links;i++)
+ acc+=ov_raw_total(vf,i);
+ return(acc);
+ }else{
+ return(vf->offsets[i+1]-vf->offsets[i]);
+ }
+}
+
+/* returns: total PCM length (samples) of content if i==-1 PCM length
+ (samples) of that logical bitstream for i==0 to n
+ OV_EINVAL if the stream is not seekable (we can't know the
+ length) or only partially open
+*/
+ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i){
+ if(vf->ready_state<OPENED)return(OV_EINVAL);
+ if(!vf->seekable || i>=vf->links)return(OV_EINVAL);
+ if(i<0){
+ ogg_int64_t acc=0;
+ int i;
+ for(i=0;i<vf->links;i++)
+ acc+=ov_pcm_total(vf,i);
+ return(acc);
+ }else{
+ return(vf->pcmlengths[i]);
+ }
+}
+
+/* returns: total milliseconds of content if i==-1
+ seconds in that logical bitstream for i==0 to n
+ OV_EINVAL if the stream is not seekable (we can't know the
+ length) or only partially open
+*/
+ogg_int64_t ov_time_total(OggVorbis_File *vf,int i){
+ if(vf->ready_state<OPENED)return(OV_EINVAL);
+ if(!vf->seekable || i>=vf->links)return(OV_EINVAL);
+ if(i<0){
+ ogg_int64_t acc=0;
+ int i;
+ for(i=0;i<vf->links;i++)
+ acc+=ov_time_total(vf,i);
+ return(acc);
+ }else{
+ return(((ogg_int64_t)vf->pcmlengths[i])*1000/vf->vi[i].rate);
+ }
+}
+
+/* seek to an offset relative to the *compressed* data. This also
+ scans packets to update the PCM cursor. It will cross a logical
+ bitstream boundary, but only if it can't get any packets out of the
+ tail of the bitstream we seek to (so no surprises).
+
+ returns zero on success, nonzero on failure */
+
+int ov_raw_seek(OggVorbis_File *vf,long pos){
+ ogg_stream_state work_os;
+
+ if(vf->ready_state<OPENED)return(OV_EINVAL);
+ if(!vf->seekable)
+ return(OV_ENOSEEK); /* don't dump machine if we can't seek */
+
+ if(pos<0 || pos>vf->offsets[vf->links])return(OV_EINVAL);
+
+ /* clear out decoding machine state */
+ vf->pcm_offset=-1;
+ _decode_clear(vf);
+
+ _seek_helper(vf,pos);
+
+ /* we need to make sure the pcm_offset is set, but we don't want to
+ advance the raw cursor past good packets just to get to the first
+ with a granulepos. That's not equivalent behavior to beginning
+ decoding as immediately after the seek position as possible.
+
+ So, a hack. We use two stream states; a local scratch state and
+ a the shared vf->os stream state. We use the local state to
+ scan, and the shared state as a buffer for later decode.
+
+ Unfortuantely, on the last page we still advance to last packet
+ because the granulepos on the last page is not necessarily on a
+ packet boundary, and we need to make sure the granpos is
+ correct.
+ */
+
+ {
+ ogg_page og;
+ ogg_packet op;
+ int lastblock=0;
+ int accblock=0;
+ int thisblock=-1;
+ int eosflag=0;
+
+ memset(&work_os,0,sizeof(work_os));/* so that it's safe to clear
+ it later even if we don't
+ init it */
+
+ while(1){
+ if(vf->ready_state==STREAMSET){
+ /* snarf/scan a packet if we can */
+ int result=ogg_stream_packetout(&work_os,&op);
+
+ if(result>0){
+
+ if(vf->vi[vf->current_link].codec_setup)
+ thisblock=vorbis_packet_blocksize(vf->vi+vf->current_link,&op);
+ if(eosflag)
+ ogg_stream_packetout(&vf->os,NULL);
+ else
+ if(lastblock)accblock+=(lastblock+thisblock)>>2;
+
+ if(op.granulepos!=-1){
+ int i,link=vf->current_link;
+ ogg_int64_t granulepos=op.granulepos;
+
+ for(i=0;i<link;i++)
+ granulepos+=vf->pcmlengths[i];
+ vf->pcm_offset=granulepos-accblock;
+ break;
+ }
+ lastblock=thisblock;
+ continue;
+ }
+ }
+
+ if(!lastblock){
+ if(_get_next_page(vf,&og,-1)<0){
+ vf->pcm_offset=ov_pcm_total(vf,-1);
+ break;
+ }
+ }else{
+ /* huh? Bogus stream with packets but no granulepos */
+ vf->pcm_offset=-1;
+ break;
+ }
+
+ /* has our decoding just traversed a bitstream boundary? */
+ if(vf->ready_state==STREAMSET)
+ if(vf->current_serialno!=ogg_page_serialno(&og)){
+ _decode_clear(vf); /* clear out stream state */
+ ogg_stream_clear(&work_os);
+ }
+
+ if(vf->ready_state<STREAMSET){
+ int link;
+
+ vf->current_serialno=ogg_page_serialno(&og);
+ for(link=0;link<vf->links;link++)
+ if(vf->serialnos[link]==vf->current_serialno)break;
+ if(link==vf->links)goto seek_error; /* sign of a bogus stream.
+ error out, leave
+ machine uninitialized */
+ vf->current_link=link;
+
+ ogg_stream_init(&vf->os,vf->current_serialno);
+ ogg_stream_reset(&vf->os);
+ ogg_stream_init(&work_os,vf->current_serialno);
+ ogg_stream_reset(&work_os);
+ vf->ready_state=STREAMSET;
+
+ }
+
+ ogg_stream_pagein(&vf->os,&og);
+ ogg_stream_pagein(&work_os,&og);
+ eosflag=ogg_page_eos(&og);
+ }
+ }
+
+ ogg_stream_clear(&work_os);
+ return(0);
+
+ seek_error:
+ /* dump the machine so we're in a known state */
+ vf->pcm_offset=-1;
+ ogg_stream_clear(&work_os);
+ _decode_clear(vf);
+ return OV_EBADLINK;
+}
+
+/* Page granularity seek (faster than sample granularity because we
+ don't do the last bit of decode to find a specific sample).
+
+ Seek to the last [granule marked] page preceeding the specified pos
+ location, such that decoding past the returned point will quickly
+ arrive at the requested position. */
+int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos){
+ int link=-1;
+ long ret;
+ ogg_int64_t total=ov_pcm_total(vf,-1);
+
+ if(vf->ready_state<OPENED)return(OV_EINVAL);
+ if(!vf->seekable)return(OV_ENOSEEK);
+ if(pos<0 || pos>total)return(OV_EINVAL);
+
+ /* which bitstream section does this pcm offset occur in? */
+ for(link=vf->links-1;link>=0;link--){
+ total-=vf->pcmlengths[link];
+ if(pos>=total)break;
+ }
+
+ /* search within the logical bitstream for the page with the highest
+ pcm_pos preceeding (or equal to) pos. There is a danger here;
+ missing pages or incorrect frame number information in the
+ bitstream could make our task impossible. Account for that (it
+ would be an error condition) */
+
+ /* new search algorithm by HB (Nicholas Vinen) */
+ {
+ ogg_int64_t target=pos-total;
+ long end=vf->offsets[link+1];
+ long begin=vf->offsets[link];
+ ogg_int64_t endtime = vf->pcmlengths[link];
+ ogg_int64_t begintime = 0;
+ long best=begin;
+
+ ogg_page og;
+ while(begin<end){
+ long bisect;
+
+ if(end-begin<CHUNKSIZE){
+ bisect=begin;
+ }else{
+ /* take a (pretty decent) guess. */
+ bisect=begin +
+ (target-begintime)*(end-begin)/(endtime-begintime) - CHUNKSIZE;
+ if(bisect<=begin)
+ bisect=begin+1;
+ }
+ _seek_helper(vf,bisect);
+
+ while(begin<end){
+ ret=_get_next_page(vf,&og,end-bisect);
+ if(ret==OV_EREAD) goto seek_error;
+ if(ret<0){
+ if(bisect<=begin+1)
+ end=begin; /* found it */
+ else{
+ if(bisect==0)goto seek_error;
+ bisect-=CHUNKSIZE;
+ if(bisect<=begin)bisect=begin+1;
+ _seek_helper(vf,bisect);
+ }
+ }else{
+ ogg_int64_t granulepos=ogg_page_granulepos(&og);
+ if(granulepos<target){
+ best=ret; /* raw offset of packet with granulepos */
+ begin=vf->offset; /* raw offset of next page */
+ begintime=granulepos;
+
+ if(target-begin>44100)break;
+ bisect=begin; /* *not* begin + 1 */
+ }else{
+ if(bisect<=begin+1)
+ end=begin; /* found it */
+ else{
+ if(end==vf->offset){ /* we're pretty close - we'd be stuck in */
+ end=ret;
+ bisect-=CHUNKSIZE; /* an endless loop otherwise. */
+ if(bisect<=begin)bisect=begin+1;
+ _seek_helper(vf,bisect);
+ }else{
+ end=ret;
+ endtime=granulepos;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* found our page. seek to it, update pcm offset. Easier case than
+ raw_seek, don't keep packets preceeding granulepos. */
+ {
+ ogg_page og;
+ ogg_packet op;
+ /* clear out decoding machine state */
+ _decode_clear(vf);
+ /* seek */
+ _seek_helper(vf,best);
+
+ if(_get_next_page(vf,&og,-1)<0)return(OV_EOF); /* shouldn't happen */
+ vf->current_serialno=ogg_page_serialno(&og);
+ vf->current_link=link;
+
+ ogg_stream_init(&vf->os,vf->current_serialno);
+ ogg_stream_reset(&vf->os);
+ vf->ready_state=STREAMSET;
+ ogg_stream_pagein(&vf->os,&og);
+
+ /* pull out all but last packet; the one with granulepos */
+ while(1){
+ ret=ogg_stream_packetpeek(&vf->os,&op);
+ if(ret==0){
+ /* !!! the packet finishing this page originated on a
+ preceeding page. Keep fetching previous pages until we
+ get one with a granulepos or without the 'continued' flag
+ set. Then just use raw_seek for simplicity. */
+ while(1){
+ ret=_get_prev_page(vf,&og);
+ if(ret<0)goto seek_error;
+ if(ogg_page_granulepos(&og)>-1 ||
+ !ogg_page_continued(&og)){
+ return ov_raw_seek(vf,ret);
+ }
+ vf->offset=ret;
+ }
+ }
+ if(ret<0)goto seek_error;
+ if(op.granulepos!=-1){
+ vf->pcm_offset=op.granulepos+total;
+ break;
+ }else
+ ret=ogg_stream_packetout(&vf->os,NULL);
+ }
+ }
+ }
+
+ /* verify result */
+ if(vf->pcm_offset>pos || pos>ov_pcm_total(vf,-1)){
+ ret=OV_EFAULT;
+ goto seek_error;
+ }
+ return(0);
+
+ seek_error:
+ /* dump machine so we're in a known state */
+ vf->pcm_offset=-1;
+ _decode_clear(vf);
+ return ret;
+}
+
+/* seek to a sample offset relative to the decompressed pcm stream
+ returns zero on success, nonzero on failure */
+
+int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos){
+ int thisblock,lastblock=0;
+ int ret=ov_pcm_seek_page(vf,pos);
+ if(ret<0)return(ret);
+
+ /* discard leading packets we don't need for the lapping of the
+ position we want; don't decode them */
+
+ while(1){
+ ogg_packet op;
+ ogg_page og;
+
+ int ret=ogg_stream_packetpeek(&vf->os,&op);
+ if(ret>0){
+ thisblock=vorbis_packet_blocksize(vf->vi+vf->current_link,&op);
+ if(lastblock)vf->pcm_offset+=(lastblock+thisblock)>>2;
+
+ if(vf->pcm_offset+((thisblock+
+ vorbis_info_blocksize(vf->vi,1))>>2)>=pos)break;
+
+ ogg_stream_packetout(&vf->os,NULL);
+
+
+ /* end of logical stream case is hard, especially with exact
+ length positioning. */
+
+ if(op.granulepos>-1){
+ int i;
+ /* always believe the stream markers */
+ vf->pcm_offset=op.granulepos;
+ for(i=0;i<vf->current_link;i++)
+ vf->pcm_offset+=vf->pcmlengths[i];
+ }
+
+ lastblock=thisblock;
+
+ }else{
+ if(ret<0 && ret!=OV_HOLE)break;
+
+ /* suck in a new page */
+ if(_get_next_page(vf,&og,-1)<0)break;
+ if(vf->current_serialno!=ogg_page_serialno(&og))_decode_clear(vf);
+
+ if(vf->ready_state<STREAMSET){
+ int link;
+
+ vf->current_serialno=ogg_page_serialno(&og);
+ for(link=0;link<vf->links;link++)
+ if(vf->serialnos[link]==vf->current_serialno)break;
+ if(link==vf->links)return(OV_EBADLINK);
+ vf->current_link=link;
+
+ ogg_stream_init(&vf->os,vf->current_serialno);
+ ogg_stream_reset(&vf->os);
+ vf->ready_state=STREAMSET;
+ lastblock=0;
+ }
+ ogg_stream_pagein(&vf->os,&og);
+ }
+ }
+
+ /* discard samples until we reach the desired position. Crossing a
+ logical bitstream boundary with abandon is OK. */
+ _make_decode_ready(vf);
+ while(vf->pcm_offset<pos){
+ ogg_int32_t **pcm;
+ long target=pos-vf->pcm_offset;
+ long samples=vorbis_synthesis_pcmout(&vf->vd,&pcm);
+
+ if(samples>target)samples=target;
+ vorbis_synthesis_read(&vf->vd,samples);
+ vf->pcm_offset+=samples;
+
+ if(samples<target)
+ if(_process_packet(vf,1)<=0)
+ vf->pcm_offset=ov_pcm_total(vf,-1); /* eof */
+ }
+ return 0;
+}
+
+/* seek to a playback time relative to the decompressed pcm stream
+ returns zero on success, nonzero on failure */
+int ov_time_seek(OggVorbis_File *vf,ogg_int64_t milliseconds){
+ /* translate time to PCM position and call ov_pcm_seek */
+
+ int link=-1;
+ ogg_int64_t pcm_total=ov_pcm_total(vf,-1);
+ ogg_int64_t time_total=ov_time_total(vf,-1);
+
+ if(vf->ready_state<OPENED)return(OV_EINVAL);
+ if(!vf->seekable)return(OV_ENOSEEK);
+ if(milliseconds<0 || milliseconds>time_total)return(OV_EINVAL);
+
+ /* which bitstream section does this time offset occur in? */
+ for(link=vf->links-1;link>=0;link--){
+ pcm_total-=vf->pcmlengths[link];
+ time_total-=ov_time_total(vf,link);
+ if(milliseconds>=time_total)break;
+ }
+
+ /* enough information to convert time offset to pcm offset */
+ {
+ ogg_int64_t target=pcm_total+(milliseconds-time_total)*vf->vi[link].rate/1000;
+ return(ov_pcm_seek(vf,target));
+ }
+}
+
+/* page-granularity version of ov_time_seek
+ returns zero on success, nonzero on failure */
+int ov_time_seek_page(OggVorbis_File *vf,ogg_int64_t milliseconds){
+ /* translate time to PCM position and call ov_pcm_seek */
+
+ int link=-1;
+ ogg_int64_t pcm_total=ov_pcm_total(vf,-1);
+ ogg_int64_t time_total=ov_time_total(vf,-1);
+
+ if(vf->ready_state<OPENED)return(OV_EINVAL);
+ if(!vf->seekable)return(OV_ENOSEEK);
+ if(milliseconds<0 || milliseconds>time_total)return(OV_EINVAL);
+
+ /* which bitstream section does this time offset occur in? */
+ for(link=vf->links-1;link>=0;link--){
+ pcm_total-=vf->pcmlengths[link];
+ time_total-=ov_time_total(vf,link);
+ if(milliseconds>=time_total)break;
+ }
+
+ /* enough information to convert time offset to pcm offset */
+ {
+ ogg_int64_t target=pcm_total+(milliseconds-time_total)*vf->vi[link].rate/1000;
+ return(ov_pcm_seek_page(vf,target));
+ }
+}
+
+/* tell the current stream offset cursor. Note that seek followed by
+ tell will likely not give the set offset due to caching */
+ogg_int64_t ov_raw_tell(OggVorbis_File *vf){
+ if(vf->ready_state<OPENED)return(OV_EINVAL);
+ return(vf->offset);
+}
+
+/* return PCM offset (sample) of next PCM sample to be read */
+ogg_int64_t ov_pcm_tell(OggVorbis_File *vf){
+ if(vf->ready_state<OPENED)return(OV_EINVAL);
+ return(vf->pcm_offset);
+}
+
+/* return time offset (milliseconds) of next PCM sample to be read */
+ogg_int64_t ov_time_tell(OggVorbis_File *vf){
+ /* translate time to PCM position and call ov_pcm_seek */
+
+ int link=-1;
+ ogg_int64_t pcm_total=0;
+ ogg_int64_t time_total=0;
+
+ if(vf->ready_state<OPENED)return(OV_EINVAL);
+ if(vf->seekable){
+ pcm_total=ov_pcm_total(vf,-1);
+ time_total=ov_time_total(vf,-1);
+
+ /* which bitstream section does this time offset occur in? */
+ for(link=vf->links-1;link>=0;link--){
+ pcm_total-=vf->pcmlengths[link];
+ time_total-=ov_time_total(vf,link);
+ if(vf->pcm_offset>=pcm_total)break;
+ }
+ }
+
+ return(time_total+(vf->pcm_offset-pcm_total)/vf->vi[link].rate*1000);
+}
+
+/* link: -1) return the vorbis_info struct for the bitstream section
+ currently being decoded
+ 0-n) to request information for a specific bitstream section
+
+ In the case of a non-seekable bitstream, any call returns the
+ current bitstream. NULL in the case that the machine is not
+ initialized */
+
+vorbis_info *ov_info(OggVorbis_File *vf,int link){
+ if(vf->seekable){
+ if(link<0)
+ if(vf->ready_state>=STREAMSET)
+ return vf->vi+vf->current_link;
+ else
+ return vf->vi;
+ else
+ if(link>=vf->links)
+ return NULL;
+ else
+ return vf->vi+link;
+ }else{
+ return vf->vi;
+ }
+}
+
+/* grr, strong typing, grr, no templates/inheritence, grr */
+vorbis_comment *ov_comment(OggVorbis_File *vf,int link){
+ if(vf->seekable){
+ if(link<0)
+ if(vf->ready_state>=STREAMSET)
+ return vf->vc+vf->current_link;
+ else
+ return vf->vc;
+ else
+ if(link>=vf->links)
+ return NULL;
+ else
+ return vf->vc+link;
+ }else{
+ return vf->vc;
+ }
+}
+
+/* up to this point, everything could more or less hide the multiple
+ logical bitstream nature of chaining from the toplevel application
+ if the toplevel application didn't particularly care. However, at
+ the point that we actually read audio back, the multiple-section
+ nature must surface: Multiple bitstream sections do not necessarily
+ have to have the same number of channels or sampling rate.
+
+ ov_read returns the sequential logical bitstream number currently
+ being decoded along with the PCM data in order that the toplevel
+ application can take action on channel/sample rate changes. This
+ number will be incremented even for streamed (non-seekable) streams
+ (for seekable streams, it represents the actual logical bitstream
+ index within the physical bitstream. Note that the accessor
+ functions above are aware of this dichotomy).
+
+ input values: buffer) a buffer to hold packed PCM data for return
+ length) the byte length requested to be placed into buffer
+
+ return values: <0) error/hole in data (OV_HOLE), partial open (OV_EINVAL)
+ 0) EOF
+ n) number of bytes of PCM actually returned. The
+ below works on a packet-by-packet basis, so the
+ return length is not related to the 'length' passed
+ in, just guaranteed to fit.
+
+ *section) set to the logical bitstream number */
+
+long ov_read(OggVorbis_File *vf,char *buffer,int bytes_req,int *bitstream){
+ int i,j;
+
+ ogg_int32_t **pcm;
+ long samples;
+
+ if(vf->ready_state<OPENED)return(OV_EINVAL);
+
+ while(1){
+ if(vf->ready_state>=STREAMSET){
+ samples=vorbis_synthesis_pcmout(&vf->vd,&pcm);
+ if(samples)break;
+ }
+
+ /* suck in another packet */
+ {
+ int ret=_process_packet(vf,1);
+ if(ret==OV_EOF)return(0);
+ if(ret<=0)return(ret);
+ }
+
+ }
+
+ if(samples>0){
+
+ /* yay! proceed to pack data into the byte buffer */
+
+ long channels=ov_info(vf,-1)->channels;
+
+ if(channels==1){
+ if(samples>(bytes_req/2))
+ samples=bytes_req/2;
+ }else{
+ if(samples>(bytes_req/4))
+ samples=bytes_req/4;
+ }
+
+ for(i=0;i<channels;i++) { /* It's faster in this order */
+ ogg_int32_t *src=pcm[i];
+ short *dest=((short *)buffer)+i;
+ for(j=0;j<samples;j++) {
+ *dest=CLIP_TO_15(src[j]>>9);
+ dest+=channels;
+ }
+ }
+
+ vorbis_synthesis_read(&vf->vd,samples);
+ vf->pcm_offset+=samples;
+ if(bitstream)*bitstream=vf->current_link;
+ return(samples*2*channels);
+ }else{
+ return(samples);
+ }
+}
+
+
+
+
diff --git a/window.c b/window.c
new file mode 100644
index 0000000..08e29a4
--- /dev/null
+++ b/window.c
@@ -0,0 +1,2141 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: window functions
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <math.h>
+#include "os.h"
+#include "misc.h"
+
+static ogg_int32_t vwin64[32]={
+ 0x001f0003, 0x01168c98, 0x030333c8, 0x05dfe3a4,
+ 0x09a49562, 0x0e45df18, 0x13b47ef2, 0x19dcf676,
+ 0x20a74d83, 0x27f7137c, 0x2fabb05a, 0x37a11059,
+ 0x3fb0ab28, 0x47b2dcd0, 0x4f807bc6, 0x56f48e6f,
+ 0x5dedfc78, 0x64511652, 0x6a08cffe, 0x6f079327,
+ 0x734796f3, 0x76cab7f1, 0x7999d6e7, 0x7bc3cf9e,
+ 0x7d5c20c0, 0x7e7961de, 0x7f33a566, 0x7fa2e1cf,
+ 0x7fdd78a4, 0x7ff6ec6c, 0x7ffed0e8, 0x7ffffc3e,
+};
+
+static ogg_int32_t vwin128[64]={
+ 0x0007c04d, 0x0045bb89, 0x00c18b87, 0x017ae294,
+ 0x02714a4e, 0x03a4217a, 0x05129952, 0x06bbb24f,
+ 0x089e38a1, 0x0ab8c073, 0x0d09a228, 0x0f8ef6bd,
+ 0x12469488, 0x152e0c7a, 0x1842a81b, 0x1b81686d,
+ 0x1ee705d9, 0x226ff15d, 0x26185704, 0x29dc21cc,
+ 0x2db700fd, 0x31a46f08, 0x359fb9c1, 0x39a40c0b,
+ 0x3dac78b6, 0x41b40674, 0x45b5bcb0, 0x49acb109,
+ 0x4d94152a, 0x516744bc, 0x5521d320, 0x58bf98a5,
+ 0x5c3cbef3, 0x5f95cc5c, 0x62c7add6, 0x65cfbf63,
+ 0x68abd2b9, 0x6b5a3404, 0x6dd9acaa, 0x7029840c,
+ 0x72497e37, 0x7439d8ab, 0x75fb4531, 0x778ee309,
+ 0x78f6367d, 0x7a331f19, 0x7b47cccc, 0x7c36b415,
+ 0x7d028191, 0x7dae0d18, 0x7e3c4ca9, 0x7eb04762,
+ 0x7f0d08a6, 0x7f5593b6, 0x7f8cd7d4, 0x7fb5a512,
+ 0x7fd2a1fb, 0x7fe64211, 0x7ff2bd4b, 0x7ffa088f,
+ 0x7ffdcf38, 0x7fff6dab, 0x7fffed00, 0x7fffffc3,
+};
+
+static ogg_int32_t vwin256[128]={
+ 0x0001f018, 0x00117066, 0x00306e9e, 0x005ee5f1,
+ 0x009ccf26, 0x00ea208b, 0x0146cdea, 0x01b2c87f,
+ 0x022dfedf, 0x02b85ced, 0x0351cbbd, 0x03fa317f,
+ 0x04b17167, 0x05776b8f, 0x064bfcdc, 0x072efedd,
+ 0x082047b4, 0x091fa9f1, 0x0a2cf477, 0x0b47f25d,
+ 0x0c706ad2, 0x0da620ff, 0x0ee8d3ef, 0x10383e75,
+ 0x11941715, 0x12fc0ff6, 0x146fd6c8, 0x15ef14c1,
+ 0x17796e8e, 0x190e844f, 0x1aadf196, 0x1c574d6e,
+ 0x1e0a2a61, 0x1fc61688, 0x218a9b9b, 0x23573f12,
+ 0x252b823c, 0x2706e269, 0x28e8d913, 0x2ad0dc0d,
+ 0x2cbe5dc0, 0x2eb0cd60, 0x30a79732, 0x32a224d4,
+ 0x349fdd8a, 0x36a0268f, 0x38a2636e, 0x3aa5f65d,
+ 0x3caa409e, 0x3eaea2df, 0x40b27da6, 0x42b531b8,
+ 0x44b62085, 0x46b4ac99, 0x48b03a05, 0x4aa82ed5,
+ 0x4c9bf37d, 0x4e8af348, 0x50749cca, 0x52586245,
+ 0x5435ba1b, 0x560c1f31, 0x57db1151, 0x59a21591,
+ 0x5b60b6a3, 0x5d168534, 0x5ec31839, 0x60660d35,
+ 0x61ff0885, 0x638db594, 0x6511c716, 0x668af733,
+ 0x67f907af, 0x695bc206, 0x6ab2f786, 0x6bfe815a,
+ 0x6d3e408f, 0x6e721e15, 0x6f9a0ab4, 0x70b5fef8,
+ 0x71c5fb15, 0x72ca06cc, 0x73c2313c, 0x74ae90b2,
+ 0x758f4274, 0x76646a85, 0x772e335b, 0x77eccd9f,
+ 0x78a06fd6, 0x79495612, 0x79e7c19b, 0x7a7bf893,
+ 0x7b064595, 0x7b86f756, 0x7bfe6043, 0x7c6cd614,
+ 0x7cd2b16d, 0x7d304d70, 0x7d860755, 0x7dd43e05,
+ 0x7e1b51ac, 0x7e5ba354, 0x7e95947d, 0x7ec986ba,
+ 0x7ef7db49, 0x7f20f2b8, 0x7f452c7e, 0x7f64e6a6,
+ 0x7f807d70, 0x7f984afe, 0x7faca6ff, 0x7fbde661,
+ 0x7fcc5b03, 0x7fd85371, 0x7fe21a98, 0x7fe9f790,
+ 0x7ff02d57, 0x7ff4fa9d, 0x7ff8998f, 0x7ffb3fa9,
+ 0x7ffd1d8a, 0x7ffe5ecb, 0x7fff29df, 0x7fff9ff2,
+ 0x7fffdcd1, 0x7ffff6d5, 0x7ffffecf, 0x7ffffffb,
+};
+
+static ogg_int32_t vwin512[256]={
+ 0x00007c06, 0x00045c32, 0x000c1c62, 0x0017bc4c,
+ 0x00273b7a, 0x003a9955, 0x0051d51c, 0x006cede7,
+ 0x008be2a9, 0x00aeb22a, 0x00d55b0d, 0x00ffdbcc,
+ 0x012e32b6, 0x01605df5, 0x01965b85, 0x01d02939,
+ 0x020dc4ba, 0x024f2b83, 0x02945ae6, 0x02dd5004,
+ 0x032a07d3, 0x037a7f19, 0x03ceb26e, 0x04269e37,
+ 0x04823eab, 0x04e18fcc, 0x05448d6d, 0x05ab3329,
+ 0x06157c68, 0x0683645e, 0x06f4e607, 0x0769fc25,
+ 0x07e2a146, 0x085ecfbc, 0x08de819f, 0x0961b0cc,
+ 0x09e856e2, 0x0a726d46, 0x0affed1d, 0x0b90cf4c,
+ 0x0c250c79, 0x0cbc9d0b, 0x0d577926, 0x0df598aa,
+ 0x0e96f337, 0x0f3b8026, 0x0fe3368f, 0x108e0d42,
+ 0x113bfac9, 0x11ecf56b, 0x12a0f324, 0x1357e9ac,
+ 0x1411ce70, 0x14ce9698, 0x158e3702, 0x1650a444,
+ 0x1715d2a9, 0x17ddb638, 0x18a842aa, 0x19756b72,
+ 0x1a4523b9, 0x1b175e61, 0x1bec0e03, 0x1cc324f0,
+ 0x1d9c9531, 0x1e78508a, 0x1f564876, 0x20366e2d,
+ 0x2118b2a1, 0x21fd0681, 0x22e35a37, 0x23cb9dee,
+ 0x24b5c18d, 0x25a1b4c0, 0x268f66f1, 0x277ec74e,
+ 0x286fc4cb, 0x29624e23, 0x2a5651d7, 0x2b4bbe33,
+ 0x2c428150, 0x2d3a8913, 0x2e33c332, 0x2f2e1d35,
+ 0x30298477, 0x3125e62d, 0x32232f61, 0x33214cfb,
+ 0x34202bc1, 0x351fb85a, 0x361fdf4e, 0x37208d0f,
+ 0x3821adf6, 0x39232e49, 0x3a24fa3b, 0x3b26fdf5,
+ 0x3c292593, 0x3d2b5d29, 0x3e2d90c7, 0x3f2fac7e,
+ 0x40319c5f, 0x41334c81, 0x4234a904, 0x43359e16,
+ 0x443617f3, 0x453602eb, 0x46354b64, 0x4733dde1,
+ 0x4831a6fe, 0x492e937e, 0x4a2a9045, 0x4b258a5f,
+ 0x4c1f6f06, 0x4d182ba2, 0x4e0fadce, 0x4f05e35a,
+ 0x4ffaba52, 0x50ee20fc, 0x51e005e1, 0x52d057ca,
+ 0x53bf05c9, 0x54abff3b, 0x559733c7, 0x56809365,
+ 0x57680e61, 0x584d955d, 0x59311952, 0x5a128b95,
+ 0x5af1dddc, 0x5bcf023a, 0x5ca9eb27, 0x5d828b80,
+ 0x5e58d68d, 0x5f2cbffb, 0x5ffe3be8, 0x60cd3edf,
+ 0x6199bdd9, 0x6263ae44, 0x632b0601, 0x63efbb66,
+ 0x64b1c53e, 0x65711acf, 0x662db3d6, 0x66e7888c,
+ 0x679e91a4, 0x6852c84d, 0x69042634, 0x69b2a581,
+ 0x6a5e40dd, 0x6b06f36b, 0x6bacb8d1, 0x6c4f8d2f,
+ 0x6cef6d26, 0x6d8c55d3, 0x6e2644d3, 0x6ebd383f,
+ 0x6f512eac, 0x6fe2272d, 0x7070214e, 0x70fb1d16,
+ 0x71831b05, 0x72081c15, 0x728a21b4, 0x73092dc7,
+ 0x738542a5, 0x73fe631a, 0x74749260, 0x74e7d420,
+ 0x75582c71, 0x75c59fd4, 0x76303332, 0x7697ebdc,
+ 0x76fccf84, 0x775ee442, 0x77be3089, 0x781abb2d,
+ 0x78748b58, 0x78cba88d, 0x79201aa6, 0x7971e9cc,
+ 0x79c11e78, 0x7a0dc16f, 0x7a57dbc1, 0x7a9f76c0,
+ 0x7ae49c06, 0x7b27556a, 0x7b67ad01, 0x7ba5ad1a,
+ 0x7be16039, 0x7c1ad117, 0x7c520a9d, 0x7c8717e0,
+ 0x7cba0420, 0x7ceadac2, 0x7d19a74e, 0x7d46756d,
+ 0x7d7150e4, 0x7d9a4591, 0x7dc15f68, 0x7de6aa70,
+ 0x7e0a32bf, 0x7e2c0478, 0x7e4c2bc6, 0x7e6ab4da,
+ 0x7e87abe8, 0x7ea31d23, 0x7ebd14bd, 0x7ed59edc,
+ 0x7eecc7a2, 0x7f029b20, 0x7f172559, 0x7f2a723e,
+ 0x7f3c8da9, 0x7f4d835c, 0x7f5d5eff, 0x7f6c2c1a,
+ 0x7f79f616, 0x7f86c839, 0x7f92ada1, 0x7f9db145,
+ 0x7fa7ddf2, 0x7fb13e45, 0x7fb9dcaf, 0x7fc1c36b,
+ 0x7fc8fc82, 0x7fcf91c6, 0x7fd58cd1, 0x7fdaf701,
+ 0x7fdfd978, 0x7fe43d1b, 0x7fe82a8a, 0x7febaa28,
+ 0x7feec411, 0x7ff1801b, 0x7ff3e5d5, 0x7ff5fc85,
+ 0x7ff7cb28, 0x7ff9586e, 0x7ffaaab9, 0x7ffbc81d,
+ 0x7ffcb65f, 0x7ffd7af2, 0x7ffe1af9, 0x7ffe9b41,
+ 0x7fff0046, 0x7fff4e2e, 0x7fff88c8, 0x7fffb38f,
+ 0x7fffd1a5, 0x7fffe5d6, 0x7ffff295, 0x7ffff9fc,
+ 0x7ffffdcc, 0x7fffff6c, 0x7fffffec, 0x7fffffff,
+ };
+
+static ogg_int32_t vwin1024[512]={
+ 0x00001f02, 0x0001170e, 0x00030724, 0x0005ef40,
+ 0x0009cf59, 0x000ea767, 0x0014775e, 0x001b3f2e,
+ 0x0022fec8, 0x002bb618, 0x00356508, 0x00400b81,
+ 0x004ba968, 0x00583ea0, 0x0065cb0a, 0x00744e84,
+ 0x0083c8ea, 0x00943a14, 0x00a5a1da, 0x00b80010,
+ 0x00cb5488, 0x00df9f10, 0x00f4df76, 0x010b1584,
+ 0x01224101, 0x013a61b2, 0x01537759, 0x016d81b6,
+ 0x01888087, 0x01a47385, 0x01c15a69, 0x01df34e6,
+ 0x01fe02b1, 0x021dc377, 0x023e76e7, 0x02601ca9,
+ 0x0282b466, 0x02a63dc1, 0x02cab85c, 0x02f023d6,
+ 0x03167fcb, 0x033dcbd3, 0x03660783, 0x038f3270,
+ 0x03b94c29, 0x03e4543a, 0x04104a2e, 0x043d2d8b,
+ 0x046afdd5, 0x0499ba8c, 0x04c9632d, 0x04f9f733,
+ 0x052b7615, 0x055ddf46, 0x05913237, 0x05c56e53,
+ 0x05fa9306, 0x06309fb6, 0x066793c5, 0x069f6e93,
+ 0x06d82f7c, 0x0711d5d9, 0x074c60fe, 0x0787d03d,
+ 0x07c422e4, 0x0801583e, 0x083f6f91, 0x087e681f,
+ 0x08be4129, 0x08fef9ea, 0x0940919a, 0x0983076d,
+ 0x09c65a92, 0x0a0a8a38, 0x0a4f9585, 0x0a957b9f,
+ 0x0adc3ba7, 0x0b23d4b9, 0x0b6c45ed, 0x0bb58e5a,
+ 0x0bffad0f, 0x0c4aa11a, 0x0c966982, 0x0ce3054d,
+ 0x0d30737b, 0x0d7eb307, 0x0dcdc2eb, 0x0e1da21a,
+ 0x0e6e4f82, 0x0ebfca11, 0x0f1210ad, 0x0f652238,
+ 0x0fb8fd91, 0x100da192, 0x10630d11, 0x10b93ee0,
+ 0x111035ca, 0x1167f09a, 0x11c06e13, 0x1219acf5,
+ 0x1273abfb, 0x12ce69db, 0x1329e549, 0x13861cf2,
+ 0x13e30f80, 0x1440bb97, 0x149f1fd8, 0x14fe3add,
+ 0x155e0b40, 0x15be8f92, 0x161fc662, 0x1681ae38,
+ 0x16e4459b, 0x17478b0b, 0x17ab7d03, 0x181019fb,
+ 0x18756066, 0x18db4eb3, 0x1941e34a, 0x19a91c91,
+ 0x1a10f8ea, 0x1a7976af, 0x1ae29439, 0x1b4c4fda,
+ 0x1bb6a7e2, 0x1c219a9a, 0x1c8d2648, 0x1cf9492e,
+ 0x1d660187, 0x1dd34d8d, 0x1e412b74, 0x1eaf996a,
+ 0x1f1e959b, 0x1f8e1e2e, 0x1ffe3146, 0x206ecd01,
+ 0x20dfef78, 0x215196c2, 0x21c3c0f0, 0x22366c0f,
+ 0x22a9962a, 0x231d3d44, 0x23915f60, 0x2405fa7a,
+ 0x247b0c8b, 0x24f09389, 0x25668d65, 0x25dcf80c,
+ 0x2653d167, 0x26cb175d, 0x2742c7d0, 0x27bae09e,
+ 0x28335fa2, 0x28ac42b3, 0x292587a5, 0x299f2c48,
+ 0x2a192e68, 0x2a938bd1, 0x2b0e4246, 0x2b894f8d,
+ 0x2c04b163, 0x2c806587, 0x2cfc69b2, 0x2d78bb9a,
+ 0x2df558f3, 0x2e723f6f, 0x2eef6cbb, 0x2f6cde83,
+ 0x2fea926f, 0x30688627, 0x30e6b74d, 0x31652384,
+ 0x31e3c86b, 0x3262a39e, 0x32e1b2b8, 0x3360f352,
+ 0x33e06302, 0x345fff5e, 0x34dfc5f8, 0x355fb462,
+ 0x35dfc82a, 0x365ffee0, 0x36e0560f, 0x3760cb42,
+ 0x37e15c05, 0x386205de, 0x38e2c657, 0x39639af5,
+ 0x39e4813d, 0x3a6576b6, 0x3ae678e2, 0x3b678547,
+ 0x3be89965, 0x3c69b2c0, 0x3ceacedb, 0x3d6beb37,
+ 0x3ded0556, 0x3e6e1aba, 0x3eef28e5, 0x3f702d5a,
+ 0x3ff1259a, 0x40720f28, 0x40f2e788, 0x4173ac3f,
+ 0x41f45ad0, 0x4274f0c1, 0x42f56b99, 0x4375c8df,
+ 0x43f6061d, 0x447620db, 0x44f616a5, 0x4575e508,
+ 0x45f58993, 0x467501d5, 0x46f44b61, 0x477363ca,
+ 0x47f248a6, 0x4870f78d, 0x48ef6e19, 0x496da9e7,
+ 0x49eba896, 0x4a6967c8, 0x4ae6e520, 0x4b641e46,
+ 0x4be110e4, 0x4c5dbaa7, 0x4cda193e, 0x4d562a5e,
+ 0x4dd1ebbd, 0x4e4d5b14, 0x4ec87622, 0x4f433aa8,
+ 0x4fbda66b, 0x5037b734, 0x50b16acf, 0x512abf0d,
+ 0x51a3b1c4, 0x521c40cd, 0x52946a05, 0x530c2b4f,
+ 0x53838292, 0x53fa6db8, 0x5470eab2, 0x54e6f775,
+ 0x555c91fb, 0x55d1b843, 0x56466851, 0x56baa02e,
+ 0x572e5dea, 0x57a19f98, 0x58146352, 0x5886a737,
+ 0x58f8696c, 0x5969a81c, 0x59da6177, 0x5a4a93b4,
+ 0x5aba3d0f, 0x5b295bca, 0x5b97ee2f, 0x5c05f28d,
+ 0x5c736738, 0x5ce04a8c, 0x5d4c9aec, 0x5db856c0,
+ 0x5e237c77, 0x5e8e0a88, 0x5ef7ff6f, 0x5f6159af,
+ 0x5fca17d4, 0x6032386d, 0x6099ba15, 0x61009b69,
+ 0x6166db10, 0x61cc77b9, 0x62317017, 0x6295c2e7,
+ 0x62f96eec, 0x635c72f1, 0x63becdc8, 0x64207e4a,
+ 0x64818359, 0x64e1dbdd, 0x654186c7, 0x65a0830e,
+ 0x65fecfb0, 0x665c6bb7, 0x66b9562f, 0x67158e2f,
+ 0x677112d7, 0x67cbe34a, 0x6825feb8, 0x687f6456,
+ 0x68d81360, 0x69300b1d, 0x69874ad9, 0x69ddd1e9,
+ 0x6a339faa, 0x6a88b381, 0x6add0cda, 0x6b30ab29,
+ 0x6b838deb, 0x6bd5b4a5, 0x6c271ee1, 0x6c77cc35,
+ 0x6cc7bc3c, 0x6d16ee9a, 0x6d6562fa, 0x6db31911,
+ 0x6e001098, 0x6e4c4954, 0x6e97c310, 0x6ee27d9e,
+ 0x6f2c78d8, 0x6f75b4a1, 0x6fbe30e3, 0x7005ed90,
+ 0x704ceaa0, 0x70932815, 0x70d8a5f7, 0x711d6456,
+ 0x7161634a, 0x71a4a2f2, 0x71e72374, 0x7228e4ff,
+ 0x7269e7c7, 0x72aa2c09, 0x72e9b209, 0x73287a11,
+ 0x73668476, 0x73a3d18e, 0x73e061bb, 0x741c3565,
+ 0x74574cf9, 0x7491a8ed, 0x74cb49bd, 0x75042feb,
+ 0x753c5c02, 0x7573ce91, 0x75aa882f, 0x75e08979,
+ 0x7615d312, 0x764a65a6, 0x767e41e4, 0x76b16883,
+ 0x76e3da3f, 0x771597db, 0x7746a220, 0x7776f9dc,
+ 0x77a69fe5, 0x77d59514, 0x7803da48, 0x78317069,
+ 0x785e5861, 0x788a931f, 0x78b6219b, 0x78e104ce,
+ 0x790b3dba, 0x7934cd63, 0x795db4d4, 0x7985f51c,
+ 0x79ad8f4f, 0x79d48485, 0x79fad5dd, 0x7a208477,
+ 0x7a45917a, 0x7a69fe11, 0x7a8dcb6b, 0x7ab0faba,
+ 0x7ad38d35, 0x7af58419, 0x7b16e0a2, 0x7b37a415,
+ 0x7b57cfb7, 0x7b7764d3, 0x7b9664b5, 0x7bb4d0af,
+ 0x7bd2aa13, 0x7beff23a, 0x7c0caa7e, 0x7c28d43b,
+ 0x7c4470d2, 0x7c5f81a4, 0x7c7a0819, 0x7c940597,
+ 0x7cad7b8a, 0x7cc66b5d, 0x7cded67f, 0x7cf6be63,
+ 0x7d0e247a, 0x7d250a3b, 0x7d3b711b, 0x7d515a94,
+ 0x7d66c821, 0x7d7bbb3b, 0x7d903562, 0x7da43813,
+ 0x7db7c4cf, 0x7dcadd15, 0x7ddd8269, 0x7defb64c,
+ 0x7e017a43, 0x7e12cfd2, 0x7e23b87e, 0x7e3435cc,
+ 0x7e444942, 0x7e53f466, 0x7e6338bf, 0x7e7217d4,
+ 0x7e80932a, 0x7e8eac48, 0x7e9c64b6, 0x7ea9bdf7,
+ 0x7eb6b993, 0x7ec3590f, 0x7ecf9dee, 0x7edb89b5,
+ 0x7ee71de8, 0x7ef25c08, 0x7efd4597, 0x7f07dc15,
+ 0x7f122102, 0x7f1c15db, 0x7f25bc1e, 0x7f2f1546,
+ 0x7f3822cc, 0x7f40e62a, 0x7f4960d5, 0x7f519442,
+ 0x7f5981e6, 0x7f612b30, 0x7f689190, 0x7f6fb673,
+ 0x7f769b44, 0x7f7d416b, 0x7f83aa50, 0x7f89d756,
+ 0x7f8fc9de, 0x7f958347, 0x7f9b04ee, 0x7fa0502d,
+ 0x7fa56658, 0x7faa48c6, 0x7faef8c6, 0x7fb377a6,
+ 0x7fb7c6b2, 0x7fbbe731, 0x7fbfda66, 0x7fc3a195,
+ 0x7fc73df9, 0x7fcab0cd, 0x7fcdfb49, 0x7fd11e9f,
+ 0x7fd41bff, 0x7fd6f495, 0x7fd9a988, 0x7fdc3bfe,
+ 0x7fdead16, 0x7fe0fded, 0x7fe32f9c, 0x7fe54336,
+ 0x7fe739cd, 0x7fe9146b, 0x7fead41a, 0x7fec79dc,
+ 0x7fee06b1, 0x7fef7b93, 0x7ff0d97a, 0x7ff22157,
+ 0x7ff35416, 0x7ff472a2, 0x7ff57ddf, 0x7ff676ab,
+ 0x7ff75de2, 0x7ff83459, 0x7ff8fae3, 0x7ff9b24a,
+ 0x7ffa5b57, 0x7ffaf6cc, 0x7ffb8567, 0x7ffc07e1,
+ 0x7ffc7eec, 0x7ffceb37, 0x7ffd4d6c, 0x7ffda630,
+ 0x7ffdf620, 0x7ffe3dd7, 0x7ffe7de9, 0x7ffeb6e6,
+ 0x7ffee958, 0x7fff15c3, 0x7fff3ca8, 0x7fff5e7f,
+ 0x7fff7bbf, 0x7fff94d5, 0x7fffaa2c, 0x7fffbc28,
+ 0x7fffcb28, 0x7fffd785, 0x7fffe194, 0x7fffe9a2,
+ 0x7fffeff9, 0x7ffff4dc, 0x7ffff888, 0x7ffffb36,
+ 0x7ffffd19, 0x7ffffe5c, 0x7fffff28, 0x7fffff9f,
+ 0x7fffffdc, 0x7ffffff6, 0x7ffffffe, 0x7fffffff,
+};
+
+static ogg_int32_t vwin2048[1024]={
+ 0x000007c0, 0x000045c4, 0x0000c1ca, 0x00017bd3,
+ 0x000273de, 0x0003a9eb, 0x00051df9, 0x0006d007,
+ 0x0008c014, 0x000aee1e, 0x000d5a25, 0x00100428,
+ 0x0012ec23, 0x00161216, 0x001975fe, 0x001d17da,
+ 0x0020f7a8, 0x00251564, 0x0029710c, 0x002e0a9e,
+ 0x0032e217, 0x0037f773, 0x003d4ab0, 0x0042dbca,
+ 0x0048aabe, 0x004eb788, 0x00550224, 0x005b8a8f,
+ 0x006250c5, 0x006954c1, 0x0070967e, 0x007815f9,
+ 0x007fd32c, 0x0087ce13, 0x009006a9, 0x00987ce9,
+ 0x00a130cc, 0x00aa224f, 0x00b3516b, 0x00bcbe1a,
+ 0x00c66856, 0x00d0501a, 0x00da755f, 0x00e4d81f,
+ 0x00ef7853, 0x00fa55f4, 0x010570fc, 0x0110c963,
+ 0x011c5f22, 0x01283232, 0x0134428c, 0x01409027,
+ 0x014d1afb, 0x0159e302, 0x0166e831, 0x01742a82,
+ 0x0181a9ec, 0x018f6665, 0x019d5fe5, 0x01ab9663,
+ 0x01ba09d6, 0x01c8ba34, 0x01d7a775, 0x01e6d18d,
+ 0x01f63873, 0x0205dc1e, 0x0215bc82, 0x0225d997,
+ 0x02363350, 0x0246c9a3, 0x02579c86, 0x0268abed,
+ 0x0279f7cc, 0x028b801a, 0x029d44c9, 0x02af45ce,
+ 0x02c1831d, 0x02d3fcaa, 0x02e6b269, 0x02f9a44c,
+ 0x030cd248, 0x03203c4f, 0x0333e255, 0x0347c44b,
+ 0x035be225, 0x03703bd5, 0x0384d14d, 0x0399a280,
+ 0x03aeaf5e, 0x03c3f7d9, 0x03d97be4, 0x03ef3b6e,
+ 0x0405366a, 0x041b6cc8, 0x0431de78, 0x04488b6c,
+ 0x045f7393, 0x047696dd, 0x048df53b, 0x04a58e9b,
+ 0x04bd62ee, 0x04d57223, 0x04edbc28, 0x050640ed,
+ 0x051f0060, 0x0537fa70, 0x05512f0a, 0x056a9e1e,
+ 0x05844798, 0x059e2b67, 0x05b84978, 0x05d2a1b8,
+ 0x05ed3414, 0x06080079, 0x062306d3, 0x063e470f,
+ 0x0659c119, 0x067574dd, 0x06916247, 0x06ad8941,
+ 0x06c9e9b8, 0x06e68397, 0x070356c8, 0x07206336,
+ 0x073da8cb, 0x075b2772, 0x0778df15, 0x0796cf9c,
+ 0x07b4f8f3, 0x07d35b01, 0x07f1f5b1, 0x0810c8eb,
+ 0x082fd497, 0x084f189e, 0x086e94e8, 0x088e495e,
+ 0x08ae35e6, 0x08ce5a68, 0x08eeb6cc, 0x090f4af8,
+ 0x093016d3, 0x09511a43, 0x09725530, 0x0993c77f,
+ 0x09b57115, 0x09d751d8, 0x09f969ae, 0x0a1bb87c,
+ 0x0a3e3e26, 0x0a60fa91, 0x0a83eda2, 0x0aa7173c,
+ 0x0aca7743, 0x0aee0d9b, 0x0b11da28, 0x0b35dccc,
+ 0x0b5a156a, 0x0b7e83e5, 0x0ba3281f, 0x0bc801fa,
+ 0x0bed1158, 0x0c12561c, 0x0c37d025, 0x0c5d7f55,
+ 0x0c83638d, 0x0ca97cae, 0x0ccfca97, 0x0cf64d29,
+ 0x0d1d0444, 0x0d43efc7, 0x0d6b0f92, 0x0d926383,
+ 0x0db9eb79, 0x0de1a752, 0x0e0996ee, 0x0e31ba29,
+ 0x0e5a10e2, 0x0e829af5, 0x0eab5841, 0x0ed448a2,
+ 0x0efd6bf4, 0x0f26c214, 0x0f504ade, 0x0f7a062e,
+ 0x0fa3f3df, 0x0fce13cd, 0x0ff865d2, 0x1022e9ca,
+ 0x104d9f8e, 0x107886f9, 0x10a39fe5, 0x10ceea2c,
+ 0x10fa65a6, 0x1126122d, 0x1151ef9a, 0x117dfdc5,
+ 0x11aa3c86, 0x11d6abb6, 0x12034b2c, 0x12301ac0,
+ 0x125d1a48, 0x128a499b, 0x12b7a891, 0x12e536ff,
+ 0x1312f4bb, 0x1340e19b, 0x136efd75, 0x139d481e,
+ 0x13cbc16a, 0x13fa692f, 0x14293f40, 0x14584371,
+ 0x14877597, 0x14b6d585, 0x14e6630d, 0x15161e04,
+ 0x1546063b, 0x15761b84, 0x15a65db3, 0x15d6cc99,
+ 0x16076806, 0x16382fcd, 0x166923be, 0x169a43ab,
+ 0x16cb8f62, 0x16fd06b5, 0x172ea973, 0x1760776b,
+ 0x1792706d, 0x17c49448, 0x17f6e2cb, 0x18295bc3,
+ 0x185bfeff, 0x188ecc4c, 0x18c1c379, 0x18f4e451,
+ 0x19282ea4, 0x195ba23c, 0x198f3ee6, 0x19c3046e,
+ 0x19f6f2a1, 0x1a2b0949, 0x1a5f4833, 0x1a93af28,
+ 0x1ac83df3, 0x1afcf460, 0x1b31d237, 0x1b66d744,
+ 0x1b9c034e, 0x1bd15621, 0x1c06cf84, 0x1c3c6f40,
+ 0x1c72351e, 0x1ca820e6, 0x1cde3260, 0x1d146953,
+ 0x1d4ac587, 0x1d8146c3, 0x1db7eccd, 0x1deeb76c,
+ 0x1e25a666, 0x1e5cb982, 0x1e93f084, 0x1ecb4b33,
+ 0x1f02c953, 0x1f3a6aa9, 0x1f722efa, 0x1faa160b,
+ 0x1fe21f9e, 0x201a4b78, 0x2052995d, 0x208b0910,
+ 0x20c39a53, 0x20fc4cea, 0x21352097, 0x216e151b,
+ 0x21a72a3a, 0x21e05fb5, 0x2219b54c, 0x22532ac2,
+ 0x228cbfd7, 0x22c6744c, 0x230047e2, 0x233a3a57,
+ 0x23744b6d, 0x23ae7ae3, 0x23e8c878, 0x242333ec,
+ 0x245dbcfc, 0x24986369, 0x24d326f0, 0x250e0750,
+ 0x25490446, 0x25841d90, 0x25bf52ec, 0x25faa416,
+ 0x263610cd, 0x267198cb, 0x26ad3bcf, 0x26e8f994,
+ 0x2724d1d6, 0x2760c450, 0x279cd0c0, 0x27d8f6e0,
+ 0x2815366a, 0x28518f1b, 0x288e00ac, 0x28ca8ad8,
+ 0x29072d5a, 0x2943e7eb, 0x2980ba45, 0x29bda422,
+ 0x29faa53b, 0x2a37bd4a, 0x2a74ec07, 0x2ab2312b,
+ 0x2aef8c6f, 0x2b2cfd8b, 0x2b6a8437, 0x2ba8202b,
+ 0x2be5d120, 0x2c2396cc, 0x2c6170e7, 0x2c9f5f28,
+ 0x2cdd6147, 0x2d1b76f9, 0x2d599ff6, 0x2d97dbf5,
+ 0x2dd62aab, 0x2e148bce, 0x2e52ff15, 0x2e918436,
+ 0x2ed01ae5, 0x2f0ec2d9, 0x2f4d7bc6, 0x2f8c4562,
+ 0x2fcb1f62, 0x300a097a, 0x3049035f, 0x30880cc6,
+ 0x30c72563, 0x31064ce9, 0x3145830e, 0x3184c785,
+ 0x31c41a02, 0x32037a38, 0x3242e7db, 0x3282629f,
+ 0x32c1ea35, 0x33017e52, 0x33411ea9, 0x3380caec,
+ 0x33c082ce, 0x34004601, 0x34401439, 0x347fed27,
+ 0x34bfd07e, 0x34ffbdef, 0x353fb52e, 0x357fb5eb,
+ 0x35bfbfd9, 0x35ffd2aa, 0x363fee0e, 0x368011b8,
+ 0x36c03d5a, 0x370070a4, 0x3740ab47, 0x3780ecf6,
+ 0x37c13561, 0x3801843a, 0x3841d930, 0x388233f6,
+ 0x38c2943c, 0x3902f9b3, 0x3943640c, 0x3983d2f7,
+ 0x39c44626, 0x3a04bd48, 0x3a45380e, 0x3a85b629,
+ 0x3ac63749, 0x3b06bb1f, 0x3b47415b, 0x3b87c9ae,
+ 0x3bc853c7, 0x3c08df57, 0x3c496c0f, 0x3c89f99e,
+ 0x3cca87b5, 0x3d0b1605, 0x3d4ba43d, 0x3d8c320d,
+ 0x3dccbf27, 0x3e0d4b3a, 0x3e4dd5f6, 0x3e8e5f0b,
+ 0x3ecee62b, 0x3f0f6b04, 0x3f4fed48, 0x3f906ca7,
+ 0x3fd0e8d1, 0x40116177, 0x4051d648, 0x409246f5,
+ 0x40d2b32f, 0x41131aa7, 0x41537d0c, 0x4193da0f,
+ 0x41d43162, 0x421482b4, 0x4254cdb6, 0x4295121a,
+ 0x42d54f90, 0x431585c9, 0x4355b476, 0x4395db48,
+ 0x43d5f9f1, 0x44161021, 0x44561d89, 0x449621dd,
+ 0x44d61ccc, 0x45160e08, 0x4555f543, 0x4595d230,
+ 0x45d5a47f, 0x46156be3, 0x4655280e, 0x4694d8b2,
+ 0x46d47d81, 0x4714162f, 0x4753a26d, 0x479321ee,
+ 0x47d29466, 0x4811f987, 0x48515104, 0x48909a90,
+ 0x48cfd5e0, 0x490f02a6, 0x494e2097, 0x498d2f66,
+ 0x49cc2ec7, 0x4a0b1e6e, 0x4a49fe10, 0x4a88cd62,
+ 0x4ac78c17, 0x4b0639e6, 0x4b44d682, 0x4b8361a2,
+ 0x4bc1dafa, 0x4c004240, 0x4c3e972b, 0x4c7cd970,
+ 0x4cbb08c5, 0x4cf924e0, 0x4d372d79, 0x4d752247,
+ 0x4db302ff, 0x4df0cf5a, 0x4e2e870f, 0x4e6c29d5,
+ 0x4ea9b765, 0x4ee72f77, 0x4f2491c3, 0x4f61de02,
+ 0x4f9f13ec, 0x4fdc333b, 0x50193ba8, 0x50562ced,
+ 0x509306c3, 0x50cfc8e5, 0x510c730d, 0x514904f5,
+ 0x51857e59, 0x51c1def4, 0x51fe2681, 0x523a54bc,
+ 0x52766960, 0x52b2642b, 0x52ee44d9, 0x532a0b25,
+ 0x5365b6cf, 0x53a14793, 0x53dcbd2e, 0x5418175f,
+ 0x545355e4, 0x548e787c, 0x54c97ee6, 0x550468e0,
+ 0x553f362b, 0x5579e687, 0x55b479b3, 0x55eeef6f,
+ 0x5629477e, 0x566381a0, 0x569d9d97, 0x56d79b24,
+ 0x57117a09, 0x574b3a0a, 0x5784dae8, 0x57be5c68,
+ 0x57f7be4c, 0x5831005a, 0x586a2254, 0x58a323ff,
+ 0x58dc0521, 0x5914c57f, 0x594d64de, 0x5985e304,
+ 0x59be3fb9, 0x59f67ac3, 0x5a2e93e8, 0x5a668af1,
+ 0x5a9e5fa5, 0x5ad611ce, 0x5b0da132, 0x5b450d9d,
+ 0x5b7c56d6, 0x5bb37ca8, 0x5bea7edd, 0x5c215d41,
+ 0x5c58179d, 0x5c8eadbd, 0x5cc51f6e, 0x5cfb6c7b,
+ 0x5d3194b1, 0x5d6797de, 0x5d9d75ce, 0x5dd32e50,
+ 0x5e08c132, 0x5e3e2e42, 0x5e737551, 0x5ea8962d,
+ 0x5edd90a6, 0x5f12648d, 0x5f4711b3, 0x5f7b97e9,
+ 0x5faff701, 0x5fe42ecd, 0x60183f20, 0x604c27cc,
+ 0x607fe8a5, 0x60b3817f, 0x60e6f22e, 0x611a3a88,
+ 0x614d5a61, 0x6180518f, 0x61b31fe9, 0x61e5c544,
+ 0x62184178, 0x624a945c, 0x627cbdc9, 0x62aebd97,
+ 0x62e0939e, 0x63123fb9, 0x6343c1c0, 0x6375198e,
+ 0x63a646fe, 0x63d749ec, 0x64082231, 0x6438cfac,
+ 0x64695238, 0x6499a9b2, 0x64c9d5f8, 0x64f9d6e9,
+ 0x6529ac62, 0x65595642, 0x6588d469, 0x65b826b7,
+ 0x65e74d0d, 0x6616474a, 0x66451551, 0x6673b703,
+ 0x66a22c43, 0x66d074f3, 0x66fe90f7, 0x672c8032,
+ 0x675a4289, 0x6787d7e1, 0x67b5401e, 0x67e27b26,
+ 0x680f88e0, 0x683c6933, 0x68691c05, 0x6895a13e,
+ 0x68c1f8c6, 0x68ee2286, 0x691a1e67, 0x6945ec53,
+ 0x69718c34, 0x699cfdf4, 0x69c8417e, 0x69f356bf,
+ 0x6a1e3da2, 0x6a48f614, 0x6a738002, 0x6a9ddb59,
+ 0x6ac80807, 0x6af205fc, 0x6b1bd526, 0x6b457574,
+ 0x6b6ee6d7, 0x6b98293f, 0x6bc13c9e, 0x6bea20e4,
+ 0x6c12d604, 0x6c3b5bf0, 0x6c63b29c, 0x6c8bd9fa,
+ 0x6cb3d1ff, 0x6cdb9a9f, 0x6d0333cf, 0x6d2a9d85,
+ 0x6d51d7b6, 0x6d78e25a, 0x6d9fbd66, 0x6dc668d2,
+ 0x6dece497, 0x6e1330ad, 0x6e394d0c, 0x6e5f39ad,
+ 0x6e84f68c, 0x6eaa83a1, 0x6ecfe0e9, 0x6ef50e5d,
+ 0x6f1a0bfb, 0x6f3ed9be, 0x6f6377a3, 0x6f87e5a7,
+ 0x6fac23c9, 0x6fd03205, 0x6ff4105b, 0x7017becb,
+ 0x703b3d53, 0x705e8bf4, 0x7081aaae, 0x70a49983,
+ 0x70c75874, 0x70e9e782, 0x710c46b2, 0x712e7604,
+ 0x7150757e, 0x71724522, 0x7193e4f5, 0x71b554fd,
+ 0x71d6953d, 0x71f7a5bc, 0x72188681, 0x72393791,
+ 0x7259b8f4, 0x727a0ab1, 0x729a2cd1, 0x72ba1f5c,
+ 0x72d9e25b, 0x72f975d7, 0x7318d9da, 0x73380e6f,
+ 0x7357139f, 0x7375e977, 0x73949002, 0x73b3074b,
+ 0x73d14f61, 0x73ef684e, 0x740d5221, 0x742b0ce8,
+ 0x744898b0, 0x7465f588, 0x74832381, 0x74a022a8,
+ 0x74bcf30d, 0x74d994c2, 0x74f607d8, 0x75124c5e,
+ 0x752e6267, 0x754a4a05, 0x7566034a, 0x75818e49,
+ 0x759ceb15, 0x75b819c3, 0x75d31a65, 0x75eded11,
+ 0x760891db, 0x762308d9, 0x763d5220, 0x76576dc7,
+ 0x76715be3, 0x768b1c8b, 0x76a4afd8, 0x76be15df,
+ 0x76d74eba, 0x76f05a81, 0x7709394c, 0x7721eb34,
+ 0x773a7053, 0x7752c8c3, 0x776af49e, 0x7782f3ff,
+ 0x779ac700, 0x77b26dbc, 0x77c9e850, 0x77e136d7,
+ 0x77f8596e, 0x780f5031, 0x78261b3e, 0x783cbab2,
+ 0x78532ea9, 0x78697744, 0x787f949f, 0x789586db,
+ 0x78ab4e14, 0x78c0ea6c, 0x78d65c02, 0x78eba2f6,
+ 0x7900bf67, 0x7915b178, 0x792a7949, 0x793f16fa,
+ 0x79538aae, 0x7967d487, 0x797bf4a7, 0x798feb30,
+ 0x79a3b845, 0x79b75c09, 0x79cad6a0, 0x79de282d,
+ 0x79f150d4, 0x7a0450ba, 0x7a172802, 0x7a29d6d3,
+ 0x7a3c5d4f, 0x7a4ebb9f, 0x7a60f1e5, 0x7a73004a,
+ 0x7a84e6f1, 0x7a96a603, 0x7aa83da6, 0x7ab9ae00,
+ 0x7acaf739, 0x7adc1978, 0x7aed14e5, 0x7afde9a7,
+ 0x7b0e97e7, 0x7b1f1fcc, 0x7b2f8181, 0x7b3fbd2c,
+ 0x7b4fd2f8, 0x7b5fc30e, 0x7b6f8d97, 0x7b7f32bc,
+ 0x7b8eb2a8, 0x7b9e0d84, 0x7bad437c, 0x7bbc54b8,
+ 0x7bcb4165, 0x7bda09ad, 0x7be8adbb, 0x7bf72dbb,
+ 0x7c0589d7, 0x7c13c23c, 0x7c21d715, 0x7c2fc88e,
+ 0x7c3d96d4, 0x7c4b4213, 0x7c58ca77, 0x7c66302c,
+ 0x7c737361, 0x7c809442, 0x7c8d92fb, 0x7c9a6fbb,
+ 0x7ca72aae, 0x7cb3c403, 0x7cc03be7, 0x7ccc9287,
+ 0x7cd8c813, 0x7ce4dcb8, 0x7cf0d0a4, 0x7cfca405,
+ 0x7d08570b, 0x7d13e9e4, 0x7d1f5cbe, 0x7d2aafc9,
+ 0x7d35e334, 0x7d40f72d, 0x7d4bebe3, 0x7d56c187,
+ 0x7d617847, 0x7d6c1053, 0x7d7689da, 0x7d80e50d,
+ 0x7d8b221a, 0x7d954132, 0x7d9f4285, 0x7da92642,
+ 0x7db2ec9a, 0x7dbc95bc, 0x7dc621d9, 0x7dcf9122,
+ 0x7dd8e3c5, 0x7de219f5, 0x7deb33e1, 0x7df431b9,
+ 0x7dfd13ae, 0x7e05d9f1, 0x7e0e84b3, 0x7e171423,
+ 0x7e1f8873, 0x7e27e1d3, 0x7e302074, 0x7e384486,
+ 0x7e404e3b, 0x7e483dc3, 0x7e50134f, 0x7e57cf10,
+ 0x7e5f7137, 0x7e66f9f3, 0x7e6e6978, 0x7e75bff4,
+ 0x7e7cfd99, 0x7e842297, 0x7e8b2f21, 0x7e922365,
+ 0x7e98ff96, 0x7e9fc3e3, 0x7ea6707e, 0x7ead0597,
+ 0x7eb3835f, 0x7eb9ea06, 0x7ec039be, 0x7ec672b6,
+ 0x7ecc9520, 0x7ed2a12b, 0x7ed89709, 0x7ede76e9,
+ 0x7ee440fc, 0x7ee9f572, 0x7eef947c, 0x7ef51e4a,
+ 0x7efa930c, 0x7efff2f1, 0x7f053e2a, 0x7f0a74e7,
+ 0x7f0f9757, 0x7f14a5ab, 0x7f19a012, 0x7f1e86bb,
+ 0x7f2359d7, 0x7f281994, 0x7f2cc622, 0x7f315fb0,
+ 0x7f35e66d, 0x7f3a5a89, 0x7f3ebc32, 0x7f430b97,
+ 0x7f4748e6, 0x7f4b744f, 0x7f4f8e00, 0x7f539628,
+ 0x7f578cf4, 0x7f5b7292, 0x7f5f4731, 0x7f630aff,
+ 0x7f66be2a, 0x7f6a60de, 0x7f6df34a, 0x7f71759a,
+ 0x7f74e7fd, 0x7f784a9f, 0x7f7b9dae, 0x7f7ee155,
+ 0x7f8215c2, 0x7f853b21, 0x7f88519e, 0x7f8b5966,
+ 0x7f8e52a5, 0x7f913d86, 0x7f941a35, 0x7f96e8de,
+ 0x7f99a9ac, 0x7f9c5cca, 0x7f9f0264, 0x7fa19aa4,
+ 0x7fa425b4, 0x7fa6a3c0, 0x7fa914f2, 0x7fab7973,
+ 0x7fadd16e, 0x7fb01d0c, 0x7fb25c77, 0x7fb48fd8,
+ 0x7fb6b759, 0x7fb8d322, 0x7fbae35c, 0x7fbce830,
+ 0x7fbee1c6, 0x7fc0d046, 0x7fc2b3d8, 0x7fc48ca4,
+ 0x7fc65ad2, 0x7fc81e87, 0x7fc9d7ed, 0x7fcb8729,
+ 0x7fcd2c62, 0x7fcec7be, 0x7fd05965, 0x7fd1e17b,
+ 0x7fd36026, 0x7fd4d58c, 0x7fd641d2, 0x7fd7a51d,
+ 0x7fd8ff93, 0x7fda5156, 0x7fdb9a8d, 0x7fdcdb5a,
+ 0x7fde13e1, 0x7fdf4447, 0x7fe06cae, 0x7fe18d3a,
+ 0x7fe2a60d, 0x7fe3b74a, 0x7fe4c113, 0x7fe5c38a,
+ 0x7fe6bed1, 0x7fe7b309, 0x7fe8a054, 0x7fe986d3,
+ 0x7fea66a6, 0x7feb3fef, 0x7fec12cc, 0x7fecdf5e,
+ 0x7feda5c4, 0x7fee661f, 0x7fef208c, 0x7fefd52b,
+ 0x7ff0841b, 0x7ff12d79, 0x7ff1d163, 0x7ff26ff8,
+ 0x7ff30954, 0x7ff39d95, 0x7ff42cd8, 0x7ff4b738,
+ 0x7ff53cd3, 0x7ff5bdc4, 0x7ff63a27, 0x7ff6b216,
+ 0x7ff725ae, 0x7ff79509, 0x7ff80042, 0x7ff86772,
+ 0x7ff8cab3, 0x7ff92a20, 0x7ff985d0, 0x7ff9ddde,
+ 0x7ffa3261, 0x7ffa8373, 0x7ffad12b, 0x7ffb1ba0,
+ 0x7ffb62eb, 0x7ffba722, 0x7ffbe85b, 0x7ffc26af,
+ 0x7ffc6232, 0x7ffc9afa, 0x7ffcd11d, 0x7ffd04b0,
+ 0x7ffd35c8, 0x7ffd647a, 0x7ffd90d9, 0x7ffdbaf9,
+ 0x7ffde2ef, 0x7ffe08cd, 0x7ffe2ca6, 0x7ffe4e8d,
+ 0x7ffe6e94, 0x7ffe8ccd, 0x7ffea949, 0x7ffec41a,
+ 0x7ffedd51, 0x7ffef4fe, 0x7fff0b32, 0x7fff1ffc,
+ 0x7fff336d, 0x7fff4592, 0x7fff567c, 0x7fff6639,
+ 0x7fff74d7, 0x7fff8264, 0x7fff8eed, 0x7fff9a80,
+ 0x7fffa52a, 0x7fffaef7, 0x7fffb7f4, 0x7fffc02c,
+ 0x7fffc7aa, 0x7fffce7b, 0x7fffd4a8, 0x7fffda3d,
+ 0x7fffdf43, 0x7fffe3c5, 0x7fffe7cb, 0x7fffeb5f,
+ 0x7fffee89, 0x7ffff152, 0x7ffff3c3, 0x7ffff5e2,
+ 0x7ffff7b7, 0x7ffff94a, 0x7ffffaa0, 0x7ffffbc0,
+ 0x7ffffcb1, 0x7ffffd77, 0x7ffffe18, 0x7ffffe99,
+ 0x7ffffefe, 0x7fffff4d, 0x7fffff88, 0x7fffffb2,
+ 0x7fffffd1, 0x7fffffe5, 0x7ffffff2, 0x7ffffff9,
+ 0x7ffffffd, 0x7ffffffe, 0x7fffffff, 0x7fffffff,
+};
+
+static ogg_int32_t vwin4096[2048]={
+ 0x000001f0, 0x00001171, 0x00003072, 0x00005ef5,
+ 0x00009cf8, 0x0000ea7c, 0x00014780, 0x0001b405,
+ 0x0002300b, 0x0002bb91, 0x00035698, 0x0004011e,
+ 0x0004bb25, 0x000584ac, 0x00065db3, 0x0007463a,
+ 0x00083e41, 0x000945c7, 0x000a5ccc, 0x000b8350,
+ 0x000cb954, 0x000dfed7, 0x000f53d8, 0x0010b857,
+ 0x00122c55, 0x0013afd1, 0x001542ca, 0x0016e541,
+ 0x00189735, 0x001a58a7, 0x001c2995, 0x001e09ff,
+ 0x001ff9e6, 0x0021f948, 0x00240826, 0x00262680,
+ 0x00285454, 0x002a91a3, 0x002cde6c, 0x002f3aaf,
+ 0x0031a66b, 0x003421a0, 0x0036ac4f, 0x00394675,
+ 0x003bf014, 0x003ea92a, 0x004171b7, 0x004449bb,
+ 0x00473135, 0x004a2824, 0x004d2e8a, 0x00504463,
+ 0x005369b2, 0x00569e74, 0x0059e2aa, 0x005d3652,
+ 0x0060996d, 0x00640bf9, 0x00678df7, 0x006b1f66,
+ 0x006ec045, 0x00727093, 0x00763051, 0x0079ff7d,
+ 0x007dde16, 0x0081cc1d, 0x0085c991, 0x0089d671,
+ 0x008df2bc, 0x00921e71, 0x00965991, 0x009aa41a,
+ 0x009efe0c, 0x00a36766, 0x00a7e028, 0x00ac6850,
+ 0x00b0ffde, 0x00b5a6d1, 0x00ba5d28, 0x00bf22e4,
+ 0x00c3f802, 0x00c8dc83, 0x00cdd065, 0x00d2d3a8,
+ 0x00d7e64a, 0x00dd084c, 0x00e239ac, 0x00e77a69,
+ 0x00ecca83, 0x00f229f9, 0x00f798ca, 0x00fd16f5,
+ 0x0102a479, 0x01084155, 0x010ded89, 0x0113a913,
+ 0x011973f3, 0x011f4e27, 0x012537af, 0x012b308a,
+ 0x013138b7, 0x01375035, 0x013d7702, 0x0143ad1f,
+ 0x0149f289, 0x01504741, 0x0156ab44, 0x015d1e92,
+ 0x0163a12a, 0x016a330b, 0x0170d433, 0x017784a3,
+ 0x017e4458, 0x01851351, 0x018bf18e, 0x0192df0d,
+ 0x0199dbcd, 0x01a0e7cd, 0x01a8030c, 0x01af2d89,
+ 0x01b66743, 0x01bdb038, 0x01c50867, 0x01cc6fd0,
+ 0x01d3e670, 0x01db6c47, 0x01e30153, 0x01eaa593,
+ 0x01f25907, 0x01fa1bac, 0x0201ed81, 0x0209ce86,
+ 0x0211beb8, 0x0219be17, 0x0221cca2, 0x0229ea56,
+ 0x02321733, 0x023a5337, 0x02429e60, 0x024af8af,
+ 0x02536220, 0x025bdab3, 0x02646267, 0x026cf93a,
+ 0x02759f2a, 0x027e5436, 0x0287185d, 0x028feb9d,
+ 0x0298cdf4, 0x02a1bf62, 0x02aabfe5, 0x02b3cf7b,
+ 0x02bcee23, 0x02c61bdb, 0x02cf58a2, 0x02d8a475,
+ 0x02e1ff55, 0x02eb693e, 0x02f4e230, 0x02fe6a29,
+ 0x03080127, 0x0311a729, 0x031b5c2d, 0x03252031,
+ 0x032ef334, 0x0338d534, 0x0342c630, 0x034cc625,
+ 0x0356d512, 0x0360f2f6, 0x036b1fce, 0x03755b99,
+ 0x037fa655, 0x038a0001, 0x0394689a, 0x039ee020,
+ 0x03a9668f, 0x03b3fbe6, 0x03bea024, 0x03c95347,
+ 0x03d4154d, 0x03dee633, 0x03e9c5f9, 0x03f4b49b,
+ 0x03ffb219, 0x040abe71, 0x0415d9a0, 0x042103a5,
+ 0x042c3c7d, 0x04378428, 0x0442daa2, 0x044e3fea,
+ 0x0459b3fd, 0x046536db, 0x0470c880, 0x047c68eb,
+ 0x0488181a, 0x0493d60b, 0x049fa2bc, 0x04ab7e2a,
+ 0x04b76854, 0x04c36137, 0x04cf68d1, 0x04db7f21,
+ 0x04e7a424, 0x04f3d7d8, 0x05001a3b, 0x050c6b4a,
+ 0x0518cb04, 0x05253966, 0x0531b66e, 0x053e421a,
+ 0x054adc68, 0x05578555, 0x05643cdf, 0x05710304,
+ 0x057dd7c1, 0x058abb15, 0x0597acfd, 0x05a4ad76,
+ 0x05b1bc7f, 0x05beda14, 0x05cc0635, 0x05d940dd,
+ 0x05e68a0b, 0x05f3e1bd, 0x060147f0, 0x060ebca1,
+ 0x061c3fcf, 0x0629d176, 0x06377194, 0x06452027,
+ 0x0652dd2c, 0x0660a8a1, 0x066e8284, 0x067c6ad1,
+ 0x068a6186, 0x069866a0, 0x06a67a1e, 0x06b49bfc,
+ 0x06c2cc38, 0x06d10acf, 0x06df57bf, 0x06edb304,
+ 0x06fc1c9d, 0x070a9487, 0x07191abe, 0x0727af40,
+ 0x0736520b, 0x0745031c, 0x0753c270, 0x07629004,
+ 0x07716bd6, 0x078055e2, 0x078f4e26, 0x079e549f,
+ 0x07ad694b, 0x07bc8c26, 0x07cbbd2e, 0x07dafc5f,
+ 0x07ea49b7, 0x07f9a533, 0x08090ed1, 0x0818868c,
+ 0x08280c62, 0x0837a051, 0x08474255, 0x0856f26b,
+ 0x0866b091, 0x08767cc3, 0x088656fe, 0x08963f3f,
+ 0x08a63583, 0x08b639c8, 0x08c64c09, 0x08d66c45,
+ 0x08e69a77, 0x08f6d69d, 0x090720b3, 0x091778b7,
+ 0x0927dea5, 0x0938527a, 0x0948d433, 0x095963cc,
+ 0x096a0143, 0x097aac93, 0x098b65bb, 0x099c2cb6,
+ 0x09ad0182, 0x09bde41a, 0x09ced47c, 0x09dfd2a5,
+ 0x09f0de90, 0x0a01f83b, 0x0a131fa3, 0x0a2454c3,
+ 0x0a359798, 0x0a46e820, 0x0a584656, 0x0a69b237,
+ 0x0a7b2bbf, 0x0a8cb2ec, 0x0a9e47ba, 0x0aafea24,
+ 0x0ac19a28, 0x0ad357c3, 0x0ae522ef, 0x0af6fbab,
+ 0x0b08e1f1, 0x0b1ad5c0, 0x0b2cd712, 0x0b3ee5e5,
+ 0x0b510234, 0x0b632bfd, 0x0b75633b, 0x0b87a7ea,
+ 0x0b99fa08, 0x0bac5990, 0x0bbec67e, 0x0bd140cf,
+ 0x0be3c87e, 0x0bf65d89, 0x0c08ffeb, 0x0c1bafa1,
+ 0x0c2e6ca6, 0x0c4136f6, 0x0c540e8f, 0x0c66f36c,
+ 0x0c79e588, 0x0c8ce4e1, 0x0c9ff172, 0x0cb30b37,
+ 0x0cc6322c, 0x0cd9664d, 0x0ceca797, 0x0cfff605,
+ 0x0d135193, 0x0d26ba3d, 0x0d3a2fff, 0x0d4db2d5,
+ 0x0d6142ba, 0x0d74dfac, 0x0d8889a5, 0x0d9c40a1,
+ 0x0db0049c, 0x0dc3d593, 0x0dd7b380, 0x0deb9e60,
+ 0x0dff962f, 0x0e139ae7, 0x0e27ac85, 0x0e3bcb05,
+ 0x0e4ff662, 0x0e642e98, 0x0e7873a2, 0x0e8cc57d,
+ 0x0ea12423, 0x0eb58f91, 0x0eca07c2, 0x0ede8cb1,
+ 0x0ef31e5b, 0x0f07bcba, 0x0f1c67cb, 0x0f311f88,
+ 0x0f45e3ee, 0x0f5ab4f7, 0x0f6f929f, 0x0f847ce3,
+ 0x0f9973bc, 0x0fae7726, 0x0fc3871e, 0x0fd8a39d,
+ 0x0fedcca1, 0x10030223, 0x1018441f, 0x102d9291,
+ 0x1042ed74, 0x105854c3, 0x106dc879, 0x10834892,
+ 0x1098d508, 0x10ae6dd8, 0x10c412fc, 0x10d9c46f,
+ 0x10ef822d, 0x11054c30, 0x111b2274, 0x113104f4,
+ 0x1146f3ab, 0x115cee95, 0x1172f5ab, 0x118908e9,
+ 0x119f284a, 0x11b553ca, 0x11cb8b62, 0x11e1cf0f,
+ 0x11f81eca, 0x120e7a90, 0x1224e25a, 0x123b5624,
+ 0x1251d5e9, 0x126861a3, 0x127ef94e, 0x12959ce3,
+ 0x12ac4c5e, 0x12c307bb, 0x12d9cef2, 0x12f0a200,
+ 0x130780df, 0x131e6b89, 0x133561fa, 0x134c642c,
+ 0x1363721a, 0x137a8bbe, 0x1391b113, 0x13a8e213,
+ 0x13c01eba, 0x13d76702, 0x13eebae5, 0x14061a5d,
+ 0x141d8567, 0x1434fbfb, 0x144c7e14, 0x14640bad,
+ 0x147ba4c1, 0x14934949, 0x14aaf941, 0x14c2b4a2,
+ 0x14da7b67, 0x14f24d8a, 0x150a2b06, 0x152213d5,
+ 0x153a07f1, 0x15520755, 0x156a11fb, 0x158227dd,
+ 0x159a48f5, 0x15b2753d, 0x15caacb1, 0x15e2ef49,
+ 0x15fb3d01, 0x161395d1, 0x162bf9b6, 0x164468a7,
+ 0x165ce2a1, 0x1675679c, 0x168df793, 0x16a6927f,
+ 0x16bf385c, 0x16d7e922, 0x16f0a4cc, 0x17096b54,
+ 0x17223cb4, 0x173b18e5, 0x1753ffe2, 0x176cf1a5,
+ 0x1785ee27, 0x179ef562, 0x17b80750, 0x17d123eb,
+ 0x17ea4b2d, 0x18037d10, 0x181cb98c, 0x1836009d,
+ 0x184f523c, 0x1868ae62, 0x1882150a, 0x189b862c,
+ 0x18b501c3, 0x18ce87c9, 0x18e81836, 0x1901b305,
+ 0x191b582e, 0x193507ad, 0x194ec17a, 0x1968858e,
+ 0x198253e4, 0x199c2c75, 0x19b60f3a, 0x19cffc2d,
+ 0x19e9f347, 0x1a03f482, 0x1a1dffd7, 0x1a381540,
+ 0x1a5234b5, 0x1a6c5e31, 0x1a8691ac, 0x1aa0cf21,
+ 0x1abb1687, 0x1ad567d9, 0x1aefc310, 0x1b0a2826,
+ 0x1b249712, 0x1b3f0fcf, 0x1b599256, 0x1b741ea0,
+ 0x1b8eb4a7, 0x1ba95462, 0x1bc3fdcc, 0x1bdeb0de,
+ 0x1bf96d90, 0x1c1433dc, 0x1c2f03bc, 0x1c49dd26,
+ 0x1c64c016, 0x1c7fac84, 0x1c9aa269, 0x1cb5a1be,
+ 0x1cd0aa7c, 0x1cebbc9b, 0x1d06d816, 0x1d21fce4,
+ 0x1d3d2aff, 0x1d58625f, 0x1d73a2fe, 0x1d8eecd4,
+ 0x1daa3fda, 0x1dc59c09, 0x1de10159, 0x1dfc6fc4,
+ 0x1e17e742, 0x1e3367cc, 0x1e4ef15b, 0x1e6a83e7,
+ 0x1e861f69, 0x1ea1c3da, 0x1ebd7132, 0x1ed9276b,
+ 0x1ef4e67c, 0x1f10ae5e, 0x1f2c7f0a, 0x1f485878,
+ 0x1f643aa2, 0x1f80257f, 0x1f9c1908, 0x1fb81536,
+ 0x1fd41a00, 0x1ff02760, 0x200c3d4e, 0x20285bc3,
+ 0x204482b6, 0x2060b221, 0x207ce9fb, 0x20992a3d,
+ 0x20b572e0, 0x20d1c3db, 0x20ee1d28, 0x210a7ebd,
+ 0x2126e895, 0x21435aa6, 0x215fd4e9, 0x217c5757,
+ 0x2198e1e7, 0x21b57493, 0x21d20f51, 0x21eeb21a,
+ 0x220b5ce7, 0x22280faf, 0x2244ca6b, 0x22618d13,
+ 0x227e579f, 0x229b2a06, 0x22b80442, 0x22d4e649,
+ 0x22f1d015, 0x230ec19d, 0x232bbad8, 0x2348bbc0,
+ 0x2365c44c, 0x2382d474, 0x239fec30, 0x23bd0b78,
+ 0x23da3243, 0x23f7608b, 0x24149645, 0x2431d36c,
+ 0x244f17f5, 0x246c63d9, 0x2489b711, 0x24a71193,
+ 0x24c47358, 0x24e1dc56, 0x24ff4c87, 0x251cc3e2,
+ 0x253a425e, 0x2557c7f3, 0x25755499, 0x2592e848,
+ 0x25b082f7, 0x25ce249e, 0x25ebcd34, 0x26097cb2,
+ 0x2627330e, 0x2644f040, 0x2662b441, 0x26807f06,
+ 0x269e5089, 0x26bc28c1, 0x26da07a4, 0x26f7ed2b,
+ 0x2715d94d, 0x2733cc02, 0x2751c540, 0x276fc500,
+ 0x278dcb39, 0x27abd7e2, 0x27c9eaf3, 0x27e80463,
+ 0x28062429, 0x28244a3d, 0x28427697, 0x2860a92d,
+ 0x287ee1f6, 0x289d20eb, 0x28bb6602, 0x28d9b133,
+ 0x28f80275, 0x291659bf, 0x2934b709, 0x29531a49,
+ 0x29718377, 0x298ff28b, 0x29ae677a, 0x29cce23d,
+ 0x29eb62cb, 0x2a09e91b, 0x2a287523, 0x2a4706dc,
+ 0x2a659e3b, 0x2a843b39, 0x2aa2ddcc, 0x2ac185ec,
+ 0x2ae0338f, 0x2afee6ac, 0x2b1d9f3b, 0x2b3c5d33,
+ 0x2b5b208a, 0x2b79e938, 0x2b98b734, 0x2bb78a73,
+ 0x2bd662ef, 0x2bf5409d, 0x2c142374, 0x2c330b6b,
+ 0x2c51f87a, 0x2c70ea97, 0x2c8fe1b8, 0x2caeddd6,
+ 0x2ccddee6, 0x2cece4e0, 0x2d0befbb, 0x2d2aff6c,
+ 0x2d4a13ec, 0x2d692d31, 0x2d884b31, 0x2da76de4,
+ 0x2dc69540, 0x2de5c13c, 0x2e04f1cf, 0x2e2426f0,
+ 0x2e436094, 0x2e629eb4, 0x2e81e145, 0x2ea1283f,
+ 0x2ec07398, 0x2edfc346, 0x2eff1741, 0x2f1e6f7f,
+ 0x2f3dcbf7, 0x2f5d2c9f, 0x2f7c916f, 0x2f9bfa5b,
+ 0x2fbb675c, 0x2fdad868, 0x2ffa4d75, 0x3019c67b,
+ 0x3039436f, 0x3058c447, 0x307848fc, 0x3097d183,
+ 0x30b75dd2, 0x30d6ede1, 0x30f681a6, 0x31161917,
+ 0x3135b42a, 0x315552d7, 0x3174f514, 0x31949ad7,
+ 0x31b44417, 0x31d3f0c9, 0x31f3a0e6, 0x32135462,
+ 0x32330b35, 0x3252c554, 0x327282b7, 0x32924353,
+ 0x32b20720, 0x32d1ce13, 0x32f19823, 0x33116546,
+ 0x33313572, 0x3351089f, 0x3370dec1, 0x3390b7d1,
+ 0x33b093c3, 0x33d0728e, 0x33f05429, 0x3410388a,
+ 0x34301fa7, 0x34500976, 0x346ff5ef, 0x348fe506,
+ 0x34afd6b2, 0x34cfcaeb, 0x34efc1a5, 0x350fbad7,
+ 0x352fb677, 0x354fb47c, 0x356fb4dc, 0x358fb78d,
+ 0x35afbc85, 0x35cfc3bb, 0x35efcd25, 0x360fd8b8,
+ 0x362fe66b, 0x364ff635, 0x3670080c, 0x36901be5,
+ 0x36b031b7, 0x36d04978, 0x36f0631e, 0x37107e9f,
+ 0x37309bf2, 0x3750bb0d, 0x3770dbe6, 0x3790fe72,
+ 0x37b122a9, 0x37d14880, 0x37f16fee, 0x381198e8,
+ 0x3831c364, 0x3851ef5a, 0x38721cbe, 0x38924b87,
+ 0x38b27bab, 0x38d2ad21, 0x38f2dfdd, 0x391313d8,
+ 0x39334905, 0x39537f5c, 0x3973b6d3, 0x3993ef60,
+ 0x39b428f8, 0x39d46393, 0x39f49f25, 0x3a14dba5,
+ 0x3a351909, 0x3a555748, 0x3a759657, 0x3a95d62c,
+ 0x3ab616bd, 0x3ad65801, 0x3af699ed, 0x3b16dc78,
+ 0x3b371f97, 0x3b576341, 0x3b77a76b, 0x3b97ec0c,
+ 0x3bb8311a, 0x3bd8768b, 0x3bf8bc54, 0x3c19026c,
+ 0x3c3948c9, 0x3c598f61, 0x3c79d62a, 0x3c9a1d1a,
+ 0x3cba6427, 0x3cdaab47, 0x3cfaf270, 0x3d1b3998,
+ 0x3d3b80b5, 0x3d5bc7be, 0x3d7c0ea7, 0x3d9c5568,
+ 0x3dbc9bf6, 0x3ddce247, 0x3dfd2852, 0x3e1d6e0c,
+ 0x3e3db36b, 0x3e5df866, 0x3e7e3cf2, 0x3e9e8105,
+ 0x3ebec496, 0x3edf079b, 0x3eff4a09, 0x3f1f8bd7,
+ 0x3f3fccfa, 0x3f600d69, 0x3f804d19, 0x3fa08c02,
+ 0x3fc0ca18, 0x3fe10752, 0x400143a6, 0x40217f0a,
+ 0x4041b974, 0x4061f2da, 0x40822b32, 0x40a26272,
+ 0x40c29890, 0x40e2cd83, 0x41030140, 0x412333bd,
+ 0x414364f1, 0x416394d1, 0x4183c354, 0x41a3f070,
+ 0x41c41c1a, 0x41e44649, 0x42046ef4, 0x4224960f,
+ 0x4244bb92, 0x4264df71, 0x428501a5, 0x42a52221,
+ 0x42c540dd, 0x42e55dcf, 0x430578ed, 0x4325922c,
+ 0x4345a984, 0x4365beea, 0x4385d254, 0x43a5e3b9,
+ 0x43c5f30f, 0x43e6004b, 0x44060b64, 0x44261451,
+ 0x44461b06, 0x44661f7b, 0x448621a6, 0x44a6217d,
+ 0x44c61ef5, 0x44e61a06, 0x450612a6, 0x452608ca,
+ 0x4545fc69, 0x4565ed79, 0x4585dbf0, 0x45a5c7c5,
+ 0x45c5b0ee, 0x45e59761, 0x46057b14, 0x46255bfe,
+ 0x46453a14, 0x4665154e, 0x4684eda2, 0x46a4c304,
+ 0x46c4956d, 0x46e464d3, 0x4704312b, 0x4723fa6c,
+ 0x4743c08c, 0x47638382, 0x47834344, 0x47a2ffc8,
+ 0x47c2b905, 0x47e26ef1, 0x48022183, 0x4821d0b0,
+ 0x48417c70, 0x486124b8, 0x4880c980, 0x48a06abd,
+ 0x48c00866, 0x48dfa272, 0x48ff38d6, 0x491ecb8a,
+ 0x493e5a83, 0x495de5b9, 0x497d6d21, 0x499cf0b3,
+ 0x49bc7065, 0x49dbec2d, 0x49fb6402, 0x4a1ad7da,
+ 0x4a3a47ac, 0x4a59b36f, 0x4a791b19, 0x4a987ea1,
+ 0x4ab7ddfd, 0x4ad73923, 0x4af6900c, 0x4b15e2ac,
+ 0x4b3530fc, 0x4b547af1, 0x4b73c082, 0x4b9301a5,
+ 0x4bb23e53, 0x4bd17680, 0x4bf0aa24, 0x4c0fd937,
+ 0x4c2f03ad, 0x4c4e297f, 0x4c6d4aa2, 0x4c8c670e,
+ 0x4cab7eba, 0x4cca919c, 0x4ce99fab, 0x4d08a8de,
+ 0x4d27ad2b, 0x4d46ac8b, 0x4d65a6f2, 0x4d849c59,
+ 0x4da38cb7, 0x4dc27801, 0x4de15e30, 0x4e003f39,
+ 0x4e1f1b15, 0x4e3df1b9, 0x4e5cc31e, 0x4e7b8f39,
+ 0x4e9a5602, 0x4eb91770, 0x4ed7d37a, 0x4ef68a17,
+ 0x4f153b3e, 0x4f33e6e7, 0x4f528d07, 0x4f712d97,
+ 0x4f8fc88d, 0x4fae5de1, 0x4fcced89, 0x4feb777e,
+ 0x5009fbb6, 0x50287a28, 0x5046f2cb, 0x50656597,
+ 0x5083d283, 0x50a23987, 0x50c09a99, 0x50def5b1,
+ 0x50fd4ac6, 0x511b99cf, 0x5139e2c5, 0x5158259d,
+ 0x51766250, 0x519498d6, 0x51b2c924, 0x51d0f333,
+ 0x51ef16fb, 0x520d3472, 0x522b4b91, 0x52495c4e,
+ 0x526766a1, 0x52856a82, 0x52a367e9, 0x52c15ecc,
+ 0x52df4f24, 0x52fd38e7, 0x531b1c0f, 0x5338f892,
+ 0x5356ce68, 0x53749d88, 0x539265eb, 0x53b02788,
+ 0x53cde256, 0x53eb964f, 0x54094368, 0x5426e99b,
+ 0x544488df, 0x5462212b, 0x547fb278, 0x549d3cbd,
+ 0x54babff3, 0x54d83c11, 0x54f5b110, 0x55131ee6,
+ 0x5530858d, 0x554de4fb, 0x556b3d2a, 0x55888e11,
+ 0x55a5d7a8, 0x55c319e7, 0x55e054c6, 0x55fd883e,
+ 0x561ab446, 0x5637d8d7, 0x5654f5e9, 0x56720b74,
+ 0x568f1971, 0x56ac1fd6, 0x56c91e9e, 0x56e615bf,
+ 0x57030533, 0x571fecf1, 0x573cccf2, 0x5759a52f,
+ 0x5776759f, 0x57933e3b, 0x57affefc, 0x57ccb7da,
+ 0x57e968cd, 0x580611ce, 0x5822b2d6, 0x583f4bdc,
+ 0x585bdcda, 0x587865c8, 0x5894e69f, 0x58b15f57,
+ 0x58cdcfe8, 0x58ea384d, 0x5906987d, 0x5922f070,
+ 0x593f4021, 0x595b8787, 0x5977c69b, 0x5993fd56,
+ 0x59b02bb2, 0x59cc51a6, 0x59e86f2b, 0x5a04843c,
+ 0x5a2090cf, 0x5a3c94df, 0x5a589065, 0x5a748358,
+ 0x5a906db3, 0x5aac4f6f, 0x5ac82884, 0x5ae3f8eb,
+ 0x5affc09e, 0x5b1b7f97, 0x5b3735cc, 0x5b52e33a,
+ 0x5b6e87d7, 0x5b8a239e, 0x5ba5b688, 0x5bc1408e,
+ 0x5bdcc1aa, 0x5bf839d4, 0x5c13a906, 0x5c2f0f3a,
+ 0x5c4a6c69, 0x5c65c08c, 0x5c810b9d, 0x5c9c4d96,
+ 0x5cb7866f, 0x5cd2b622, 0x5ceddcaa, 0x5d08f9ff,
+ 0x5d240e1b, 0x5d3f18f7, 0x5d5a1a8e, 0x5d7512d9,
+ 0x5d9001d2, 0x5daae773, 0x5dc5c3b4, 0x5de09691,
+ 0x5dfb6003, 0x5e162003, 0x5e30d68c, 0x5e4b8398,
+ 0x5e662720, 0x5e80c11e, 0x5e9b518d, 0x5eb5d866,
+ 0x5ed055a3, 0x5eeac93f, 0x5f053334, 0x5f1f937b,
+ 0x5f39ea0e, 0x5f5436e9, 0x5f6e7a05, 0x5f88b35c,
+ 0x5fa2e2e9, 0x5fbd08a5, 0x5fd7248c, 0x5ff13697,
+ 0x600b3ec1, 0x60253d04, 0x603f315b, 0x60591bbf,
+ 0x6072fc2d, 0x608cd29d, 0x60a69f0b, 0x60c06171,
+ 0x60da19c9, 0x60f3c80f, 0x610d6c3c, 0x6127064c,
+ 0x61409639, 0x615a1bfe, 0x61739796, 0x618d08fb,
+ 0x61a67028, 0x61bfcd19, 0x61d91fc7, 0x61f2682e,
+ 0x620ba649, 0x6224da12, 0x623e0385, 0x6257229c,
+ 0x62703754, 0x628941a5, 0x62a2418d, 0x62bb3705,
+ 0x62d42209, 0x62ed0295, 0x6305d8a3, 0x631ea42e,
+ 0x63376532, 0x63501baa, 0x6368c792, 0x638168e5,
+ 0x6399ff9d, 0x63b28bb7, 0x63cb0d2f, 0x63e383fe,
+ 0x63fbf021, 0x64145194, 0x642ca852, 0x6444f456,
+ 0x645d359d, 0x64756c21, 0x648d97df, 0x64a5b8d2,
+ 0x64bdcef6, 0x64d5da46, 0x64eddabf, 0x6505d05c,
+ 0x651dbb19, 0x65359af1, 0x654d6fe2, 0x656539e7,
+ 0x657cf8fb, 0x6594ad1a, 0x65ac5642, 0x65c3f46d,
+ 0x65db8798, 0x65f30fc0, 0x660a8cdf, 0x6621fef2,
+ 0x663965f6, 0x6650c1e7, 0x666812c0, 0x667f587f,
+ 0x6696931f, 0x66adc29e, 0x66c4e6f6, 0x66dc0025,
+ 0x66f30e28, 0x670a10fa, 0x67210898, 0x6737f4fe,
+ 0x674ed62a, 0x6765ac18, 0x677c76c4, 0x6793362b,
+ 0x67a9ea4a, 0x67c0931e, 0x67d730a2, 0x67edc2d5,
+ 0x680449b3, 0x681ac538, 0x68313561, 0x68479a2c,
+ 0x685df396, 0x6874419a, 0x688a8437, 0x68a0bb69,
+ 0x68b6e72e, 0x68cd0781, 0x68e31c62, 0x68f925cc,
+ 0x690f23bd, 0x69251632, 0x693afd28, 0x6950d89d,
+ 0x6966a88e, 0x697c6cf8, 0x699225d8, 0x69a7d32c,
+ 0x69bd74f2, 0x69d30b26, 0x69e895c7, 0x69fe14d2,
+ 0x6a138843, 0x6a28f01a, 0x6a3e4c53, 0x6a539ced,
+ 0x6a68e1e4, 0x6a7e1b36, 0x6a9348e2, 0x6aa86ae5,
+ 0x6abd813c, 0x6ad28be7, 0x6ae78ae1, 0x6afc7e2a,
+ 0x6b1165bf, 0x6b26419e, 0x6b3b11c6, 0x6b4fd633,
+ 0x6b648ee5, 0x6b793bd9, 0x6b8ddd0e, 0x6ba27280,
+ 0x6bb6fc30, 0x6bcb7a1a, 0x6bdfec3d, 0x6bf45298,
+ 0x6c08ad28, 0x6c1cfbec, 0x6c313ee3, 0x6c45760a,
+ 0x6c59a160, 0x6c6dc0e3, 0x6c81d492, 0x6c95dc6c,
+ 0x6ca9d86e, 0x6cbdc899, 0x6cd1ace9, 0x6ce5855e,
+ 0x6cf951f6, 0x6d0d12b0, 0x6d20c78b, 0x6d347086,
+ 0x6d480d9f, 0x6d5b9ed5, 0x6d6f2427, 0x6d829d93,
+ 0x6d960b19, 0x6da96cb8, 0x6dbcc26f, 0x6dd00c3c,
+ 0x6de34a1e, 0x6df67c15, 0x6e09a220, 0x6e1cbc3e,
+ 0x6e2fca6d, 0x6e42ccae, 0x6e55c2ff, 0x6e68ad5f,
+ 0x6e7b8bcf, 0x6e8e5e4c, 0x6ea124d7, 0x6eb3df6f,
+ 0x6ec68e13, 0x6ed930c2, 0x6eebc77c, 0x6efe5241,
+ 0x6f10d110, 0x6f2343e9, 0x6f35aaca, 0x6f4805b4,
+ 0x6f5a54a7, 0x6f6c97a1, 0x6f7ecea3, 0x6f90f9ad,
+ 0x6fa318be, 0x6fb52bd5, 0x6fc732f3, 0x6fd92e18,
+ 0x6feb1d43, 0x6ffd0075, 0x700ed7ad, 0x7020a2ea,
+ 0x7032622f, 0x70441579, 0x7055bcc9, 0x70675820,
+ 0x7078e77d, 0x708a6ae1, 0x709be24b, 0x70ad4dbc,
+ 0x70bead35, 0x70d000b4, 0x70e1483c, 0x70f283cb,
+ 0x7103b363, 0x7114d703, 0x7125eeac, 0x7136fa5f,
+ 0x7147fa1c, 0x7158ede3, 0x7169d5b5, 0x717ab192,
+ 0x718b817c, 0x719c4572, 0x71acfd76, 0x71bda987,
+ 0x71ce49a7, 0x71deddd7, 0x71ef6616, 0x71ffe267,
+ 0x721052c9, 0x7220b73d, 0x72310fc5, 0x72415c61,
+ 0x72519d13, 0x7261d1da, 0x7271fab9, 0x728217b0,
+ 0x729228bf, 0x72a22dea, 0x72b2272f, 0x72c21491,
+ 0x72d1f610, 0x72e1cbae, 0x72f1956c, 0x7301534b,
+ 0x7311054c, 0x7320ab71, 0x733045bb, 0x733fd42c,
+ 0x734f56c4, 0x735ecd85, 0x736e3871, 0x737d9789,
+ 0x738ceace, 0x739c3242, 0x73ab6de6, 0x73ba9dbd,
+ 0x73c9c1c8, 0x73d8da07, 0x73e7e67e, 0x73f6e72d,
+ 0x7405dc16, 0x7414c53b, 0x7423a29e, 0x74327441,
+ 0x74413a25, 0x744ff44c, 0x745ea2b8, 0x746d456b,
+ 0x747bdc67, 0x748a67ad, 0x7498e741, 0x74a75b22,
+ 0x74b5c355, 0x74c41fdb, 0x74d270b5, 0x74e0b5e6,
+ 0x74eeef70, 0x74fd1d56, 0x750b3f99, 0x7519563b,
+ 0x7527613f, 0x753560a8, 0x75435476, 0x75513cad,
+ 0x755f1950, 0x756cea5f, 0x757aafde, 0x758869d0,
+ 0x75961836, 0x75a3bb13, 0x75b15269, 0x75bede3b,
+ 0x75cc5e8c, 0x75d9d35e, 0x75e73cb4, 0x75f49a90,
+ 0x7601ecf5, 0x760f33e5, 0x761c6f64, 0x76299f73,
+ 0x7636c416, 0x7643dd50, 0x7650eb23, 0x765ded92,
+ 0x766ae49f, 0x7677d04f, 0x7684b0a3, 0x7691859e,
+ 0x769e4f44, 0x76ab0d97, 0x76b7c09b, 0x76c46851,
+ 0x76d104be, 0x76dd95e5, 0x76ea1bc8, 0x76f6966a,
+ 0x770305cf, 0x770f69fa, 0x771bc2ee, 0x772810ae,
+ 0x7734533d, 0x77408a9f, 0x774cb6d6, 0x7758d7e7,
+ 0x7764edd4, 0x7770f8a1, 0x777cf851, 0x7788ece7,
+ 0x7794d667, 0x77a0b4d4, 0x77ac8832, 0x77b85084,
+ 0x77c40dcd, 0x77cfc012, 0x77db6755, 0x77e7039a,
+ 0x77f294e5, 0x77fe1b3a, 0x7809969b, 0x7815070d,
+ 0x78206c92, 0x782bc730, 0x783716e9, 0x78425bc2,
+ 0x784d95bd, 0x7858c4e0, 0x7863e92c, 0x786f02a8,
+ 0x787a1155, 0x78851538, 0x78900e55, 0x789afcb0,
+ 0x78a5e04c, 0x78b0b92e, 0x78bb875a, 0x78c64ad3,
+ 0x78d1039d, 0x78dbb1bd, 0x78e65536, 0x78f0ee0d,
+ 0x78fb7c45, 0x7905ffe3, 0x791078eb, 0x791ae761,
+ 0x79254b49, 0x792fa4a7, 0x7939f37f, 0x794437d6,
+ 0x794e71af, 0x7958a110, 0x7962c5fc, 0x796ce077,
+ 0x7976f087, 0x7980f62e, 0x798af172, 0x7994e257,
+ 0x799ec8e1, 0x79a8a514, 0x79b276f6, 0x79bc3e8a,
+ 0x79c5fbd5, 0x79cfaedb, 0x79d957a1, 0x79e2f62b,
+ 0x79ec8a7e, 0x79f6149e, 0x79ff9491, 0x7a090a59,
+ 0x7a1275fd, 0x7a1bd780, 0x7a252ee8, 0x7a2e7c38,
+ 0x7a37bf76, 0x7a40f8a6, 0x7a4a27cd, 0x7a534cf0,
+ 0x7a5c6812, 0x7a65793a, 0x7a6e806c, 0x7a777dac,
+ 0x7a8070ff, 0x7a895a6a, 0x7a9239f3, 0x7a9b0f9d,
+ 0x7aa3db6e, 0x7aac9d6a, 0x7ab55596, 0x7abe03f8,
+ 0x7ac6a894, 0x7acf436f, 0x7ad7d48e, 0x7ae05bf5,
+ 0x7ae8d9ab, 0x7af14db4, 0x7af9b814, 0x7b0218d1,
+ 0x7b0a6ff1, 0x7b12bd77, 0x7b1b0169, 0x7b233bcd,
+ 0x7b2b6ca6, 0x7b3393fb, 0x7b3bb1d0, 0x7b43c62b,
+ 0x7b4bd110, 0x7b53d285, 0x7b5bca8f, 0x7b63b934,
+ 0x7b6b9e77, 0x7b737a60, 0x7b7b4cf2, 0x7b831633,
+ 0x7b8ad628, 0x7b928cd7, 0x7b9a3a44, 0x7ba1de76,
+ 0x7ba97971, 0x7bb10b3b, 0x7bb893d8, 0x7bc0134f,
+ 0x7bc789a5, 0x7bcef6df, 0x7bd65b02, 0x7bddb615,
+ 0x7be5081b, 0x7bec511b, 0x7bf3911a, 0x7bfac81e,
+ 0x7c01f62b, 0x7c091b48, 0x7c10377a, 0x7c174ac6,
+ 0x7c1e5531, 0x7c2556c3, 0x7c2c4f7f, 0x7c333f6b,
+ 0x7c3a268d, 0x7c4104eb, 0x7c47da89, 0x7c4ea76e,
+ 0x7c556ba0, 0x7c5c2723, 0x7c62d9fd, 0x7c698434,
+ 0x7c7025ce, 0x7c76becf, 0x7c7d4f3f, 0x7c83d722,
+ 0x7c8a567e, 0x7c90cd59, 0x7c973bb8, 0x7c9da1a1,
+ 0x7ca3ff1a, 0x7caa5429, 0x7cb0a0d2, 0x7cb6e51d,
+ 0x7cbd210e, 0x7cc354ab, 0x7cc97ffb, 0x7ccfa303,
+ 0x7cd5bdc8, 0x7cdbd050, 0x7ce1daa2, 0x7ce7dcc2,
+ 0x7cedd6b7, 0x7cf3c887, 0x7cf9b237, 0x7cff93ce,
+ 0x7d056d50, 0x7d0b3ec4, 0x7d11082f, 0x7d16c999,
+ 0x7d1c8305, 0x7d22347b, 0x7d27ddff, 0x7d2d7f99,
+ 0x7d33194e, 0x7d38ab23, 0x7d3e351e, 0x7d43b747,
+ 0x7d4931a1, 0x7d4ea434, 0x7d540f05, 0x7d59721a,
+ 0x7d5ecd7a, 0x7d642129, 0x7d696d2e, 0x7d6eb18f,
+ 0x7d73ee52, 0x7d79237d, 0x7d7e5116, 0x7d837722,
+ 0x7d8895a8, 0x7d8dacad, 0x7d92bc39, 0x7d97c450,
+ 0x7d9cc4f8, 0x7da1be38, 0x7da6b016, 0x7dab9a98,
+ 0x7db07dc3, 0x7db5599d, 0x7dba2e2e, 0x7dbefb7a,
+ 0x7dc3c188, 0x7dc8805d, 0x7dcd3801, 0x7dd1e878,
+ 0x7dd691c9, 0x7ddb33fa, 0x7ddfcf11, 0x7de46314,
+ 0x7de8f009, 0x7ded75f7, 0x7df1f4e2, 0x7df66cd2,
+ 0x7dfaddcc, 0x7dff47d6, 0x7e03aaf7, 0x7e080734,
+ 0x7e0c5c94, 0x7e10ab1d, 0x7e14f2d4, 0x7e1933c0,
+ 0x7e1d6de7, 0x7e21a14f, 0x7e25cdfe, 0x7e29f3fb,
+ 0x7e2e134b, 0x7e322bf4, 0x7e363dfc, 0x7e3a496a,
+ 0x7e3e4e44, 0x7e424c8f, 0x7e464453, 0x7e4a3594,
+ 0x7e4e2059, 0x7e5204a9, 0x7e55e288, 0x7e59b9fe,
+ 0x7e5d8b11, 0x7e6155c6, 0x7e651a23, 0x7e68d830,
+ 0x7e6c8ff1, 0x7e70416d, 0x7e73ecab, 0x7e7791af,
+ 0x7e7b3081, 0x7e7ec926, 0x7e825ba5, 0x7e85e803,
+ 0x7e896e47, 0x7e8cee76, 0x7e906898, 0x7e93dcb1,
+ 0x7e974ac9, 0x7e9ab2e4, 0x7e9e150a, 0x7ea17140,
+ 0x7ea4c78d, 0x7ea817f6, 0x7eab6282, 0x7eaea736,
+ 0x7eb1e619, 0x7eb51f32, 0x7eb85284, 0x7ebb8018,
+ 0x7ebea7f3, 0x7ec1ca1c, 0x7ec4e697, 0x7ec7fd6c,
+ 0x7ecb0ea0, 0x7ece1a39, 0x7ed1203e, 0x7ed420b5,
+ 0x7ed71ba3, 0x7eda110e, 0x7edd00fe, 0x7edfeb77,
+ 0x7ee2d080, 0x7ee5b01e, 0x7ee88a59, 0x7eeb5f35,
+ 0x7eee2eb9, 0x7ef0f8ec, 0x7ef3bdd2, 0x7ef67d72,
+ 0x7ef937d2, 0x7efbecf8, 0x7efe9cea, 0x7f0147ad,
+ 0x7f03ed49, 0x7f068dc3, 0x7f092921, 0x7f0bbf68,
+ 0x7f0e50a0, 0x7f10dccd, 0x7f1363f6, 0x7f15e621,
+ 0x7f186354, 0x7f1adb94, 0x7f1d4ee8, 0x7f1fbd56,
+ 0x7f2226e3, 0x7f248b95, 0x7f26eb73, 0x7f294682,
+ 0x7f2b9cc8, 0x7f2dee4c, 0x7f303b12, 0x7f328321,
+ 0x7f34c67f, 0x7f370532, 0x7f393f3f, 0x7f3b74ac,
+ 0x7f3da580, 0x7f3fd1c0, 0x7f41f971, 0x7f441c9b,
+ 0x7f463b42, 0x7f48556c, 0x7f4a6b20, 0x7f4c7c63,
+ 0x7f4e893b, 0x7f5091ad, 0x7f5295c0, 0x7f549579,
+ 0x7f5690df, 0x7f5887f6, 0x7f5a7ac4, 0x7f5c6950,
+ 0x7f5e539f, 0x7f6039b7, 0x7f621b9d, 0x7f63f957,
+ 0x7f65d2ec, 0x7f67a860, 0x7f6979b9, 0x7f6b46fe,
+ 0x7f6d1033, 0x7f6ed55f, 0x7f709686, 0x7f7253b0,
+ 0x7f740ce0, 0x7f75c21e, 0x7f77736f, 0x7f7920d7,
+ 0x7f7aca5e, 0x7f7c7007, 0x7f7e11da, 0x7f7fafdc,
+ 0x7f814a12, 0x7f82e081, 0x7f847330, 0x7f860223,
+ 0x7f878d61, 0x7f8914ef, 0x7f8a98d3, 0x7f8c1911,
+ 0x7f8d95af, 0x7f8f0eb4, 0x7f908424, 0x7f91f604,
+ 0x7f93645b, 0x7f94cf2e, 0x7f963682, 0x7f979a5c,
+ 0x7f98fac3, 0x7f9a57ba, 0x7f9bb149, 0x7f9d0774,
+ 0x7f9e5a40, 0x7f9fa9b3, 0x7fa0f5d2, 0x7fa23ea3,
+ 0x7fa3842a, 0x7fa4c66e, 0x7fa60574, 0x7fa74140,
+ 0x7fa879d8, 0x7fa9af41, 0x7faae181, 0x7fac109d,
+ 0x7fad3c99, 0x7fae657c, 0x7faf8b4b, 0x7fb0ae0a,
+ 0x7fb1cdbf, 0x7fb2ea6f, 0x7fb4041f, 0x7fb51ad4,
+ 0x7fb62e94, 0x7fb73f63, 0x7fb84d47, 0x7fb95845,
+ 0x7fba6061, 0x7fbb65a1, 0x7fbc680b, 0x7fbd67a2,
+ 0x7fbe646c, 0x7fbf5e6f, 0x7fc055ae, 0x7fc14a30,
+ 0x7fc23bf8, 0x7fc32b0c, 0x7fc41772, 0x7fc5012d,
+ 0x7fc5e843, 0x7fc6ccb9, 0x7fc7ae93, 0x7fc88dd7,
+ 0x7fc96a89, 0x7fca44ae, 0x7fcb1c4b, 0x7fcbf166,
+ 0x7fccc402, 0x7fcd9424, 0x7fce61d2, 0x7fcf2d10,
+ 0x7fcff5e2, 0x7fd0bc4e, 0x7fd18059, 0x7fd24206,
+ 0x7fd3015b, 0x7fd3be5c, 0x7fd4790f, 0x7fd53177,
+ 0x7fd5e79a, 0x7fd69b7b, 0x7fd74d20, 0x7fd7fc8d,
+ 0x7fd8a9c7, 0x7fd954d3, 0x7fd9fdb4, 0x7fdaa470,
+ 0x7fdb490a, 0x7fdbeb88, 0x7fdc8bee, 0x7fdd2a41,
+ 0x7fddc684, 0x7fde60bd, 0x7fdef8ef, 0x7fdf8f1f,
+ 0x7fe02352, 0x7fe0b58c, 0x7fe145d2, 0x7fe1d427,
+ 0x7fe26090, 0x7fe2eb11, 0x7fe373af, 0x7fe3fa6e,
+ 0x7fe47f52, 0x7fe5025f, 0x7fe5839a, 0x7fe60307,
+ 0x7fe680aa, 0x7fe6fc87, 0x7fe776a3, 0x7fe7ef01,
+ 0x7fe865a6, 0x7fe8da96, 0x7fe94dd5, 0x7fe9bf67,
+ 0x7fea2f50, 0x7fea9d94, 0x7feb0a38, 0x7feb753f,
+ 0x7febdead, 0x7fec4686, 0x7fecacce, 0x7fed118a,
+ 0x7fed74bd, 0x7fedd66b, 0x7fee3697, 0x7fee9547,
+ 0x7feef27d, 0x7fef4e3e, 0x7fefa88d, 0x7ff0016e,
+ 0x7ff058e6, 0x7ff0aef7, 0x7ff103a5, 0x7ff156f5,
+ 0x7ff1a8ea, 0x7ff1f987, 0x7ff248d1, 0x7ff296cb,
+ 0x7ff2e379, 0x7ff32ede, 0x7ff378fe, 0x7ff3c1dd,
+ 0x7ff4097d, 0x7ff44fe4, 0x7ff49514, 0x7ff4d910,
+ 0x7ff51bdd, 0x7ff55d7e, 0x7ff59df6, 0x7ff5dd49,
+ 0x7ff61b7a, 0x7ff6588c, 0x7ff69484, 0x7ff6cf64,
+ 0x7ff7092f, 0x7ff741ea, 0x7ff77997, 0x7ff7b03a,
+ 0x7ff7e5d6, 0x7ff81a6e, 0x7ff84e05, 0x7ff880a0,
+ 0x7ff8b240, 0x7ff8e2e9, 0x7ff9129f, 0x7ff94164,
+ 0x7ff96f3c, 0x7ff99c2a, 0x7ff9c830, 0x7ff9f353,
+ 0x7ffa1d94, 0x7ffa46f8, 0x7ffa6f80, 0x7ffa9730,
+ 0x7ffabe0c, 0x7ffae415, 0x7ffb0950, 0x7ffb2dbe,
+ 0x7ffb5163, 0x7ffb7441, 0x7ffb965c, 0x7ffbb7b7,
+ 0x7ffbd853, 0x7ffbf835, 0x7ffc175e, 0x7ffc35d2,
+ 0x7ffc5393, 0x7ffc70a4, 0x7ffc8d08, 0x7ffca8c1,
+ 0x7ffcc3d3, 0x7ffcde3e, 0x7ffcf808, 0x7ffd1131,
+ 0x7ffd29bd, 0x7ffd41ad, 0x7ffd5906, 0x7ffd6fc8,
+ 0x7ffd85f8, 0x7ffd9b96, 0x7ffdb0a6, 0x7ffdc52a,
+ 0x7ffdd925, 0x7ffdec98, 0x7ffdff87, 0x7ffe11f3,
+ 0x7ffe23df, 0x7ffe354e, 0x7ffe4641, 0x7ffe56bb,
+ 0x7ffe66be, 0x7ffe764d, 0x7ffe8569, 0x7ffe9415,
+ 0x7ffea253, 0x7ffeb025, 0x7ffebd8d, 0x7ffeca8e,
+ 0x7ffed729, 0x7ffee361, 0x7ffeef37, 0x7ffefaae,
+ 0x7fff05c8, 0x7fff1086, 0x7fff1aeb, 0x7fff24f8,
+ 0x7fff2eb0, 0x7fff3815, 0x7fff4127, 0x7fff49ea,
+ 0x7fff525f, 0x7fff5a87, 0x7fff6265, 0x7fff69fb,
+ 0x7fff714a, 0x7fff7853, 0x7fff7f19, 0x7fff859e,
+ 0x7fff8be2, 0x7fff91e9, 0x7fff97b2, 0x7fff9d40,
+ 0x7fffa295, 0x7fffa7b2, 0x7fffac98, 0x7fffb14a,
+ 0x7fffb5c8, 0x7fffba14, 0x7fffbe30, 0x7fffc21c,
+ 0x7fffc5db, 0x7fffc96e, 0x7fffccd7, 0x7fffd015,
+ 0x7fffd32c, 0x7fffd61b, 0x7fffd8e6, 0x7fffdb8c,
+ 0x7fffde0e, 0x7fffe070, 0x7fffe2b0, 0x7fffe4d1,
+ 0x7fffe6d4, 0x7fffe8ba, 0x7fffea84, 0x7fffec33,
+ 0x7fffedc8, 0x7fffef44, 0x7ffff0a9, 0x7ffff1f6,
+ 0x7ffff32f, 0x7ffff452, 0x7ffff561, 0x7ffff65e,
+ 0x7ffff748, 0x7ffff822, 0x7ffff8eb, 0x7ffff9a5,
+ 0x7ffffa50, 0x7ffffaed, 0x7ffffb7d, 0x7ffffc01,
+ 0x7ffffc79, 0x7ffffce6, 0x7ffffd49, 0x7ffffda2,
+ 0x7ffffdf3, 0x7ffffe3b, 0x7ffffe7b, 0x7ffffeb5,
+ 0x7ffffee7, 0x7fffff14, 0x7fffff3b, 0x7fffff5d,
+ 0x7fffff7a, 0x7fffff94, 0x7fffffa9, 0x7fffffbb,
+ 0x7fffffca, 0x7fffffd6, 0x7fffffe1, 0x7fffffe9,
+ 0x7fffffef, 0x7ffffff4, 0x7ffffff8, 0x7ffffffa,
+ 0x7ffffffc, 0x7ffffffd, 0x7ffffffe, 0x7fffffff,
+ 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+};
+
+static ogg_int32_t vwin8192[4096]={
+ 0x0000007c, 0x0000045c, 0x00000c1d, 0x000017bd,
+ 0x0000273e, 0x00003a9f, 0x000051e0, 0x00006d02,
+ 0x00008c03, 0x0000aee5, 0x0000d5a7, 0x00010049,
+ 0x00012ecb, 0x0001612d, 0x00019770, 0x0001d193,
+ 0x00020f96, 0x00025178, 0x0002973c, 0x0002e0df,
+ 0x00032e62, 0x00037fc5, 0x0003d509, 0x00042e2c,
+ 0x00048b30, 0x0004ec13, 0x000550d7, 0x0005b97a,
+ 0x000625fe, 0x00069661, 0x00070aa4, 0x000782c8,
+ 0x0007fecb, 0x00087eae, 0x00090271, 0x00098a14,
+ 0x000a1597, 0x000aa4f9, 0x000b383b, 0x000bcf5d,
+ 0x000c6a5f, 0x000d0941, 0x000dac02, 0x000e52a3,
+ 0x000efd23, 0x000fab84, 0x00105dc3, 0x001113e3,
+ 0x0011cde2, 0x00128bc0, 0x00134d7e, 0x0014131b,
+ 0x0014dc98, 0x0015a9f4, 0x00167b30, 0x0017504a,
+ 0x00182945, 0x0019061e, 0x0019e6d7, 0x001acb6f,
+ 0x001bb3e6, 0x001ca03c, 0x001d9071, 0x001e8485,
+ 0x001f7c79, 0x0020784b, 0x002177fc, 0x00227b8c,
+ 0x002382fb, 0x00248e49, 0x00259d76, 0x0026b081,
+ 0x0027c76b, 0x0028e234, 0x002a00dc, 0x002b2361,
+ 0x002c49c6, 0x002d7409, 0x002ea22a, 0x002fd42a,
+ 0x00310a08, 0x003243c5, 0x00338160, 0x0034c2d9,
+ 0x00360830, 0x00375165, 0x00389e78, 0x0039ef6a,
+ 0x003b4439, 0x003c9ce6, 0x003df971, 0x003f59da,
+ 0x0040be20, 0x00422645, 0x00439247, 0x00450226,
+ 0x004675e3, 0x0047ed7e, 0x004968f5, 0x004ae84b,
+ 0x004c6b7d, 0x004df28d, 0x004f7d7a, 0x00510c44,
+ 0x00529eeb, 0x00543570, 0x0055cfd1, 0x00576e0f,
+ 0x00591029, 0x005ab621, 0x005c5ff5, 0x005e0da6,
+ 0x005fbf33, 0x0061749d, 0x00632de4, 0x0064eb06,
+ 0x0066ac05, 0x006870e0, 0x006a3998, 0x006c062b,
+ 0x006dd69b, 0x006faae6, 0x0071830d, 0x00735f10,
+ 0x00753eef, 0x007722a9, 0x00790a3f, 0x007af5b1,
+ 0x007ce4fe, 0x007ed826, 0x0080cf29, 0x0082ca08,
+ 0x0084c8c2, 0x0086cb57, 0x0088d1c7, 0x008adc11,
+ 0x008cea37, 0x008efc37, 0x00911212, 0x00932bc7,
+ 0x00954957, 0x00976ac2, 0x00999006, 0x009bb925,
+ 0x009de61e, 0x00a016f1, 0x00a24b9e, 0x00a48425,
+ 0x00a6c086, 0x00a900c0, 0x00ab44d4, 0x00ad8cc2,
+ 0x00afd889, 0x00b22829, 0x00b47ba2, 0x00b6d2f5,
+ 0x00b92e21, 0x00bb8d26, 0x00bdf004, 0x00c056ba,
+ 0x00c2c149, 0x00c52fb1, 0x00c7a1f1, 0x00ca180a,
+ 0x00cc91fb, 0x00cf0fc5, 0x00d19166, 0x00d416df,
+ 0x00d6a031, 0x00d92d5a, 0x00dbbe5b, 0x00de5333,
+ 0x00e0ebe3, 0x00e3886b, 0x00e628c9, 0x00e8ccff,
+ 0x00eb750c, 0x00ee20f0, 0x00f0d0ab, 0x00f3843d,
+ 0x00f63ba5, 0x00f8f6e4, 0x00fbb5fa, 0x00fe78e5,
+ 0x01013fa7, 0x01040a3f, 0x0106d8ae, 0x0109aaf2,
+ 0x010c810c, 0x010f5afb, 0x011238c0, 0x01151a5b,
+ 0x0117ffcb, 0x011ae910, 0x011dd62a, 0x0120c719,
+ 0x0123bbdd, 0x0126b476, 0x0129b0e4, 0x012cb126,
+ 0x012fb53c, 0x0132bd27, 0x0135c8e6, 0x0138d879,
+ 0x013bebdf, 0x013f031a, 0x01421e28, 0x01453d0a,
+ 0x01485fbf, 0x014b8648, 0x014eb0a4, 0x0151ded2,
+ 0x015510d4, 0x015846a8, 0x015b8050, 0x015ebdc9,
+ 0x0161ff15, 0x01654434, 0x01688d24, 0x016bd9e6,
+ 0x016f2a7b, 0x01727ee1, 0x0175d718, 0x01793321,
+ 0x017c92fc, 0x017ff6a7, 0x01835e24, 0x0186c972,
+ 0x018a3890, 0x018dab7f, 0x0191223f, 0x01949ccf,
+ 0x01981b2f, 0x019b9d5f, 0x019f235f, 0x01a2ad2f,
+ 0x01a63acf, 0x01a9cc3e, 0x01ad617c, 0x01b0fa8a,
+ 0x01b49767, 0x01b83813, 0x01bbdc8d, 0x01bf84d6,
+ 0x01c330ee, 0x01c6e0d4, 0x01ca9488, 0x01ce4c0b,
+ 0x01d2075b, 0x01d5c679, 0x01d98964, 0x01dd501d,
+ 0x01e11aa3, 0x01e4e8f6, 0x01e8bb17, 0x01ec9104,
+ 0x01f06abd, 0x01f44844, 0x01f82996, 0x01fc0eb5,
+ 0x01fff7a0, 0x0203e456, 0x0207d4d9, 0x020bc926,
+ 0x020fc140, 0x0213bd24, 0x0217bcd4, 0x021bc04e,
+ 0x021fc793, 0x0223d2a3, 0x0227e17d, 0x022bf421,
+ 0x02300a90, 0x023424c8, 0x023842ca, 0x023c6495,
+ 0x02408a2a, 0x0244b389, 0x0248e0b0, 0x024d11a0,
+ 0x02514659, 0x02557eda, 0x0259bb24, 0x025dfb35,
+ 0x02623f0f, 0x026686b1, 0x026ad21a, 0x026f214b,
+ 0x02737443, 0x0277cb02, 0x027c2588, 0x028083d5,
+ 0x0284e5e9, 0x02894bc2, 0x028db562, 0x029222c8,
+ 0x029693f4, 0x029b08e6, 0x029f819d, 0x02a3fe19,
+ 0x02a87e5b, 0x02ad0261, 0x02b18a2c, 0x02b615bb,
+ 0x02baa50f, 0x02bf3827, 0x02c3cf03, 0x02c869a3,
+ 0x02cd0807, 0x02d1aa2d, 0x02d65017, 0x02daf9c4,
+ 0x02dfa734, 0x02e45866, 0x02e90d5b, 0x02edc612,
+ 0x02f2828b, 0x02f742c6, 0x02fc06c2, 0x0300ce80,
+ 0x030599ff, 0x030a6940, 0x030f3c40, 0x03141302,
+ 0x0318ed84, 0x031dcbc6, 0x0322adc8, 0x0327938a,
+ 0x032c7d0c, 0x03316a4c, 0x03365b4c, 0x033b500c,
+ 0x03404889, 0x034544c6, 0x034a44c0, 0x034f4879,
+ 0x03544ff0, 0x03595b24, 0x035e6a16, 0x03637cc5,
+ 0x03689331, 0x036dad5a, 0x0372cb40, 0x0377ece2,
+ 0x037d1240, 0x03823b5a, 0x03876830, 0x038c98c1,
+ 0x0391cd0e, 0x03970516, 0x039c40d8, 0x03a18055,
+ 0x03a6c38d, 0x03ac0a7f, 0x03b1552b, 0x03b6a390,
+ 0x03bbf5af, 0x03c14b88, 0x03c6a519, 0x03cc0263,
+ 0x03d16366, 0x03d6c821, 0x03dc3094, 0x03e19cc0,
+ 0x03e70ca2, 0x03ec803d, 0x03f1f78e, 0x03f77296,
+ 0x03fcf155, 0x040273cb, 0x0407f9f7, 0x040d83d9,
+ 0x04131170, 0x0418a2bd, 0x041e37c0, 0x0423d077,
+ 0x04296ce4, 0x042f0d04, 0x0434b0da, 0x043a5863,
+ 0x044003a0, 0x0445b290, 0x044b6534, 0x04511b8b,
+ 0x0456d595, 0x045c9352, 0x046254c1, 0x046819e1,
+ 0x046de2b4, 0x0473af38, 0x04797f6e, 0x047f5355,
+ 0x04852aec, 0x048b0635, 0x0490e52d, 0x0496c7d5,
+ 0x049cae2e, 0x04a29836, 0x04a885ed, 0x04ae7753,
+ 0x04b46c68, 0x04ba652b, 0x04c0619d, 0x04c661bc,
+ 0x04cc658a, 0x04d26d04, 0x04d8782c, 0x04de8701,
+ 0x04e49983, 0x04eaafb0, 0x04f0c98a, 0x04f6e710,
+ 0x04fd0842, 0x05032d1e, 0x050955a6, 0x050f81d8,
+ 0x0515b1b5, 0x051be53d, 0x05221c6e, 0x05285748,
+ 0x052e95cc, 0x0534d7fa, 0x053b1dd0, 0x0541674e,
+ 0x0547b475, 0x054e0544, 0x055459bb, 0x055ab1d8,
+ 0x05610d9e, 0x05676d0a, 0x056dd01c, 0x057436d5,
+ 0x057aa134, 0x05810f38, 0x058780e2, 0x058df631,
+ 0x05946f25, 0x059aebbe, 0x05a16bfa, 0x05a7efdb,
+ 0x05ae775f, 0x05b50287, 0x05bb9152, 0x05c223c0,
+ 0x05c8b9d0, 0x05cf5382, 0x05d5f0d6, 0x05dc91cc,
+ 0x05e33663, 0x05e9de9c, 0x05f08a74, 0x05f739ee,
+ 0x05fded07, 0x0604a3c0, 0x060b5e19, 0x06121c11,
+ 0x0618dda8, 0x061fa2dd, 0x06266bb1, 0x062d3822,
+ 0x06340831, 0x063adbde, 0x0641b327, 0x06488e0e,
+ 0x064f6c90, 0x06564eaf, 0x065d346a, 0x06641dc0,
+ 0x066b0ab1, 0x0671fb3d, 0x0678ef64, 0x067fe724,
+ 0x0686e27f, 0x068de173, 0x0694e400, 0x069bea27,
+ 0x06a2f3e6, 0x06aa013d, 0x06b1122c, 0x06b826b3,
+ 0x06bf3ed1, 0x06c65a85, 0x06cd79d1, 0x06d49cb3,
+ 0x06dbc32b, 0x06e2ed38, 0x06ea1adb, 0x06f14c13,
+ 0x06f880df, 0x06ffb940, 0x0706f535, 0x070e34bd,
+ 0x071577d9, 0x071cbe88, 0x072408c9, 0x072b569c,
+ 0x0732a802, 0x0739fcf9, 0x07415582, 0x0748b19b,
+ 0x07501145, 0x0757747f, 0x075edb49, 0x076645a3,
+ 0x076db38c, 0x07752503, 0x077c9a09, 0x0784129e,
+ 0x078b8ec0, 0x07930e6f, 0x079a91ac, 0x07a21876,
+ 0x07a9a2cb, 0x07b130ad, 0x07b8c21b, 0x07c05714,
+ 0x07c7ef98, 0x07cf8ba6, 0x07d72b3f, 0x07dece61,
+ 0x07e6750e, 0x07ee1f43, 0x07f5cd01, 0x07fd7e48,
+ 0x08053316, 0x080ceb6d, 0x0814a74a, 0x081c66af,
+ 0x0824299a, 0x082bf00c, 0x0833ba03, 0x083b8780,
+ 0x08435882, 0x084b2d09, 0x08530514, 0x085ae0a3,
+ 0x0862bfb6, 0x086aa24c, 0x08728865, 0x087a7201,
+ 0x08825f1e, 0x088a4fbe, 0x089243de, 0x089a3b80,
+ 0x08a236a2, 0x08aa3545, 0x08b23767, 0x08ba3d09,
+ 0x08c2462a, 0x08ca52c9, 0x08d262e7, 0x08da7682,
+ 0x08e28d9c, 0x08eaa832, 0x08f2c645, 0x08fae7d4,
+ 0x09030cdf, 0x090b3566, 0x09136168, 0x091b90e5,
+ 0x0923c3dc, 0x092bfa4d, 0x09343437, 0x093c719b,
+ 0x0944b277, 0x094cf6cc, 0x09553e99, 0x095d89dd,
+ 0x0965d898, 0x096e2acb, 0x09768073, 0x097ed991,
+ 0x09873625, 0x098f962e, 0x0997f9ac, 0x09a0609e,
+ 0x09a8cb04, 0x09b138dd, 0x09b9aa29, 0x09c21ee8,
+ 0x09ca9719, 0x09d312bc, 0x09db91d0, 0x09e41456,
+ 0x09ec9a4b, 0x09f523b1, 0x09fdb087, 0x0a0640cc,
+ 0x0a0ed47f, 0x0a176ba1, 0x0a200632, 0x0a28a42f,
+ 0x0a31459a, 0x0a39ea72, 0x0a4292b5, 0x0a4b3e65,
+ 0x0a53ed80, 0x0a5ca006, 0x0a6555f7, 0x0a6e0f51,
+ 0x0a76cc16, 0x0a7f8c43, 0x0a884fda, 0x0a9116d9,
+ 0x0a99e140, 0x0aa2af0e, 0x0aab8043, 0x0ab454df,
+ 0x0abd2ce1, 0x0ac60849, 0x0acee716, 0x0ad7c948,
+ 0x0ae0aede, 0x0ae997d9, 0x0af28437, 0x0afb73f7,
+ 0x0b04671b, 0x0b0d5da0, 0x0b165788, 0x0b1f54d0,
+ 0x0b285579, 0x0b315983, 0x0b3a60ec, 0x0b436bb5,
+ 0x0b4c79dd, 0x0b558b63, 0x0b5ea048, 0x0b67b88a,
+ 0x0b70d429, 0x0b79f324, 0x0b83157c, 0x0b8c3b30,
+ 0x0b95643e, 0x0b9e90a8, 0x0ba7c06c, 0x0bb0f38a,
+ 0x0bba2a01, 0x0bc363d1, 0x0bcca0f9, 0x0bd5e17a,
+ 0x0bdf2552, 0x0be86c81, 0x0bf1b706, 0x0bfb04e2,
+ 0x0c045613, 0x0c0daa99, 0x0c170274, 0x0c205da2,
+ 0x0c29bc25, 0x0c331dfb, 0x0c3c8323, 0x0c45eb9e,
+ 0x0c4f576a, 0x0c58c688, 0x0c6238f6, 0x0c6baeb5,
+ 0x0c7527c3, 0x0c7ea421, 0x0c8823cd, 0x0c91a6c8,
+ 0x0c9b2d10, 0x0ca4b6a6, 0x0cae4389, 0x0cb7d3b8,
+ 0x0cc16732, 0x0ccafdf8, 0x0cd49809, 0x0cde3564,
+ 0x0ce7d609, 0x0cf179f7, 0x0cfb212e, 0x0d04cbad,
+ 0x0d0e7974, 0x0d182a83, 0x0d21ded8, 0x0d2b9673,
+ 0x0d355154, 0x0d3f0f7a, 0x0d48d0e5, 0x0d529595,
+ 0x0d5c5d88, 0x0d6628be, 0x0d6ff736, 0x0d79c8f1,
+ 0x0d839dee, 0x0d8d762c, 0x0d9751aa, 0x0da13068,
+ 0x0dab1266, 0x0db4f7a3, 0x0dbee01e, 0x0dc8cbd7,
+ 0x0dd2bace, 0x0ddcad02, 0x0de6a272, 0x0df09b1e,
+ 0x0dfa9705, 0x0e049627, 0x0e0e9883, 0x0e189e19,
+ 0x0e22a6e8, 0x0e2cb2f0, 0x0e36c230, 0x0e40d4a7,
+ 0x0e4aea56, 0x0e55033b, 0x0e5f1f56, 0x0e693ea6,
+ 0x0e73612c, 0x0e7d86e5, 0x0e87afd3, 0x0e91dbf3,
+ 0x0e9c0b46, 0x0ea63dcc, 0x0eb07383, 0x0ebaac6b,
+ 0x0ec4e883, 0x0ecf27cc, 0x0ed96a44, 0x0ee3afea,
+ 0x0eedf8bf, 0x0ef844c2, 0x0f0293f1, 0x0f0ce64e,
+ 0x0f173bd6, 0x0f21948a, 0x0f2bf069, 0x0f364f72,
+ 0x0f40b1a5, 0x0f4b1701, 0x0f557f86, 0x0f5feb32,
+ 0x0f6a5a07, 0x0f74cc02, 0x0f7f4124, 0x0f89b96b,
+ 0x0f9434d8, 0x0f9eb369, 0x0fa9351e, 0x0fb3b9f7,
+ 0x0fbe41f3, 0x0fc8cd11, 0x0fd35b51, 0x0fddecb2,
+ 0x0fe88134, 0x0ff318d5, 0x0ffdb397, 0x10085177,
+ 0x1012f275, 0x101d9691, 0x10283dca, 0x1032e81f,
+ 0x103d9591, 0x1048461e, 0x1052f9c5, 0x105db087,
+ 0x10686a62, 0x10732756, 0x107de762, 0x1088aa87,
+ 0x109370c2, 0x109e3a14, 0x10a9067c, 0x10b3d5f9,
+ 0x10bea88b, 0x10c97e31, 0x10d456eb, 0x10df32b8,
+ 0x10ea1197, 0x10f4f387, 0x10ffd889, 0x110ac09b,
+ 0x1115abbe, 0x112099ef, 0x112b8b2f, 0x11367f7d,
+ 0x114176d9, 0x114c7141, 0x11576eb6, 0x11626f36,
+ 0x116d72c1, 0x11787957, 0x118382f6, 0x118e8f9e,
+ 0x11999f4f, 0x11a4b207, 0x11afc7c7, 0x11bae08e,
+ 0x11c5fc5a, 0x11d11b2c, 0x11dc3d02, 0x11e761dc,
+ 0x11f289ba, 0x11fdb49b, 0x1208e27e, 0x12141362,
+ 0x121f4747, 0x122a7e2d, 0x1235b812, 0x1240f4f6,
+ 0x124c34d9, 0x125777b9, 0x1262bd96, 0x126e066f,
+ 0x12795245, 0x1284a115, 0x128ff2e0, 0x129b47a5,
+ 0x12a69f62, 0x12b1fa19, 0x12bd57c7, 0x12c8b86c,
+ 0x12d41c08, 0x12df829a, 0x12eaec21, 0x12f6589c,
+ 0x1301c80c, 0x130d3a6f, 0x1318afc4, 0x1324280b,
+ 0x132fa344, 0x133b216d, 0x1346a286, 0x1352268e,
+ 0x135dad85, 0x1369376a, 0x1374c43c, 0x138053fb,
+ 0x138be6a5, 0x13977c3b, 0x13a314bb, 0x13aeb026,
+ 0x13ba4e79, 0x13c5efb5, 0x13d193d9, 0x13dd3ae4,
+ 0x13e8e4d6, 0x13f491ad, 0x14004169, 0x140bf40a,
+ 0x1417a98f, 0x142361f7, 0x142f1d41, 0x143adb6d,
+ 0x14469c79, 0x14526067, 0x145e2733, 0x1469f0df,
+ 0x1475bd69, 0x14818cd0, 0x148d5f15, 0x14993435,
+ 0x14a50c31, 0x14b0e707, 0x14bcc4b8, 0x14c8a542,
+ 0x14d488a5, 0x14e06edf, 0x14ec57f1, 0x14f843d9,
+ 0x15043297, 0x1510242a, 0x151c1892, 0x15280fcd,
+ 0x153409db, 0x154006bc, 0x154c066e, 0x155808f1,
+ 0x15640e43, 0x15701666, 0x157c2157, 0x15882f16,
+ 0x15943fa2, 0x15a052fa, 0x15ac691f, 0x15b8820e,
+ 0x15c49dc8, 0x15d0bc4c, 0x15dcdd98, 0x15e901ac,
+ 0x15f52888, 0x1601522b, 0x160d7e93, 0x1619adc1,
+ 0x1625dfb3, 0x16321469, 0x163e4be2, 0x164a861d,
+ 0x1656c31a, 0x166302d8, 0x166f4555, 0x167b8a92,
+ 0x1687d28e, 0x16941d47, 0x16a06abd, 0x16acbaf0,
+ 0x16b90ddf, 0x16c56388, 0x16d1bbeb, 0x16de1707,
+ 0x16ea74dd, 0x16f6d56a, 0x170338ae, 0x170f9ea8,
+ 0x171c0758, 0x172872bd, 0x1734e0d6, 0x174151a2,
+ 0x174dc520, 0x175a3b51, 0x1766b432, 0x17732fc3,
+ 0x177fae04, 0x178c2ef4, 0x1798b292, 0x17a538dd,
+ 0x17b1c1d4, 0x17be4d77, 0x17cadbc5, 0x17d76cbc,
+ 0x17e4005d, 0x17f096a7, 0x17fd2f98, 0x1809cb31,
+ 0x1816696f, 0x18230a53, 0x182faddc, 0x183c5408,
+ 0x1848fcd7, 0x1855a849, 0x1862565c, 0x186f0710,
+ 0x187bba64, 0x18887057, 0x189528e9, 0x18a1e417,
+ 0x18aea1e3, 0x18bb624b, 0x18c8254d, 0x18d4eaea,
+ 0x18e1b321, 0x18ee7df1, 0x18fb4b58, 0x19081b57,
+ 0x1914edec, 0x1921c316, 0x192e9ad6, 0x193b7529,
+ 0x19485210, 0x19553188, 0x19621393, 0x196ef82e,
+ 0x197bdf59, 0x1988c913, 0x1995b55c, 0x19a2a432,
+ 0x19af9594, 0x19bc8983, 0x19c97ffc, 0x19d67900,
+ 0x19e3748d, 0x19f072a3, 0x19fd7341, 0x1a0a7665,
+ 0x1a177c10, 0x1a248440, 0x1a318ef4, 0x1a3e9c2c,
+ 0x1a4babe7, 0x1a58be24, 0x1a65d2e2, 0x1a72ea20,
+ 0x1a8003de, 0x1a8d201a, 0x1a9a3ed4, 0x1aa7600c,
+ 0x1ab483bf, 0x1ac1a9ee, 0x1aced297, 0x1adbfdba,
+ 0x1ae92b56, 0x1af65b69, 0x1b038df4, 0x1b10c2f5,
+ 0x1b1dfa6b, 0x1b2b3456, 0x1b3870b5, 0x1b45af87,
+ 0x1b52f0ca, 0x1b60347f, 0x1b6d7aa4, 0x1b7ac339,
+ 0x1b880e3c, 0x1b955bad, 0x1ba2ab8b, 0x1baffdd5,
+ 0x1bbd528a, 0x1bcaa9a9, 0x1bd80332, 0x1be55f24,
+ 0x1bf2bd7d, 0x1c001e3d, 0x1c0d8163, 0x1c1ae6ef,
+ 0x1c284ede, 0x1c35b931, 0x1c4325e7, 0x1c5094fe,
+ 0x1c5e0676, 0x1c6b7a4e, 0x1c78f085, 0x1c86691b,
+ 0x1c93e40d, 0x1ca1615c, 0x1caee107, 0x1cbc630c,
+ 0x1cc9e76b, 0x1cd76e23, 0x1ce4f733, 0x1cf2829a,
+ 0x1d001057, 0x1d0da06a, 0x1d1b32d1, 0x1d28c78c,
+ 0x1d365e9a, 0x1d43f7f9, 0x1d5193a9, 0x1d5f31aa,
+ 0x1d6cd1f9, 0x1d7a7497, 0x1d881982, 0x1d95c0b9,
+ 0x1da36a3c, 0x1db1160a, 0x1dbec422, 0x1dcc7482,
+ 0x1dda272a, 0x1de7dc1a, 0x1df5934f, 0x1e034cca,
+ 0x1e110889, 0x1e1ec68c, 0x1e2c86d1, 0x1e3a4958,
+ 0x1e480e1f, 0x1e55d527, 0x1e639e6d, 0x1e7169f1,
+ 0x1e7f37b2, 0x1e8d07af, 0x1e9ad9e8, 0x1ea8ae5b,
+ 0x1eb68507, 0x1ec45dec, 0x1ed23908, 0x1ee0165b,
+ 0x1eedf5e4, 0x1efbd7a1, 0x1f09bb92, 0x1f17a1b6,
+ 0x1f258a0c, 0x1f337494, 0x1f41614b, 0x1f4f5032,
+ 0x1f5d4146, 0x1f6b3489, 0x1f7929f7, 0x1f872191,
+ 0x1f951b56, 0x1fa31744, 0x1fb1155b, 0x1fbf159a,
+ 0x1fcd17ff, 0x1fdb1c8a, 0x1fe9233b, 0x1ff72c0f,
+ 0x20053706, 0x2013441f, 0x2021535a, 0x202f64b4,
+ 0x203d782e, 0x204b8dc6, 0x2059a57c, 0x2067bf4d,
+ 0x2075db3b, 0x2083f942, 0x20921964, 0x20a03b9d,
+ 0x20ae5fef, 0x20bc8657, 0x20caaed5, 0x20d8d967,
+ 0x20e7060e, 0x20f534c7, 0x21036592, 0x2111986d,
+ 0x211fcd59, 0x212e0454, 0x213c3d5d, 0x214a7872,
+ 0x2158b594, 0x2166f4c1, 0x217535f8, 0x21837938,
+ 0x2191be81, 0x21a005d0, 0x21ae4f26, 0x21bc9a81,
+ 0x21cae7e0, 0x21d93742, 0x21e788a7, 0x21f5dc0e,
+ 0x22043174, 0x221288da, 0x2220e23e, 0x222f3da0,
+ 0x223d9afe, 0x224bfa58, 0x225a5bac, 0x2268bef9,
+ 0x2277243f, 0x22858b7c, 0x2293f4b0, 0x22a25fda,
+ 0x22b0ccf7, 0x22bf3c09, 0x22cdad0d, 0x22dc2002,
+ 0x22ea94e8, 0x22f90bbd, 0x23078481, 0x2315ff33,
+ 0x23247bd1, 0x2332fa5b, 0x23417acf, 0x234ffd2c,
+ 0x235e8172, 0x236d07a0, 0x237b8fb4, 0x238a19ae,
+ 0x2398a58c, 0x23a7334d, 0x23b5c2f1, 0x23c45477,
+ 0x23d2e7dd, 0x23e17d22, 0x23f01446, 0x23fead47,
+ 0x240d4824, 0x241be4dd, 0x242a8370, 0x243923dd,
+ 0x2447c622, 0x24566a3e, 0x24651030, 0x2473b7f8,
+ 0x24826194, 0x24910d03, 0x249fba44, 0x24ae6956,
+ 0x24bd1a39, 0x24cbccea, 0x24da816a, 0x24e937b6,
+ 0x24f7efcf, 0x2506a9b2, 0x25156560, 0x252422d6,
+ 0x2532e214, 0x2541a319, 0x255065e4, 0x255f2a74,
+ 0x256df0c7, 0x257cb8dd, 0x258b82b4, 0x259a4e4c,
+ 0x25a91ba4, 0x25b7eaba, 0x25c6bb8d, 0x25d58e1d,
+ 0x25e46269, 0x25f3386e, 0x2602102d, 0x2610e9a4,
+ 0x261fc4d2, 0x262ea1b7, 0x263d8050, 0x264c609d,
+ 0x265b429e, 0x266a2650, 0x26790bb3, 0x2687f2c6,
+ 0x2696db87, 0x26a5c5f6, 0x26b4b212, 0x26c39fda,
+ 0x26d28f4b, 0x26e18067, 0x26f0732a, 0x26ff6795,
+ 0x270e5da6, 0x271d555d, 0x272c4eb7, 0x273b49b5,
+ 0x274a4654, 0x27594494, 0x27684474, 0x277745f3,
+ 0x27864910, 0x27954dc9, 0x27a4541e, 0x27b35c0d,
+ 0x27c26595, 0x27d170b6, 0x27e07d6e, 0x27ef8bbd,
+ 0x27fe9ba0, 0x280dad17, 0x281cc021, 0x282bd4be,
+ 0x283aeaea, 0x284a02a7, 0x28591bf2, 0x286836ca,
+ 0x2877532f, 0x28867120, 0x2895909a, 0x28a4b19e,
+ 0x28b3d42a, 0x28c2f83c, 0x28d21dd5, 0x28e144f2,
+ 0x28f06d94, 0x28ff97b7, 0x290ec35c, 0x291df082,
+ 0x292d1f27, 0x293c4f4a, 0x294b80ea, 0x295ab407,
+ 0x2969e89e, 0x29791eaf, 0x29885639, 0x29978f3a,
+ 0x29a6c9b2, 0x29b605a0, 0x29c54301, 0x29d481d6,
+ 0x29e3c21d, 0x29f303d5, 0x2a0246fd, 0x2a118b94,
+ 0x2a20d198, 0x2a301909, 0x2a3f61e5, 0x2a4eac2c,
+ 0x2a5df7dc, 0x2a6d44f4, 0x2a7c9373, 0x2a8be358,
+ 0x2a9b34a2, 0x2aaa874f, 0x2ab9db5f, 0x2ac930d1,
+ 0x2ad887a2, 0x2ae7dfd3, 0x2af73962, 0x2b06944e,
+ 0x2b15f096, 0x2b254e38, 0x2b34ad34, 0x2b440d88,
+ 0x2b536f34, 0x2b62d236, 0x2b72368d, 0x2b819c38,
+ 0x2b910336, 0x2ba06b85, 0x2bafd525, 0x2bbf4015,
+ 0x2bceac53, 0x2bde19de, 0x2bed88b5, 0x2bfcf8d7,
+ 0x2c0c6a42, 0x2c1bdcf7, 0x2c2b50f3, 0x2c3ac635,
+ 0x2c4a3cbc, 0x2c59b488, 0x2c692d97, 0x2c78a7e7,
+ 0x2c882378, 0x2c97a048, 0x2ca71e57, 0x2cb69da4,
+ 0x2cc61e2c, 0x2cd59fef, 0x2ce522ec, 0x2cf4a722,
+ 0x2d042c90, 0x2d13b333, 0x2d233b0c, 0x2d32c419,
+ 0x2d424e59, 0x2d51d9cb, 0x2d61666e, 0x2d70f440,
+ 0x2d808340, 0x2d90136d, 0x2d9fa4c7, 0x2daf374c,
+ 0x2dbecafa, 0x2dce5fd1, 0x2dddf5cf, 0x2ded8cf3,
+ 0x2dfd253d, 0x2e0cbeaa, 0x2e1c593b, 0x2e2bf4ed,
+ 0x2e3b91bf, 0x2e4b2fb1, 0x2e5acec1, 0x2e6a6eee,
+ 0x2e7a1037, 0x2e89b29a, 0x2e995617, 0x2ea8faad,
+ 0x2eb8a059, 0x2ec8471c, 0x2ed7eef3, 0x2ee797de,
+ 0x2ef741dc, 0x2f06eceb, 0x2f16990a, 0x2f264638,
+ 0x2f35f474, 0x2f45a3bd, 0x2f555411, 0x2f650570,
+ 0x2f74b7d8, 0x2f846b47, 0x2f941fbe, 0x2fa3d53a,
+ 0x2fb38bbb, 0x2fc3433f, 0x2fd2fbc5, 0x2fe2b54c,
+ 0x2ff26fd3, 0x30022b58, 0x3011e7db, 0x3021a55a,
+ 0x303163d4, 0x30412348, 0x3050e3b4, 0x3060a518,
+ 0x30706773, 0x30802ac2, 0x308fef06, 0x309fb43c,
+ 0x30af7a64, 0x30bf417d, 0x30cf0984, 0x30ded27a,
+ 0x30ee9c5c, 0x30fe672a, 0x310e32e3, 0x311dff85,
+ 0x312dcd0f, 0x313d9b80, 0x314d6ad6, 0x315d3b11,
+ 0x316d0c30, 0x317cde31, 0x318cb112, 0x319c84d4,
+ 0x31ac5974, 0x31bc2ef1, 0x31cc054a, 0x31dbdc7f,
+ 0x31ebb48d, 0x31fb8d74, 0x320b6732, 0x321b41c7,
+ 0x322b1d30, 0x323af96e, 0x324ad67e, 0x325ab45f,
+ 0x326a9310, 0x327a7291, 0x328a52df, 0x329a33fa,
+ 0x32aa15e1, 0x32b9f892, 0x32c9dc0b, 0x32d9c04d,
+ 0x32e9a555, 0x32f98b22, 0x330971b4, 0x33195908,
+ 0x3329411f, 0x333929f6, 0x3349138c, 0x3358fde1,
+ 0x3368e8f2, 0x3378d4bf, 0x3388c147, 0x3398ae88,
+ 0x33a89c81, 0x33b88b32, 0x33c87a97, 0x33d86ab2,
+ 0x33e85b7f, 0x33f84cff, 0x34083f30, 0x34183210,
+ 0x3428259f, 0x343819da, 0x34480ec2, 0x34580455,
+ 0x3467fa91, 0x3477f176, 0x3487e902, 0x3497e133,
+ 0x34a7da0a, 0x34b7d384, 0x34c7cda0, 0x34d7c85d,
+ 0x34e7c3bb, 0x34f7bfb6, 0x3507bc50, 0x3517b985,
+ 0x3527b755, 0x3537b5bf, 0x3547b4c2, 0x3557b45c,
+ 0x3567b48c, 0x3577b551, 0x3587b6aa, 0x3597b895,
+ 0x35a7bb11, 0x35b7be1d, 0x35c7c1b8, 0x35d7c5e1,
+ 0x35e7ca96, 0x35f7cfd6, 0x3607d5a0, 0x3617dbf2,
+ 0x3627e2cc, 0x3637ea2c, 0x3647f211, 0x3657fa7a,
+ 0x36680365, 0x36780cd2, 0x368816bf, 0x3698212a,
+ 0x36a82c13, 0x36b83779, 0x36c84359, 0x36d84fb4,
+ 0x36e85c87, 0x36f869d2, 0x37087793, 0x371885c9,
+ 0x37289473, 0x3738a38f, 0x3748b31c, 0x3758c31a,
+ 0x3768d386, 0x3778e461, 0x3788f5a7, 0x37990759,
+ 0x37a91974, 0x37b92bf8, 0x37c93ee4, 0x37d95236,
+ 0x37e965ed, 0x37f97a07, 0x38098e84, 0x3819a363,
+ 0x3829b8a1, 0x3839ce3f, 0x3849e439, 0x3859fa91,
+ 0x386a1143, 0x387a284f, 0x388a3fb4, 0x389a5770,
+ 0x38aa6f82, 0x38ba87e9, 0x38caa0a4, 0x38dab9b2,
+ 0x38ead310, 0x38faecbf, 0x390b06bc, 0x391b2107,
+ 0x392b3b9e, 0x393b5680, 0x394b71ab, 0x395b8d20,
+ 0x396ba8db, 0x397bc4dd, 0x398be123, 0x399bfdad,
+ 0x39ac1a7a, 0x39bc3787, 0x39cc54d4, 0x39dc7260,
+ 0x39ec902a, 0x39fcae2f, 0x3a0ccc6f, 0x3a1ceae9,
+ 0x3a2d099c, 0x3a3d2885, 0x3a4d47a4, 0x3a5d66f9,
+ 0x3a6d8680, 0x3a7da63a, 0x3a8dc624, 0x3a9de63f,
+ 0x3aae0688, 0x3abe26fe, 0x3ace47a0, 0x3ade686c,
+ 0x3aee8963, 0x3afeaa81, 0x3b0ecbc7, 0x3b1eed32,
+ 0x3b2f0ec2, 0x3b3f3075, 0x3b4f524a, 0x3b5f7440,
+ 0x3b6f9655, 0x3b7fb889, 0x3b8fdad9, 0x3b9ffd46,
+ 0x3bb01fcd, 0x3bc0426d, 0x3bd06526, 0x3be087f5,
+ 0x3bf0aada, 0x3c00cdd3, 0x3c10f0df, 0x3c2113fe,
+ 0x3c31372c, 0x3c415a6a, 0x3c517db6, 0x3c61a10f,
+ 0x3c71c474, 0x3c81e7e3, 0x3c920b5b, 0x3ca22edb,
+ 0x3cb25262, 0x3cc275ee, 0x3cd2997e, 0x3ce2bd11,
+ 0x3cf2e0a6, 0x3d03043b, 0x3d1327cf, 0x3d234b61,
+ 0x3d336ef0, 0x3d43927a, 0x3d53b5fe, 0x3d63d97b,
+ 0x3d73fcf0, 0x3d84205c, 0x3d9443bc, 0x3da46711,
+ 0x3db48a58, 0x3dc4ad90, 0x3dd4d0b9, 0x3de4f3d1,
+ 0x3df516d6, 0x3e0539c8, 0x3e155ca5, 0x3e257f6c,
+ 0x3e35a21c, 0x3e45c4b4, 0x3e55e731, 0x3e660993,
+ 0x3e762bda, 0x3e864e02, 0x3e96700c, 0x3ea691f6,
+ 0x3eb6b3bf, 0x3ec6d565, 0x3ed6f6e7, 0x3ee71845,
+ 0x3ef7397c, 0x3f075a8c, 0x3f177b73, 0x3f279c30,
+ 0x3f37bcc2, 0x3f47dd27, 0x3f57fd5f, 0x3f681d67,
+ 0x3f783d40, 0x3f885ce7, 0x3f987c5b, 0x3fa89b9c,
+ 0x3fb8baa7, 0x3fc8d97c, 0x3fd8f819, 0x3fe9167d,
+ 0x3ff934a7, 0x40095296, 0x40197048, 0x40298dbc,
+ 0x4039aaf1, 0x4049c7e6, 0x4059e499, 0x406a0109,
+ 0x407a1d36, 0x408a391c, 0x409a54bd, 0x40aa7015,
+ 0x40ba8b24, 0x40caa5e9, 0x40dac063, 0x40eada8f,
+ 0x40faf46e, 0x410b0dfd, 0x411b273c, 0x412b4029,
+ 0x413b58c3, 0x414b7109, 0x415b88f9, 0x416ba093,
+ 0x417bb7d5, 0x418bcebd, 0x419be54b, 0x41abfb7d,
+ 0x41bc1153, 0x41cc26ca, 0x41dc3be2, 0x41ec5099,
+ 0x41fc64ee, 0x420c78e0, 0x421c8c6e, 0x422c9f96,
+ 0x423cb258, 0x424cc4b1, 0x425cd6a1, 0x426ce827,
+ 0x427cf940, 0x428d09ed, 0x429d1a2c, 0x42ad29fb,
+ 0x42bd3959, 0x42cd4845, 0x42dd56be, 0x42ed64c3,
+ 0x42fd7252, 0x430d7f6a, 0x431d8c0a, 0x432d9831,
+ 0x433da3dd, 0x434daf0d, 0x435db9c0, 0x436dc3f5,
+ 0x437dcdaa, 0x438dd6df, 0x439ddf91, 0x43ade7c0,
+ 0x43bdef6b, 0x43cdf690, 0x43ddfd2f, 0x43ee0345,
+ 0x43fe08d2, 0x440e0dd4, 0x441e124a, 0x442e1633,
+ 0x443e198e, 0x444e1c5a, 0x445e1e95, 0x446e203d,
+ 0x447e2153, 0x448e21d4, 0x449e21c0, 0x44ae2114,
+ 0x44be1fd1, 0x44ce1df4, 0x44de1b7c, 0x44ee1869,
+ 0x44fe14b9, 0x450e106b, 0x451e0b7d, 0x452e05ee,
+ 0x453dffbe, 0x454df8eb, 0x455df173, 0x456de955,
+ 0x457de091, 0x458dd725, 0x459dcd10, 0x45adc250,
+ 0x45bdb6e5, 0x45cdaacc, 0x45dd9e06, 0x45ed9090,
+ 0x45fd826a, 0x460d7392, 0x461d6407, 0x462d53c8,
+ 0x463d42d3, 0x464d3128, 0x465d1ec5, 0x466d0ba9,
+ 0x467cf7d3, 0x468ce341, 0x469ccdf3, 0x46acb7e7,
+ 0x46bca11b, 0x46cc898f, 0x46dc7142, 0x46ec5832,
+ 0x46fc3e5f, 0x470c23c6, 0x471c0866, 0x472bec3f,
+ 0x473bcf4f, 0x474bb196, 0x475b9311, 0x476b73c0,
+ 0x477b53a1, 0x478b32b3, 0x479b10f5, 0x47aaee66,
+ 0x47bacb05, 0x47caa6d0, 0x47da81c6, 0x47ea5be6,
+ 0x47fa352f, 0x480a0da0, 0x4819e537, 0x4829bbf3,
+ 0x483991d3, 0x484966d6, 0x48593afa, 0x48690e3f,
+ 0x4878e0a3, 0x4888b225, 0x489882c3, 0x48a8527e,
+ 0x48b82152, 0x48c7ef40, 0x48d7bc46, 0x48e78863,
+ 0x48f75395, 0x49071ddc, 0x4916e736, 0x4926afa2,
+ 0x4936771f, 0x49463dab, 0x49560346, 0x4965c7ef,
+ 0x49758ba3, 0x49854e62, 0x4995102b, 0x49a4d0fd,
+ 0x49b490d6, 0x49c44fb5, 0x49d40d99, 0x49e3ca81,
+ 0x49f3866c, 0x4a034158, 0x4a12fb44, 0x4a22b430,
+ 0x4a326c19, 0x4a4222ff, 0x4a51d8e0, 0x4a618dbc,
+ 0x4a714191, 0x4a80f45f, 0x4a90a623, 0x4aa056dc,
+ 0x4ab0068a, 0x4abfb52c, 0x4acf62bf, 0x4adf0f44,
+ 0x4aeebab8, 0x4afe651b, 0x4b0e0e6b, 0x4b1db6a8,
+ 0x4b2d5dd0, 0x4b3d03e2, 0x4b4ca8dc, 0x4b5c4cbf,
+ 0x4b6bef87, 0x4b7b9135, 0x4b8b31c7, 0x4b9ad13c,
+ 0x4baa6f93, 0x4bba0cca, 0x4bc9a8e1, 0x4bd943d6,
+ 0x4be8dda9, 0x4bf87657, 0x4c080de0, 0x4c17a443,
+ 0x4c27397e, 0x4c36cd91, 0x4c46607a, 0x4c55f238,
+ 0x4c6582ca, 0x4c75122f, 0x4c84a065, 0x4c942d6c,
+ 0x4ca3b942, 0x4cb343e6, 0x4cc2cd57, 0x4cd25594,
+ 0x4ce1dc9b, 0x4cf1626d, 0x4d00e706, 0x4d106a67,
+ 0x4d1fec8e, 0x4d2f6d7a, 0x4d3eed2a, 0x4d4e6b9c,
+ 0x4d5de8d0, 0x4d6d64c5, 0x4d7cdf78, 0x4d8c58ea,
+ 0x4d9bd119, 0x4dab4804, 0x4dbabda9, 0x4dca3208,
+ 0x4dd9a51f, 0x4de916ee, 0x4df88773, 0x4e07f6ad,
+ 0x4e17649b, 0x4e26d13c, 0x4e363c8e, 0x4e45a691,
+ 0x4e550f43, 0x4e6476a4, 0x4e73dcb2, 0x4e83416b,
+ 0x4e92a4d0, 0x4ea206df, 0x4eb16796, 0x4ec0c6f5,
+ 0x4ed024fa, 0x4edf81a4, 0x4eeedcf3, 0x4efe36e4,
+ 0x4f0d8f78, 0x4f1ce6ad, 0x4f2c3c81, 0x4f3b90f4,
+ 0x4f4ae404, 0x4f5a35b1, 0x4f6985f9, 0x4f78d4db,
+ 0x4f882256, 0x4f976e6a, 0x4fa6b914, 0x4fb60253,
+ 0x4fc54a28, 0x4fd49090, 0x4fe3d58a, 0x4ff31916,
+ 0x50025b32, 0x50119bdd, 0x5020db16, 0x503018dc,
+ 0x503f552e, 0x504e900b, 0x505dc971, 0x506d0160,
+ 0x507c37d6, 0x508b6cd2, 0x509aa054, 0x50a9d25a,
+ 0x50b902e4, 0x50c831ef, 0x50d75f7b, 0x50e68b87,
+ 0x50f5b611, 0x5104df1a, 0x5114069f, 0x51232c9f,
+ 0x5132511a, 0x5141740e, 0x5150957a, 0x515fb55e,
+ 0x516ed3b8, 0x517df086, 0x518d0bc9, 0x519c257f,
+ 0x51ab3da6, 0x51ba543e, 0x51c96946, 0x51d87cbc,
+ 0x51e78ea0, 0x51f69ef1, 0x5205adac, 0x5214bad2,
+ 0x5223c662, 0x5232d059, 0x5241d8b8, 0x5250df7d,
+ 0x525fe4a7, 0x526ee834, 0x527dea25, 0x528cea78,
+ 0x529be92b, 0x52aae63e, 0x52b9e1b0, 0x52c8db7f,
+ 0x52d7d3ab, 0x52e6ca33, 0x52f5bf15, 0x5304b250,
+ 0x5313a3e4, 0x532293cf, 0x53318211, 0x53406ea8,
+ 0x534f5993, 0x535e42d1, 0x536d2a61, 0x537c1043,
+ 0x538af474, 0x5399d6f5, 0x53a8b7c4, 0x53b796df,
+ 0x53c67447, 0x53d54ff9, 0x53e429f5, 0x53f3023a,
+ 0x5401d8c7, 0x5410ad9b, 0x541f80b4, 0x542e5213,
+ 0x543d21b5, 0x544bef99, 0x545abbc0, 0x54698627,
+ 0x54784ecd, 0x548715b2, 0x5495dad5, 0x54a49e35,
+ 0x54b35fd0, 0x54c21fa5, 0x54d0ddb5, 0x54df99fc,
+ 0x54ee547b, 0x54fd0d31, 0x550bc41d, 0x551a793c,
+ 0x55292c90, 0x5537de16, 0x55468dcd, 0x55553bb5,
+ 0x5563e7cd, 0x55729213, 0x55813a86, 0x558fe126,
+ 0x559e85f2, 0x55ad28e8, 0x55bbca08, 0x55ca6950,
+ 0x55d906c0, 0x55e7a256, 0x55f63c12, 0x5604d3f3,
+ 0x561369f7, 0x5621fe1e, 0x56309067, 0x563f20d0,
+ 0x564daf59, 0x565c3c01, 0x566ac6c7, 0x56794fa9,
+ 0x5687d6a7, 0x56965bc0, 0x56a4def3, 0x56b3603f,
+ 0x56c1dfa3, 0x56d05d1e, 0x56ded8af, 0x56ed5255,
+ 0x56fbca0f, 0x570a3fdc, 0x5718b3bb, 0x572725ab,
+ 0x573595ac, 0x574403bc, 0x57526fdb, 0x5760da06,
+ 0x576f423f, 0x577da882, 0x578c0cd1, 0x579a6f29,
+ 0x57a8cf89, 0x57b72df1, 0x57c58a60, 0x57d3e4d5,
+ 0x57e23d4f, 0x57f093cc, 0x57fee84d, 0x580d3ad0,
+ 0x581b8b54, 0x5829d9d8, 0x5838265b, 0x584670dd,
+ 0x5854b95c, 0x5862ffd7, 0x5871444e, 0x587f86c0,
+ 0x588dc72c, 0x589c0590, 0x58aa41ec, 0x58b87c3f,
+ 0x58c6b488, 0x58d4eac6, 0x58e31ef8, 0x58f1511e,
+ 0x58ff8136, 0x590daf40, 0x591bdb3a, 0x592a0523,
+ 0x59382cfb, 0x594652c2, 0x59547675, 0x59629814,
+ 0x5970b79e, 0x597ed513, 0x598cf070, 0x599b09b7,
+ 0x59a920e4, 0x59b735f9, 0x59c548f3, 0x59d359d2,
+ 0x59e16895, 0x59ef753b, 0x59fd7fc3, 0x5a0b882c,
+ 0x5a198e76, 0x5a2792a0, 0x5a3594a8, 0x5a43948e,
+ 0x5a519251, 0x5a5f8def, 0x5a6d8769, 0x5a7b7ebe,
+ 0x5a8973eb, 0x5a9766f1, 0x5aa557cf, 0x5ab34684,
+ 0x5ac1330f, 0x5acf1d6e, 0x5add05a2, 0x5aeaeba9,
+ 0x5af8cf83, 0x5b06b12e, 0x5b1490aa, 0x5b226df6,
+ 0x5b304912, 0x5b3e21fb, 0x5b4bf8b2, 0x5b59cd35,
+ 0x5b679f84, 0x5b756f9d, 0x5b833d81, 0x5b91092e,
+ 0x5b9ed2a3, 0x5bac99df, 0x5bba5ee2, 0x5bc821ab,
+ 0x5bd5e239, 0x5be3a08b, 0x5bf15ca0, 0x5bff1678,
+ 0x5c0cce11, 0x5c1a836c, 0x5c283686, 0x5c35e75f,
+ 0x5c4395f6, 0x5c51424b, 0x5c5eec5d, 0x5c6c942b,
+ 0x5c7a39b3, 0x5c87dcf6, 0x5c957df2, 0x5ca31ca7,
+ 0x5cb0b914, 0x5cbe5338, 0x5ccbeb11, 0x5cd980a1,
+ 0x5ce713e4, 0x5cf4a4dc, 0x5d023386, 0x5d0fbfe3,
+ 0x5d1d49f1, 0x5d2ad1b0, 0x5d38571e, 0x5d45da3c,
+ 0x5d535b07, 0x5d60d980, 0x5d6e55a6, 0x5d7bcf78,
+ 0x5d8946f4, 0x5d96bc1b, 0x5da42eeb, 0x5db19f64,
+ 0x5dbf0d85, 0x5dcc794d, 0x5dd9e2bc, 0x5de749d0,
+ 0x5df4ae89, 0x5e0210e6, 0x5e0f70e6, 0x5e1cce89,
+ 0x5e2a29ce, 0x5e3782b3, 0x5e44d939, 0x5e522d5e,
+ 0x5e5f7f23, 0x5e6cce85, 0x5e7a1b84, 0x5e876620,
+ 0x5e94ae57, 0x5ea1f429, 0x5eaf3796, 0x5ebc789c,
+ 0x5ec9b73b, 0x5ed6f372, 0x5ee42d40, 0x5ef164a4,
+ 0x5efe999f, 0x5f0bcc2e, 0x5f18fc51, 0x5f262a09,
+ 0x5f335553, 0x5f407e2f, 0x5f4da49c, 0x5f5ac89a,
+ 0x5f67ea28, 0x5f750945, 0x5f8225f1, 0x5f8f402a,
+ 0x5f9c57f1, 0x5fa96d44, 0x5fb68022, 0x5fc3908b,
+ 0x5fd09e7f, 0x5fdda9fb, 0x5feab301, 0x5ff7b98f,
+ 0x6004bda4, 0x6011bf40, 0x601ebe61, 0x602bbb08,
+ 0x6038b534, 0x6045ace3, 0x6052a215, 0x605f94ca,
+ 0x606c8501, 0x607972b9, 0x60865df1, 0x609346a9,
+ 0x60a02ce0, 0x60ad1095, 0x60b9f1c8, 0x60c6d078,
+ 0x60d3aca4, 0x60e0864c, 0x60ed5d6f, 0x60fa320c,
+ 0x61070423, 0x6113d3b3, 0x6120a0bb, 0x612d6b3b,
+ 0x613a3331, 0x6146f89e, 0x6153bb81, 0x61607bd9,
+ 0x616d39a5, 0x6179f4e4, 0x6186ad97, 0x619363bc,
+ 0x61a01753, 0x61acc85a, 0x61b976d3, 0x61c622bb,
+ 0x61d2cc12, 0x61df72d8, 0x61ec170b, 0x61f8b8ac,
+ 0x620557ba, 0x6211f433, 0x621e8e18, 0x622b2567,
+ 0x6237ba21, 0x62444c44, 0x6250dbcf, 0x625d68c3,
+ 0x6269f31f, 0x62767ae2, 0x6283000b, 0x628f8299,
+ 0x629c028d, 0x62a87fe5, 0x62b4faa2, 0x62c172c1,
+ 0x62cde843, 0x62da5b28, 0x62e6cb6e, 0x62f33914,
+ 0x62ffa41b, 0x630c0c82, 0x63187248, 0x6324d56c,
+ 0x633135ee, 0x633d93ce, 0x6349ef0a, 0x635647a2,
+ 0x63629d96, 0x636ef0e5, 0x637b418e, 0x63878f91,
+ 0x6393daee, 0x63a023a3, 0x63ac69b0, 0x63b8ad15,
+ 0x63c4edd0, 0x63d12be2, 0x63dd674a, 0x63e9a007,
+ 0x63f5d619, 0x6402097f, 0x640e3a38, 0x641a6845,
+ 0x642693a4, 0x6432bc55, 0x643ee257, 0x644b05aa,
+ 0x6457264d, 0x64634440, 0x646f5f83, 0x647b7813,
+ 0x64878df2, 0x6493a11f, 0x649fb198, 0x64abbf5e,
+ 0x64b7ca70, 0x64c3d2ce, 0x64cfd876, 0x64dbdb68,
+ 0x64e7dba5, 0x64f3d92b, 0x64ffd3f9, 0x650bcc10,
+ 0x6517c16e, 0x6523b414, 0x652fa401, 0x653b9133,
+ 0x65477bac, 0x65536369, 0x655f486c, 0x656b2ab2,
+ 0x65770a3c, 0x6582e70a, 0x658ec11a, 0x659a986c,
+ 0x65a66d00, 0x65b23ed5, 0x65be0dea, 0x65c9da40,
+ 0x65d5a3d6, 0x65e16aab, 0x65ed2ebe, 0x65f8f010,
+ 0x6604aea0, 0x66106a6d, 0x661c2377, 0x6627d9bd,
+ 0x66338d3f, 0x663f3dfc, 0x664aebf5, 0x66569727,
+ 0x66623f94, 0x666de53b, 0x6679881a, 0x66852832,
+ 0x6690c582, 0x669c600a, 0x66a7f7c9, 0x66b38cbf,
+ 0x66bf1eec, 0x66caae4e, 0x66d63ae6, 0x66e1c4b2,
+ 0x66ed4bb3, 0x66f8cfe9, 0x67045152, 0x670fcfee,
+ 0x671b4bbd, 0x6726c4bf, 0x67323af2, 0x673dae57,
+ 0x67491eed, 0x67548cb4, 0x675ff7ab, 0x676b5fd1,
+ 0x6776c527, 0x678227ad, 0x678d8760, 0x6798e442,
+ 0x67a43e52, 0x67af958e, 0x67bae9f8, 0x67c63b8f,
+ 0x67d18a51, 0x67dcd63f, 0x67e81f58, 0x67f3659d,
+ 0x67fea90b, 0x6809e9a4, 0x68152767, 0x68206253,
+ 0x682b9a68, 0x6836cfa5, 0x6842020b, 0x684d3198,
+ 0x68585e4d, 0x68638828, 0x686eaf2b, 0x6879d353,
+ 0x6884f4a2, 0x68901316, 0x689b2eaf, 0x68a6476d,
+ 0x68b15d4f, 0x68bc7055, 0x68c7807f, 0x68d28dcc,
+ 0x68dd983d, 0x68e89fd0, 0x68f3a485, 0x68fea65c,
+ 0x6909a554, 0x6914a16e, 0x691f9aa8, 0x692a9104,
+ 0x6935847f, 0x6940751a, 0x694b62d4, 0x69564dae,
+ 0x696135a6, 0x696c1abd, 0x6976fcf2, 0x6981dc45,
+ 0x698cb8b5, 0x69979242, 0x69a268ed, 0x69ad3cb3,
+ 0x69b80d96, 0x69c2db95, 0x69cda6af, 0x69d86ee5,
+ 0x69e33435, 0x69edf6a0, 0x69f8b625, 0x6a0372c4,
+ 0x6a0e2c7d, 0x6a18e350, 0x6a23973b, 0x6a2e483f,
+ 0x6a38f65c, 0x6a43a191, 0x6a4e49dd, 0x6a58ef42,
+ 0x6a6391bd, 0x6a6e3150, 0x6a78cdf9, 0x6a8367b9,
+ 0x6a8dfe8f, 0x6a98927b, 0x6aa3237c, 0x6aadb193,
+ 0x6ab83cbf, 0x6ac2c4ff, 0x6acd4a54, 0x6ad7ccbe,
+ 0x6ae24c3b, 0x6aecc8cc, 0x6af74271, 0x6b01b928,
+ 0x6b0c2cf3, 0x6b169dd0, 0x6b210bc0, 0x6b2b76c2,
+ 0x6b35ded5, 0x6b4043fb, 0x6b4aa632, 0x6b55057a,
+ 0x6b5f61d2, 0x6b69bb3c, 0x6b7411b6, 0x6b7e6540,
+ 0x6b88b5db, 0x6b930384, 0x6b9d4e3e, 0x6ba79607,
+ 0x6bb1dade, 0x6bbc1cc5, 0x6bc65bba, 0x6bd097be,
+ 0x6bdad0cf, 0x6be506ef, 0x6bef3a1c, 0x6bf96a57,
+ 0x6c03979f, 0x6c0dc1f5, 0x6c17e957, 0x6c220dc5,
+ 0x6c2c2f40, 0x6c364dc8, 0x6c40695b, 0x6c4a81fb,
+ 0x6c5497a6, 0x6c5eaa5c, 0x6c68ba1e, 0x6c72c6eb,
+ 0x6c7cd0c2, 0x6c86d7a5, 0x6c90db92, 0x6c9adc89,
+ 0x6ca4da8a, 0x6caed595, 0x6cb8cdaa, 0x6cc2c2c9,
+ 0x6cccb4f1, 0x6cd6a423, 0x6ce0905d, 0x6cea79a1,
+ 0x6cf45fed, 0x6cfe4341, 0x6d08239f, 0x6d120104,
+ 0x6d1bdb72, 0x6d25b2e7, 0x6d2f8764, 0x6d3958e9,
+ 0x6d432776, 0x6d4cf30a, 0x6d56bba5, 0x6d608147,
+ 0x6d6a43f0, 0x6d74039f, 0x6d7dc056, 0x6d877a12,
+ 0x6d9130d5, 0x6d9ae49f, 0x6da4956e, 0x6dae4344,
+ 0x6db7ee1f, 0x6dc19600, 0x6dcb3ae6, 0x6dd4dcd2,
+ 0x6dde7bc4, 0x6de817ba, 0x6df1b0b6, 0x6dfb46b6,
+ 0x6e04d9bc, 0x6e0e69c6, 0x6e17f6d5, 0x6e2180e8,
+ 0x6e2b0800, 0x6e348c1c, 0x6e3e0d3c, 0x6e478b61,
+ 0x6e510689, 0x6e5a7eb6, 0x6e63f3e6, 0x6e6d661a,
+ 0x6e76d552, 0x6e80418d, 0x6e89aacc, 0x6e93110e,
+ 0x6e9c7453, 0x6ea5d49c, 0x6eaf31e8, 0x6eb88c37,
+ 0x6ec1e388, 0x6ecb37dd, 0x6ed48935, 0x6eddd790,
+ 0x6ee722ed, 0x6ef06b4d, 0x6ef9b0af, 0x6f02f314,
+ 0x6f0c327b, 0x6f156ee5, 0x6f1ea852, 0x6f27dec0,
+ 0x6f311231, 0x6f3a42a4, 0x6f437019, 0x6f4c9a90,
+ 0x6f55c209, 0x6f5ee685, 0x6f680802, 0x6f712681,
+ 0x6f7a4202, 0x6f835a85, 0x6f8c700a, 0x6f958290,
+ 0x6f9e9219, 0x6fa79ea3, 0x6fb0a82f, 0x6fb9aebc,
+ 0x6fc2b24b, 0x6fcbb2dc, 0x6fd4b06e, 0x6fddab02,
+ 0x6fe6a298, 0x6fef972f, 0x6ff888c8, 0x70017762,
+ 0x700a62fe, 0x70134b9b, 0x701c313a, 0x702513db,
+ 0x702df37d, 0x7036d021, 0x703fa9c6, 0x7048806c,
+ 0x70515415, 0x705a24be, 0x7062f26a, 0x706bbd17,
+ 0x707484c5, 0x707d4975, 0x70860b27, 0x708ec9db,
+ 0x70978590, 0x70a03e47, 0x70a8f3ff, 0x70b1a6ba,
+ 0x70ba5676, 0x70c30334, 0x70cbacf4, 0x70d453b5,
+ 0x70dcf779, 0x70e5983f, 0x70ee3606, 0x70f6d0d0,
+ 0x70ff689c, 0x7107fd6a, 0x71108f3a, 0x71191e0c,
+ 0x7121a9e1, 0x712a32b8, 0x7132b891, 0x713b3b6d,
+ 0x7143bb4b, 0x714c382c, 0x7154b210, 0x715d28f6,
+ 0x71659cdf, 0x716e0dcb, 0x71767bba, 0x717ee6ab,
+ 0x71874ea0, 0x718fb398, 0x71981593, 0x71a07492,
+ 0x71a8d093, 0x71b12999, 0x71b97fa1, 0x71c1d2ae,
+ 0x71ca22be, 0x71d26fd2, 0x71dab9e9, 0x71e30105,
+ 0x71eb4525, 0x71f38649, 0x71fbc471, 0x7203ff9d,
+ 0x720c37ce, 0x72146d04, 0x721c9f3e, 0x7224ce7d,
+ 0x722cfac1, 0x7235240a, 0x723d4a58, 0x72456dac,
+ 0x724d8e04, 0x7255ab63, 0x725dc5c6, 0x7265dd30,
+ 0x726df19f, 0x72760314, 0x727e1190, 0x72861d11,
+ 0x728e2599, 0x72962b27, 0x729e2dbc, 0x72a62d58,
+ 0x72ae29fb, 0x72b623a5, 0x72be1a55, 0x72c60e0e,
+ 0x72cdfecd, 0x72d5ec94, 0x72ddd763, 0x72e5bf3a,
+ 0x72eda419, 0x72f58600, 0x72fd64f0, 0x730540e8,
+ 0x730d19e8, 0x7314eff2, 0x731cc304, 0x73249320,
+ 0x732c6045, 0x73342a74, 0x733bf1ac, 0x7343b5ee,
+ 0x734b773a, 0x73533590, 0x735af0f1, 0x7362a95c,
+ 0x736a5ed2, 0x73721153, 0x7379c0de, 0x73816d75,
+ 0x73891718, 0x7390bdc6, 0x73986180, 0x73a00246,
+ 0x73a7a019, 0x73af3af7, 0x73b6d2e3, 0x73be67db,
+ 0x73c5f9e0, 0x73cd88f2, 0x73d51512, 0x73dc9e40,
+ 0x73e4247b, 0x73eba7c4, 0x73f3281c, 0x73faa581,
+ 0x74021ff6, 0x7409977a, 0x74110c0c, 0x74187dae,
+ 0x741fec60, 0x74275821, 0x742ec0f2, 0x743626d4,
+ 0x743d89c6, 0x7444e9c8, 0x744c46dc, 0x7453a100,
+ 0x745af836, 0x74624c7e, 0x74699dd7, 0x7470ec43,
+ 0x747837c1, 0x747f8051, 0x7486c5f5, 0x748e08ab,
+ 0x74954874, 0x749c8552, 0x74a3bf42, 0x74aaf647,
+ 0x74b22a61, 0x74b95b8f, 0x74c089d1, 0x74c7b529,
+ 0x74cedd96, 0x74d60319, 0x74dd25b1, 0x74e44560,
+ 0x74eb6225, 0x74f27c01, 0x74f992f4, 0x7500a6fe,
+ 0x7507b81f, 0x750ec658, 0x7515d1a9, 0x751cda13,
+ 0x7523df95, 0x752ae230, 0x7531e1e4, 0x7538deb2,
+ 0x753fd899, 0x7546cf9a, 0x754dc3b6, 0x7554b4ec,
+ 0x755ba33d, 0x75628ea9, 0x75697731, 0x75705cd4,
+ 0x75773f94, 0x757e1f70, 0x7584fc69, 0x758bd67e,
+ 0x7592adb1, 0x75998202, 0x75a05370, 0x75a721fd,
+ 0x75adeda8, 0x75b4b672, 0x75bb7c5b, 0x75c23f64,
+ 0x75c8ff8c, 0x75cfbcd5, 0x75d6773e, 0x75dd2ec7,
+ 0x75e3e372, 0x75ea953e, 0x75f1442c, 0x75f7f03c,
+ 0x75fe996f, 0x76053fc4, 0x760be33c, 0x761283d7,
+ 0x76192197, 0x761fbc7a, 0x76265482, 0x762ce9ae,
+ 0x76337c00, 0x763a0b77, 0x76409813, 0x764721d6,
+ 0x764da8c0, 0x76542cd0, 0x765aae07, 0x76612c66,
+ 0x7667a7ed, 0x766e209c, 0x76749674, 0x767b0974,
+ 0x7681799e, 0x7687e6f2, 0x768e516f, 0x7694b918,
+ 0x769b1dea, 0x76a17fe8, 0x76a7df12, 0x76ae3b67,
+ 0x76b494e9, 0x76baeb97, 0x76c13f73, 0x76c7907b,
+ 0x76cddeb2, 0x76d42a17, 0x76da72aa, 0x76e0b86c,
+ 0x76e6fb5d, 0x76ed3b7e, 0x76f378d0, 0x76f9b351,
+ 0x76ffeb04, 0x77061fe7, 0x770c51fd, 0x77128144,
+ 0x7718adbe, 0x771ed76b, 0x7724fe4b, 0x772b225e,
+ 0x773143a6, 0x77376222, 0x773d7dd3, 0x774396b9,
+ 0x7749acd4, 0x774fc026, 0x7755d0ae, 0x775bde6e,
+ 0x7761e964, 0x7767f192, 0x776df6f9, 0x7773f997,
+ 0x7779f96f, 0x777ff681, 0x7785f0cc, 0x778be851,
+ 0x7791dd11, 0x7797cf0c, 0x779dbe42, 0x77a3aab5,
+ 0x77a99464, 0x77af7b4f, 0x77b55f78, 0x77bb40df,
+ 0x77c11f84, 0x77c6fb67, 0x77ccd489, 0x77d2aaeb,
+ 0x77d87e8c, 0x77de4f6e, 0x77e41d91, 0x77e9e8f5,
+ 0x77efb19a, 0x77f57782, 0x77fb3aac, 0x7800fb19,
+ 0x7806b8c9, 0x780c73be, 0x78122bf6, 0x7817e174,
+ 0x781d9437, 0x78234440, 0x7828f18e, 0x782e9c24,
+ 0x78344400, 0x7839e924, 0x783f8b91, 0x78452b45,
+ 0x784ac843, 0x7850628a, 0x7855fa1b, 0x785b8ef7,
+ 0x7861211d, 0x7866b08f, 0x786c3d4c, 0x7871c756,
+ 0x78774ead, 0x787cd350, 0x78825542, 0x7887d482,
+ 0x788d5110, 0x7892caee, 0x7898421b, 0x789db699,
+ 0x78a32867, 0x78a89786, 0x78ae03f7, 0x78b36dba,
+ 0x78b8d4d0, 0x78be3939, 0x78c39af5, 0x78c8fa05,
+ 0x78ce566b, 0x78d3b025, 0x78d90735, 0x78de5b9b,
+ 0x78e3ad57, 0x78e8fc6b, 0x78ee48d6, 0x78f3929a,
+ 0x78f8d9b6, 0x78fe1e2b, 0x79035ffa, 0x79089f23,
+ 0x790ddba7, 0x79131586, 0x79184cc1, 0x791d8158,
+ 0x7922b34c, 0x7927e29d, 0x792d0f4c, 0x79323959,
+ 0x793760c5, 0x793c8590, 0x7941a7bc, 0x7946c748,
+ 0x794be434, 0x7950fe83, 0x79561633, 0x795b2b46,
+ 0x79603dbb, 0x79654d95, 0x796a5ad3, 0x796f6575,
+ 0x79746d7d, 0x797972ea, 0x797e75be, 0x798375f8,
+ 0x7988739a, 0x798d6ea4, 0x79926716, 0x79975cf2,
+ 0x799c5036, 0x79a140e5, 0x79a62eff, 0x79ab1a84,
+ 0x79b00375, 0x79b4e9d2, 0x79b9cd9c, 0x79beaed3,
+ 0x79c38d79, 0x79c8698c, 0x79cd430f, 0x79d21a02,
+ 0x79d6ee65, 0x79dbc039, 0x79e08f7e, 0x79e55c35,
+ 0x79ea265e, 0x79eeedfb, 0x79f3b30b, 0x79f8758f,
+ 0x79fd3588, 0x7a01f2f6, 0x7a06addb, 0x7a0b6635,
+ 0x7a101c07, 0x7a14cf51, 0x7a198012, 0x7a1e2e4c,
+ 0x7a22da00, 0x7a27832e, 0x7a2c29d6, 0x7a30cdf9,
+ 0x7a356f98, 0x7a3a0eb3, 0x7a3eab4b, 0x7a434560,
+ 0x7a47dcf4, 0x7a4c7206, 0x7a510497, 0x7a5594a8,
+ 0x7a5a2239, 0x7a5ead4c, 0x7a6335df, 0x7a67bbf5,
+ 0x7a6c3f8e, 0x7a70c0aa, 0x7a753f4a, 0x7a79bb6f,
+ 0x7a7e3518, 0x7a82ac47, 0x7a8720fd, 0x7a8b933a,
+ 0x7a9002fe, 0x7a94704a, 0x7a98db1f, 0x7a9d437d,
+ 0x7aa1a966, 0x7aa60cd8, 0x7aaa6dd6, 0x7aaecc60,
+ 0x7ab32876, 0x7ab7821a, 0x7abbd94a, 0x7ac02e09,
+ 0x7ac48057, 0x7ac8d034, 0x7acd1da2, 0x7ad168a0,
+ 0x7ad5b12f, 0x7ad9f751, 0x7ade3b04, 0x7ae27c4b,
+ 0x7ae6bb26, 0x7aeaf795, 0x7aef3199, 0x7af36933,
+ 0x7af79e63, 0x7afbd12b, 0x7b000189, 0x7b042f80,
+ 0x7b085b0f, 0x7b0c8438, 0x7b10aafc, 0x7b14cf59,
+ 0x7b18f152, 0x7b1d10e7, 0x7b212e19, 0x7b2548e8,
+ 0x7b296154, 0x7b2d7760, 0x7b318b0a, 0x7b359c54,
+ 0x7b39ab3f, 0x7b3db7ca, 0x7b41c1f7, 0x7b45c9c7,
+ 0x7b49cf3a, 0x7b4dd250, 0x7b51d30a, 0x7b55d16a,
+ 0x7b59cd6f, 0x7b5dc71a, 0x7b61be6c, 0x7b65b366,
+ 0x7b69a607, 0x7b6d9652, 0x7b718446, 0x7b756fe4,
+ 0x7b79592d, 0x7b7d4021, 0x7b8124c2, 0x7b85070f,
+ 0x7b88e709, 0x7b8cc4b2, 0x7b90a009, 0x7b947910,
+ 0x7b984fc7, 0x7b9c242e, 0x7b9ff647, 0x7ba3c611,
+ 0x7ba7938f, 0x7bab5ec0, 0x7baf27a4, 0x7bb2ee3e,
+ 0x7bb6b28d, 0x7bba7492, 0x7bbe344d, 0x7bc1f1c0,
+ 0x7bc5aceb, 0x7bc965ce, 0x7bcd1c6b, 0x7bd0d0c2,
+ 0x7bd482d3, 0x7bd832a0, 0x7bdbe029, 0x7bdf8b6f,
+ 0x7be33472, 0x7be6db33, 0x7bea7fb3, 0x7bee21f3,
+ 0x7bf1c1f2, 0x7bf55fb2, 0x7bf8fb34, 0x7bfc9478,
+ 0x7c002b7e, 0x7c03c049, 0x7c0752d7, 0x7c0ae32a,
+ 0x7c0e7143, 0x7c11fd22, 0x7c1586c8, 0x7c190e35,
+ 0x7c1c936b, 0x7c20166a, 0x7c239732, 0x7c2715c5,
+ 0x7c2a9223, 0x7c2e0c4d, 0x7c318443, 0x7c34fa06,
+ 0x7c386d97, 0x7c3bdef7, 0x7c3f4e25, 0x7c42bb24,
+ 0x7c4625f3, 0x7c498e94, 0x7c4cf506, 0x7c50594b,
+ 0x7c53bb64, 0x7c571b51, 0x7c5a7912, 0x7c5dd4a9,
+ 0x7c612e16, 0x7c64855a, 0x7c67da75, 0x7c6b2d69,
+ 0x7c6e7e36, 0x7c71ccdc, 0x7c75195d, 0x7c7863b9,
+ 0x7c7babf0, 0x7c7ef205, 0x7c8235f6, 0x7c8577c5,
+ 0x7c88b773, 0x7c8bf501, 0x7c8f306e, 0x7c9269bc,
+ 0x7c95a0eb, 0x7c98d5fd, 0x7c9c08f2, 0x7c9f39ca,
+ 0x7ca26886, 0x7ca59527, 0x7ca8bfaf, 0x7cabe81c,
+ 0x7caf0e71, 0x7cb232ae, 0x7cb554d3, 0x7cb874e1,
+ 0x7cbb92da, 0x7cbeaebd, 0x7cc1c88c, 0x7cc4e046,
+ 0x7cc7f5ee, 0x7ccb0983, 0x7cce1b07, 0x7cd12a7a,
+ 0x7cd437dc, 0x7cd7432f, 0x7cda4c73, 0x7cdd53a9,
+ 0x7ce058d2, 0x7ce35bee, 0x7ce65cfe, 0x7ce95c03,
+ 0x7cec58fe, 0x7cef53ef, 0x7cf24cd6, 0x7cf543b6,
+ 0x7cf8388e, 0x7cfb2b5f, 0x7cfe1c2a, 0x7d010af0,
+ 0x7d03f7b1, 0x7d06e26e, 0x7d09cb28, 0x7d0cb1df,
+ 0x7d0f9695, 0x7d12794a, 0x7d1559fe, 0x7d1838b3,
+ 0x7d1b1569, 0x7d1df021, 0x7d20c8dc, 0x7d239f9a,
+ 0x7d26745d, 0x7d294724, 0x7d2c17f0, 0x7d2ee6c3,
+ 0x7d31b39e, 0x7d347e80, 0x7d37476a, 0x7d3a0e5e,
+ 0x7d3cd35c, 0x7d3f9664, 0x7d425778, 0x7d451698,
+ 0x7d47d3c6, 0x7d4a8f00, 0x7d4d484a, 0x7d4fffa2,
+ 0x7d52b50b, 0x7d556884, 0x7d581a0e, 0x7d5ac9ab,
+ 0x7d5d775b, 0x7d60231e, 0x7d62ccf5, 0x7d6574e2,
+ 0x7d681ae5, 0x7d6abefe, 0x7d6d612e, 0x7d700177,
+ 0x7d729fd8, 0x7d753c53, 0x7d77d6e8, 0x7d7a6f99,
+ 0x7d7d0665, 0x7d7f9b4e, 0x7d822e54, 0x7d84bf78,
+ 0x7d874ebb, 0x7d89dc1d, 0x7d8c67a0, 0x7d8ef143,
+ 0x7d917909, 0x7d93fef1, 0x7d9682fc, 0x7d99052c,
+ 0x7d9b8580, 0x7d9e03fa, 0x7da0809a, 0x7da2fb61,
+ 0x7da57450, 0x7da7eb67, 0x7daa60a8, 0x7dacd412,
+ 0x7daf45a8, 0x7db1b569, 0x7db42356, 0x7db68f70,
+ 0x7db8f9b8, 0x7dbb622f, 0x7dbdc8d5, 0x7dc02dab,
+ 0x7dc290b2, 0x7dc4f1ea, 0x7dc75155, 0x7dc9aef3,
+ 0x7dcc0ac4, 0x7dce64cb, 0x7dd0bd06, 0x7dd31378,
+ 0x7dd56820, 0x7dd7bb00, 0x7dda0c19, 0x7ddc5b6a,
+ 0x7ddea8f6, 0x7de0f4bc, 0x7de33ebd, 0x7de586fb,
+ 0x7de7cd75, 0x7dea122d, 0x7dec5524, 0x7dee9659,
+ 0x7df0d5cf, 0x7df31385, 0x7df54f7d, 0x7df789b7,
+ 0x7df9c234, 0x7dfbf8f4, 0x7dfe2dfa, 0x7e006144,
+ 0x7e0292d4, 0x7e04c2ab, 0x7e06f0ca, 0x7e091d31,
+ 0x7e0b47e0, 0x7e0d70da, 0x7e0f981e, 0x7e11bdae,
+ 0x7e13e189, 0x7e1603b2, 0x7e182428, 0x7e1a42ec,
+ 0x7e1c6000, 0x7e1e7b63, 0x7e209517, 0x7e22ad1c,
+ 0x7e24c374, 0x7e26d81e, 0x7e28eb1c, 0x7e2afc6f,
+ 0x7e2d0c16, 0x7e2f1a14, 0x7e312669, 0x7e333115,
+ 0x7e353a19, 0x7e374176, 0x7e39472d, 0x7e3b4b3e,
+ 0x7e3d4dab, 0x7e3f4e74, 0x7e414d99, 0x7e434b1d,
+ 0x7e4546fe, 0x7e47413f, 0x7e4939df, 0x7e4b30e1,
+ 0x7e4d2643, 0x7e4f1a08, 0x7e510c2f, 0x7e52fcbb,
+ 0x7e54ebaa, 0x7e56d8ff, 0x7e58c4ba, 0x7e5aaedc,
+ 0x7e5c9765, 0x7e5e7e56, 0x7e6063b1, 0x7e624775,
+ 0x7e6429a4, 0x7e660a3e, 0x7e67e944, 0x7e69c6b7,
+ 0x7e6ba298, 0x7e6d7ce6, 0x7e6f55a4, 0x7e712cd2,
+ 0x7e730271, 0x7e74d681, 0x7e76a903, 0x7e7879f8,
+ 0x7e7a4961, 0x7e7c173e, 0x7e7de391, 0x7e7fae59,
+ 0x7e817798, 0x7e833f4f, 0x7e85057e, 0x7e86ca26,
+ 0x7e888d48, 0x7e8a4ee4, 0x7e8c0efc, 0x7e8dcd90,
+ 0x7e8f8aa0, 0x7e91462f, 0x7e93003b, 0x7e94b8c7,
+ 0x7e966fd3, 0x7e98255f, 0x7e99d96d, 0x7e9b8bfd,
+ 0x7e9d3d0f, 0x7e9eeca6, 0x7ea09ac1, 0x7ea24761,
+ 0x7ea3f287, 0x7ea59c34, 0x7ea74469, 0x7ea8eb26,
+ 0x7eaa906b, 0x7eac343b, 0x7eadd695, 0x7eaf777a,
+ 0x7eb116ec, 0x7eb2b4ea, 0x7eb45176, 0x7eb5ec90,
+ 0x7eb7863a, 0x7eb91e73, 0x7ebab53d, 0x7ebc4a98,
+ 0x7ebdde86, 0x7ebf7106, 0x7ec1021a, 0x7ec291c2,
+ 0x7ec42000, 0x7ec5acd4, 0x7ec7383e, 0x7ec8c240,
+ 0x7eca4ada, 0x7ecbd20c, 0x7ecd57d9, 0x7ecedc40,
+ 0x7ed05f43, 0x7ed1e0e1, 0x7ed3611c, 0x7ed4dff5,
+ 0x7ed65d6c, 0x7ed7d982, 0x7ed95437, 0x7edacd8e,
+ 0x7edc4585, 0x7eddbc1f, 0x7edf315b, 0x7ee0a53b,
+ 0x7ee217c0, 0x7ee388e9, 0x7ee4f8b8, 0x7ee6672e,
+ 0x7ee7d44b, 0x7ee94011, 0x7eeaaa7f, 0x7eec1396,
+ 0x7eed7b58, 0x7eeee1c5, 0x7ef046de, 0x7ef1aaa4,
+ 0x7ef30d17, 0x7ef46e38, 0x7ef5ce08, 0x7ef72c87,
+ 0x7ef889b7, 0x7ef9e598, 0x7efb402b, 0x7efc9971,
+ 0x7efdf16a, 0x7eff4817, 0x7f009d78, 0x7f01f190,
+ 0x7f03445e, 0x7f0495e3, 0x7f05e61f, 0x7f073515,
+ 0x7f0882c4, 0x7f09cf2c, 0x7f0b1a50, 0x7f0c642f,
+ 0x7f0daccb, 0x7f0ef424, 0x7f103a3a, 0x7f117f10,
+ 0x7f12c2a4, 0x7f1404f9, 0x7f15460e, 0x7f1685e5,
+ 0x7f17c47e, 0x7f1901da, 0x7f1a3dfb, 0x7f1b78df,
+ 0x7f1cb289, 0x7f1deaf9, 0x7f1f2230, 0x7f20582e,
+ 0x7f218cf4, 0x7f22c084, 0x7f23f2dd, 0x7f252400,
+ 0x7f2653ef, 0x7f2782aa, 0x7f28b031, 0x7f29dc86,
+ 0x7f2b07a9, 0x7f2c319b, 0x7f2d5a5d, 0x7f2e81ef,
+ 0x7f2fa852, 0x7f30cd87, 0x7f31f18e, 0x7f331469,
+ 0x7f343618, 0x7f35569b, 0x7f3675f5, 0x7f379424,
+ 0x7f38b12b, 0x7f39cd09, 0x7f3ae7bf, 0x7f3c014f,
+ 0x7f3d19b9, 0x7f3e30fd, 0x7f3f471d, 0x7f405c19,
+ 0x7f416ff2, 0x7f4282a8, 0x7f43943d, 0x7f44a4b1,
+ 0x7f45b404, 0x7f46c238, 0x7f47cf4d, 0x7f48db44,
+ 0x7f49e61e, 0x7f4aefdb, 0x7f4bf87d, 0x7f4d0003,
+ 0x7f4e066f, 0x7f4f0bc1, 0x7f500ffa, 0x7f51131b,
+ 0x7f521524, 0x7f531617, 0x7f5415f3, 0x7f5514ba,
+ 0x7f56126d, 0x7f570f0b, 0x7f580a97, 0x7f590510,
+ 0x7f59fe77, 0x7f5af6cd, 0x7f5bee13, 0x7f5ce449,
+ 0x7f5dd971, 0x7f5ecd8a, 0x7f5fc096, 0x7f60b295,
+ 0x7f61a388, 0x7f62936f, 0x7f63824d, 0x7f647020,
+ 0x7f655cea, 0x7f6648ac, 0x7f673366, 0x7f681d19,
+ 0x7f6905c5, 0x7f69ed6c, 0x7f6ad40e, 0x7f6bb9ac,
+ 0x7f6c9e47, 0x7f6d81df, 0x7f6e6474, 0x7f6f4609,
+ 0x7f70269c, 0x7f710630, 0x7f71e4c5, 0x7f72c25b,
+ 0x7f739ef3, 0x7f747a8e, 0x7f75552d, 0x7f762ed0,
+ 0x7f770778, 0x7f77df26, 0x7f78b5da, 0x7f798b96,
+ 0x7f7a6059, 0x7f7b3424, 0x7f7c06f9, 0x7f7cd8d8,
+ 0x7f7da9c1, 0x7f7e79b6, 0x7f7f48b7, 0x7f8016c4,
+ 0x7f80e3df, 0x7f81b008, 0x7f827b3f, 0x7f834587,
+ 0x7f840ede, 0x7f84d746, 0x7f859ec0, 0x7f86654c,
+ 0x7f872aeb, 0x7f87ef9d, 0x7f88b364, 0x7f897640,
+ 0x7f8a3831, 0x7f8af939, 0x7f8bb958, 0x7f8c788f,
+ 0x7f8d36de, 0x7f8df447, 0x7f8eb0c9, 0x7f8f6c66,
+ 0x7f90271d, 0x7f90e0f1, 0x7f9199e1, 0x7f9251ef,
+ 0x7f93091a, 0x7f93bf64, 0x7f9474cd, 0x7f952957,
+ 0x7f95dd00, 0x7f968fcc, 0x7f9741b9, 0x7f97f2c9,
+ 0x7f98a2fc, 0x7f995253, 0x7f9a00cf, 0x7f9aae70,
+ 0x7f9b5b37, 0x7f9c0725, 0x7f9cb23a, 0x7f9d5c77,
+ 0x7f9e05dd, 0x7f9eae6d, 0x7f9f5626, 0x7f9ffd0a,
+ 0x7fa0a31a, 0x7fa14855, 0x7fa1ecbe, 0x7fa29053,
+ 0x7fa33317, 0x7fa3d50a, 0x7fa4762b, 0x7fa5167d,
+ 0x7fa5b600, 0x7fa654b4, 0x7fa6f29a, 0x7fa78fb2,
+ 0x7fa82bfe, 0x7fa8c77e, 0x7fa96233, 0x7fa9fc1d,
+ 0x7faa953d, 0x7fab2d93, 0x7fabc521, 0x7fac5be7,
+ 0x7facf1e5, 0x7fad871c, 0x7fae1b8e, 0x7faeaf3a,
+ 0x7faf4221, 0x7fafd444, 0x7fb065a3, 0x7fb0f640,
+ 0x7fb1861a, 0x7fb21533, 0x7fb2a38b, 0x7fb33123,
+ 0x7fb3bdfa, 0x7fb44a13, 0x7fb4d56e, 0x7fb5600b,
+ 0x7fb5e9eb, 0x7fb6730e, 0x7fb6fb75, 0x7fb78322,
+ 0x7fb80a14, 0x7fb8904c, 0x7fb915cb, 0x7fb99a91,
+ 0x7fba1e9f, 0x7fbaa1f6, 0x7fbb2496, 0x7fbba680,
+ 0x7fbc27b4, 0x7fbca834, 0x7fbd2800, 0x7fbda718,
+ 0x7fbe257d, 0x7fbea330, 0x7fbf2031, 0x7fbf9c81,
+ 0x7fc01820, 0x7fc09310, 0x7fc10d51, 0x7fc186e3,
+ 0x7fc1ffc7, 0x7fc277fe, 0x7fc2ef88, 0x7fc36666,
+ 0x7fc3dc99, 0x7fc45220, 0x7fc4c6fe, 0x7fc53b32,
+ 0x7fc5aebd, 0x7fc6219f, 0x7fc693da, 0x7fc7056e,
+ 0x7fc7765b, 0x7fc7e6a2, 0x7fc85644, 0x7fc8c541,
+ 0x7fc9339a, 0x7fc9a14f, 0x7fca0e62, 0x7fca7ad2,
+ 0x7fcae6a1, 0x7fcb51ce, 0x7fcbbc5b, 0x7fcc2648,
+ 0x7fcc8f96, 0x7fccf845, 0x7fcd6057, 0x7fcdc7ca,
+ 0x7fce2ea1, 0x7fce94dc, 0x7fcefa7a, 0x7fcf5f7e,
+ 0x7fcfc3e7, 0x7fd027b6, 0x7fd08aec, 0x7fd0ed8a,
+ 0x7fd14f8f, 0x7fd1b0fc, 0x7fd211d3, 0x7fd27213,
+ 0x7fd2d1be, 0x7fd330d3, 0x7fd38f54, 0x7fd3ed40,
+ 0x7fd44a99, 0x7fd4a760, 0x7fd50394, 0x7fd55f36,
+ 0x7fd5ba47, 0x7fd614c8, 0x7fd66eb9, 0x7fd6c81a,
+ 0x7fd720ec, 0x7fd77931, 0x7fd7d0e7, 0x7fd82811,
+ 0x7fd87ead, 0x7fd8d4be, 0x7fd92a44, 0x7fd97f3f,
+ 0x7fd9d3af, 0x7fda2796, 0x7fda7af4, 0x7fdacdc9,
+ 0x7fdb2017, 0x7fdb71dc, 0x7fdbc31b, 0x7fdc13d4,
+ 0x7fdc6407, 0x7fdcb3b5, 0x7fdd02de, 0x7fdd5183,
+ 0x7fdd9fa4, 0x7fdded43, 0x7fde3a5f, 0x7fde86fa,
+ 0x7fded313, 0x7fdf1eab, 0x7fdf69c3, 0x7fdfb45c,
+ 0x7fdffe75, 0x7fe04810, 0x7fe0912d, 0x7fe0d9cd,
+ 0x7fe121ef, 0x7fe16995, 0x7fe1b0c0, 0x7fe1f76f,
+ 0x7fe23da3, 0x7fe2835e, 0x7fe2c89e, 0x7fe30d66,
+ 0x7fe351b4, 0x7fe3958b, 0x7fe3d8eb, 0x7fe41bd3,
+ 0x7fe45e45, 0x7fe4a041, 0x7fe4e1c7, 0x7fe522d9,
+ 0x7fe56377, 0x7fe5a3a0, 0x7fe5e357, 0x7fe6229a,
+ 0x7fe6616c, 0x7fe69fcb, 0x7fe6ddba, 0x7fe71b38,
+ 0x7fe75846, 0x7fe794e4, 0x7fe7d113, 0x7fe80cd4,
+ 0x7fe84826, 0x7fe8830b, 0x7fe8bd83, 0x7fe8f78e,
+ 0x7fe9312e, 0x7fe96a61, 0x7fe9a32a, 0x7fe9db89,
+ 0x7fea137d, 0x7fea4b08, 0x7fea822a, 0x7feab8e4,
+ 0x7feaef36, 0x7feb2520, 0x7feb5aa3, 0x7feb8fc0,
+ 0x7febc477, 0x7febf8c9, 0x7fec2cb5, 0x7fec603d,
+ 0x7fec9362, 0x7fecc622, 0x7fecf880, 0x7fed2a7b,
+ 0x7fed5c15, 0x7fed8d4d, 0x7fedbe23, 0x7fedee9a,
+ 0x7fee1eb0, 0x7fee4e67, 0x7fee7dbf, 0x7feeacb8,
+ 0x7feedb53, 0x7fef0990, 0x7fef3770, 0x7fef64f4,
+ 0x7fef921c, 0x7fefbee7, 0x7fefeb58, 0x7ff0176e,
+ 0x7ff04329, 0x7ff06e8b, 0x7ff09994, 0x7ff0c443,
+ 0x7ff0ee9b, 0x7ff1189a, 0x7ff14242, 0x7ff16b93,
+ 0x7ff1948d, 0x7ff1bd31, 0x7ff1e580, 0x7ff20d7a,
+ 0x7ff2351e, 0x7ff25c6f, 0x7ff2836c, 0x7ff2aa16,
+ 0x7ff2d06c, 0x7ff2f671, 0x7ff31c23, 0x7ff34184,
+ 0x7ff36694, 0x7ff38b54, 0x7ff3afc3, 0x7ff3d3e3,
+ 0x7ff3f7b3, 0x7ff41b34, 0x7ff43e68, 0x7ff4614d,
+ 0x7ff483e5, 0x7ff4a630, 0x7ff4c82e, 0x7ff4e9e0,
+ 0x7ff50b46, 0x7ff52c61, 0x7ff54d32, 0x7ff56db8,
+ 0x7ff58df4, 0x7ff5ade6, 0x7ff5cd8f, 0x7ff5ecf0,
+ 0x7ff60c08, 0x7ff62ad9, 0x7ff64962, 0x7ff667a4,
+ 0x7ff685a0, 0x7ff6a356, 0x7ff6c0c6, 0x7ff6ddf0,
+ 0x7ff6fad6, 0x7ff71777, 0x7ff733d5, 0x7ff74fee,
+ 0x7ff76bc5, 0x7ff78758, 0x7ff7a2aa, 0x7ff7bdb9,
+ 0x7ff7d887, 0x7ff7f314, 0x7ff80d60, 0x7ff8276b,
+ 0x7ff84137, 0x7ff85ac3, 0x7ff87411, 0x7ff88d1f,
+ 0x7ff8a5ef, 0x7ff8be81, 0x7ff8d6d6, 0x7ff8eeee,
+ 0x7ff906c8, 0x7ff91e67, 0x7ff935ca, 0x7ff94cf1,
+ 0x7ff963dc, 0x7ff97a8e, 0x7ff99104, 0x7ff9a741,
+ 0x7ff9bd44, 0x7ff9d30e, 0x7ff9e89f, 0x7ff9fdf8,
+ 0x7ffa1319, 0x7ffa2802, 0x7ffa3cb3, 0x7ffa512e,
+ 0x7ffa6572, 0x7ffa7980, 0x7ffa8d58, 0x7ffaa0fb,
+ 0x7ffab469, 0x7ffac7a2, 0x7ffadaa7, 0x7ffaed77,
+ 0x7ffb0014, 0x7ffb127e, 0x7ffb24b5, 0x7ffb36ba,
+ 0x7ffb488c, 0x7ffb5a2d, 0x7ffb6b9c, 0x7ffb7cda,
+ 0x7ffb8de8, 0x7ffb9ec5, 0x7ffbaf72, 0x7ffbbff0,
+ 0x7ffbd03e, 0x7ffbe05d, 0x7ffbf04e, 0x7ffc0011,
+ 0x7ffc0fa5, 0x7ffc1f0c, 0x7ffc2e46, 0x7ffc3d53,
+ 0x7ffc4c34, 0x7ffc5ae8, 0x7ffc6970, 0x7ffc77cd,
+ 0x7ffc85ff, 0x7ffc9406, 0x7ffca1e3, 0x7ffcaf95,
+ 0x7ffcbd1e, 0x7ffcca7d, 0x7ffcd7b3, 0x7ffce4c0,
+ 0x7ffcf1a4, 0x7ffcfe61, 0x7ffd0af5, 0x7ffd1762,
+ 0x7ffd23a8, 0x7ffd2fc7, 0x7ffd3bc0, 0x7ffd4792,
+ 0x7ffd533e, 0x7ffd5ec4, 0x7ffd6a26, 0x7ffd7562,
+ 0x7ffd8079, 0x7ffd8b6d, 0x7ffd963c, 0x7ffda0e7,
+ 0x7ffdab6f, 0x7ffdb5d4, 0x7ffdc016, 0x7ffdca35,
+ 0x7ffdd433, 0x7ffdde0e, 0x7ffde7c8, 0x7ffdf160,
+ 0x7ffdfad7, 0x7ffe042e, 0x7ffe0d64, 0x7ffe167a,
+ 0x7ffe1f70, 0x7ffe2847, 0x7ffe30fe, 0x7ffe3996,
+ 0x7ffe4210, 0x7ffe4a6b, 0x7ffe52a8, 0x7ffe5ac7,
+ 0x7ffe62c8, 0x7ffe6aad, 0x7ffe7274, 0x7ffe7a1e,
+ 0x7ffe81ac, 0x7ffe891e, 0x7ffe9074, 0x7ffe97af,
+ 0x7ffe9ecd, 0x7ffea5d1, 0x7ffeacba, 0x7ffeb389,
+ 0x7ffeba3d, 0x7ffec0d7, 0x7ffec757, 0x7ffecdbe,
+ 0x7ffed40c, 0x7ffeda40, 0x7ffee05c, 0x7ffee65f,
+ 0x7ffeec4a, 0x7ffef21e, 0x7ffef7d9, 0x7ffefd7d,
+ 0x7fff030a, 0x7fff0880, 0x7fff0ddf, 0x7fff1327,
+ 0x7fff185a, 0x7fff1d76, 0x7fff227d, 0x7fff276e,
+ 0x7fff2c4a, 0x7fff3111, 0x7fff35c3, 0x7fff3a61,
+ 0x7fff3eea, 0x7fff435f, 0x7fff47c1, 0x7fff4c0e,
+ 0x7fff5049, 0x7fff5470, 0x7fff5884, 0x7fff5c86,
+ 0x7fff6075, 0x7fff6451, 0x7fff681c, 0x7fff6bd5,
+ 0x7fff6f7c, 0x7fff7312, 0x7fff7697, 0x7fff7a0b,
+ 0x7fff7d6e, 0x7fff80c1, 0x7fff8403, 0x7fff8735,
+ 0x7fff8a57, 0x7fff8d6a, 0x7fff906d, 0x7fff9361,
+ 0x7fff9645, 0x7fff991b, 0x7fff9be2, 0x7fff9e9b,
+ 0x7fffa145, 0x7fffa3e1, 0x7fffa670, 0x7fffa8f0,
+ 0x7fffab64, 0x7fffadc9, 0x7fffb022, 0x7fffb26e,
+ 0x7fffb4ad, 0x7fffb6df, 0x7fffb905, 0x7fffbb1f,
+ 0x7fffbd2d, 0x7fffbf2f, 0x7fffc125, 0x7fffc310,
+ 0x7fffc4f0, 0x7fffc6c4, 0x7fffc88e, 0x7fffca4c,
+ 0x7fffcc00, 0x7fffcdaa, 0x7fffcf49, 0x7fffd0df,
+ 0x7fffd26a, 0x7fffd3eb, 0x7fffd563, 0x7fffd6d1,
+ 0x7fffd837, 0x7fffd992, 0x7fffdae5, 0x7fffdc30,
+ 0x7fffdd71, 0x7fffdeaa, 0x7fffdfda, 0x7fffe103,
+ 0x7fffe223, 0x7fffe33b, 0x7fffe44c, 0x7fffe555,
+ 0x7fffe656, 0x7fffe750, 0x7fffe843, 0x7fffe92f,
+ 0x7fffea14, 0x7fffeaf2, 0x7fffebc9, 0x7fffec9a,
+ 0x7fffed65, 0x7fffee29, 0x7fffeee7, 0x7fffef9f,
+ 0x7ffff052, 0x7ffff0fe, 0x7ffff1a5, 0x7ffff246,
+ 0x7ffff2e3, 0x7ffff379, 0x7ffff40b, 0x7ffff498,
+ 0x7ffff51f, 0x7ffff5a2, 0x7ffff620, 0x7ffff69a,
+ 0x7ffff70f, 0x7ffff780, 0x7ffff7ed, 0x7ffff856,
+ 0x7ffff8ba, 0x7ffff91b, 0x7ffff978, 0x7ffff9d1,
+ 0x7ffffa26, 0x7ffffa78, 0x7ffffac7, 0x7ffffb12,
+ 0x7ffffb5a, 0x7ffffb9f, 0x7ffffbe1, 0x7ffffc20,
+ 0x7ffffc5c, 0x7ffffc95, 0x7ffffccc, 0x7ffffd00,
+ 0x7ffffd31, 0x7ffffd60, 0x7ffffd8d, 0x7ffffdb7,
+ 0x7ffffddf, 0x7ffffe06, 0x7ffffe2a, 0x7ffffe4c,
+ 0x7ffffe6c, 0x7ffffe8a, 0x7ffffea7, 0x7ffffec2,
+ 0x7ffffedb, 0x7ffffef3, 0x7fffff09, 0x7fffff1e,
+ 0x7fffff32, 0x7fffff44, 0x7fffff55, 0x7fffff65,
+ 0x7fffff74, 0x7fffff81, 0x7fffff8e, 0x7fffff99,
+ 0x7fffffa4, 0x7fffffae, 0x7fffffb7, 0x7fffffbf,
+ 0x7fffffc7, 0x7fffffcd, 0x7fffffd4, 0x7fffffd9,
+ 0x7fffffde, 0x7fffffe3, 0x7fffffe7, 0x7fffffea,
+ 0x7fffffee, 0x7ffffff0, 0x7ffffff3, 0x7ffffff5,
+ 0x7ffffff7, 0x7ffffff8, 0x7ffffffa, 0x7ffffffb,
+ 0x7ffffffc, 0x7ffffffc, 0x7ffffffd, 0x7ffffffe,
+ 0x7ffffffe, 0x7ffffffe, 0x7fffffff, 0x7fffffff,
+ 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+ 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+};
+
+ogg_int32_t *_vorbis_window(int type, int left){
+
+ switch(type){
+ case 0:
+
+ switch(left){
+ case 32:
+ return vwin64;
+ case 64:
+ return vwin128;
+ case 128:
+ return vwin256;
+ case 256:
+ return vwin512;
+ case 512:
+ return vwin1024;
+ case 1024:
+ return vwin2048;
+ case 2048:
+ return vwin4096;
+ case 4096:
+ return vwin8192;
+ default:
+ return(NULL);
+ }
+ break;
+ default:
+ return(NULL);
+ }
+}
+
+void _vorbis_apply_window(ogg_int32_t *d,ogg_int32_t *window[2],long *blocksizes,
+ int lW,int W,int nW){
+
+ long n=blocksizes[W];
+ long ln=blocksizes[lW];
+ long rn=blocksizes[nW];
+
+ long leftbegin=n/4-ln/4;
+ long leftend=leftbegin+ln/2;
+
+ long rightbegin=n/2+n/4-rn/4;
+ long rightend=rightbegin+rn/2;
+
+ int i,p;
+
+ for(i=0;i<leftbegin;i++)
+ d[i]=0;
+
+ for(p=0;i<leftend;i++,p++)
+ d[i]=MULT31(d[i],window[lW][p]);
+
+ for(i=rightbegin,p=rn/2-1;i<rightend;i++,p--)
+ d[i]=MULT31(d[i],window[nW][p]);
+
+ for(;i<n;i++)
+ d[i]=0;
+}
diff --git a/window.h b/window.h
new file mode 100644
index 0000000..6bf4c06
--- /dev/null
+++ b/window.h
@@ -0,0 +1,24 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * ALL REDISTRIBUTION RIGHTS RESERVED. *
+ * *
+ ********************************************************************
+
+ function: window functions
+
+ ********************************************************************/
+
+#ifndef _V_WINDOW_
+#define _V_WINDOW_
+
+extern ogg_int32_t *_vorbis_window(int type,int left);
+extern void _vorbis_apply_window(ogg_int32_t *d,ogg_int32_t *window[2],
+ long *blocksizes,
+ int lW,int W,int nW);
+
+
+#endif